contrapunctus, by Christopher League
 

Another Microsoft rant

One would think that keyboard entry is a pretty basic feature of a spreadsheet program. Maybe I’m a newb — I just started using spreadsheets in, let’s see… 1984… with Lotus 1-2-3. Here is Excel 2004 for Mac, completely unusable for data entry. (One minute Flash movie, may not appear in feed.)

And people pay money for this? Denigrate free/open-source software all you wish, but I never had a problem just entering data with Gnumeric or OpenOffice.

Someone appears to have found a workaround, posted just a few days ago. Note that a workaround is not a fix. Normally, “edit directly in cell” is something you might want to do.

Low-tech screencast

Common Craft has a fun and engaging style for presenting “Web 2.0” technologies with paper and white-boards. Found at Presentation Zen, but I chose a different video than the two that appear there. Enjoy “Wikis in Plain English”…

Presentation Zeno

My talk at CCSC seemed to go okay. I took more inspiration this time from Garr’s Presentation Zen blog and book. I have always been relatively pleased with my visuals, I think because I received some good advice early on, and I’ve always had a reasonable sense of design. But this is the first time I let go of some long-cherished approaches (for one, titles on each slide that successively tell the story) and the first time I used ‘full-bleed’ stock photography. Some of the slides also contain videos. Here’s a slide-sorter view of most of the visuals (some redundant progressions elided). Click to embiggen.

I think Garr’s advice worked because this talk is more persuasive than technical. I’m not certain yet how I would adapt a talk about compilers or type theory. But in a sense, all conference talks are persuasive. You just don’t have time to convey the finer technical points in that format, so really the goal is to persuade the audience that your result is worth investigating after the talk is over.

Microsoft

Many students are mystified, at first, by my ignorance of and apathy toward the Microsoft environment. To many of them, Microsoft is the computer. They’re younger than the IBM PC architecture itself, and didn’t experience the great diversity of home computers (Commodore, TI, Atari, Tandy, pre-Macintosh Apple) that my friends and I had in the early-mid ’80s. Nor did they witness the following decade of dueling proprietary Unix workstation vendors (DEC, Sun, SGI, HP).

The simple story is that I started using these Unix workstations in college in 1991, and never even bothered to install the clunky contemporary Windows 3.0 on my own PC. By late 1992, I was installing early distributions of Linux. I stayed in that academic Unix-using bubble until 2002. Sure, I had seen Windows 95 briefly at a summer job. But it wasn’t anything to take seriously. I’m a bit younger than that condescending bearded hacker in the Dilbert strip, but I’m clearly his heir.

I bring up this story because I read a number of interesting comments on Slashdot about resistance to Vista, and the extended end-of-support deadlines for XP. I’ll just pull out some examples here, first about programming languages:

As for J#, C#, VB and WebDev, we’re back to the same “How do I keep giving Microsoft money” question again. Those are not standards. They’re proprietary solutions and stuff you build on them will obsolete every time Microsoft decides it needs more of your money. It’s a trap. Don’t fall into it. If you must program in those soon-to-be dead languages then you’ve created your own predicament and nobody can help you. —symbolset

I guess that articulates why I resist VB and C# in our program, even though there is clearly demand for them in industry, and thus students want to learn. Incidentally, another prof (who is not an anti-MS bigot) teaches those languages on occasion.

Here’s a provocative call for Microsoft to save themselves by turning Linux into Windows version 7:

This is going to sound crazy, but bear me out. So here’s what Microsoft does. They take the [Linux] OS and develop a Windows GUI for it. They pour a billion dollars or so into WINE development and research (while providing WINE’s coders with full access to existing Windows APIs) and they bring WINE’s performance and compatibility to dizzying heights. And then they sell it. Call it Windows, sell it as Windows and do what Apple’s done with Darwin. Keep the proprietary stuff proprietary and the OSS stuff OSS. You’d wind up with a rock-solid OS, and your users could run their old software until their apps received an update to the new system. Eventually WINE would no longer be needed.

This all sounds a lot like Apple, MacOS X and Classic, doesn’t it?

Anyway, there we go. I’m sure there are a thousand valid reasons why this couldn’t/wouldn’t work and naturally it will never happen. I understand that. I can dream though, can’t I? —penginkun

How delusional am I, that this sounds like a perfectly reasonable strategy? Problem is that Microsoft is completely allergic to it.

What Apple has done fantastically well with the OS X transition is to maintain basic compatibility between the GUI frameworks and the underlying command-line tools and system calls. Apple adopts cups as their print server, adds some new GUIs and such, but continues to maintain ‘lpr’ and ‘cupsd.conf’. When some new technology like Spotlight is added, it comes with command-line and file-system support. Meanwhile, on Microsoft, you create a symbolic link on the Desktop, and you can’t use it from the command-line or Perl scripts or normal C code. It’s not part of the file system; it’s just a façade that the (bloated) API provides.

