Contact info.
 
My Secret Life as a Spaghetti Coder
home | about | contact | privacy statement
Why did Keynes’ promised utopia – still being eagerly awaited in the ‘60s – never materialise? The standard line today is that he didn’t figure in the massive increase in consumerism. Given the choice between less hours and more toys and pleasures, we’ve collectively chosen the latter. This presents a nice morality tale, but even a moment’s reflection shows it can’t really be true. Yes, we have witnessed the creation of an endless variety of new jobs and industries since the ‘20s, but very few have anything to do with the production and distribution of sushi, iPhones, or fancy sneakers.
from "On the Phenomenon of Bullshit Jobs" by David Graeber

Graeber discounts consumerism as the reason we work so much, with the proof being that very few of the jobs we've created have to do with producing products, the purchase of which we might consider typical examples of consumerism.

I don't purport to know the right answer here, but I also don't see how you can mention consumerism on one hand, and fail to see that if the consumerist theory is close to reality, then all of the jobs we've created would be for the purpose of obtaining those products, not for the purpose of building them.

Nevertheless, it was an interesting read, so you might check it out.

Hey! Why don't you make your life easier and subscribe to the full post or short blurb RSS feed? I'm so confident you'll love my smelly pasta plate wisdom that I'm offering a no-strings-attached, lifetime money back guarantee!



