Archive for July, 2005

First Day in Rome

Friday, July 22nd, 2005

We started a walking tour from the Spanish Steps:

IMG_0012.JPG

It seems like the best method of transportation is a motorcycle, at least inside the city:

IMG_0017.JPG

Next stop was Trevi fountain:

IMG_0034.JPG

Okay, now to the coolest part of today. The Pantheon. It is truly amazing that people thousands of years ago were able to build structures like this. The dome from the inside is mind boggling huge:

IMG_0066.JPG

The apparatus on the left side is used to help clean the dome. The Pantheon just feels magnificent on the inside.

IMG_0052.JPG

We finished up walking thru the Jewish Ghetto, and then along the Tiber River:

IMG_0114.JPG

IMG_0116.JPG

More pictures are in the Gallery.

Right now, I am dead tired, and going to bed.

Traveling to Rome

Tuesday, July 12th, 2005

The flight from Spokane to Seattle on a Horizon DH-8.

IMG_0002.JPG

Flight was full, but not much to say, since it is only 45 minutes long. We did meet a Father & Son(10 years old) traveling to Africa for a Mission, who were also on the same flight as us to Amsterdam.

New SEATAC Terminal:

IMG_0004.JPG

The long flight today was Seattle to Amsterdam. Apparently, NWA recently switched from Boeing 747s to Airbus A330s on this route. The flight had 3 meals, and every seat had their own personal screen to watch movies. The only data point I had to compare this 9 hour flight with was flying 13 hours from Los Angeles to Melbourne. At least compared to the Quantus configuration of the 747, the Airbus on Northwest seemed to have more room. The plane was pretty packed, and we tried to get an Asle-Asle-Seat setup, but they couldn’t move our seats at all.

Inside the Airbus A330:

IMG_0009.JPG

We cleared customs in Amsterdam. They seemed much more relaxed than the Customs in Australia. In Australia, they would not let you take any food with you, even the stuff you got onboard the plane. They let me keep my bag of food, with Yogurt, Nuts, and Sandwiches.

Inside the Amsterdam Airport:

IMG_0011.JPG

The last leg for today was Amsterdam to Rome on Alitalia. The plane was only 60% full, but it was an experience just listening to everything in Italian. I can at least follow a conversation in German, even If I miss a few nouns, but I was pretty lost listening to Italian. We do have a small “Just Enough Italian” book, and hopefully, it should be just enough.

On the cab from the Rome Airport to the Hotel, I think I saw more Hatchback Style vehicles in 30 minutes than I have seen in all my life in America. I love my Golf. I wonder why more Americans don’t like Hatchbacks? Also, not one SUV in sight.

The streets are tiny, compared to most of America’s Wide Boulevards. The parking is insane. Cars are parked solid, so much that they even park on top of the middle island between lanes. There are a large number motorcycles, and they seem to have a major advantage for both traffic patterns and parking.

We arrived at our Hotel at about 1:15pm CEST. The room is nice, but small. Then again, the room is bigger than the Hotel Ibza in Sydney. My mother and sister are currently trying to take a nap, but they are renovating the room next to ours, and are constantly pounding with hammers and other tools. So, they aren’t getting much sleep yet. I slept some on the planes, and am determined to stay awake, to try to get my body switched over as quickly as possible to the local time zone.

The Hotel does have Wireless Internet, but they want €10.00 for 2 hours. No thank you. I imagine there must be either open APs or Internet Cafes around, I just need to find them. Note to self: Save a list of Internet Cafes off the Internet before leaving next time.

Tonight we are going on a walking tour at 6 pm. It starts at the Spanish Steps, which means we get to take the Metro from our Hotel. It is always a fun experience to take mass transit in foreign countries.

Traveling in Europe

Monday, July 11th, 2005

Uhm. So, i realized I hadn’t mentioned my summer travel plans on my journal at all. I start tomorrow morning at about 10 am:

July 11: Spokane -> Seattle -> Amsterdam -> Rome (plane)

July 16: Rome -> Stuttgart, Germany (plane)

