Does Steve Bulpett actually believe this?
Archive for January 2003
A prefect example of how this may be done is the E Language. It builds itself from a small foundation, a microkernel so to speak, they call it Kernel-E. All constructs of the E Language are based on macro expansion of Kernel-E. Its easier to verify the semantics of the smaller language, at the same time give you the ultimate flexibility of building new constructs. This in my opinion is a pretty solid way of building a language. (BTW, it's written in Java)
I promised to give some pointers for programmers on how to enhance your software so it is less vulnerable to cracker’s attacks, who are trying to crack or make a serial for it.
Not only did I buy a PowerBook, but I got a big second monitor for it, and a wireless-networking base-station, and an iPod, and a small arsenal of gadgets whose purpose is not obvious from looking at them. And then I bought my sister an iMac, too, and we’ll see what it takes to convince my parents. What began as a relatively harmless idea about checking email and watching DVDs in a hotel room has become an upheaval in my belief system, and turned me into a zealot about one more topic. I have Switched. If computers have not been the central mechanical forces in your entire daily adult life, like they have been in mine, maybe you think I just sound geeky when I say this, but I’m telling you there is a real revolution underway.
The bouncing icons (and the puffs of smoke and the pipe-organ speech synthesizer and the way dialogs tidily resize and the drop-shadows on the windows and the jellybean buttons and the eject key on the keyboard) are not individually rationalizable on utilitarian grounds, and they do not pretend they mean to be. They are there to, in aggregate, change the nature of your relationship with the device. They are joyful, and they hope their joy is infectious. The more you use a Mac, and the more of its secrets you learn (and the bizarre truth is that although simple tasks are designed to be much simpler on the Mac than on a PC, the Mac is also much more deeply and pervasively capable of being tweaked and customized and automated and shortcutted), the more you will like it. This is exactly, radically, totally the opposite of what happens in Windows, where every damn thing you learn after the first ten minutes will make you hate it more and more violently.
To use the Mac is to be confronted, over and over, with the idea that the most mundane task can be done artfully and compassionately, beautifully and invitingly.
Chuq Von Rospach and Eric Albert are Apple guys, so they’re not impartial, but their thoughts on the News.com Opera article are dead-on. To me, what’s important about the article is that it’s a reminder of how much most tech journalism sucks, even when it’s factual. I’d much rather read an informed opinion (which I might not agree with) than an “objective” news story that takes sides by omitting half the story.
New research from the University of Utah has revealed a potentially lethal “tunnel vision” that drivers get while talking on a cell phone.
For my entire life since I was a teenager, I’ve believed passionately in treating people the same regardless of skin color. When I was a teenager, most of my friends and relatives—most of whom were unapologetic racists, as it happened—considered me a flaming liberal because of it.
Today, my position has changed not one iota, and now I’m considered a “conservative” who is shedding “crocodile tears.”
Have I mentioned that I don’t like labels?
The recent Affirmative Action discussions (well, that and a few other things) have left me utterly exhausted. So much so that I’m turning off comments on this article, just to discourage further debate for now.
I’m turning off comments as well, because I have neither the time nor the inclination for a debate at the moment. In brief, my position goes something like this: Racial discrimination is wrong. Affirmative action punishes the competent of all races, without really helping those in need. Real help needs to come way before the college age, and it shouldn’t be restricted to particular races. Other policies, like legacy admissions, are also bad. Campus diversity, if “diversity” only refers to skin color, is not a worthwhile goal.
The US Constitution, Section I, Article 8:
“The Congress shall have the power...To declare War, grant Letters of Marque and Reprisal, and make Rules concerning Captures on Land and Water”
We are not at war unless and until Congress declares War. No matter what scale of military action happens otherwise, including Vietnam, we are not at war. George W. Bush is not a “wartime President,” and neither was Lyndon Johnson. The citizens of the US do not have to give up their civil liberties because “We are at war,” because we are not at war.
This module provides a single class that wraps the functionality in the
os.pathmodule. You wouldn’t think that would be so helpful, but in practice I find it much more pleasant to write and to read.
No one seems that surprised that the MS SQL Worm could exist, and it’s popular to blame Microsoft and the server administrators who use SQL Server. If Microsoft would stop writing buggy software… If the admins had installed the update… If Microsoft had made the update easier to install… Well, I’m inclined to cut Microsoft some slack here. They didn’t screw up on purpose, and they’re not incompetent. Open source software isn’t free of security flaws, either.
It seems that no matter how carefully software is designed and reviewed, people will always be able to find security holes. That is why critical software like this should not be coded in unsafe languages such as C. I’ve read that more than half of all security holes are caused by buffer overflow bugs. Buffer overflows are not possible in a safe language. The solution is not to expect programmers to write bug-free code. We’ve already seen that this is practically impossible for humans to do, unless time and cost are not factors. Instead, we should give these programmers better tools that prevent these classes of errors.
This is not the first time that a hard drive failure has led to a series of other problems that wound up wasting days and days of work. Notice that I had a very respectable backup strategy, everything was backed up daily, offsite. In fact I believe this is the third time that a hard drive failure has led to a series of mishaps that wasted days. Conclusion: backups aren’t good enough. I want RAID mirroring from now on.
What are the main elements of national well-being? It is startling how out-of-date and out-of-touch our official politics has become.
Mike Perry emailed me this fascinating story (350K PDF) of Tolkien’s lawyers harassing him for publishing a reference book on Lord of the Rings that lists important events in the trilogy by date.
Brian Jepson notes that MIT and Berkeley have made lecture videos of Structure and Interpretation of Computer Programs (1986) and Introduction to Symbolic Programming available. The SICP videos go with the first edition of the book. The complete text of the second edition is available online. It’s amazing how much information is packed into this one little book.
Evan Jones has posted RowResizableTableView, an LGPL package with subclasses for NSTableView and NSOutlineView that support variable-height rows. There is a performance hit for this coolness because the subclasses have to do more than simple multiplication to figure out which rows need to be drawn.
OS X applications lack consistency in the way they handle the keyboard. It seems like every application has a different set of keystrokes for extremely common operations. By common operations, I mean things that devs do every day: next word, previous word, beginning of line, end of line, top of document, bottom of document.
There’s been some discussion of this on the Carbon-Dev list, recently. In my opinion, all applications should support the BBEdit bindings for navigating and selecting text, and also Emacs bindings like Control-A and Control-E that are easy to type with one hand.
Bob Hearn, co-author of ClarisWorks (and the excellent AppleWorks GS), has written a brief history of the program. Although I preferred BeagleWorks to ClarisWorks 1.0, ClarisWorks 4 is one of my all-time favorite applications.
In its effort to produce slick, bug-free software, Claris was neglecting the hard reality that sheer number of features sells, independent of elegance of design. Some products, such as MacWrite Pro, were delayed so long by stringent quality assurance requirements that they lost their effectiveness in the market.
- It can index PDF documents if you have Xpdf installed. This is especially important for ATPM because our older content is not available in HTML format.
- It can build its index using a Web spider rather than by scanning the local file system. That way, it can also index the dynamic content of the pages.
- I can tell it not to index certain parts of the pages, e.g. the table of contents in the navigation bar.
- I can tell it not to index URLs that match particular patterns. For instance, the printing versions of the pages have URLs that end with “?print” and should not be indexed.
- It has good documentation and examples.
- It can be installed without logging in as root or writing to any directories outside $HOME.
There are many free search engines, but ones that have this combination of features are rare (judging from my quick search). Installation took a while, as I had to first install libxml2 and Xpdf, and then wrestle with why SWISH-E couldn’t find pdftotext or pdfinfo even though they were in the path. Once installed, it seems to work well. By tomorrow it should be done indexing, and then I can try some real tests.
My position isn’t really “boo hoo, Apple should play nice”—like everyone else, we’ll do whatever we need to as a company to stay alive. It’s just that a whole lot of cool stuff from a lot of cool companies is probably getting stifled. For better or worse, that’s the hidden cost of free, bundled apps. As Ihnatko says, without competition, “how can we be sure that we’re getting the best software possible?” In all likelihood, you’re not.
Matthew Thomas offers a critique of Apple’s Keynote marketing, in the spirit of Edward Tufte. Also, see this transcription by Aaron Swarz and Peter Norvig’s classic Gettysburg PowerPoint Presentation.
John Gruber writes that “X11 is only of interest to Unix nerds. It has no relevance whatsoever to regular Mac users”:
[Mac OS X] not only runs Macintosh software, but it runs Unix software as well. But that X11 applications consist of standard GUI elements such as windows, menus, and buttons does not change the fact that they are Unix programs: tricky to install and remove, poorly designed, and utterly lacking in Mac-ness. That X11 is a graphical environment doesn’t mean it’s any more interesting to most Mac users than the text-based programs accessible via Terminal.
I totally agree that X11 applications aren’t real Mac applications, and that’s exactly why Apple’s X11 server is relevant. Not only does it make it easier to bring X11 apps to the Mac without rewriting them in Carbon or Cocoa, but the fact that it’s an Apple product means that Apple is implicitly saying that this is an OK thing to do.
Consider the case of MATLAB. It used to be a real Macintosh application, not unlike Gruber’s example of MacPerl. It could copy and paste graphs in EPS, which I thought was cool. The MathWorks stopped developing MATLAB for the Mac, but now they’ve brought it to Mac OS X. The only problem is that MATLAB 6.5 is an X11 port, and thus is probably less Mac-like than MATLAB running in Virtual PC. (This is speculation: I’ve used the old Mac version of MATLAB, as well as X11 versions on Linux and Solaris; I’ve not used 6.5 on Mac OS X.)
I worry that Apple’s X11 server will encourage more ports of this type, and that regular Mac users will be forced to use them. Of course, maybe these companies would never consider doing real Mac ports, in which case an Apple X11 server is preferable to Fink or paying Tenon a lot of money.
The PageRank values assigned by Google are not susceptible to being proved true or false by objective evidence. How could SearchKing ever “prove” that its ranking should “truly” be a 4 or a 6 or a 8? Certainly, Search King is not suggesting that each one of the billions of web pages ranked by Google are subject to another “truer” evaluation? If it believes so, it is certainly free to develop its own search services using the criteria it deems most appropriate.
That said, the policy questions that SearchKing is raising are critically important. Google has bceome hugely important to the Internet, and many are starting to ask whether the public interest demands special treatment. Perhaps a search engine is important enough to be treated as a regulated utility, the same way that water, gas, and the cables over which search requests travel are. Google is good, most netizens seem to think, but what if it weren’t? What if it became an arbitrary dictator, raising up and throwing down web sites at will. That’s what SearchKing thinks Google has become already, or at least that’s one major question raised by this suit.
Robert X. Cringely gets a lot right. He knows his history and questions Apple’s recent desire not to rely on outside software developers. (Reducing dependence on Microsoft and encroaching on third-party Mac developers are quite different things. The former is good; the latter could be disastrous.) However, I think he’s absolutely wrong that Internet Explorer and PowerPoint are harder for Apple to replace than Word and Excel. I’m not even convinced that Keynote will interoperate well with PowerPoint.
Matt Johnson has created two new Cortland cartoons based on the Macworld Expo keynote.
Yesterday’s keynote had lots of good announcements, but Safari is still the one I find the most exciting. It renders fast and renders well. The user interface, though still beta, is easily the best of Apple’s recent applications. It takes a lot of thought to figure out what to take away to make it simpler, and Apple has done that. Yet Safari still has almost all the important stuff. It does bookmarks and the history right. Sure, these are standard, boring features, but Safari is way ahead of Chimera and OmniWeb here. Same with the Status Bar and dragging links around; in fact, with these two I think it’s broken new ground. Plus, it’s got pop-up blocking, and the SnapBack feature is actually useful.
Like iCab, Safari’s Find feature isn’t forgetful, and amazingly the Find Previous command’s shortcut is the Mac-standard Command-Shift-G, rather than the Command-D that many Cocoa applications use. A list of Safari keyboard shortcuts is available in an HTML file inside the application package. (You must have Safari installed in the top-level Applications folder for the link to work.)
Apple did a wonderful job of keeping Safari’s preferences lean. Almost everything important is there, although there are a few other preferences I wanted to be able to set. Fortunately, Safari has preferences beyond those exposed in its user interface. Using F-Script Anywhere:
> (NSUserDefaults standardUserDefaults) dictionaryRepresentation
I was able to get a list of Safari’s preferences. The interesting ones I found were:
WebKitHistoryAgeInDaysLimit = 7; WebKitHistoryItemLimit = 1000; WebKitMinimumFontSize = 9; WebKitCursiveFont = "Apple Chancery"; WebKitFantasyFont = Papyrus; WebKitSansSerifFont = "Lucida Grande"; WebKitSerifFont = "Times New Roman";
To set one of these preferences, you can use Terminal and the defaults command. For instance, to raise the minimum font size:
defaults write com.apple.Safari WebKitMinimumFontSize 12
Overall, I’m very happy with Safari. It’s remarkably solid and polished for a beta. Of course, there are some things I wish it did better, and which I will be suggesting to Apple:
- Text is fuzzy and doesn’t support synthetic styles. I am so very happy reading sharp Geneva text in iCab, but Safari’s speed and standards compliance are tempting.
- No drag and drop of text.
- Can’t save complete Web pages to disk. iCab gets this right, saving a Web page and its associated images as a Zip archive. This is much better than a PDF.
- Spawned windows don’t inherit the history of the window they were spawned from.
- No search shortcuts like in OmniWeb and iCab.
- No control over the number of HTTP connections. iCab nails this, and I appreciate it when dialing in with a modem.
- Can’t view the source in BBEdit.
- Doesn’t reload pages when the local source file changes.
- Tabbing in the bookmarks/history view doesn’t work.
- Missing a few important contextual menu items, for dealing with frames, images, and links.
- Odd-looking small scrollbars in the Activity window.
- Always seems to open new windows in the wrong place.
- No window arrangement commands.
For now, I’m trying Safari as my default browser. It is the only browser to tempt me away from iCab since I switched from IE. Of course, I’ll probably still need to keep IE and Netscape around for the few odd pages that only work in one of those browsers.
- Eric Albert on the Safari team and their choice of KHTML over Gecko
- John Gruber on a variety of Safari issues
- Mark Pilgrim on Safari’s rendering abilities
- Don Melton’s greeting to the KHTML team (and jwz’s translation)
- WebCore source code in Darwin
- The massive change list compared to KHTML
- Safari AppleScripts from Apple
- Dave Hyatt responding to bloggers’ comments
- OmniWeb 5 may use KHTML
- Scot Hacker on bookmarks
- Brendan Donohue on software that just works
I haven’t had a chance to try it yet, but the EyeTV 1.1 update promises to add the three main features that I wanted: editing of recordings, VCD playback, and QuickTime playback with the EyeTV timing controls. It’s too bad I’ve already wasted a lot of time cobbling together ways to do the first two, but at least I no longer have to write an app to do the third. By the way, El Gato has outstanding customer service.
- Control-click on Safari and choose Show Package Contents.
- Open the Contents folder.
- Open the Resources folder.
- Open the English.lproj folder.
- Open Browser.nib (requires Interface Builder).
- Make sure that the Window icon is selected in the Browser.nib window.
- In the Info palette (available in the Tools menu, if it doesn’t open automatically), choose Attributes from the pop-up menu.
- Uncheck Textured Window at the bottom of the palette.
- Repeat these steps for Downloads.nib.
- Save the changes you made.
The edges of the buttons look a little odd, since they were designed for the brushed metal background, but overall Safari looks much better. Plus, it now conforms to Apple’s own guidelines for the use of textured windows.
The JMatch language extends Java with support for abstract iterable pattern matching: a mechanism for pattern matching that is compatible with the data abstraction features of Java and also makes iteration abstractions convenient to use and to implement. JMatch provides abstract pattern matching; patterns are not tied to algebraic data constructors as in ML. A single JMatch method may be used in several modes that may share a common implementation as a boolean formula. JMatch provides modal abstraction that simplifies the specification and implementation of abstract data types. JMatch also makes the specification, implementation, and use of iteration abstractions convenient, by automatically finding multiple solutions to a formula or pattern.
Myers’s earlier project, PolyJ, was a good idea implemented in a way (guavac extension) that made it a pain to maintain and use. My hope is that JMatch, being based on Polyglot, won’t have these problems.
Summary: Alternatives to Realtime Blackhole Lists (RBLs) should be actively deployed because of serious well-known problems with the RBL spam filtering technique.
Mark Pilgrim sums up my thoughts on the utility of pure content:
I wrote Dive Into Python in DocBook XML, and I maintain a set of XSLT scripts to convert the raw XML into HTML, PDF, Word, HTMLHelp, and plain text. Actually, my scripts are just customizations of larger, more complex scripts maintained by Norman Walsh. Overall, I’ve spent more time maintaining those scripts that I have writing the book. But my content is pure! Was it worth it? No, not really. Mostly I ended up using HTML as an intermediate format anyway, so a semantic HTML source document and a few well-placed regular expressions would have served my purposes just as well. In fact, this is what I did to produce the PDF version of Dive Into Accessibility.
Ironically, I was just looking at his Dive Into Python as an example of a successful use of single-sourcing from DocBook and concluded that it was a lot of extra work for few real advantages over LaTeX. I’m still looking for a good format for single-sourcing. Both LaTeX and FrameMaker have worked well for me, but to get good results I have to use a restricted feature set and write scripts to post-process the output.
Just as every house needs a foundation, every brilliantly immature net text is built on a strong structure of ignorance, sloth, and mindless misguided belligerence.
nil, and you should get a compiler warning if you attempt to use an uninitialized local variable. But he’s right, of course, that it’s easy to send a message to a released object. Unlike Victor, I don’t set pointers to released objects to
nilbecause I think that would make it harder to detect errors; Objective-C will happily send any message to
nilwithout complaining. I’d rather use NSZombieEnabled during testing.
The semantic web is one of those technologies that will never live up to its full hype, but will provide us with real benefits nonetheless. I think it will be like AI: lots of interesting things were accomplished, but somehow each little piece that actually worked was officially categorized as “not AI”, leaving AI always a distant dream. If researchers in the ’70s had seen Microsoft Word running with speech recognition, correcting grammar, they would have hailed it as breakthrough AI. Today, it's just what a computer does, and AI remains somewhere in the future.
How very true. It’s no wonder that AI is publicly seen as a failure.
John Gruber, whose Daring Fireball has lost its Bob Dole/Karl Malone complex, compares BBEdit 7’s new sorting plug-ins with the latest version of Craig Maynard’s venerable LineSort plug-in. This comparison is missing from my BBEdit review because for some reason I thought that LineSort hadn’t been Carbonized.
Modal dialogs get a bad rap from many users, so you might find it curious that Bare Bones would choose to use them for new plug-ins. But there are in fact several advantages to modal dialogs. One is that they can be driven by the keyboard. Bring up BBEdit 7’s Sort Lines dialog, then hold down the Command key, and a moment later you will see shortcuts appear for each of the checkboxes in the dialog. These shortcuts don’t conflict with normal menu command shortcuts, because most menu commands are disabled when a modal dialog is open. A floating palette such as LineSort’s can only be driven using the mouse.
Modal dialogs, used right, are great. I’m so sick of these Cocoa applications where it’s impossible to tell which window has keyboard focus.
<cite>to produce more information-rich Web pages. It’s definitely something to consider when I have more time.