Update: This part of my website is an archive of old content. Links may be broken, etc. home

You are here: Top->Happy Happy - Joy Joy


is the new

I heard today that black is the new black.

So I wanted to find out what else is the new whatever.

google helped

So did this is the new chart

my new handle

I want to see how many of the sites I use like this username:


it's hard work

Lessig's keynote at linux world is pretty good.

He quotes (or whatever you do with video) George Bush talking about hard work and the muppet hunter

alleviate confusing UE caused by high bandwidth

Web users are used to having a significant delay after clicking on a link before the targeted page loads in the browser. Due to high bandwidht and fast processors, these delays can sometimes be nearly imperceptible, leading to confusion on the part of the end user.

To preserve the cognitive affordance that the loading delay causes, the following simple javascript can be used.

var linkList = document.getElementsByTagName("a");
for (i = 0; i < linkList.length; i++) {
  linkList[i].onclick = closeLinkFunction(linkList[i]);

function closeLinkFunction (linkNode){
  return function (){
    setTimeout('window.location = ' + "'" + linkNode.getAttribute('href') + "'", 1000);
    return false;

For best results, make sure this script goes either at the bottom of the page or executed after page load.

Nathan's Markup Language (NML)


The most optimistic of souls could characterize XML's satisfaction of the array of business needs for which it was conceived lackluster at best. I myself feel comfortable characterizing it as a complete failure. This afternoon I sat down and created its replacement, and I'm glad I finally took the time to do so, because the whole technical community will benefit.

In the spirit of many recently named "vanity algorithms" I've named my new markup language after myself. I think this language will be enshrouded in history's chronicles and I as its creator deserve to have my name go down with it. This is in stark contrast to the obscure XSL hacks named after mailing list contributors, or worse yet the CSS hacks people named after themselves (and here I have to say WAKE UP!! do you realize you're basically naming a freaking BROWSER BUG after yourself???)


Realities addressed

XML has failed on the following counts, all of which NML addresses:
  • - validation
  • - namespaces
  • - escaping
  • - internationalization


Since I have so carefully thought through all the possible ramification of the sections below, I'm starting the version numbering of this spec directly at 1.1.

Update People have pointed out some minor problems with the specification below. Although they have all been easily addressed so far, I'm a little less confident that this spec is final. Therefore I'm resetting the current version of the spec to .85

tag delimiters

Curly brackets ("{" and "}") are used to wrap NML element tags. Curly brackets are obviously more cool and complex than square brackets ("square" brackets... need more be said???) and infinitely better than "<" and ">". Why? Because "<" and ">" are not matched parentheticals at all!!! They are the mathematical symbols for FREAKING GREATER THAN AND LESS THAN!!! Markup community please GET A CLUE!!!!

If your input has curly brackets in it you may escape them by replacing them with round brackets ("(" and ")").

end tags

End tags are the same for all elements, namely "{/}". There is no rigorous reason to name end tags since NML (like XML) does not allow for tag overlapping. Any language "feature" that is included simply to ease debugging is clearly for wimps and anyone who suggests it should be scorned.

self closing tags

When you have an empty element like {person}{/} you can omit the first bracket of the end tag to save on typing, thus creating a self closing tag like this: {person}/}

ASCII escaping

NML supports the full ASCII character set. ASCII characters can either be represented directly by the character or encoded using the ASCII numerical code point preceded by a dollar sign. So for example an exclamation point can either be typed as "!" or encoded as $33. If you need to have a dollar sign in your input document you should escape it by replacing it with %. When using ASCII characters above 127, use the ASCII dot notation to indicate the offset from the standard 127 ASCII ending point. For example, to represent the ASCII character at 138, you'd use "$127.11".

Internationalization: the scribble element

The special element {scribble}/} is used when questions about NML support for high bit character sets comes up. {scribble}/} will be replaced by random scribbling in the formatted output. By using this generously in some documents, "normal" users will be convinced your application can support fancy languages like Icelandic, Sandscrit, Japanese and French.

case sensitivity

Content in NML documents is not case sensitive and case may or may not be preserved in output. You can force upper case by preceding a character with forward slash and lowercase by preceding a character with the backslash. If you want to include a slash in your document without effecting the case of the following letter, preceded the slash with a forward slash, since there is no such thing as an upper case slash.

Letters in element names are case sensitive, with the exceptions of p,q,h and m, which are not case sensitive.

other escaping requirements

~ is a reserved character in NML and should always be preceded by the word "home".


Anyone who has used DTDs, schemas, relaxNG or schematron can tell you that validation for XML has utterly failed. In fact the whole idea of strong typing is questionable to start with. You should know what kind of data you have and you should communicate that directly to your users. Validation does not replace communication and in fact it is a crutch for weak business processes.

Experience with powerful and practical programming languages like Perl and Javascript further reinforces the fact that strong typing in general wastes programmer hours.

Update: People have been wining about the lack of support for validation in NML, so I'm adding the following validation support.

NML supports the most useful functionality of validation, while minimizing unnecessary complexity in the parsing layer and placing the burdens of validation where they belong, on the content author.

The mechanism for this is the optional special attribute "is-valid". This boolean attribute can hold the values "yes" and "no". If the element contents are valid, this attribute should be set to "yes". A "no" value is equivalent to leaving the attribute out. Blank values are ambiguous.

If every node in the document is valid, the "is-valid" attribute should be removed from all of them and replaced with a document level {is-valid}/} element.


