« August 2004 | Main | October 2004 »

September 29, 2004

Application Servers

I wonder if the concept of application server is also bunk. Plone appears to be Zope’s main excuse for existence these days—and I have serious difficulty discerning what it does from what Zope does based on the simple reading of the site.

For grins, I searched on Google for “open source application server,” then quickly realized what I really wanted to search for was “open source application server -java” to lose all the Java shit. I believe Java is fundamentally inefficient, as I may have mentioned before, because it was designed for the lowest common denominator of programmer.

I have narrowed down the search to these four rather strange app servers:

  1. Whitebeam

    Based on a server-side JavaScript model, providing extremely tight PostgreSQL integration if you want it, or a template system that sits on top of it (if I understand correctly), it also uses XSLT for the display, which I’ve also mentioned recently I’m not very keen on.

  2. Vanilla

    Based on a strange but evidently cool language even I haven’t used called REBOL. It uses a snip/space metaphor which seems highly appropriate for designing a hypertext system.

  3. OpenACS

    OpenACS is built on AOL’s wacky but apparently now open source webserver, AOLServe. It’s scripted entirely in TCL, and integrated with PostgreSQL or Oracle, your choice. Unlike the others, it has been around for about 10 years and is billed as a really solid framework though a bitch to install. I wonder if this may be something like what I want.

  4. SQLFusion

    This is some type of CMS which is wanting to fill the shoes of Access, so the developer says. So it seems to be a web-based system for making HTML reports and such on top of an SQL database backend (MySQL or PostgreSQL). Interesting, and very possibly nasty.

The only two things I’m certain of are that I am uncertain, and that this is no surprise to the readership. I am trying to diagnose the problem and I’ve come up with this:

My urge was to revisit struts and phrame to see if I can understand the whole MVC2 idea better. I like the idea, but it seems clear that if you need a degree to understand the config file, and everything else is magic that happens behind the scenes, there will be great confusion. I am sure it’s great, but I haven’t heard a good explanation of it that made sense yet, so I think I will continue to muddle around in the slime with the other piglets that think that what really happens during an HTTP transaction is this:

  1. A request is sent, essentially encapsulated in the URL + POST + headers
  2. Somebody on the server gets slapped awake and handed the request
  3. Sleepy moron scrambles some sort of text together and sloppily hands it back to the requester

The desktop application analogy isn’t very analogous, in my opinion, because you get to keep state (for what it’s worth). So I’m not entirely sure if something as complex as MVC2 is really warranted, because I don’t really have a strong desire to make web applications as complex or more than desktop apps. But I worry if a loss of generality at any stage is really justifiable.

For the record, in the “maybe someday might exist” “application server” I describe above, the only part that makes sense to me right now is the URL part.

In unrelated news, I think this weekend I may attempt to install PostgreSQL with Slony-I on a big stack of TCC computers and then hammer it, and then kill some of the instances, and see how it works and if a simple CGI for failover host detection is as easy as I suspect it is. I have two boxes here, someday they’ll both be on the network, but for right now it would probably be a hassle to set it up. I’m looking forward to discovering that Slony-I is the answer to most of my PostgreSQL prayers, but I have a few reservations and some general nervousness. We shall see.

Posted by FusionGyro at 11:30 PM | Comments (1) | TrackBack

September 28, 2004

Cat, Icons, and MaxDB

This morning I took the cat to get her stitches out. Which went fine, took about 5 minutes, and didn’t even make me late for work. When she got spayed, Ebony was hissing at her when she got back. It doesn’t look like that happened this time. It was probably because she stayed there for the whole day, all kinds of other cat and dog smells got on her.

I’ve asked Alex to make me an icon for Gravatar, the wacky icon service I’m interested in. It’s probably going to wind up being a band logo (probably Death or Mekong Delta, what a surprise) because it’s difficult to take a bunch of band logos, programming language names, the PostgreSQL elephant, pornography and the Anarchy symbol and bring them together in an 80×80 icon. Though I welcome people to try. :)

At work, we were talking about what we need (or want) in a database system, and that’s clustering, hot failover, and other high-end features. We found MaxDB, the new SAP DB, but in addition to strange commercial restrictions which miraculously don’t apply to us, it doesn’t build on the Mac nor is it ever expected to. The client libraries don’t even build on the Mac. So, fuck it. I just wish PostgreSQL would get these truly high-end features someday:

That’s about it.

Posted by FusionGyro at 09:57 PM | Comments (0) | TrackBack

September 27, 2004

I Hate XSLT Almost as Much as I Hate Bad Security Designs

I was going to write an article “XSL-T Considered Harmful,” but apparently someone got there before I did. However, I will address it some other time, mainly to go over these points in more detail:

Instead I thought I would talk about something gaining acceptance today, security through unnecessary complexity. I will begin with an example.

Authorize.net provides card-not-present credit card authorization. In other words, they are a gateway to which you can submit a credit card transaction and receive a response programatically. They have a bevy of interesting security measures, mostly for fraud protection, but also to secure your password. With every transaction you submit your username and something called a “transaction key,” which looks to me like some Base64 encoded random shit, and I hope that’s what it is. At any time, you can log onto their admin interface and generate a new tran key and start using that either in 24 hours or immediately. This increases security, obviously, because you aren’t passing the password over the wire with every transaction.

The feature I’m interested in discussing is the MD5 field of the response. This field is constructed by taking the MD5 hash of your login ID, the transaction ID, the amount, and a secret value you set in the admin interface. When you get the response, you cram these four values together, take the MD5, and see if you get the same value.

Neat security trick, and that’s all they really say about it in the manual. But what’s the practical effect? You’ve just given some poor asshole’s credit card to the wrong site or whatever, and you get back the response saying “all’s clear” and look at the MD5: it’s wrong. What do you do? You’ve already given away your login name, your tran key, and a credit card number. What do you do now?

What if something was compromised? You first instinct will be to go to the admin interface and see what’s going on. Unless you pick up the phone instead, you’re going to go give away your password. Which protects all the data for your merchant account, like (for example) your business’s bank account numbers. If you do call, what are you going to say? The MD5 sum failed? To the monkey on the phones? At 3 AM? The boat’s already hit the ice berg, you just caught it within the first gallon. You’re still sunk, and Authorize.net is still sunk.

Moreover, if something were to go drastically wrong, what else might be going wrong? The gateway is basically an HTTP POST with a CSV result. It goes over SSL for security. A problem here indicates a problem with SSL, which means the management interface is also compromised, which is where you send your infinitely more important password. Lots of businesses work like Matterform, and only do AUTH_ONLY requests, meaning, if there is money in this account, authorize it, and we’ll pick it up later (called “capturing”) or cancel (called “voiding”). We have an accountant whose sole function is to go through the admin interface capturing valid-looking transactions. Which means the password gets sent every day. As soon as I took over such a site, I would invalidate all of the logins, and get all the passwords that way. I bet at least 30% of businesses do something like us, which would amount to at least a few thousand Authorize.net account names and passwords, all linked to actual bank accounts.

