pwnt.be

Go with the Flow

For those of you who missed all the buzz on Facebook: I created a Cover Flow component in Java Swing, meaning you can now embed Cover Flow in Java applets and desktop applications. Here’s what it looks like:

As you can tell from this showcase, even though it’s only at version 0.1, the component is in a working state. Moreover, since I am releasing it under the GPL, you can use it for free—or Free—by just grabbing the JAR file. The stuff required for the demo above is in a separate archive.

Finally, if you’re feeling really adventurous, there’s also the source code, which is still undocumented for now, apart from a few quick notes. Other to-dos include hardware acceleration and anti-aliasing.

Update: The trunk version comes with a couple of improvements, including lighting. In addition, the project is now hosted at GitHub.

’t Is triestig

Het is intussen wel algemeen geweten dat de administratie van Telenet veelal vierkant draait. Niet geheel onverwachts was het gisteren dan ook weer zover. Ziehier het alweer bedroevende relaas…

Telenet

De situatie is de volgende… Ten huize mijner ouders zijn twee HD Digicorders actief, eentje in de woonkamer en eentje op mijn slaapkamer. Die laatste wens ik op te zeggen, gezien ik volop bezig ben te verhuizen en ik op mijn appartement al een HD Digicorder heb klaarstaan—waarvan de installatie overigens ook niet van een leien dakje liep, aangezien de éérste technicus het had nagelaten een filter te verwijderen.

Om dit administratief in orde te brengen, neem ik telefonisch contact op met de klantendienst van Telenet. Het dient gezegd, de juffrouw die me te woord staat, is uitermate vriendelijk en vlot. Echter biedt dat geen enkele garantie op het vlak van bekwaamheid, zoals gauw zal blijken. Aangezien de juffrouw niet meteen de juiste procedure kent, gaat ze te rade bij een collega. Beter zo dan dat ze uit haar nek lult, nietwaar?

Na de gebruikelijke wachtmuziek, weet de juffrouw me vrolijk te melden dat ik eenvoudigweg naar een Telenetverdeler kon stappen met het toestel. Ik merk op dat ik hoogstwaarschijnlijk beter voor een Telenet Center opteer; deze laatste hebben meer in de pap te brokken en zijn dan ook dun bezaaid. De juffrouw kan dit ontkennen noch bevestigen, maar schat mijn kansen inderdaad hoger in bij een Telenet Center.

Goed, ik pak de HD Digicorder in en begeef me naar het dichtstbijzijnde Telenet Center, alwaar ik na een dik halfuur aankom. Ik voeg me bij een aanzienlijke rij wachtenden en tracht me niet te ergeren aan de gezinnen met kinderen voor me. Na nog een klein halfuur is het dan eindelijk mijn beurt. Ik plaats de doos op de toonbank en verklaar me nader.

“Is het toestel gedeactiveerd?” vraagt de winkelbediende. “Weet ik veel,” repliceer ik, “ik moest simpelweg hierheen komen van de klantendienst.” Na enig getokkel blijkt het toestel vanzelfsprekend nog geactiveerd te zijn; meer nog, er staat nog een case open voor god weet wat. Er volgt een korte dialoog, waaruit enkel en alleen blijkt dat ik éérst contact dien op te nemen met de facturatiedienst en dán pas langs mag komen. Intussen leidt de winkelbediende ongetwijfeld uit mijn gemoedstoestand af dat ik hem persoonlijk verantwoordelijk acht voor deze chaos. Galant als ik ben, geef ik een streepje duiding, waarna ik mijn biezen pak.

Kijk, mocht het de eerste keer zijn dat Telenet me dit flikt, dan nam ik inderdaad rustig contact op met de facturatiedienst en verplaatste ik me met plezier nogmaals naar het Telenet Center. Zoals reeds vermeld, is het echter pas van gisteren geleden dat er een Telenet-technicus mocht aanrukken om de fout van zijn voorganger recht te zetten, en was dit allerminst een geïsoleerd geval. Mijn geduld is onderhand dan ook meer dan uitgeput. Men mag in Mechelen bijgevolg een telefoontje verwachten met de vraag—of zeg gerust ‘eis’—om dat verdomde ding af te komen halen wanneer ík daar tijd voor heb. Met dergelijke woekertarieven mag men toch wat service verwachten, neen?

A Message from Corporate Headquarters

Back Soon

The Internet’s Got Your Number

