Wireless in Seattle

We have recently remodeled our home and moved back at the beginning of May after about 5 months in temporary housing. The question was then: do we reconnect it to Comcast or not? We had already dropped Cable two years ago -for the better- using Apple TV with iTunes and Netflix as our main source of media, but could we ditch their broadband connection too?

I know that LTE is coming and there is a high probability that a lot of people will choose to become wireless when LTE takes off. Unfortunately we are about one or two years away before that starts happening. In the area the only choice for LTE is Verizon, but with a 10 Gb/month data plan, it was out of the question to use it for our main source of Internet access. The familly consummes on average 1-2 Gb per day. That kind of overage would be quite costly. So I chose ClearWire which offers an unlimited data plan. I understand that WiMax is no LTE, but after being a happy mobile modem customer for over 3 years, I decided to give it a shot. Comcast as a company has always been a nightmare to deal with and the idea of poking even one other utility hole in our new home was not apealing to me. So I got a fixed modem and upgraded my mobile modem to a hotspot with the hope that these two internet connections would be enough for a family of 4. With several tablets and smartphones, a hotspot seemed to be a logical choice too.

After about a month I can happily say that the family is ok with the choice. Sure, I am not going to hide that we can feel that we get on average a 4 Mbps connection (with a relatively poor signal at about 40-60%) and unfortunately the hotspot does not get any signal in our home so my plan to use both the fixed and hotspot modems is not working so far. I can't say that these numbers would work for anyone, but we can watch an HD iTunes movie without interruptions and that was my acceptance criteria. Netflix or YouTube work just fine, of course.

So our new house has no phone, Internet or cable connection. We are 100% wireless. The builder has tried to convince us that will hurt our ability to resell it but since that's not our plan anyways, we built "our" home, not just a home.

I would not be surprised if we are the first Wireless home in Bellevue (I literally mean "built without the wires" not just using wireless services). I would not have made this choice if LTE was not on the horizon. I know for sure that this is a viable decision moving forward.  It's kind of silly but I marvel pretty much every day that this is even possible, thinking about all the technology that was needed to make it happen. I also enjoy the peace of watching media that we choose, without commercials. We only turn the TV on because we want to watch something. Even though that choice doesn't come cheap, I feel it is priceless in all the time the family gets back.

Here are the economics of our wireless home:

  • ClearWire Internet access: $100 / month for a fixed and hotspot unlimited connection, (the hotspot is awesome compared to my old mobile modem when I use it outside our home)
  • AT&T wireless: $200 / month for 3 iPhones and one Android phone  (yes, we call or text each other in our home, in case you wonder, of course, that's when the Galaxy SII doesn't run out of power -I must admit that Samsung has redefined the word "wireless")
  • iTunes and Netflix bills: about $50-60 per month




Data is (Mostly) Flat

Canappi's Data Binding Framwork allows you get  data from a Web API and effortlessly bind it to your UI.

For instance, getting a Twitter feed and binding it to a table is as simple as that.

The core of the Canappi's binding framework relies on a simple assumption: Good Data is simple to bind. You shoudn't need a complex set of metadata,let alone a query language, to describe what you want to do. With Canappi, we reify data formats to a simple set of rows to keep the data binding definition (almost) always simple.

In XML, we often run into formats is something like that:

  <row attr1="value1" attr2="value2"> <key3>value3</value> ... </row>

The data binding definition is generally achieved with a couple of values:  the collection element (since it could be arbitrarily nested) and the row element.The algorithm can go arbitrarily deep to find them. Of course, we reify elements and attributes in a single dictionary for each row. In the case of the twitter feed we don't even specify the collection and the row elements since the feed is well formed and follows already the /collection/row format.

Things are a bit more complex with JSON. I found it a bit harder to identify where the "array" of rows is. Here is my reification algorithm. First, I identify where the rows are, then I flatten any subdictionary (and I ignore for the most part subarrays):