So the purpose of the MD5 facility is really only to alert you to a shortcoming in SSL. I have no doubt that such a shortcoming exists in SSL, but I find the utility of being alerted to it directly after compromising myself to be less than the effort (meager though it may be) to implement the MD5 checking in our AIM API. I welcome criticisms of my argument, though I suspect that they will boil down to liability, for which (though I cannot be certain as I haven’t read the contract) I do believe Authorize.net is quite responsible for.


Posted by FusionGyro at 10:18 PM | Comments (0) | TrackBack

September 26, 2004

Blog Stuff

I’ve enabled something called Gravatar on the blog. It’s another interesting technology designed to give people not using LiveJournal certain LiveJournal-like abilities; in this case it lets commenters have the same icon regardless of the site or software the blog is running on. I figured it sounded neat like TypeKey, so I went ahead and installed the plugin. The practical effect is that if you comment on my blog and haven’t registered a user icon (I’m sorry, Globally Recognized Avatar), you get Bob Dobbs instead. When they decide to sue me, I’ll make it my original thought, a text icon that just says:

i am lame
i have no icon
please forgive


I also worked on Alex’s LiveJournal a bit. I should post what I’ve done with the MTKeyValue plugin, because it’s interesting, and it lets her have (some, hacky) LJ functionality which she desires on the new MT blog. A “STACY” review should be forthcoming as well. Oh, and I finally copied all three of my album reviews from (ugly) musical_elitist. This is only really interesting because two of the three predate blogging for me.

Posted by FusionGyro at 04:27 AM | Comments (0) | TrackBack

September 25, 2004

Tetsuo II: Body Hammer

Alex and I are really getting into Japanese Horror movies. Tetsuo II is one of the more highly-referenced of the genre. Unfortunately, I didn’t find it to be particularly enjoyable.

The cinematography was annoying—blurry, weird angles, bad color (no red apart from fruity volcano and workout stock footage) poor film quality all combined to make it very difficult to even tell what was going on. I guess this is part of the point, but I didn’t care for the low-end MTV format at all.

The plot was interesting, if sort of hard to get a grip on. The main character can’t remember much of his past, and then his kid get kidnapped, and then weird mechanical things happen. The story is entertaining, but even the moments of frank elucidation on the part of the arch villain didn’t really reconcile all of the weird threads. This movie was made to be pretty first, and make sense second.

The special effects were quite good, probably seeming better than they were due to the overall poorness of film quality. It’s hard to tell what technique someone is using for a particular effect when it’s hard to tell what effect is going on.

I found the music enjoyable, but as seems to be the norm nowadays, the quiet moments were far too quiet, and the loud moments were pretty damn loud.

Visually, there were many moments I definitely could have lived without seeing (killing a dog, gun/sex play). They will probably stick out in my mind for some time, and I guess the director gets points for making me queasy (it is a horror movie, after all).

I’m having a difficult time putting a rating on it, because it was pretty effective, but at the same time I’m not sure I’m going to want to see it again. Not wanting to see a movie twice generally reduces the score (for example, American History X is a good film, but I don’t recommend it because I don’t want to ever see it again). Hmm.

If you really want to see weird special effects of people having guns and such crawl out of their skin (which I did), you should see it at least once. If you want to see something that will leave you with a generally weird feeling, you should probably see it. Otherwise, you should probably pass on it.

Posted by FusionGyro at 10:01 PM | Comments (0) | TrackBack

September 24, 2004

The Icorse Files

A few weeks back, some telemarketer called at work and wanted to speak to a man named Icorse. We told them he wasn’t there—could we take a message? No, and they called back several times. We eventually traced the call and discovered who it was. It was the Republican Party.

Today, someone else called. They wanted to talk to Icorse. I told Michael to give the phone to me whenever someone called for Icorse, so pretty soon I had been handed a phone.

Me:Icorse here
Her:Hi, I’m with Disabled Workers of America, how are you doing today Mr. Icorse?
Me:Fine fine, what can I do for you?
Her:Well as I said I’m with Disable Workers of America, and I wanted to ask you today how your lighting is in your home? Today I’m selling lightbulbs, and I’d like to ask you, what sort of wattages do you use in your home? 100 watts?
Me:I’m sorry, I’m really sorry to say, but the Firefighters Union called me yesterday and I already bought their lightbulbs for my home
Her:Oh, the Firefighters, hmm? But I’d like to ask you, did they come with a 10 year full replacement guarantee?
Me:Actually, they came with a 15 year guarantee.
Her:Well, did they come with full replacement guarantee?
Me:No, but I’m sure it’s not worth the money to get yours, since they’re going to be good for an extra 5 years, and they’re backed by the Firefighters.
Her:Mr. Icorse, I’m here with the Disabled Workers of America. My husband used to beat me. I had to get out of that situation. If you buy my lightbulbs, it gives me a job for four hours.
Me:Are you saying, they fire you if you don’t sell enough light bulbs?
Her:Yes, that’s correct.
Me:What organization did you say you were with?
Her:Disabled Workers of America.
Me:Wuh, wh- I’m a big name in the Republican party, and when news about this gets out, big things are going to happen! whisper whisper I’m sorry, I have to go right now, a meeting. Bye. click

Michael and I looked it up online, apparently they’re prohibited from calling in Pennsylvania, and they’re a pretty well known scam.

Posted by FusionGyro at 09:04 PM | Comments (0) | TrackBack

September 23, 2004

This Post is for Eric

Eric called me and told me to post something so he could leave a comment. So that’s what this is. :)

Today was long as hell. I am thinking about extending my recipe “site” to permit anybody to upload recipes, validate the XML, do the transforming dynamically, and shit. Of course, then I’ll need something simple enough to use that Eric would find it joyful to upload all his recipes to my app. So I’d need better colors (no offense John) and categories, and probably some other crap. We shall see.

We’re watching Dune, gotta run.

Posted by FusionGyro at 10:27 PM | Comments (0) | TrackBack

September 22, 2004

I Hate Zope

I keep thinking, gee wouldn’t it be great if I had some kind of glorious content management system for storytotell.org? I usually go and look at Zope. That’s what I did today. Looking at Zope makes me exhausted. Then I think, it would be less effort to just bang the electrons together one-by-one, and manually pump them out the ethernet device, than to try and figure out what the fuck is going on with Zope.

I blame them, the cornholes, and for many reasons:

  1. You shouldn’t make a web-edited programming language depend on proper tabs.
  2. You shouldn’t make your technology so complex, you can’t explain it in English in a sentence or two.
  3. Do you really need all these different template systems?
  4. If you’re going to have a topic/detail interface, let your detail view actually have details I care about.

1. Tabs

