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)

Support, Hawaii and the Obligatory iPad post

First let me give a quick update on Support. I've moved to for providing support over my old mail based approach. The biggest advantage they offer is i can have more than a single support person helping out -- On that note if you have emailed recently or visited you may have noticed I've got some additional help. I'm really happy to publicly announce that Karn ("WebKarnage") has joined team Loghound doing support -- I couldn't be happier with all of the great help he has been providing.

The really nice thing that this has let me do is take a vacation, I just came back from Hawaii -- While I've gone with my family on vacation before I always logged in every day to do support, answer questions and generally keep things running smoothly. What was really nice about this break was I totally unhooked -- I checked email I think twice but otherwise was 'offline' which was a great break.

My vacation ended last night, April 2, when we returned home -- Now let me be clear, I never planned to come back the day before iPad day but that was just the way it worked out.
Let me start my (obligatory) iPad post by saying I don't regret buying it -- That is an odd way to start the post but you'll see below what appears to be a lukewarm reaction -- I really do like it but I would best describe it as 'meeting expectations'.

I pre-ordered a 16GB model to pick up at our local Apple store -- My reasoning was that it would be mostly a 'bed side' computer and I didn't need a lot of storage but in listening to Andy Ihnaktko talk about it on theMacbreak Weekly -- In the discussion he said "You should buy the 64GB model because you will find yourself putting 'everything' on it" -- That sort of struck me and I thought that 16GB really could fill up pretty quickly if you started adding some heavy apps -- I ended up asking if I could upgrade to a 32GB model when I got to the Apple store and they were able to support my request.

So this morning I trundled off to the store with my 8 year old son and at about 8:20 we were in line waiting (the local paper showed up and snapped a photo here -- I'm the guy with the blue hoodie on the left hand side.

So back to my impressions -- Like I said it meets my expectations -- Expectations that were pretty high so that's saying something. The only thing that really suprised me in an unexpectedly good way was looking at photos. Syncing over some iPhoto libraries and looking at the photos on the iPad is spectacular, much more than I expected.

Things that worked as well as I expected were web surfing (fast, high fidelity), iBooks (crisp text, fun to turn, great book syncing) the Mail app (and the google gmail web interface) and google maps.

Finally there were a few things that were a disappointment: iPhone apps scaled 2x look terrible (almost unusable) - I get it that graphics scaled up look clunky but I assumed they would scale text up better than they did (my guess is the scaling is happning at the graphic card level so perhaps it's not possible to scale text differently than other elements).

The launch apps from third parties were a mixed bag -- I love the potential of the netflix app but it crashes, a lot. Evernote is very nice but also tended to crash -- I'm sure that these will improve quickly however. The device is surprisingly heavy in the hand -- while that feels good from a 'boy this is sturdy' point of view it's extra weight compared to a kindle is a concern -- I'll need to do some real reading to see how that works.

I have a few iPad app ideas that I'll be playing with over the coming weeks & months -- It should be fun.

RapidBlog Problems

I've gotten a number of reports of RapidBlog plugin now working today and I'm working on it.  It seems the blogger folks have changed the data feed and that is what is causing the problem.

I should get a fix out in the next 12 hours.

[Update -- I have a new build that should help -- Testing is not huge but I think it will fix the problem ]


New support systems

Hi All,

A quick note that we are trying some new support systems here at -- For as long as I've been in business I've used email as my primary support vehicle and although I think it's worked well it has two fatal flaws.

1) I tend to solve the same problem again and again.  It would be nice if there was a way for people to see/search for solutions
2) It doesn't allow more than one person to help in support.

To that end I'm testing a new support system this month.  The goal is to have it be a smooth transition but please be patient if there are a few bumps as we sort it all out.


Next Page -->