Document authors in NML are required to choose unique names for each element. This obviates the need for any namespacing mechanism, and I can't believe the creators of XML didn't think of it.


Sometimes the document order may not reflect the true desired order of elements. The special attribute "ordinal" can be used to indicate true order of occurrence in these instances. For example, the element {people ordinal="3"}/} should be treated as the third item in the document.

output formatting

Formatting engines should support the special NML attribute "style-as". This allows document authors flexibility as to how their content will be formatted. For example, in the NML version of XHTML, {span style-as="div"} should be formatted as a div, while {b style-as="i"} should come out italic.


NML's built in inclusion mechanisms are simple and powerful. The inclusion element is simply an empty self closing NML tag like so: {}/}. The first time this tag is encountered, the parser should build a list of files in the document's directory and all subdirectories. The file list should be alphabetized, and the contents of the first file substituted for the {}/} tag. The next time the tag is encountered, the second file in the list is used and so on. For performance reasons, all files in the list should be loaded and parsed at the first include tag encountered.

executable content

The % tag delimits executable content. Any text between % and % will be executed at parse time. Executable content can be written in any scripting language. The parser should run through all the interpreters installed on the client machine and try to execute the string with each of them, thus providing the greatest likelihood the commands will get executed at least once. Output from the command should be discarded or written to a numbered file in the user's temp directory.

An MS Outlook plug-in for this functionality is already available and runs immediately when the message is received.


Security problems are in general the problem of application developers and end users. Any user who can't secure their own machine should not be allowed to own a computer, and in fact should be taken out into the desert and forced to generate their own 256 bit MD5 keys using only an abacus with lifesavers for wheels while surrounded by ants. At night the ice weasels come.


When coding parsers for NML, developers are encouraged to make them faster and simpler than the equivalent XML parsers. Of course there will be some developers who write poorly performing code but they will be sternly reprimanded by the creator of NML and (more importantly) censured by the vast NML user community.

killer apps

I'm working on translating my XML based csv replacement to use NML instead.

There are also rumours that the national polo league is going to use NML to represent information about national disasters.

botox cocktail anyone?

Here's a great mini-history of the discovery of artificial sweeteners.

It suggests that these kinds of discoveries actually usually DON'T come from rational scientists saying "well if we mix a substance with property 2 with one of property 3 we'll get a substance with property 23"

Instead they come from some guy spilling some unknown chemicals on his hand then tasting them in his hamburger. Or just: "Test? I
thought you said taste!"

So I'm trying to picture the kind of error that would produce this botox discovery

new design patterns

- model view control freak (thanks Elijah)
- fuseblown
- italian entre
- inversion of intelligence
- spaghetti factory