I love Python, it’s one of my favorite programming languages of all time. I think it’s asinine to depend on it for a web-based CMS where I’m expected and encouraged to use your scheisty admin interface for everything. Now, they don’t depend on it so much, because you can still edit the templates and so forth via FTP or WebDAV or whatever, but it’s still annoying.

2. Inexplicability

Let’s take Apache Tompcat as an example of what I mean. What does Tomcat do? This is what the Tomcat page says:

“Tomcat is the servlet container that is used in the official Reference Implementation for the Java Servlet and JavaServer Pages technologies. The Java Servlet and JavaServer Pages specifications are developed by Sun under the Java Community Process.

Tomcat is developed in an open and participatory environment and released under the Apache Software License. Tomcat is intended to be a collaboration of the best-of-breed developers from around the world. We invite you to participate in this open development project. To learn more about getting involved, click here.”

Lots of buzzwords here, like “servlet” and “servlet container” and JavaServer Pages. Pretend I don’t know what they mean. I might think, I know what PHP and ASP are, so I might figure that JSP is like them (and I’d be right). I’m not sure what a servlet is, but it sounds like a little server, so I might think that it is some sort of scheme for making a bunch of Java classes and having them deal with page requests (and I’d be right). Note the rather laid-back description about it being open-source and easy to pitch in. Let’s look at what the Zope front page says:

“Zope is an open source application server for building content management systems, intranets, portals, and custom applications. The Zope community consists of hundreds of companies and thousands of developers all over the world, working on building the platform and Zope applications. Zope is written in Python, a highly-productive, object-oriented scripting language.”

Let’s analyse this. Look at the prominent phrases: application server, content management system, intranet, portal, custom application. The only two phrases there which seem to have any real meaning are “content management system” and “portal.” E.g.: C lets me make custom applications. The UNIX kernel is an application server. Those expressions are simply too vague to give me any fucking clue what they mean, and that makes me suspect they don’t know what it means, or they don’t know what their system does. I know what an intranet is, and it has nothing to do with the web and everything to do with networks that aren’t reachable from it, so that’s just plain wrong usage. If I didn’t know what a Wiki was, I might not be sure what a content management system is, and frankly, every site I’ve seen lately that said it was a portal was one of those evil advertising sites that take over mis-spellings of popular domains. Let’s get more nitpicky: every open source project thinks it’s of critical importance that the source is open, and they all way over-emphasize the contributors and supporting companies angle. I’m sure 500 people have contributed something to Zope, but like every other project there probably aren’t more than 20 people who regularly check-in code and have direct CVS access. I’m sure there are at least 100 companies that have used Zope in some context, but like every other project there are probably only two or three that are really committed to it (whatever “committed” means in a commercial context).

3. Templating

Zope comes with two template systems, and both of them are awkward. DTML is less HTML-like though it uses tags, and their new system called Zope Page Templates is much less powerful, but much more HTML like.

I don’t understand the fascination with templating systems. I read an excellent article about a year ago asserting that PHP didn’t need Smarty, which everyone is all ga-ga over, because PHP is a templating system, and that all that systems like Smarty can do is reduce the power without improving the readability. If I make a PHP file using proper PHP syntax, it’s no trouble to work with, even in Dreamweaver, which comes with a built in concept of PHP:

<? foreach ($list as $i): ?>
<tr><td><?= $i ?></td></tr>
<? endforeach; ?>

I think even a non-programmer can figure out what’s going on here, and it’s certainly easier to understand than, say, magically having tags repeat if you put a weird foo:bar=”repeat: (i)” thing in one of ‘em.

Fact: no web designer is so stupid as to have no concept of PHP or programming. Web programmers have this bizarre and quite wrong impression that programming is really hard, that web designers can’t code at all, and that web designers need to be completely protected from the code. They also seem to think that because programming is hard, design is hard, when both are really not that bad and both can be learned even if you have no inborn talent. The fact is, if you simply collect all the data they want at the top of your script into a pile of variables, any web designer can manipulate it into looking how they want. It’s easier if they’re using PHP than if they’re using your strange template system, because your strange template system isn’t as widely used, is obtuse, and doesn’t make programming-sense. It doesn’t make design-sense either, but it should at least make programming-sense, because programming can be learned, and your random weirdness cannot. Your system almost certainly makes things more difficult, because your system isn’t going to account for every little code issue that will come up in the presentation, such as sorting, counting, summing, and simple text manipulations. Better to just let the designers have the big-boy tools, and because the big-boy tools make sense. The designers can ask you for help or read a tutorial if they get confused. How many PHP tutorials are there online? How many good web design tutorials are there online? I think maybe coders have invented this distinction because they want a gap to exist to protect their own careers, or because design was too hard for them to learn and they wanted to pawn it off on someone else.

