Head First HTML with CSS & XHTML

Mostly because I love Kathy Sierra’s Creating Passionate Users blog and have heard much about the style of writing in the Head First book series, I ordered Head First HTML with CSS & XHTML as soon as it was released. (Ok I also got it because CSS is a paticularly nasty time-sinkhole for me when I’m working on anything web-related.)

I love the book, but for me it was too much of an introduction to HTML. Skipping ahead to the later chapters, I did learn some important things about CSS. Discounting that, the book is great. It’s sarcastic conversational tone keeps you engaged in the material, it has great examples and frequent special sections that break up the flow nicely.

This book is especially well suited for people entirely new to HTML- I’d definately recommend this book for that audience. The pacing is so well thought out, almost anyone could learn HTML here.

I enjoyed the parts I actually did read so much, I ordered Head First Design Patterns (taking advantage of my “free” trial membership in Amazon Prime) because I never quite got through the real Design Patterns book.

Poor workflow in USAirways self check-in kiosks

I ran into an ugly edge case attempting to use a self check-in kiosk to fly from Boston to Nassau on my UK passport last weekend. It turns out that its not possible – while one can use a self check-in kiosk to fly to the Bahamas on a US passport, or on a UK passport to the UK, it is not possible to use the kiosk to fly to another country using a different country’s passport.

Only the kiosk didn’t tell us that for a while…

After Kristi checked in successfully, we scanned my passport and informed the kiosk I am a UK citizen. At this point, the machine should have told me to see a ticket agent. Only instead, it chose to waste my time and that of the people waiting in line by prompting us to enter my name, passport number etc from a slow on-screen keyboard. Only at the end, after being prompted to enter my emergency contact information did the kiosk tell me to see the ticket agent, who informed me that what I am attempting was actually impossible. Thanks a bunch whoever programmed the kiosk. Great job on designing that interaction.

The kiosk did amuse me by telling me “The FAA requires that you provide emergency contact information” and then asking me do I want to provide contact information. What kind of requirement is that?

Instant and not so instant messaging at work

I’m intrigued by different levels of instant messaging uptake in corporate culture. I acknowledge up front that constant mixed-initiative interruptions to ones workflow can be harmful, but note that many people in low or no-IM work cultures have their pop up mail notifiers enabled to the same effect. In fact despite its fundamentally asynchronous purpose, due to most people’s evolved expectations about instaneous responses to electronic communications, email ends up being overloaded as a poor-man’s IM system, which should never happen. Most emails aren’t important, and anything really urgent should be a phone call, walk-by or IM, because one shouldn’t reasonably expect someone to read your email in the next 5 minutes.

At IBM, where IM is practically the pulse of the company and “pinged” has become a verb meaning to contact via Sametime (due to its annoying ping noise), I used to productively work with people across the country, and even the globe via IM that I never met and only rarely talked to. I would never have thought that there really are companies out there that get by without centralized IM, in which you can reasonably expect to get a hold of anyone in the corporate directory via IM.

Turns out there are – at my current job, which still has its small company culture less than 6 months after being aquired by Oracle, there is no real use of IM ( despite Oracle having a centralized IM system, which I’ve heard is quite busy in “mainline” Oracle, many people on my team don’t bother to sign in there ). – sure there are isolated pockets of instant messaging via Yahoo or AOL, but if you or the person one needs to reach are not there, then its back to email. New hires also incur a cost of gathering up everyones screennames. Or walking to their office, and while I’m all for face to face interaction, an IM can be nice so you at least know person X is going to be in their office when you get there (or just buddy-list awareness if its properly done…)

The differing philosphies behind who one can see as a member of an IM network at IBM vs Oracle are interesting to note. Basically the differences are opt-in vs opt-out. On IBM Sametime, one can see the status of and contact any user who hasn’t specifically chosen to block/hide from you. On Oracle RTC, based on Jabber (which allows any jabber client to connect), one is required to send each person who is not in one’s immediate department a message to request that person allow you to see his or her online status and message him or her. So to accrue one’s O(n2) network effect, you have to exchange n2 messages. That just seems silly in a corporation where everyone should be working towards some version of the same goal, playing by the same rules (and to enforce proper behavior, ultimately accountable to the same HR dept). At least both of these approches enforce reciprocity- if I don’t want you to seem me, I can’t see you. I’m not a fan of the (somewhat) recent “innovation” in AIM of being invisible.