You know what? the life of the json data binder would be a lot simpler if API designers would also support a "mobile friendly" format. In JSON it could look like:

    "collection": [
            "row": {
                "key1": "value1",
                "key2": "value2"
            "row": {
                "key1": "value1",
                "key2": "value2"

What's the point of arbitrarily nested data structures (in a mobile world) ?

So here is the implementation of our algorithm, you can dowload an adaptation of the SBJSONParser on Github.

This is how you use it:

    url = [NSURL URLWithString:endpoint];

    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    request.requestMethod = @"GET" ; 
    [request startSynchronous];
    NSString *response = [request responseString];
    // Canappi tests for JSONP and removes it first
    // See generated code
id data = nil; SBJsonParser *parser = [[SBJsonParser alloc] init]; //Get a JSON object id parsedData = [parser objectWithString:response error:nil] ;
//First find the array, then flatten the rows, to get an array or simple key/value pairs dictionaries data = [parser flatten:[parser findArrayForElement:@"collection" andRow:@"row" wrapped:NO in:parsedData] forElement:nil] ;

Canappi also provides the ability to "join" two API calls and simply merge both set of rows in the same data structure.

 This post is a plea for API designers: Please give mobile developers the data structures they need to simplify the data binding process. There is simply no value in doing otherwise, just incidental complexity.


The Platform

The purchase of Instagram by Facebook is no less than an attempt to redefine the landscape of our industry: today, you are either an app, a service or a platform.

For instance, RIM will become an "app". No disrespect, it can be a formidable app, opening the doors to the Enterprise to an Apple or a Google, but the window of opportunity for RIM to be a platform is gone. In this new world, search is an app which sets the search context with a high degree of precision  (yelp, UrbanSpoon...), ads is a service and the Worn out WWW amounts to the Yellow Pages (paper HTML edition). 

Apple has already shaped what a platform should be: store, privacy/trust, cloud ... vertically integrated and ... user family centric. Apple has even successfully established purchases as the primary business model, a real tour de force. Everything the Web was not, Apple baked it into its plaform and created a tectonic shift in our industry. You can argue that Apple has still room for improvement here and there, but the shape is pretty much defined.

Facebook just told us: "not so fast", you are missing the social component. Content is now produced, delivered and accessed in a completely different way: we have entered the social:// era and left http:// behind. The circle is the new DNS. In this new world, Facebook is not an app, it buys apps. In our industry it is, position or be positioned. With close to a billion users, Facebook is a platform, or at least, soon to be. Make no mistake, the clueless statement of Facebook's IPO filing where Zuckerberg states that he doesn't need any money nor does he know what to do with it, including spending $1B for Instagram is just smoking mirrors.

At this point, you probably understand that Microsoft and Android ecosystems are not  "platform oriented": hardware vendors and ISVs are too loosely coupled to deliver products that customers want to buy. That model is gone. The musical chair game has started.

So, where does it leave us? well, we have 3 and 1/2 incumbents to the platform game.
  • (good old) Microsoft/Facebook
  • (fearless) Google
  • (mighty) Apple/Twitter

... and maybe (always smiling) Amazon. The problem with Amazon is that they'll have to choose between being a commerce platform (and compete with WalMart) or an industry platform and play with the big boyz. I don't think these two things work well together and eventually Amazon will return to its commerce roots mainly because of the lack of social capability. Amazon is a formidable company, but they are too late to the game, they have no money in the bank to acquire what they need to compete and they are burdened by a big legacy business, deeply rooted into the Web. As (Microsoft), Google and Apple know, there are only so many social networks that can fuel a healthy platform. Most likely Amazon will become a substrate to support services with AWS, and of course, an "app", the kindle, assuming the platform guys leave these holes open (far from a given).

Yet, Amazon was a decisive factor in establishing the architecture of the platform. It reinforced the power of the vertical integration pioneered by Apple. If you come with a great device or set of devices, and an app store, customers will line up. Something that Google is still struggling to emulate with an open ecosystem, and I am not even talking about Microsoft. In other words, it is not the number of devices you sell that counts, it is the the numbers of end-users actively using the platform to buy digital goods, interact, store their stuff... If you doubt it, just ask Nokia ...

If the social integration is pretty much a given, the game gets really interesting when it comes to the vertical integration. As we have seen with Apple, customers don't see "choice" (or price) as a competitive advantage. People want simple product lines with products they can actually use, with clear and real innovation at each cycle, built by thoughtful product teams: selling incremental junk is no longer an option (as HP painfully learned). And yes, TV or Game consoles will be engulfed in the platform. How could the platform guys leave them on the table? Any device that can run an app will be vertically integrated in the platform (or replaced by one).

My best guess is that:

- MS/FB will partner strongly with or even acquire Nokia and HP.
- Google/Motorola will swallow HTC and/or LG, possibly bring Dell in its ecosystem
- Apple ... huh ... will buy Twitter, and RIM for its Enterprise App

Samsung could team up with Amazon, but most likely it will become the component provider of the platform guys. SONY's, Nintendo's and HP's troubles simply show that there is no more room for Independent Hardware Vendors: you are either a (vertically integrated) platform or you supply the platform with components, no, not even devices (I mean other than speakers and power adapters). The touch points to consumers are going to be completely locked down, not one will be left open.

Even Telco providers will be suppliers to the platform guys, with the Skype/Hangout/Facetime apps being the new face of telephony.

The interesting thing here is that unless social networks are just a fad, MS/FB is the most likely winner of that game. There is a large probability that MS/FB/NOK/HP could take on 80% of a vertically integrated, consumer oriented market. Even Ballmer could pull that off and retire on a real visionary success. Google will lose that game (this is not an engineers game, let alone using corny "Web" paradigms and UX, in any case they will take the decision to move to a vertically integrated model too late without any muscle behind it). Apple will take on a 20% "think different" crowd. Apple is not aggressive enough to win that game, they'll look back to their $100 B in the bank and ask themselves, if they could have used it more "wisely".

Facebook spent a billion, not to buy Instagram but to hold our industry by the balls. With its IPO behind, it will call the shots for years. And yes ... Zuckerberg is next CEO of "The Platform".

Fascinating times ... it's a shame that Steve is no longer with us.



06/18/2012: Microsoft announces the "Surface"

06/26/2012: Google kindly announces the 7" Nexus Tablet and the Nexus q

07/04/2012: Google Jelly Bean is a game changer. Google seems to finally get it, UX is key to win this game. I may be wrong after all, Microsoft may never be able to catch up. If Microsoft continues to mess up on the Mobile OS side over the next 6 months, there will be no Microsoft in the Mobile space moving forward.

07/06/2012: Amazon is planning to launch its own smartphone.

07/16/2012: Google (Motorola) is launching the Atrix HD.

07/20/2012: Microsoft reports a big jump in Skype usage, up 50%

07/23/2012: Amazon plans 6 new Kindle variants.

07/26/2012: Facebook works with HTC on its own smartphone

07/28/2012: Microsoft is in trouble, that may well be the statement that signals the decline of the company: Microsoft CEO Steve Ballmer has sought to downplay the notion of Surface competing with partners, recently calling the device ?just a design point.

7/31/2012: Details on Microsoft's plans to move to a vertically integrated model

8/20/2012: It looks like Microsoft does not aim at partnering / merging with Facebook, they sold 20% of their stake right after the IPO, that's kind of a shame, without even the shadow of a social network, they will have a hard time getting there. Unless their secret weapon is to make Yammer a general purpose social network. 

8/22/2012: "The Platform" is on Amazon's Navigation Bar: App Store, Storage, ... Critically missing is the social network component.

 9/06/2012: Amazon unvails the new Kindle, "People don?t want gadgets anymore, says Jeff Bezos, they want services that improve over time. Kindle Fire is a service. It greets you by name. Comes out of box with content preloaded, makes recommendations."

9/06/2012: Mobile gamers outnumber the console core.

9/12/2012: Zuckerberg "Facebook's Mobile opportunity is much bigger than what people think", "Everyone is now "underestimating" Facebook"  (I am not ...)

10/02/2012: Windows Mobile market share continues falling

10/02/2012: 1st Apple-approved iOS game controller makes its debut

10/04/2012: Facebook Tops a Billion Users

10/09/2012: Ballmer to Microsoft shareholders: 'a fundamental shift [is] underway in our business' In his annual letter, CEO Steve Ballmer says Microsoft's future is a tight combination of hardware and software

10/12/2012: For the first time this month people searched less than last year. Our interpretation is that people now search more in context, using dedicated apps on their mobile device. This is particularly disruptive because that is the kind of search that has the most impact on commerce and advertising.

10/22/2012 Subliminal message from Zuckerberg: I would have worked at Microsoft if facebook had failed

10/25/2012 Ballmer: Microsoft has more hardware to come.

10/30/2012 Google?s New Nexus Commercial Puts Focus On The Platform, Not The Hardware

11/2/2012: Microsoft is testing its own smartphone

11/5/2012: Microsoft retires messenger, migrates users to skype

11/6/2012: Verizon shuts down its App Store

11/9/2012: Video game retail sales fall 25 percent year-on-year in 11th straight month of decline

12/01/2012: There is a possibility today that Microsoft won't be platform player.

01/15/2013: Facebook announces Search and close partnership with Bing.

01/22/2013: Microsoft talks about investing 3B in Dell

02/14/2013: HP to adopt Android

This is possibly a world record: I tried to fit a Canappi app descriptor in a tweet, in less than 140 chars !! and it works. Who can do better? or simpler? Here is the file. You can generate the iOS and Android app here, after registration.



Interface Builder is one of the most amazing software ever written. After 25 years (and hardly anything added to it), it is still relevant and still a GUI designer far ahead of the competion. Just let me know if you know any other piece of software that was designed 25 years ago and is still relevant today, pretty much unchanged.

When I discovered IB in 1990, I was in owe. Not only could you build incredible GUIs effortlessly (at least for the time), but IB was also an Injection Dependency Framework more than a decade ahead of Spring. It forever set the tone of my career, anchoring it in the model-driven world, building software that builts software.

That being said, I built Canappi to address a number of shortcomings which would be expected since IB was never designed to build mobile solutions and to a large extend it shows.

1. Canappi's mdsl describes the entire application in a single file: XIB files have all kinds of granularity and are generally loaded individually at different locations, directly from the code. It makes it quite dificult to have a comprehensive view of the application.

2. Canappi introduces the concept of Layout, as a set of controls, which can be reused across different views: IB does not allow you to reuse groups of controls easily, this has to be dealt in code, not at the view definition time.

3. Canappi offers standard actions (call a number, send an email, navigate to a view, present/dismiss a view...): IB doesn't have any notion of standard actions, in particular navigation actions, so you have to go back in code to implement things that could be easily dealt with at the model level, in the GUI definition

4. Canappi has introduced the concept of stylesheets: IB does not have a simple way to reuse a set of properties across the definition of several controls (TextField, Label, Button...)

5. Canappi's programming model include Web API definitions which can be bound to layout and actions: How many mobile apps need to talk to some kind of Web API? Unfortunately IB, which was build 25 years ago, knows nothing about them. With Canappi you can create a client view of a Web API (Connection), and bind operations to individual layouts, including tables and actions. Canappi generates the code to assemble the Web API request, parse the response (XML or JSON) and bind it to the controls of a View.

6. Canappi's can easily specify the layout of a table: When you drag and drop a table in a XIB file, you get, a table. You have no way to declaratively define what the table row is made of.

7. Canappi defines the whole wiring of an application, from Splash screen to Menu to every aspect of Navigation (navigation bar, navigation actions, dialogs...): Apple recently added Storyboards, but that mechanism doesn't scale very well if you application is more than a few views.

8. Canappi makes the process of designing Universal Binary easy, you can define both the iPhone and iPad layouts. Each layout is independent of each other which allows you to define different navigation schemes as well (of course the remainder of the definitions are shared between the two: connections, styles, ...): IB knows nothing about different form factors running the same application. Again, 25 years ago, this was not a common usage pattern.

9. Canappi has a much richer palette of controls: Graph (Core-Plot), Gallery, RadioButtons (yes IB doesn't have radio buttons for iOS), Button Triggered Pickers and Date Pickers, Video Player, ...

10. With Canappi you can use Interface Builder to create Android layouts. We convert Interface Builder files into mdsl, which can be used to generate both iOS and Android applications.

Canappi's mdsl is also a textual language which you can easily version, compare and merge, even create libraries of resuable application definition. IB on the other hand is a graphical tool which is ideal to position controls on a view, but far less than ideal to manage an entire application.

In fact, mdsl, Canappi's programming model, is so complete today that you can now write entire applications from it, something that is impossible to do with Interface Builder. This app was built with 700 lines of mdsl and less than 50 lines of custom code.

<< 1 ... 4 5 6 7 8 9 10 11 12 13 14 ... 23 >>



blog engine