Tuesday, March 31, 2009

$20 Million Speach

A very young Fred Rogers appearing before congress to argue for $20 million in funding for the Corporation for Public Broadcasting.



They don't make them like Fred Rogers anymore.

Chopping Firewood is Remarkably Therapeutic

We had a tree service take out a couple of trees last week. We now have [more of] an abundance of wood.

This is the first year I've split the firewood. In previous years, the wood that we've trimmed from our trees has been small enough to burn on their own. That is not the case this year.

Prior to Sunday, I had never split wood. I picked up an axe, a wedge, and an 8 pound sledge. The axe works well enough on the small stuff. I'm going to hold off on splitting that for a bit. I'm having way too much fun with the wedge and sledge on the bigger logs.

It's nice exercise. I get to spend time outside doing something that requires little from the mental faculties. The funny thing about chopping wood is going to the gym afterwards seems more like a break instead of the burden that it usually seems to be. Stairmastering 40 flights was almost easy, almost.

Friday, March 27, 2009

Wednesday, March 25, 2009

Capital One Credit Card Lab Commercials

What is Capital One trying to say about the people who use their credit card lab in their commercials? There's the ship captain whose craft is being attacked by a giant sea monster. There's the castaway who uses his computer not to arrange a rescue, but create a Capital One credit card.

Is Capital One trying to say that if you're a person who literally cannot make a good decision to save their life and gets preoccupied with shiny objects that they should consider opening a line of credit with Capital One. Are they trying to say that no matter who you are, you aren't too stupid or too irresponsible to own a Capital One credit card? I'd really like to know what the message is that the commercials are intended to communicate.

Tuesday, March 24, 2009

Clojure Documentation

ociweb.com has a very extensive guide to Clojure.

I haven't done anything useful with it yet, but playing with it is fairly easy. I really am looking forward to doing something cool with Clojure.

How do I put this in a continuous loop

This is television at its finest.

Sunday, March 22, 2009

Generation Loss Of JPEG Images

This is a nice video showing how JPEG compression loses detail over 600 generations.


Wednesday, March 18, 2009

Spring Project: Rainbarrels

Installing rain barrels and a rain garden is something that we've wanted to do for a couple of years. My biggest concern with getting rain barrels is they seem to be unnecessarily expensive. Most of them sell for around $100 each or more per 55 gallon barrel.

I'd prefer to start with a storage capacity of over 100 gallons. Over 200 gallons would be ideal.

I'm going to try asking some friends if they know where I can get used 55 gallon containers. I'm thinking that there may be some companies that deal with used industrial containers. My only concern with that route is making sure that the containers weren't used for containing dangerous contents.

The other part of my project is looking for a native species of grass to replace our current lawn. I hear that there are some nice grasses that require less water and maintenance.

This diversion should keep me busy for a while.

Monday, March 16, 2009

No Fluff Just Stuff Twin Cities Spring 2009 Review

The Spring 2009 Twin Cities No Fluff conference was last weekend. I enjoyed the weekend seeing old friends and learning new things.

I have to give out some gratitude to Jay Zimmerman for putting the conference together and running the show. Every conference I've gone to has appeared to run flawlessly.

My experience in the sessions was excellent. I spent the first day listening to Ted Neward's talks about Java Platform Security and what we might see in Java 7.

For Java 7 it looks like there will definitely be significant performance improvements. Chiefly, the introduction of the G1 garbage collector seams to be generating the most buzz.

Java Platform Security is something that have been largely unaware of. Neward did a good job explaining some of the Java security APIs and how we can implement them in our applications today to make our applications less vulnerable to malicious attacks. One thing that stuck out as a good practice is to run a comprehensive set of tests on a Java application and see what permissions are needed and then modify the security policy to accommodate only those necessary actions.

I commented that the security session was a little bit dry. One of my friends commented that if I said it was dry it must have been...well what do people think of me?

Neil Ford gave his keynote "On the lam from the furniture police." It's a great talk. That was actually the second time I've heard it and it was just as much fun the second time as the first.

Day 2: Stuart Halloway's Programming Clojure talk left me very hungry to give Clojure a spin. I like what I see in Clojure over Scala. Both languages have me interested though. The things I really like about functional languages is the simplicity in which they express functions. Functional programs take very little space to express function. The example Halloway gave reduced a 10+ line method from Apache Commons into a single line of Clojure.

One question that came up in the functional language discussions is: when are the functional languages going to become the killer app? The need for functional programming seems to revolve around concurrent programming and multi-core CPUs. My thoughts are this: right now 2-4 core systems are common. By using only a single core we're realizing roughly half to a quarter of our systems' potential. I think that when 16, 32, and 64 core systems are more common, then we're only going to realize 1/16, 1/32, or 1/64 of our system's potential. Something amazing is going to realize that potential and at that point I think the bandwagon will begin to fill.