I noticed a couple of behaviors in myself that I exhibit when browsing social media sites like Digg or reddit. (Let's leave the relative quality of articles and discussions out of this for now. At least for the programming, reddit wins, hands down.)

The first one is that I tend to be more interested in seeing what's hidden behind the "comment below threshold." Usually, it's asinine, but sometimes it's not.

Then I noticed myself voting with my opinion - up for things I agree with, and down for things I don't. The problem with doing that is if enough people disagree with a comment, soon enough no one else will see it.

So I'm going to start upmodding any comment that has merit, even if I don't agree with it. I'll reserve downvotes for the comments with no value. Anything else is slight encouragement to the poster to change his view to match the group.

Do you think the voting structure is subtly training commenters* to think like the group? If not that powerful, do you think it influences them to share only those opinions and articles they think the group will agree with?

* I know it's spelled wrong, but they aren't really commentators in the common sense of the word, are they?


Lately I've been thinking about which charit[y|ies] I'd like to endow with $100 million dollars when I make my first billion. I know that sounds stingy, but considering the tax comes out first, that billion shrinks rather quickly.

Before I continue, I want to make it absolutely clear that I'm not endorsing any of the following charities, and I have not researched how well they do their purported missions, so they could be frauds for all I know. I just want to discuss the ideas.

Naturally, I wanted to look for computer-related charities, and more specifically, those with a focus on programming. I first browsed a couple of charity-ranking websites and didn't find anything that I was searching for.

Everyone knows about One Laptop Per Child, whose mission is to educate children in developing nations, who otherwise wouldn't have as much of an education, by providing them with a low-cost, low-energy required laptop.
OLPC is not, at heart, a technology program, nor is the XO a product in any conventional sense of the word. OLPC is a non-profit organization providing a means to an end - an end that sees children in even the most remote regions of the globe being given the opportunity to tap into their own potential, to be exposed to a whole world of ideas, and to contribute to a more productive and saner world community.
On a bit of a smaller scale, I found Computers With Causes, which like so many charities who will let you donate your car, take your donated computer and turn it into good for charitable purposes. Mac Heist puts on a two week bonanza of a sale and donates proceeds to the charity you choose. That's a start, but we could do better.

There is another group, charityfocus, which lets you volunteer your time to help build websites for different charities. That certainly sounds interesting, and more to my point - but it's not quite there.

These are all noble goals, but I'm more interested in a cause that's closer to home, one where technology is not ancillary, but where it is part of the goal. So, I thought I'd do a domain search and start one myself. One of the domains I entered was code4cause.org, but it turns out they're already doing some good work. They don't teach children to program, but they do take on your IT projects and donate proceeds to charities.

I was surprised I wasn't able to find more than what I did. Are programmers that selfish?

Of course not. We donate a lot of our time to open source, for one thing, and I'm sure there are plenty of us who have our favorite causes that aren't computer-related at all.

I like Code4Cause's mission - that would let programmers donate their time to projects and convert that into money to send to charity. But, Code4Cause is based in Europe and Asia, and I'm more interested in something closer to home (which for me, is the United States). What are U.S. software developers doing?

I don't know, but I wouldn't mind seeing something like Code4Cause in the US. Or, at least it would be nice if we could donate the money our time produces to whatever organization we chose. Ideally, I'd like to see something where programming is more of the point, but I'm not sure how it would work. Even if coding remained auxillary, something like Code4Cause would be still be great.

Anyway, where are the coding organizations? Do you know of any I haven't listed? Share them below. Interested in trying to start one yourself? Let me know privately, and if there's enough interest, maybe we can figure out how to start an organization, and what we'd like it to do.

Sorry I don't have any more answers - I'm just fleshing these thoughts out, and throwing them out there to see if it helps.


When I was younger I was "an arrogant know-it-all prick" at one point in the "middle years" of my programming experience, as many of you know from the stories I often relate on this weblog.

The phrase "middle years" doesn't give us a frame of reference for my age though. For instance, if I were 50 years old right now, my "middle years" of programming may have been when I was in my thirties. That's not the case, and I want to give you that frame of reference: I'm 28 at the time of this writing. The middle years as I talked about them would have referred to my late teens to early twenties. Maybe even up to the the middle of my twenties.

Old or young? By most standards, that's young.

And I know a thing or two about being set in your ways. We can all see the laugh I have at myself with the title here being "My Secret Life as a Spaghetti Coder" and some of the stories I've told as well.

In fact, let me add to the wealth of stodginess, idiocy, and all around opposite-of-good-developerness here:

I once said I preferred Windows to Linux. While that's not a completely shocking statement, the reason behind it was: I said I preferred Windows because 14 year olds work on Linux. Not because of any experience I'd had with it, but because of my fear of learning it.

Like with operating systems, your ignorance does not make a programming language suck. Although I've been tempted to say .NET sucks because of my early troubles with it, I've refrained, admitted my ignorance, and asked for help removing it.

Because of my prior experience being unwilling to learn, I was quite interested when I read this:
When you are young, you don't have that sense of self to protect. You're driven by a need to find out who you are, to turn the pages of your biography and see how the story turns out. If people around you are doing something you don't understand, you assume the problem is your inexperience and you go to work trying to understand it.

But when you are old, when you know who you are, everything is different. When people around you are doing something you don't understand, you have no trouble at all explaining why they are assholes mistaken.

. . .

If you want a new idea, you have to silence your inner critic. Your sense of right and wrong, of smart and stupid works by comparing new ideas to what you already know. Your sense of what would be a good fit for you works by comparing new things to who you already are. To learn and grow, you must let go of you, you must be young again, you must accept that you don't understand and seek to understand rather than explaining why it doesn't make any sense.

In a couple of paragraphs, Reg sums up almost precisely some of what I've been thinking and writing about for the last several months. He's so close, but misses a fundamental point: the old and young parts are incidental.

My hypothesis is that the level of learning and idea absorption you can attain has little to do with age. Instead, it is influenced more by your perceived level of experience. Normally, age is highly correlated to experience - but it doesn't have to be. In my case, when I was younger I thought I knew everything. Now that I've aged, I came to the realization I know very little.

My conclusion is not that different from Reg's, and this is not some scientific experimental contest, so let me explain why I feel the difference is worth noting: If we blame our reluctance to try new things on age, we are dooming ourselves to think of it as some unchangeable, deterministic process. By thinking of it in terms of perception of experience, we admit to being able to control it with more ease. (My belief is that we have control over what and how we perceive things.)

In other words, we lose our ability to blame anyone but ourselves. That's a powerful motivator sometimes.

Thoughts? Disagreements? Please be kind enough to let me know.


But do I belong to the company I work for? No! Never!

If that means I'm doomed to walk the Earth for eternity writing code and building beautiful ideas, then that's ok.

No matter how much my job makes me happy, my family and my life outside work are just as important and more. Obsessing about anything is not good. Moderation is good. Do everything well but know when to stop. Do your job well but remember to go and hang out with your friends. Put down the mouse and call someone to go out. Liking your life outside work does not mean you suck at work. It means you are good at living.
-Damana Madden, You don't own me, I'm not that kind of girl anymore

As often as I talk about working hard to "save your job", I thought it would be worth a moment of our time to consider who you really work for, as opposed to the idea of working for the one who pays you.

A Chain Gang

You are not a slave, nor are you a convict, imprisoned and forced to work at the behest of those who've put you in chains.

You work for yourself. Your family. Perhaps out of some sense of duty to a friend. But it always comes down to your decision.

I think of my employer(s) as customers of mine. The difference between us is that I not only represent myself to my direct customer, I represent my employers to their customers as well. And don't get me wrong - I still feel like a very big part of the team. I want my customers to be successful, because when they are successful, I am too. But I don't let myself feel trapped: It's the hard work I've put in that allows me to know I can leave whenever I need to. It allows me to know I'm not chained to my current position.

If I don't need a customer, I can always politely tell them I cannot continue to serve them. On the other hand, if I feel beholden to the man who pays me, I cannot easily find another job. It's a matter of outlook. Your attitude determines your quality of life, so change it if it's not working for you.

Be professional, but don't be a slave.

Don't let your managers or your peers pressure you into working 80 hour weeks all the time. Don't let them refuse to ever approve your vacations. It's not some geek badge of honor to work like the robots we'd like to build. Instead, it's ridiculous to try to keep up that pace. Remember Damana's words: "Liking your life outside work does not mean you suck at work. It means you are good at living."

Check from Donald Knuth
Note: The source of this image asserts that the routing and account numbers on this check were randomly generated.

It's good to be good at work. I think I'm there. But now I want to start getting better at living.

As always, your thoughts and comments are welcome and appreciated.


As you may have noticed, I try to stay on topic here and keep the announcements and meta-blogging to a minimum. However, every once in a while I think it's OK to break that rule, and today is one of those days. And hey, there's a giant OT in the title for you to let you know you can skip it if you don't care, right? =)

I'm getting married today. For those of you who know me well, you know its been a long time in the making. We've been dating for 7 years and engaged for two-and-a-half. So I can say with some confidence, "it's about time."

Now that I finished graduate school and we're getting ready to close on the house we had built, last year some time we decided it would be prudent to add to all the stress, so we set a date to coincide with all the others. I guess the masochistic side of me craves the pressure.

As a consequence, I'll be spending some time away from the computer and instead spending it with my bride, so you won't see any posts here next week.

Anyway, thanks in advance for your thoughts, prayers, well-wishing, or any other positive energy you'd like to send us newlyweds.


I was curious to see how many WTFs are in programmers' code and compare it across languages, so I wrote a script to figure it out using github as the source data.

I couldn't figure out a way to do it using github's API, so I had to screen scrape the search instead. Therefore, as the markup on that page changes, it will break the script. But, you can fork it and fix it later if you'd like.

Another caveat is that I used the search string 'a' to determine the total number of repositories for a language. If you have a better way to get the actual number, or maybe just a more common letter we could search for, feel free to share your ideas!

Below, you'll find a graph of the WTF's per repository by the most popular languages on github. I used only the most popular languages because it was a PITA to try and size the graph using Google Docs to include them all.

However, you can get the raw data for all languages if you want to play with it yourself. Any thoughts on how we can improve this? What's your analysis on how we can interpret the data?



Let me make a request for help and a quick announcement, and then I'll get you back to your regularly scheduled on-topic reading:

I need a good C/C++ IDE
I've been doing a lot of work in C++ lately for bioinformatics, and DevC++ is just not going to make the cut. My friend Michael suggested I use Visual Studio, but I thought I'd throw this out there and see what everyone else thought and try out a few more.

I'd like it to work on Windows, but I wouldn't mind hearing some Mac choices for the fun of it. Ideally, it would have a lot of the features of IntelliJ IDEA, but if it's not that awesome, I could probably get by. DevC++ is just broken for me. I won't go into too much detail, as I think those guys are providing a good service and I'm not helping them out myself, but sometimes headers get that do long has been the least of my troubles.

I'd like to know of both free and paid versions.

I'm on Twitter
I've finally started using my twitter account. I started the account a while back, but never really "got it." I guess the other day the light bulb went off in my head. It's like email + IRC + instant messaging + blogging all in one.

Anyway, if you're on twitter and want to start following me, I'll get notified and probably start following you as well. Of course, if I start getting too many updates, I'll randomly stop following some people. Try not to take it personally if that happens.

I try not to give the minute details of my life like "I just woke up" or "I'm voting for so-and-so." Instead, I've been trying to stay on topic of this blog (programming and technology), but with small thoughts about whatever I happen to be working on. Of course, you'll find some responses to other people won't always be on my main topic.

I hope to see you on there. And if you can help in the C++ IDE department, please let me know!


I recently got the EEE Box "Nettop PC" (Linux version) and was surprised to find Red Flag Linux as the preinstalled flavor of choice. My goal is to use it as a wireless NAS, but keep it both expandable with external drives and available for use in home automation.


source code for r-house available via github

More...


You might think that "tech support" is a solved problem. You're probably right. Someone has solved it and written down The General Procedures For Troubleshooting and How To Give Good Tech Support. However, surprisingly enough, not everyone has learned these lessons. And if the manual exists, I can't seem to find it so I can RTFthing.

The titles of the two unheard of holy books I mentioned above might seem at first glance to be different tales. After all, troubleshooting is a broad topic applicable to any kind of problem-solving from chemistry to mechanical engineering to computer and biological science. Tech support is the lowliest of Lowly Worms for top-of-the-food-chain programmers.

More...


Because I've got too much to do this morning and an old partner in crime sent an art pack from September of 1996 to me yesterday, I'll share some of my old art with you today.

I was in a couple of art groups, but I never really left the 713 (and later 713/281, and then 713/281/832) scene: MAD, PEZ, Jive are the ones I remember. My handle was deathrai (and I often tagged pics with "d" or "d!"). There are others with my name nowadays, but there was only one of me then. Anyway, here's some of my art. I hope you enjoy it. You can click the images to see the full-size version.

This was a flyer for AnsiCon, which we held at Woodlands Mall a couple of times. We also had a PezCon at Willowbrook one year. It seems mall security was always involved in those things. I once wrote a skapunk song about it called "Misplaced Priorities."



Here we have a menu for a board called Nitrous Oxide. I don't remember who the sysOp was:



I had a Save the Sheep foundation, and promoted it in a couple of bigger pictures. This one was for a board called Pandora, whose logo was cut off at the bottom:



We have here a skinhead that was done for another BBS called Shadows of Darkness:



Sometimes the SkinHeads Against Racism and Prejudice would come to our punkrock shows and start fights with antidisestablishmentarism punks. I normally got along with them though. Once, when I was stuck in the mud in some guy's yard, a group of them brought their truck and tried to pull us out. They ended up getting stuck too.

I've also been paying attention to Sixteen Colors since the same friend who sent me the pictures above pointed me to it a little while back. To prove to you how k-rad 31173 l338 (I was more than 1337) I was, you can see I was greeted in the AvengeView documentation in the same paragraph as RaD Man.

When I first went there, I couldn't find any of my art even though I did find myself in a lot of greetz. But when I went back today, I did find some. Looks like someone uploaded a few art packs from MAD. A couple of pictures I couldn't find through the Sixteen Colors search, but they did come up through Google. If you can't tell, I rather liked drawing cartoons. Here's an alien with his hand down his pants:



You might think his hand is down his pants because I was trying to be funny (I was 15 - juvenile humor is funny at that age.) But it wasn't that I was trying to be funny, so much as I thought a two-hook-hand alien would be less believable than a one-hook-hand alien. And since I couldn't draw hands very well (still can't), I hid the other one in his pants.

This one is my favorite on Sixteen Colors, found through Google:



Were you ever in the art scene? Who were you? Got any art to share?


There was once upon a time I held some affinity for Expert'sExchange. I tried hard and succeeded at becoming an expert. I thought it might look good on a resume and in fact I got a few offers of job and freelance work from it. More...


Lorenz Cuno Klopfenstein, a "mosty web developer," who decided to use C++ to run a light show for his brother's band. The series of posts linked to there describe that experience. Here's what he had working by the end of the contest: More...


Many among us are fond of quoting Voltaire's observation that perfect is the enemy of good.

Micromanagers are seemingly universally loathed as "bad managers [who] are too distracted by their own egos, paychecks or insecurities to recognize how self-destructive they are."

Yet Fortune Magazine's CEO Of The Decade is Steve Jobs, who is something of an icon among hackers, is also a micromanager ("He'd say, 'The third word in the fourth paragraph isn't right. You might want to think about that one.'") and perfectionist.

How can the disconnect be reconciled?


Markus Prinz decided to put quotes from Twitter onto Tweetshirts. (I love the idea)

He set up a poll to vote on which quotes should turn into shirts, and mine came out in the top few. Here it is in T-shirt form:

Programming is hard. Let's go get drunk.

Just a little fun for your Friday. Now follow the directions and go get drunk.




This is the eight in a series of answers to 100 Interview Questions for Software Developers.

The list is not intended to be a "one-size-fits-all" list. Instead, "the key is to ask challenging questions that enable you to distinguish the smart software developers from the moronic mandrills." Even still, "for most of the questions in this list there are no right and wrong answers!"

Keeping that in mind, I thought it would be fun for me to provide my off-the-top-of-my-head answers, as if I had not prepared for the interview at all. Here's that attempt.

Though I hope otherwise, I may fall flat on my face. Be nice, and enjoy (and help out where you can!).

More...


When someone criticizes what you say or something you believe, consider your response.

It may feel natural to become defensive and attack the critic. A better response looks inward, since the criticism may be a fault in your argument, as opposed to a fault in the critic. Perhaps there's a flaw in what you believe that's gone unnoticed all this time.

Even if the critic is undoubtedly uninformed or mentally incapable, ask yourself how you might improve your evidence in a way that improves understanding.

Criticism should invoke introspection, not flame war.


Many programmers view piracy as some inevitable righteous result of the coming of the information age. We justify the theft of music (in particular in this case) in several ways:
  1. Artists benefit because the number of fans increase which sells more tickets and merchandise at shows
  2. Some ASCAP RIAA asshat wants to be paid for ridiculous things
  3. The evil record companies need to get with the times and embrace file sharing
ASCAP asshats tweet

For the record, I agree with #3, used to think #1 was the case, and I'm refusing to do business with anyone I know is a member of ASSHAT ASCAP. I'm very consciously changing my view on #1 after hearing the artists' point of view. More...


I thought it might be fun to see how others would determine the maximum size of the internet. So for a little fun today, I'm posing the question:

Letting f(t) = size_of_internet(t), where t is a moment in time, what is f(t) as t approaches infinity?

Is there an upper bound?

Feel free to use Big O notation, but justify your answer and especially any constants, variables, or functions you use.

You can use math, chemistry, physics, biology, politics, or whatever you want as justification.


I don't know how many of you have seen this, but if it saves one person some hassle or heartache, I guess it's worth the repeat here:

This is scary.

Basic idea (quoted from GNUCITIZEN):
The victim visits a page while being logged into GMail. Upon execution, the page performs a multipart/form-data POST to one of the GMail interfaces and injects a filter into the victim’s filter list. In the example above, the attacker writes a filter, which simply looks for emails with attachments and forward them to an email of their choice. This filter will automatically transfer all emails matching the rule. Keep in mind that future emails will be forwarded as well. The attack will remain present for as long as the victim has the filter within their filter list, even if the initial vulnerability, which was the cause of the injection, is fixed by Google.
You may want to check your filters, and see if there's a way to get updates as to when new ones are added or forwarded to unknown addresses.

I hate the application of it, but you have to kind-of admire the idea behind it.


Just a quick note of appreciation for all of you out there. May you have a merry Christmas and I hope the holiday season finds you with good friends, family, and in good spirits, even if you're not celebrating anything or are celebrating something else.

Thanks for an amazing year, and here's to another in 2008.

And rather than have a separate post next week, let me take the time to say "Happy New Year" to everyone on the Gregorian calendar, or any derivative of it that puts your new year at the first of January. =)

And now on to something less technical... suffix arrays.


There's no better way to say "I really don't want your comment, it's not important to me."


Even though I know many of us have a slight anti-Microsoft bias in our hearts, I'm going to go out on a limb here and ask, "Is Windows Vista all that bad?"

You've seen the Mac-PC upgrade to XP advertisement: More...


Congrats to Adrian J. Moreno at iKnowKung(Foo) with the post on learning Flex. For that, Adrian wins the contest for the iPod Nano.

It's not quite the paradigm shift in languages, but it is a paradigm shift going from "normal web" to "RIA web" going from ColdFusion to Flex + CF.

I'll be sending the iPod out when I get the address to send it to.

For the rest of you, I have a question: If you considered participating, but never sent in a submission, what was the main reason or two?

Based on the initial reaction in the comments, and knowing about 1000 people averaged long enough on the page to have read the post, I expected many more submissions than I got. Was the contest too vague? Should I have given some examples?

Those are my thoughts, but I'd love to hear yours so that more people will enter when I do it again next year.

Update: Sorry for misspelling your name initially, Adrian.


I'd like a codometer to count all the lines of code I write during the day. It should keep track of lines that get kept and lines that get removed. I don't know what that information would tell me, but I'm curious about it. It should probably work independent of the IDE, since I often use several during the day.

I'd like it if not only you would stop stealing my focus, but also provide updates in the corner of the screen. When I've put you in the background, you should let me know when you're done processing so I can come and click the "next" button. On top of that, give me an option to have you click next automatically for me.

Like 'considered harmful' being considered harmful as a cliché, I'm starting to have a distinct distaste for website or product names of the class e-removr. Or ending-vowel-removr when the last letter is an 'r'. The first time it seemed refreshing and perhaps a bit cute. By now, I'm starting to wish someone would flush them down the shittr. (Well, the names at least.)

Someone found a set of bicycle pedals that fit under the desk for me. Excellent to be able to get a little exercise while I do my morning blog-reading. I couldn't find one the last time I looked, but I did this time. I'm not sure if mine are the same, or how it will work, but I will let you know when I do.

Today is December 5th. Have you sent me your code for the contest?


Just a reminder about the contest to win an iPod Nano for learning something new: The window of opportunity is getting smaller - submissions need to be in by next Wednesday, December 5th, 2007.

My goal is to review everything before the end of the weekend, and send the iPod out on Monday (along with an announcement here of the winner, and recognition of the other participants - so if you want to be excluded for some reason, let me know that as well).

If you haven't started, there's still enough time to come up with a solution: it needn't be long or difficult - just demonstrate something new in a language you haven't had much experience in.

If you've got a blog, post the solution there and let me know about it. If not, send it to me directly - first get in touch with me via my contact page and then send it via email.

Finally, I'd like to give special thanks to Chad Fowler for helping spread the word.


A quick thought about making search better: Wouldn't it be nice if Google would search your email at the same time it searched the web? It could rank the email higher than the web results, and if you've kept some information in there and forgot completely about it, it would show up too.

Do they do that already?


Since the gift buying season is officially upon us, I thought I'd pitch in to the rampant consumerism and list some of the toys I've had a chance to play with this year that would mean fun and learning for the programmer in your life. Plus, the thought of it sounded fun. Here they are, in no particular order other than the one in which I thought of them this morning: More...


I just wanted to give a quick shout out to the IntelliJ IDEA Ruby plugin team for working so fast to get a fix out the door.

I had posted a question on the JRuby Development list about running Ruby unit tests against JRuby from within IntelliJ IDEA using the Ruby plugin. A couple of days went by and one of the developers of the plugin contacted me, worked with me on solving my problem, and released a new version that supported what I needed within another couple of days.

That's awesome service.


I saw this for the first time in Gmail today:

Firebug makes Gmail slow

Sure enough, I disabled it and now Gmail is faster than ever.


It's reminds me of Ruby - it gets out of your way and follows the principle of least surprise quite well. I was zooming around in about 15 minutes, which I think is pretty good considering I've never used one before.

I'd also like to give a BIG thank you to everyone who helped a Mac newbie out telling me about your must-have software. I haven't used it all yet, but NeoOffice and Adium have proved useful so far, and as expected, QuickSilver is indispensable. I'm also finding that iCal will work just fine as the timeboxing program I was looking for.


Today I finally broke down and bought the 17-inch, 2.4GHz MacBook Pro with the high definition display.

I'd been holding out for 2 reasons: More...


I'm looking for a couple of pieces of software and was hoping to get some expert opinion (that's why I'm asking you!).

First, I need a standalone diff/merge tool for Windows. I've seen a couple from searching Google, but was hoping for a non-paid version as it is only a temporary solution. If you don't know of a free one, I'll still be glad to know what you use that you were willing to pay for (and what you think of it). More...


Scott Berkun wrote an essay about "Creative thinking hacks" with ideas on how to be more creative. The best part for me was this: More...


I missed the first talk on Clean Code that Bob gave, but I'll be sure to attend the second one. If you don't know Uncle Bob, he's one of a few of people who helped get me thinking about the quality of my code. In particular, his series of articles about the principles of object-oriented design has been linked on the right column of this blog since day one.

If you haven't read them, please (not safe for work) DIFN. Your co-workers and code-maintainers (perhaps yourself!) will thank you for it.

Details repeated for convenience:

July 31st 2007 - 6:30 PM
Oops, it's really on:
August 28th 2007 - 6:30 PM
University of Houston
Hoffman Hall, Room 563 (That's better known to UH students as PGH)


Given the new ways we're browsing the web and the ways in which applications are fed to us (i.e., videos and Ajaxification), page views are becoming less relevant as a metric for popularity of a site. So is the amount of time a visitor stays on a site useful? According to this article a couple of days ago in BusinessWeek, Nielsen seems to think so:
This month, Nielsen again flipped around a key ratings measure. It will now rank Web sites by how much time users spend on them, and de-emphasize total page views as the prevailing metric. Nielsen's move is a nod to how habits and technologies on the Web have changed, thanks to video and applications like Ajax, which delivers fresh content to Web pages so users no longer need to click through more screens to see more stuff.
More...


I've signed up to be at BarCampHouston. Are you (going to your local BarCamp)?

Say hi if you're at Houston Technology Center on August 25.


For the next 52 weeks, I'll be following (and sometimes dispensing) advice from Chad Fowler's conveniently packaged one-chapter-per-week-in-a-year book, My Job Went to India and how to save your job without writing spaghetti code (like me) so that only you can disentangle the mess. (It's an important book). Anyway, today marks start of the first week. (Let's do 7 plus or minus 2 days)

By coincidence, this goes along well with the "what are you doing to become a better developer in the next six months" meme. So what are you doing?

Anyway, back to what we can learn from Chad... More...


At NFJS a couple of weeks ago I attended Neal Ford's talks on becoming a more productive programmer. One of these things was obvious from watching most of the presenters: use a Mac. There was only one presenter that I happened to see using Microsoft Windows, though I didn't see his entire presentation, so he may have really been using a Mac.

Neal didn't actually tell us to use a Mac. But one of the tools he said he finds indispensable on his Mac is QuickSilver, which is almost a graphical command-line interface. I don't know a lot about it, so maybe you Mac users will correct me if I described it wrong. More...


Rather recently I discovered the magic of using a good feed reader, and I've started preferring to read entire posts within the reader itself.

With that end in mind, I also created a full post feed for codeodor.com, that you can find at http://feeds.feedburner.com/codeodor.

Enjoy!


Sean Corfield responded in some depth to "Is Rails easy?", and explained what I wish I could have when I said (awkwardly, rereading it now) "I think my cat probably couldn't [code a Rails app]."

Sean makes it quite clear (as did Venkat's original post) that it isn't that using a framework, technology, or tool in general is easy or hard (although, you can certainly do things to make it easier or harder to use). In many cases, what it does for you is easy to begin with - in the case of Rails, it is stuff you do all the time that amounts to time-wasting, repetitive, boring busy-work. Rather, the right way to look at them is that they are tools that make you more productive, and it takes a while to learn to use them.

If you go into them thinking they are easy, you're likely to be disappointed and drop a tool that can really save you time before you learn to use it. And that could be tragic, if you value your time.


I take my second weekend in a row (mostly) off of a computer, and look at all the cool things happening!

Adobe releases AIR (previously known as Apollo) and Flex 3 public beta, both products have been on my list of things to do for quite some time, still with no action taken.

Ruby (MRI) released bug fixes in version 1.8.6. JRuby officially went 1.0 (though it has yet to be posted to the website as I write this). And Ruby.NET released version 0.8 (IronRuby uses its scanner and parser, according to the article -- and this happened a couple of days before the weekend). More...


Have you seen the new interface and all the new reports you can do with Google Analytics now? Maybe it was possible before, but I couldn't find more than the top 5 in anything (say, referrers, and whatnot). I logged in today and they've got a beta interface for it that has much more detail to it. It's looking a lot like more like the "your own webserver-based" Urchin from before. Nice going Google!

I also wanted to note that while I knew that the tech crowd generally prefers Google to other search engines, I didn't realize that it was almost exclusive: 98.7% of my search engine traffic over the last month has been through Google. Increíble!


Until a few weeks ago, something I've never needed to do was sort a file that was huge - like unable to fit in memory huge. I think the basic algorithm for an external merge sort is easy enough, but it did take some thought and I didn't find much useful in a web search, so I decided it was probably worthy of posting even though it turns out to be rather simple.

Here's the basic algorithm for an external sort in English (I can provide it in Java on request, since that's what I wrote it in, but I'm just posting it in English to keep it generally useful). More...


From a developer standpoint, this helps:
Silverlight will now include a mini-CLR (Common Language Runtime) from .NET. What this means is that a subset of the full .NET platform that runs on desktops can be accessed from within the browser. As with the usual .NET runtime, with Silverlight you can code in a number of supported programming languages. At this time the languages supported are C#, Javascript (ECMA 3.0), VB, Python and Ruby. The Python and Ruby interpreters were built by Microsoft and have been released under their shared source license meaning that developers can get access to the code and are able to make contributions to it.
(emphasis mine, quote taken from TechCrunch)

I think it would be pretty sweet to be able to program in my language of choice (especially Python, Ruby, and Javascript!) for a platform like that. But, I'm quite unfamiliar with those technologies as it stands right now, so I don't really know how useful that would be.


The Houston city council approved a contract with Earthlink to enable wifi across the city (640 square miles or so!). Some key points:
  • Earthlink is building it at their own expense, with the City of Houston as its first client (paying 2.5 million over 5 years).
  • Access will be available for normal people at around $22 dollars per month (if I remember correctly, the plan was originally developed wanting free access for everyone, but I could be wrong).
  • It will be built in 2 years, but I don't understand how they are doing it in 100 square mile increments and plan to cover the whole city in that time (unless it's 100 sq. mile increments per 4 months or something)
  • $22 is a lot cheaper than 40! And 40,000 spots for people with low income are available that will be given a 10 dollar discount
That's going to be one helluva large wireless network span. The Houston Chronicle has the complete story.


Something of interest to developers who use Adobe offerings, InfoQ asked a few days ago, "Is XML the Future of UI Development?"

I remember thinking quite some time it would be cool if someone made it possible to develop desktop UIs with HTML - how much easier development would be. I'm still teetering on that though, because there are quite a few benefits to programmatically developing a user interface. That's where we get the crossroads that CF and MXML and others like them provide, which seem to embed so well when you are used to programming in tags.

I'm not so much a fan of the excess clutter, but it does have some appeal to me. What do you think?


While I know I've still got tons to learn (just look at the nice table structure on this site, seeing as CSS naked day was yesterday), I've still been doing this stuff for six years or so now, and thanks to a comment from Justin Mclean on his blog, I've just learned something comepletely new to me: the base tag.

I feel like a complete newbie (or n00b or newb, or however your preferred spelling goes). Basically, any relative links will be preceded by that listed in the href attribute. It appears to need to be a full http:// and so forth, but that's easily made dynamic (in CF - you'll have to consult your docs for other languages) with cgi.server_name or cgi.http_host (as Justin pointed out. Thanks Justin!)

So, now my question to you all: who else didn't know about this? Don't be shy - If I'm not too embarassed to share my ignorance, neither should you be!


Just a quick question, as I was pondering today - what is good performance? I was thinking there may only be designations such as "acceptable" performance, or poor/bad/unacceptable performance. Is acceptable what you would ordinarily define as good, or is there a level above acceptable? And, if there is a level above acceptable, do you want to obtain it (or would that be premature optimization)?

Thoughts?


Thanks to this post from Sean Corfield, I was able to read about the Invasion Of The Dynamic Language Weenies on Hacknot. All this time I thought it was hot in Houston... and it turns out I'm just a weenie on a lit grill, waiting to be eaten.

I was going to write a long article in response to the Hacknot piece, but luckily for me (and again thanks to Sean), I found Andrew Shebanow and Rick Copeland have already said most of what I wanted to, and some in addition.

The Hacknot article is worth reading, as at the minimum it will make you think. And if you can get through the name calling, he does make some interesting points. If you do read it, you should also read the other two I've linked.

So, aside from what Shebanow and Copeland said, here's what I've got to add: More...


Just discovered the not safe for work WTFPL. It's been around for quite some time though. When are we going to see it debut on RIAForge?


You know something must be big in the Adobe technology world when you wake up to 1/2 a page of "it was released" on piss-faced aka extremely drunk aka [insert your favorite phrase for drunkeness here] aka full as a goog =).

Well, they've done it with the release of Apollo some time last night (well, it seems around that time anyway).

I've downloaded it all, and was astonished to find the documentation larger than the SDK and runtime put together. Of course that's all zipped up. But still, I don't know if having that much documentation is a good thing or a bad thing.

In any case, I hope to get some time to play with it soon, but I'm not hopeful on that aspect. Plus, I'm still not sure what I'd like to build with it in the first place. Are you planning on building anything? What? (or, is it top secret?)


After mentioning my problem with getting my dual widescreen monitors to work with Ubuntu Linux, I got several helpful replies from Dan Vega and Jim Priest (thanks guys). In any case, I was left with poor resolution choices after getting the dual screens working together, and everything looked like the S from POS (not point of sale).

As it turns out, the fix was quite easy. After installing TwinView from nVidia, all I had to do was add the resolution I wanted to the meta modes line in xorg.conf. So, that line went from looking like:

Option "MetaModes" "1280x1024,1280x1024; 1024x768,1024x768"

to being:

Option "MetaModes" "1440x900,1440x900; 1280x1024,1280x1024; 1024x768,1024x768"

Sweet stuff. It was kind of neat in that it also gave me the option of 2880x1024 when I go to select my resolution. But, I'm more than happy now that everything looks good. Guess I'll be installing Eclipse and everything else I need and taking this for a ride soon.


Yesterday, I finally took the time to install Linux on my machine, and since I'd been hearing a lot about Ubuntu, I went with that distribution. So far, I am fairly pleased. The last time I used Linux was probably 6 or 7 years ago, and I remember it was terribly hard to get set up and working. Not so this time: I was up and running in shorter time than it took me to get SVN working a few days ago.

But, I am noticing some things. One is that apparently the Firefox engine differs in that it is not displaying text as defined in the style of many sites. My own is one of them, along with Raymond Camden's blog, and others. So the web looks different in that respect. I was also surprised by the number of updates I needed to install. I know I let the .iso file sit on my Windows desktop for some time before I installed Ubuntu, but 139 updates seemed large for the amount of time I had it sitting.

But I only have two real complaints so far:
  1. It was a complete PITA to get the dual monitors working, though at least it was doable.
  2. My screen makes me feel like I've got a nice HDTV with no HDTV signal. Apparently, the driver I got and had to install for dual monitors doesn't support the resolution I'd like. It seems like it's just stretching everything across the screen - so everything looks funny.
I'd like to continue using this, but I've got to get back to working instead of playing/tweeking, so for the time being I'm going back to Windows. It's just too hard to work in this Gumby-like environment. So, can you help with problem 2? If so, please let me know!


Nick Tong just posted about his programming personality profile, given by a quiz he took at Doolwind. Since I like to take quizzes like that from time to time, I took it too. Last time I took a personality test, I came up INTJ (maybe that explains some things). On this programmer profile, I came up as DHSC:
You're a Doer.
You are very quick at getting tasks done. You believe the outcome is the most important part of a task and the faster you can reach that outcome the better. After all, time is money.

You like coding at a High level.
The world is made up of objects and components, you should create your programs in the same way.

You work best in a Solo situation.
The best way to program is by yourself. There's no communication problems, you know every part of the code allowing you to write the best programs possible.

You are a Conservative programmer.
The less code you write, the less chance there is of it containing a bug. You write short and to the point code that gets the job done efficiently.
I know its just for fun, but I'm a bit skeptical about it. For just about every question, I was like "it depends. sometimes one way and sometimes another." In particular, I wasn't sure if I should take the last one at its face, or pretend it was more than adding 2 numbers.

What does your profile say?


Today, I finally got around to taking off that "install SVN server" that's been lurking on my to-do list for a couple of months. First, I happened to remember the Mere-Moments Guide that I had read about somewhere, long ago. That was helpful, but Rob Gonda's repost of it was a bit better, since he posted the SVNService.zip, which was dead in the original post.

But, what I wish I had really found first was Charlie Arehart's list of Subversion resources. In particular, the Less Than Mere-Moments Installation of Subversion utility caught my eye.

In any case, as promised by Rob, the setup took less than 30 minutes. But, I spent a little time figuring out two things that I'm going to post so I remember them easier (sorry to any authors who may have also posted this, I didn't go through Charlie's list of resources since I had already got it working to my needs): More...


... and back again.

One thing I've noticed about myself fairly recently is that I tend to have trouble at times, mapping theoretical knowledge to practical use, and practical knowledge back to theoretical use. I don't know if "problem" is the right word, as I feel like I still understand in both cases, it just so happens that my understanding is next to that of a reflex in the domain I first learned. I know that makes little sense, so let me provide a couple of examples. More...


I'm using Google Analytics here, and had a question for anyone who might know such things: When you view your visits by source, do you see google and google.com? And further, do you know the difference?

If so, might you kindly leave a comment letting me know? It's been a question I've had for a while now.


I think that as developers, we too often ignore business objectives and the driving forces behind the projects on which we work. Because I'd like to know more about how to think and analyze in those terms, I decided to take a course about Management Information Systems this semester in grad school. One of the papers we read particularly stuck with me, so I thought I'd share the part that did: When we undertake a risky project (aren't they all?), we should consider what competitive advantage it will give it, and if that advantage is sustainable.

To measure sustainability, Blake Ives (from University of Houston) and Gabriel Piccoli (from Cornell) identify four barriers to erosion of the advantage (this is within a framework they present in the paper, which is worth reading). The barriers are driven by "response-lag drivers," which the authors define as "characteristics of the firm, its competitors, the technology, and the value system in which the firm is embedded that contribute to raise and strengthen barriers to erosion." In any case, on to the four things we should consider: More...


I just wanted to provide an update about the UPS "explain in detail you problem with just 255 characters" problem I had. It turns out, their support not only took the time to figure out what my horrendous letter said, but they understood it, got back to me within a very quick timeframe, and said they'd forward on the craziness of the 255 character limit!

I've yet to check if it changed, but here's to hoping it will.

In any case, I just wanted to say great job UPS on your developer support!

Update: I just wanted to say I am a complete moron. It was a setting in the XML I sent to UPS that was the culprit. And I swear I looked it up and down and didn't see it, until finally one of their level 3 support people pointed it out. My apologies to the UPS tech support whose time I wasted!


Today I needed to contact UPS Online Tools support because a client just got their rates dropped, and the change is not reflected in our rates and service selection. I tried to describe the problem and question as succinctly as I could, since it said this:
3. Please provide as much detail as possible regarding your request or question including text and/or numbers of any error messages that may appear.: (255 characters maximum)
I must have spent an hour coming up with this:
HowCanIProvdeDetailWit255CharMax? SorryIfMakeNoSens:Client upgrd 2 dalyPckupRate+say rateDrop snce lastYear.Use his dvlpr+accessKey 2 calc shpChrg, but 0 dif in rateReturn. Sys set to use hisRate, or just defaultRate? What can do 2 no ovrchrg his cstmr?
Is it understandable?

I just wanted to write "You've got to be *$^#ing kidding me, right? I've just wasted this much time trying to cram this down into 250 characters, when, if I could just explain it, you could do your job a lot easier."

</vent>

Update: I just wanted to say I am a complete moron. It was a setting in the XML I sent to UPS that was the culprit. And I swear I looked it up and down and didn't see it, until finally one of their level 3 support people pointed it out. My apologies to the UPS tech support whose time I wasted!


After a suggestion from Peter Bell, I visited Paul Graham's website and started poking around. I came to find out about Arc, and after reading this page introducing it, I got excited by the idea of "A Language for Good Programmers."

Now, I don't know that I'm pompous enough to say I'm a good programmer (I'm trying though =) ), but I do note that languages like Java get in your way. Graham pointed out that "Java was, as Gosling says in the first Java white paper, designed for average programmers." I get tired of writing things like Class obj = new Class(). While you can do some incredible things with it, programming in Java is like laying down rules for your three-year-old child - you have to tell it too many times what you want it to do (it referring to Java, not your offspring!). Besides that, it is also true that you can do incredible things in other languages, like Ruby (to name my favorite at the time), without being retarded by the compiler (or catering to one that seems like it is).

