|Ned Batchelder : Blog | Code | Text | Site|
» Home : Blog
XSLT is a powerful technology that uses some unusual constructs compared to more traditional programming environments. I like it, in fact, I use it to generate the page you are reading right now. But it is an XML dialect, meaning that if you want to write XSLT, you are stuck with the horrible-for-humans XML syntax.
To solve this, Alex Moffat has written XLSTXT, an alternative syntax for XSLT. It's a great idea, but the implementation needs some work. Some of my XSLT constructs occupied more lines as XSLTXT constructs, and I couldn't roundtrip some of my complicated files. But I'm glad to see that someone is thinking about other ways for people to produce XSLT code.
If you've ever upgraded a piece of software and thought that the old version was better than the new one, then you understand oldversion.com's motto: "because newer is not always better". They archive old versions of commonly-used software so you can find an older, simpler version of software you really use.
Prothon is a derivative of Python using prototypes rather than inheritance as the basis for its object orientation. Prototype-based languages seem powerful and intuitive, more so than inheritance-based languages. I'm not sure why they aren't used more. Also, Prothon fixes a few of my main annoyances with Python, especially the ubiquitous self variable, although it does it with dangerously Perl-like prefixes.
The Genealogy of the Presidents of the USA has some pretty impressive information about the ancestors of the presidents. One of the ways they've sliced and diced it is to figure out which presidents are related to each other (beyond the Bushes, Adamses, and Roosevelts). For example, George Washington (#1) and George W. Bush (#43) are 10th cousins 8 times removed.
For our second March birthday, we made a race car cake:
The headlights are malted milkball candies, the front bumper is a licorice Twizzler, the front wheels are chocolate covered cookies, the windshield is a Hershey's bar, the antenna is a thin pretzel, the back wheels are chocolate covered doughnuts, the brake lights are cherry Dum-Dums with their handles sunk into the cake, the exhaust pipe is another Twizzler, and the spoiler is a frosted graham cracker supported by wafer cookies.
I record it here for posterity, because the cake itself is already gone, down the gullets of a couple of dozen six-year-olds.
Air America is a liberal answer to conservative talk radio. It debuts next Wednesday on stations in New York (WLIB), Chicago (WNTD), and Los Angeles (KBLA). The showcase is Al Franken's show, The O'Franken Factor, from noon to 3:00, opposite Rush Limbaugh, with programming running all day, 6 AM to 11 PM. I wish there were an affiliate in Boston, but they'll also be streaming the shows from their website.
John Miller gave a presentation at PyCon 2004 entitled Promoting Computer Literacy Through Programming Python. It's an interesting topic for me. I'm getting involved in my sons' school, volunteering to teach computer topics. The presentation is in annoying .mov form (you can only go forward, and can't copy text out of it), and begins with boring statistics about newsgroups (!), but then settles into the philosophy of education, the place of programming in the subjects students learn, and so on. There are two links in the presentation (which you cannot click!):
One of the common components of software engineering culture is the shared build. A team of people work together to produce a piece of software, and on a regular basis, often daily, that software is built for the team. One of the cardinal sins in this culture is breaking the build: changing the software so that it can no longer be built. To punish the offender, and provide a bonding experience for the innocent victims on the team, a ritual develops around how to treat the offender.
An additional benefit of these tribal behaviors is that it gets people talking about the process. When opinions differ on the severity of an infraction, people will talk about whether the punishment was deserved or not. Without a visible and derisive consequence, the process failure may not have been discussed further once the build was working again.
Usually when a software person talks about random numbers, they mean ones generated by a software algorithm, which means they are really talking about pseudo-random numbers. There are better (but less plentiful) sources, which are based on physical processes that produce truly random numbers. Quantum physics is behind randomnumber.info, which generates numbers using a single-photon optics rig. Another is HotBits, which relies on radioactive decay. I'm not sure how you'd put these to use in any practical way, but it's somehow comforting and empowering to know that in distant corners of the world, physics has been harnessed to give me truly random numbers at my fingertips.
A Bloom filter is a clever data structure that lets you check if an element is a member of a set, while storing much less data than the entire set. The tradeoff is that there are false positives: you might ask if a member is in the set, and get the answer "yes", when it should have been "no".
One of the things that fascinates me about computer science is that the seemingly simple can be studied for long enough to find the non-obvious in it. Consider the problem of finding a small string somewhere inside a larger one. It's easy to do it a simple way: for every character in the larger string, see if it is an exact copy of the smaller string. Turns out, though, that people have been coming up with better and better ways to perform this simple feat, so that now there are dozens of different algorithms.
Christian Charras and Thierry Lecroq have gathered them all together, with explanations, pictures, and even Java animations of the algorithms at work: Exact String Matching Algorithms.
I made a few minor updates to cog, my code generation tool that uses Python code to generate code for any other language. Version 1.1 allows it to be used for languages without multi-line comments to hide the cog code in. The cool thing is, this was a suggestion by Greg Smith in the reader comments. If you have an idea, send it in!
My almost-six-year-old and I made this pop-up scene this morning:
I liked the way it came out, so I wrote up how to do it: How to make a pop-up scene.
Marcin Wichary has created a comprehensive compendium of user interface elements over the years: GUIdebook. It's cool to see the different pieces of UI from different systems, but on the other hand, there aren't many unusual ways of making a calculator. The component icons pages is particularly compelling.
A fascinating article about how Sports Illustrated uses digital photography to produce their images: Sports Illustrated's Digital Workflow. They took 16,183 shots at the Super Bowl, over a million over the course of the year. It's interesting to read the details of how they manage and process the photos.
Best quote, on the sports-specific trick of color-correcting photos:
Groovy is a new dynamic language that's borrowing heavily from Python and Ruby. It compiles to standard Java bytecodes, and so can be run on existing JVMs. It looks very interesting. This snippet in particular caught my eye:
foo = 'cheese'
Why don't more people teach language skills like this? Bob Quick Guide to the Apostrophe, You Idiots. Maybe they can do one for "its" and "it's".
ArtRage is a free painting program based on natural media and tools. In other words, it's designed to work and feel as much as possible like real paints, chalks, and so on. I was very impressed with it. It has one of those non-standard but intuitive interfaces where you can just start clicking around, and you'll see how stuff works. And the real-media effects are remarkable. A single stroke of oil paint:
I like to play the piano. Not very well, but I like to. The problem is finding sheet music on impulse. I hear a song, and would like to play it, but even if good sheet music exists for it, by the time I can get around to finding it somewhere, my interest may have wandered off to another song. Musicnotes has digital sheet music (buy and download a digital file), but their coverage isn't complete (what store's is?)
But there are tons of MIDI files out on the web. For example, Electric Light Orchestra MIDI files (today's song is Mr. Blue Sky). Some are good reproductions, some not so much. But they all are computer-readable lists of notes to play. What if I could convert a MIDI file into printed sheet music? There are MIDI disassemblers out there, but their output is hardly something you could play from.
Lilypond is a GNU music typesetter, and a very powerful one at that. It can turn music notation into a MIDI file, but what about the other way around? Has anyone heard of something like that?
I haven't made these yet, but they will be hard to resist. Robot Tairiku has dozens of one-page PDFs of cuttable foldable gluable robots, all in hip Japanese pop culture style. There's an English page, but the Japanese home page is really the way to go to get the entire experience.
The thing about CSS is that it can do an awful lot of things, but most of them feel like clever tricks until you are an expert at it. Maybe that's the way all technologies are. In any case, here's another tricky CSS example: CSS Diagrams.
I was a real math geek in high school, and was taught "new math" at the time, so I got a pretty good introduction to math at a theoretical level. Still, Mathematical Background by John Sowa is a good overview of math concepts. He doesn't cover the connection to computer science directly, but a lot of this stuff underlies software concepts we engineers encounter everyday.
You can get along without the math background, but it helps to have it under your belt. For example, did you know relational databases are called that because they are based on the mathematical concept of relations? See section 5.
In some places, he uses terms only in their mathematical sense, without touching on the more common computer science uses. For example, "idempotency" referring to operations, but not to functions: a function f is idempotent if f(f(x)) = f(x) for all x.
Speaking of conventions in movies (I mentioned a starving person seeing someone turned into a chicken in my post on Charlie Chaplin), Television Tropes, Idioms, and Devices catalogues all of the commonly-used devices in TV shows. An example:
I guess it's art, or maybe just humor. Kelly Heaton has made an Elmo coat, that is, a fur coat using the pelts of Tickle Me Elmo's.
Turner Classic Movies (a cable TV station for those of you not in the U.S.) is featuring Charlie Chaplin this month. My cinemaphagic* son and I watched some movies and part of a documentary about him, and we really enjoyed them.
This is clearly an extremely geeky topic, but here goes. CSS Jokes:
The issue of how public to make one's family on one's web site is a tough one. I have erred on the side of privacy on this site, which fits my natural inclinations better anyway. The comments on the three posts above are all good reading on other people's reactions to the incident.
Some thought-provoking software engineering reading:
For the first of our March birthdays, we had a Homestar Runner birthday, complete with homemade cake:
For those of you who missed it back in October, we also had a Homestar pumpkin for Halloween.
Julian Robichaux, concerned about know-nothings passing themselves off as programmers, gives us How to Spot a Fake Programmer:
If you've installed the MSDN library on top of your Visual Studio, you've got a ton of documentation at your fingertips. In fact, way too much, at least in my opinion. Here's how to get rid of some of it.
Fun on the web:
¶ Worth1000.com - The Far Side, real-life versions of Far Side cartoons.
¶ Steve's Web Page, the guy from Blue's Clues!
QRIO is a remarkable consumer robot from Sony. I don't know exactly why you would want one of these things wandering around your house, but it does seem like a stunning technical achievement. Photomatt has some amazing videos.
One of the toughest things about being a parent is having to choose among all the things competing for your attention. Yesterday I felt lousy about a choice I had made. Writing Parents' choices made me feel better.
If you are like me, you use Microsoft Visual Studio 2003, and there are things about it that are just plain annoying. I've discovered a few tips to ease the irritation. The first is how to get the solution explorer to stop flipping and flapping.
Perhaps even more impressive than Google's complete capture of the textual web search arena are its continuing efforts to make absolutely all information available through its web site. Now they give us search by number, which includes an esoteric assortment of numeric searches (vehicle identification numbers?). For example, you can search for patents by patent number: patent 6351767
My soon-to-be twelve-year-old thought this site needed something to give it a little more pizzazz, and decided an intro flash movie was just the thing. So he whipped up a movie showing the mythic creation of this site: Intro Flash
Martijn Reemst hosts an awesome resource: Calvin and Hobbes Extensive Strip Search, a searchable database of all published Calvin and Hobbes comic strips. A quick test proved the power of the system. Searching for "black and white" turned up the very strip I was thinking of: Calvin's Dad explaining how the world used to be in black and white.
Alvy Ray Smith is a true computer graphics pioneer, and one of the founders of Pixar. He wrote a memo nine years ago entitled A Pixel Is Not A Little Square, in which he teaches us simple-minded Euclidean types about what's really going on with computer images. I don't want to give away the ending, but: a pixel is a point sample.
In all the debate about gay marriage, a common refrain heard from opponents is that the definition of marriage has been the same for centuries if not millennia. Not so. The fact is, the current rules about who can be married have been in place (in some states) for less than 40 years.