Focus

(yes, this is an old topic, but I’m a slow blogger. Anyway…)

Of all the material that came under the spotlight shortly after Steve Jobs’s death, the most interesting one I’ve seen by far was his WWDC keynote from 1997 :

Let’s recap the situation : Apple is months away from bankruptcy, Gil Amelio is the current CEO, they’ve just bought NeXT and Steve Jobs has returned as “advisor”.

At the WWDC (that’s the Mac developers worldwide conference), Steve Jobs walks on stage and instead of doing a presentation, offers to take questions from the audience. And his answers have made me realise why the guy really was completely different from the other tech CEOs that run other IT companies.

Here’s a breakdown of the most interesting moments (time indications are approximative) :

4:00 – explains how he thinks that there’s a market for great products. Not “fancy products with an apple logo on them” – great products. Products that stand above the others in term of quality. All other companies do market studies, try to offer a variety of products tailored to each market segment… He wants Apple to do differently.

5:00 – “I know some of you worked on stuff that we put a bullet in the head of” : the way he acknowledges that is rather uncommon in my experience. Most would try to weasel around the issue and soften the blow. The reason he doesn’t is not because of his usual callous approach, it’s because he’s able to justify it with what comes next : “Focus is saying no”. This will echo to any developers who’s been involved in a project that has fallen to feature bloat. Raise your hand if you’ve met many managers with this kind of mindset. I haven’t.

10:00 – at this point he acknowledges that Apple should no longer reinvent everything, as they had done in the past. Pick the right elements (i.e. the Unix core technologies), figure out what they need to turn them into a product that is really better than the competition. And they did just that.

13:00 – “using computers not for computation intensive tasks, but as a window into communication intensive tasks” – coming from NeXT, he describes what his experience was using an OS which had the network built in from the start. A familiar vision to any Unix user, something very remote to Mac users at the time. In more ways than one, he also describes what cloud computing is aiming to bring to everybody now.

He also mentions gigabit ethernet, which will only be deployed 3 years later.

16:00 “what is really exciting to me is to look at that personal computer, and take out every moving part except the keyboard and the mouse”. That’s the Macbook Air, right there, which would be released 11 years later, in 2008. There was also the failed Sun/Oracle Network computer in between, but Apple pulled it off.

19:00 “Apple is vertically integrated – makes the hardware, the software, the marketing experience”. To this day, nobody else than Apple has this, and few still understand how fundamental a strength this is for them. So he got that while the PC world has the advantage of economies of scale, they can’t match Apple’s reactivity and ability to provide a much more seamless experience.

22:00 let’s not forget this is a developer convention – here he explains how cool the NeXTStep development platform is. Nothing special in itself, except that I don’t know of too many CEOs of IT companies who can convincingly sell a development environment to an audience of experienced developers. The part about “managing complexity” (at 25:00) really hits home.

41:00 “the way you get programmer productivity is not by increasing the number of lines of code per programmer per day. That doesn’t work. The way you get programmer productivity is by eliminating the lines of code you have to write. [...] the goal here is to eliminate 80% of the code you have to write for your app”. Another thing that not too many tech managers get (although more do nowadays than back when this was recorded). That’s why he chose Objective C over C++.

01:01 About the Newton. “Most companies can be successful with 1 stack of system software. Rarely can they manage two and we are going to succeed at managing two during the next several years with MacOS and Rhapsody. I cannot imagine being successful at managing 3″. Let’s recap : this is still MacOS 9. Rhapsody, which will become Mac OS X, is in its infancy. So Apple will have to manage those two. The 3rd one is the Newton OS, therefore that will have to be shut down. Again, focus.

In a few years, once OS X is well established, they still will release the iPod, which did have its own (very simple) OS.

“Do you have a newton ?” asks a guy – He replies he bought one of the early ones, thought it was a piece of junk and threw it away, same with a Motorola Invoice. He grants that the new Newtons may be a lot better, the guy suggests he tries one, but he stops the argument with this : “the high-order bit is connectivity. It’s being in touch, connected to a network”. He then explains that using infrared to transfer data from your organizer to your computer when you get back is not what he wants. “If somebody would make a thing where you’re connected to the Net at all times… I’d love to buy one”.