The next session that I found to be very informative was Ken Sipe's Java Memory, Performance and the Garbage Collector. Great content and great delivery. Ken Sipe is becoming one of my favorite speakers on the tour. Java memory management is something that I admittedly have treated with the cargo cult mentality of setting the -Xmx to 1Gb and hoping that the Out of Memory errors go away. I had never heard of tools like visualgc, but I think it will be in my tool box of Java memory tools. It's a very cool JVM memory monitoring tool. I think that a lot of the mystery behind the garbage collector will not be so mysterious anymore.

I attended Ken Sipe's Hacking-The Dark Arts. Hacking/security is an interest of mine so some of his content was not new to me. It was a good refresher on some of the more common security vulnerabilities--SQL injection and cross site scripting.

On day 3 I enjoyed Mathhew McCullough's Git talk. I've heard great things about Git and I'm even using it as a source repository at home. I'm really not using it effectively though. I think that I will be much more effective with it now.

Neil Ford's Domain Specific Languages and Regular Expression talks were very informative to me. I think that both of them gave valuable content.

I concluded the conference with David Hussman's talk on Lean agile development. If there's a speaker who knows how to end a conference on a nice tranquil note it's David Hussman. I always leave his talks feeling far more relaxed than anybody else.

The takeaway that I'm getting is what I've suspected in the agile space. It's getting crowded with people who don't understand what they are doing. I don't know how I feel about it. On one hand, people are improving the way they work and realizing tremendous value from adopting some of the agile practices. On the other hand, people are doing 'agile' things that don't make any sense to them and poisoning agility within their organizations.

Another thing that occurred to me is none of the new agile practices are all that new. They're only new to the space of software development.

I've been mulling over what will be the next thing in software development practices. I'm trying to think beyond agility. I don't know what it is, but I think something new is needed. I think it will need to involve more of an organization than just the business users and development.

I'm still digesting the conference experience as a whole. I enjoy NFJS, but I'm beginning to wonder which conference will be the first one that I take a pass on. I didn't decide to go to this one until I saw the schedule and decided that I could find a valuable session for each time slot. I don't know if that will be the case this fall. It will be hard to determine whether there is enough new content to justify going.

One thing I'd like to see are more sessions with deeper content. I'd like to see more 2 part or even all day sessions that really have a deep explanation of topics. The 90 minute expository sessions are good for some things, but I feel like I'm at a point where I want to come out of the conference really understanding the content. There were too many sessions where the content was abbreviated for time.

I found the conference to be valuable. I thought that all of the sessions that I attended were worth attending.

Thursday, March 12, 2009

Nice Collection of Retrospective OS Desktops

Webdesignerdepot has a very nice collection of Operating System Desktops.

They missed one that I used to use on my old Commodore 64, GEOS.

Regardless of that nit, it's a nice list.

Tuesday, March 10, 2009

Sleeping Dog + Run = Funny

Removing a NOT NULL constraint on a table

Solution:
ALTER TABLE [TABLE] MODIFY [COLUMN] VARCHAR2(20) NULL

Context:
We had the following situation: we had a table that has a NOT NULL constraint on one of the columns and we wanted to remove it.

As Java developers we were not well versed in how to add and remove constraints on an Oracle database. We know how to do the regular stuff, but when it comes time to do administration type things we need to do some research or get help from our DBAs.

We asked the DBAs how we can remove the NOT NULL constraint on a table. The DBA said that it would be tricky because she removes constraints by name. The constraint names are globally unique for each database instance.

Each developer is running a separate database instance. The test and production databases are also their own instances. We have a set of scripts that set up our database schema with each build. Since our intention is to promote these scripts all the way to production; ideas like dropping a table and adding it, aren't met with much enthusiasm.

The direction from our DBA was to remove the constraint by finding the constraint name in the USER_CONSTRAINTS table.

I think that would have worked if there weren't 5 not null constraints on the table in question. There were 5 constraints on that table that only differed in the SEARCH_CONDITION field. SEARCH_CONDITION is a long data type. Oracle does not allow using data from a long in where clauses. They do allow IS NULL and IS NOT NULL in where clauses on long data types. I did see that the other constraints on that table all had a null search condition. I thought about how I could solve this dilemma: I could wipe out all the NOT_NULL constraints and then add the ones I wanted. There were only 5 of them on this table.

I thought about using something like: DELETE FROM USER_CONSTRAINTS WHERE SEARCH_CONDITION IS NOT NULL.

I then wondered how I'd add the constraints back. That seemed really messy. I also ran across a DBA website that had sql that looked a lot like what I was thinking, but it looked like they were using it as a punchline.

I thought I might need to take a different tact. So I prayed to google--oracle add constraint not null

Hallelujah answer number 5.

That's when I found this wonderful page. Thank you Frozenmist from Bangalore. You made my afternoon.

