Thursday, October 01, 2009

World's Ugliest URLs

I live outside the city of Monmouth, Oregon (beneath the Western Skies, of course). Our city's official website has URLs like:{F6D36CB4-8AB1-4E2F-9F16-EEB14A3A83DD} - Things to See & Do{6010A930-F666-42AF-A359-971AC53933A1} - City Government

OK, maybe they're not the ugliest in the world, but those bad boys have gotta rank way up there. Anyway, when I first heard Jacob Kaplan-Moss talk about pretty URLs in Django, I thought some of criticisms were a little nit-picky. Initially, I didn't see anything wrong with index.php, but I could see the basic point even before seeing Monmouth's URLs. When I converted the Evergreen Terrace Farms site from PHP to Django, cleaning up the URLs was something I was pleased with. For example, became So, I guess I have drunk the Kool-Aide, and I have become a bit of a URL snob.

Regardless of how picky you are about URLs, I think any sane person would agree that those URLs for the Monmouth site are just crazy. Just imagine trying to read one of those to your mom over the phone - "no, it's 42AF, and the A and the F are capitalized."

In my opinion, the saddest thing is that the site is a commercial product created by a company that boasts about how many governments they've sold it to. It would be one thing if some students created something like that for a senior project, but when you're charging people money for something like that you should at least not expose the ugliest of the ugly Microsoft crap from the depths of the implementation (I assume those are UUIDs generated by .Net). I guess I'm also disappointed that no one in the city even noticed those URLs before putting out taxpayer money.


Wednesday, September 16, 2009

Presenting an Updated Version of OSS Jobs Talk

I'm giving an updated version of "How to Get a Software Job w/o Experience" at Willamette University tomorrow, 9/24/09. It's a fun talk that I enjoy doing. I updated the SlideShare version, rather than uploading a new version, so the old version is publicly unavailable.

Sunday, August 23, 2009

Mercurial for the Homeless

Generally, I'm not one to talk about crazy dreams. You know those ones right before you wake up that seem like a Salvador Dali painting? Anyway, I had one the other day where either I was homeless living out of a car, or I was observing someone like that. Anyway, it dawned on me in the dream that Mercurial (or any DVCS) would be perfect for that situation because I figured that the homeless person would only have intermittent network connectivity, but he still needed to get work done.
OK, maybe the part about someone living out of their car "needing" to get coding done is a bit crazy, but I already admitted that it was a weird dream. I suppose jet-setting open-source gurus might feel kinda homeless from time to time, and they do need to make use of their time on planes, so maybe it wasn't so crazy after all. And, when you get right down to it, the two use cases are more similar than different, and Mercurial and other DVCSs excel at it.
For the record, the rest of the dream was related to work I'm doing for a client converting from CVS to SVN without necessarily having shell access to the server machines. I thought of a zillion ways where I could do something trivially in Mercurial but SVN (without shell access) just kept kicking my butt. I just hope shell access comes through, so the dreams can cease.


Thursday, August 06, 2009

Problem with Hudson as a Windows Service

Setting up Hudson to run as a windows service is wicked easy. However, at a client we ran into a problem with the user that the service runs as. By default, the service runs as the Local Service (or maybe Local System) user. Also, by default Hudson runs out of the .hudson directory under the user's home directory (in Documents and Settings).

This ran fine until someone logged into the console. Hint number one that there was a problem was that Windows took forever to log the user in while there was a huge amount of disk activity. Then, suddenly Hudson reverted to its state from several weeks before - recently added users and builds were missing. Looking around I could see that many users had a .hudson directory (as well as Maven .m2 directories), which made no sense - only the Local Service user was running Hudson.

As near as I could tell, logging in on the console was somehow changing the value of the Local Service user's home directory. And for some reason, Windows thought everyone should have a .hudson directory. (Thus the long time to login - Windows was copying the Hudson directory to the new user.)