If you’ve ever made multiple credit card payments on the same web site, you may very well have been shocked to learn that your browser had remembered your credit card information. This means that, if you send your machine in for repairs, the technician can easily use it for evil—and don’t even get me started on public computers.

Accepted Here
Accepted Here by roujo
Some rights reserved

The reason is that there are a lot of otherwise respectable web sites which neglect to use the autocomplete attribute. Since every modern-day browser comes with form autocompletion, this is the sort of thing that’ll affect a lot of users. And while most payment gateways take all sorts of precautions to prevent abuse, having your credit card information in the wild is obviously still something you’ll want to avoid.

Luckily, most of those same modern web browsers also come with some implementation of private browsing these days. Not only are private browsing sessions great for looking at porn, but they are also invaluable if you’re going to be entering any sort of sensitive information. In Google Chrome, for instance, just hit Ctrl-Shift-N and you’re all set. Users of Mozilla Firefox can use Ctrl-Shift-P instead.

Of course, after reading this, your first instinct will probably be to clear your browser’s autocomplete data. However, if you’re using Chrome or Firefox, you don’t need to take such a drastic approach.

You see, both these web browsers store most of your data in SQLite databases, which are ordinary relational databases, each contained in a single file. The files I’m talking about are located in your Chrome user data directory or your Firefox profile folder. The former contains a database called Web Data; the latter calls it formhistory.sqlite.

Now, if you grab the free command line SQLite client, you can freely play around with those databases. First, make sure you close all open browser windows, or the files will be locked. Then, fire up a Command Prompt window, navigate to your user data directory or profile folder, and enter either of these commands, depending on your browser:

sqlite3 "Web Data"
sqlite3 formhistory.sqlite

That should bring up an SQLite prompt, where you can now search for any table rows pertaining to sensitive information. For instance, if the first four digits of your card number were 5678, you would check for any values starting with that sequence using the following query:

SELECT * FROM autofill WHERE value LIKE "5678%";
SELECT * FROM moz_autocomplete WHERE value LIKE "5678%";

If that doesn’t return anything, then rejoice, for your credit card number probably isn’t stored in the file. Got some matches? Fear not, you can easily remove them. Just alter the query so it drops matching rows:

DELETE FROM autofill WHERE value LIKE "5678%";
DELETE FROM moz_autocomplete WHERE value LIKE "5678%";

Finally, type .quit to get out of the SQLite client, restart your browser, and you’ll be good to go. Next time, remember to use porn mode!

Couleur locale

ohjo maat, checkt da
moet zien, ’t is wa zwaar de max
nen ’aiku en al

Ten LaTeX Myths Debunked

If you came here expecting a list of interesting facts about prophylactics, you’ll probably want to be moseying along. This post is, in fact, my opinion on the LaTeX typesetting system. Prepare for heavy bias.