July 18-22: ApacheCon EU 2005, Stuttgart Germany.

July 23: Stuttgart -> Salzburg (train)

July 26: Salzburg -> Berlin (train)

July 29: Berlin -> Netherlands (train)

August 1: Netherlands -> Berlin (train)

August 3: Berlin -> Amsterdam -> Boston -> Minneapolis -> Spokane

This will be my first trip to europe, and my mother and youngest sister are also coming along for the ride. In Berlin we will meet up with Daria, one of our former exchange student. In the Netherlands, we will meet with Ava, another one of our former exchange students. I think this will be an awesome trip. I promise to post high resolution digital pictures along the way, assuming all the Hotels have Internet Access like they claim.

Software Culture

Thursday, July 7th, 2005

Do you care about the software that you write?

Do you care if it compiles after every commit?

Are you embarrassed if someone else finds a bug in the code you wrote?

More important than Agile development techniques, is how developers feel about the code. I view the whole Agile movement, as an attempt to make people care about their code. To make it embarrassing, if you don’t have something to show every two weeks.

Look at the recent PHP exploits from the stupid XML-RPC library. Ian Bicking goes so far to call PHP a Ghetto. At the end of his post, he talks about the Broken Window Theory. That visible crap, incites and allows more crap to come. I won’t go so far to call PHP a Ghetto, or the entire language as crap, but it does have an extremely low barrier to entry, and in my experience, the expectations on PHP coders are extremely low. I have no doubt there is some wonderful PHP code out there, but the culture doesn’t innately support it.

I interviewed at Yahoo a few weeks ago, and got to meet Rasmus Lerdorf for the first time in person. Part of what he does is watch the incoming commits of PHP code at Yahoo, and catch people doing stupid and/or wrong things. This is actually a really good thing to do. It should create fear in the PHP coders that work there. The feeling that they should check their work before they commit, or the guy who invented the language might rant on them. It is about inducing the same thing Agile Development tries to do. To make you care about the code.

I believe the Broken Window Theory applies to all projects in every programing language. I consider Asterisk to have one of the biggest broken windows around. The entire chan_sip.c file is crap. But no one cares about adding more crap, and the excuse is that it already sucks, what harm is there in adding one more feature? When you allow crap code to fester, it only makes maintenance harder to deal with. They still do stupid things with their Signal Handlers too.

A friend works on a $BigProject from a $BigCompany. They regularly cannot compile their nightly builds, because someone committed code that doesn’t even work. They have lots of other problems, like not having one person responsible for the entire project, but what is most disturbing is the culture that is allowed to persist. The culture doesn’t mind if the code won’t build. They are already behind schedule, and I have little hope that they will meet their new shipping date. I think they need to hire someone to be a culture changer. Their entire job would be to enforce policies on a daily basis. Things like, you do not commit code that does not compile.

All of the successful projects I have been involved with have had a culture that does not tolerate stupidity. Don’t use the existing code as an excuse. It might be crap, but that is never a good reason to add more of the same.

I try to care. I hate to commit broken code. I feel bad if I break the build. Do you?

Moved URLs and Software

Tuesday, July 5th, 2005

Welcome to Paul.Querna.Org.
I also migrated my blog software to Typo. I setup lots of redirect magic to try to keep the old URLs on corelands.com working, but if I missed anything, please let me know.

Response to Debunking lighttpd.

Tuesday, July 5th, 2005

The Debunking lighttpd post has gotten a few harsh comments. Here are some of my replies.

Quote from Anonymous:
You neglect two things in your discussion: What happens when resources become constrained. For instance what if 10000 slow clients connect to both servers. Which is easier to configure for the task at hand. There are a lot of advantages to using single threaded or tread / core servers. In my opinion this model maps much more closely to the underlying hardware, and many of the problems of multi-threaded systems just don’t exist. The market is certainly big enough for multiple players