- unintelligable naming
- arbitrary entanglement
- hidden dependancies
- redundant comments
- extreme inefficiency

cable spools

We ended up using one as a table. It _loooked_ a bit like a table when you tiltied it on it's side, but it was so bad in so many ways. It was a little too high. The bottom of the spool was just as wide as the table top so you couldn't scoot your chair underneath. You could lift the front legs up onto the bottom of the spool but then you were tilted backwards. There were big holes in the table top and it was uneven enough that everything you set on it wobbled. The biggest hole and one of the other holes fell through into the inside of the spool and it was really tricky to get anything out of that space if it fell in.

frogs like sabrosa

I was just playing the Beastie Boys' "Sabrosa" and it got a chorus of response from a bunch of frog outside my window... They have been silent all morning, I didn't even know they were there. Then they quieted down again as the next song in the mix came along.

work to rule

Work to rule is a kind of strike that I think would be uniquely satisfying.

When workers decide to strike, rather than walk off the job, they pull out the procedural manuals that apply to their jobs and say "until you give us what we want, we are going to follow every single rule to the letter."

This can have two effects. One is that the only things that get done are those are strictly defined in the job description of a worker. Workers no longer look for unforeseen points of failure out of the corner of their eyes. The utter inadequacy of the "comprehensive guidelines" becomes clear, as does the value of trained and intelligent human presence.

The second is the strict enforcement of restrictions that can normally safely be ignored or that apply to a more limited group of cases than documentation implies that they do. Airports and hospitals would basically grind to a halt if every restriction were followed to the letter.

The "work to rule" strike is an extreme example of a kind of very low key workplace sabotage I've heard called "malicious compliance". I just love the sound of that phrase!

anti spam spam

Don't know why this tickled me so much.

"If you received this email your s.p.a.m. filter is not working.

If your one of those people who hates sifting through junk mail in your [this product is for you]"

program related activities

I've recently been engaged in some get-a-new-president related program activities.

I've also been learning to find my way around liberty city. I don't even have to stop for directions anymore, which is lucky because everyone there is becoming increasingly unfriendly.

paradigm units

I asked a bunch of people the question: What is the unit of measurement for a paradigm shift? Here are the answers I got (in order of who I asked first):

- pixels
- wasted years
- hair color (or receding hair line)
- spicey-ness
- order of magnitude
- ask Rictor
- number of times you have to re-explain the same thing over
- how much the catholic church disapproves
- no units possible, by definition

modern day oxymorons

- your call is very important to us, please continue to hold (esp. after the third or fourth time)
- rolling regression testing
- superstition is bad luck

bad sign

I think having "uninstall" as your hottest download is a bad sign.

new year's predictions

- McDonalds will begin selling espresso
- XML databases will turn out to be useful after all
- My kids will be bigger, smarter, and more energetic than the year before
- An open source game will start kicking ass, will change the face of gaming and will become the killer app for linux (this may take another year or so)

XML jokes

There's an open chellenge in the group I work with to come up with a joke phrased in mark-up. My two attempts:

<you're it>

