I got to watch Steve Ballmer, CEO of Microsoft, being interviewed at the 2010 Gartner Symposium in Orlando this past week. Though Forbes lists him as the 33rd richest person in the world, he strikes me as the kind of rube who snaps towels at bare geriatric behinds in the country club locker room and passes gas while guffawing at black tie affairs. He’s raucous, loud, uncouth, and passionate about technology and about Microsoft. In one of his more famous moments, he showed that passion by slopping and dripping across a stage while chanting “Developers! Developers! Developers!”
Contrast this with that other Steve: Jobs. He’s refined where Ballmer is outlandish, starched where Ballmer is wrinkled, and precise where Ballmer is coarse. He, too, carries insane passion for technology, though in this case for Apple. You’ll never see Job chanting “Developers!” however, nor even hear him whisper it. Jobs is like the kindergartner who’s decided exactly how all towers should be built, and rushes around snatching wooden blocks from all the other children while hissing that “they’re doing it wrong!” Not content to provide tools and then sit back to see what bright minds do with them, Jobs authors the complete vision and brooks no editing. He’s worked out the big picture, the minutiae, and everything in between, and demands that people come to him.
Go to just about any non-Microsoft conference these days, and you’ll see the hordes of developers that are coming to Jobs. Developers are moving to Macs in startling numbers, and where developers go, consumers generally follow to get the cool software that developers build. True, this means that consumers are largely following developers to the Web, but they’re also following developers to iPhones, iPads, and Macs. Developers play vanguard in the search for better technology, and so comprise a group worth wooing, as Ballmer knows and Jobs denies.
At one time, Java claimed a part of the Jobs vision, and Mac OS X offered a Cocoa-Java bridge so that developers could write Cocoa applications in Java. Jobs got jaded with Java, however, and junked that bridge. Ruby, in the form of RubyCocoa, made a brief appearance in default installations of Xcode, but then got expelled in in Xcode 3.2. You can still install RubyCocoa, and MacRuby continues the charge to allow development of Cocoa apps in Ruby, but I’d be nervous to base a business around building Cocoa apps in Ruby, for fear that Jobs will cool toward Ruby and figure out some way to block Ruby from Cocoa.
Last spring, Apple creating a furor by blocking Adobe’s Flash-to-iPhone compiler and other non-approved languages from iPhones. Although Apple finally backed down from the infamous section 3.3.1 that banned languages outside the Jobs vision, the policy reminded developers that Jobs owns the building blocks and isn’t afraid to snatch them back.
- The Mac App Store
- Full-screen Apps
- Mission Control
Launchpad faces stiff competition from the myriad other Mac launchers out there (just google “mac launcher” for a taste of what’s available), and anyway Apple’s Dock proves that Apple doesn’t know launchers. Full-screen apps can’t possibly excite anyone; I’ve already braced myself for the mocking from my Windows-loving nephew reminding me that all GUIs have had full screen apps for, like, forever. Mission Control may be a useful upgrade to Expose and Spaces, depending on its implementation, but is hardly the stuff to base a new operating system release upon.
The attention-grabber in the list, however, is the Mac App Store. Reaction has been mixed — a marketplace might increase exposure for many developers, and offloading the e-commerce bits to Apple is probably worth 30% of the take, but developers fret not just at the list of restrictions, but also at the direction this may be taking third-party applications and being able to install whatever you want on your machine. No one can claim that Jobs is a benevolent dictator anymore, at least not with a straight face.
Apple followed that up with the announcement that they’re deprecating their JVM. The Web’s abuzz with commentary, and many are explaining why this is a good thing: Apple shouldn’t be writing the JVM; Oracle/Sun should. While I agree with that, the announcement should have been that Apple was deprecating their JVM and Oracle has pledged to develop, support, and maintain a JVM for Mac. The second half of the announcement went glaringly missing, and all we know for sure is that the Apple JVM will almost assuredly disappear and the only alternative runs GUIs only in X11.
I work in a Java shop, and have crusaded for Macs for our developers. We have a sprinkling of Macs here, but Infrastructure has reservations about rolling Macs out en masse. I’ve told them over and over that Mac is a superior platform for Java development, but until this gaping hole is closed and someone pledges to support a first-class JVM on Mac, I’m keeping my mouth shut. Can you imagine me limping back to those guys and asking for a Windows 7 VM so I can run Eclipse? I’d rather surreptitiously SSH into a Production server and write code there than admit that.
So, Mr. Jobs: take a cue from Mr. Ballmer and treat us developers better. Act like you care about us. Developing software is our livelihood and our passion, and we’ve moved to Macs because we feel they’re a better development platform. We like that you have vision and passion, and we think that most of your vision is good. We have visions, too, and we want you to stop trying to blind us. We can take care of details, too; don’t make us sweat them out with Ballmer.
When you walk away from a Windows machine, you can press <Windows key>+L to lock the screen and keep out the bad guys. Mac OS X has no such shortcut, so the workaround I’ve been using is to go into the Security preferences and check the box that says “Require password immediately after sleep or screen saver begins,” like this:
Then, I set one of the corners of my screen to trigger the screen saver in the Expose & Spaces preferences, like this:
Slamming my mouse pointer into the corner usually triggers the screen saver, but either it doesn’t work quite right or I’m as dextrous as my teenage children claim. It can be frustrating.
I also discovered that opening the preferences Keychain Access app and checking the box beside “Show Status in Menu Bar,” like this:
shows a lock in the menu bar that if you click, has an option called Lock Screen.
Getting closer, but still too much work. Here are the quickest ways I’ve found:
- Found this here. As long as you have your Security preferences to require a password after sleep or screen saver, as above, you can press the key combination to turn off your Mac’s display, Control + Shift + Eject, and it will lock your Mac.
- Install Alfred, go into its preferences, and under System Commands set the keyword for Screen Saver to “ss,” as shown below. Now, you can trigger Alfred and type “ss<Enter>” to lock your Mac.
Either way, it’s almost as fast as locking a Windows machine, and you get the satisfaction that you’re locking something that’s actually worth locking!
I’ve been working on a new project at work that deals with files in X12 format: delimited files that generally use asterisks for field delimiters and tildes for line delimiters. Here’s an example fragment:
ISA*00* *00* *ZZ*XXXXXXXXXX *01*030240928*100803*1628*U*00401*000091929*1*P*:~ GS*HC*XXXXXXXXXX*030240928*20100803*1628*91929*X*004010X096A1~ ST*837*00411452~
The way to interpret this file is that each line is a segment composed of elements. The first element in each line, called the zeroth element, names the segment. For example, the first line in the segment above is the ISA segment. The segment then breaks down into its elements, like this:
When someone wants to refer to the segment containing the “ZZ” above, for example, they call it the ISA05.
Well, I quickly got tired of counting between asterisks to determine which field was the ISA13, or the GS08, or whatever, so decided to write a tool to parse the segment for me and tell me which value was which. Since we do all our Java development in Eclipse, writing an Eclipse plugin was a natural choice — especially because I could then share it with my Windows-using coworkers.
The result is X12 Segment Split View, available as an Eclipse update site (http://grailbox.com/eclipse). Also, you can get the source from github (http://github.com/hoop33/SegmentSplitView). The way it works is it polls your clipboard once a second, and if it detects an X12 segment (well, if it detects text that has at least one asterisk), it pulls, parses, and displays it. Read more on the Downloads page on this site.
I hadn’t written any SWT or JFace code in over five years, so I was a little fuzzy on how to get this tool written. Now comes the surreal part: I cracked open an electronic copy of The Definitive Guide to SWT and JFace and read words I wrote over six years ago to figure out how to write this code! It felt a little weird to have me-from-the-past teach me-from-the-present how to use the technology, but it worked (quickly, I might add) and now I don’t count segments anymore!
Last Saturday, Michael Privat and I drove up to Atlanta to attend Cocoa Camp, a BarCamp-style un-conference focused on Cocoa. We each got two free T-shirts, got to present twice, met a lot of bright folks, learned a lot, and had a great time.
Aaron Hillegass from Big Nerd Ranch gave the keynote on “The End of Innovation.” The man is tall, and he does indeed wear that hat, but he confessed it’s a marketing ploy and he doffs it in the office. His keynote was insightful, though a little depressing, and posited that the end of innovation is here for iPhones and iOS apps. Wow. He followed that, however, with what you can do to fend off the end. Here are the points he made as I understood them:
- The signs of the end of innovation are:
- Decreasing profit per unit
- Average age increasing
- Profits from selling what people want decreasing, while profits from advertising increasing
- Free solutions nipping at heels of paid solutions
- Significantly better battery life, perhaps through async chips that eliminate need for clock.
- Built-in projector eliminating need for a screen — to view, you’d project the image onto a wall or whatever is handy. This could mean significantly smaller devices.
- Better speech input.
- Apps must be simple.
- Apps must be inexpensive.
- Average consumer doesn’t really care (early adopters buy lots of apps, but mainstream consumers don’t).
So, how can you fend off the end of innovation for iOS apps?
- Change the terms of the three signs that iOS application development is nearing the end of innovation. Apple helped by doing this with the iWork apps for iPad (not simple, not inexpensive, and perhaps more consumers care).
- Embrace new devices like Apple TV.
- Embrace new industries, not just consumer-oriented.
- Embrace new APIs.
- Get interdisciplinary (find niches and exploit them.
- Take the long view (Intel, for example, has started a venture capital firm that invests in companies that do things that consume CPU cycles).
- Don’t fear the tangible. For example, there’s a hardware device that lets you fly a remote-control helicopter with your iPhone.
He concluded by saying that many problems still exist that haven’t been solved, so you still have opportunity in the iOS app market. It was a good talk that could be disheartening for someone looking for easy profits, but painted a realistic view of what iOS developers are up against. Mediocrity in the App Store won’t cut it anymore, but greatness and innovation will.
It was a great conference. You can read Michael’s account of our presentations here.
- Sign up for @copyapp with this link, and we'll both get 5 GB of free cloud storage in addition to the usual 15 GB: t.co/UWOCDhDeak
- Why does an Office 2011 update make me close Chrome before I can install it? What browser plugins is it foisting on me? Or is it just spite?
- Once people get your point, shut up.
Follow @hoop33 on twitter.
What I’m Writing
- May 2013 (3)
- April 2013 (6)
- February 2013 (1)
- January 2013 (1)
- November 2012 (6)
- September 2012 (1)
- August 2012 (6)
- July 2012 (10)
- June 2012 (4)
- May 2012 (7)
- April 2012 (4)
- March 2012 (8)
- February 2012 (7)
- January 2012 (7)
- December 2011 (1)
- November 2011 (1)
- September 2011 (4)
- August 2011 (2)
- July 2011 (2)
- June 2011 (2)
- May 2011 (4)
- April 2011 (2)
- February 2011 (1)
- January 2011 (1)
- December 2010 (3)
- November 2010 (3)
- October 2010 (4)
- September 2010 (6)
- August 2010 (96)