GoodTimeHadByAll
GoodTimeHadByAll by brutal
Some rights reserved
  1. WYSIWYM—What You See Is What You Mean

    Many people argue that LaTeX is intuitive. It isn’t. Sure, if you stick to a document with a couple of headings, some plain old paragraphs, and maybe some bold text, it’ll look okay. But the moment you dive into figures, tables, or pretty much anything supported by packages, WYSIWYM becomes WYSIWLWYTM—What You See Is What LaTeX Wants You To Mean.

  2. LaTeX is easy to learn

    No, it looks as though it’s easy to learn. In reality, you’ll spend countless hours googling for answers to questions no one has seemingly ever asked before, copy-pasting code you can’t make sense of, wondering why a table ended up on the wrong page or why space was added which you didn’t think you’d requested, and asking yourself why you didn’t just use a proper word processor. Also, if you’re going to be writing TeX code, don’t expect to get very far without content assistance from an advanced editor or IDE.

  3. Compilation errors are easy to trace

    Everyone makes mistakes, right? So you’d expect LaTeX to spit out error messages which more or less tell you what’s wrong: the package where stuff went haywire, the line on which the error occurred, maybe even a hint towards a fix? Yeah … Most of the time, it’s better not to expect any of that.

  4. Computer Modern is an excellent all-purpose font

    Seriously? At most, it’s a good font for testing your stuff out, because if even the default font doesn’t like your document, you might as well give up. Unless you want people to think you wrote the document decades ago, don’t use Computer Modern. Of course, the main reason for sticking with the poor bastard is that switching fonts is a pain in the ass—XeTeX or no XeTeX. For instance, if you include the times package, that’ll change your text font to Times, but it’ll also change your typewriter font to Courier, while keeping Computer Modern as the math font. Yeah, that makes sense. Of course, all you need to do to use Times for math is add the mathptmx package—which brings me to my next point …

  5. It’s easy to find a package to meet your needs

    No matter how trivial whatever you’re trying to accomplish may seem, LaTeX probably won’t be able to do it by default. But packages solve that, right? Wrong. Even if the package you want exists, it’ll most likely have an obscure name and throw an absurdly extensive and complex manual at you, because sensible defaults and intuitive commands are unheard of in the LaTeX community.

  6. Packages can be mixed indefinitely

    Think twice before you add a new package to your document. Not only will it affect the behavior of the other ones you already had, it might even break compilation altogether. And, once again, don’t expect to be able to make sense of the error messages it spits out. What’s more, each package has its own ideas about margins, fonts and whatnot. Good luck getting them to match.

  7. LaTeX is the de facto standard for scientific documents

    No, boring layouts are the de facto standard. You can just as easily do those using a WYSIWYG editor. And by “easily”, I mean you’d better hope someone provides you with a template, because whether you’re using LaTeX or Word, it’s going to be a bitch. The fact of the matter is, no single typesetting system or word processor’s defaults will help you survive in the science community. Of course, any approach has its benefits. For example, if you need to use a lot of math, Word’s formula editor is going to be the root of many a headache, but then, there’s always OpenOffice.org Writer with its LaTeX-like math syntax.

  8. Having multiple output formats is a blessing

    It is, but not for LaTeX. If you switch to a different driver, don’t expect your document to come out the same. Included figures will break, packages will complain even if you explicitly configure them to support the driver, and you’ll discover new quirks you didn’t even know your document had. And when you’ve finally managed to work around those, you’ll notice you’ve just created new ones.

  9. BibTeX is a great way to manage references

    Give me a fucking break. Never mind the fact that you have to invoke latex three times before your BibTeX-backed document makes sense, but the whole system is retarded. It was a good idea, but like TeX itself, BibTeX has gotten so cluttered that any sense of structure is gone. Anyone who’s had to use a bibliography file with multiple LaTeX documents will agree: in reality, BibTeX’s portability is nonexistent and you end up reformatting your references manually for each document.

  10. LaTeX is better than Microsoft Word

    I’m not going to claim Word—or OpenOffice.org Writer, for that matter—is better, but I think it’s seriously moronic to promote LaTeX just because it’s elitist and Free. By the way, that goes for any Open Source product. Anyway, in a real-world scenario, either solution is bound to give you trouble. What I will say, however, is that LaTeX is seriously fucked up and needs to die.

Introducing Pwnt.TagSphere

As you may know, I’ve already done quite a few experiments with visualizing tags. Sadly, up until now, I was mostly unsatisfied. Today, however, I am presenting Pwnt.TagSphere, a three-dimensional tag cloud I hope you’ll all enjoy. Head here for an example.

Update: The code has changed a bit since I wrote this, mostly to mimic the behavior of WP-Cumulus. Everything’s backward compatible, so all the documentation below still applies. I’ve also set up a little demo.

Chihuly Glass Seaforms
Chihuly Glass Seaforms by Jill Clardy
Some rights reserved

As the name suggests, Pwnt.TagSphere puts your tags on a spherical body. The sphere automatically rotates, but you can also drag it around in a very natural way. Like with any other tag cloud, the more important a tag is, the more prominently it is visualized. Clicking on a tag takes you to the URL associated with it. The whole thing was written in JavaScript, with MooTools and using a bit of CSS for visual styling.

Of course, you’ll want to use Pwnt.TagSphere on your own web site. Good news: you can; all I ask is that you give credit. I’ll now try and explain how to integrate this gizmo.

