We the savers

ING Direct put up a short manifesto titled ”
The Savers”. Its a good read,
and we could all do better by it.

Number 3 struck me especially:

We will take care of our money. It’s not enough to have money in a bank. We will put it where it will grow. We’ll keep track of it. And we’ll check every account we have every year to protect ourselves against fraud or escheatment.

“We will put it where it will grow” – well where will it grow. It seems the first tool brought to bear on any stock market bump is to lower interest rates, which in effect punishes those of us who do actually have money in a savings account. We lament the low savings rate in America, but then we go make it more appealing to borrow and less appealing to save by dropping rates again and again.

Another item is this – not everyone has the internet access or savvy to move their money to a place like ING Direct. Those people have their money stuck in a savings account that probably pays well under one-percent interest. I think its high time this country had a better program to get more people online so people can get away from their no-interest paying banks.

RCN “Analog Crush” slow in coming to Somerville

Just called RCN to ask when their vaunted “analog crush” all-digital upgrade is going to arrive (so we get more HD channels). Turns out Somerville is last on the list in Massachusetts, with an ETA of Jan 2009.

The backstory is that Somerville is apparently a really antiquated system so we already get less HD channels than RCN subscribers in Boston, who pay the same amount as we do across the river.

And we’re not getting the special NBC Olympics Basketball and Soccer channels.

Consumer product review sites

All of a sudden, the Boston area is lousy with teams creating web-based applications to allow people to review all kinds of products based on not only the quality of the product itself, but various facets of the corporate social responsibility shown by the manufacturers of the product as well.

Listed by order in which I heard about them

  1. Buy it like you mean it (non-profit) covers the full spectrum of corporate responsibility from the environment to labor relations. The content is generated by the community, and they allow consumers to weight the different areas so the site can offer tailored scores based on ones interests. Looks like their current plan is depth-first, so the community’s focus is specifically on the chocolate industry.
  2. IzzitGreen (for-profit) Consumer-created reviews on products and services specifically focused on (as you might expect from the name) environmentally friendly products.
  3. Zeer (for-profit) More consumer related content. This one seems focused more on does it taste good/work well/good for me type reviews than the others. Impressive population of product images and names, they stated this was a “core competency” of theirs in their presentation at the last webinno conference.
  4. Citizen’s Market (non-profit). Seems very similar to buy it like you mean it, but with a broader focus. Looks to be the newest of the group (heard about them on the Boston ruby group list where they’re looking for volunteer programmers) Strangely enough, the founder of buy it like you mean it is an adviser of Citizens Market

I think these are all great ideas, especially the ones focused on the global impacts of the products. I just wonder how much room there is in the market for all of these operations to succeed.

But for the tax code, lonely

I got a kick out of a quote from the NYT magazine article on up and coming F1 race driver Lewis Hamilton. He moved to Geneva for “tax reasons” and so the author mentions that Geneva seems like a tough place to live for a single young man.

“I wouldn’t say I have much of a life here, ” he said. “You can’t have millions of people come over. Who do you invite?” He went on: “I can’t just wake up on Sunday morning and go golfing with my dad and my uncle. I have to get up really early here and fly over to England for the day, and then come back. So that’s more traveling.”

I guess that’s tough, moving to evade taxes and then having to fly your private jet over to play golf with your family. boo hoo.

Kettle meet pot…

Just saw on the Times web site that Defense Secretary Gates accuses Myanmar of “Criminal Neglect” because they won’t allow the four ships dispatched by the Navy to participate in the relief efforts, which would include helicoptering supplies to survivors in the transportation-challenged delta.

Hop in the not-so wayback machine to Hurricane Katrina. The US refused all sorts of aid offers from foreign governments in the aftermath.  According to this article in the Washington Post, 54 of 77 offers from Canada, Israel and Britain were refused, including offers for much needed search and rescue teams.

Put in that light, one might even describe our response to Katrina as criminal neglect. On the other hand, if the US was hesitant to accept so many offers of aid, perhaps we can understand why the rulers of a closed society might do the same.

New Job

Now that I’m just about done with my master’s degree, the time has come to return to the working world.  I read this great article in the NY Times magazine about Patients Like Me which is an online social community for people with chronic diseases and was really interested by their model. After seeing a post in the Boston Ruby group mailing list, I got in touch and now am pleased to announce I’ll be joining their team in a few weeks.

Now that school is done, I’m excited to be able to focus on one thing again after all the time I spent working with part time school (and then school with part time work), and reclaim some long lost leisure time activities too.

Flickering LED Christmas lights

Beware LED christmas lights by Phillips – they have an annoying 60Hz flicker!
I decided to do the power saving or environmentally conscious thing and buy LED christmas lights to decorate the apartment this year. We picked up a 60 “bulb” set by Phillips for $12 and once they were up it was immediately noticeable that they flicker at a rate just low enough to be perceptible. It should be obvious to anyone that has taken the most basic of electrical engineering courses that AC current flows in two directions, and diodes only let current flow one way, so the LEDs will be dark half the time. Any useable LED set needs to have a rectifier to power the LEDs with DC current instead so they light up steadily.

I saw a review of them here (after the fact of course) and it indicates the flicker might have been fixed in this year’s model, but I can confirm its not.

So if you’re in the market for LED lights, look for some higher quality lights that give off steady light – the things last practically forever so it’s probably worth the investment.

Bodies the Expedition

Monday I went to the South Street Seaport in NYC with my old roommate Neil to see BODIES the EXHIBITION. It was fascinating. They took a bunch of bodies and used a ploymer resin technique to preserve them in a state that was as close to real as I can imagine. They also had a room full of circulatory exhibits where they used a technique to colorize and polymerize all of the blood vessels and them float them in some kind of liquid.