He also specifies that Arc will be "specially suited for Web apps," which is something interesting to all of us, I would think, who build them in our daily lives. I'm looking forward to its release, whenever that might be (Graham mentions that they have "no idea" when it will be available, but provides an email address you can send an email to to be alerted when it does become available).


In an effort to give you a glimpse into my work life, I thought I'd let you know something that I find a little strange. I like to listen to Powwow Radio when I work sometimes. It's not as distracting as when, say my favorite song comes on and I've just got to sing along. I listened one night after my friend told me about this Native American rap station. That site also had a powwow station, and I thought it was sort of cool to listen to. I tried it at work one day, more of as a joke than anything else, but I found it gives me a focus and determination to work. I have no idea why, but I thought I'd share anyway. I don't listen everyday - only on occasion.

Do you have any strange things you do?


Since I was asked recently about why my blog didn't have comments, I decided to spend a little time today and code them. I've yet to put any spam protection in, so I may have to delete some by hand until I do. But, I plan on using Jake Munson's CFFormProtect when I do. I've been using it on one of our client's sites, and the results have been nice. Anyway, enjoy the comments!


I don't want to turn this into a mouthpiece for the code dojo at University of Houston, but I'm pretty excited about it since we've set the date of our first meeting. We're planning on doing it January 29, 2007 at 7:00 PM. Check the website for more details (such as the room). We have yet to decide on the first problem to solve / topic, but we will have that done by the end of next week. After that, I probably won't post much here about it, or I'll try not to anyway (I realize folks in China, for instance, could probably care less about it).


