ReactiveCocoa Changelog

What's new in ReactiveCocoa 5.0.3

Apr 8, 2017
  • Addition:
  • New KVO API: NSObject.reactive(self:).signal(forKeyPath:). (#3413, kudos to @Burgestrand)
  • New binding targets for UINavigationItem and UITabBarItem. (#3444, kudos to @Marcocanc)
  • New binding targets for UIFeedbackGenerator and its subclasses. (#3447, kudos to @Marcocanc)
  • Changes:
  • NSObject.reactive(self:).values(forKeyPath:) is deprecated and replaced by NSObject.reactive(self:).producer(forKeyPath:). (#3413)
  • The KVO API now supports object values that are of native Swift classes properly. (#3439, kudos to @andersio)
  • A bug that could lead to deadlocks and unexpected nil in the KVO API on any arbitrary key path was fixed. (#3439)
  • Continuous text signals of UITextField now emits the latest value for all editing events emitted. In other words, replacements due to autocompletions are now covered by the signals. (#3442 , kudos to @andersio)
  • Fixed a ObjC swizzling bug that caused ActionProxy not working well with KVO and RAC method interception. (#3435, kudos to @andersio)

New in ReactiveCocoa 5.0.2 (Mar 31, 2017)

  • Addition:
  • New binding target for UITextField: textColor. (#3410)
  • Changes:
  • Fixed a bug causing KVO deallocation exception when using values(forKeyPath:) with a nested key path. (#3418)
  • Fixed a bug causing types with DelegateProxy backed extensions crashed upon deallocation in a specific circumstance. (#3425)
  • Setting target and action of NSControls no longer disrupts the functionality of its RAC extensions. (#3394)

New in ReactiveCocoa 5.0.1 (Mar 11, 2017)

  • Requires ReactiveSwift 1.1.0.

New in ReactiveCocoa 5.0.0 (Jan 20, 2017)

  • This release refocuses ReactiveCocoa on reactive bindings for Apple’s Cocoa and Cocoa Touch frameworks.
  • The core Swift APIs have been extracted to ReactiveSwift, and ReactiveCocoa now depends on it. The old Objective-C APIs from RAC 2.x have been moved to ReactiveObjC and bridging code is available in ReactiveObjCBridge. You can read more about this in the CHANGELOG.
  • The new reactive bindings build on the excellent work done by @neilpa on Rex. AppKit and UIKit objects are extended via a reactive property that houses Signals and BindingTargets to be used with ReactiveSwift’s

New in ReactiveCocoa 4.2.1 (Jul 1, 2016)

  • SWIFT:
  • Added:
  • Signal.debounce()/SignalProducer.debounce() for sending values interval seconds apart
  • ObserverType protocol for type-constrained extensions of Observer
  • flatten() variants that operate on SequenceTypes
  • Fixed:
  • Binding a producer to a MutablePropertyType leaked memory
  • zip()d producers didn’t complete after both sources completed
  • then() didn’t forward interruptions from the original producer
  • TestScheduler didn’t have the correct currentDate while advancing

New in ReactiveCocoa 4.2 (Jun 2, 2016)

  • SWIFT:
  • Added:
  • ActionType protocol for extending Actions (#2828, thanks @ikesyo and @cradnovich!)
  • Signal.sampleWith()/SignalProducer.sampleWith(), which behaves like sampleOn() but includes the value from the sampler (#2792, thanks @victorlin!)
  • PropertyType.map() for transforming properties (#2788, thanks @sdduursma and @filblue!)
  • A Swift playground demonstrating ReactiveCocoa (#2795, #2850, #2930, #2943, thanks @RuiAAPeres, @iv-mexx, and @tomj!)
  • Signal.logEvents()/SignalProducer.logEvents() for debugging (#2839, #2895, #2897, thanks @RuiAAPeres and @ikesyo!)
  • Count- and predicate–based variants of Signal.collect() and SignalProducer.collect() (#2835, thanks @dmcrodrigues!)
  • A convenience initializer to CompositeDisposable that takes a SequenceType of Disposable?s (#2806, thanks @larryonoff!)
  • Signal.uniqueValues()/SignalProducer.uniqueValues() (#2884, thanks @mdiep and @nixterrimus!)
  • Overloads for flatMap() and flatten() for Signals and SignalProducers with NoError (#2885, thanks @mdiep, @NachoSoto, and @andymatuschak!)
  • += variant for CompositeDisposable and ActionDisposable (#2920, thanks @ikesyo!)
  • SignalProducer.init(values: Value...) (#2928, thanks @larryonoff!)
  • SignalProducer.self.merge() (#2925, #2931, thanks @larryonoff and @ikesyo!)
  • SignalProducer.prefix(value:) and SignalProducer.prefix() for providing initial values (#2941 #2954, thanks @inamiy and @RuiAAPeres!)
  • SignalProducer.concat(value:) for concatenating a value (#2954, thanks @RuiAAPeres!)
  • Improved:
  • SignalProducer.replayLazily() no longer uses NSObject (#2811, thanks @ikesyo!)
  • NSNotificationCenter.rac_notifications() will now interrupt if the object deallocates before the producer starts (#2859, thanks @ikesyo and @andymatuschak!)

New in ReactiveCocoa 4.1 (Mar 28, 2016)

  • [improved] Optimized memory usage of Signal.skipRepeats/SignalProducer.skipRepeats (#2718, thanks @trifonov-ivan and @NachoSoto for the review!)
  • [fixed] Added workaround for Swift 2.2.0 compiler bug (#2751, thanks @jckarter for reporting and suggesting the workaround!)

New in ReactiveCocoa 4.0.1 (Feb 2, 2016)

  • [improved] Result has been updated and ReactiveCocoa now uses Result's implementation of NoError.

New in ReactiveCocoa 4.0 (Jan 29, 2016)

  • [Improvement] Added missing UIKit extensions to tvOS target.
  • [Bugfix] Fixed leak in Signal.flatten and SignalProducer.flatten.

New in ReactiveCocoa 4.0 RC 2 (Jan 21, 2016)

  • New Features:
  • Added modify, swap, and withValue to MutableProperty (#2617, thanks @andersio and @ikesyo and @NachoSoto for the review!).
  • Added signal to PropertyType (#2543, #2622, thanks @andersio and @NachoSoto for the review!).
  • Added Signal.empty, equivalent to SignalProducer.empty (#2622, thanks @andersio and @NachoSoto for the review!).
  • Added a new operator: SignalProducer.replayLazily, for multicasting (#2639, thanks @NachoSoto and @JaviSoto, @aschuch, @jspahrsummers, @andymatuschak, @kastiglione, @mdiep, @liscio, and others for reviewing!).
  • Improvements:
  • The Disposable protocol now requires types to be a class (#2641, thanks to @Adlai-Holler and @NachoSoto for the review!).
  • Breaking change: removed default capacity from SignalProducer.buffer() and SignalProducer.replayLazily(). Users are now forced to explicitly decide what the capacity should be in each case (#2672, thanks @mdiep and @neilpa for the review!).

New in ReactiveCocoa 4.0 RC 1 (Dec 15, 2015)

  • Bug fixes:
  • Disposing a flattened SignalProducer now correctly disposes inner producers (#2453, #2582 thanks @neilpa for the fix, and @bdolman, @andymatuschak, @stevebrambilla, @mdiep, @NachoSoto, and others!)
  • Race condition between concat and take that could lead to one-too-many producers being started is now fixed (#2548, #2582 thanks @neilpa for the fix, @JaviSoto for the failing test, and @mdiep / @NachoSoto for the review!)
  • Fixed Signal memory leak (#2586, #2603 thanks @vadim-fueled for the fix, and @neilpa / @NachoSoto for the review!)

New in ReactiveCocoa 4.0 Alpha 5 (Dec 10, 2015)

  • Improvements:
  • Updated code to make it more future-proof for upcoming changes in Swift 3.0 (#2597 thanks @natestedman and @kastiglione / @nachosoto for the review!)
  • Atomic methods now support throwing closures (#2601 thanks @Adlai-Holler and @bencochran / @NachoSoto for the review!)
  • Added explicit Foundation imports to improve compatibility for building with the Swift Package Manager (#2598 thanks @natestedman and @neilpa / @NachoSoto for the review!)
  • Setting explicit deployment target to tvOS 9.0 and watchOS 2.0 in Xcode 7.2 (#2606 thanks @NachoSoto and @paulyoung / @mdiep for the review!)

New in ReactiveCocoa 4.0 Alpha 4 (Dec 1, 2015)

  • New features:
  • Moved flatMapError to Signal (#2531 thanks @NachoSoto and @neilpa for the review!)
  • Using fatalError instead of assert(false) (#2534 thanks @NachoSoto and @neilpa for the review!)
  • [breaking change] Changed toRACSignal from free function to protocol extension on SignalType/SignalProducerType (#2544 thanks @NachoSoto and @neilpa for the review!)
  • Added Signal.merge(signals: [Signal]) (#2526 thanks @NachoSoto and @JaviSoto, @neilpa for the review!)
  • Moved on operator to Signal (#2572 thanks to @NachoSoto and @neilpa, @jspahrsummers for the review!)
  • Added new skipUntil operator (#2576 thanks to @cesteban and @NachoSoto for the review!)
  • Improvements:
  • Don't sign framework for simulators (#2520 thanks @gfontenot and @neilpa for the review!)
  • Changed some class methods/properties to static (#2547 thanks @NachoSoto and @ikesyo for the review!)
  • Updated Result to 1.0 (#2573 thanks to @gfontenot!)
  • New logo! (#2574 thanks to @kaishin!)
  • Optimized BufferState.addValue (#2580 thanks to @Adlai-Holler and @NachoSoto for the review!)
  • Various code improvements to Bag (#2577 thanks @NachoSoto and @mdiep for the review!)
  • Bug fixes:
  • Changed @import to #import for Objective-C++ compatibility (#2524 thanks @ianthehenry and @NachoSoto for the review!)
  • Fixed race-condition in SignalProducer.sampleOn(SignalProducer) (#2560 #2571 thanks to @neilpa and @NachoSoto!)

New in ReactiveCocoa 4.0 Alpha 3 (Oct 28, 2015)

  • [improved] Renamed Event.Error to Event.Failed (#2360, #2505 thanks @bencochran!)
  • [added] tvOS support (#2502 thanks @NachoSoto!)
  • [removed] Stale SWIFT_WHOLE_MODULE_OPTIMIZATION build setting (#2503 thanks @ikesyo!)
  • [fixed] Link redirects in docs (#2507 thanks @dkhamsing!)
  • [fixed] Fix product target and bundle names (#2509, #2511, #2512 thanks @tonyarnold!)

New in ReactiveCocoa 4.0 Alpha 2 (Oct 23, 2015)

  • [improved] Rename generic T and E params (#2349, #2388 thanks @bencochran)
  • [improved] Workaround to prevent NSError from losing its UserInfo in toRACSignal (#2363, thanks @raylillywhite and @NachoSoto for review!)
  • [fixed] filter operator bug (#2367, thanks @bencochran and @NachoSoto for review!)
  • [improved] Change NoError back to an enum (#2370, thanks @dapenggao and @NachoSoto for review!)
  • [added] DebuggingTechniques.md document (#2398, thanks @nikita-leonov and @saniul for review!)
  • [improved] Move flatMap into SignalProducerType extension (#2380, thanks @nikita-leonov and @NachoSoto for review!)
  • [fixed] Explicitly set TARGET_NAME (#2398, thanks @tonyarnold!)
  • [fixed] Update README to flatMapError (#2405, thanks @rpowelll!)
  • [improved] Explicit type annotations in README (#2413, thanks @iv-mexx and @NachoSoto for review!)
  • [fixed] Bag memory problems in Swift 2.1 (#2417, thanks @NachoSoto!)
  • [fixed] Xcode 7.1 beta 2 (#2418, thanks @JaviSoto!)
  • [fixed] -flatten circular reference (#2433, thanks @joshaber and @mdiep for review!)
  • [improved] SignalProducer overloads for Signal operators (#2439, thanks @NachoSoto!)
  • [improved] Added @noescape to Signal.init generator (#2441, thanks @NachoSoto and @andymatuschak for review!)
  • [added] Observer API (#2442, thanks @andymatuschak and @NachoSoto for review!)
  • [added] flatten and flatMap for all Signal and SignalProducer combos (#2449, thanks @NachoSoto and @mdiep for review)
  • [fixed] Infinite recursion in RACScheduler.schedule (#2450, thanks @NachoSoto and @andymatuschak for review!)
  • [fixed] SignalProducer tests for Observer API (#2474 and #2475, thanks @dapenggao and @paulyoung for review!)
  • [improved] Update BasicOperators.md for Swift 2 (#2477 and #2481, thanks @chenjsa!)
  • [fixed] QueueScheduler deprecation warning (#2483, thanks @joshaber!)
  • [improved] Renamed PropertyOf to AnyProperty (#2484, thanks @AquaGeek and @NachoSoto for review!)
  • [added] Bag and Atomic are public (#2489)

New in ReactiveCocoa 4.0 Alpha 1 (Oct 12, 2015)

  • Signal operators are protocol extensions:
  • The biggest change from RAC 3 to RAC 4 is that signal and producer operators are implemented as protocol extensions instead of global functions. This is similar to many of the collection protocol changes in the Swift 2 standard library.
  • This enables chaining signal operators with normal dot-method calling syntax. Previously the custom |> was required to enable chaining global functions without a mess of nested calls and parenthesis.
  • Additionally, this means that SignalProducer operators are less "magic". In RAC 3 the Signal operators were implicitly lifted to work on SignalProducer via |>. This was a point of confusion for some, especially when browsing the source looking for these operators. Now as protocol extensions, the SignalProducer operators are explicitly implementated in terms of their Signal counterpart when available.
  • Removal of |> custom operator:
  • As already alluded to above, the custom |> operator for chaining signals has been removed. Instead standard method calling syntax is used for chaining operators.
  • Event.Sink is now a function:
  • With the removal of SinkType in Swift 2, the Event.Sink type is now just a function Event -> ().
  • Event cases are no longer boxed:
  • The improvements to associated enum values in Swift 2 mean that Event cases no longer need to be Boxed. In fact, the Box dependency has been removed completely from RAC 4.
  • Replacements for the start and observer overloads:
  • The observe and start overloads taking next, error, etc. optional function parameters have been removed. This was necessitated by the change to Event.Sink becoming a function type which introduced an unresolvable ambiguity. They've been replaced with methods taking a single function with the target Event case -- observeNext, startWithNext, and the same for error and completed. See #2311 and #2318 for more details.
  • Renamed try and catch operators:
  • The try and catch operators were renamed because of the addition of the error handling keywords with the same name. They are now attempt and flatMapError respectively. Also, tryMap was renamed to attemptMap for consistency.
  • Added flatten and flatMap for signal-of-producers:
  • This fills a gap that was missing in RAC 3. It's a common pattern to have a hot Signal of values that need to be mapped to "work" -- SignalProducer. The addition of flatten and flatMap over signals-of-producers makes it easy to serialize (Concat) or parallelize (Merge) the work, or only run the most recent (Latest).
  • Renaming T and E generic parameters:
  • Probably coming to later alpha. See #2212 and #2349.
  • Renaming Event.Error to Event.Failed:
  • Maybe coming to a later alpha. See #2360.

New in ReactiveCocoa 3.0 (Oct 12, 2015)

  • Additions:
  • Parameterized types
  • Interrupted event
  • Objective-C bridging
  • Replacements:
  • Hot signals are now Signals
  • Cold signals are now SignalProducers
  • Commands are now Actions
  • Flattening/merging, concatenating, and switching are now one operator
  • Using PropertyType instead of RACObserve and RAC
  • Using Signal.pipe instead of RACSubject
  • Using SignalProducer.buffer instead of replaying
  • Using startWithSignal instead of multicasting
  • Minor changes:
  • Disposable changes
  • Scheduler changes

New in ReactiveCocoa 3.0 RC 1 (Aug 4, 2015)

  • [added] Design Guidelines document (#2152, thanks @neilpa, @iv-mexx, and @brow!)
  • [added] Objective-C Bridging document (#2177, thanks @hirad!)
  • [improved] New README for RAC 3.0 (#2181, thanks @neilpa, @JaviSoto, @andymatuschak, and @kastiglione!)

New in ReactiveCocoa 3.0 Beta 9 (Jul 8, 2015)

  • [added] Basic Operators document (#2063, thanks @iv-mexx, @NachoSoto, and @neilpa!)
  • [fixed] SignalProducer.buffer and MutableProperty.producer deadlocking when replaying (#2147, thanks @ikesyo for the review!)
  • [fixed] Reference to an incorrect operator in the documentation for scan (#2151, thanks @MichaelMcGuire!)
  • [improved] Action now exposes an unsafeCocoaAction property, which makes memory management easier (#2104, thanks @neilpa!)
  • [improved] SignalProducer now exposes a ProducedSignal typealias (#2148, thanks @ikesyo!)

New in ReactiveCocoa 3.0 Beta 7 (May 28, 2015)

  • #2042 disallows recursive signals (thanks @neilpa for the review and fixes!)
  • #2021 replaces SinkOf with a special variant in Debug builds that makes debugging easier (thanks @norio-nomura!)

New in ReactiveCocoa 3.0 Beta 6 (May 25, 2015)

  • #2038 adds Action.events, as well as mapError(), .value, and .error to Event (thanks @neilpa!)
  • #2029 fixes a potential crash in flatten(.Concat) (thanks @ikesyo, @kastiglione, and @NachoSoto!)
  • #2040 adds += as a shorthand for CompoundDisposable.addDisposable (thanks @neilpa!)
  • #2041 fixes a deadlock in flatten(.Latest) (thanks @neilpa for the review!)
  • #2008 fixes CocoaAction crashing in Release builds (thanks @bromas!)
  • #2039 converts NSNotificationCenter.rac_notifications() into a SignalProducer (thanks @neilpa!)
  • #2032 avoids currying syntax to hopefully work around some Swift crashers (thanks @neilpa for the review!)
  • #2017 fixes unbounded memory growth in flatten(.Concat) (thanks @neilpa and @NachoSoto for the review!)

New in ReactiveCocoa 3.0 Beta 5 (May 18, 2015)

  • #1942 fixes UIControl.rac_command potentially calling -endRefresh on a background thread (thanks @liyihe96, @neilpa, and @kastiglione!)
  • #1992 fixes “not safe for application extensions” warning (thanks @neilpa and @NachoSoto!)
  • #1998 fixes type inferencing errors when using flatMap on a producer-of-producers (thanks @ikesyo!)
  • #2011 allows QueueSchedulers to be named for debugging (thanks @NachoSoto!)
  • #2010 fixes promoteErrors not passing through .Interrupted events (thanks @ikesyo!)
  • #2009 fixes a potential crash in flatten(.Concat) (thanks @robrix and @ikesyo!)
  • #1961 adds zip and combineLatest over sequences of signals/producers (thanks @larcus94!)
  • #1975 fixes .Interrupted events from inner producers terminating the outer signal/producer (thanks @neilpa!)

New in ReactiveCocoa 3.0 Beta 4 (May 7, 2015)

  • Works around a variety of Swift crashes and memory corruption
  • Allows flatten and flatMap to operate on a signal-of-producers in addition to a producer-of-producers.

New in ReactiveCocoa 3.0 Beta 3 (May 6, 2015)

  • Updates to Result 0.4.1, which works around architecture mismatches when building
  • Fixes the behavior of buffer() to accept a capacity of values, not events

New in ReactiveCocoa 3.0 Beta 1 (Apr 16, 2015)

  • The first RAC 3 beta, with the new Swift API. Although minor breaking changes may continue to occur, we believe we have reached rough API stability.

New in ReactiveCocoa 2.5 (Apr 14, 2015)

  • Fires -rac_textSignal and -rac_newTextChannel upon more types of editing events (#1767, thanks @infimache!)
  • Removes RACBacktrace, whose functionality is now available directly in Xcode (#1841, thanks @ikesyo!)
  • Fixes spurious “weak receiver” warning in RACObserve (#1860, thanks @numist!)
  • Adds -rac_prepareForReuseSignal to MKMapView (#1866, thanks @kazmasaurus!)
  • Fixes a deadlock in -take: when using a recursive signal (#1877, thanks @kentdotn!)

New in ReactiveCocoa 3.0 Alpha 4 (Apr 14, 2015)

  • Changes in alpha 4:
  • Added a CHANGELOG describing the major changes between RAC 2 and RAC 3 (#1846)
  • DynamicProperty instances now stay alive as long as the target object (#1857, thanks @335g!)
  • Fixes T (#1850, thanks @neilpa!)
  • PLEASE NOTE THE FOLLOWING:
  • This release requires Swift 1.2 and Xcode 6.3 to build
  • Breaking changes will continue to occur
  • The Markdown documentation in the repository has not been fully updated
  • Use at your own risk!

New in ReactiveCocoa 3.0 Alpha 3 (Mar 23, 2015)

  • Fixes various crashes from the default arguments of on(), start(), etc. (#1838)
  • Adds MutablePropertyType protocol to MutableProperty and DynamicProperty, with

New in ReactiveCocoa 3.0 Alpha 2 (Mar 14, 2015)

  • Fix for a Swift crash in timeoutWithError (#1824).

New in ReactiveCocoa 2.4.7 (Feb 14, 2015)

  • Includes minor fixes #1707, #1734, and #1741.

New in ReactiveCocoa 2.4.6 (Jan 17, 2015)

  • Pacify Xcode (#1680).

New in ReactiveCocoa 2.4.5 (Jan 17, 2015)

  • This release fixes LLDB errors on Swift projects that use ReactiveCocoa.

New in ReactiveCocoa 2.4.4 (Jan 7, 2015)

  • Fixed a KVO and object deallocation race: #1627.

New in ReactiveCocoa 2.4.3 (Dec 30, 2014)

  • Updates the dependencies’ folder structure, and moves stuff into Cartfile.private for Carthage 0.5.
  • This release also adds a -deliverOnMainThread operator.

New in ReactiveCocoa 2.4.2 (Dec 30, 2014)

  • Switches to weak references for KVO observation, to hopefully prevent messages sent to deallocated objects.

New in ReactiveCocoa 2.4.1 (Nov 26, 2014)

  • Adds a Cartfile to make integration with Carthage easier.

New in ReactiveCocoa 2.4 (Nov 8, 2014)

  • Xcode 6 support, various enhancements and fixes

New in ReactiveCocoa 2.3.1 (May 22, 2014)

  • Merge pull request #1251 from TimurBK/master
  • Added RAC support for UIImagePickerController.

New in ReactiveCocoa 2.3 (Mar 27, 2014)

  • Observe id deallocation, disposal and memory improvements

New in ReactiveCocoa 2.2.4 (Feb 18, 2014)

  • Guard with RAC_DEBUG_SIGNAL_NAMES, fire -rac_textSignal when clearing

New in ReactiveCocoa 2.2.3 (Jan 25, 2014)

  • Fix -methodSignatureForSelector: for dynamically subclassed classes

New in ReactiveCocoa 2.2.2 (Jan 23, 2014)

  • Reduce memory usage in rac_willDeallocSignal and KVO subscription

New in ReactiveCocoa 2.2.1 (Jan 22, 2014)

  • Fix -class in -rac_signalForSelector:, RACCommand KVO crashes

New in ReactiveCocoa 2.2 (Jan 13, 2014)

  • NSUserDefaults and UITableViewHeaderFooterView support, many fixes

New in ReactiveCocoa 2.1.7 (Nov 12, 2013)

  • Fixes in xcconfigs, RACCommand.enabled, -rac_signalForSelector:

New in ReactiveCocoa 2.1.6 (Nov 9, 2013)

  • Fix RACObserve with NSController, -rac_signalForSelector: fixes

New in ReactiveCocoa 2.0 (Sep 16, 2013)

  • Breaking changes:
  • Simplified and safer KVO
  • Safer commands with less state
  • Fallback nil value for RAC macro
  • Explicit schedulers for time-based operators
  • More powerful selector signals
  • Simpler two-way bindings
  • Better bindings for AppKit
  • More obvious sequencing operator
  • Renamed signal binding method
  • Consistent selector lifting
  • Renamed scheduled signal constructors
  • Notification immediately before object deallocation
  • Extensible queue-based schedulers
  • GCD time values replaced with NSDate
  • Windows and numbered buffers removed
  • NSTask extension removed
  • RACSubscriber class now private
  • Additions and improvements:
  • Commands for UIButton
  • Signal for UIActionSheet button clicks
  • Better documentation for asynchronous backtraces
  • Fixed libextobjc duplicated symbols
  • Bindings for UIKit classes
  • Signal subscription side effects
  • Test scheduler

New in ReactiveCocoa 1.9.7 (Sep 4, 2013)

  • Various critical fixes

New in ReactiveCocoa 2.0 RC 2 (Sep 4, 2013)

  • Add missing import, fix casting warning, improved lifting docs

New in ReactiveCocoa 1.9.6 (Aug 15, 2013)

  • concat bug fix
  • documentation improvements