Like most things, I really miss having a “real” IM system available at work. Let’s count the ways:

  • Knowing when someone gets to work without having to walk by their office a gazillion times
  • Leaving messages with people who aren’t in their offices or who are busy at the time a visit is attempted
  • Productive (and often not-so-productive) back channel conversations on meetings in person (also requires laptop/wireless culture)
  • Quick questions that won’t take long to answer
  • The list goes on..

A healthy blend of all kinds of collaboration is a good thing. Given that free servers (like Jabber) are available, I personally couldn’t imagine letting a company grow beyond 10 people without a central directory and IM service.

Declining skills in developers

I was in an all-hands call, which as usual apparently for any company, was largely a waste of time and money. Anyways, as a prelude to hearing about some wonderful tooling/toolkits we should all standardize on, we see this chart:

chart shows average developer skill declining after 2002

The “chart” bothers me on so many levels. First I’m not sure why gartner feels that the average skill level of J2EE developers peaked in 2002. Why 2002? Is that when the smart, early adopters of J2EE started fleeing for the greener pastures of python, php and ruby? Or was the field swamped by “Sun Certified” J2EE folks who can memorize APIs but not actually solve problems? Secondly, by what measure are J2EE applications getting more complicated? Did the world get dramatically more complicated since 2002? If your architecture or platform (J2EE) is so complicated that you need to slather on more layers of “architecture” to fix it, isn’t there something fundamentally wrong in the first place? Complexity is not a virtue.

Lastly, as a developer thinking about skills that are applicable to another job down the pike, why would I want to learn an proprietary wizard-hand-held way of doing things when there are so many great open source solutions to the same problems that would be applicable at many more jobs down the road?

Improvements to p6spy

P6Spy is a great little tool that allows one to log all JDBC calls a Java application makes – allowing one to get a high level view of where some application bottle necks are (i.e. repeated, identical calls can probably be cached). Though it is included in applications like Infrared, it itself has unfortunately not been updated in over two years. I’ve never even seen mention of forking the project, just a few posts on its message boards sharing a few code snippets. It seems like it got folded into IronEye SQL, whose website is responding for the first time in weeks as I post this, coincidentally, but are apparently out of business anyways.

I’m posting an updated version that fixes a bug (impossible to deactivate logging of result set rows) and adds a new feature. The new feature is the addition of a category “resultcount” which will print out the number of rows fetched for a query in the format:

<p6spy preamble> <separator> <select query> <separator> "generated N rows"

Without further ado, the downloads:

Yahoo – a tale of two companies?

I suppose there must be a size n where for companies that reach a size greater than n, there is always some part of the company with its head crammed firmly up its ass, in spite of the ground breaking work happening elsewhere. Apparently Yahoo is at least as big as that magical size.
Tonight, I wanted to check out the new weezer video on yahoo music. Only for a mac user, that generates a pop up indicating that Netscape 4.7 is required (screenshot here) That’s a positively pre-historic browser version – it’s eight years old for crying out loud. That would be like steaming down the “information superhighway” with a Victrola on the dashboard of my buggy, whip in hand.

This goes to spite the post I was formulating in my head praising Yahoo Farechase and the new Yahoo Maps Beta (which is arguably better than google maps, for now due to cool hover effects, multiple directions, and route numbers for rural roads in directions).

Then again, since I know Yahoo bought farechase, along with their new beta email (which i doubt beats gmail, because the tired old desktop email metaphor that everyone copies is not better) it may just be that “old” yahoo is stuck in some kind of 1999 time warp, and they have to buy innovation (like Flickr, for example) rather than cook it at home.