I think this is why Apple has achieved significant market share among CS types and other scientists. I’m not even certain it was an explicit design goal for OS X, but now that we’re a market segment, let’s hope they keep it up. One thing that Linux distributions are doing better is package management. APT is great. You can run APT on Mac of course (and even on the iPhone), but if Apple blessed it and you started seeing most applications and demos installed that way, it would be an improvement.

Anyway, I’m not sure I’d go as far as to say that Vista represents the complete downfall of Microsoft, but the mind-share monopoly is certainly fading.

Image Inanity

A short video (1:22) of me venting my frustrations about email formats:

Transcript: In the old days, email was always plain text. And hard-core techies like me liked it that way.

Grudgingly, we came to accept HTML email. With hypertext markup, you can have bold-face, fonts, images.

But this is still okay because you can resize the text if you need to, the text is searchable, and Apple Mail on Leopard even recognizes dates and integrates well with the calendar program.

Where I have to draw the line is emails where the entire message is an image. It’s extremely common in our institution to create a full-page flier and then distribute it via email as an image. It doesn’t resize. It’s not searchable. The dates are not recognized. The MIME standard for multimedia email allows for plain-text alternatives in this case, but they are rarely available.

Here’s an even more egregious example, about the availability of our schedule of classes online. The link is blue. It’s underlined. But it’s not clickable. I can’t even copy and paste. I have to type it in from sight.

Just say no to image-based email. (And nevermind the inconsistency of distributing a 4 MB flash applet to demonstrate this simple point! At least I provided a plain text alternative.)

To appear at CCSC

In April, I will be presenting a new paper — Something for Everyone: AI Lab Assignments that Span Learning Styles and Aptitudes — at the Consortium for Computing Sciences in Colleges, held in the exotic, distant locale of Staten Island. A preprint can be found in the publications section of my site.

I will be building a repository and wiki about the assignments. With any luck, it will be available in time for the presentation. Shown here are some photos from our Connect 4 tournament during the first year I used these lab assignments.

Automated programming tutor

This short video (3:24) is about an idea I have for an automated tool that would tutor and assess students on fundamental skills in computer programming. I call it the ‘codeTutor’. I find that students that need a lot of practice on rudiments are often not willing or not confident enough to create their own exercises, and I don’t have the time to keep them inundated with practice problems. So here’s my idea:

If you think this is a {useful,great,dumb,old,…} idea, leave a comment or get in touch by email. If you’d like to participate in building or testing, even better. I’d want the tool to run as some kind of {Flash,Java} applet, or maybe Java WebStart program, just to lower the barrier to running it. Since it will do some non-trivial manipulation of syntax trees (and for a variety of other good reasons), I may write it in Scala instead of just Java. I’ve been toying with Scala for a few days, even producing little Swing (GUI) apps, and I’m fairly pleased.

Viva Vivaldi

Here’s my synthesized rendition (recorded using my Yamaha digital piano as a MIDI controller into Apple GarageBand on my MacBook Pro) of the first movement of Vivaldi’s concerto grosso in D minor (opus 3, number 11).

Or download vivaldi-cto-11-1.mp3 (possibly by right-clicking). It’s just under 5 minutes and 5 megabytes.

Argumentatum ad ars divinum

On most days, I am an extreme rationalist and philosophical materialist, but I have one major weakness. Any ‘delusion’ that inspired (for example) J.S. Bach to compose the Mass in B minor is definitely worth maintaining.

I recognize the fallacy. In Bach’s culture, credo in unum deum was the only game in town. Apologists may claim that without it, the Bachs could have been a family of bakers. And perhaps their panem diem would have been divine too, but centuries later we could not partake.

At counterpoint is the old sentiment that an ordinary person must be thoroughly trained to excel, but we’d have to train a prodigy not to. Who is to say what Bach could have composed if he grasped our deep and ancient connection to all life on earth, or perceived the majesty of the cosmos as we understand it today?

Still, what a tragedy it would be not to have the Mass in B minor.
Gratias agimus tibi propter magnam gloriam tuam.
Dona nobis pacem.

Bootstrap Blues

Bootstrapping a compiler can be a finicky process, because many compilers are written in the language that they compile. It’s easy to paint yourself into a corner if you’re not extremely vigilant about binaries and configuration management.

I wanted to try SMLserver, a system for writing database-backed web services using Standard ML. It is tightly integrated with the MLkit compiler.

Unfortunately, the distributed binaries would not run on my installation of Debian stable (codename ‘etch’) because they expect a newer version of ‘libc’, the main system library. Upgrading that library could be pretty disruptive, which defeats the purpose of running a ‘stable’ distribution.

Unlike many compiler code bases, MLkit can be built by compilers other than itself, namely SML/NJ and MLton. Ordinarily, this would simplify the process, except that the SML/NJ version it requires is ancient (and doesn’t itself compile out of the box anymore on this system) and MLton has extreme memory demands.

Fortunately, an older binary of MLkit (4.3.0) runs on this system, but at best that’s a starting point. Once a particular revision can bootstrap itself, it’s natural for the source language to evolve beyond what the previous revision could handle. But in this case, the changes were small. Version 4.3.0 lacks some pieces of the ‘Posix.FileSys’ module that 4.3.2 needs, but they were small enough to rewrite:

