CheckBook and CheckBook Pro 2.5.7 Now Available!

Our primary concern in this release is document stability. In addition to safeguards to protect your data’s integrity, we’ve created options to repair damaged documents and restore the most recent automatic backup. Did you know CheckBook makes automatic backups about once a week? It does! But…please…use Time Machine or another solution to backup everything in case of a catastrophic hardware malfunction. We’ve thrown in some minor tweaks all around, plus a fix for the issue preventing previous versions from opening properly on the OS X 10.11 El Capitan public beta.

What’s new?

In CheckBook 2.5.7

New features:

  • Now you can skip any number of rows when importing CSV or tab-delimited text.

Fixes:

    • Resolves a pesky delay when entering data in split line items.
    • Provides more consistent automatic check numbering.
    • Prevents a hang or crash when managing subcategories.
    • More reliably remembers the last date you entered when you reopen a document.
    • Does a better job locating documents from older versions during a software update.
    • Minor automatic backup fixes
    • Minor user interface adjustments and performance enhancements.

In CheckBook Pro 2.5.7

New features:

  • Now you can skip any number of rows when importing CSV or tab-delimited text.

Fixes:

  • Resolves a pesky delay when entering data in split line items.
  • Provides more consistent automatic check numbering.
  • Corrects a potential issue where text in the All Accounts Search field may spontaneously combust.
  • More reliably remembers the last date you entered when you reopen a document.
  • Resolves a potential issue in All Accounts where Search and Smart Folder settings may be ignored when Entries are voided or duplicated.
  • Does a better job locating documents from older versions during a software update
  • Minor automatic backup fixes.
  • Minor user interface adjustments and performance enhancements.

Get the Update

If you purchased from the Mac App Store, open the Mac App Store app and click the Updates button at the top of the window. Be sure you’re signed in with the same Apple ID you used for your original purchase.

CheckBook 2.5.7:  http://splasm.com/checkbook/update.html

CheckBook Pro 2.5.7:  http://splasm.com/checkbookpro/update.html

After You Install

The first time you launch the application, you may be asked to update or upgrade your document. Agree to the update and your document will be ready to work with 2.5.7.

If you see a message about a damaged document, please visit http://www.splasmata.com/?p=2855 for details.

If you open the application and your data doesn’t immediately appear, try going to the File menu, down to the Open Recent submenu, and clicking each document there until your data appears. If this doesn’t cure all, don’t panic. Get in touch at support@splasm.com so we can help out!

In CheckBook, Development, General | Leave a comment

About document damage in CheckBook and CheckBook Pro

Have you seen a message in CheckBook or CheckBook Pro about a damaged document or a damaged database?  Don’t panic.  We can help you with that.  Please read the rest of this post for details and how to proceed.

First, unless you’ve been using version 2.5.7 or later for some time, we’re almost positive the damage occurred while you were using an older version of CheckBook or CheckBook Pro.  We’ll explain why and how the current version won’t let you down in the same way, but we feel it’s very important for you to know that damaging your document is not the very first thing 2.5.7 will do.  It’s trying to do exactly the opposite.

In versions 2.5 to 2.5.5, CheckBook and CheckBook Pro weren’t able to detect and tell their user about all the forms of damage that could happen to one of their documents.  This sometimes led to situations where a document became damaged but was still almost usable, and sometimes the application would let you continue using the document without telling you.  This would go on for days or weeks without you knowing the damage was done, until you hit a point where the document just couldn’t be used anymore and you’d either contact us for help or throw the app out the window.

Thank you for not throwing the app out the window.

We’re responsible for not telling you your document was damaged as soon as possible and we apologize for the grief we caused.  To ensure this won’t happen again, and to repair your document in many cases, we made some very serious improvements in version 2.5.7:

  • We reworked the way CheckBook and CheckBook Pro store your data to be sure that some forms of damage just can’t happen at all.
  • We gave CheckBook and CheckBook Pro the ability to tell you when your document is damaged.  You might see a scary message about damage immediately upon upgrading from previous versions but don’t panic.  Keep reading.
  • We taught CheckBook and CheckBook Pro how to repair some forms of damage that occurred in previous versions, and if the damage can’t be repaired, how to restore the most recent fully-functional automatic backup.

If you see a message about a damaged document when you open CheckBook or CheckBook Pro 2.5.7, look at the buttons below the message.  If you see an option to repair the document, try it.  If the document can’t be repaired and you’re given the option to restore a backup, try it.  If at any point you see a bunch of errors about the database, click the OK button, quit and open CheckBook again, and try restoring instead of repairing.  If you feel overwhelmed by errors and need a hand sorting it out, click the Send to Splasm… button below the errors so we can have a look and help out.  We’d be happy to!

One thing about restoring an automatic backup:  The older the backup, the more things won’t be quite the way you left them.  Any Entries you created since the backup was made won’t be there – and neither will any Scheduled Entries you might have committed.  So you might notice some Entries are missing or Scheduled Entries you already committed appear in the Schedule Reminder.  We wish there was a way around it but that’s just how it works when you restore an older version of your data.

