Notablemeals is a finalist!

I'm happy to say that my newest iphone app (Notablemeals) is a finalist in the evernote developer competition. Please vote for it!

Comments (2)

Evernote Competition

I've been working frantically on an entry for the Evernote Developer Competition -- What I eventually came up with was an idea called "Notablemeals" An app that would let you easily capture any meals that were important for you and store them in Evernote.

This is certainly a scratch your own itch kind of app -- I've always weirdly wished I had more memories of important meals  -- A couple of time while traveling I've tried to take a picture of my food but I'm always disappointed with the results (who needs a bunch of random food snapshots mixed in with a picture of the pope -- who needs that?

Anyway I was on a crazy tight schedule (it was about 15 days until the end of the competition and I had *zero* lines of code written) and I knew that if I wanted any hope at all of  being competitive I need some help in the design department.

Fortunately  KaL MichaeL was available and after a whirlwind two weeks I'm happy to say we were able to turn out app in this last sunday evening with 'hours' to spare :-)

 I don't know how it will do in the competition but I do know that I've never felt better about an app.  It's design is great thanks to KaL, it's  code is some of the cleanest I've ever done and it's one of the more intuitive apps I've produced.

I've not submitted it to Apple yet but I hope to do so in the next day or so...  The website should be up in the next few days and I'm looking forward to getting more feedback on ways to improve it.

Google IO 2011

I'm going.



If you go to this link

You'll see what appears to be some sort of joint marketing or sales deal -- It's not.

I have no idea why Ralf thinks he can do this but I have nothing to do with it and would strongly recommend you not use this service.

Won't be on the Mac App store (for now at least)

I've been working on my first 'real' Mac App (real in the sense that it's standalone, not RapidWeaver related as such and will actually be completed)

One thing I've decided (for now anyway) is that I will *not* offer it on the Apple Mac App store.

Why?  I want to actually have a relationship with my customers -- If I go to the Apple Mac App store then Apple is in the middle without adding any real value (except perhaps for a bigger reach)-- I never have details of who my customers are and they feel 'extra removed' from me.

When you buy anything from my store I send you a receipt with (among other things) information about how to contact us if there is a problem, when you download a new version you get it from my server with my release notes (via sparkle) and if I find  a problem I can push out a fix in minutes.  -- No such luck with the Apple Mac App store.

By the way my new app syncs flickr & iPhoto, hit this if you are interested in beta testing.

Handles Content as Compound Value

Bindings in cocoa are un-freaking amazing -- You can change a model parameter and bada-bing-bada-boom the UI updates... Fantastic!

For the most part they just sort of work but I've always been a little confused by all of the options -- Honestly the only one I ever really played with was 'updates continuously' which does what it says (updates happen instantly and it doesn't depend on hitting 'return' or tabbing out of the field.)

The docs are actually here but I've mostly ignored them, until tonight.

Tonight my nemesis was 'Handles Content as Compound Value'

Why? you may ask -- it's perfectly clear what it does.  From the docs:

Handles Content As Compound Value
A Boolean value that determines if the content is treated as a compound value.
Model objects can store relationship-like data in "compound" values and it may be necessary to use a reversible value transformer to translate those compound values temporarily into smaller pieces, that can be displayed and edited individually. See “Bindings Message Flow” in “Cocoa Bindings Programming Topics” for more information.
If YES, the content of a controller is treated as a compound value and—by using a reversible value transformer—will apply changes as a single value to the master model object if anything changes (edits, additions, removals).

 Errrrr.. got that.  What the docs should have said was

Handles Content as Compound Value
Click this if you plan on binding an NSArrayController to a NSUserDefaultsController.

Yup -- That is the magic trick to get it to all work.  If you don't do that many odd things happen but mostly the bindings don't work right.  Apparently (?) the NSUserDefaultsController applies a value transformer for storing the dictionary entries.  Don't ask me why as it's not documented but that appears to be the case.

Just tossing this out for to the googleverse so some person flummoxed why they can't easily bind up their NSArrayController to a NSUserDefaultsController.
Comments (1)

Evernote Power tip

Here is an idea -- whenever I pass one of those heart rate machines that are avaialble at drug stores and the ilk I jump on, get a reading and then using the Evernote  iPhone app I take a picture of the results.

Then every few weeks I go through and enter the date/time and readings into a spreadsheet (well in my case I enter it into my fitbit account but the point is to keep track of it somewhere)

What makes Evernote great about this is it syncs to all of your computers/devices so when you have a few moments you can go through and transfer the results of your measurements (I then delete them as I have no need to keep pictures of my measurements).  Evernote is also great because you can use the thumbnail view to quickly find all of the measurements you haven't entered.  

No fuss, no muss and a  hassle free way to keep long term track of your blood pressure.