First point, I don’t have a setup to properly test 10,000 slow clients. If you want to model realistic client connections, then a completely different benchmarking methodology is needed. ApacheBench is very good at slinging requests in relatively high volume from a single client, but realistic is something that it does not try to be at all. Someone could write a PHD thesis on realistic modeling of HTTP Clients and Benchmarking. I don’t have the time, the hardware, or willingness to do that right now.

Second point, easier to configure is highly variable based on the administrator experiences. For me, httpd is easier to configure. YMMV.

Quote from Anonymous:
you make the claim that apache bench sucks, but provide no reasons as to why. You also provide little information about the test itself, results (other than a nice graph), or much information to duplicate the test. I would also be interested in system load at various times during the test too. I would like to say..wow..that is one of the simplest and cleanest apache conf files I have ever seen! :D

ApacheBench Sucks. Why? It can’t scale. It uses some blocking IO, but tries to use a single/threaded event paradigm. It has no concept of timing. Its understanding of HTTP/1.1 is limited to KeepAlives. Justin calls ApacheBench ‘dreadful’. Flood is a better tool.

To duplicate this test, use the supplied configuration files for both httpd and lighttpd. Run ApacheBench like so:
ab -n 10000 -c X -H 'Accept-Encoding: gzip,deflate' -k http://1.2.3.4/

I didn’t record CPU load during the test. If you want to spend your time doing it, feel free, I would be happy to point to someone elses more complete benchmarks.

Quote from Anonymous :
Max of 75 concurrency? Since gzip is enabled, you’re testing ~13k files with low concurrency, of course Apache does fine. Your test is flawed and your conclusion is misleading.

I only did 75, since both servers were easily maxing out my 100mbit LAN. If you want realistic testing, you need a very different methodology. To go to higher, I need better hardware, both for the client machine(s) and for my network. Donations Welcome.

Is my test flawed? On so many levels, yes. My argument is that my benchmark is no more flawed than the benchmarks that lighttpd publishes on their website. I actually believe the dataset that I picked was fairly realistic. (enabling gzip+HTML). I don’t think my conclusion is misleading. Most people are looking for a magical performance pill. I wager most people can get better performance by improving their PHP/scripting code first.

Blog Software & HTTP Caching

Saturday, July 2nd, 2005

I took a look at 7 different weblog engines this afternoon:

The only criteria I used to compare them is the HTTP Headers they sent for the Front Page and RSS Feed. My theory is that if a blog sends the correct HTTP headers, the coders behind it might have a clue, and it might therefore be better overall software. Kudos to OpenSourceCMS.com for having Demo sites running for most of the projects.

My rating scale is wrong, unacceptable, acceptable and good. From worst to best:

Blog::CMS
Rating: WRONG
Lets start with the front page:

Quote from Front Page HTTP Headers:
Generator: BLOG:CMS v3.6.4
Set-Cookie: lastVisit=deleted; expires=Fri, 02-Jul-04 03:37:19 GMT; path=/

Generator? huh? Thats not a valid HTTP Header. Yes, you can legally add your own headers, but if you are just making them up, you are supposed to prefix it with ‘X-’, eg ‘X-Generator’.

Next, they did not send any Cache-Control or Vary Headers. But, they vary the content based on the content of cookies. This is wrong, and will cause proxies and clients to incorrectly cache pages.

The RSS Feed is a little better:

Quote from RSS HTTP Headers:
Pragma: no-cache
Generator: BLOG:CMS v3.6.4
Set-Cookie: lastVisit=deleted; expires=Fri, 02-Jul-04 03:38:21 GMT; path=/
Etag: “503728b580b9894b6aa72317f138cee5″

The inclusion of an ETag is helpful, but they still send Generator and a Set-Cookie. The use of the deprecated Pragma header is sad.

b2evolution
Rating: WRONG
b2evolution doesn’t send any headers related to HTTP Caching for the Front Page or RSS Feed. No ETags, no Last-Modified, No Cookies, nothig, nada. Come on people, this is 2005, not 1997.

bBlog
Rating: Unacceptable
bBlog does send extra headers, but it sends them attempting to kill all caching on the Front Page

Quote from Front Page HTTP Headers:
Set-Cookie: PHPSESSID=f898e7316af0cd0f4b5e4bcfdc484523; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