No Fluff This Weekend

It's hard to believe that it's time for the Spring Twin Cities No Fluff Just Stuff Conference this weekend.

I've been looking at the schedule trying to decide what sessions I plan to attend. I think I'll follow Ted Neward's sessions on Friday. On Saturday I think I will attend Neil Ford and Ken Sipe's sessions. I know better than to even think about what I want to attend on Sunday--I will probably get interested in something else and attend that instead. But as of now I think I'll probably attend one of Nate Schutta's sessions and one of David Hussman's.

This will be an interesting conference. I would be surprised if it sold out in this economy though. There are rumors that many of the area employers are cutting/eliminating their training budgets. I can respect the decision, but I still think that people are paying a tremendous opportunity cost by not attending.

This will be my fourth No Fluff conference. Each conference I've attended has significantly helped me become much better at what I do. I'm willing to invest a full weekend of my life to attend the conference because I believe the value is outstanding.

Monday, March 9, 2009

Looks like there's one thing this perp didn't count on...

And that, my friend, is a sound appreciation for quality UV protective eye wear...

click on this link and click the picture on that page.


Ok, no need to watch that show tonight.

Tuesday, March 3, 2009

Getting Quick Answers by Giving Them

Our business analyst was having a difficult time getting responses from one of our users. I think it's partly because of the way that he's asking the question.

I can't go into detail about what he's asking, but it requires a detailed response. The development team can make a pretty good guess at what our business partners will want, but we can't say for certain.

Asking for the detailed response yielded nothing for weeks. It became clear that the business partner wasn't going to respond on his own.

To accommodate for this I suggested that we reframe the request with an example of how we think that they might want it. We'd essentially be answering our own question or at the very least be leading the witness. After we presented the reworded request the business partner requested a small change and approved the requirement. Like that, it was done and we could work that feature.

The irony of this requirement is it wasn't anything that was all that important to anyone. It was a necessary piece of our project. It just wasn't important enough to our business partner to prompt him to specify what he wanted into a detailed document. It wasn't important enough to the development team to write up a suggestion. It just sat out there and both sides of the team deferred specifying the requirement, and some people became frustrated with the lack of progress on this issue.

It's ironic that we could have escalated this issue into a blamestorm when all it really took was for a developer to sit down with the business analyst and write up a short document outlining a proposal. That's all it took for the business to sign on.

There are some people who feel that the individual should have done what was asked of him. That really isn't my concern, I am not his manager. My concern is getting our project done. If it takes a little extra effort on our side, I take no issue with that.

Monday, March 2, 2009

What a difference a bowling ball makes.


I finally purchased my first bowling ball last week. I highly recommend that any person who enjoys bowling purchase a ball. The difference between a house ball and one that is fitted to your hand is worth the price.

I participate in a men's league as an alternate. I bowl about once a month, and I've consistently bowled between 115 and 140. I could usually count on picking up a few strikes and a few spares. There were some nights when I was very good at picking up spares, and others when it was difficult.  That was with the house balls.

I never considered myself invested enough in bowling to buy a ball. Compared to other sports equipment, they aren't terribly expensive. I was able to pick up a ball and a bag for less than $200 at a local pro shop. On the recommendation of my team mates I had my ball drilled for a fingertip grip or hook grip. Before that I used to throw a straight ball with a very slight hook.

It didn't take me long to adjust to the hook. I read somewhere that bowling a hook is a similar motion to throwing a football underhand and then answering the phone as a follow through. I worked on throwing the football and answering the phone. 

It took a couple of games for me to adjust to the new ball and the new style of bowling. I think I bowled a 136 and a 121, which were pretty normal for me. I was getting more strikes than I normally did though. I had six strikes in two games. The biggest problem I had was open frames though. I couldn't pick them up with the hook. In the third game I had the football telephone movement down pretty well. I threw about 6 strikes in the third game. The big difference in the games though came from picking up my spares. I found I could throw a very accurate straight ball with the new ball. By throwing a straight ball for my pick ups I only left a single open frame when I failed to pick up a split. 

I bowled the best game of my life with a 187. That was nice, but the real prize from that is the sense of control I felt with that ball. It does what I want it to. I never got that feeling with house balls. I'd try to use them consistently, but a good degree of chance would come into play. I think most of it had to do with the way my fingers gripped the ball. The holes didn't fit my fingers well. My fingers usually would get sore and my third game was consistently my worst game. The ball would hook and fade wildly. It really made bowling feel like a gamble.

I don't feel that way with the fitted ball.

This is actually the second time I've bowled with a fitted ball. The first time was when I was younger. I had a hand me down ball we had drilled to my hand. I played in a summer league as a kid. I wasn't great, but I did learn how to consistently release a straight ball that would strike. Back then I felt like chance played little to do with how I was bowling, most of the variance came from fatigue. It's nice to get back to that state of control.