Anyway, the solution was to create a real directory for Hudson - C:\Hudson, and to point Hudson at that by setting the HUDSON_HOME environment variable. To make this as easy as possible, I just set it via the Control Panel as a system-wide environment variable. I filled the directory with the contents of the .hudson directory in my home, as it seemed to have most/all of the recent users and jobs.

Also, while fixing all of this up, I created a limited (non-administrator) user to run the service. This is just good security that was skipped when Hudson was initially set-up (by someone else) as a quick proof-of-concept prototype.


Tuesday, July 14, 2009

Book: The Principles of Successful Freelancing

The Principles of Successful Freelancing by Miles Burke
ISBN 978-0-98004552-4-6

The Principles of Successful Freelancing is a comprehensive introduction (if that's not a contradiction of terms) to striking out on your own as a freelancer. This book is perfect for someone who is considering moving to freelancing or possibly for someone just starting out.

Mr. Burke covers all of the basic areas of starting and running a freelance business. He discusses how to set up your business and your office, how to sell your services, how to manage your money, and how to give good customer service, which is ultimately the most important aspect of a personal freelancing business. He also addresses how to balance work and life beyond work, which is hard in general and specifically hard in a one-man shop. He concludes with something I haven't seen in a "start you own business" book - where to go next. Do you want to remain as a one-man shop, do you want to grow into a "real" business, or do you just want to "retreat" to the old 9-to-5 job? I don't recall a book like this consider the option of going back to the grind.

Each chapter concludes with two "case studies" - Emily and Jacob. These two characters represent two very different people who might want to go into freelancing. The studies at the end of each chapter explain how these personality types might react to the issues and challenges discussed in the chapter. This device helps the reader envision how he or she might deal with the issues discussed.

Early on, I got the mistaken impression that this book was a bit fluffy. The typography has a fair amount of white space, and it looks kinda arty rather than serious and dense. (OK, I grew up with punched cards and line printers. When's Matlock on?) But, by the time I finished the book, as I looked back across it, I really couldn't think of anything that wasn't covered. Sure, there are whole MBAs built around marketing, and this book only has one chapter on it, but the Mr. Burke provides a perfectly reasonable introduction to the subject. I think I got this "fluffy" mis-impression because immediately prior to reading Successful Freelancing I read Eric Sink's The Business of Software, which is very detailed about a few aspects specifically related to running a small software business. Successful Freelancing covers a wider range of topics, and it is not aimed specifically at software freelancers. If anything, it's aimed more at web designers who probably like nicer typography.

To conclude, The Principles of Successful Freelancing is a great first introduction to the idea of freelancing. It covers all the bases to help someone evaluate whether or not to go into business for himself.


Monday, July 13, 2009

Choosing Java Versions on Mac OS X

While debugging another manifestation of the "wrong library for groovy webtest" bug recently, I found an email thread that makes reference the java_home command (sadly, I can't find an online manual page to link to) to cleanly select a specific version of the JVM under OS X. Here I thought manually pawing through /System/Library/Frameworks to look for versions to set JAVA_HOME to was the "right" way to do it. Learn something new every day.


Friday, July 03, 2009

Dealing with DreamHost Server Migration

DreamHost sent me an email telling me that my account had been moved to another server. OK, fine - "what's that mean to me, Al Franken?" They said that it shouldn't affect most sites, but that you'd have to look out for paths in your applications that look like "/home/.something/username".
So, when when on my clients emailed me to say that his WordPress site was giving him an error message that read:

Unable to create directory /home/.spuds/user/ Is its parent directory writable by the server?

I knew that I had been bitten by this error. OK, how to fix it? I grep'ed the WP PHP files, but couldn't find a path like that. So where was it coming from?

On a hunch, I decided to look at the wp_options table in the WP database and found a row called upload_path, and sure enough, it contained the offending directory. I just removed the ".spuds" portion of the path, as per DH's directions, and it all worked.

So, if you're on DreamHost, and they moved your WordPress blog, and it suddenly stopped working with that error message, try looking through wp_options in your databse. (FYI, DH puts a random string between the wp and the options to prevent collisions with other users in the same database.)


Tuesday, June 30, 2009

Aliens have taken control of my PowerPoint!

I just cut-and-pasted some text from a PDF into PowerPoint, and this is how it rendered:

The aliens are the bullet points from the source PDF. WTF?

Friday, June 26, 2009

Little Summary of the Open Source Bridge Conference

It's been about a week since the Open Source Bridge Conference, and here are some brief thoughts about it. I'd summarize it by saying that it's approximately 80% as good as OSCON for nearly one tenth the cost, and it was here in Portland.

Of course, it was smaller than OSCON - a lot smaller. But it had a lot of what I go to OSCON for - talks about cool open-source software. There weren't as many talks, not as many projects, not as many "rock stars", but it's the same basic idea. The exhibitors area made a Soviet-era consumer electronics show look like NES. I felt sorry for them.

As I hinted at, the price (something like $250 for non-early bird) was beyond reasonable - it's cheap, in a good way. At the moment, I'm between clients, so there's no way I could afford over $1000 for OSCON. If I had that kind of money this year, I probably would have blown it on the Java Posse Roundup - maybe next year.

Finally, having it in Portland was crucial for me, especially this year. However, I realized a down side to that: since I'm basically local, at the end of the day, I didn't hang around for social events or the hackers lounge, but I rather went out with friends whom I was staying with in the area. So the fact that it's local sort of limited my participation.

Anyway, it was a great version 1.0, and I look forward to going to OSB again next year. Oh yeah, props out to O'Reilly for being a sponsor of a "competing" conference. That was cool.


Version control: Autopia vs. off-roading

When I was a kid, it was cool to go to Disneyland and ride the Autopia ride. For those of you unfamiliar with it, you get to "drive" a car along a track. As I recall, you get a gas pedal, and the steering worked for about plus-or-minus a foot off the center-line of the track. It is a far cry from driving a real go-cart let alone a real car on the highway or going off-roading (not that I've ever intentionally been off-roading.) Comparing traditional centralized version control systems to distributed version control systems is a bit like autopia vs. off-roading.

With a centralized version control system (VCS), your options are limited, and to a certain extent that can be a good thing. A critical difference between Autopia and a centralized VCS, is that the VCS actually goes somewhere - your code line continues to move forward and doesn't loop back to the starting point.

A distributed VCS (DVCS) can follow the exact same path that a cetralized VCS provides/requires - just like you could drive a 4x4 along the Autopia track. With a DVCS tool like Mercurial, you can implement policies that end up following the same trajectory as you would with Subversion. You have one "master" repository; everyone checks out from it; everyone commits directly to the central repo; the only branching is officially sanctioned, and it occurs in master repo. And that's fine for a lot of applications. Also, some organizations want to operate on the straight and narrow, which is fine if it works for them.

As I mentioned before, I think Mercurial is very simple to use on that path. But, the blessing or curse or fun or power of a DVCS is that you need not follow that track. You can go off the track. Doing so might be the fastest way to get where you're going. Or, you might end up in the weeds. And, you can drive back onto the main road. Developers can head off in some strange direction in their private repo, share their changes with other repos, bring in changes from other repos, abandon their work, or merge it all back into the designated "main" repo. All the while, they have a real VCS tracking their work and saving it - not just random hacking in a random directory.

If Autopia is where you want to be, more power to you. I wouldn't recommend using a DVCS in that environment. Although I don't go seriously "off-road" in my development, I like to have the option to get a little mud on the tires. And even if I'm "driving on the track" and using Mercurial like a centralized VCS, I like to clone a tree onto my laptop to operate disconnected for an extended period, which is something that's not generally possible with traditional VCSs.

My most "extreme" use of Mercurial to-date has been to mirror a P4 repository that I only have intermittent access to. Hg lets me do all my work without having to get the admin to let me onto the P4 repo from by dyanamic IP address. Before that, I would work for weeks without checking in, which makes me nervous. Due to some ignorance and poor planning, I created a bit of a mess in my hg development repo, but I was able straighten it all out, build a series of mq patches, stage them on another repo, and push them back to the P4 tree.

Monday, June 01, 2009

404 Errors with Django flatpages

In a Python class I'm teaching, I had the students do the Django tutorial with some added bits. One of the added bits was to add an About page using Django flatpages. A couple of students had problems where they were getting 404 errors even though there was a flat page defined at the /about/ URL.

I had one student zip up his project (including his sqlite database) and send it to me. (One of the other "added bits" was that they had to create portable projects - no hardcoded paths in When I first ran his project, sure enough - 404. I poked around, and everything looked good. Then, I used loaddata to load my data (including a flat page) into his DB, and it all worked fine. So, it was a data issue, not a project-level mis-configuration.

After reading a comment from another student about this problem, I looked into the database using SQLite Manager, where I could see that the flat page was assigned with site_id #3, not the default #1, and somewhere along the line he had created multiple sites in his DB. I looked in, and sure enough, SITE_ID referred to site #1, not #3 As noted in the flat pages docs, this needs to match (under some circumstance). Changing that, fixed it all up with the students original data.

If you have been having this problem, I am hopeful that the Google sent you here, and you can see how to fix it.


Friday, April 10, 2009

How to Get a Software Job w/o Experience.

This is a talk I gave at WOU last week. I also presented it later the same week at Beaver Bar Camp. In an ideal world, I would have delivered the talk at least a few weeks before the deadline for Google Summer of Code applications. :-( OTOH, maybe some students will join some F/OSS projects this summer, and they can nail the application next year.

Slideshare liked it (but I'm not sure what their criteria are): "Your presentation How to Get a Software Job w/o Experience is currently being showcased on the 'Career' page by our editorial team."


Tuesday, March 24, 2009

Book: Writing for Scholars

Writing for Scholars: A Practical Guide to Making Sense and Being Heard by Lynn P. Nygaard
ISBN: 9788215013916

Writing for Scholars is a great guide for (aspiring) academic writers. The simplest thing I could say is that it ought to be required reading for anyone in graduate school who will be doing academic writing - e.g., journal articles or a dissertation. In my experience, academic writing was something that a graduate student was expected to either know already or absorb quickly without little or no coaching.

I've read a couple of books on the subject of academic writing, especially in the area of the sciences. Those books focused on a lot of the minutia of presenting and formatting one's work in a journal or similar medium. Ms. Nygaard takes a much larger view of the writing process, and she de-emphasizes (without completely dismissing) the technical minutia, putting it in the later chapters. She begins by talking about how to develop good writing habits, which is applicable to non-academic writers, too. She also explains the academic dialogue and how an academic paper has to fit into and extend that dialogue.

She continues by explaining how to identify your audience, which is also applicable to non-academic writing. Then she gets down to what I would term the core of the writing process: forming your argument and expressing it in standard academic form (abstract, introduction, method, results, discussion). She also explains how and when to use figures and tables.

A couple of topics that I don't recall reading in other books are: feedback (giving and receiving) and presenting a paper at a conference. Again, both of these are subjects which were never taught in my graduate schooling. These are both crucial topics that complete the academic dialogue.

Throughout the book, Ms. Nygaard includes numerous (sometimes humorous) examples drawn from a wide range of academic disciplines. Perhaps I'm just reading it through my own science-tinted glasses, but I'd say the book does lean more towards the "hard" sciences rather than social sciences or liberal arts. However, I would assume that non-science writers would find this book just as useful as the geeks in the world.

If I had to make a minor criticism of this book, I'd say that Ms. Nygaard should include some references to other sources relating to the various topics she addresses. This is a short book (less than 200 pages), and that's a good thing. But, as a short book, it cannot possibly be the end-all and be-all encyclopedia for academic writing. For example, her chapter on figures and tables is a great introduction, but references to authors like Tufte would serve the (novice) reader well.

In conclusion, Writing for Scholars is a great guide to academic writing. It is a must-read for anyone beginning a career that will involve such writing, and even seasoned writers can learn a few things by filling in some gaps that were left over from learning by osmosis.


Wednesday, March 04, 2009

Book: Pro Django

Pro Django by Marty Alchin
ISBN: 978-1-4302-1047-4

Pro Django is an excellent book on Django, but it's not for beginners. The term "Pro" gets thrown around a lot, and it gets applied to things that might better be described with "Dummies." This is the Real Mc Coy - it's serious advanced stuff.

The chapters are centered around nice little chunks of the Django system: Models, Views, Forms, Templates, etc. Each chapter is a nice, self-contained bit of Django knowledge, except for Chapter 2, which is a great survey of advanced Python like meta classes. Most chapters also include an Applied Techniques section which gives some examples of how to apply the material in the chapter.

While reading this book, what struck me was how the chapters seem to pack in a level of detail that you'd typically find only in a comprehensive reference, but yet this book is not a bunch of dry reference material, or worse yet, copies of online manuals. The reader gets serious detailed information, but it almost reads like a fluffy tutorial. It's pretty remarkable.

Something that's unique about this book at this time (Q1 2009) is that it covers the 1.0 version of Django. A bunch of the first books on Django were written against 0.96 or earlier. You'd think there wouldn't be much difference (0.04 versions if you only look at the numbers), but the jump to 1.0 was significant for Django. It's nice to have a book that reflects the 1.0 world.


Monday, March 02, 2009

Does OpenOffice Base suck?

Is it just me, or does OpenOffice Base (the database tool in their suite) suck? Or maybe it just sucks on the Mac? Honestly, I'm not throwing bombs just to be a tool. If I'm doing something wrong, please tell me.

For some time I've been looking for a database tool along the lines of Access, but which runs on the Mac and possibly other platforms. It's not that I'm a big Access fan - I've only used it a time or two, but every now and then, I have a task that cries out to be implemented with a database. Creating a desktop application from scratch using something like Swing and JavaDB/Derby seems like overkill (not too mention, way too much work), but I've always thought that there should be a database tool that's based on Java (cross-platform) and some open-source database (e.g., Derby or SQLite).

On paper, Base is just that tool. I heard somewhere that it's written in Java, and I know that it uses HSQLDB, but can use any JDBC database. Looking through the interface it's got tables, forms, and reports. And OpenOffice runs on Macs, Windows, and Linux. Sounds perfect.

Here's just a short list of the issues I've had:
  • The first time I ran it, it crashed before I'd even defined any tables. D'oh!
  • Once, the UI locked up (no visible updates but the mouse still worked) while I was trying to add a List Box. I kept trying until it crashed. When it came back, I had a zillion List Boxes in the spot where I was adding them.
  • After removing the List Boxes, it crashed again. After restarting, the recovery process restored all those list boxes. I removed them all again, it crashed again, and they were all restored again.
  • Eventually, I removed the List Boxes, saved and quit. After restarting, the boxes were finally gone. This marked a new work pattern - save and quit every ~5 minutes. Sometimes, saving alone wasn't enough to prevent work from being lost.
  • The replace form control function crashed consistently enough for me to realize it doesn't work. This is a shame because the form wizard creates text boxes by default, which need to be converted. I had to add new controls, wire them up, remove the original text box, and move the new control into place - all while saving frequently.
  • It took me forever to get a List Box that wasn't tied to a database table or query - e.g., Gender can only be Male or Female (or Gelded on our farm). To do that, you have to turn off wizard mode.
  • There are various UI boogers on the Mac - e.g., list boxes are sometimes not quite tall enough so the text in the box is chopped when the list is not dropped down.
  • The documentation that I could find was minimal, at best. I realize that's a common complaint about open-source projects, but for something as big as OpenOffice, I expected more.
Anyway, it's so unusable, I don't think I can use it for my own personal purposes, let alone recommend it to clients. Quite a shame. I'm thinking to checking out FileMaker. It runs on both PCs and Macs, and it has a free 30 day trial.


Wednesday, February 25, 2009

Talk: How To Protect Yourself and Your Computer Online

This is a talk I recently gave at the Monmouth Senior Center. Nothing earth-shattering for techies, but useful information for the non-techies in town.

Friday, February 20, 2009

Cell Phone (EVDO) for Rural Internet Access

The name Western Skies (name of this blog and my consulting company) comes from song "Western Skies" by the late Chris LeDoux where he talks about living out west (Wyoming) rather than in Nashville. Similarly, I choose to live out in the country in Oregon instead of Silicon Valley. On the plus side, I have "watch(ed) an eagle fly" (in town, no less) and listened to "the coyotes call at night." On the minus side, there is no broadband Internet access out here. I've recently switched to Verizon EVDO service, and it's mostly working. This is the first of a series of posts on the subject of using EVDO for our sole Internet service.

Previously, I was using 128Kbit (16 Kbyte) per second ISDN. It cost $85/month, which means it was slow and expensive, but the data amount was unlimited. Also, it was a business service from Qwest, which meant when it went out, they were Johnny on the spot to fix it - they even asked at 9pm if it was OK if they didn't roll a truck until morning or if I needed it fixed that night.

I had been thinking of switching for some time, but Qwest forced my hand when they notified me that they would no longer serve as an ISP for the ISDN line. They still provide ISDN service, but their ISP ( no longer accepts ISDN calls. To add insult to injury, they suggested that I see if DSL was available - if it were, there's no way I'd suffer the indignity of ISDN! I could have changed ISPs, but the ones I found all charged more and/or had usage limits expressed in hours per month (not MB/GB, just hours of connect time).

Since there's no DSL or Cable, the only other contender would be satellite. However, at times, I do a lot of work at the command line via ssh, and the latency of satellite would have been completely impractical. A neighbor of ours has it, and she says she can't even run IM over it very well.

When we first moved out here, there wasn't hardly any cell phone coverage. Mostly our phones just spent their batteries looking for signal. Then, Verizon put up a tower that we can see from our driveway - a pretty clear line-of-sight. Our Sprint cell phones get 4 bars of (roaming) signal, except when they catch wind of 1 bar of Sprint, which they'll chase blindly.

After checking out Verizon's offerings online and talking to a sales rep, I signed up for service and "bought" a UM 175 EVDO modem (free with 2 year contract) at Costco (to save on the activation fee). Verizon offers a 30 day trial, which I figured I'd use to test things out before cancelling the ISDN line. Even though our phones got a strong signal, I wasn't certain that the data signal would work. Of course, you'd think that if a telco bothered to put up a tower (or an antenna on someone's leased tower), they'd provision it with all the latest features (e.g., EVDO), but then again telcos don't always behave rationally.

To make a long story short, it really does seem to work. The bandwidth is much better - I see anywhere from 100KB/sec to 800KBps with 100-300 KBps being common. Not great compared to the fiber in town, but much better than 16KBps. Ping shows the latency being pretty large (150-250ms), but it seemed alright when I tried it over ssh. (I'm no longer working for the client where I was using ssh full-time, so I haven't really put it to a real test.)

However, and this could be huge, the 5GB/month cap is problematic. In theory, our regular email and web surfing fits well within that limit, however that doesn't leave much room for podcasts or video (which I never got into on ISDN, anyway.) The cap works out to ~170MB per day, and many podcast episodes are ~50MB. So, I'm still trying to figure out how to live with the cap - giving up podcasts is not an option.

At some point, I'll post about my experiences setting up the Verizon UM 175 USB modem on a couple of Macs, as well as my new found hobby: Podcast Mule - downloading podcasts (and OS updates) from WiFi access points in town and bringing them home on my laptop.


Friday, January 30, 2009

Speaking on Groovy again

I'll be repeating my talk on Groovy at noon on February 3rd at noon in Salem, Oregon. From the email notice:

This presentation will be in Information Systems Division conference room on the first floor, suite 103, of the State Public Service Building. Here is a Google Map link for the location.

Parking on Court and Capitol streets is the closest to the Public Service Building. The spots are metered.

Maybe I'll see you there,

P.S. My slide deck will be almost identical to the last Groovy talk, so I won't be posting a new one.

Converting a WordPress blog to a 'One-Click Install' on DreamHost

We set up a WordPress blog on DreamHost a while ago for a client. It was a custom install due to a bunch of craziness related to him getting booted from his old hosting setup. It all worked fine, and then DreamHost sent me a "nag email" (their term) asking me to upgrade because the old version had security issues. Fair enough.

I had another site to upgrade, but it had been installed as a one-click install. The upgrade for that was one click (plus some backing up). I could have manually upgraded this custom install, but if I did that, I knew I'd have to continue doing manual upgrades. Therefore, I wanted to convert this custom WP install to a one-click install.

DreamHost didn't seem to have any instructions, but how hard could it be? Basically, the procedure was pretty similar to what you'd go through to move a WP from one server to another.

  1. Backup the database and the old site: I backed up the old DB using mysqldump, and I tarred up the old site.
  2. Export the old site: from the WP admin page, select Export and dump all authors.
  3. Create a new database in the DreamHost control panel. In theory, you could drop all the tables in the old DB and re-use it, but I was being paranoid, which paided off later.
  4. Move old site out of the way: just move the old site directory to a new name - e.g., mv
  5. Create a new 'One-Click Install' WordPress site using Advanced Mode, since we had a custom theme and a bunch of other content (pictures). This was put in the new database. After DreamHost emailed me to tell me that was done, I logged in and changed the admin password.
  6. Import the old content from the Admin Import function. Actually, DreamHost's email included the URL for that page. One issue I ran into was the "user name" for the old posts: WP thought the old posts by admin were from some other user because in the old blog, the admin user had a different display name.
  7. Copy in the custom theme and other content from the old saved directory into the new blog site. Enable the theme. Set up Akismet - this is where having the old DB around was useful; I just looked in the wp_options table to find the API key instead of having to dig around for it.


Thursday, January 22, 2009

Jython talk at SJUG

Here are the slides of a talk I gave last February at the Salem Java Users Group - SJUG. Although it looks like it's primarily about Python and Jython, my bigger emphasis was on extension programming - scripting existing Java code. In other words, a form of polyglot programming.


Wednesday, January 21, 2009

Book: Java Power Tools

Java Power Tools by John Ferguson Smart
ISBN: 978-0-596-52793-8

Java Power Tools provides a fairly detailed introduction to a number of tools for Java programmers. It fits nicely between the O'Reilly Hacks series and having a dozen books like Ant: The Definitive Guide, 2nd Edition. Like the Hacks books, Java Power Tools provides an introduction to a bunch of tools. The Hacks books are great for answering the question "I've heard of that tool, but where does it fit?" But whereas the Hacks books provide just an appetizer, this book provides a main course, enough to get seriously started with the tool being discussed. And then, if you want all the gory details, a Definitive Guide could provide the full five-course meal.

The selection of tools presented was really good, at least for me. For example, I know about continuous integrations servers, but I haven't set one up. At one client site, they were using Hudson, which I had some exposure to, but didn't know much about the others like Cruise Control, Continuum, and LuntBuild. Similarly, I've been using JUnit 3.x for years, but I didn't really know what was different in JUnit 4 or how that compares to TestNG. This book provided me with a great overview of these and other tools. Java Power Tools provides a great way to get up to speed with a general area of tooling (e.g., continuous integration servers) or a good cross-section of the majority of the Java tools in use today.

If I had to pick something to complain about, it would be Part II - Version Control Tools. These aren't really Java tools, although every programmer (Java or otherwise) should be using them. Or given the decision to include version control tools, I'd suggest excluding CVS because it's old and including at least one distributed version control tool like Mercurial (used by the Open JDK project and NetBeans) or git (used by the Linux kernel).

So, in conclusion, unless you have no free will about tool selection or you already know all of these tools backwards and forwards, I highly recommend this book to almost any Java programmer.


Wednesday, January 07, 2009

Groovy at SJUG

On January 6th, I spoke at the Salem Java Users Group on Groovy. The premise was not to replace Java, but rather to show how it can be used in addition to Java. Here are the slides.