Basic Installation

  1. Get the scripts. You need both MooTools (Core) and tag_sphere.js.

  2. Include the scripts in your HTML code, e.g.

    <script type="text/javascript"
        src="/js/tag_sphere.js"></script>
  3. Add the following bit of JavaScript code to your page:

    window.addEvent("load", function() {
        var tags = [
            [ "One", 12, "/tag/1" ],
            [ "Two", 345, "/tag/2" ]
        ];
        var sphere = new Pwnt.TagSphere(tags);
        sphere.getElement().inject(document.body);
        sphere.start();
    });

    This creates a Pwnt.TagSphere with two tags: “One,” which was used 12 times and links to the URL /tag/1, and “Two,” with 345 uses and the URL /tag/2. Of course, you can add as many tags as you like, and you’ll probably want to fetch them from some data source; I’ll leave that to you.

    As you can see, sphere exposes a getElement() method, which actually returns the panel containing the whole thing—a HTML <div>. It’s up to you to add it to the document and subsequently call the start() function to activate it.

  4. If you navigate to the page, you should already see some action, but it won’t be pretty. That’s because we haven’t added any CSS code yet. So, let’s do so now. At the very least, you need to set the tag sphere’s dimensions:

    .tag-sphere {
        width: 400px;
        height: 300px;
    }

    If, for whatever reason, you want to include multiple tag spheres, you can easily assign an ID to the panel returned by getElement() and adjust your CSS accordingly.

  5. That’s it. You’ve got yourself a spiffy tag sphere.

Further Configuration

You may find the default tag sphere ugly and boring. Fortunately, you can do a hell of a lot of tweaking via both JavaScript and CSS. I’ll first cover the CSS part, since it’ll probably be less complicated.

Stylesheet Options

As you may have noticed above, the <div> returned by getElement() has the tag-sphere class by default. The individual tags are actually standard <a> elements with absolute positioning. This provides an easy way to apply some styles to the tag sphere. I’ll suggest a few …

  • To set the maximum font size used in the sphere to 18 points, use

    .tag-sphere {
        font-size: 18pt;
    }
  • If you want to remove underlining from the tag links, just add

    .tag-sphere a {
        text-decoration: none;
    }
  • To emphasize the tag the cursor is currently hovering, use

    .tag-sphere a:hover {
        opacity: 1 !important;
        z-index: 101 !important;
    }

    This makes the link opaque and brings it to the front. The latter works because the links silently get a z-index between 0 and 100 while rotating. Any value over 100 will thus place it in front.

  • While any of the links is hovered, the whole panel temporarily receives the focused class. This allows you to “dim” all the non-hovered links to silver, while making the hovered one black:

    .tag-sphere.focused a {
        color: silver;
    }
    
    .tag-sphere a:hover {
        color: black;
    }

    You could also use the opacity property for this, but keep in mind that you would lose the depth effect.

  • If you want to change the cursor for the whole panel, use

    .tag-sphere, .tag-sphere.dragging a:hover {
        cursor: move;
    }

    While the user is manually rotating the sphere, the panel receives the dragging class. This explains the part after the comma: if, while dragging, the cursor hits a tag, it won’t change. While not dragging, on the other hand, it’ll behave like any other link.

Class Options

By adding a second parameter to the constructor, you can configure a couple of options. For instance, if you wanted to change the tag opacity range—don’t worry, we’ll get to that in a moment—, you’d write:

var sphere = new Pwnt.TagSphere(tags, {
    minAlpha: 0.5,
    maxAlpha: 0.75
});

Now, here’s a list of available options and their default values:

minAlpha: 0.05
maxAlpha: 1.00

The minimum and maximum opacity of a tag. The least important tag gets minimal opacity, the most important one maximal.

zoom: 0.9

The relative size of the furthest tag—i.e., the one at the back of the orb. The smaller this number, the deeper the sphere will appear to be. This factor also applies to opacity.

scale: "linear"

If the tags’s usage counts aren’t uniformly distributed, the sphere might look prettier if you set the scaling method to "quadratic" or "exponential", depending on your preference.

paddingX: 1/5
paddingY: 1/20

The horizontal and vertical distance from the edge of the panel to the outline of the sphere, expressed as a fraction of the width and height, respectively. As the tag names will overflow this outline, these distances will need to be sufficiently large.

rotationInterval: 100

The number of milliseconds between two frames—i.e., the inverse of the frame rate.

rotationAngleX: Math.PI/500
rotationAngleY: -Math.PI/200
rotationAngleZ: 0

The rotation angle around the X, Y and Z axis, expressed in radians per frame. Hence, set rotationInterval accordingly.

dragAngle: Math.PI

The rotation angle when manually rotating the sphere, expressed in radians divided by width or height, depending on the direction. For example, if the user dragged the mouse vertically over a distance that was half the height of the panel, the sphere would be rotated 0.5 * dragAngle radians around the X axis.

That’s it. If you’ve got any suggestions, I’d love to hear them.

Google Chrome Still Sucks

Google Chrome has matured quite a bit since I first reviewed it. In fact, yesterday, I decided to replace my primary web browser of many years, Mozilla Firefox, with Chrome. This is a record of those events.