Again, 1997. The Net is mostly accessed through modems. DSL is in its infancy. Wireless data access hardly exists at all. Yes, the concept itself is obvious, but at this point it’s clearly many years away… 10 years away, to be exact, when he took the stage at MacWorld and started with those words : “we’re gonna make some history today”. Others had implemented that concept before them (Treo, Blackberry), but they set the bar on how to do it.

Name one IT company which could see and plan 10 years ahead, and successfully achieve those plans. That’s focus.

Posted in Uncategorized | 2 Comments

Thank you Steve…

… for making things so much more interesting.

Posted in Uncategorized | Leave a comment

Changes

Usually, the month of August is a quiet one as far as news are concerned. Not this year. In a few short weeks, Google buys Motorola (the mobile division), HP goes out of the hardware business (and axes its WebOS products), and, last but certainly not least, Steve Jobs resigns from his position as Apple CEO.

So I guess I should indulge in a post about those.

In chronological order :

The Google deal. People can argue all day long on whether it’s a blunder or a master coup, I remain very curious as to how Google can “integrate” a hardware company with such a different culture. Even if the plans are to let it run independently, this is not going to be straightforward.

HP’s strategy change : apparently, they’re trying to “pull an IBM”, and turn themselves into a pure software/service company. OK, good for them, IBM’s got one more direct competitor. I hope they’ll licence WebOS and still actually try to do something with it.

Finally, Steve. More telling than anything is that the news of his resignation have all but eclipsed both of the other items. It got front page on even French newspapers. Dozens of homages, timelines and anecdotes about him have been posted. I have to say I actually feel sad about it, for two reasons : I admire the guy as he’s been the only “bad ass” CEO in IT, and the Apple saga is quite unique in this industry. As such, I can’t see him go without feeling regrets about it.

There’s another reason, however. May be it’s me getting old, but I feel the IT industry has gone pretty dull in the past 10 years, except for one thing : Apple. Back in 97-98, when Jobs went back to Cupertino (and people didn’t care so much at the time), what was really exciting was the rise of Linux and free software. Years before that, it was Amiga vs. Atari ST. Oh, and the BeBox was fun for a short while. OK, the advent of Internet for all and the World Wide Web was pretty exciting too. But nowadays, what ? Linux failed to reach its promise as a credible alternative to Windows, OS X achieved that instead. Smartphones have gone from ugly, button-laden bricks to slick pieces of glass and metal thanks to the iPhone, and tablets are becoming ubiquitous, thanks to the iPad. Without Apple, we’d have Windows, an ever-growing bunch of Linux distribs, Palm Treos and thick fat laptops. Apple is the only company that successfully challenges the overall boring uniformity and makes things interesting and fun. And they also raise the quality bar quite a few notches in doing so. Should they stop doing that, I can’t see any replacement.

Posted in Uncategorized | Leave a comment

Thoughts and questions after the WWDC 2011 keynote

I haven’t finished watching the keynote yet but have read most of what there’s to read about it, so here goes. Also, that will be a nice change not to write about something 5 months after.

First, no questions about it : as far as iOS 5 is concerned, the new features were all lifted (copied, stolen…) from elsewhere. Android, RIM, and the jailbreaking community (which they should properly acknowledge and let work unhindered, IMHO – add a proper “hack me” mode to iOS and see what happens). Good thing they did, all where sorely lacking.

More interesting are the new features of OS X Lion. Many will seem unimportant, but may have profound changes on the way we work. Like full screen apps for instance (which people who are challenged in their sense of observation have dismissed as “finally OS X has window maximize”). We all consider multi-tasking OSes for granted, all too often forgetting that we, users, aren’t. There’s enough literature on how computers and the Net make it hard to focus, as we are constantly solicited by dozens of attention-grabbing sources of interruption : mail, IM, twitter, etc… Reverting to a screen which shows you only what is pertaining to the current task is a nice change. Note that this has already been touted as a feature by some word processors (writeroom, OmmWriter and, of course Pages).

But the most interesting part was definitely iCould. Assuming they can pull it off properly, that will change a lot of things. I had to look for hackish solutions to keep my iTunes libraries in sync between my Mac pro and my MacBook pro. Cultured Code has spent an untold amount of effort to deploy sync for their nice Todo app Things, often under the frustration of their users, and this has just been made obsolete by the fact that iCloud will have an API useable by tiers (something I recall wishing for for MobileMe). And as a photographer, PhotoStream and the perspective of being able to de-rush on my iPad is a huge boon.

