| Comments

If you are a constant reader of this blog, I suspect you’re a geek as well.  And with most geeks it is generally pretty hard to buy gifts.  We usually buy gadgets when they come out and don’t give much room for ‘wish lists’ for our significant others to shop for us.  As such my house around holidays is usually no gifts for me of substantial surprise…that’s fine by me.

This father’s day was different.  My family got me a portable GPS device.  Specifically the Garmin Nuvi 260.  To be most accurate, my family actually got me a Magellan device but my wife gave it to me with the “I’m not sure if this is a good one so you can get which one you want.”  I love the “you can get” with regard to marriage and purchases…we share the same money don’t we? :-)

After a good amount of research I settled on the Garmin Nuvi line as the best.  Almost every review site I went to had the Garmin Nuvi models at the top of their list.  TomTom was a close second and actually from the experience I liked their physical designs a little better. 

I already have a GPS system in my car, but it is a year 2000 model car, so my GPS screen looks like a mainframe app compared to modern devices…and operates like one as well!  I didn’t think I’d like this idea of the Nuvi because of that, but was I wrong.  Man I turn that thing on to go check the mail.  Honestly I don’t know why, but I’m having so much fun with it!  There was a widescreen model that was about $80 more but had ZERO added features so I opted for the 260 model.  I have NOT been disappointed at all.  The screen is great, the directions are great, re-routing is fast.  I bought the Mexico maps for my device because I go there often.  The Mexico maps came as an SD card I pop in.  I thought this was a little weird because other maps can be downloaded directly into the device…why is Mexico (and some others) different?

This leads me to a little rant.  My Navteq car system wants to charge me $200+ for the map updates to my car.  Garmin - $90.  WTF Navteq!?!?  It’s the same data.  I’ve written to them and asked them why such the difference.  As you would expect: no response.

I used to think about GPS systems in cars and always wanted the in-dash in all my cars.  Never again.  For the cost (walmart.com had the best price for my model at the time of purchase – Best Buy price matched too), you just can’t beat the convenience.  I’ve heard of car companies like Volvo offering a credit voucher instead of in-dash systems.  I must say that is a great idea!  The lack of in-dash is the only thing I don’t like about my device…aesthetically I don’t like the extra thing hanging from my windshield, but the added convenience of taking with me no matter what vehicle I’m in is awesome.  It also has a “walking” mode that routes differently if you are walking.

I couldn’t have possibly asked for a better gift and to-date this has been the best gift I’ve received…and I didn’t even need it!  Bravo family, bravo.  If you are in the market for a GPS unit, check out the Nuvi line.  There are varying features for different models.  I think the 260 is the lowest model I would have went as the one feature I wanted was voice-announced streets (“turn right on Raven” rather than “turn right ahead”).  I don’t much car to integrate my device with as a Bluetooth speakerphone, but there are models that can do that.  Voice commands (available in the 800 series) is something I would have liked, but not at the price differential.  Check out the Nuvi.

I used these sites to help me decide: gpsreview.net and gpsmagazine.com (great buying guide).

| Comments

If you already pay attention to the IronRuby dev group and are on the distribution list, apologies for the dupe.  I’ve just got back from a camping trip and rifling through all my emails now.  I checked in on the IronRuby group and noticed a new project emerging from someone.

It’s from Ivan Porto Carrero and he calls it IronNails.  It was previously called something else (quite frankly I liked the other name better myself) but there was already a project named after his chosen name.  So alas, IronNails it is!  Ivan describes this as:

IronNails is a framework inspired by the Rails and rucola frameworks. It offers a rails-like way of developing applications with IronRuby and Windows Presentation Foundation (WPF). This framework uses the pattern Model - ViewModel - View - Controller (M-VM-V-C). It should be able to run on both WPF and Silverlight.  The idea is that the views can be created using a design tool like Blend for example and just save that xaml as is. The designer should not need to use anything else than drag and drop to create a GUI design. The behaviors are then added to the view by using predefined behaviors in the framework or by defining your own behavior. Source: IronNails GitHub homepage