I would think only a good designer would truly need the level of separation that these tools seem to want to provide, but I also think a good designer is a lot more likely to know PHP than a bad one. What kind of web designer could stay away from code forever! So it seems clear that Smarty, like Java, is a tool for the mediocre, because the mediocre need as much complexity as possible to help them waste time and account for their lameness. (No offense to any of my friends who are forced to use Java or C# by economic factors)

4. Make your details matter

Suppose I’m at the Zope page, and I see a cool link like, for example, Zope CMF. I look at CMF and I think, CM probably stands for Content Management, so this might be something I’d like to have. I click on the link, and I get taken to this page. The text says:

“The Content Management Framework (CMF) for Zope from Zope Corporation provides a powerful, tailorable platform for building content management applications.”

Next is some guys email, and then a breakdown of every version of the CMF ever released. But I don’t give a fuck about the release three years ago, I want to know WTF it does, and if I want it. “Powerful, tailorable platform for building content management applications” reuses almost all of the terminology or intent of the vague and useless Zope description itself, how can I tell what this provides that Zope doesn’t out of the box? To get that information, I have to click on the Information link buried on the right underneath the “development status” and poorly distinguished in a UI sense from the things around it. (By the way, “development status” is a load of crap anywhere you see it. Unless they used Zero Defect Programming, it’s bug-ridden crap, and you’re going to use it anyway.) Also, any link entitled “Information” is guaranteed to go to a page that should have been on the page with the stupid Information link. I came here for Information, you twat, not another link. To quote Doc O’Leary: “I think the WWW is currently more hype and fluff than quality content. If you’re not part of the solution, you likely don’t have a link to it either.” Clicking on the aforementioned stupid link, I get this:

“The Zope Content Management Framework provides a set of services and content objects useful for building highly dynamic, content-oriented portal sites. As packaged, the CMF generates a site much like the Zope.org site. The CMF is intended to be easily customizable, in terms of both the types of content used and the policies and services it provides.”

That’s all the text about what the CMF does. Services and content objects that… do what he said it did on the other page. Oh, it makes a pile of drivel and shit that looks like the regular Zope page: busy, full of non-information, and poorly-structured. That’s what I want. And it’s customizable, in terms of type (duh) and the policies and services (duh). I guess that means I can turn on and off the search bar.

The rest of the document is just who to contact, how to install it, and where the examples are. There is basically no online information about what this module does in plain English or why I might want it, but at the same time it has such a generic name I have to conclude it’s wildly powerful and great. Just like Zope. This might be their flagship module for all I know. It must be great, because I can’t tell what the fuck it’s for, and it has a great logo. Sounds like Microsoft reasoning to me.

I’ve had a love/hate relationship with Zope for many years now, but I’m not falling for it anymore. I know what it claims to do and I know that it’s supposed to be rad and the shit and all, and it’s supposed to solve all your problems for you. But I think in the past three years, if it really did anything, they would have dropped some of the buzzwords. I haven’t seen a page that proudly announces it was built on Zope. They also don’t need the asshole mentality of, if you don’t know what it does, have a beginner’s tutorial and be sorry you don’t already know what it does. I own two Zope books, and every page reads like the out-of-touch professor explaining The Way Things In The Real World Are. One of ‘em even had a line in it somewhere about how Zope looks complex because it was made by geniuses to solve every problem. If that were true, it wouldn’t be so hard to figure out what it does, now would it?

Look at the Cocoa library. It can do most everything you would ever need in a desktop app—a far richer problem domain in actuality—yet it is small looking and fairly simple. It also relies on a lot of design patterns, but it’s all fairly orthogonal and can be learned in steps. Cocoa also is partitioned neatly into little categories: you have your Mutable and Immutable objects, you have your App Kit and your Foundation, you have your Views and Documents and Controllers. Cocoa is for the neophyte, but it grows with you because it’s flexible and based on easy concepts. With Zope, everything is for the sophisticated user, but nobody really helps you bridge the gap between simpleton and sophisticated. And to quote roughly some bastard on John Shipman’s website, complex things that evolved from simple things are good, complex things that started out that way are not.

When you think about it, their website says a lot about them. They like having lots of text links that lead nowhere except to more text links. I went there with some idea of what I wanted, clicked three times, and realized I would probably have to install Zope and several modules before really arriving at any idea of whether or not it could do what I want. That’s unnacceptable. Nobody’s going to go through the trouble of installing Zope, setting up Apache to forward to it, setting up a cache so you get decent performance, and learning two or three templating systems and (possibly) a new language, just to run your portal.

Argh, goddamn I hate Zope. Anybody want to buy my Zope books? :D

Posted by FusionGyro at 11:25 PM | Comments (1) | TrackBack

September 21, 2004

Migration Complete

So, Manuel sent me a nice email yesterday, which at the top had a very simple instruction: make ~fusion redirect to the blog. And I did that, and I also, in a fit of centralization, moved everything from my Tech account and my Storytotell account under the wings of this blog. Hence, the Danvolution links to the right.

Responses to my desire to write a book about programming languages have been positive: Bill, Manuel, Eric and Alex all think it is a good idea. Manuel brought up the unspoken truth that it will be hard to make it as a college text without appending “PhD” to the end of my name. He’s right, of course, but I think I’ll try and cross that bridge when I get there.

I spent today at home from work quite ill. The specifics of it, I’m not going to get into, but I will say that it kept me up until 4 AM and I felt bad until about 4 PM today. Which makes it look like a strange 12 hour bug, but I figure it’s nutrition-related. As a result, we bought a bunch of fruit and vegetables. I hope it pans out.

I’m enjoying using Movable Type so much, I’m considering buying their outrageously expensive ($100) unlimited personal use package and installing it on Storytotell.org for all to use. I’m also thinking about going back over Zope and various other systems. MT is great, but there may be something more flexible. Still, it’s hard to find anything that works as well once it’s installed, that looks as great, that isn’t massive overkill. I’m not keen on running a separate webserver on Clan Spum.net (for example). I’m also not keen on installing Tomcat or anything that works by using XSLT. I’m also not keen on installing anything with a wacky, limited template system. Which I guess means, I hate the web. Or something.

We got a Netflix account. So I may be “reviewing” movies more shortly. We computed that a week’s worth of rentals from the local place is about $10 due to their incredibly skewed, fucked up pricing plan, and with Netflix going at $21 a month, it actually is much cheaper. That and, the local place wants $4 per DVD for 3 nights, so we’ve been renting lossy VHS tapes we don’t like as much anyhow. Thanks to Allan for building my trust in their system.

I almost forgot to mention, I worked on the layout of Alex’s blog today, and I think it’s really shaping up. I’m going to have to make several more MT templates for her, for the links on the bottom, though. It’s definitely not “production” but if you want to take a look, there it is.

Eric pissed me off the other day by telling me to vote Kerry. I’ll try and formulate something full of vitriol for my response to that, but I don’t feel like thinking about politicians and their wankerdom right now.

Posted by FusionGyro at 11:12 AM | Comments (1) | TrackBack

September 20, 2004

Mom's First Post

Mom actually made her first post! I’m astonished… I didn’t think she’d really go through with it, to be honest, but she has, and she said it was easy, and I’m really proud of her!

I am the only person I know whose Mom is a blogger. (This is a good thing, whichever way you look at it).

Anyway, now I’ve made the CSS printing facility work, so if anyone tries to print this page, they’ll get what they want rather than what they would normally get. It trimmed 2 pages off the layout, too, and it looks better to boot. Check it out, if you find anything worth printing.

Posted by FusionGyro at 10:52 PM | Comments (0) | TrackBack

Being a Bother

The first message on Michael’s answering machine this morning was from Nina, apparently their website was down. Michael noticed that we couldn’t get our mail, either—and that the Matterform site was down. This was a connundrum.

Michael busted out the phone and called the ISP. We got a spooky “all circuits are in use right now, try again later” message. We couldn’t get to the parent ISP’s site either. This was bad.

I bothered all of my friends. First Bill, then Allan, then Mat. Bill said Virginia was hit hard last night, lost some data centers. Allan said Tech had a 3 hour power outage last night, he was putting out fires all over the place, but hadn’t heard anything about the east coast. Mat hadn’t heard shit. But Google didn’t have anything either. Some kind of massive network outage was going on, but we didn’t have any data whatsoever. The prof next door and one of Michael’s clients said Philidelphia was under water, some six inches fell yesterday within a 24 hour period. Another of Michael’s clients who lives in Maryland said it was a beautiful, sunny day. We weren’t sure if the ISP were mainly in Philidelphia or mainly in Maryland. Neither explanation had enough details.

After Michael got back from lunch, he started calling random people in Maryland. Anabelle Lee, David something or other, both got calls from Michael, but neither one could come to the phone. :) Then he tried the ISP. This time, we got through. Apparently, we were off the network due to some kind of manhole explosion.

Manhole explosion? What the hell is that?

So yeah, that’s why I bothered you guys today. Apparently, though I can’t seem to find the reference, some 50 blocks of buildings were cut off from power, phone, and network as a result.