Thank you again for allowing us to explain the changes we’ve made in CheckBook and CheckBook Pro 2.5.7.  Your support is paramount and we’re committed to doing our best to return that support in kind when you need it.  Please get in touch at support@splasm.com if you need any additional details.

In CheckBook, Development, General | Leave a comment

CheckBook and CheckBook Pro on El Capitan Public Beta

Have you, brave soul, installed the OS X 10.11 “El Capitan” public beta and noticed your copy of CheckBook or CheckBook Pro won’t open?  Here’s some good news:  CheckBook and CheckBook Pro 2.5.7 come with a workaround to ensure each application launches properly on El Capitan – and the Golden Master for each is already available!  Grab a copy now and you’ll also enjoy a healthy dose of fixes, plus a document repair and restore feature that might come in handy.  Your data and preferences should carry over automatically, and you can even use these builds in place of the Mac App Store version until the “official” release is available there.  So what’re you waiting for?

Click here to learn more about CheckBook and CheckBook Pro 2.5.7GM.

In CheckBook, General | Leave a comment

iBooks vs. Audiobook Chapters

Update 9/21:  Chapters appear to work very well in iBooks on iOS 9.  iBooks might show you the cover artwork instead of the current chapter artwork when you resume playback, and it’ll still display “(null)” when the author/artist tag is blank, but it seems Apple’s resolved all other issues that we’ve come across.  If you encounter anything strange, would you let us know at support@splasm.com?  Thank you!

Update 7/22:  Apple’s acknowledged the issue exists but can’t be specific about when a fix will be available.  It may be coming in iOS 9, and the public betas seem fine, but things are subject to change so we can’t bank on it.  We’ll let you know when we have more details.

The relationship between iOS and audiobook chapters, a love-hate tangle since iOS turned 5, has taken a bit of a turn with iOS 8.4. Audiobooks have moved from the Music app to iBooks, cause for a religious froth-fest, in some circles, and the user interface has gained a welcome tweak or two…but a nasty surprise awaits those with audiobooks with multiple chapters in a single file and artwork assigned to one or more of those chapters: the progress bar doesn’t update properly when playback reaches the second or later chapters, and some users report their bookmarks aren’t restored correctly when they return to an audiobook in progress.

This turn, unfortunately, means audiobooks created with our Audiobook Builder may be affected.

Researching the issue, we’ve found it’s definitely only at play when more than one chapter is defined and chapter artwork is both present in a video track and referred to as such by the audio track, in the same way chapter titles work (a text track referred to as a chapter list by the audio track).  Disable the chapter artwork track or simply remove the reference between the audio track and the artwork track and things settle down nicely. Since the artwork is displayed properly, our take, then, is something isn’t quite peachy-keen in the way iBooks hooks up the user interface when artwork is present.  And, at present, there isn’t a way to make iBooks play nice with your pre-existing audiobooks.  You can listen still listen to them, still use the nifty, new swipe gestures, and even scrub the playhead while listening – it’s just that the playhead won’t move and the time indicator will remain at 0:00 under the chapter artified circumstances we’ve researched.  Bookmarks may be problematic, though isn’t that just par for the course?

For now, when you’re creating a new audiobook with multiple chapters, don’t set up cover art or chapter art before building in Audiobook Builder and everything should be fine in iBooks.  You can even assign cover art in iTunes without any ill effects (for compatibility with as many iDevices as possible, Audiobook Builder copies cover art to each chapter, bringing on the iBooks issues, while iTunes doesn’t).

And now our hands are outstretched, our bug reports uplifted to Apple for a little clarification of intent.  The best-case scenario is a fix in iOS 8.4.1 or iOS 9, whichever comes first.  The forthcoming public beta of iOS 9 may even provide the answers we seek…  We’ll keep you posted as we learn more.

In Audiobook Builder, General | Leave a comment

iPhone’s got the bends – oh no!

Just for a goof, you know. We don’t bend phones for a living.

In General | Leave a comment

Swift?

About how swift Apple’s new programming language isn’t.

Update:  Hi there!  I’m humbled to tell you that, as a few readers have pointed out, the original Swift and Objective-C results in this post were taken from unoptimized builds.  We rebuilt the evening of 6/4 with optimizations turned on (-O), and ensured compiler optimization of dead code, ie. assignments being culled because their results aren’t used later, is not a factor (you’d see results orders of magnitude faster, and when we increase the magnitude of our loop count we do see results an order of magnitude slower).  We used Swift’s Ints and C’s ints unless otherwise noted.  With adjusted numbers in-hand, this post has become something of a living document.  Look for new numbers and notes (some stricken!) throughout.  -Keith

Swift may be the best thing happening to development on the Mac and iOS right now, with a lot of modern features that’ll help developers new to our platforms and, potentially, make life easier for the older curmudgeons.  There’s one thing that’s stuck in my craw since the big reveal yesterday, though:  Apple would have you believe Swift is, well, swift.  But rewind that keynote video, babe, back to about the 105:00 mark.  Stop staring at Craig’s hair.  Listen.  Really listen.  Yep, there’s applause at the initial announcement, but keep listening.  Three or four sad claps at the first benchmark comparison and zero at the second.