The last couple of weeks I've been soliciting teammates and friends of mine to help on starting a code dojo at the University of Houston. Well, we got the go-ahead yesterday from the CougarCS organization, so now we're just trying to plan when we'll have our first meeting. If you go to UH or live around Houston (I don't think we'll be checking IDs or anything), I'd encourage you to come to one of our meetings. You can find more information at CodeDojo.org. Right now, as I said, we don't have a meeting schedule or anything, but you can follow the link to our google group and stay informed that way (of course we will be posting it on the webpage as well).

If you don't live in Houston, but want to start a dojo of your own, we also plan to provide a place for others to post information. We don't have the infrastructure set up yet, but if you contact me, I'll be glad to let you know when we do. Of course, you won't have to have our cheesy logo up there =).


Just finished writing a survey on some of relatively current literature on k-means, focusing on introducing it, some practical applications of it, some difficulties in it, and how to find k, the number of clusters. I'm still new to the area, so don't expect much groundbreaking to be done.

The second half focuses on my own experiment, trying to find k using two similar, but slightly different techniques. I failed, but if you'd like to go over it and either laugh at me, or perhaps figure out what I've done wrong, you are free to. =)

Obviously, this isn't going to interest many people, so I didn't take time to mark it up - it's just available as a DOC (I had planned on having a PDF version, but my PDF writer has taken a crap on me). If you don't have Word or Open Office, and would like to read it, contact me and I'll try to get the PDF for you in some way or another.