The project is really just started so don’t expect a ton of meat there just yet, but it has a great goal and I can’t wait to see it evolve.  Ivan’s using the Rails-like framework of MVC where the XAML can serve as the view for either a WPF or Silverlight application.  The idea being that someone can create a view using a rich interface design surface like Expression Blend and write the code that targets the view which can be fine tuned to either Silverlight or full WPF.

The vision is something like this:

   1: class MyController < IronNails::Controllers::Base
   2:  
   3:   view_object :some_model, :refresh => :refresh_some_model, :refresh_interval => 2.minutes
   4:  
   5:   view_action :some_action, :target => :my_button, :action => :some_action_implementation
   6:  
   7:   def refresh_some_model
   8:     # code here
   9:   end
  10:  
  11:   def some_action_implementation
  12:     # code here
  13:   end
  14:  
  15: end

If you are interested in contributing or lurking, get on over to GitHub and watch the project!

| Comments

I’ve seen the rumbling a few times now about property setting in Silverlight.  The rumblings are along the lines of “why do I have to use SetValue for setting simple properties like the x/y positioning?”  To those points, I agree from a fundamental standpoint.  From a technical standpoint SetValue is there and serves a great purpose for providing a common way of setting properties on XAML elements regardless of the element.  As a developer, I like it actually.  I do, however, see the point about wanting to set simple properties and it just looks a little verbose.  Take for instance setting the x/y positioning of an Ellipse (in code):

   1: Ellipse circle = new Ellipse();
   2: circle.Width = 10;
   3: circle.Height = 10;
   4: circle.SetValue(NameProperty, "MyCircle");
   5: circle.SetValue(Canvas.TopProperty, 200);
   6: circle.SetValue(Canvas.LeftProperty, 200);

You’ll see the last three lines seem a little verbose when setting simple properties.  Most of the time you’ll run into this using your own custom controls or while providing controls to others.  Here’s a tip to simplify this process…abstract these simple ones away if you know they will be used frequently.

Developers familiar with Flash/Flex will note that for something like the above example, there are .x and .y values.  We can do the same with Silverlight by ensuring our controls follow a pattern we anticipate our developers will use.  Let’s say we have a control called MyCircle which contains only an Ellipse.  We know that our consumers of our control will be animating our circle control using various calculations and moving x/y coordinates frequently.  In our control we can do this (assuming our XAML has an Ellipse in a Canvas element):

   1: public double X
   2: {
   3:     get { return this.GetValue(Canvas.LeftProperty) as double; }
   4:     set { this.SetValue(Canvas.LeftProperty, value); }
   5: }
   6:  
   7: public double Y
   8: {
   9:     get { return this.GetValue(Canvas.TopProperty) as double; }
  10:     set { this.SetValue(Canvas.TopProperty, value); }
  11: }

Now when developers need to move this control around they can simplify things by writing code like this:

   1: MyCircle circle = new MyCircle();
   2: circle.X = 200;
   3: circle.Y = 200;

By doing this we’ve abstracted out the SetValue/GetValue functions (while still there if needed) for some simple properties.  I like this tip a lot and generally is helpful when you need quick/simple access to properties like this.  I learned this tip from Rick Barraza who incidentally does work in Flash, Flex, WPF and Silverlight.  He uses this technique when doing a lot of manipulation of objects that involve math, etc. – in the end the result is the same, but this tip might save you some precious keystrokes.

| Comments

Well, it seems that in addition to problems with MobileMe, Apple is getting into some gray area with AppStore.  Applications are appearing, disappearing without explanation to the authors.  The one that got more attention was NetShare, an app that purports to enable tethering of your iPhone 3G.  However despite it being available (actually for me clicking on the link it wasn’t even available then) it seems to be performing one of Criss Angel’s greatest feats in appearing/disappearing at will (or at Steve Jobs’ request).

The latest app to fall to this scenario and be removed from the AppStore without explanation is BoxOffice.  The developer of BoxOffice posted a plea on MacForums:

Apple pulled the app yesterday without giving my any notification that they were doing it, or what their justification was for removing it.


I've tried to contact them about the issue, but it's been a complete dead end. If anyone has a useful contact number for apple, please let me know.