I hope you find this story as amusing as I do. :)

Posted by FusionGyro at 09:46 PM | Comments (0) | TrackBack

My Mom Has a Blog!

It’s 11:30 on Sunday night, and I have just migrated my blog from the rather sucky though extremely extensible pyBloxsom system to the rather elegant and beautiful Movable Type system.

I also just made a blog for my Mom! Explain that one, I feel like I’m in the goddamned twilight zone.

I had just spent a few hours trying to make this layout, which is nice and certainly nicer than the old one. It might even work in IE. :) Anyway, I based it on this style called Modern Lines from Movable Style. I don’t like that one as much as MovableType Clean, but I thought it stood a better chance of being customized to what I like. I don’t feel right about just ripping off someone else’s layout, though I encourage other people to do it. And I spent a few hours screwing around with this beautiful image trying to make colors that were nice, which you can probably tell.

I thought I had made a layout with pretty nice colors and all. Then I recalled my other site, which had about the same color scheme, though it didn’t seem to “work” as well as this one (in my opinion) does.

Then Mom came online and I asked her to compare this blog to the old one that used to be here. She said she definitely liked the new one better. She asked what a blog was, and after explaining what it was, she said she wanted one. As I was getting her set up, I asked her to go to the aforementioned MovableStyle. She looked at all of the 3.x styles, came back and said she wanted my style, with the Gettysburg theme. In other words, she wanted my barely hacked layout with the default colors. If you want to check it out, go to her blog. I don’t think I caught all of the residual color issues but it’s a good first shot I think.

Later on, when I get bored and have nothing to write, I’ll go back through the archives and make some better categories, mostly for myself.

Update: Amusingly, the large image there is exposing a bug in this layout. I’m not quite sure how to fix it though. By the way, if you like the image, you should probably look at the author’s page about it.

Posted by FusionGyro at 12:00 PM | Comments (0) | TrackBack

September 19, 2004

Moving to Movable Type

It’s 2:20 AM on the 19th of September, 2004. Nobody can see it yet, but my blog is now set up and I’m going to go through the process of migrating away from pyBlosxom to the much better Movable Type system.

It looks like nothing really is as good, so it’s a shame it’s pay-ware now (though apparently it wasn’t in the past). But there’s something to be said for editing my stuff in a little box rather than having to FTP it in. I’ll probably still do it in Emacs first though. :-p Old habits…

Anyway, this note will probably be lost to antiquity, never viewed by anyone due to being stuck between the past and the future.

Posted by FusionGyro at 01:15 AM | Comments (0) | TrackBack

September 17, 2004

The Road to Lisp

The ALU CLiki site has an interesting entry called The Road to Lisp and I’ve been thinking, this might be an interesting story for me to tell, though not so much to members of the clan.

When I got to Tech, during the summer between the first and second years (I believe) I met Allan Poindexter. In discussing programming languages, he talked about Lisp, being a Lisp programmer as he was in a former life, and about the power of the Lisp machines. This all seemed just amazing to me. He told me to buy The Little Lisper, which I still own and I’m waiting to get back from a friend. Unfortunately, it didn’t really gel in my mind—I was still learning Python and quite content with it.

The next year, I took CS 324 “Principles of Programming Languages” with the famous and esteemed Hamdy Soliman. It was my favorite class, probably still is my favorite class, and definitely the aspect of the curriculum I’m most likely to keep up on. I slept a lot in that class, not because I was getting straight-A’s, but because I got most of the general concepts, and that was good enough for me. At the end of the class, we got into the “weird” languages which for the most part define their own categories: Lisp, Smalltalk and Prolog. I recall one day when I was dozing and Hamdy called on me to have me answer a rudimentary Lisp question, something along the lines of (cdr (car (cdr ‘(a (b c) ((d) (e f)))))). I said “What?” in a confused way, because he had woken me up, and then quickly said “Oh, C,” before he had a chance to chastise me for sleeping. Hamdy let me doze from then on. This was one of the few moments of glory for me at Tech at all. :)

This reminds me of another story, but I’ll make it brief. Hamdy had a pet peeve: he didn’t want to see or hear anyone asleep, it just pissed him off. However, if you were talking, it meant you were learning: you were stimulated from words of wisdom and glory flowing gently from his teeming storehouse of knowledge. Mazumdar, on the other hand, couldn’t stand to hear anyone talking. You could sleep, it was your own funeral when you couldn’t pass the tests or do the homework, but if you were talking, he’d hear your words and he’d start speaking them, and then he’d be confused and flustered, so he usually just got fluster right when someone started talking, and told them to please be quiet.

One day in Databases with Mazumdar, he was going over some really dry topic, I think built in functions in Oracle (how rote!). Baird was sitting to my left and Mat to my right. I tried to speak with Mat, but we kept making each other laugh, and thanks to the giggle loop, it was really insipid. The first time, Mazzy glared at us and stopped talking for a few seconds, then continued. The second time, Mazzy shouted “Matthew, are you alright? Is something wrong?” Mat sheepishly said, no, and then I decided for the advancement of human knowledge, I would try not to write anything to him anymore this class. (That, or he refused to take the pad). I turned to my left and tried to say something to Baird. Baird apparently had been sleeping, woke up with a start saying “What?!” nice and loud. Mazzy was definitely staring at us and had shut up, and then Baird looked down and started laughing really loud. “Is something wrong David?” “No, Dr. Mazumdar, I just seem to have drooled all over myself. Ha ha ha!” Mazzy glared at me, and I gave up and went to sleep.

So, my road to Lisp. Being someone with ears, I heard the words of Paul Graham. Allan and I continued to discuss the merits and flaws of Lisp. When I got my new Contoured keyboard, I decided I was going to fix three of the big problems in my life: using an inferior keyboard, using an inferior keyboard layout, and using an inferior editor. So now I am happily using Dvorak and Emacs to write this, on my laptop’s keyboard because I left the good one at work. At any rate, I guess I’ve been a Lisp apologist and promoter for some time, though I still teach people Python and direct people to Why’s Poignant Guide to Ruby as often as I can. When I told Alex I had selected Lisp for Soultrain, she said she wasn’t surprised. I said, what? She said, “You speak more highly of it than any other language.”

I had, in fact, been in the car with Allan, her and Faust just a few days earlier, going to the shitty Apple Festival in Hillsboro. On this trip she overheard Allan and me talking about Lisp, mostly me saying, gee, it seems like nobody has invented anything new or good that’s better than Lisp. From that perspective, what a terribly depressing world we live in—nobody can ever do better than X. But look at it the other way around: if you use X, nobody will ever be able to beat you! At least, in forty years and thousands of languages later, nobody has come up with anything more general and better.

I did a little algorithm for work today in Lisp, just to force myself to start thinking in Lisp. Here it is, in Lisp:

(defun adjustment (spamminess trust)
   ((eq spamminess 50) 50)
   ((< spamminess 50) (- 50 (* (- 100 spamminess) trust 1/200)))
   (t (+ 50 (* spamminess trust 1/200)))))

Here’s the same code, in REALbasic (the implementation language):

Function adjustment(spamminess as Integer, trust as Integer) as Integer
  Dim result as Integer

  If spamminess = 50 Then
    result = 50
  ElseIf spamminess < 50 Then
    50 - (((100 - spamminess) * trust) / 200)
    50 + ((spamminess * trust) / 200)
  End If

  Return result

VersionLines of CodeAdjusted Lines of Code

Ironically, the Lisp there is considered imminently readable, and has no extraneous whitespace. The math is basically the same in both versions, though it is prefix in Lisp, which enables the (* x y z) trick that demands an extra operator in RB. But the control code is much terser, yet completely unambiguous unlike, say, Perl. Any Lisper would be able to glance at that and go “Oh, it does some hairy math. It pushes things towards 50.” Ah well.

Another Shorty

I wrote the bulk of the above the day before yesterday. Yesterday I had to write a PHP script which would select the same 3 columns out of two tables, and format each one separately according to slightly different presentation rules. I came up with this for the Lisp version when I got home:

(defun show-tables (formatter table base-price)
   ((null table) t)
   (t (progn
	(funcall formatter (caar table) (cadar table) (caddar table) base-price)
	(show-tables formatter (cdr table) base-price)))))

This engine would then enable me to fetch out of the database into a list of 3-tuples, which I would then append the base price from an earlier query, and then each function can deal with its own output in its own unique way. It might look something like this:

(show-tables #'(lambda (amount qdiscount pdiscount base-price)
		 (format t "<tr><td>~D</td><td>$~,2F</td><td>$~,2F</td></tr>~%"
			 (* amount qdiscount pdiscount base-price 1/12)
			 (* amount qdiscount pdiscount base-price))))

Now the printing logic is separate from the database logic, as it should be. :) This also makes the code about 1/2 the size, and it would also increase in size less rapidly than the PHP for comparable effect.

Book Deal

I’ve decided I need to write a book about programming languages. Because it’s something I do, and I know a shit-ton more about them than really anyone I know. True, a boast, but at the same time, I know I’ve said, “What do you know about Language X” to everyone from Allan to Hamdy at one point or another and drawn a blank. So I’m thinking I should get busy writing this information down. Not in a CS 324 text kind of way, but more as in a survey kind of way.

This, of course, leads to the next Big Implementation Question of the moment: what should I use for typesetting the document?

So, that’s basically where I’m at. If it weren’t for the document processing community’s general distaste for Groff, I probably would be considering it more seriously, but I’m sure it’s a huge hassle.

Posted by FusionGyro at 06:03 AM | Comments (0) | TrackBack

September 12, 2004

Up and Running with Lisp

I’ve now installed not one, not two, but three Lisps on my Mac:

  1. CMU Common Lisp
  2. GNU CLisp
  3. Steel Bank Common Lisp

Of the three, so far I prefer Steel Bank the best; it is derived from CMU Common Lisp, but it works with SLIME which is unfortunately not something I can say for CMU Common Lisp. I’m sure I’m doing something wrong but I’m not sure what it is. Of the three Lisps in question, the breakdown seems to be:

SLIME, I must say, is a real piece of work. Getting it installed is fairly easy (though if I hadn’t thought to try it on these other Lisps I might have been fairly frustrated). It basically pops open an interpretter and manages your work between it and Emacs. The way it works is also quite interesting; it basically runs a copy of your Lisp, loads a little server package written in Lisp (named Swank), and then connects to that server to do the work. This means, of course, if you were some kind of a pervert you could run a single Swank instance on your machine and have all of your little Emaxen connect to just it. :) I’m thinking about it…

I should post a screen shot of my new “IDE” when I get a chance.

Anyway, duty calls… :)

Posted by FusionGyro at 06:39 AM | Comments (0) | TrackBack

September 11, 2004

History Lesson: When Did We Start Missing the Point?

Now that I’ve selected a truly ancient language, I’ve also selected a truly ancient database system to go with it: PROLOG. I think I’m due to give a short history lesson on the why’s involved.

Back in the early days of computer science, there were three models of computation: Turing’s (the Turing Machine), Von Neumann’s (the Von Neumann Architecture) and Church’s (the Lambda Calculus). Big proofs were made that demonstrated that these various models were in fact equivalent. Most of these proofs boiled down to, for example, implementing a limited Turing Machine in the Von Neumann archictecture or demonstrating that it could be done and vice-versa. Two of these three models are widely-referenced, and those are the Turing Machine and the Von Neumann Architecture. People liked the Von Neumann Architecture the best, because either it was a good picture of the hardware or because the hardware could be made to look like it without much difficulty (I’m not actually sure which is the case and I’m too lazy to look it up). People liked (and still like) the Turing Machine because it’s easy to explain and looks good on a white board, especially when you’re taking your Automata class and it’s sitting next to your DFA for matching regular languages or whatever.

Now, back in the early days, they actually made a handful of languages before Backus et. al. came and figured out what a language “is”—they actually implemented compilers of a sort without any of the real technology we think of today as being necessary for the job. As a result, FORTRAN is imminently difficult to parse, far more so than any other language we use today.

FORTRAN is interesting today primarily because of all the mistakes that were made in making it. Students every day take Principles of Programming Languages at their universities and learn all about FORTRAN, and while some of the notions of FORTRAN have survived, most of those notions were present before hand. I’m talking about arrays, functions, and algebraic notation.

At the time, users loved FORTRAN because it was so much more readable than assembly code, and because it was designed more-or-less to map onto the hardware IBM was making at the time, you didn’t lose much by using FORTRAN over assembly. In the years that followed, most of the compiler optimization literature would come to be written about optimizing FORTRAN, so that today it’s not uncommon for a good FORTRAN compiler to have as many as 17 passes, each one optimizing the code. This is also why FORTRAN is still the most-preferred language on supercomputers, though some of that is also because all of the historical code for supercomputers is written in FORTRAN, and nobody wants to have to rewrite any of their code for some kind of short-lived fad like structured programming.

LISP was invented in 1958, just 4 short years after FORTRAN. FORTRAN’s main idea was basically this: abstract the hardware to the procedure level, and stay close to the hardware for everything. Thus, it was born out of necessity—programmers needed some kind of abstraction in order to be productive. LISP, on the other hand, was created for several purposes: to be an implementation of Church’s Lambda Calculus (or something reasonably close to it), to be a mathematically-speaking high-level abstraction from the hardware, and for list processing. :) LISP is dynamic in truly amazing ways: take this “reader macro” from Successful Lisp :

(set-macro-character #\$ 
		     #'(lambda (stream char) 
		       (declare (ignore char)) 
		       (round (* 100 (read stream)))))

