Going paperless

My wife and I were cleaning our house this weekend and it struck me just how many piles of paper we had.  For lots of good reasons you get paper and want to keep it (sometimes it has important info, sometimes it's a keepsake) but I was shocked by how cluttered our house was by the various bits (including copies of bills long paid, expired coupons, etc.) 

Even after brutally going through and recycling there were still lots of stuff we 'had to keep'.  I made a decision this weekend to see if I could transition my household to be largely paperless.

My first step started with a purchase and a change in bill paying:

My purchase was a Fujitsu SnapScan s1500m -- I've seen Fujitsu at Mac world for several years and while I've always kind of liked the idea the price (~$404 at Amazon) was always more than I wanted to pay.  That changed when I spent almost an hour trying to scan in documents with my trusty HP all in one.  The HP is fine for a few items but for any kind of volume it's pretty horrible -- It's slow and can't reliably feed more than a few sheets at a time.

I'm hoping the Fujitsu SnapScan fixes all of that.  My plan is to shove everything I can find that I don't want deleted in there and pdf it up.  For some of the docs I'll keep them in Evernote but for most of them I'll probably just store them away (maybe archive them off every year or so)

For bill pay I enabled a feature that's been on my account for a while.  I switched from Quicken for the PC to doing finances online recently and as part of the switch I went to web based bill pay  -- One feature of online bill pay is they can send the bill directly to your account and you can view & pay online (no more paper -- Get rid of it at the source!)

I'll report back in a few weeks on how things are going..


Even Easier Scanning into Evernote

In my last post I showed a easy way to get images from Image Capture into Evernote.  While that worked great it had one problem:  Image Captured tends to 'forget' the selected application and you need to go find it again.

Fortunately there is an even easier way to integrate Evernote into Image Capture using Automator to create a 'real' Image Capture plugin. (and finally, I get to use Automator for something real!)

Setup is quite easy:  Run Automator and select new 'Image Capture Plugin' .

Then add a single item to the flow -- Run Applescript with the following applescript.

on run {input, parameters}
tell application "Evernote"
create note from file input
end tell
return input
end run

Save it to to the default location and call it something like 'Evernote' and Voila, it shows up in Image capture as a first class citizen (and will never disappear).  Note that this is for Snow Leopard (10.6) - I don't know how if or how this trick will work on earlier version of OS X.

Even Easier!

Scanning Into Evernote with Image Capture

I've got a funny history with Evernote -- Around the time Microsoft came out with One Note, a small company started making something called Evernote.  I actually preferred Evernote over One note but in reality I didn't use either of them much because the data was stuck on one computer.

Since then I've gone through lots of these (Yojimbo, Circus Ponies Notebook, etc.) and while I love the concept I've always given up since my life is just too dynamic.  

I spend a lot of time at work on a PC, then I come home to a Mac but on the road it's all iPhone baby.  With the amazingly good syncing of Evernote and the great native clients (not to mention the web) I've really started to rely on Evernote.

One thing I've started to do a lot of is scanning documents -- A typical use case is I'll be doing bills on a Sunday night and realize I need to call someone during business hours (say to get something corrected or ask a question).  I've started scanning the bill into Evernote, adding a few quick comments and add it to Evernote.

The sync in Evernote works so well that I don't even think about it anymore -- I just add it and forget about it.  Monday morning when I get to work the info is right there and I can make the call to fix the problem (and if it's complicated I can keep a running log of discussions in that note -- Since it includes the original bill I've got it all in one spot -- A lifesaver if you are dealing with insurance companies!)

The one thing that Didn't work as well as I would like was getting the scan into Evernote in the first place.  I would:

  1. Open Image Capture
  2. Scan to PDF
  3. Drag PDF to evernote
  4. Add comments
Fortunately there is a better way (in Snow Leopard anyway) -- It's also dead-easy to set up.  As a one time step step you have to select the 'scan to' drop down in image capture and navigate to the Applications directory and select Evernote.  It will then show up in the drop down (like iPhoto, preview & Mail do by default) -- It becomes a first class citizen in Image capture so you can scan directly into Evernote.  My work flow is now

  1. Open Image Capture & Make sure Evernote is the selected as the Scan To Target (which it is)
  2. Scan and add Comments


Comments (1)

Day with Apple Recap

It was a good, but not great, day.  Apple did their usual very good job of hosting.  The room was comfortable, the food was good, they had nice A/V setups, I got a t-shirt and there was plenty of staff (an amazing amount -- I guess they bring in the retail store employees?)

Sadly there wasn't that much that was new to me -- They billed it as advanced but I would call in intermediate at best (however in fairness I didn't go to the open GL sessions -- I'm sure those would have knocked my socks off)

My biggest complaint?  The amount of high fiving they were giving each other over how great the iPhone is.  Yes, I love my phone but the fact is for the way I use it there are some very capable devices out there that are almost as good (the new 'droid on verizon looks very nice and I still am intrigued by the pre)

At the end of the day you'll still have to pry my iPhone out of my cold dead hands but I can see a day in the not so distant future where there will be lots of choices.

Finaly on the might mouse.  It showed up today and I'm really impressed so far -- I hesitate to say too much until I've used it a few days but so far I'm really liking it.

Going to Apple Thursday (sort of)

Well I'm off to Apple tomorrow (Technically I'm off to the San Jose Mariott).  Approximately every year (usually late fall) Apple holds a series of tech talks.  The last two have been about the iPhone but before that they were about Leopard (before that I'm less certain? Tiger? before my time)

The idea is that as opposed to WWDC which is held in a single location and you have to pay to go to they have a traveling roadshow for one day to hit you with information (and in very uncharacteristic  Apple fashion: It's free)

I went with Isaiah last year and it was overall a pretty good session -- Not anything mind blowing but a nice day with some good information.

The format is one big classroom where they run through approximately 6-8 sessions.  My guess is there will be sessions on Core animation, Open GL, Tools, Core Audio (less sure about that one), Core Data.   Last year Apple bought us box lunches and we got a t-shirt (sadly the shirts were all the same size).

What really excites me is what they may announce  -- Apple doesn't have that many corporate events (let's count: WWDC, Fall Music Announcement, maybe one or two other public press events) so they sometimes uses these forums to make announcements (not huge ones mind, but things relevant to developers)

Here is what I hope (pray) they announce.  An overhaul of the iTunes rating system.  The current one is horribly broken, as a developer it's horribly painful to see people complain of problems and have no way to get a hold of them to help fix it.  I do everything I can to make my support email public but a surprising number of people will just complain in iTunes instead of trying to contact me -- Case in point: About 4 months ago Netflix had a server outage for a weekend…. It didn't effect all apps but it did effect mine so anyone using my app would find a problem.  I actually worked with Netflix engineering over the weekend and by Sunday it was all back up but as you can guess I had a mass of 1 star ratings and 'this app doesn't work, wasted $1.99'.  I was going crazy trying to sort out how to contact them to say "Hey, try it again, it's a server issue that now works" but it's impossible with the current system.

Here is hoping for good news tomorrow...

Two great authors

If you at all enjoy the science fiction genre two authors you must read
All of their books are good but if you've never read them I'd start with "Pandoras Star" (Hamilton) and "A Deepness in the Sky" (Vinge)


Blocks Break Even point.

Something a little different today -- A few experiments using Snow Leopards GCD
Perhaps someone will come along and prove my methodology wrong -- I'm just trying to get a simple 'gut' feel for how well GCD performs and what the 'break even' is

I wrote a simple cocoa app that does a trivial thing -- It starts a timer, then pushes a request to a background thread who's only job is to call the foreground thread to stop the timer.  Below is the code snippit of interest.

-(BOOL) finish {
stopTime=[NSDate timeIntervalSinceReferenceDate];
NSLog(@"time was %f",stopTime-startTime);
return TRUE;

/********* using GCD *************/

-(IBAction) gcd:(id) sender {
startTime=[NSDate timeIntervalSinceReferenceDate];
dispatch_queue_t bgQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(bgQueue , ^{
        dispatch_async(dispatch_get_main_queue(), ^{
[self finish];
-(void) _bg {
[self performSelectorOnMainThread:@selector(finish) withObject:nil waitUntilDone:NO];

/******** Using Perform Selector ***********/

-(IBAction) bg:(id) sender {
startTime=[NSDate timeIntervalSinceReferenceDate];
[self performSelectorInBackground:@selector(_bg) withObject:nil ];

/******** Direct Call *************/
-(IBAction) no:(id) sender {
startTime=[NSDate timeIntervalSinceReferenceDate];
[self finish];

/********** Using Threads ***********/
-(IBAction) _thread {
NSAutoreleasePool *pool=[NSAutoreleasePool new];;
[NSThread detachNewThreadSelector:@selector(finish) toTarget:self withObject:nil];
[pool release];

-(IBAction) thread:(id) sender {
startTime=[NSDate timeIntervalSinceReferenceDate];
[NSThread detachNewThreadSelector:@selector(_thread) toTarget:self withObject:nil];

I actually wrote this 4 ways -- One using the 'blocks' feature, one using 'performSelector', one using NSThread and one that calls 'doit' by itself.  All tests were run on a 8 core Mac Pro (16 virtual cores) at 2.66GHz (this is the current as of this writing Mac Pro).

I also took three measure (the code above doesn't show all of the measurements):

  1. The amount of time to push the work to the background and return
  2. The amount of time to execute a trivial instruction in the background
  3. The amount of time to push to the background and then instantly push a trivial instruction back on the main thread

The results?

Time to push to background & return
Time to execute in background
Time to push to background, execute in background and push results to main thread
 Threads (NSThread)58103198
No threading/backgroundingNANA<1

Bottom line?  GCD offers decent performance improvements over conventional approaches. But even with it's improved performance it's overhead is equal to 'hundreds' of method calls (on my test system I can call > 200 methods in 13us) so if your goal is to offload work you would need to already be facing 100us length tasks (e.g. IO, networking, long computation) before it's clearly a win -- Nothing really new here on that conclusion however as that's always been true with multiple threads

I suspect that cocoa now uses GCD under the hood for a lot of it's work so it's not suprising that the various methods all time in about the same -- I'd be curious to see this run on Leopard (but not curious enough to re-boot into leopard!)
Finally the question could be asked:  How much work would it take before the work equaled the overhead of backgrounding?   I wrote  simple loop to just spin until  the timer reached 150us

-(IBAction) loop:(id) sender {
int i;
startTime=[NSDate timeIntervalSinceReferenceDate];
while ([NSDate timeIntervalSinceReferenceDate]-startTime <150e-6) i++;
NSLog(@"number of iterations was %d",i);

It turns out to be about 2400 iterations for 150us.

A final note -- I'm testing the case of pushing work off on a background thread to improve the user experience -- clearly there are examples of multithreaded applications where you want to maximize processor utilization or set up a complicated processing chain that this analysis doesn't apply to.

My 'walk away' is you need to perform thousands of method calls before you reach the break even point for using any threading or background tasks.
Comments (2)

Snow Leopard

Believe it or not my favorite Snow Leopard feature is image capture.

It now recognizes my scanner (an HP PhotoSmart all-inone) and does a credible job of scanning PLUS you can now choose what to do when a given device (camera) is attached (launch iPhoto, do nothing, etc.)

What's especially nice is the network scanning feature is not natively supported (my printer is network capable and any mac on my network can now scan directly)

It's never mentioned but if you haven't check out Image Capture -- It's become a very nice utility for photos & scanning.

Snow Leopard

This morning Apple announced that Snow Leopard is available this friday, the 28th.  It's sort of amazing how differently Apple announces os.  I mean they are announcing it's availability 5 days before they ship a brand new version of their OS.

I've been using Snow Leopard (from now on referred to as SL) for a few weeks to make sure my plugins are all working.  So far it's all gone smoothly but I'll be planning some extra time this weekend to quick fix any problems discovered.

I wish I could share more about SL as I do have a few things to say but I'll honor my NDA and wait until after it ships.....

I am so Weak V3.0

Just purchased my iPhone 3Gs -- For the THIRD time I swore I wasn't going to get a new phone s the changes weren't big enough (original iPhone & iPhone 3G) but once again I got distracted the shiny newness.
I hope Apple never starts making Cars........
Comments (1)

Next Page -->