Or maybe the Yahoo music team is too busy “innovating” ways to break tools people create to get their content to get around to making it available in contemporary browsers.

Fun with “Web 2.0”

I finally made some time Sunday night to tinker with some Javascript/DHTML using MochiKit which turns out to kick ass. Definately take a look at that if you’re doing any heavy lifting in javascript (They have a intro screencast). I don’t have anything presentable to show for my efforts – I still need to make it look pretty (which i suck at, being especially susceptible to losing hours trying to do CSS-based layout), and definately give it some curves. (Thanks Matt). Was fun to play with some rich internet application stuff, given that the application I work on by day is barely “Web 1.0”.

One cool thing I have to point out is OpenRico, which is an open source library to do some really amazing things with JS/DHTML/CSS (and most importantly, without Flash), like this cool demo. (which i always saw on weather.com and assumed was flash).

Its nice to see that browsers are becoming so capable, though I bet something as cool as Yahoo’s new (beta) mapping tool (which, is amazingly, better than google’s ) couldn’t be done today in DHTML.

Too Many Wires!

This is what the side of my iBook looks like most days:

Wires Spewing from iBook

Since I went out and bought a 17″ flat panel (can you ever have enough pixels?), and then a keyboard and mouse, I’m swimming in connections – so now when I do take my iBook down to the library to do homework or on a trip, I’m unplugging all these damn wires. The other day, I thought something along the lines of “my kingdom for a docking station” – and what do you know, even though apple doesn’t provide connectors on their laptops, someone made this hacky passthru thing.

Only snag, its around 200 bucks. Which makes me think, I could just get a mac mini for not all that much more than that, and not have to throw it away next time I upgrade laptops (hopefully a powerbook next time, though I heard they aren’t going to make 12″ powerbooks anymore). Then I’ll have the keeping important files in sync problem, but that’s solvable.

I don’t think I want to buy any more mac hardware until they’re running speedy intel chips though. After seeing some benchmarks about dual core Opterons thrash the dual core intel chips, its too bad Apple didn’t go with AMD. Maybe by then the mac mini will support dual monitors. That would rule!

Creativity Support Tools

As I mentioned several weeks ago I saw a presentation by Professor Schneiderman of UMD. One of the high level themes of his presentation (and his book, Leonardo’s Laptop) is that programmers should not so much seek to make computers magically find the answers for us (and indeed, many of the “promises” of AI have never come to fruition, but should instead strive to make tools that support human creativity.

How to do that? One great application domain is sifting through mountains of data to spot hidden trends and relationships. If a computer isn’t going to do this well, then it should facilitate the user’s having the “aha” moment. People think with their eyes (indeed, the image is processed quite a bit before getting on the optic nerve) and are amazing at spotting things that don’t “fit” or belong – so show them the data in a way that isn’t row after row of numbers or text, and then let them interactively sort and filter. (and “drill-down” and “roll-up” aren’t adequate info-vis tools).

Two cool tools in this vein were demonstrated- The Hierarchical Clustering Explorer, a prototype out of the HCIL at UMD, the other, Spotfire is a commercial application. Both let you simultaneously view several different “slices” of a mountain of data, and changes you make to one view (filtering for example) are instantly reflected in the other views. One of the cool things about both tools is the capability to effortlessly stretch and shrink axes, to zoom in on subsets of the data – because, as Prof. Schneiderman said well, “A pixel is a terrible thing to waste”.

The HCIL site has a report from a Creativity Support Tools Workshop, and some other really cool work in the area of visualization.

Python Challenge

I have a learning disability: I can’t learn things for the sake of learning them; that is I learn by doing, and in order to do something, I need something to do. Since I don’t have enough time to bite off any medium or large scale project right now between work, school and “life”, the Python Challenge is really neat way for me to dabble in learning more python.

Its a series of puzzles solvable using Python (or I suppose almost any language or tool set), but they are as much about solving riddles as the programming itself. I’m only on puzzle 4 or 5 out of 33, so there’s plenty to look forward to.