There’s a cool sounding Pixar exhibition at Moma too, unfortunately I only read about that today. Knowing is half the battle, as they say.

Wasted days – ugh!

I’d rather be programming than trying to make an application work – I hate losing days to trying to figure out why some fairly opaque application (or worse a group of them trying to interact) is not working – shutdown the server, change a config file, start up again and see if that mattered. Repeat until my brain feels squishy and I want to just curl up and take a nap. I’d feel better after programming for 20 hours than i do after having issues making something work that i need to test.

How to overengineer a simple web site

In several easy steps! (hopefully in some manner this will prove helpful to users of jython and freemarker in the future)

  1. The beginning
  2. Use a template engine to simplify site maintenance
  3. Create a semi-automatic scoring system
  4. Choose a different templating engine
  5. Take stock of what you’ve done

In the beginning, agree to be the “webmaster” of one’s local kickball division – simple an non-timeconsuming task given that the site has a handful of pages with static content, and one must update the standings and scores every week. Decide the site is an excellent opportunity to learn CSS layout. Spend an order of magnitude of time more to get the site up than it would have taken to throw up some 1997-style table layout.

Now the site is up and running – decide that since the same header and footer are on every page, it would make sense to use some kind of templating system (note: the site is static content only) to make it easier to add new sections, should the need arise. Consider various client driven solutions: Dreamweaver (too expensive), Nvu (generates crappy HTML, crashes, slow). Consider rolling your own, since all you need are static includes. Discard that idea.

Look at open source templating engines. Decide that you really want to have an ant script that will magically assemble the site (and who knows, maybe one day even upload it for you too!). Decide to use Velocity. Play with Texen for a while, but decide you really need its big sister vpp. Learn the syntax, get the gazillion jar dependencies downloaded and copy and paste the web pages into easy to manage chunks and get the includes working. Wa-lah! Now the website can be regenerated by a simple ant task – take this opportunity to add a photos section because its suddently really easy to do.

Now you’re in the promised land – no more editing 6 different files to change the menus! You can sit back, crack open a beer, life is good. But no – it irks you that you’re managing the score via a way-too-manual process involving an elaborate Excel spreadsheet and typing at least 2 different places. You’re a software engineer, you can do better than this. (Note: this decision is best made when you have a new full-time job and your Theory of Computation grad-class is taxing your time).
Spend T-rides brainstorming how best to represent the structure of the league, with teams, game schedule, results- of course you’d want it to be validating. Discard that effort when you have a brainwave – just represent the state of the league in jython script – you were going to process the XML in jython anyways after sleeping off the delusional fantasy of using XSLT. Cut out the middleman, mere mortals don’t need to edit this stuff!
Cut to creating a set of objects for your domain objects. You need your teams:
class Team:
def __init__(self,teamName,teamAbbrev,shirtColor):
self.name = teamName;
self.shirtColor = shirtColor;
self.abbrevName = teamAbbrev;

Some games:
class Game:
def __init__(self,time,field,team1,team2,refs):

Get the whole messy code here (note it doesn’t handle forfeits yet).
Throw in some other classes and some logic, now you’ve got a half-assed scoring system! Data entry is totally a breeze, I mean look at this, total user friendliness:
day2 = Day("9/8/2005",ppe,ppe)
week1.addDay(day2)
game = Game("8:00","A",baggers,ppe,freeballers)
game.addResult(Score({baggers:4,ppe:2}))
day2.addGame(game)
game = Game("8:00","B",spanking,ballsdeep,gentree)
game.addResult(Score({spanking:2,ballsdeep:2}))
day2.addGame(game)

Get the season so far here.
Great! Now we just wire that up to our template engine, and then its margerita time!

Not so fast! Now you discover that, at best, the Velocity support for Jython is experimental, and for some reason your download seems to think its 1.31 instead of the 1.4 you’re sure you downloaded, which doesn’t support Jython at all! (Discover this after spending hours the night before debugging, thinking you were doing something wrong) Now you consider moving to straight up Python and using the Cheetah template engine, but you become aware of FreeMarker through the flame-war inspiring intervention of one of its’ developers in the velocity-users mailing list. Syntax is similar enough, and it supports Jython! So you finish building out the scoring system and create some sweet templates for your standings page:
-snip-
< #assign num=1>
< #list standings as s>
<tr <#if ((num %2) = 0)>class="shadedrow" >
<td>${s.team.name}</td>
<td>${s.W}</td>
<td>${s.L}</td>
<td>${s.T}</td>
<td>${s.RD}</td>
<td>${s.GP}</td>
<td>${s.F}</td>
</tr>
< #assign num= num+1>
-snip-

Get the rest of the standings template and the schedule template.

Wrap it all together with a small driver to load the templates, crank up the freemarker engine, and write out the output as I did here. (Note apparently the JythonWrapper is not really needed – i was chasing a bug with java dates that has since been fixed)

Now we’re almost done – one of these days need to convert the templates of the static pages to freemarker (or freemarkerpp) and then we’ll really be done – for now we’re done enough. Now keeping the scores and standings updated is breathakingly easy! It only took an order of magnitude more time to get this all written and working than it would have taken to actually do the manual edits over time. Oh well, that’s just the way we engineers roll I guess.

Thanks to the velocity-users group for their help trying to get Jython to work for me, as well as Jonathon of the FreeMarker project for introducing me to his project and providing a push in the right direction getting my system working, as well as responding quickly to a problem formatting java.util.Date objects embedded in jython objects.