My Secret Life as a Spaghetti Coder
home | about | contact | privacy statement | getting started with cfrails
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.

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!



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. More...


An interesting discussion going on over at programming reddit got me thinking about what features I'd like my ideal job to have. Aside from "an easy, overpaid job that will get bring me fame and fortune," here's what would make up my list: More...


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. More...


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?


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!