Anyway, the DOC is here if you want to read it. It's over 3600 words, so beware!

I'm interested to know if anyone has built any machine learning libraries or done anything with machine learning in Coldfusion? My immediate thought is "no way!" because I don't think Coldfusion has the performance for it. But, I wouldn't know, since I haven't tried it. Have you? What's been your experience? Drop me a line if you care to.


Regarding some of the problems we had in automating testing for our rails app, I was reminded of another today: how do we test functionality that requires the user to be logged in?

At first, I tried just setting the required session variables manually, in the setup method. Now, I can't see why that didn't work, and I didn't investigate long enough to find out, because Rachana Parmar, one of our team members, had a brilliant idea: why not just go through the login process? So, she wrote a test helper method that we could call that instantiated the user controller and performed the login action. After that, we had no more problems related to needing to log in to the app to test something.

On another note, I want to explain these short, almost useless postings: Part of the idea here is that I want to learn, and I find that when I write something down, I remember it better. And if I forget, I can always look it up when I know "I've seen this before, but I can't remember how we solved it." So, I find them helpful, and my hope is that someone else will too.

As another aside, for the longest time I didn't write down simple solutions like this and the previous one about upgrading functionality only for users with Javascript enabled, but the idea came to me when I read Venkat Subramaniam's and Andy Hunt's Practices of an Agile Developer. It's chock full of great advice, and even though most of it is obvious common sense (or seems that way), I found that I wasn't really doing a lot of the things it suggests. So, I have to give credit where credit is due.