Index: src/Tools/MlbMake/MlbFileSys.sml
===================================================================
--- src/Tools/MlbMake/MlbFileSys.sml	(revision 2311)
+++ src/Tools/MlbMake/MlbFileSys.sml	(working copy)
@@ -49,9 +49,9 @@
 	  | EQUAL => SysWord.compare (b,d)

     fun unique link f =
-	let val s = if link then Posix.FileSys.lstat f else Posix.FileSys.stat f
-	in (Posix.FileSys.inoToWord(Posix.FileSys.ST.ino s),
-	    Posix.FileSys.devToWord(Posix.FileSys.ST.dev s))
-	end
+        let val {dev,ino} = OS.FileSys.fileId f
+         in (Word.fromInt ino,
+             Word.fromInt dev)
+        end
   end

Index: src/Manager/Manager.sml
===================================================================
--- src/Manager/Manager.sml	(revision 2311)
+++ src/Manager/Manager.sml	(working copy)
@@ -807,7 +807,6 @@
            val fu = (Posix.IO.close (Posix.FileSys.creat (lockfile ^ unique,Posix.FileSys.S.iwusr)) ; true) handle OS.SysErr _ => false
            val f = if fu
                    then (Posix.FileSys.link{old=lockfile ^ unique, new=lockfile}; true)
-                        handle OS.SysErr _ => Posix.FileSys.ST.nlink (Posix.FileSys.stat (lockfile ^ unique)) = 2
                    else false
          in if fu then (Posix.FileSys.unlink (lockfile ^ unique); f) handle _ => f
             else false

Version 4.3.0 can build 4.3.2 patched thusly, which can then bootstrap its unmodified self. Really, I lucked out here. Imagine having to do this across a major compiler release cycle!

Firefly

Seems unlikely, but who am I to argue with the algorithm?

Dear Amazon.com Customer,

We’ve noticed that customers who have purchased or rated Computers & Typesetting, Volume B: TeX: The Program (Computers and Typesetting, Vol B) by Donald E. Knuth have also purchased Learning Microsoft Publisher 2007 Student Edition by Faithe Wempen. For this reason, you might like to know that Learning Microsoft Publisher 2007 Student Edition will be released on March 11, 2008. You can pre-order yours by following the link below.

Testing embedded screen-cast

Unfortunately, the image size is somewhat big for the design of my web site, unless your browser is already maximized. Anyway, ‘jing’ is a tool to record and upload screen-shots and screen-casts in pretty much one shot. Then they can be linked and embedded from screencast.com just like YouTube.

Unfortunately, it seems hard or impossible to edit videos effectively after recording. Same as other one-shot recording tools like iShowU and Snapz Pro. If you want to edit, transition, or separately mix audio and video, then it seems iMovie needs to get involved. Still need to read up on that. But Jing seems to be the most convenient of the one-shot tools.

Cisco Clean Access == CRAPware

Cisco Clean Access idling at 100%

Hm, why is my laptop running so hot this morning? Hm, what is that new icon in my menu bar? Why, it’s the Cisco Clean Access agent, eating up 100% CPU time! While I’m on a wired connection. Even if they don’t know how to tie into the MacOS network configuration properly, you’d think they might have heard of the sleep() system call…

Air

Apple’s new sub-notebook looks incredible, although I haven’t checked the specs yet. I was personally rooting for a tablet, but anyway…

I’m happy with my MBP. I thought it might be too large and heavy for my taste, given my affinity for my previous tiny Powerbook. What I have found is that having the iPhone around for quick email checking and minor googling means that I’m not as bothered with digging out the laptop for trivial stuff or leaving it behind while out and about.

And now I sound like a complete Apple-whore fan-boy. Whatever, it’s Tuesday!

A bad Linux day

Yesterday was a bad GNU/Linux day. I was getting angry, and I rarely get angry. Every once in a while, I type “apt-get upgrade” and everything goes to hell. Like the print server’s ability to print from PDF. Right when I’m trying to print last-minute boarding passes, confirmation pages for hotels and rental cars, directions from the airport, etc.

I of course found workarounds, then in some cases had to work around the workarounds. But in all it took about 3 hours to figure out what was going on and get 10 pages printed. Something was broken in how CUPS talks to ‘pdftops’, causing it to hang. There were recent security updates to CUPS, but when I downgraded it, the problem persisted. It’s still not fixed, but I found and subscribed to a probably-relevant entry on bugs.debian.org.

I guess I use Debian ‘stable’ so that this sort of thing happens very rarely. The frustration had me questioning my commitment to GNU/Linux and other free software. But of course it’s not that simple: what I treasure is the hackability, and so some instability is inevitable. Even on a Mac, I’m likely to access unsanctioned functionality with “sudo vi /etc/cups/cupsd.conf” or whatever, but this kind of customization rarely survives updates.

I suppose the solution is to take updates more seriously, evaluating them the way a business would: apply them only when there’s sufficient time to run a systematic set of regression tests.