Monday, July 30, 2007
This version of LaunchBar introduces a bunch of new features, but the most interesting are two that rely on a new gesture: holding down the last typed key.
- Instant Open
- Hold down the last character of an abbreviation to open the item without having to press Return.
- Instant Send
- With text or a file selected, press Command-Space (which normally summons LaunchBar) but hold down the Space key to also transfer the selection to LaunchBar (using the Send to LaunchBar system service). Previously, to do this from the Finder, you had to use the separate Get Finder Selection command (Command-G).
I also like the new feature to browse within text, RTF, and HTML files; and the improved calculator (Command-= or just type a digit).
I don’t like Safe Sleep one bit—at least not the way it’s currently implemented. I especially dislike the fact that Apple has not merely made it the default setting, but has omitted any graphical interface for turning it off—and the fact that if you use the command line to do so, chances are good that Safe Sleep will turn itself back on when you least expect it.
Excellent article; don’t miss the end.
In effect, physically rotating the phone into the BoB landscape mode has swapped the meaning of the buttons. The button that used to be in the position that maps to “increase volume” is now in the position that maps to “decrease volume.” The solution is to use software to swap them back.
I’m not convinced, and I think the demo is irrelevant because it uses software buttons. With hardware buttons you remember how they feel and how they’re positioned relative to the corner. The software buttons are centered, and there’s nothing to feel. Especially if it’s in a pocket, I would rather that the buttons behave predictably than have to guess what orientation the phone thinks it’s in and then determine whether it’s switched the meanings on me.
Sunday, July 29, 2007
All e-mail to email@example.com goes through FogBugz which is a
huge huge time saver for me. I can turn e-mails into bug reports, file
them away, respond, easily see previous e-mails from the reporter, and
generally do everything I need to do when I’m wearing my support hat.
It’s all easy and does what I need and want it to do.
I’m especially interested in what Gus thinks since he’s also a solo Mac developer. In this case, our solutions couldn’t be more different. I tried FogBugz a few years ago, since it was getting rave reviews, and just couldn’t stand it. (Thanks to Fog Creek for offering a full refund with no questions asked.) At the time, I liked Trac somewhat better for issue tracking, but of course Trac doesn’t handle support e-mails. I can see how something like FogBugz would be useful for a setup involving multiple developers and support people, but for me I see no need for it. I’ve never had a problem with support e-mails falling through the cracks, and my entire e-mail history is easily accessible in EagleFiler. Web-based bug trackers vary from terrible to pretty good—and FogBugz is certainly towards the good end—but I’ve yet to find one that I actually liked using. Part of it is that for this kind of highly interactive work I think it really helps to have a desktop interface. It may also be that I have a certain way that I like to work, and the Web-based trackers that I’ve used are rigid in making me change my style to fit theirs. I’m currently using OmniFocus as my issue tracker and am loving it. It’s also rigid, in a way, but the workflow that it enforces happens to be a close match to what I’ve always tried to achieve with other tools.
Sunday, July 22, 2007
I just issued a refund to a customer who bought SpamSieve under the assumption that it would run on his iPhone. This was not an unreasonable assumption. Apple has been advertising the fact that the iPhone runs OS X, and to the average user this is indistinguishable from “Mac OS X.” Plus, the iPhone runs “Safari,” which everyone knows is a Mac program, not to mention “Mail.” And while the iPhone was once derided as a closed platform, Steve Jobs made headlines for announcing at WWDC that Apple now had a way for developers to “create applications for mobile devices.” Microsoft is at least clear that its handheld OS is “Windows Mobile” and that it runs “Office Mobile.” Under the hood, the iPhone apps are called “MobileSafari” and “MobileMail,” but in its public copy Apple eschews the modifier. I don’t think Apple is trying to mislead, but the generic names coupled with the constant emphasis on how the iPhone contains “the full Safari engine” and lets you access “the real Internet” is confusing people.
Friday, July 20, 2007
One regard in which the iPhone’s OS X is clearly just a shallow subset of Mac OS X is in the set of fonts that come installed with the system. Apple made some curious and disappointing decisions here.
That sums it up, but I was tempted to just quote the whole article.
The development of PyObjC has slowed down to a standstill, or so it would seem if you look the website or subversion repository. That’s far from the truth however, I’ve been hard at work on a major new version of PyObjC and the effort is paying of.…The new version isn’t in the public repository yet however because I’m targeting Leopard (Objective-C) and haven’t separated the Leopard specific code and examples from the bits that are safe for Leopard.
Sunday, July 15, 2007
I never liked CVS—the limitations and design flaws become obvious almost as soon as you start using it—but after years of use it was a familiar model that worked well enough in practice. Then came Subversion. It worked like CVS but fixed the glaring problems, providing atomic commits, the ability to move files and folders, checksumming, revision numbers that represent whole trees, and easier tagging and branching (albeit by shoe-horning them into the tree). Switching was an easy decision. I remained happy with it, especially with the more reliable FSFS backend and the new working copy format. I was aware that Subversion had some problems, but none were too bothersome, and as a solo developer I knew I didn’t need a distributed version control system.
Then I heard about Git when I happened to watch a video of its creator, Linus Torvalds. It had not occurred to me that CVS and Subversion were fundamentally broken. Torvalds is undeniably a smart guy, but he’s also known for his bluster. I’d heard Git mentioned a few times before, usually in the context of it being difficult to use, something only a kernel developer could love. So I was skeptical but interested enough to try it out.
What I found is that Torvalds’s bragging is justified. Learning about Git after using other version control systems is somewhat like learning a new programming language that’s radically different from what you’ve known before. Even if you might not need the more unusual features most of the time, you feel as though your eyes have been opened, your mind expanded.
Beyond just the distributed model, Git’s implementation is beautiful. It stores the repository in such a logical way, using far fewer files and much less disk space than Subversion. Each file, no matter its location in the tree or history is only stored once. The repository is stored in a single .git folder at the top level of your working directory. In addition to its repository, Subversion needs a .svn folder inside each folder of the working directory. The working directory holds two extra files (one for the data and one for the properties) for each file, plus some more file and folders for each directory. Git needs none of these. It’s more efficient, and you don’t need to make sure all your tools have special handling for the invisible .svn folders.
Git’s implementation is compact. It doesn’t rely on a ton of other libraries, and the tar.bz2 file is only 1.1 MB. Compiling Git took only 15 seconds on my Mac, compared to 104 seconds for Subversion.
The user interface is currently a bit rougher than Subversion’s, but it’s not too bad, and some things are actually nicer. Unfortunately, the man pages and manual
don’t build out of the box on Mac OS X, so I recommend reading them online, along with the tutorial.
In order to migrate from Subversion I needed to install LWP:
sudo perl -MCPAN -e shell
and a different build of Subversion that included the Perl bindings. With /usr/local/lib/svn-perl in my PERL5LIB I was then able to use the git-svnimport import command, but I found that this didn’t work very well, perhaps because one of my Subversion repositories didn’t use the traditional branches/tags/trunk structure. I had much better luck with:
git-svn init -T <svn-repos> <svn-repos>
So far I’ve moved two Subversion repositories to Git. Before I move my main development repository I want to write some shell aliases to make it a bit smoother to use, and some scripts to integrate it with BBEdit.
The New England Journal of Medicine (via TidBITS Talk):
The potential for permanent hearing loss due to prolonged use of personal stereo equipment, such as portable compact-disk or MP3 players, at high decibel levels has been well described in the literature. We have recently become aware of an additional, albeit uncommon, hazard associated with the use of such devices.
John C. Welch:
Wow, so wearing what amounts to a big charged antenna near your head when
there’s a ton of static electricity in the air is a bad idea.
Amazon just sent this to me via e-mail:
We’ve noticed that customers who have purchased or rated
Compiler Design and Implementation by Steven Muchnick have also
purchased Unleashing Web 2.0: From Concepts to Creativity by
Gottfried Vossen. For this reason, you might like to know that
Unleashing Web 2.0: From Concepts to Creativity will be released
on July 27, 2007.
Are compiler writers moving to the Web, or is Amazon’s recommendation system confused, perhaps because both books are by Morgan Kaufmann?
Wednesday, July 11, 2007
The fundamental approaches taken by every implementation I have found in the literature are to either 1) box all floating point numbers, or 2) to use a combination of boxed floating point numbers and untagged floating point numbers. As one might imagine, (1) can cause serious performance degradation for numerically intensive programs, due to the need to create new boxed objects to store the result of each floating point computation. As for (2), there are numerous papers that discuss various compilation strategies for finding opportunities to use untagged unboxed floating point numbers, but these techniques appear to to be limited to particular problem domains, since they mainly try to convert vectors of floating point numbers to be untagged and unboxed. Nowhere have I found any mention whatsoever of using tagged unboxed floating point numbers.
Both of these key interface elements, navigation and tools, are in fixed locations on the iPhone screen. If you’re trying to develop a “sweet” web application for this device, you’ll quickly find that you can’t follow these standard conventions. That’s because there is no fixed positioning in Safari for the iPhone.
Yeah, the idea of storing your software company’s defect database on someone else’s servers is kinda scary to me too, at least in a commercial environment. I guess at some point the decision to outsource defect-tracking comes down to a cost-benefit analysis in which you weigh the cost saved by not paying in-house IT to maintain your defect system against the potential damages caused should your critical data leak out due to either deliberate action or indirect negligence on the part of the vendor.
My first must-fix annoyance is that Mail’s Reply feature is hard-wired to encourage top-posting, an uncouth and illiterate practice.
Here’s an AppleScript I ginned up to fix this by removing the blank line at the top of each response and moving the insertion point to the bottom of the message. (It uses GUI Scripting, and so requires Access for Assistive Devices to be turned on.)
It looks like it will require some adjustment for signatures, though.
The comprehensive iPhone review from Ars Technica is now available, with lots of real photos and screenshots. I wish more reviews didn’t use the press photos.
Sunday, July 8, 2007
Anson Horton (via Lambda):
Several years ago, Anders Hejlsberg (chief designer of C#) and Peter Golde thought of extending C# to better integrate data querying. Peter, who was the C# compiler development lead at the time, was investigating the possibility of making the C# compiler extensible, specifically to support add-ins that could verify the syntax of domain-specific languages like SQL. Anders, on the other hand, was conceiving a deeper, more specific level of integration. He was thinking about a set of “sequence operators” that would operate on any collection that implemented IEnumerable, as well as remote queries for types that implemented IQueryable.
At this point one could argue that the CGFunction API allows you to create any of the function types because you can code up the function however you want. While this does work in an interactive environment, once you print you are exclusively in the realm of sampled functions as the PDF generation can not magically turn your C function into a PDF function definition other than sampled.
Saturday, July 7, 2007
The painful realization that flowed from this moment, was that we geeks crave/need cool more desperately than any other segment of society, and for the most part we need it to be as straightforward to obtain as opening a box, because [if] the road to cool involves dexterity or social skills, we’re screwed.
…there is now a virtual 5 or 6 pixel wide bar you can grab to resize the source list, you no longer have to hit that one pixel line. This is a massive improvement in terms of usability. I’m not entirely sure dragable areas that are larger than the visual representation of the control like this are a great idea though.
Friday, July 6, 2007
I have a theory that I haven’t heard yet: Flash wasn’t included because it crashes so much.
Reading the comments, there are apparently lots of other good reasons.
By the way, the iPhone isn’t the first Apple product to be anthropomorphic. Apple often omits the article from “Macintosh” and “iPod,” and sometimes even “Finder.” (Apple’s style guide recommends “Macintosh computer,” “the Finder,” “iPod,” and “iPod digital music players.”)
The far larger group losing out when Apple absorbs a market is the end users of the OS. How can that be, when Apple has provided an Apple-branded solution for a given need? The problem arises from the fact that Apple is not married to any particular new market. As such, the provided solutions are seldom deep. They do the job for many, perhaps even most users, but as with all software, they’re seldom complete.
This is true enough, but I’m not sure that I like the suggested solution—that Apple should factor out more of its applications’ functionality into frameworks.
First, Apple seems to have its hands full working on the existing OS. There are buggy APIs that don’t work, even though we’ve crossed into x.x.10 territory. There are short-lived APIs that weren’t designed properly the first time. There are also potential APIs and plug-in interfaces that would give developers access to areas of the OS and Apple applications that are currently inaccessible without reverse-engineering and reliance on unreliable, private interfaces. I would much rather that Apple work on these things—because they are issues that only Apple can address—than on writing framework code that developers could write themselves.
Third, it’s not clear to me that such frameworks would help the ecosystem. In many cases, your application would want to add functionality that goes beyond what’s in the framework. It’s tough to write a framework that’s general enough to be used in unexpected ways. It might incorporate design decisions that limit its flexibility or have bugs that Apple didn’t encounter but that are on the critical path for what you need to do. If your application relies on a framework for its core functionality, you are at Apple’s mercy.
To build a really innovative application you may have to start from scratch, and then you’ll wish that the framework didn’t exist. If the framework provides 70% of what you need, you’re now spending 100% effort to get that extra 30% ahead of your competition. Because of the framework there are now lots of 70% applications that took a weekend to build, and some of which are free, so it’s harder to differentiate your product. In the next OS release, the framework will probably do more, so once again you’re in the position of competing with something free from Apple—only this time it’s a developer product rather than an end-user product. Even Omni decided it couldn’t do this, and newer versions of OmniWeb are based on WebKit.
Having an Apple framework is a good way to guarantee that there will be lots of applications that have many of the same strengths and weaknesses as the underlying Apple technology, but this may be more of a monoculture than the healthy ecosystem of “deep” solutions that Paul desires.
I don’t mean to say that having more frameworks would necessarily be bad, but I don’t have a strong feeling that it would be good, either. The rise of the OS is inevitable, and there are no simple solutions. If Apple had created a framework for dealing with iPods and the iTunes store, Audion might still be under development. On the other hand, if there were an AirPort Express framework, you wouldn’t need Airfoil to play music from Audion on your stereo.
Tuesday, July 3, 2007
Craig Hockenberry has a great post about how the Leopard Dock violates the Apple’s own perspective and lighting guidelines:
The floor displayed on the Dock does not use the perspective of the desk in front of you, nor does it appear as a shelf. Because there’s a difference between the floor angles and the traditional desktop icon angles, many icons look wrong.
An example is the Trash, which has a slight tilt forward. The Transmit truck also looks like its pirouetting on the front-left tire.
Lots of Apple and third-party applications have never actually followed the Mac OS X icon guidelines. In most cases I think this is OK because the result is often prettier or more easily understood than it otherwise would be. The new Dock, however, makes the majority of existing application icons look wrong, for no particular reason. What good is eye candy if it makes things look worse?
Monday, July 2, 2007
Amusingly, web pages with the most flexible layouts (say a table with a single stretchy column) have the most trouble adapting to the iPhone usage pattern, because iPhone Safari renders the page to a fixed width, rather than wrapping words like most mobile browsers, you'll end up zooming and panning on these types of pages.
We always thought of iTunes’s Cover Flow as a neat visual trick but not very useful. (We discovered and enjoyed it when it was a beta project, before Apple acquired it and hired its developer.) But in iPhone’s direct manipulation interface, Cover Flow feels natural, a good way to browse music.
The iPhone’s recessed headphone jack is genius I tell you. Maddening, apparently nonsensical, but pure genius. As those of you who have already bought iPhones know, most headphones don’t fit the iPhone due to how far the plug is recessed into the case, meaning that unless a headphone plug has a very narrow flange behind the plug it won’t fit. A lot of people have commented that this was short-sighted or uncaring of Apple, but I think it’s a calculated move toward world domination.
There is no mistaking that this is a first-release phone, both in the hardware and software. However, it is an Apple first release, equivalent in many respects to the fifth or sixth release quality we have come to expect from other major computer technology players.
Because if (and only if) you don’t qualify for a regular service plan, AT&T will offer you instead the month-to-month “GoPhone” plans. These are supposedly suckier because they come with fewer minutes and you pay more per extra minute; but they’re cheap, and I don’t make a lot of voice calls so I don’t care about having "only" 200 minutes a month. Adding on the $20 data service, it comes to $50 a month.
Sunday, July 1, 2007
This map gives a whole different feeling to New Zealand. This time you can easily see that apart from Australia we’re surrounded by a whole lot of ocean. If we go North and swerve past a few smaller islands there’s nothing but ocean. If we go East there’s nothing but ocean. We’re a long way from anywhere, really.
I hope you like top-posting, and quoting the entire message you’re replying to. Me, I despise that style of email, but iPhone Mail doesn’t really work well any other way. One problem is that the iPhone doesn’t support the concept of selected text. That means you can’t just select a specific portion to quote of the message you’re replying to; nor can you select a chunk of the quoted message and delete it while editing. The only way to delete text is one character at a time (although the keyboard does let you press-and-hold to repeat). And to top it off, there’s no way to reply without quoting anything at all.
Not a surprise, but noteworthy nonetheless: iPhone’s Mail has no spam filtering whatsoever. You’ve either got server-side spam filtering or you’re stuck wading through the dreck.
Or you can use SpamSieve on your Mac to filter out the spam. It’s not the most elegant solution, but as far as I know (I don’t have an iPhone yet) it works, and it has the advantage that you don’t have to download the spam messages over an EDGE connection.
Get 64-bit support into iTunes and QuickTime, and into whatever drivers or supporting software is needed for iPods and the iPhone. 64-bit Windows is far from mainstream, yes, true.…But you, of all companies, could at least try—especially with users thinking it will “just work.”
The iPhone User’s Guide contains lots of interesting information about the iPhone. But the most interesting thing, to me, is that the document was created on a Mac using Adobe FrameMaker 6. This version of FrameMaker was released in 2000 and ran under Mac OS 8 and 9. FrameMaker 7.0, the last version that ran on Macs, was released in 2002. Old Mac OS software can run under Mac OS X in Classic, but only on PowerPC-based Macs, the last of which was discontinued almost a year ago. Apple is apparently using some old software and hardware to document its newest product. I totally understand; FrameMaker 6 is a great piece of software, and there’s nothing like it for Mac OS X.