Fwd: Untitled snapshot note


Snow Leopard enumerateObjectsWithOptions:usingBlock

One of the niftier things in Snow Leopard are blocks -- It's a way to encapsulate a bit of code and pass it around to do useful things.

I won't go into the hairy details but suffice to say it lets you do some interesting design.  Recently I was faced with the problem of looking through a 'large (30,000+) array of strings to find matchess.  The simple 'containsObject' feature of NSArray was "ok" but slows down as the size increases.

As an experiment I thought to write a version that use blocks and concurrent searching.  NSArray has a enumerateObjectsWithOptions:usingBlock: method that exactly fit the bill.

So... replace:

foundIt=[self.items containsObject:itemToFind]


[self.items enumerateObjectsWithOptions:NSEnumerationConcurrent
usingBlock:^(id s,NSUInteger idx,BOOL *stop){
    if ([(NSString*)s isEqual:itemToFind]) {

The results? I tried 4 experiments for a variety of sizes.

In every case the blocks version was faster for ~8000 elements or more (below 8000, the startup costs of blocks are too much) -- These results are on a 8 core mac pro so it's possible it could be worse on a dual core machine but the result would be the same -- at some point there the blocks version will win.


My first Android App

As my previous post mentioned I went to google IO -- One of the smarter things they did was shower us with cell phones so I've spent the last few weeks (on and off) doing Android development.

I just published my first app to the Android marketplace (it's a free desktop widget that monitors your Tender inbox -- Tender is a support system I use)

My thoughts?

  • Android development environment is both better and worse than Xcode.  The reasons are much too numerous to go over but the main differences are Eclipse (Android) has some amazing run time type checking and validation -- If you type something in wrong in almost any part of the IDE it let's you know and recommends ways to fix it (it's really amazing that way) but it's also kind of slow & clunky (and very un-mac like).  Xcode is closer to the metal and feels like a good mac app but gives you more rope to hang yourself (on the plus side you can do some crazy cool stuff with Xcode that I haven't seen the equivalent in Android)
  • Learning Java isn't as hard as I had feared... Partly because I used to do a lot of C++ and it's pretty close to that and partly because it's not so different than Objective C in many ways.  Java as a language is actually pretty remarkably well thought out.
  • The component model of Android development is very interesting and in many ways innovative..  You can do a lot in android with very little work.
  • Targeting Android devices is interesting -- you don't know for sure the processor, screen size, input methods, etc. that your customer has so you work at a more abstract layer (for example I had to include three pieces of artwork all at different resolutions to account for that).  At the end of the day however it's just a matter of adjusting workflows and sort of accepting that on some devices it may not look perfect (it's very similar to designing web pages where you don't know for sure what kind of browser or screen size the viewer will have).   iPhone is very targeted -- you know exactly what the user will see and can really target that experience.
  • Publishing to the marketplace is an amazingly different experience.  I finally decided I basically 'exported it', uploaded it, typed in a description and added a screenshot, hit publish and *literally* within about 45 seconds I checked the Markeplace and it was live!  If I find a bug I can re-publish it at a whim and have it live within minutes... Amazingly nice
In the end it was a pretty enjoyable experience -- I've been using Android for the last several weeks but I believe that will come to an end about June 24th.....  I'll probably not do a lot more developing in Android but the experience is pretty reasonable and the phones are getting better and better. 

Long term I suspect Android will become the market leader and iPhone will be relegated to a second or third spot -- This is partly because Android is already at more or less feature parity (actually better in features) and is fast becoming 'pretty enough'

Having said that  a second or third place spot in the Cell phone market is still pretty freaking big and Apple will continue to appeal to a certain kind of customer who really appreciates the experience they provide.

For me, as I said, I'll be in line to get  an iPhone 4 and on June 24 I suspect my Android will stop being carried around very often.


Google IO

In case you didn't catch my various tweets (@loghound) you might have missed that I was at Google I/O last week.

Similar to WWDC, I/O is a developers conference part education and part evangelism for developers to use their technologies.  Also similiar to WWDC, I/O had a jam packed keynote (more on that later) -- This will likely be a long post as I feel the need to say a lot.

WWDC '10
First let me talk about WWDC '10.  Sadly I'll not be attending WWDC this year -- I've gone for the last 3 in a row, the first year it blew my mind.  Year two was satisfying but quite frankly last year was dissapointing.  This is mostly because the material they covered was largely a repeat of the prior year and partly because of the iPhone focus.  When I saw the agenda this year and realized it would be all iPhone and probably (most likely) a repeat of prior years I took a pass.

Google I/O
Fortunatley I had signed up for Google I/O well in advance.  I use a number of Google products and have considered going for a few years.  While I was dissapointed to miss WWDC I was pretty excited going into  I/O.

Google I/O vs. WWDC
It was fun to compare and contrast the two conferences.  Held at the same Venue (Moscone West) at almost the same time of year (only about three weeks apart) for the (more or less) same crowd was interesting.  In bullet points my observation(s) were.

  1. I/O is much more open -- Engineers actually go 'off script' and answer questions (and sometimes even (shock) share things they shouldn't).  This is both good and bad as the Polish to most I/O presentations was quite a bit less than WWDC.  Some of the material was poorly done or hard to follow and some sessions made poor use of time (one guy flew through his slides in 20 minutes and then didn't know what to say for the rest of the hour!).  By comparison WWDC is always well polished -- Material is timed almost perfectly and the sessions last precisely the same amount of time.  Winner: I/O  -- While I wish a few of them had been a bit more polished I felt like I was getting information at a more 'engineer to engineer' level with less fear of going off script.
  2. Focus.  WWDC is about one thing (ok, two things) -- Mac and iPhone/iPad.  there is (used to be) at IT track also but the majority is for developers.  You can walk into almost any session and get something useful out of it.  Google I/O is all over the map.  It went from new storage products to chrome web browser extensions to brand new programming languages.  While they had 'tracks' you could follow if you were there for 'one reason' I had a tough time because there are a number of things I wanted to do -- Partly I wanted to sharpen some skills and partly I wanted to learn.  As a consequence I jumped from session track to session track probably a bit much.  Winner: WWDC
  3. Material Share:  WWDC puts videos up afterwards -- it used to take months but last year it was about 2 weeks.  Google puts them on youtube (soon?) for everyone.  Winner: I/O -- I was able to watch sessions from last year coming in which helped a lot.   Apple has this misguided approach to keep information 'secret' somehow (crazy!)
  4. Food:  Both had catered service for breakfast, lunch & snacks.  Apple provided Odwalla drinksk while google provided more varieties of bottled water and soda.  Winner: Draw
  5. Other:  both conferences had areas for getting work done.  Google went one further with foosball tables, pool tables &  wii.  Google also had charging stations (WWDC used to but dumped it last year) and a 'tech desk' to get emergency parts.  Winner: I/O
  6. Non Conference.  Both events have parties, I missed the I/O one so can't comment on that.  At WWDC they have the sessions, stump the experts and ADA.  Google had sessions and the developers sandbox where devs showed off their google solutions.  Winner:  I/O
  7. Length:  WWDC is 5 days (well, 4 1/2 as the first day is mostly keynote) and that is 'about right'.  I/O is 2 days (way too short).  Winner: WWDC
  8. Freebies.  WWDC gives you a t-shirt and computer bag (the last three years).  Perhaps this year the'll get something more but I doubt it.  I/O gave me two t-shirts, socks (Google TV Sock no less) and two phones each with a month of service (Motorola Droid and HTC Evo).  Winner: I/O (not even a fair fight)
  9. Value:  WWDC $1600 for 5 days.  I/O: $400 for two days (plus lots of hardware freebies to help you develop).  Winner: I/O
  10. Keynote:  It's impossible to beat a apple keynote -- the google one was well done and by any normal standards exciting and fun (you should have heard the crowd when they gave us all HTC Evo's) but you cannot beat a Steve Jobs Keynote:  Winner: WWDC
          Google I/O Schwag

Finally on Google vs. Apple -- Google poked a lot of fun at Apple (and I'm sure we'll see it poked back in a few weeks) -- It's been surprising to me to see how many people have come out of the wood work trying to defend apple or claim Google looked defensive.

People:  While they work together on many things (Almost all Google employees used Macs and Apple uses Google services for much of the iPhone) they are in many ways competitors.   Of course Google will try to use it's developer conference to attack who they perceive is the biggest threat (just like Apple has against Microsoft and I'm sure will do so against Google this year) -- It's actually a compliment (imagine if Google had bashed RIM or microsoft during the keynote so heavily and ignored Apple.  That, my friends, would have been a slap in the face!)

At the end of the day though what you have to do (and what I am still processing) is do I buy it?  Honestly Google made a lot of very valid points.  While I love my Apple products the fact is they are limited by what Apple/Jobs thinks they should do.  Having played with my Android phones these last weeks I've been impressed with the kinds of integration and capabilities they have (although they are not nearly as pretty as an iPhone).  

I'm not sure where my head is at the end of the day -- I decided to try to use my Android exclusively for the next week or two to see how it works for me -- I'll report back later what I find.

Enough for now, if you are still reading thanks for sticking with it.  More so than most this post was something I needed to do to get my thoughts together on what I heard & saw last week at I/O.   I'll be curious to see what Apple does at their Keynote (and, I'm sure, I'll be sad that I'm not at WWDC0

Comments (3)

Next Page -->