Leo Simons wrote a great summary of the last year of Gump development on the gump mailing list, which I will re-post here for those not subscribed:
08 Jun 2004: Java Gump is officially retired
17 Jun 2004: Adam announces “CleanUp” branch which becomes a big rewrite
25 Jun 2004: Open source Wing IDE licenses help productivity
25 Jun 2004 (busy day): Gump starts using JDK 1.5
08 Jul 2004: We almost move to a java implementation…
12 Jul 2004: …instead efforts start to make the code more readable
22 Jul 2004: Lots of people start throwing out “wild ideas”
24 Jul 2004: Stefano starts digging into gump
10 Aug 2004: Gump starts reaching out to the “free java” community
30 Aug 2004: First signs of gump falling over under development pressure
01 Sep 2004: Gump (sorta) gets NAnt support
02 Oct 2004: Stefano starts dynagump…
03 Oct 2004: …starts talking about software architecture…
07 Oct 2004: …tries to get the tree into a stable state…
19 Oct 2004: …doing “manual nags” aka human-assisted-gump
31 Oct 2004: Kaffe’s Dalibor Topic gets involved, we start using kaffe
26 Nov 2004: gump starts building APR and soon after HTTPD
30 Nov 2004: …Stefano gets sick of the nagging, we almost turn it off
06 Dec 2004: Gump 3.0 is proposed after being discussed at ApacheCon
28 Dec 2004: Leo starts what will eventually become the “Gump3″ branch
26 Feb 2005: Leo presents gump to the “free java” community at Fosdem
06 Apr 2005: Adam gets to work on “Gump3″ branch
I figured I’d keep the amount of stuff from 2005 that I link to a little
limited as its hard to tell right now what will be the important bits,
actually its like that for most of the past year, esp. as I’ve been more
actively involved with gump recently. That’s probably why the list is also
longer than the previous one relative to the period covered, but its also
longer because we’ve been generating more traffic and more wild ideas
recently. Hey, there might be some connection between the amount of heresy
and the scope of my involvement, who would’ve thought that
FYI, there’s some mailing list statistics at
http://people.apache.org/~coar/mlists.html#gump.apache.org
And community statistics at
http://nagoya.apache.org/~stefano/
(bound to be moved somewhere else sometime soon)
Considering the limited number of people on this list, we produce a whole
lot of e-mail
Oh, and a disclaimer might be in order as well. I didn’t apply any kind of
procedure in generating these lists. Basically I strolled through the
archive and clicked on stuff I found interesting (based on subject line or
the size of the thread or how much output the solaris installer was
generating at some point in time) and linked to it if I thought others might
find it interesting. That means there’s a whole bunch of very important
stuff that’s happened not in those lists at all (for example because I found
it kinda boring or very much without controversy).
Don’t take it personally
Oh and finally let’s not forget:
18 Jul 2005: gump developers churn out massive amounts of brilliant code
during ApacheCon Europe hackathon
Popularity: 18%
Charles Miller writes in Fun with JBoss Performance:
JBoss ships by default with logging turned up to DEBUG level. Either by design, or just as a side-effect of JBoss’s clever classloading arrangement, this configuration infects any application deployed in the server.
…
Across thousands of JBoss deployments, trillions of CPU cycles are being wasted generating strings that nobody cares about, and that might never see the light of day.
I suspect this is how JBoss Inc. consultants make their money. They can just go in, add one line to log4j.xml, demonstrate they’ve tuned the server to achieve ten times the throughput, and spend the rest of the day drinking coffee and looking smug.
I know that’s how I used to make the money in the JBoss consulting biz
(Hint: I’ve never made money from JBoss consulting)
Shipping with the server defaulting to DEBUG is a sad oversight on the part of developers who have little understanding from a sysadmin perspective. Perhaps ship with 2 lines in the README on how to turn up the logging IF you have a problem. The big issue here is that most JBoss installs are used as-is, with little to no configuration. The ones that do get configuration changes, it is usually to get an application to work, not to optimize it.
If anyone needs some java application running on JBoss, or any other container for that matter, to run much faster than it currently, I am available for hire. I usually average a 50% increase in performance off of just the low-hanging fruit, and have gone as far as 20x performance improvement in non-trivial webapps, when allowed to go under the covers, so to speak.
I remember getting a mobile content delivery system from 20 requests per second up to 1680 requests per second on Weblogic back in 2000. Our application was actually faster than the default ‘Hello World’ servlet that Weblogic shipped, and we sent 10 times more content per request. Our company ended up being invited to speak at the BEA users conference, because even they could not believe that you could make something that fast.
On another occasion, in another job, I was able to move a very complex web application architecture from .7 requests per second to over 10, in about 3 days of work. With another few weeks, we had it up to 40 requests/second. That was an easy job, because everything was done in XML (from the native XML database all the way to the XSLT rendering). We still used XSLT in the end, although for a job better suited for the task.
Popularity: 19%
This is a mental bookmark post. To edit the path for man, you need to edit /etc/man.config (Linux), /etc/manpath.config (FreeBSD or OS X).
Popularity: 21%
Overheard on the mod_python mailing list, and I thought it would help if it was documented somewhere a little more friendly. On April 23, Graham Dumpleton posted to the mailing list with a solution (source):
There has been a few times on the list where questions have been asked about
how to pass information through a “req.internal_redirect()” call. The problem
is that any data which is stashed in the “req” object isn’t available to the
target of the internal redirect because Apache/mod_python constructs a new
“req” object for the subsequent handler invocation.
Turns out there is actually a way of passing at least some information. This
is done by adding new key/values to the “req.subprocess_env” table. This table
is held within Apache data structures associated with the request and contents
of it are propagated through to the target of the internal redirect. The only
trick is that the key names get modified when the redirect occurs. You also
can only store string values….
I had originally thought that you just just access the req.prev object to get any variables that you would need, and Nicholas Lehuen beat me to the punch on suggesting it. Apparently though, that does not work for any python related variable additions to the request object, ie req.someVarNotInApache = session. Grisha piped in and said that req.notes might be a more appropriate place. Graham couldn’t get it to work until he tried to use req.prev.notes.
I wonder what it would take to make python bound variables survive on the req.prev object?
Popularity: 16%
Introduction
When I bought my tractor last summer, I didn’t want to say anything until I had actually used it. Now that I have put 80 hours on my new John Deere 4310, I wanted to just let the world know how it has performed. While I do have a bias toward loving it, and have dreamed of owning one all of my life, I will try to be fair and balanced in my review.
What I needed to do
After moving away from the city last year, Amanda and I bought a nice little place in Rough and Ready, CA, just outside Grass Valley. The view is beautiful, on a hilltop overlooking the town of Penn Valley. The lot is 5.3 acres (the smallest in the 8 parcel subdivision), with half of the land fairly level and half rolling off the side of the hill. The house is situated on the level part, not quite backing the hillside, so we could put in a nice little backyard. Since we are getting married, we had decided to spend the money landscaping the backyard and have the wedding at the house. That is coming up on May 21st, I am happy to share. The upside was that nothing was done as far as landscaping, the down side was that nothing was down as far as landscaping. Since all of our soil is hard clay, we were going to be importing quite a bit of topsoil/sand/etc to make our land arable. We also wanted to do a bit of terra forming, and thus the excuse to get the tractor was born.
What I bought
Tractor- 4310 4WD with hydrostatic drive and top-and-tilt option for full automatic 3 point hitch adjustment
Front-end Loader (420)
Box Scraper (Woods 4×2)
Rock Rake
Tiller
Backhoe (47)
The good
The tractor is set up very well ergonomically, and the push button four wheel drive is a godsend. You don’t want to be in 4WD when making a tight turn (or else the turn won’t be so tight and you will be buying new tires more often than necessary), but you do need it when pulling a full load with the scraper, for instance.
With the hydrostatic drive, you hardly ever use the brakes, since letting off of the directional pedal (separate pedals for forward and reverse) will slow the tractor down immediately. No coasting to a stop anymore. This is very useful to increase cycle times, such as moving a lot of material with the front-end loader.
The rest of the controls are in easy reach, and the seat and steering wheel are fully adjustable. It even has cruise control, for those times when you want a constant speed (just tilling for me).
I chose the 32hp size to make sure that I had enough power and weight to do the jobs that I needed to have done. I think the salesman is correct: “You will never regret getting a bigger tractror”. If I had gone with the residential size tractors, I would have ended up with a glorified lawn mower on my property, because it takes the full weight of the tractor (3000 pounds) to move any of the soil from its position on this property.
The backhoe was an absolute must have for the amount of landscaping that we had to do. With it, digging holes for 5 gallon, 15 gallon, and 24 inch box trees was an easy task, even with the 50% clay/50% granite mix of the soil. We made sure to dig all of the holes double oversized, so that we could put good soil back into the holes, to help the tree out health-wise. Since we planted 3 dozen trees, and the tractor still only has 80 hours on it, the investment was well worth it. Keep in mind that a backhoe attachment for any tractor will be the most expensive thing you buy. That is the reason most people don’t get it. But it is worth every penny. The other day, my 82 year old neighbor asked if I could come down and remove two dead trees. “No problem” I said, and headed down the road. He met me out in his little orchard, and in 5-6 minutes, I had removed both trees, and filled the holes back in. One tree came out with the very first bucket! Needless to say, my neighbor now loves me to death, and it only cost me 15 minutes to keep up the neighborly relations. I tend to refuse payment for any tractor work that I do for neighbors, with two exceptions: repayment in things like refueling and washing it, and barter for something else. Cash doesn’t need to trade hands because I enjoy playing (working) on it so much.
The bad, the ugly
With the hydrostatic drive and the 3 speed transmission, the gearing is just not low enough for the hillside that I live on. I think it is set up perfectly for flat land, but the hills are just too much. Consequently, if there is nothing I can do to lower the gear ratios, I would buy a standard transmission if I were to do it again.
The parking brake light is hooked to a switch that is activated by the brake pedals. This light goes on and off at its own whim, and seems to not work, even though I have attempted to fix it several times. It only bothers me for two reasons, one that the tractor is new and shouldn’t have any problems like this, and two, anyone else who uses the tractor thinks that the brake is on, and spends minutes trying to figure out how to turn it off.
The scaper model that I bought is one size too big for the tractor, so the 3 point hitch is always trying to re-raise it when the tractor is just sitting with the scraper lifted in the air. Although this is non-optimal, the extra weight of the larger model is necessary for the tough clay soil here, so I would leave this as-is.
The tractor seems a bit top-heavy on the hillside, moreso than I would like. I don’t know what I could do to compensate for this (I believe that the tires are already loaded with water). I guess I just have to learn to live with it. A wider stance would have been great, but I don’t think you will find an option for that in this portion of the market.
Switching implements between the 3 point hitch and the backhoe is a genuine pain-in-the-ass. I have started to look around for things that need finishing with the current implement before I consider switching. I really wish this could be made easier, but I think the fact that the backhoe really needs to attach to the tractor frame for strength is going to keep this particular problem from being completely solved.
I noted that the size was a good thing, well it is also a bad thing. In certain instances, I really wish I had a larger tractor (lifting that 1500 pound boulder, digging up that 1500 pound boudler, etc). This is really more of an inconvenience than anything else, but just remember to size the tractor for the largest job that you need to do, not just the average job.
Overall
Overall, I am happy with my purchase and use of the tractor. I tend to use it almost every weekend for one thing or another around the house. It is too big to mow the lawn, but I can live with that
I would also say that you will not be disappointed with the purchase of a John Deere 4310, just keep in mind what I said about transmission selection. That is the one thing that I really would change if I could. If you have any questions about the tractor, please don’t hesitate to post a comment here on the site, and I will answer as soon as possible.