It's not often a super-important requirement that I run into these days, but in many cases, it is still important to provide functionality to users who either don't have a Javascript enabled browser, or who have it disabled.

It's easy, of course, to use a <noscript> tag to show page content to users in that situation. But how do you easily take out content for them?

In the past, I've often used document.write(), of course, to write the content. But that can become a nightmare to maintain, especially as that content grows. It's just as bad as trying to write an HTML page using Java servlets, perhaps worse if you take into account the lack of a compiler - it's harder to debug problems. So, today an easy way occurred to me - show the content as display: none;, then in the onLoad event, display it using Javascript.

It's not a startling revelation, but it might be helpful at times. Of course, it doesn't help if you're dealing with non-Javascript-using visitors who also don't have CSS support, but it should easily eliminate most of the problems you face when trying to provide functionality (or remove it, and provide an alternate) for them.


If you use several different languages in your writings, GeSHi may be of interest to you. It's written in PHP, but you can use the demo (which I've linked to) if you aren't running that. It supports tons of languages, including C, Ruby, Coldfusion, Java, Perl, Smalltalk and just about any popular language (and some unpopular) you can think of. And even better, if you don't like the language defaults, you're free to change them.


Not two hours into using IE7, it's already made me mad. It seems it sets itself as the default browser. Thing is, and I could very well be wrong on this, I don't remember it asking me such a question.