Why is that?

Because no one in the room bought it?

Being somewhat sensitive to most performance claims myself, I set up a test app in both Swift and Objective-C.  Loop a million times, perform a few esoteric bits each time through the loop.  Run the code three times, average the elapsed time.  Tweak here and there to try to get the best numbers.

Here’s what happened:

 

Loop a million times

Swift:  0.0036s 0.00061s

Objective-C:  0.0021s (1.7x faster) 0.000021s (29x faster)

No work done in the inner loop, just iterate.  Swift actually performs pretty well here.  It’s a straight C exercise on the Objective-C side, with a conditional assignment in the inner loop to guarantee the compiler didn’t optimize the loop out entirely.  Note that in Swift I used a for loop with an index variable incremented with x = x + 1, because ++ is far slower and for _ in 0…999999 is glacial.

 

Increment

Swift:  0.024s 0.00092s

Objective-C:  0.0023s (10.4x faster) 0.00002s (46x faster)

Strangely, Swift has a major performance issue with the ++ operator.  It’s roughly 6x s l o w e r than x = x + 1, which is the basic code I used to get the best performance.  On the Objective-C side, we placed a conditional assignment in the inner loop to guarantee the compiler didn’t optimize the loop out entirely.

 

Assign

Swift:  0.024s 0.00066s

Objective-C:  0.0022s (10.9x faster) 0.000021s (31.4x faster)

This is a simple x = y.

Yeowch.  I’m guessing Automatic Reference Counting is involved on the Swift side.  Retaining and releasing a million times would bring on the hurt.  On the Objective-C side, we placed a conditional assignment in the inner loop to guarantee the compiler didn’t optimize the loop out entirely.

 

Append native string to native array

Swift:  6.49s 0.33s

Objective-C:  0.046s (141.1x faster) 0.042 (7.9x faster)

In Swift I used an Array of String.  In Objective-C I added an NSString to an NSMutableArray with no optimizations or tweaks.  It would be even faster if we dropped to CFMutableArrayRef because in so many cases you don’t need to retain what you add to an array, something NSMutableArray does automatically – and, behind the scenes, Swift is almost surely doing the same because of how Automatic Reference Counting works.  Straight C arrays would be blinding.  ARC is not a performance optimization.

 

Append native integer to native array

Swift:  6.51s 0.3s

Objective-C:  0.023s (283x faster) 0.023s (13x faster)

In Swift I used an Array of Int.  In Objective-C I added an NSNumber to an NSMutableArray with no optimizations or tweaks.  It would be even faster if we dropped to CFMutableArrayRef because in so many cases you don’t need to retain what you add to an array, something NSMutableArray does automatically – and, behind the scenes, Swift is almost surely doing the same because of how Automatic Reference Counting works.  Straight C arrays would be blinding.  ARC is not a performance optimization.

 

Concatenate two strings

Swift:  3.47s 3.15s

Objective-C:  0.27s (21x faster) 0.27s (11.7 faster)

In Swift, the inner loop looked like this:

    theString3 = theString + theString2

In Objective-C, the inner loop looked like this:

    theString3 = [theString stringByAppendingString:theString2];

 

What’s the deal?

We can’t know exactly what’s going on behind the scenes, but my hunch is some of what we take for granted in Objective-C – the straight C scalar data types – are actually classes in Swift.  And the more you rely on classes, the more Automatic Reference Counting is in there somewhere, retaining and releasing like there’s no tomorrow, often for no good reason.

Coders are constantly balancing trade-offs.  Raw performance isn’t always the priority, because you have to conceptualize, code, iterate, debug, extend, refactor, share, ship, maintain, and support.  One team’s acceptable trade is another team’s hell stew.  For example, we don’t use – surprise! – Automatic Reference Counting at Splasm because, frankly, it’s around 40% slower in some cases, so we’ll leave ARC off and take that 40% back (and we enjoy manual memory management, thank you very much).  Other teams wouldn’t give up ARC even if paint dried faster.  Did I say ‘if’?  Different teams.  Different values.

Swift has performance issues in our tests that other teams won’t be concerned about.  It’s also a very new language that Apple will improve over time.  Though Apple claims big performance gains, we think comparing Swift to Objective-C right now is a little premature.  We’ll continue to play with it, learning and sharing with the community, but for the foreseeable future, unless the performance issues evaporate – or Apple abandons Objective-C altogether – we’ll be developing in Objective-C.  It has its issues, but well-established design patterns, direct control of memory, more readable (and self-documenting) code, and terrific performance for our users are not among them.

Note that the original results were taken from unoptimized builds.  When we rebuilt, Swift became much swifter in some cases and slower, relatively, in others.  The closest it came to Objective-C’s performance was a factor of 6.4x slower, and that was in a test we didn’t show results for (appending to an NSMutableArray instead of an Int array in Swift).  We’re considering porting a small project over to Swift sooner than later to get a better idea of real world numbers…and we’ll share those when we have them!

In Development, General, Opinion | Leave a comment