I just wonder how flexible will the settings be. Apple usually takes care of its ‘pro’ customers, although often with a delay. I don’t think I’m going to sync my 300Gb photo library on any “cloud” yet. Not so much a question of space as a question of how long it would take through my ADSL connection (100kb/s upload). Movie makers and musicians are going to have the same problem. Of course, “cloud computing”, no matter who provides it, won’t really achieve its full promise until we all have fiber connections. DSL just won’t cut it.

Finally, iTunes Match. Now that’s a cool move from Apple, but no word yet on how widely available it will be. I’m guessing it will take a while before we have it in France.

Posted in Uncategorized | 1 Comment

edenx update

In the last few months I’ve had enough free time (i.e. less concerts to shoot) to resume work on edenx. Long before that I had converted most of Rosegarden’s Rulers code. This wasn’t a port, since I’m using CoreData structures, it meant that all the STL stuff had to be converted to CoreData calls.

For instance, this (full version) :

Event dummy(“dummy”, 0);
dummy.set(BarNumberProperty, n);

ReferenceSegment::iterator j = std::lower_bound(m_timeSigSegment.begin(), m_timeSigSegment.end(), &dummy, BarNumberComparator());
ReferenceSegment::iterator i = j;

if (i == m_timeSigSegment.end() || (*i)->get(BarNumberProperty) > n) {
if (i == m_timeSigSegment.begin())
i = m_timeSigSegment.end();
else
–i;
} else ++j; // j needs to point to following barline

becomes this (full version) :

NSManagedObjectContext* moc = [self managedObjectContext];
MyDocument* document = [[NSDocumentController sharedDocumentController] currentDocument];

NSEntityDescription *timeSignatureDescription = [NSEntityDescription entityForName:@"TimeSignature" inManagedObjectContext:moc];

NSFetchRequest *timeSignaturesRequest = [[[NSFetchRequest alloc] init] autorelease];
[timeSignaturesRequest setEntity:timeSignatureDescription];

// order by absolute time
//
[timeSignaturesRequest setSortDescriptors:[[document coreDataUtils] absoluteTimeSortDescriptorArray]];

NSError *error = nil;