In any case, it's a pretty slick browser. I like how they've redone the top, and sort of minimalized the wasted space up there that I never used in the first place. It certainly looks spiffy too, and it reminds me of way back in the day when I thought it was the best browser around (and, I think for quite some time I was justified in thinking so).

But, from my understanding of containers and percentage sizes, it still behaved oddly using form fields to go 100%. It just ignores the container, from what I can tell. And, I can't beleive that when you use scroll: auto;, and have no max height set, it puts the horizontal scroll right where the page would render without it, thus forcing the need for a vertial scroll bar too. Madness I tell you!


It appears that way, with Coldfusion 6.1. I stumbled across this today, so I thought I'd share what I observed.

In a nutshell, I've got a security object, which handles all the login related information and rules. Also, it is stored in the session. Of course, you wouldn't want to do that if you were planning on running on clustered servers, because of Coldfusion's cfc serialization session issue (at least in Macromedia/Adobe's variety). But, that is beside the point.

Basically, what happens is:
  1. If the security object is not defined, create it
  2. The security object creates a cookie which stores the userID (encrypted)
  3. later, I check the userID by calling a method on the security object
The cookie is set to expire when the user logs out, or when they close the browser.

So what happens?

In Firefox, when the browser is closed, both the session and the cookie are destroyed, so that when the user returns, everything happens again as I originally expected.