Now, whenever you type in, for example, “$14.99,” it will get translated to “1499” by the reader. If you use this convention throughout the code, you can avoid strange rounding errors with money. Quick: name another programming language that lets you modify the syntax on-the-fly.

LISP, as you can guess, ran abysmally slow. This was for many reasons, the most frequently mentioned is of course automatic memory management. In the mathematical land of free-floating functions, there is no such thing as memory, numbers do not occupy physical space, and so forth, so LISP couldn’t be bogged down in ridiculous implementation details like that. Working around those ridiculous implementation details back then meant that the computer spent mind-numbingly long periods of time figuring out which memory was in use and what wasn’t, and freeing what wasn’t. LISP also let you define anonymous functions and pass them around. It has a bevy of fantastically outer-spacey features, because it is meant to provide you with the simplest abstraction that encompasses all other abstractions, by allowing you to create abstraction-creation machines. What I mean by this is that LISP is intended to allow you to factor out anything you see in your code in more than one place, into a single place. Even if that “thing” is recursion, for example, using the commonly-cited-and-highly-dreaded applicative order Y-combinator, which I include below, in Scheme, mostly to fuck with people’s heads:

(define Y
   (lambda (X)
      ((lambda (proc)
          (X (lambda (arg)
            ((proc proc) arg))))
       (lambda (proc)
          (X (lambda (arg)
	    ((proc proc) arg)))))))

Is LISP the perfect language? I can hardly answer that question. It does seem to win based on some common criteria: it’s small, it’s extremely powerful, it’s fast (by today’s standards), etc. It also loses on some important points: string mangling is sort of shoddy compared to languages with built-in regular expression facilities, the syntax is “weird,” lack of infix arithmetic is especially strange. (+ (* 3 (* x x)) (- (* 2 x)) 5) doesn’t look much like 3 * x^^2 - 2*x + 5, which is much closer to what I really want to say, which probably won’t look right in the browser anyway, which is 3x2-2x+5.

But let’s look forward a little bit, past the presentation of LISP. About a decade goes by, with lots of *OL languages being invented (in other words, ugly languages designed with some perverted purpose to them). Then, suddenly in 1970 we see a very interesting language appear: PROLOG. In 1971, the curse of my existence is invented, C. I’ll discuss both of these in turn.

PROLOG, like LISP, was intended to bring humanity to a higher level of abstraction. Instead of saying, “do this,” we say “these are the qualities an answer would have” and PROLOG goes and finds your answer for you. It sparked a whole family of languages (as LISP did), called the declarative or logic-based family. Unlike LISP’s family, the functional languages, PROLOG to this day remains the most successful of its family, though some might caution that SQL comes pretty close to doing the same sorts of things. I would say the same thing about LISP, but for a connundrum I’ll address in a few minutes, which makes it very difficult to say what a functional language really is.

PROLOG is almost universally hated. I can think of many reasons for this: it has almost none of the traditional control structures, it has poor data types, backtracking is weird (though exception handling isn’t?), predicates don’t return values in the traditional sense, and often you want to do something and wind up doing something pretty unreadable to achieve it. For example, take the meat of this program I wrote or stole a while back which finds words which overlap:

overlap(NameL, NameR, Overlapped) :-
        NameL \== NameR,
        atom_chars(NameL, LNameL),
        atom_chars(NameR, LNameR),
        append(_, Seg, LNameL),
        append(Seg, RightSeg, LNameR),
        length(Seg, N), N > 1,
        append(LNameL, RightSeg, Appended),
        atom_chars(Overlapped, Appended).

This code works by describing the solution. It says basically this: I have a predicate overlap/3, which is true when the first argument overlaps with the second argument by more than one character, producing the third argument. In point of fact, it’s doubtful that this predicate would work if it were used in any way other than the normal way, which is find two names that overlap and the result of that overlap. The first three lines are pretty simple: give me a NameL and a NameR that aren’t the same (otherwise, you’ll get NameL = NameR = Overlapped). The following two lines deal with the fact that PROLOG’s types suck (it should probably be rewritten to work with strings instead). Then, we say something along the lines of: Suppose there is a right portion named Seg, which appended to some value we don’t give a damn about, produces LNameL. Further suppose that Seg can be appended to some RightSeg to produce LNameR. If Seg is longer than 1 character in length, append the left name (LNameL) to the right segment of the right word (RightSeg) giving Appended. Convert it back to an atom and that’s Overlapped, the third argument.

Comparable code, even in a nice language like Ruby, is going to be huge. The reason, of course, is because of all the helpful searching that PROLOG does for you, which would have to be coded in Ruby.

I hope this shows the power of PROLOG. Show me how to do that in SQL!

In the late 70’s and early 80’s, PROLOG compilation became possible, and what with all the AI research going around, PROLOG was also a fairly hot topic. Most of the information about PROLOG today is based on information that was produced in the 80’s, and most of the texts we use today in this field were written in the 80’s. Since then, it’s basically deteriorated into a community that makes the LISP community look vast. But there is PROLOG for every platform, so I guess I’m satisfied.

The bane of my existence, C, was conceived of in 1971, following PROLOG by just one year. But C, unlike LISP and PROLOG, became very successful. Linguistically speaking, C is pretty dull. According to the tree available at the Computer Programming Languages History , we see that C comes from BCPL, which comes from CPL, which comes from Algol 60, which comes from FORTRAN. Thus, C came from a long line of hardware-oriented programming languages. The innovation of C seems basically to be the concept of portability: C is intended to be fairly easy to implement, and abstract from a given platform, but still tightly coupled to the hardware. For example, you have to manage your own memory, you have to worry about the sizes of your integers, you have to worry about whether you’re about to make an invalid memory access, etc. Following along the lines of Worse is Better , C isn’t a massive improvement over BCPL or any other language, it’s just that it’s better enough to spread like wildfire. C++ also sucks, but is everywhere because it rides on the back of C. In a recent interview Bjarne Stroustrup himself admits basically that C++ in built on C because it’s C:

“I think that ‘Algol68 with Classes’ would have been a better language than ‘C with Classes.’ However, it would have been stillborn.”

Such an admission is probably a clue. Look to the current family of worthwhile scripting languages, Ruby , Python , and Io . Each one supports functional programming, in the sense that the Y combinator can be written in it and anonymous functions can be made. What does this mean? It means that programmers find these concepts interesting, and perhaps even useful. In Ruby, for example, it can be difficult to get anything done without a block, and the block is creating (essentially) a lexical closure, or an anonymous function. In Python, if you’re using generator, you’re basically making a closure and re-executing it each time—very cool, but not quite as awesome as what’s going on with Ruby:

100.times { |x| puts x }

And here in Python:

def getN(N):
    i = 0
    while i < N:
        yield i
        i += 1

for i in getN(100):
    print i

The for loop is basically a block, but you can’t make a block in Python and just pass it around to places. The generator/iterator facility is great, but not quite as good as the Ruby method, which lets you do things like this:

myDatabase.execute("SELECT name, age FROM members") do |name, age| 
    puts name + " is " + age + " today!"

Ruby is really getting there in terms of functionality. Can I create the reader macro $ in Ruby? Nope. Why are we so limited? Well, if you read Worse is Better up there, the assertion the author makes is that incremental improvement is favored by people for some reason. People don’t want blam, here’s LISP, learn it, love it, it does everything. People want Ruby—“_because it’s better than Python!_” People wanted Python—“_because it’s better than Perl!_” People wanted Perl—“_because it’s better than Sed & Awk!_” People wanted Sed & Awk over C, people wanted C over BCPL, people wanted BCPL over CPL, over Algol, over FORTRAN. Add to this the whole problem of magnetic personalities and programming language choice being (I hate to say it) almost a religious war, and things are even worse than this. We’ve been trying to escape from the wrong paradigm for so long, but all we can do is inch ever closer to where we want to be, adding syntax, built-in abstractions, new concepts, and so forth.

Am I bitter? I guess I am, to some extent, that I’ve invested all this time and energy into things which just aren’t as good, to such a point where I actually feel fear for what it’s going to be like to do Project SOULTRAIN in these other technologies. The accepted Right Answer these days would definitely be Python or Ruby + an SQL-based database. But then I would be facing the deliciously maddening inability to marry relational and object-oriented paradigms. I lose sleep over that problem almost every night. Well, going this route, I just don’t have to think about it. I hope it will be liberating, but I know that the liberation just lets me get back to the problem at hand, which I don’t know how to go about fixing. People don’t want to be liberated to work on real problems, they want to be liberated to worry about how to format this line of code, or how to get the database to give us the data we want in a timely manner. People aren’t interested in actually doing anything. We want to make it easier to do things, but we don’t really want to do things. Above all, I guess I feel bitter because I’m scared again, like I felt when I was trying to learn Python for the first time and I didn’t know anything else. Scared of LISP… damn, I hope Allan isn’t reading this.

I guess I’m proposing an extension to Worse is Better: Inefficient is Better. Mac owners trying to convince people to buy Apple, Linux users trying to convince Windows users to convert, widespread use of C++ and Java all point to a fundamental desire to not get things done. If we really wanted to get things done, we’d all be sitting in the console cranking out LISP. But we’re not. The Linux people are sitting in Fluxbox (whose “killer” features can be implemented from within FVWM2, Sawfish, and SCWM) staring at each other’s blogs, wondering how much better things would be if we had XML-RPC on our servers. Did we start missing the point at FORTRAN? If LISP came out today, would everyone start using it? I bet we probably would, and it would probably have a better regex library. Now, moving to LISP is an evolutionary step: get rid of the syntax. Back in the FORTRAN days, LISP was a revolution: functions as first-class citizens, garbage collection, recursion, machine-independence. These are all commonplace now, except for the syntax. Maybe Arc will make it happen, Paul Graham seems to have a lot of interesting wacky ideas.

Posted by FusionGyro at 06:24 AM | Comments (0) | TrackBack

September 09, 2004

Implementation Language Selected: Lisp

Today I decided to use LISP as the implemenation language for Project SOULTRAIN. I discovered that there was a PostgreSQL package for CMU Common LISP, and that partly directed the selection.

Frankly, I'm tired of using programming languages that are intentionally under-powered. Nobody has made anything as strong as LISP since. It gets right to the point and is more powerful and flexible than anything else. Granted, I can do many similar things in other languages, but I haven't done them in LISP yet, and I bet after I learn how to do it, I'll be amazed at how powerful it is yet again. I'm ready for a mind-expanding experience, and neither Ruby nor Io nor Python are going to give me one (though I love them all).

Part of this was prompted by Alex pointing out that I hold LISP in higher regard than any other programming language. Well, fuck it—I'm ready to take the plunge.

The Spider

At work, a huge (1-2" in diameter) spider wandered in. It looks like it's in the recluse family, but it's not a brown recluse. I held him for questioning for about four hours, and then when Michael made it in, he took the spider out to the field.

My Favorite Design Pattern

For a long time now, I've said that Visitor is my favorite design pattern. And it probably is, overall, the most cool, though I hope not to have to use it again for some time. At work today, I got to enact the adapter pattern, and it was really quite fun. We have a shitty credit card authentication system from Go E-Merchant.com that works in a rather perverse way. You create a form and submit it via POST to their CGI, along with a redirection URL. They get your data and fire a Location-style header redirection off to your URL, with the results encoded in the URL as GET parameters. Not very wrappable, in point of fact, rather nasty.

We are going to be upgrading from this butt-nasty system to a proper system with a poor name called Advanced Integration Method or AIM. This system is more sane: you pass them your info via a POST and they give you back comma-separated values with every piece of information you could dream of (the old method only gave you whether it worked or not, and what the message was if it didn't).

The adapter came into play because we need to drop something into the old purchase page that's going to work with the new system. Hence, adapter: it looks like the old butt-nasty, but it works using the new magic. Plus, it affirms that library driving the new system works. All this makes me quite happy.

Lllama's Heat

During the past 6 days, Lllama went into and came out of heat. We need to get her to the vet.


Apparently, tomorrow is the day of Zozobra, or “let's get drunk and set shit on fire” day. I will not be participating. Alex, Hillary, and Krishna probably will, though, at least in the fire. I think it's a waste of time, but more power to 'em; I can just skulk around here or program or something. Hopefully, Faust will come up and hang out with me and I'll initiate him into the dark theories of flow-oriented programming. Not sure if I can remember it well enough now, but if anyone is around who can help me get worked up and offended about the state of computer science these days, it's him. Maybe I'll even get to show him BeOS.

I spent a good chunk of time this past week looking back on BeOS and what I had hoped would come of it. Major mailed me a link to a store selling BeOS for $22.50 and I think I'm going to have to sink a little money into it one last time. The UI is starting to look a bit dated, but I miss everything being so fast, and the promise. I recall the semester I spent with an OpenBSD gateway and a BeOS-based computer; I think it was named Euryalus back then. Let's see if I can recall all the stupid names I've given my computer: Euryalus, Monolith, Murdock, Evolution. And the laptop is iDan. And the folk's computer is Polaris, and Nathan's computer is Godzilla or Parker. I still believe in the power of a pretentious name. I think I'm going to name the RAID server of Project SOULTRAIN Heorot, after the legendary hall of Beowulf. I need something pretentious that implies bigness, but isn't common enough to have been used by a bunch of teeny bitches. I liked Evolution a lot. It was short for Evolution is Inevitable or Obvious or something else, just to offend the creationists. It seems clear to me that God is clever enough to invent evolution, and kick back and let it do the work. I guess that's one reason why I'm interested in LISP so much, I expect it will provide the same kind of laziness to an ordinary human like me.


Posted by FusionGyro at 05:00 AM | Comments (0) | TrackBack