I'm in regular contact with all my data providers, and none of them have had an issue with my app. Indeed, the response was the exact opposite. They like my app and have even asked if i would do custom application work for them in the future. Furthermore, all the data i use is licensed by the owners as 'free for non commercial use'. i.e. precisely what BoxOffice is. Source: MacForums

Here’s my guesses (and only guesses):

1) NetShare pulled because of violation of AT&T terms.  I can’t cite them specifically but I’m pretty sure there is some fine print about tethering and normal use.  Heck AT&T sells a tethering option on some of their devices so I’m sure their crafty attorneys have legalese in their normal terms for 3G devices like iPhone about tethering. 

2) BoxOffice – pulled because it is Open Source licensed under the GPLv2.  BoxOffice has had it’s code up there on Google Code for a while.  Could this be a sign that Apple is now getting around to tightening their reigns on their terms and that OSS applications would not be allowed?  Or perhaps because he has a ‘Donate’ button in the app and Apple can’t get their chocolaty fingers on any donations (which probably violates the terms anyway-however other apps do the same thing).  I can’t wait to see what Cyrus hears back regarding BoxOffice and why it was removed.  And if he does receive that reason…will WordPress follow next?

What gives with updates?

The AppStore model was an exciting one.  I say was becuase I’m starting to see some faults.  This whole appearing/disappearing thing without communication to the authors is frustrating.  Even if they are in violation of whatever terms…a communication to the author is something that should occur.  “Hey you are violating terms XYZ, if you want to be listed in the AppStore you need to patch your software and re-submit.”  Is that so hard?

The other pain I’m seeing is updating.  While the AppStore seemed a great model, the update model sucks big time.  Authors have to go through the same process to submit an update it seems as they would a new app.  For real?  So 1.0 to 1.1 takes forever?  Is that a model that is acceptable to the security world?  What if someone found an exploit in Super Monkey Ball that it was actually taking your contacts and passing them around somewhere?  The v1.x patch has to go through a similar process of a new app?  Seems strange.

The other updating just seems hokey to me.  It really isn’t enabling a software+services model.  One case is the apps that provide reference.  For example, I downloaded the Spanish phrase app (handy by the way).  Let’s say the authors want to add more phrases.  They have to release a whole other app!  I have to download/install a whole other app.  Why can’t the author have their own update mechanism like other real software?!  Imagine if that every time your favorite app was updated you had to completely re-install it each time.  Ridiculous right?  Why should an iPhone app be any different.  Enabling this model of auto-updating should be added to their SDK to enable authors to quickly provide patches and incremental updates to their applications without the AppStore getting in the way.

Well, it is interesting to see how Apple is going through these pains in their new adventures.

| Comments

I’ve just finished reading a book recommended to me.  You see, I don’t read much.  I tend to stick to technical reference documentation and if I do choose to read it is usually something involving challenging thought, social economics or conspiracy theories.  My favorite book is probably Freakonomics which challenged my way of thinking, provided some interesting social economic studies and really just was an interesting perspective on various things.  I highly recommend you get that book.

Predictably Irrational book cover My Silverlight compadre Jesse said that if I liked that book I should rush out and get Predictably Irrational.  I did.  This past weekend I had some downtime while camping (a whole other story I wish not to relive in the near term) with my family and chose to get into this book.

Wow.  What a great companion to Freakonomics!  Seriously if you’ve read Freakonomics it is a pretty high likelihood that you will like Predictably Irrational as well.  Dan Ariely survived a pretty bad accident and during his hospital healing process there were a few things that caused him to think about how humans act, assume and generate habits.  He’s a PhD from MIT (the book has various MIT vs. Stanford vs. Harvard jabs in it) and seems to surround himself with other interesting people.

The social experiments conducted during his research are pretty obvious and you can totally expect the results, but the analysis and different ways of thinking about them are intriguing.  I was particularly taken back by the study on honesty and how when the opportunity is given to cheat, unless it directly involves cash, it is almost a certainty that even the most honest people will.  However, make them write down the 10 commandments before they do the activity and not a single participant cheated.  The mere suggestion (note: not everyone even knew them or wrote them all down) of the 10 commandments was enough to get people to think twice even in situations where they would be guaranteed not to be caught.

Anyhow, a great read.  A fun read.  Get it now.