Haskell Adventures #1
Ok so Haskell is now my new interest and I have been reading the Real Work Haskell Book and so far so good. Wrote my first haskell program that I am satisfied with.
data Tree a = Node a (Tree a) (Tree a)
| Empty
deriving (Show)
treeHight Empty = 0
treeHight (Node _ Empty Empty) = 1
treeHight (Node _ x y) = 1 + max (treeHight x) (treeHight y)
Mountain West Ruby Conf 2009
Just registered for the Mountain West Ruby Conf 2009, I am very excited. I went last year and it was a lot of fun and Salt Lake City itself was nice too.
Deleting those pesky RFC-822 in-compatible emails with Ruby
If you have landed on this post from Google you already know what I am talking about, if not read the below intro.
I work for an “Enterprisy” company, so the standard here is using the exchange server and I am on Linux using thunder bird. Every once in a while I get those emails that the exchange server cannot convert to an RFC-822 compatible format and thunder bird chokes on em and even the web mail cannot handle these, the only solution so far has been going to the web mail and selecting the mail and moving it to trash.
Finally I wrote a script to automate the whole thing, it telnets into the server checks each message to see if it is RFC-822 compatible and if not moves it into Deleted Items, you can find the script here. (It’s on GitHub feel free to fork it)
Usage ruby telnet-imap.rb <server> <username> <password> <dryrun>
All arguments are self explanatory, dry run can be y/n
PS : if you mange you blow up your inbox you are on your own!!
UPDATE (2010/03/12): Looks like this has taken a life of its own, please see the comments to find a better/newer versions in different languages.
Learning Debt
Many of us in the IT industry know the term ‘Design Debt’ James Shore defines it as “Design debt explains the problem. When a team is working under pressure, they take shortcuts that compromise design quality. It’s like taking out a high-interest loan. The team gets a short-term boost in speed, but from that point forward, changes are more expensive: they’re paying interest on the loan. The only way to stop paying interest is to pay back the loan’s principle and fix the design shortcuts.”
I would like to coin a new team ‘Learning Debt‘ (if not already defined by someone), every week (if not every day) that you let go without learning something you have just increased that debt.
Conferences and books are excellent way to cut down on that learning debt. I find another really good way to keep it down is by joining or creating a groups of like minded individuals and having interesting conversations (after all what is life without interesting converstaions ? don’t know but it would suck), think about it as a gym buddy just as having a gym buddy helps you stay on track.
Don’t want to talk about the dangers of letting this debt get out of hand you probably already know it loss of freash ideas, mind rot, loss of job……
Internet Traffic Begins to Bypass the U.S
Internet Traffic Begins to Bypass the U.S, This article was published in NY Times
“The risk, Internet technologists say, is that upstarts like China and India are making larger investments in next-generation Internet technology that is likely to be crucial in determining the future of the network, with investment, innovation and profits going first to overseas companies.”
Remeamber the year 2000 bug and most developing countries did not have to worry since most of there systems were newer amd already handled that issue. Now with new Internet technologies going to outside US sounds like there is going to be a repeat.
Chrome
Since I read about Google’s Chrome I can’t help but think, would Google’s V8 Javascript VM be a better choice for implementing dynamic languages like Ruby than the JVM ?
Some links
http://blogoscoped.com/archive/2008-09-01-n47.html for high level details
http://books.google.com/books?id=8UsqHohwwVYC&printsec=frontcover#PPP1,M1 this comic book goes into details about how they developed it and tested it and technical details about the new browser.
(Shallow Reader) So True
http://googlesystem.blogspot.com/2008/08/shallow-reader.html is so true, wish there was a reader that does not show how many things there are to read just let things flow like a tap, I should be able to open any tap and read as much as I want and close it off and then there would be no pressure to catch up.
What do you not like about agile?
Somebody recently asked me, “What do you not like about agile?”, I thought about it and here’s what I think.
My first pet peeve, this is not something wrong with agile, but more to do with the literature on agile and its proponents, they do not stress enough on the fact that this is not a buffet of practices where you pick and choose what practices you want to follow and discard others, just because they are inconvenient. And if you do choose to not follow all of the practices then please don’t call your self agile, you are giving the rest of us a bad name.
EX:
- You decide to “refactor mercilessly” but forget to write test cases or test before and after.
- You have no daily builds all the members of you team integrate just before the release.
- You have decided to no longer design/document anything and start hacking away code (without test cases or customer involvement or acceptance tests) you are not agile, you are in fact following the “Trial and Error” methodology.
Another example “Our development budget will run out at the end of the year so lets get all the development done in the next two months and during the maintenance phase add the unit tests”. Yes this is a real statement from one of my ex managers, no kidding. It took us a year to recover from this.
And then you hear complaints like “Why is XP not working?” well if you weren’t screwing around with it will.
2. Customer representative, Agile recommends that we have one customer representative who will be talking to the customers and talking to the team. What XP forgets to tell us here is this customer representative better be darn good.
Here is a real life example, I worked in a team where the customer representative role was played by the Team Lead, this team lead was previously a brilliant programmer so ofcourse he was promoted to a team lead and everyone assumed (ass-u-me) that he will also be brilliant in managing the customers/stake holders. Every weekly meeting he had with the stake holder was a mess. Our weekly goals depended on which stake holders attended the meeting, so we kept switching from one priority to another 6 months went by, we did keep giving releases every 2 weeks with bug fixes but non of the priorities ever got done.
When you have multiple stake holder/customer it is natural that there will be different priorities, but if we are constantly changing priorities every week nothing will ever get done.
I heard a talk given by Scott Ambler on evolving agile (which you can watch here ) this talk really drives home the point. When there are multiple stake holders there will be a lot of politics going on at that level. They may not have your best interest at heart!! Someone needs to manage the expectations and also when 2 customers want 2 different priorities, someone needs to step in and manage the priorities.
So there are 2 of my pet peeves with agile, I think agile is good (numbers don’t lie survey shows that 75% of agile projects succeed), but we can improve a lot by making somethings concrete like how you define an agile project, who should be in the role of the customer representative.
Introducing Jalds
Most of my friends already know this, just making it public I have been working on an open source project lately it is called JALDS (java algorithms and datastructures) it is a repo of reusable algorithms and datastructures. I see a lot of similar packages in C ( most notable LEDA ) but not in Java so this is my attempt to build one. Check it out at http://code.google.com/p/jalds/ its all in svn and uses maven.