NSArray *allTimeSigs = [moc executeFetchRequest:timeSignaturesRequest error:&error];
if (allTimeSigs != nil) {

if ([allTimeSigs count] > 0) {

// there are time signatures – find the one right after the bar n
//
BOOL (^checkBarNumberBlock)(id, NSUInteger, BOOL*) = ^ (id obj, NSUInteger idx, BOOL *stop) {
if ([[obj barNumber] intValue] > n) {
*stop = YES;
return YES;
}
return NO;
};

NSUInteger idxOfTimeSigAfterBarN = [allTimeSigs indexOfObjectPassingTest:checkBarNumberBlock];

More recently, I’ve improved the drawing of the segments on the canvas (and actually introduced the concepts of segments, which at first I had discarded, figuring that just using tracks as is for event container would be enough, but since Garage Band is apparently having those too, I changed my mind).

This led me to learn about Core Animation, which is a pretty darn cool framework. I’m a bit annoyed by the C-based API (mostly out of principle), but given the data structures in play, it’s good enough. What is cool about Core Anim is the wealth of effects readily available, and that every change in a CALayer (say a resize) is, well, animated.

When I moved to OS X one of the things I liked was that UI changes never happen instantly, there’s always a quick animation smoothing the change from one state to the other. I found this to be much easier on the eye, because you actually perceive the change and can follow what happens, rather than having to find your way in the UI again. I always wondered how this was done, if all apps had intricate code taking care of those changes. Well, turns out it’s automagically handled by Core Animation.

For instance if you have a CALayer with a bounds rect of 100.0 witdth (all Core Anim coordinates are floats – another huge bonus), and set it to 200.0, simply setting

rectLayer.bounds = CGRectMake (0.0, 0.0, 200.0, rectHeight);

will result in a rectangle smoothly expanding from 100.0 to 200.0. This is the default behavior but it can be altered in any way you want (faster, slower, grouped with other anims, etc…). Likewise, adding a layer will not flash it instantly in view, but will fade it in.

So I tuned this for edenx. On this screencast I create several segments and resize them :

Finally, I’ve looked into how to display notes. At first I anticipated that I’d have to “manually” draw the notes through a bunch of Core Graphics commands. Then I remembered that Rosegarden was using Lilypond‘s note font. Things became much more interesting when I found about CTFontCreatePathForGlyph() : take a font glyph, get a CGPath, which you can draw, transform, etc… to your hearts content. That offered me a quick solution to the note drawing problem (although there are still some fine tuning to do).

Here’s a short screencast :

So, to get back to edenx’s dev status. I’ve just reached the point where I’m about to dive into layout code. Looking at RG’s, it won’t be easy. I think I’ll write my own, very basic version instead. Then see about adding/removing notes, after which I may have something engaging enough for volunteers to join in.

One more thing I wanted to talk about. In Rosegarden, we were quickly confronted to the problem of letting know some part of the code that something has changed in data. For instance, if you have two editors opened on the same segment and make some changes in one of them, you need to tell the other editor about that change. Or you’re recording and you want the notes to appear immediately in the editor. This led us to write a bunch of code following more or less the Observer Pattern, or to use the Qt signal/slots in some cases. But we never got around to make something generic that would be used in all the code. So I was happy to find that Cocoa has a standard solution for this problem, which are notifications. Yet more code I don’t have to worry about, which is a good thing given how much time I can spend on this.

Posted in Uncategorized | 2 Comments

Update on iPhone vs. Android

So where are we now. Android has taken over, in terms of number of handsets running it. That was rather obvious.

The consensus is, it’s “Mac OS vs. Windows all over again”. That’s also hard to escape : a “luxury” product being offset by a cheap, not quite as good but “good enough” version, that surely rings bells. But it’s a bit more complicated.

For one thing, the original Mac never had a market share comparable to the one of the iPhone. And, despite what old Apple fanboys would say, Windows quickly became better than Mac OS, at least because it had more useful programs running (boring, but useful : Lotus 1 2 3, Word, that kind of stuff). The original Mac was hardly a serious office machine, and Apple failed to turn it into one back then.

The other thing is, what’s happening now in the PC market is that the Mac is gaining market share, and Mac sales are growing much faster than PCs. Also, Apple makes quite a bit of profit out of Mac sales, while most PC makers have paper-thin margins.

This clearly demonstrates that there’s money not only in being the absolute market leader, but also in being able to offer better service and quality. Customers are willing to pay for that. The pre-sales numbers of the iPhone 4 on Verizon seem to corroborate it as well.

So a likely outcome is that, even though the iPhone market share will diminish compared to Android as a whole, it will still be much larger than any single Android handset, and also much more profitable (except may be for Google which will rake in the cash from ads and licenses).

On a related matter, there’s the issue of “user freedom”. iOS is a walled garden, no contest. But the claim that Android would make the user free is not being realised so far. Quite the contrary, all the mobile providers are taking advantage of Android’s openness to do precisely what they couldn’t do with the iPhone anymore : rebrand it. They have regained the power of control on the software updates and the services being provided. When Apple releases a new version of iOS, every iPhone upgrades in a matter of days (except for that big fuck-up that iOS 4 was on the 3G model), no matter the carrier. When Google releases a new version of Android… not much happens. There’s no telling when your handset will actually run it, because you don’t know when the handset maker or the carrier will decide push the update, and they need time to port their own added layer too.

There may be pressure from users against that, but I doubt it will make things any different. Only geeks will have a problem with that situation, regular users won’t care or even know about the problem.

And then, there’s the new Nokia/Microsoft partnership. And HP’s WebOS. It tempting to dismiss them as too-little-too-late, but who knows…

Posted in Uncategorized | Leave a comment

more random bits (told-you-so category)

Flash on mobile sucks : Avram Piltch from LaptopMag actually tests Flash on Android : “When Flash 10.1 for Android is good, it’s great, but when it’s bad, it can make even the harshest Apple critic want to e-mail Steve Jobs an apology video playing in HTML 5.”

There are also details on how a Flash UI isn’t exactly practical on a touch screen. Gee what a surprise.

Web apps aren’t the (only) future, native apps aren’t going anywhere. Quite the contrary, they are taking over : a long-winded article on Wired claiming (hyperbolically) that the Web is dead, while it actually just explains we’re more and more using specialized apps to access web sites : Twitter clients, iPad/iPhone apps, RSS readers, etc…

And finally, yet another step about the iPhone being used as a universal remote : Pioneer has developed iControlAV, a remote control app to drive its new line of AV receivers and Blu-ray players.

Posted in Uncategorized | Leave a comment

Random tidbits

Sooo,

First, I finally caved in and moved my site to Gandi, because my previous host had apparently stopped keeping its platform up to date.

Second, this article made me smile. It’s a pretty standard diatribe against overly geeky linux fanboys unable to grasp the needs of normal users, but the reactions (starting right with the first one) are hilarious. It got so bad so quickly that the author had to turn off the comments.

Third, Google Wave. It’s demise showed me one thing : I’m a very slow blogger :-) . I’ve been meaning to blog about it ever since it was announced, and now it’s dead (although I hope the protocol will find its use eventually). Another thing I wanted to say is that a little thing Vic Gundotra said in the opening remarks of the presentation ticked me off. See the video at around 1’20″ : (paraphrasing) “with this application you will be amazed by what is possible in the browser”. Yeah, well, indeed, the UI is impressive… for a browser-based app. But in absolute terms, it’s pretty dull. And that I think is another example of how doing something which would normally be easy, within an environment that makes it hard, skews your perception of what you’ve achieved. Because it was so hard to make, you think you’ve done something impressive. Viewed from within, yes, it is. But the end result is not.

Posted in Uncategorized | 2 Comments

About that Safari 5 reader…

Nice piece about the Safari 5 ‘reader’ feature from Nik Fletcher – (also, Jim Lynch’s post on the same topic is hilarious – it seems to be hard for a blogger to exercise restrain and not invoke impending doom at every turn).

Two comments on this : one, this may be Apple nagging Google a bit (less ads viewed…), but Safari’s market share is probably too small to make a dent (plus the feature is a port of Arc90′s Readability, and nobody made a fuss about that). Second, this may also be a way to tell newspaper that if they want to make a bit more money with their online content, they might want to look at selling iPad apps.

We’ll see :-) .