(tag you're it) and

<td padding="5px">me<td>

(I'm in a padded cell)

Also see NML and XML format for csv files

Les Nessman Turkey Drop

I had not yet heard of the Les Nessman memorial Turkey Drop. It's a 70's sitcom thing, but has a large and current following. By lucky coincidence I had started thinking along these lines again upon witnesses an E! special about Muffler Men featuring interviews with Bill Griffith of Zippy fame (Yow!).

Les Nessman says:

In a situation like this, I always ask myself, what would my hero Edward R. Murrow think? And I think that Ed would think that this was censorship. Then I think about what my other hero, General George Patton, would think, and I think George would think that radio and television ought to be cleaned up, and if he were alive today, he'd take two armoured calvalry divisions into Hollywood and knock all those liberal pinheads into the Pacific! So as you can see, I'm a very confused man. And when I get confused, I watch TV. Television is never confusing. It's all so simple somehow.

new perspectives

OK, like oh my god, I like this new way of looking at my web page.

Also, I pity my website, foo'

Oh so much fun.

Oh I found each of these a long time ago. But they are both so much fun I can't believe it. It's amazing how you can catch such a great characterization in just a few frames.

poke alex in the eye

Make the doctor smoke(might need netscape for this one...)

New Email Address

Hey, I got a new email address, it's My old email will always work, but now I have this new one to post to newsgroups and stuff with. That'll cut down on my spam, don't you think? Everyone else is doing it...


Richard Stallman take note:

GNU DUNG is a palindrome.

Someone thought I meant insult by this; not so. In particular I thought it would be cool if someone could come up with the first recursive palindrome.


Just came across a pamphlet for this guy while trying to empty out a drawer in my filing cabinet.

I met him at his boomerang booth somewhere in Oregon perhaps as long as ten years ago. He was clearly a craftsman, making boomerangs by hand with enthusiasm and knowledge of his craft.

I bought a boomerang from him, and it really worked!! It would carve an enormous loop in the sky, sometime hovering right above my head. Sometimes it would trace out its fifty yard ovoid in an unpredicted direction, which is how it eventually got lost.

Anyway, I'm going to try to get another one, and maybe even take up boomerang juggling (at night,on the golf course nearby?)...


When I have a hammer...

Everything looks like a thumb.

Dick Cheney's 419 letter

Dear Sir or Madam,

I am Mr Dick Cheney a special adviser on Petroleum and economic matters to the Head of State of The United States of America. Because of my strategic position in the former Government, and also being a close confidant of the Head of State, I was able to acquire personally, the Sum of $25,000,000,000.00USD (twenty-five billion United States Dollars) presently lodged in some offshore sham bank owned by his brother Neil.


If you are interested in assisting me, please send me an email immediately, as you are to lodge this money in a bank Account and contact me for necessary arrangements for the investment after acknowledgement of the receipt of the money.

For your help and assistance in this deal, you will receive 30% of this money in cash, 10% will be set aside to offset all expenses while the remaining 60% is for me.


Eminem vital to national security.

Don't know where I got this, don't know who Phil is, but it's pretty funny. Wish I could get the real audio...

(from about two screens down the page...)

This evening Phil opened the phone lines to get the listeners opinion on the new release from the controversial rap artist Eminem. Phil takes a call from a kid by the name of RC Collins, who attends the Bradley Military Academy in Alta Dena, CA who seems to have plenty to say about the infamous rapper. Collins explains to Phil and the audience that Eminem is very popular around the military academy on account of him being "in your face" and very "hoorah" (a quasi-military term used by Collins to exclaim his readiness to eat his own guts in battle) but the lack of air time that the rapper is getting is a cause for concern to the young cadet. In fact, during the interview, Collins basically states that if MTV and the various radio stations around his area don't start playing Eminem a bit more…he and his fellow cadets might just be a bit reluctant when it comes to defending our great nation! Phil tries to explain to Collins that when someone takes on the responsibilities of being a soldier, there can be no conditions on if and when they will go into battle…they have to do what they are told no matter what. Cadet Collins doesn't buy into Phil's opinion and states that if MTV and the radio stations don't have enough respect for the US military to play the Eminem then the America people might just have to fend for themselves if attacked by Afghanistan!

Sluggy Freelance

This long running online comic is suprisingly endearing. I began reading it soon enough after it started that I only wasted half a day reading the archives up to the (at that time) current comic. I've been hooked ever since.


Great slogan for a band...

"We're the dot in purple micro-dot"

Sunday pancake breakfast

Went to the Vet's Hall sunday morning to a breakfast put on by the ladies aux.

The vet's hall looks like a trailer from the park next door (mostly because it is boxy, has no window sills, and a porched tacked on to the side as an afterthought). But it's really nice inside, all wood, like an old elk's lodge or something.

It was not exactly a jet set dot-com event like I'm used to (ha!) but rather the pick of the crop of Willow Creek locals with nothing better to do on a sunday morning than pancakes. Read: a few old folks and a middle aged couple who rolled in on a Gold Wing.

We poured the kids out the door into the park next door and the sunday midmorning sunshine and a few minutes on the playground made the world seem bright again!