Posts

Showing posts from June, 2008

Erlang: Reia

I've been saying for a long time that I'd like to write a Pythonic version of Erlang. Someone beat me to it, which should come as no surprise since I'm always so busy. Hmm, looks like I have a new language to learn ;)

Hosting: RimuHosting

Image
I had to submit a trouble ticket to our new hosting provider, RimuHosting. Two minutes after I submitted the ticket, it was accepted by someone. Check out the stats in the picture. It's 10:30PM. Gees, that makes me happy ;)

Update: The problem was fixed 20 minutes later :)

OpenSolaris: Package Management and Joyent

Linux has really, really good package management. You'll realize this the second you try to use another operating system. Ubuntu (thanks to Debian) makes life so easy. It's easy to install all the software I want, and it's easy to make sure it stays updated. Even the kernel, etc. stay updated with practically no effort on my part.

In contrast, managing packages on OpenSolaris is painful. There are multiple package systems, and none of them seems to do everything I want. (In Linux, there are multiple distros, each with their own fully functioning package system.) Reading Joyent's wiki, it seems to be commonplace to fall back to patching and compiling the source by hand. Painful.

Theoretically, Nexenta might fix this situation one of these days, but in the meantime, I have a deadline ;)

Since POSIX is a commodity, the OSs work hard to differentiate themselves. OpenSolaris sets itself apart by being very scalable. Furthermore, DTrace and zfs are supposed to be craz…

Modern Java From a Python Perspective

I had a friend visit me today. He's a Java programmer, but he also knows enough Python, Ruby, JavaScript and Scheme to be dangerous. I asked him to show me around his code so I could see some modern Java. I learned Java back in the 1.0 days, but I stopped paying attention back around 1.4. Here are some of the things I saw.

Generics are as I expected.

Annotations are interesting. There was code like: @SomeClass
public void method() {
...
}"SomeClass" acts like a "tag" for "method". Elsewhere in the code, you can define wrapper methods (i.e. decorators) for all the methods that have been wrapped by "@SomeClass". Clearly, this was the inspiration for Python's function decorators. I had simply never seen them in Java before.

Dependency injection is interesting, as I expected it to be. In general, you accept parameters for everything you need, and you don't worry a lot about how things get instantiated. You avoid using…

Web: Best Anti-Web Rant

My buddy Mike left a comment on one of my previous posts, UNIX vs. the Web. I'm going to quote the whole thing:It's hopeless.

It's too easy to throw something together, which "sortta" works, but has no conceptual integrity.

I think another problem is that Open Sores software is, by definition, AT BEST, a Beta, more typically an Alpha. So, it should not be surprising if the quality is, ahh, not as high as it might be.

Like most stuff that gets buzz, Django "sortta" works. Works well enough that it has a user base.

I keep waiting for the Grand Unification of Pylons and Gears - maybe soon enough...

In the meantime, as I suffer with JavaScript, CSS, DHTML, the DOM, XML, and all that _shit_ - well, I'm ready to have heated discussions with every Netscape employee who had anything to do with this disaster.

I'm tempted to blame the Stanfords, CMUs, and MITs for this current mess, because they didn't step up and produce leadership - (CLEARLY, none of the…

Python: A Look Back at Aquarium's Features

I've been in the Python Web world for a long time. When I started, the two dominant competitors were WebWare and Zope. My hat is off to Jim Fulton and Ian Bicking for being around even longer than me! I use Pylons these days, mainly because I know what I'm doing, and I want a framework that doesn't get in my way. However, I've always said that Aquarium had a few tricks up its sleeves that I hadn't seen elsewhere. I finally have names to describe some of them. Looking back at the various releases of Aquarium is a bit entertaining, at least to me. The first release was 0.5 back in 2000.

Release 1.4 in 2004 had a Web server abstraction layer that I called wsadaptor. Back then, the two main APIs I had to contend with were mod_python and CGI. These days, that functionality exists in WSGI, and I'm thankful for that.

Naturally, Aquarium has always had a fair share of interesting libraries. For instance, it had a session container system where you could plug in…

Palm: Sprint Dial Up Networking on the Treo 700P

From here:Treo 700p users, take note! With the Sprint Treo 650, all you needed for Bluetooth DUN was the Vision service added to your normal voice plan. With the Treo 700p, things have changed. Sprint has added special software to the 700p that detects when you're using the Treo to go online with your laptop (as opposed to just surfing on the phone's tiny screen). Sprint calls this kind of access “Phone As Modem,” or PAM, and for some reason they assume that only business users with deep pockets will want it. Therefore, they require you to purchase a special Phone As Modem plan, currently priced at $40 per month in addition to whatever other plan you may already have. That's right: Even if you're paying an extra $25/month for the Power Vision Ultimate Pack, you must still pay another $40/month just to use Bluetooth DUN (no matter how light your usage is). Note that this is the very same feature that comes free (with Vision) on the Treo 650.

Luckily, there is a workaroun…

Python: any() + generator expression

Here's a nice use of any() with a generator expression: def is_url_interesting(self, url):
return any(regex.match(url) for regex in self.interesting_url_regexes) It's fast because any() shortcircuits the same way "or" does. It's way shorter than the comparable "for" loop. Last of all, I think it's very readable, at least if you're used to reading list comprehensions.