In Internet Explorer, however, when the browser is closed, only the cookie is destroyed. When the user returns before the session would normally time out, they get an error, because the security object still exists and expects the cookie to exist too.

I wonder where the real difference lies?


Some words of wisdom that Dr. Ricardo Vilalta (at University of Houston) shared in class the other day:
  • If you claim to know something, you will be seen as the expert
  • Therefore, be honest about what you really know
  • Be willing to learn and admit your lack of knowledge on certain areas
  • Don't claim you are superior to others
  • Don't give in to the pressure of winning over others
I like this advice, and I would think that if you've been burned enough times by not having followed it, you might figure it out yourself - if only to save yourself embarrassment.


Para el gordo y la flaca de xorBlog, you can visit the xorBlog page. You can even check that the unit tests are running if you have some time to spare.

It's been a few weeks now, but I finally had time over the last couple of days to start doing some coding (for this project), and therefore, I've finally got that "minumum" amount of functionality to start the blog.

Sometime soon I'll go over what's been done so far, and why it was done that way. For now, welcome! I'm a graduate computer science student at UH (as you can see in the about page). I guess I started this to help me learn, and hopefully you too. We'll be covering topics like OOAD, coldfusion, java, test driven development (and other agile methods/practices), and my journey with Ruby and Rails, among other computer technology related subjects at my whim.

For now, sit back and relax. That's what I'm going to do.



Google
Web CodeOdor.com

Me
Picture of me

Topics
.NET (19)
AI/Machine Learning (14)
Answers To 100 Interview Questions (10)
Bioinformatics (2)
Business (1)
C and C++ (6)
cfrails (22)
ColdFusion (78)
Customer Relations (15)
Databases (3)
DRY (18)
DSLs (11)
Future Tech (5)
Games (5)
Groovy/Grails (8)
Hardware (1)
IDEs (9)
Java (38)
JavaScript (4)
Linux (2)
Lisp (1)
Mac OS (4)
Management (15)
MediaServerX (1)
Miscellany (75)
OOAD (37)
Productivity (11)
Programming (168)
Programming Quotables (9)
Rails (31)
Ruby (67)
Save Your Job (58)
scriptaGulous (4)
Software Development Process (23)
TDD (41)
TDDing xorblog (6)
Tools (5)
Web Development (7)
Windows (1)
With (1)
YAGNI (10)

Resources
Agile Manifesto & Principles
Principles Of OOD
ColdFusion
CFUnit
Ruby
Ruby on Rails
JUnit



RSS 2.0: Full Post | Short Blurb
Subscribe by email:

Delivered by FeedBurner