Note to self, don’t post 2 pictures side-by-side in HTML. It looks a bit funky.
Popularity: 90%
FYI, just caught myself on this, so I write this for all those Java -> Python types out there. In Python 2.4, there is a new class in threading called local, which acts as thread local storage. This was one of the features I was patiently waiting for Python to acquire, only to find out it didn’t work! At least it didn’t work for me, that is. I expected threading.local() to return a singleton thread local storage object attached to the current thread. It does not. It does not return a singleton. Example:
>>> import threading
>>> x=threading.local()
>>> x.test=42
>>> x.test
42
>>> x.__dict__
{’test’: 42}
>>> y = threading.local()
>>> y.__dict__
{}
>>> y.test
Traceback (most recent call last):
File “<stdin>”, line 1, in ?
AttributeError: ‘thread._local’ object has no attribute ‘test’
>>>
I fully expected y to equal x, and it clearly does not. I suppose that this will bite many Python programmers converting from Java, so I thought I would share it with everyone.
Popularity: 29%
I spent Saturday morning piling up dead manzanita from the yard, forming 3 piles to burn into oblivion (didn’t want to spend the $200 to rent the chipper again). I started the first pile of with a little diesel, and it looked like it was starting fine, and then in about 30 seconds the entire pile is consumed in a huge bright flame. This stuff burns hot! Within about 15 minutes the pile was small enough that it looked like it needed to be pushed together to finish burning, but I couldn’t get close enough to actually touch anything it was so hot.
So, out comes the tractor. I had it ready on the side with a bucket full of dirt, and also 3 lengths of garden hose at the ready for prevention of destroying the neighborhood. I jumped on the tractor, and using the scraper, I was able to back into the pile and push it together, but it was still to hot to stick around for more than a few seconds.
After about 30 minutes, the pile was small enough that I wasn’t worried about eyeballing it all the time, so I set off pile number 2. This was the biggest pile (about 8 feet around and high), and within 30 seconds, I had 30 foot flames shooting out. I had to stand back about 25 yards to get away from the furnace blast the pile was putting out, and I grabbed the Treo 650 out of my pocket, thinking I could take a couple of pictures to pass the time. The only picture I am posting is one where I make it look like the tractor is on fire. I thought it looked kinda cool, but I do apologize for the grainy pic (the Treo’s camera is not that great).
Here it is: 
I also took a 30 second video with the camcorder, but it was not interesting, unless you like fire as much as I do. Destruction is totally cool, and calming as well (at least for me).
Popularity: 37%
I have now moved into my new office, even if it is still not finished yet. Since I do work on 3 different operating systems, I have 2 machines on my desk. The first is my portable, a 17″ Apple Powerbook. The second is a Windows XP Dell Dimension 8400 desktop machine with a 20″ LCD screen. All of my Linux machines are remotely accessed (as they should be for a commandline junkie like me). Since I built the desk in the office to be 2 L shapes back to back, I don’t have enough space to operate both machines comfortably. I installed a keyboard tray to hide one of the keyboards, but still have to swivel significantly to get to the laptop, where email resides. This was causing a lot of neck and shoulder pain, which is not good for a programmer.
Then I remember talking to Alex about Synergy. Synergy is a software program that runs on multiple machines and allows the machines to share one keyboard and mouse. Excellent, I thought to myself. I am in just the position for this to work. Does it work on Windows and Mac OS X? It sure does. 2 downloads later, and one simple configuration, and this post is now being written on my Dell keyboard, piped over TCP/IP to my Mac, where the letters are dumped into the screen in Camino. This software makes my week! Now with the laptop sitting on my iCurve, the 2 LCDs are sitting side-by-side at eye level, and the keyboard/mouse are down at a resonable height. I wish I would have done this sooner.
So, I’m working along, thinking I am the smartest human on this planet, and then the need to copy/paste between the machines hit again. I usually use to IM logins to do this, but it just so happens that Synergy supports a common clipboard between the machines. BRILLIANT! These guys are great! No more need to keep 2 IM logins active just for copy/paste. And I can use the machine that is natural for the work presented.
Donation via sourceforge on the way. Keep up the good work guys. I know drag and drop support will be a huge pain, but it will truly put you over the top! Simple drag and drop for files only is good enough for this guy.
Alex, you really have to try this bad boy. It is better than it sounds.
The real power in Synergy will be the integration (copy/paste, drag/drop, etc), not just the keyboard sharing.
Random thoughts on integration through Synergy: cross-platform, shared quicksilver anyone? Common notification system?
Popularity: 26%
Dell, could you please improve your customer support? I had to contact customer support today to get one of my 2 hard drives replaced in my RAID array (scares me that I only have one, how did I ever live without RAID?). I went to support.dell.com and logged in. Was I shown a list of the systems that I have purchased? NO! I had to enter the service tag for the umpteenth time (luckily browser auto-complete helps in this regard). I choose the option to get support (not obvious on the web page, it is more about downloads of drivers and selling warranties, etc), and choose the ‘Dell reccomended’ chat support option. Luckily I knew this was coming, and choose IE to do this, as it forced me to install an ActiveX control just to chat. This is a ripe minefield for an Ajax app, I can tell you now. I am now waiting for my chat request to be accepted, after filling out my name, service tage number (again!), and the description of my problem. In a few seconds, my chat request is accepted by my agent, Harsha. Harsha then starts the standard scripted question: “Name and telephone number, please?”. Fine, I give it. Then I am told that the telephone does not match my records. What? I thought I was giving the phone number so that I could be called back if our chat was disconnected. No, I am being verified. We go back and forth about why they need to verify, I try my cell phone, home phone, etc to no avail. I am then asked to verify my address which I do. We are 5+ minutes into the chat, with no chatting about the problem yet, because of some idiotic script some monkey dreamed up for the tech support people. I then get the standard “repeat the problem back to the customer, and make them verify that” (lots of verification in the CYA world of customer support). Harsha then sets off to create a dispatch, and come back in a couple of minutes, asking me if I need a technician or if I could do it myself. I say I can do it myself, figuring that I don’t need to help them waste money so that they can update their customer service experience. I am then given a dispatch number, and a templated thank you, and a hangup. NICE! I ask for a tracking number, and I am told to look up the dispatch number. WHERE??? This keeps getting better (or worse, as the case may be).
I will report back here when I actually receive the drive.
Frank
Update (4/14/2005 17:00): I received the hard drive this morning (it was actually here yesterday, but I wasn’t here to sign for it, so technically they made their next business day promise. I waited until I was done with the work I had to do to replace the drive. I pulled the drive out of the box, noted that it was a 160GB drive (what I needed), and shut down my computer to replace the failed drive. Opening the case on the Dimension 8400 was simple, and pulling out the old drive and replacing with the new was about 3 minutes and 4 screws. Cases sure have come a long way. When replacing the drives, I noticed that I was trading Seagate drive for the new Western Digital Drive. I booted up the computer, opened the Intel Storage Utility, and attempted to rebuild the RAID array using the new drive. I am abruptly told this: “The selected disk is not large enough to be used for the rebuild action. Insert a larger disk.” As if it was that easy! Off to Dell support again, going with the chat option for the second time. This time it takes 1-3 minutes for each response from the agent. As a side note, it is funny that the agents ‘names’ are actually their Indian first name, and an American last name. Why not both of one or the other?
I digress. While I am waiting, I look up the specs of both drives to see what is going on, and I notice that I am being given a 2MB buffer cache drive to replace the 8MB buffer cache drive I have. Is this a valid replacement? Methinks not. I ask the agent for a phone number to talk to an agent, so that the conversation can go a little faster than 2 sentences per minute.
I call the number given, only to go 10 levels deep in the IVR, and then dropped after entering my ‘express service code’. Not very express!
Luckily (or not so luckily, as the case may be), my wife also had a call with Dell today. Perhaps we should a) stop buying Dells, or b) allot Friday as ‘Dell Support Day’. She gave me the number she called, and while I got the same IVR menu, I was actually dropped into a queue, rather than off the face of the planet. I ended up with an agent after about 4 minutes on hold, and he helped solve my issue. The real issue is that the hard drives listed as originally shipped in the machine were Western Digitals, not Seagates. I told him this was a refurb unit, and I got that ‘Ohh…’ response, like he now knows what’s wrong but is not allowed to say. He then puts me on hold while he starts the exchange paperwork. The new hard drive is on its way, and I have been given the secret callback number and extension should I have problems.
Update: Frank sent me a 250GB drive, and the RAID array is now all happy. I would give the overall experience a C, but only because of my grade A interaction with Frank.
Popularity: 26%
- ColorCombos.com - Simple ‘beta testing’ of web color combos in your browser. I like ColorCombo125 myself.
- MicroFormats - Simple, human friendly data extensions
- Resizable Textareas - Simple and cool, if you have the need to
- Artychoke - WordPress theme to edit content inline, AJAX style
- Driving Win32 GUIs with Python, Part 1
- Ginormous Unicode Chart - 6 x 12 feet (that’s huge!)
- Nifty Corners: rounded corners without images
- Link Specificty Who knew you had to order your CSS for a?
- Xapian Search Engine GPL search engine that ’scales well’
- Rootkit Hunter self-explanatory
- GM OnStar Hacking Great GPS data feed if you aren’t paying for the service now
- Understanding how Outlook, CDO, MAPI, and Providers work together Fairly detailed article on the subject of MAPI, Outlook, CDA, and Exchange
- Python MD5 Duplicate Files Finder In case you need that sort of thing
- MySQL commands Cheat Sheet
- PyDev Eclipse Python Plugin
- Brilliant Button Maker
- sniipets taggable code snippets repository built with Ruby on Rails
- Where To Find Great Free Photographs And Visuals For Your Own Online Articles
- CDDL Description and Rationale Sun tells why. Seems the Apache license wasn’t good enough
- CSS Rounded Box Generator
Popularity: 19%
Used the opportunity of working with Alex to update the site yesterday. You will notice a few things:
- Updated side bar: ads are now gone from the side, and shown inline after the first post, but only for the most insecure browser on the planet. The feeds heading was changed to subscriptions, to be easier to understand for the non-tech folk, along with a better description of the feed. I removed the search button, since just pressing enter will work just fine. The calendar got a style uplift (better whitespace and a colored header), and all li tags actually are contained by ul tags now (doh!)
- Post titles are a bit bigger, so they should be easier to read/get your attention.
- Each day now gets the desk calendar treatment. A box that looks like a desk calendar shows up on the right side of the content area.
- Categories are now called ‘tags’ in the post area, to be more ‘hip’
- Removed the feedmap badge, since it was slowing down the rendering of the site.
I am sure there are more little tweaks, but that is all I can remember for now. I will be updating my Wordpress install with a few plugins to help me out in the near future, and I will let you know how that goes as well.
Popularity: 21%
We didn’t talk much about it, but our Apache ‘infrathon’ made some press. The infrathon was an in-person meeting of the Apache Infrastructure Team under the guise of switching data center locations. We also (they mostly) did some coding projects to help move the infrastructure along, and quite a bit of socializing as well. The article can be found here: Zen and the art of Apache Maintenance. I am the tallest one in the picture (mostly due to the hat). Erik Abele is as tall as I am if I take the hat off
I enjoyed it immensely from putting names with faces first, actually doing the move second, and seeing a huge colo third. I have worked with most of the team at least once, since I am/was [fairly] local, and I was the necessary ‘remote hands’. After the colo move went off with just a few hitches, we headed back to Brian’s house where we did the socializing/drinking part of the infrathon. I convinced Sander Striker to help me out with a small Apache problem, and he brought in the big guns, mod_rewrite. Needless to say, everything under the sun can be done in mod_rewrite, and I was expecting to have to get dirty and write a C module. Thank you very much Sander for the help. It was greatly appreciated.
I left that Saturday night to head back home, and didn’t make it back to the colo the next day due to some work issues that came up. I wish the Infrastructure team well, and would like to thank each and every one for the work that they do every day to keep [service here] on *.apache.org working. Cheers to you, guys!
I will be going back to install more hardware that wasn’t available at the time of the infrathon, but most everything did get done.
Popularity: 31%
I just found out that WordPress happily ‘converts’ some characters in the posts that I type. The problem is that these are not the characters that I typed. When I type an apostrophe ('), WordPress happily converts this character into ′. THIS IS NOT THE CHARACTER THAT I TYPED, JACKASS!!!!
Apparently all of this is done on a per-request basis, in the wptexturize() function. BRILLIANT! Let’s just break xml feed validation on purpose! I love this software… (which is another character that I did not type).
I am being censored in my own blog! Is this a f$$king wiki, or blog software?
Popularity: 21%
If you see this post, it is because your reader is intelligent (good for it)
Popularity: 19%
Here is another thing they don’t teach you in college: Relevant Conversation Radar. Working in the ‘real world’ building software, you learn to listen to distant office/cube conversations, and if the relevant keyword pops up (your name, the product/feature you are working on, the technology you use/the bug you just fixed), you learn to walk over and insert yourself into the conversation, to help ’steer’ the conversation since you are an SME (subject Matter Expert) on the topic of the conversation.
Why can’t this be taught in Computer Science courses? This is an important skill in team development.
Popularity: 14%
Colorado cracks down on left lane dawdling. Freaking finally. Now if only we could convince California to do the same.
And up the speed limit while we’re at it. We need more population control!
Popularity: 28%