Agile
I think it’s far better for everybody involved—the client, the service provider, and the eventual end users—to use an iterative, agile approach to software development.
Friday, August 29, 2003
I think it’s far better for everybody involved—the client, the service provider, and the eventual end users—to use an iterative, agile approach to software development.
Continuation based web servers provide a way of modeling the flow of a web application in a procedural manner. Instead of worrying about how to get inputs through forms and pass that data via the session to other forms you can write your code almost exactly like a normal procedural application and it ‘just works’.
Here’s an example.
Wednesday, August 27, 2003
With a nod to Douglas Adams, Hydra is now SubEthaEdit. Not the greatest name, perhaps, but it’s fun.
I don’t really agree with Macworld’s assessment of seven FTP clients. The interface section leads off mentioning Fetch’s Get and Put buttons, giving the impression that it doesn’t support drag and drop. It complains that people will find these names confusing, though I personally find them vastly clearer than Transmit’s notion of “your stuff” vs. “their stuff.” (Does it cease being my stuff when I put it on my server?) Teague says that “RBrowser is the most OS X–like of the FTP clients we reviewed”—which is either very generous or very cynical depending on your point of view—and then dings it for having a “complex interface.” He gives props to FTP Client for letting you save droplets that upload files to particular folders, but any scriptable client will be able to do that, and anyone serious about synchronization will use rsync or a similar tool rather than FTP. Teague assigns a lot of weight to previewing capabilities, but I’ve never cared about that feature. He doesn’t seem to care about Edit With BBEdit, manages to imply that Fetch doesn’t support that, and prefers RBrowser’s less elegant alternative. He doesn’t mention the Keychain, AppleScript, batch downloads, Internet Config, SSH, or Kerberos.
Which FTP client do I use? I started out with Fetch because it was good, free, and had some unique features for Dartmouth’s network. I then used Anarchie for many years and was a big fan of its multiple-window interface. I used Fetch when I needed Kerberos. Then Stairways changed Anarchie’s name and got the idea that I’d rather have a skinnable FTP client than security or batch features. I stuck with it through one upgrade because it was OS X–native, but the mirroring feature stopped working for me. This led me to rsync, and I stopped using FTP entirely. Recently, I’ve been doing work on a server that I don’t mirror locally, and so I’ve wanted to edit remote files securely with BBEdit. Teague claims that Fetch supports SFTP, but that’s not true from what I’ve seen, and so I’ve instead been using Transmit. Transmit is a nice, polished program, but I’m not a fan of its single-window interface or drawers, and I don’t understand the difference between its queue and batch download features.
Mac OS X Hints links to HTMLDOC, a tool that can download Web pages and save them to PDF, with clickable links.
Bruce Hoult writes about a Dylan entry in the International Conference on Functional Programming contest.
Chris Hanson writes about his open source frameworks BDControl, BDRuleEngine, and BDRuleEditor. I haven’t had a need to use these yet, but rule-based programming is fun.
Need colours? Feeling lazy? Kohai Style’s QuickColor tool is effin’ awesome. Drag the sliders around to get an extremely nice bunch of harmonious colours. It’s based on ColorMatch, except in Flash.
Saturday, August 23, 2003
Today I learned something about distributed objects and NSConnection. When I have an object that I want to access from multiple threads (or that I want to receive messages in the main thread), I make it a DO server, and I give each thread a proxy. I’ve been creating the proxies like this:
NSConnection *clientConnection = [[[NSConnection alloc]
initWithReceivePort:[serverConnection sendPort]
sendPort:[serverConnection receivePort]];
id proxy = [clientConnection rootProxy];
There is only one serverConnection per server, but that’s OK because I call [serverConnection enableMultipleThreads]. The problem was that I was inexplicably getting NSObjectInaccessibleExceptions saying “NSDistantObject access attempted from another thread” when two threads tried to create proxies for the same server.
The above code makes it look like there’s one clientConnection per thread/proxy. However, the documentation for the -initWithReceivePort:sendPort: method says:
If an NSConnection with the same ports already exists, releases the receiver, retains the existing NSConnection, and returns it.
This means that the connection will be shared among multiple threads and you have to call [clientConnection enableMultipleThreads] to avoid the NSObjectInaccessibleException. I’m not a big fan of this design, because I don’t think code using a given connection should have to know when some other code is using a connection with the same ports. But there you have it.
Friday, August 22, 2003
SQLite Database Browser is a public domain browser for SQLite databases. It’s written using QT, so it doesn’t feel like a real Mac application, but I can imagine it sometimes being more convenient than the shell tool.
Netflix Fanatic is a Watson-like utility for managing your Netflix queue. I was quite impressed (and a little worried) that it automatically extracted my Netflix login information from Safari’s preferences. Aside from interface flaws like a square filter box (on Jaguar) and metal, it seems nice. You can re-arrange your queue with drag and drop!
I’m not much of a baseball fan, but I’ve always enjoyed watching the Little League World Series. Of course, I want Saugus to win this year. Gotta love a team with the local accent built into its name.
Thursday, August 21, 2003
I can set myself to awake awfully early in the morning, and it very often makes me awake very shortly before the time I had decided, usually a minute or less—and if it has ever failed, it can only be once or twice.
Also, it seems I can get by with less sleep than when using an alarm clock. I don’t know if this really is because your sleep cycle adjusts itself, but I’m less tired sleeping, on average, six hours per night, than when I sleep eight hours but abort my sleep by external means.
Wednesday, August 20, 2003
Mailsmith 2.0.1 is a nice little update that addresses two peeves of mine. You can now see a message’s label when it’s selected, and filters can test senders for membership in the address book and in groups. Additionally, every copy of Mailsmith now includes SpamSieve.
I was initially excited about Mailsmith’s increased control over its list fonts, but due to the way Mac OS X draws text it’s pretty hard to improve on the defaults without sacrificing readability or space. You can pick a screen font like Geneva or Verdana, but they just don’t look very good with anti-aliasing off.
Congrats to John Gruber on getting published in Macworld, but I must disagree with his assertion that “CVS is notoriously cryptic even by Unix standards.” If he were comparing it to a Mac program with a real interface, I’d agree. But compared to other Unix programs, no. Maybe CVS just happens to fit my brain, but I think its basic commands are straightforward and just about what you’d expect. I had thought that was a generally accepted view, just like most people agree that vi is hard to learn. (What they disagree about is whether it’s good once you know it.) There’s no denying that CVS has some dark corners, but those aren’t the areas that BBEdit deals with. BBEdit makes the easy stuff really easy and convenient. You’re on your own if you want to set up a repository, deal with branches or tags, do non-standard checkouts, control wrappers and ignored files, or set up hook scripts.
Tuesday, August 19, 2003
The MDJ Power 25, which tracks power and influence in the Mac world, was released today. There are also many sample issues of MDJ and MWJ online now.
Monday, August 18, 2003
Macs reduce IT head count while Linux probably increases IT head count, simple as that.
I’ve got an early birthday present from my auntie—it’s Radiohead’s lovely new album, Hail To The Thief. It’s ‘protected’ by the fabulous Copy Control technology, which caused my computer to skip, hang and eventually require a restart when I tried to play it. Oh dear.
The marketing objective has been achieved, but just watch as the lawyers in the board room blanch at the thought that the name of the company is losing its capital letter and entering the public's unconscious lexicon of product-derived verbs.
Mark Pilgrim shows how to remove file extensions from URLs to avoid exposing implementation details in your permalinks.
Jonathan ‘Wolf’ Rentzsch has posted a great paper:
Data alignment is an important issue for all programmers who directly use memory. Data alignment affects how well your software performs, and even if your software runs at all. By understanding the causes behind alignment, we also can explain some of the “weird” behaviors of some processors.
This page presents a program that generates a massive regular expression, based on the RFC grammars, for matching URLs. However, since URLs in the wild don’t necessarily follow the RFCs, a simpler regex is probably more useful.
This report is the result of a collective effort by the Commission, assisted by the members of the Technical Advisory Committee. We have all worked hard to present a very precise explanation of the reasons for the failure and to make a contribution towards the improvement of Ariane 5 software. This improvement is necessary to ensure the success of the programme.
Thursday, August 14, 2003
tower$ jot -w "%03u" -s " " 19 2 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
tower$ python -c "print ' '.join(['%03u' % i for i in xrange(2, 21)])" 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
tower$ perl -e 'print join(" ", map { sprintf("%03u", $_) } (2..20)), "\n"'
002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
Mac OS X Hints reports that TeXShop 1.30 can copy rectangular regions of any PDF to the clipboard (as PDF).
Wednesday, August 13, 2003
Kai von Fintel links to Beamer, a LaTeX presentation class that works better with PDF than Propser.
Aaron Swartz points out that that the new Google calculator can do unit and base conversions.
Jeff Newbern has written a tutorial on monads (a way to think about state in functional programming languages).
BBAutoComplete 1.2 is out. This release adds support for Script Debugger, Tex-Edit Plus, and TextWrangler, which exhausts the list of programs I know of that support the text suite. It also updates the interface to match my other applications, and adds an icon contributed by a BBAutoComplete user.
Tuesday, August 12, 2003
In other text editor news, Hydra has been improving quickly. The current version supports crude syntax coloring of many languages as well as live Web previews. It also works with the amazing TextExtras.
The initial version of TextWrangler lacked one of BBEdit’s greatest features: AppleScriptability. TextWrangler 1.5 is now scriptable (and recordable and attachable) and adds syntax coloring for non-C programming languages and TeX. Notable BBEdit features absent from TextWrangler are the HTML tools, the glossary, file filters, multi-file diffs, CVS integration, and the shell palettes and worksheet. TextWrangler is now an extremely attractive product for people who don’t deal with HTML. That said, I regularly use all of the above features, except the shell worksheet, even when not dealing with HTML, so I think the full BBEdit is worth it for non-Web developers.
I thought I’d post a few of the highlights of my odyssey here, so everyone can experience the wonderful sights of Interstate 80 without actually driving the damn thing!
Monday, August 11, 2003
Nicholas Riley explains devices, partitions, volumes, and disk images.
InfoWorld (via Gary Robinson):
Regarding such legal principles as liability and warranty, the GPL clauses have absolutely no legal validity. Under the license, developers and distributors of open software are not liable for any problems with their products. The GPL avoids any wording that could imply liability. Such a license is simply unenforceable under German, or even European Union law for that matter.
What about other software licenses that disclaim liability?
Richard Gabriel’s Patterns of Software: Tales from the Software Community is now online (via Lambda).
Sunday, August 10, 2003
Michael McCracken has started a discussion about widgets for choosing files (and folders) and displaying the currently chosen item. Apple hasn’t provided any guidance in this matter and uses a variety of designs:
Third-party applications use a variety of designs, too:
Here’s my take:
I’m sure there are many other issues to consider…