Google Chrome
Google Chrome

So, first of all, why change a winning team? Well, the main reason is that Firefox feels sluggish to me. Don’t get me wrong: the Mozilla guys are making tremendous efforts to make it as lean as possible, and every release is a vast improvement in that area. If you told me Firefox had the best memory management among its peers, I’d believe you. But my perception is that Firefox is always struggling, even though I know that’s not the case. So it was time for a change.

Feature-wise, you can’t beat Firefox’s add-on system. Sure, Chrome is somewhat extensible too, but exploring that any further would just be comparing apples and oranges. Hence, I knew I’d be making compromises when I gave up Firefox, which is why I hunted for alternatives to most of my Firefox extensions, most importantly:

  1. Forecastfox is a Firefox extension I’d have waived at first. But ever since I realized how convenient it was to have a weather forecast readily accessible—and this was years ago—, Forecastfox has been sitting in my status bar. Instead of looking for a weather add-on for Chrome, I installed Yahoo! Widgets, just for the weather widget. Desktop widgets aren’t really my cup of tea, but this one’s okay.

  2. Another wonderful Firefox extension is the DownThemAll! download manager. It’s really nicely integrated with the browser and once you’ve used it a few times, you’ll wonder how you ever managed without it. Chrome’s download management, like any other browser’s, is of course very reduced. Again, I went for the standalone solution and installed Free Download Manager Lite. While it has its quirks, all the features are there, and integration with Chrome is reliable enough.

  3. I’m one of those guys who always keeps at least one browser window open—gotta keep up with the latest developments on Facebook, right? To save some taskbar space and also divert my attention, MinimizeToTray revived or MinTrayR came in very handy. The main reason I didn’t use PowerMenu, which was recommended to me a while ago, is because MinTrayR put some much-needed items in the tray icon’s context menu, such as one to open up a new Firefox window. With Chrome, on the other hand, the window’s context menu itself has those options, so PowerMenu can just borrow them. Problem solved.

    Update: Actually, TrayIt! is a much more elegant solution.

Of course, there are other extensions I’m going to miss. NoScript didn’t make the top three simply because Chrome lacks the possibility; the Developer menu is more than decent, but it’s certainly no Web Developer extension; the list goes on.

That being said, I’m not regretting migrating to Chrome just yet. It’s a modern web browser that has some very interesting features, such as the OmniBar Omnibox and the Task Manager. However, it didn’t take me very long to find 10—yes, ten—things wrong with it.

  1. The New Tab page. Seriously, what’s up with that? I’m sure it’s useful to some people, but why don’t I have the option of opening up a blank tab instead? Sure, there’s a workaround, but come on!

  2. The Other Bookmarks menu. Like many people, I’m not great with bookmark organization. I never jumped on the social bookmarking bandwagon and I’m too lazy to create folders and/or tag my bookmarks. The result? A long list. Which is allright in Firefox, since you can navigate through it using keyboard accelerators: Home and End work as expected. In Chrome, not so much.

  3. No bookmark separators. Yeah, another Firefox trick I used to manage my bookmark jungle. That little horizontal—or vertical, in the case of the Bookmarks Bar—line makes all the difference.

  4. Hiding the Bookmarks Bar. While we’re on the subject of the Bookmarks Bar, why does the menu item to hide it read “Always show the bookmarks bar”? To me, that implies that, if I disable that menu item, there’s a key or button to momentarily show the bar, and then hide it as soon as I select a bookmark. If not, just call the menu item “Bookmarks Bar” and be done with it.

  5. Capitalization. Of course, the menu item wouldn’t be called “Bookmarks Bar”: the second B wouldn’t be capitalized, going against Windows UI conventions. Many applications suffer from this, but I expect better from Google.

  6. Dot dot dot. It’s even worse if you do follow a convention, but only half the time. If a menu item opens a new window, its label should have three dots. So, apart from the capitalization, “Create application shortcuts…” is correct, while “Bookmark manager”, “Options”, “About Google Chrome” and a few others aren’t.

  7. No master password. In the event that my machine gets stolen, it’d be nice if its new owner couldn’t easily extract all of my stored passwords from my Chrome data. This lack of security is keeping me from using the password manager on my laptop—major burden!

  8. No native theme. I’ll admit I like the way Chrome looks, and adapting to the OS’s colors is a nice touch. And I’m sure they’ll eventually come up with themes that don’t suck. But none of those things change the fact that Chrome still looks a bit out of place. I use Windows Classic and I expect every window to respect that.

  9. No plugin manager. The ability to manage MIME type associations for plugins is a feature that was introduced in Firefox not too long ago, but it’s certainly convenient. For instance, I have both Adobe Reader and Foxit Reader installed, and I’d prefer if Chrome allowed me to choose my PDF viewer plugin from those. There’s an about:plugins page, which even shows whether or not an association is enabled, but there doesn’t seem to be any way to change it. I ended up renaming the Adobe Reader DLL file so Chrome couldn’t find it, which isn’t the most elegant solution.

  10. The crash handler. When Chrome first came out, the fact that Google Update was always running bothered me. They’ve now changed that: you’ve always got a GoogleCrashHandler.exe process. Never mind the fact that you can’t disable it, but that name isn’t very reassuring, is it? And you will need the crash handler: since I started using Chrome yesterday, it’s crashed out on me four times. I’ve since switched to the beta channel, which, ironically, seems more stable.