Update 15th Jul. 2010 : Both John Gruber and Cédric remind me that I forgot to write about the most ironic thing in Jim Lynch’s post : his blog is the perfect example of the usefulness of the ‘reader’ feature. A post split into 3 pages where one would have been quite enough, tons of distracting blips all over… Yeah, no wonder he’s feeling attacked by this feature.

Posted in Uncategorized | Leave a comment

A quick reality check for Vic Gundotra

Something which occurred to me shortly after watching the now famous Google IO Android keynote. At one point, when about to demonstrate tethering, Vic Gundotra says“if you’re like me, you have a plethora of devices you carry around with you. And all those devices shouldn’t mean added complexity and yet another bill, right ?”.

OK, now, two things.

First : as far as I’m concerned, the added complexity comes from having to turn on a second device and set it up in order to get connectivity on the first. If by having an extra bill I can have that second device connect all on its own, I prefer that option. I already have several bills anyway, always will, it’s manageable.

Second : Android is meant as a competitor for the iPhone OS, therefore is meant to appeal to normal people, as in “non-geeks”. So a Google geek introducing a feature to other Google geeks at a geek conference by saying “if you’re like me…” kind of misses the mark. Yes, this is a tech conference, but that doesn’t change the fact this is supposed to be an end-user product, and if googlers use their own taste to determine their feature roadmap, they might encounter some problems.

The final irony is that this reminds me of a conversation I had with a friend a looong time ago (say 10+ years). At that time, mobile phones were dumb, had tiny b&w screens, and the whole contact/calendar stuff was either done on paper (ok you had a lousy contact list on the phones already) or on a Palm Pilot. I was carrying one of those along with my mobile, and was wondering why my friend was no longer carrying his. He answered he preferred to travel light with only a single device, rather than “looking like Luke Skywalker” (think Luke’s belt in Episode IV here). My friend’s name was Cédric.

Posted in Uncategorized | 2 Comments