Sending an Expires in the extreme past, and forcing all caches to not-cache is lame. No, I am serious, really really really lame. HTTP Caching is good, don’t try to kill it in all cases, when your frontpage can easily be cached.

Looking at the RSS Feed, it is nearly the same story:

Quote from RSS HTTP Headers:
Set-Cookie: PHPSESSID=2978e587e092faa2cd705d7266f3636d; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Last-Modified: Thu, 02 Jun 2005 23:46:28 GMT
Etag: ae0a20e9f8140a969c320eb582b62e4b

They do correctly add a Last-Modified and Etag, but they still are trying to bust the cache.

Serendipity
Rating: Unacceptable
Similiar to bBlog, Serendipity’s front page does cache busting:

Quote from Front Page HTTP Headers:
Set-Cookie: PHPSESSID=d6c0446768d6cf4a0aa7c88d6eaba242; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

Ugh. I guess no one really wants the help of HTTP Caching?

At leas the RSS Feed is slightly better:

Quote from RSS HTTP Headers:
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Last-Modified: Fri, 01 Jul 2005 18:31:42 GMT
ETag: “Fri, 01 Jul 2005 18:31:42 GMT”

Okay, Last-Modified, and an ETag, but still sending the Cache Busting stuff.

Typo
Rating: Almost Acceptable
Typo is the only Ruby on Rails application I tried, but the front page isn’t very good:

Quote from Front Page HTTP Headers:
Set-Cookie: _session_id=afd0a26b1f95c042e65e34bf2a598a54; path=/
Cache-Control: no-cache

Cache Busting. Who has been talking to these Application Developers?

However, the RSS Feed is acceptable:

Quote from RSS HTTP Headers:
Last-Modified: Sat, 02 Jul 2005 03:20:05 GMT
ETag: “1610900121″

Last-Modified and an ETag. No cookies. Pretty good.

WordPress
Rating: Acceptable
Our first Acceptable entry does not send any related headers on the Front Page, but the RSS Feed is good:

Quote from RSS HTTP Headers:
Last-Modified: Sat, 02 Jul 2005 03:26:14 GMT
ETag: “29f855045e1d4a849c76c24bd8d2406d”

No Cache Busting, and setup to work with Conditional Gets.

TextPattern
Rating: Acceptable
Like WordPress, TextPattern didn’t send any headers for the Front Page, but the RSS Feed does a perfect job:

Quote from RSS HTTP Headers:
Last-Modified: Mon, 02 May 2005 04:13:50 GMT
Expires: Sat, 02 Jul 2005 04:42:45 GMT
ETag: “28AD8AFA-904DDC92″

Woohoo. Last-Modified, Expires, and an ETag. Could use a Cache-Control for more specific policies, and I only downgraded it because of nothing sent on the Front Page.

Conclusion
At least a few proejcts get it right for the RSS Feed, but none of them are correct for the Front Page. I was really disappointed with these results. I had faith that more people understood HTTP Caching. Is there better software out there? Have other web developers given up on HTTP Caching?

Update: Formating Fixes

Update 2: Typo Fixes.

Blog Software

Friday, July 1st, 2005

I am looking for new weblog software. I would love recommendations.

My current list of what I want:

  • Open Source. (non-GPL prefered, like BSD or ASL)
  • Easy & Extendable Modules/Plugins.
  • Something that can run via FastCGI. (I do have PHP via FastCGI too)
  • Uses XML/XSLT. (Not a hard one, but I like to play with adapting projects to using my mod_transform)
  • Propper use of HTTP. This means both HTTP Caching Headers, and 304 Not Modified Support.
  • Under Active Development.

I have doen some googling, but when I search for blog software, I mostly get people’s blogs about software.
I have considered writing my own, but that seems like a time sink, and I really don’t want to spend time trying to develop community around another project.

I doubt any existing project meets all of my wish list points, and I am willing to send patches to get a project there, but I am having a hard time finding alternatives, besides the big ones like WordPress.