You could argue that a lot of this is nitpicking or even whinging. Perhaps, but to me, it says that, even after a few years year, Chrome hasn’t quite left the beta stages yet. On many occasions, it still feels like an Open Source project a couple of hackers threw together in their garage—which can be okay, but not for a web browser, and certainly not for Google.

Mass-Convert Your Music

While flash storage is reasonably affordable these days, your average portable audio player probably won’t be able to hold your entire music collection. That’s why it couldn’t hurt to convert—or, if you like it fancy, “transcode”—all your songs to a more economical format, allowing you to carry around as many of your favorite songs as possible.

2009-03 München 024
2009-03 München 024 by Allie_Caulfield
Some rights reserved

Let’s say you wanted to convert audio files in any input format—MP3, FLAC, WAV, or whatever—to a single, uniform output format—Ogg Vorbis, for instance. Sure, you could go hunting for a shareware tool with a half-assed GUI, but why should you? Free and Open Source utilities exist for just about any format, so it’s a matter of chaining them together.

Luckily, you don’t need to do the chaining, since I wrote replicator.pl to do just that. The script will clone an entire directory tree, converting any audio file it encounters, and updating M3U playlists to match. Windows users will want to look into ActivePerl; most other OSes come with Perl. You may also need the following Open Source utilities:

Obviously, you can ignore the formats that you won’t be using. However, MediaInfo is required no matter what. Moreover, you can easily add support for more formats, as long as you know the right command to decode to standard output and/or encode standard input.

How do you use the script? Easy as pie. Just type

perl replicator.pl input_dir output_dir output_format

For example, on Windows, if you wanted to convert everything under C:\Music into Ogg Vorbis and store the result in C:\Ogg, you’d type

perl replicator.pl "C:/Music" "C:/Ogg" ogg

Mind the forward slashes—even though they’re not strictly necessary. Also, the quotation marks are optional in this case, but you’ll probably be using paths with spaces in them, so just keep them around. Enjoy!

Update: Those of you who downloaded the script before September 5 may want to do so again. Tagging now behaves as it should, and I fixed some other miscellaneous bugs while I was at it.

The Pangram Fad

In this day and age, with everyone texting, IMing and emailing, we don’t see much of eachother’s handwriting anymore. Far be it from me to become nostalgic, but I’m sure I’m not the only one who’s ever wondered about his conversation partner’s penmanship.

So, now that blogging (and microblogging) are commonplace, I thought it would be interesting if bloggers put their handwriting on display. Which is why I propose the following course of action:

  1. Grab a piece of paper and a ballpoint pen.

  2. Write down any pangram. Wikipedia has a huge list to choose from.

  3. Scan or photograph what you just wrote.

  4. Post the image on your blog.

  5. Notify five fellow bloggers, requesting that they do the same.

Surely, it’s been done before, but I’ve never come across anything like it. Now, time to kick things off, with a sample of my very own handwriting.

My handwriting

I tag Tom, Grey, Michel, Hao, and Peter. Don’t let me down, guys. You may very well be about to kickstart a major fad, you know.

Continuity

Disorientation
Continuity
Retributions
Pidgin to Adium Emoticon Theme Converter
Tim, peter
A Message from Corporate Headquarters
lodenwijk
Google Chrome Still Sucks
Tim, milosh
Automating OpenVPN Connection on Windows XP
12vpn, Tim, neecom
10 Days Off 2009 dag 5: Warmtefront
Tim, lowieken
Colophonics