The Dopefly Tech Blog

« The Dopefly Tech Blog Main page

Scavenger Stroll - My Kids' FLL project to encourage exercise & activity

posted under category: General on November 24, 2020 by Nathan

Every year, thousands of FIRST Lego League (FLL) teams work on an innovation project of some type. This is in addition to the actual Lego-based robotics competition where they solve a number of robotics-based challenges. The competitions can be a lot of fun, definitely full of energy! The annual challenge (not the robot part) is always something new. This year it was creating a solution to make people more active.

This year, my two younger kids’ FIRST Lego League team had an idea about building a scavenger hunt in a nearby park. They came to me with the idea to build a mobile app, and talked about all these bells and whistles. Like any good engineer, I talked them down to something more realistic and achievable. Plus something that’s in my wheelhouse.

Our joint solution was to build a mobile-friendly web site. This gets away from publishing to multiple app stores, paying a developer fee on one of them in particular, and working around bugs from multiple codebases across the different platforms. Of course now that the web app is built, it would be possible to port it through something like Phonegap or NativeScript, but I think the web app will be just fine.

So let’s talk about the scavenger hunt! This team created a list of things to find along the walking paths, took photos of them, and came up with the application’s rules:

  • There are 2 different scavenger hunts
  • Show as many as 10 items at a time
  • Each item has a photo that can zoom in
  • Each item has a checkbox
  • Once they’re all checked, you win - celebrate with fireworks

Items to find are things like certain kinds of trees, categories of animals (reptile, bird), or park locations like the gazebo or the lake. The team also wanted to make sure we had links to find more wildlife info.

After the app is published somewhere, we will put a sign up with a QR code that will link directly to the web app.

Work begins

On our first work night, we set up VSCode LiveShare so that we could all work on the code together at the same time. This was a huge pain to set up, but was an incredible collaborative tool once it was all working.

I showed the kids HTML, CSS, and JavaScript and we built the structure and outline of the web site. It’s just three pages, one JavaScript app that we powered with Vue.js, and light CSS styling on top of Bootstrap. Once it was all done, we practiced pulling and pushing the code into GitHub. Mind you these kids are 10-14 years old. It was really awesome to see them understand it conceptually and then take it home and still push a few more changes!

On the last team night before the QR code sign was printed up, I integrated our Git repo with Netlify - we were up and running in our forever-home within two minutes!

Some of this technology really is just getting so much better. From the libraries I easily integrated, to the free hosting, it was a lot of fun to set up. Maybe the best part though was doing a project like this with my own kids. I loved it, and I hope we can do more things like this in the future.

So without further ado, Scavenger Stroll for Wannamaker Park in North Charleston, SC:

I hope you enjoy it, and I hope it inspires you to do something great.


I teach coding to high school students

posted under category: General on November 23, 2020 by Nathan

Let me start by saying that we home school. And not just this year.

Initially it was out of a desire to keep our first kid ahead of the learning curve. This smart one was reading before kindergarten. Hey it worked - she graduated a year early and is making her way through college.

Something unexpected that came from this screwball 2020 year was the opportunity to teach a class at a home school co-op. This is essentially a one-day-a-week school experience that teaches those subjects that parents don’t want to do at home. We unashamedly use this for English classes, among a few other things. Families can pick up a class here or there, or build their entire curriculum out of it. There’s nothing home schoolers cherish more than the freedom to make educational choices for themselves, so this works for a lot of people.

We noticed that most of the teachers here fall into a couple small categories: parents of the students, and retired teachers. My wife has a particular interest in personal finance, with the real goal of making a generation of young people who understand things like credit scores and compound interest. So with all the qualifications being met, she’s been teaching her favorite things to high school students.

This year I found some spare time somehow (anyone else with me on that?). My wife put the bug in my ear about teaching a coding class. I really wrestled with what that even meant, and what students could benefit from it. When I heard our last CS teacher moved away over the summer, I knew we had a gap - somebody had to teach a computing credit. So with all the qualifications being met… why not me?

Also, more importantly, how?

I want to teach real languages and programming skills. I want to teach students to actually code, to understand what the computer is doing, and to see things from the inside. All of the curriculum I could find for high school seemed to be based on Scratch or Legos. It’s not that there’s anything wrong with that, just that there aren’t a lot of professional jobs for dragging-and-dropping Scratch blocks.

Maybe I’m a rare gem or something, but I started coding web sites in high school, then graduated and started getting paid to do it that same week. We all know the bar is a lot higher now with front end development being nearly impossible to break into without a good mentor and who-knows-how-many years of practice, but I like to think it’s still possible to start a career coding web sites.

What languages does that leave me with? A lot of options, so let’s rule out anything grossly unpopular, anything with static types because type systems are a little tough for noobs (more on that later), and anything I don’t know (and that’s a lot). Then make a strong preference for those languages that work directly with HTML (haha yeah, ok, that’s a list of 1 now). I thought about Python, and maybe I should have thought harder, but I chose JavaScript.

To be fair, I see some of the folly in my ways. There is a challenge with some kids when programming moves from conceptually understanding what to do, to typing the code out on a keyboard. Furthermore, curly braces and parentheses can get messed up in ways you don’t want to see. Maybe Scratch would have been smart. Maybe Python would have been wiser.

Still, I stand by my decision to use a wider-purpose language than Scratch. JavaScript is debatable for a first language, but I have plans to tie it in with the next semester when we code up HTML and CSS. In fact, I’m planning to use the project that these kids finished the 2020 school year with in their 2021 web site that we are building next semester. This is why Python wouldn’t be my primary choice for a student’s programming language – it lacks that one critical integration: the web browser.

Why HTML and CSS? “Aha those aren’t programming languages!” you may say. And you would be right, but this isn’t a programming class, it’s a coding class. You don’t program HTML, but you do code it! I want these students to be well-rounded in what is debatably the most important software skillset in the history of the world - HTML, CSS, and JavaScript, the fundamental building blocks of the web.

Class started in the fall. 17 students showed up! This is my first class ever, I’m pretty excited! Also nervous. Stomach ache nervous. Stomach aches aren’t a sign of COVID however so forget that! This is just like a conference talk or anything I’ve done before, I’m going to knock it out of the park just based on my vague charm and the meme humor in my slideshow.

Yes, there’s a slideshow! It’s a Google Sheets slide deck. I picked one bold presentation theme for the year and have stuck to it. We’re actually fully on the Google stack of education. I have a Gmail account through the school, a shared Drive, and we are suffering through the underdeveloped early years of Google Classroom, which is still better than most of the alternatives.

One of my students was staying home, hoping to skip past a possible first-wave of COVID-19 as soon as school started, so unless I want to video record the whole thing and post it for the class (hint: I don’t), I’ll need to have some way to transfer the knowledge across the internet so when he finally attends physically, he won’t need to catch up. Every week I post my presentation in Classroom. At first just for him, but then I realized that it’s a great tool for the students to review our lesson, check on what the homework was, and read my possibly embarrassing speaker notes. I love transparency when it comes to learning.

I told the kids that everything that happens inside a computer is knowable - something you can learn. It seems like it’s a sealed black box, but that’s only because you don’t know how to open it yet.

The lessons this semester have been loosely adapted from Eloquent JavaScript. I went through a lot of JavaScript books and curriculum and I decided on this one for a number of reasons. One of which is because the book is completely free, even though I bought a paperback copy to study. The other reason is because I liked the order of the approach - variables, data types, operators, flow control, functions, then objects and arrays. Furthermore, Eloquent JavaScript is modern enough to not recommend you do it all in a browser by including a script tag, which is something common I see as a side effect when teaching a 25 year old language.

So we kicked it off. Leson 1, install VSCode and Node so you can run .js files. Lesson 2, hello world! Then onward and upward from there. We’re only 13 weeks in and that’s the end of the first semester. That’s right, I’m writing this in retrospect of my first half-year! How did it go?

Lessons learned

There can be a mental hang-up when first trying to put code into text, as I said earlier. For some of the students, this was, and still is, a big mental block.

The different braces and brackets are confusing. Why do we use curly braces on if statements and on loops and on functions and on objects too? This is where I began doubting JS and reconsidering Python for next year. At least square brackets usually means we are talking about arrays, and parentheses usually means it has to do with functions.

A student dropped out! He was probably the youngest one in the class, 14. I don’t know if it’s a brain maturity thing that grants the ability to write software, but I think that could contribute to it. Honestly, with my ~3 week introduction, he could probably pick it up and ace it in 2 years. After that, I started pre-presenting the presentations to Elly, my 11 year old. She seemed to get it and helped me smooth over the rougher stuff for the next few weeks. She also wasn’t great at the technical parts of coding, but she understood the concepts. Elly is smart!

Typing speed Something that popped up right away was the fact that most of the class typed under 30 WPM, and we had a few hunt-n-peck typists. I started assigning an amount of typing every week, with the goal of getting at least 60 WPM with proper touch-typing form.

Editing text is a skill that nobody knows without being told. This is one that I remember learning initially, and I still learn new tricks pretty frequently. We had to talk about text navigation, shortcut keys, saving often, and I even had everyone install Prettier to clean up what they’ve written.

Creating files was an actual challenge. There are precisely 44 ways to do it with VSCode (I didn’t count, I’m sure it’s over 6), and I don’t like to force people to do it “my way.” Honestly i don’t even prefer a specific way myself.

The JS Debugger isn’t good enough. There are errors that don’t get shown correctly, and some random outputs that are unexpected, like “Undefined” output randomly and rendering of empty blobs when using console.table. Students are easily confused about that. Then they as me, and I’m easily confused about it.

I assigned FizzBuzz, which is maybe a little sadistic after just a few weeks of classes.

One student nearly finished FizzBuzz before class ended. Everybody else took all week. A couple of them never even turned it in.

We made rock, paper, scissors to practice our skills. That was pretty fun.

Our big project was a card game. Make a card, make a deck, deal a hand to at least 2 players, then declare a winner using whatever rules you want. I recommended high-card, then add poker rules for bonus points. My star student did the easy stuff, then built a blackjack game. Everybody got a passing grade, at least.

I explained functions twice. Maybe three times by the end. It’s a complex solution to a complex problem.

My son wants static typing! He asked me about dealing a hand of cards, and how function parameters work. He noticed it was difficult to tell what the argument in the function was supposed to be. I’m pretty proud of him. Without knowing it, he was asking for a stronger type system.

Throwing errors. The class thought the verbiage was funny. Throwing and catching. We didn’t go over it except in passing, but the terminology is somewhat memorable.

That’s it for now. I have a lot more but can’t think of anything right now. Feel free to ask questions!


Dopefly update

posted under category: General on February 12, 2019 by Nathan

Popcorn post incoming. I'm kind of tired of seeing how non-mobile-friendly my web site is when I see it in google's search results. Also, I feel a little bit of blogging coming on. That, plus work having calmed down over the last few months, and I upgraded my PC at home, it just feels like the time to clean up a little bit and start typing more.

Did I mention that I'm on Hostek now? It's fantastic and very affordable! Such a great service, I highly recommend it! Better tools honestly encourage me to do more.

Speaking of... maybe I should upgrade my own little blogging software. This is an extension of the 2nd one I wrote, with a couple data migrations, some hacks and bug fixes, and hardcore caching thanks to a previous host I had with an unreliable database. Unfortunately the posting software is just the worst. Clearly I have the skills to do something great here. Some day I'll get to it.

Also, I'm about to remove my own commenting scheme (thanks, spammers) for a regular old Disqus comment system. That's happening in 3... 2... (probably by the time you read this).

So yes, I'm mobile friendly, finally, about 5 years later than I should have been. Flexbox layouts are so stinking simple! I noticed my last post said I was hacking on UWP apps. Thankfully that chapter closed! I'm back on the web, grateful to be doing the kinds of things I want to do.


From Miami to Nassau

posted under category: General on February 14, 2017 by Nathan

You want to travel to the Bahamas and you have to pick a web programming platform to take you there.

ColdFusion is a cruise ship with almost no other passengers. It's all inclusive. It's a smooth ride, but sometimes it docs 50 feet from the port and you have to swim the rest or book the last bit with Java.

Java is a full cargo ship. It's slow to get moving. You have a very safe room in the center of the boat but you have to catch any cargo containers if they fall on you. You'll get to Nassau, eventually, and it's safe because there are a lot of boats here in these shipping lanes.

ASP.NET WebForms is a yacht that drives backwards and only responds to events like when you run into a dolphin.

ASP.NET Web Pages is a very small yacht that tows the ASP.NET MVC yacht where all the parties are thrown.

ASP.NET MVC is a yacht with an iron hull. It sits heavy in the water, but it can clip along at a good pace and there are nice rooms. Many parts are actually designed well, and it should because it cost you a pretty penny.

Go is a navy destroyer. It's much faster than the published speed, but not very comfortable. Unfortunately, you only wanted to go on vacation. As you get on board, you unintentionally sign with the navy. You can't stop talking about how much you love it all.

PHP is a tug boat with tires tied to the outside. Why would you go to the Bahamas in a tug boat? It can get you there, but where is the bathroom? Everyone except Ruby is passing you and it seems like they're all having a better time.

Ruby is a beautiful steam-powered riverboat with a huge rotating paddle in back. Nothing matches its charm and luxury, but it's going to take you forever to cross the ocean in this, and it might just break on the waves. You hope for good weather and set out before finishing any seaworthyness work because it's already floating.

Python with Django is a sailboat with big white sails. If you know what you're doing, and you trim your whitespace sail in the correct position, you can get moving very quickly.

Python with Flask is a windsurfing board. It's basically a sailboat, but it's very basic. Extend it with a surfing kite to head out across the ocean.

Node.js is 370,799 tiny interconnected boats that let you walk to the bahamas. Only one person can move at a time. (Note, the NPM repository at this time has exactly 370,799 packages in it.)

CGI with C++ is an ocean row boat. It's a lot of effort but you're definitely going to get there, so long as you don't give up.

C is a life raft, deployed a few miles off of Miami. Good luck.

Assembly is a stick. You hold it over the water, hopefully the ocean will part. It's an older way of sea travel, granted, but if you know what you're doing, and you pointed it the right way, you can drive a ferrari to Nassau. Also, you question if anyone's really done this.


Craigslist as free cloud storage for your physical stuff

posted under category: General on February 16, 2014 by Nathan

I'm moving. This year, The Boeing Company is relocating my family to Charleston, SC, along with an untold number of my IT compatriots in an effort to put like minded people in the same "centers of excellence."

Moving across the country has its challenges, even if all your expenses are paid. There are things I don't want to move, but I don't want to lose forever. These are things like couches, tables, yard tools, patio furniture and other non-unique things. It's stuff that's replaceable but I would hate to buy again.

I had this idea about how Craigslist can be like a storage shed that travels with me wherever I go. I can sell a couch in Phoenix, move to Charleston and buy a replacement couch for the same price. It may not look exactly the same, but the couch's value is identical and it probably matches the Charleston area more than its Phoenix counterpart. If I want to get a better couch, I just have to pay the difference - an upgrade fee.


Then, I began to realize this works even without moving across the country, and can also combat my hoarding tendencies.

Let's say you own a crib. It's nice and you don't want to lose it in case you have more children, but it's large and you don't really want to store an item as useless as baby bed when you don't have any babies. Put it in cloud storage; put it on craigslist. If you never need it again, you keep the money. If not, you spend the same money 3 years later to buy another crib that is just as nice.

This works especially well with electronics. Say you have a 1 year old notebook computer, but you won't need it for the next year, so put it in your cloud storage locker (yes, craigslist). Next year when you need it again, pay the exact same amount of money for a 1 year old laptop. Your first one is now 2 years old, but your cloud storage locker includes free upgrades while your items are in storage, so this one is a year newer.

Sweet, thanks cloud storage!

Stop holding on to your possessions. Sell them into the cloud and buy them back when you want them!


Monty Python Uses Correct 3-Factor Authentication

posted under category: General on January 10, 2013 by Nathan

Let's talk movies and security for a minute. Obviously Hollywood has proven they don't know computers, don't know hackers and don't know security - they know fun stories and special effects, but there have been more awful portrayals of computing than good ones.

Single-factor authentication has been deemed bad form on the internet, and easily bypassed in movies. We have all seen where someone knows the password or cuts off a thumb for the fingerprint scanner. That's simply not enough security. In real life, most passwords in use are plucked out of the most used passwords lists. One single password is easy to guess, and it's obvious because people get their accounts 'hacked' all the time. Single-factor authentication is simply not good enough.

Two-factor authentication is better, but not perfect. Again, there are movies where voice and eye prints are stolen, or a password is guessed and a fake thumbprint is used. In reality, two-factor authentication comes around in the form of web sites that send you a text message or email when you first log in from a new device and you have to enter the code from that separate message. It is a huge step forward because now it's something you know (password) and something you have (access to the email or phone). However, if one account has been taken, how can you ensure a hacker has not also obtained access to your email? It's not foolproof, but it's much closer.

Three factor authentication means "something you know" (password), "something you have" (email/phone/badge/fob), and "something you are" (finger/eye/hand print, face scan, etc). If anyone in any movie actually used this, the bad guys would win a whole lot less. Think about it. You can't just take a finger with you because you need their password. Guessing the password and hacking their email account still means you are missing the physical person. Stealing a badge leaves you lacking as well.

In Monty Python and the Holy Grail, at the Bridge of Death over the Gorge of Eternal Peril, the bridgekeeper asks three very important questions. Let's look at them:

1. What is your name? In authentication terms, he wants "something you are."

2. What is your quest? Could be interpreted as "something you have" though, to be specific, this is something you do not have.

3. What is your favorite color? What is the capital of Assyria? Without a doubt, "something you know."

When you think of computing and movies, Monty Python has all of Hollywood beat. You heard it here first, folks.


Good news, Dopefly is back up (mostly)

posted under category: General on April 8, 2012 by Nathan

Here's a note to say that Dopefly is back up. It's been about 3 weeks. Yeesh, awful, I know. Now I'm back up on MySQL, so please drop me a note if you see anything broken around here. A rewrite and redesign is in the works, and may be out sooner than you expect.

Sorry to everyone who missed the content, and especially to Mike Henke who linked my post about actually understanding closures in ColdFusion 10 from The ColdFusion Show.

Update: Looks like auto-incrementing PK columns didn't make the migration to MySQL from SQL Server, so I'm going to guess that comments won't work. This post took a lot more work to get published than it should have.


Negligence Season 2011/2012

posted under category: General on February 10, 2012 by Nathan

So I was doing really great late last year preparing my LESS CSS talk for Adobe MAX, then MAX hit, I finished my presentation on LESS, and I just collapsed. It felt pretty nice, I won't lie. Soon thereafter the holidays started, family activities picked up (did I mention I have 4 kids?). Worse and/or better yet, my fantastic company takes the Christmas through New Year week off and right at the end of that, I got sick with "the Skyrim". It was bad. I still have it, a cough here and there, a sleepless night when I forget my reality pills. I feel bad for all of you who have caught it along with me. It hurts sometimes, but it feels so good when I give in...

Let me recap a few things I should have already by now.

Adobe MAX 2011. This was a great conference. Adobe pulls in amazing speakers, authors and technologists. Ray and the unconference crew also had a fantastic lineup, and it was really, really great. The MAX bash this year was over the top and by far the best party I had been to in my entire life.

Then my boy, Jude, turned seven and we had a Mario party (pun intended), so then I had a new best party ever. Sorry Weezer. Sorry fancy candy pavillion.

Alanda, my wife, scored a Kindle Fire for Christmas. She loves it. While I know it's Android under the covers, she never would based on any evidence. It's Kindle through-and-through, and a great all-around device IMO.

I visited the new Boeing South Carolina 787 factory in late January. It's a beautiful place, and I would move my whole family into that building if I could. About the jet - I am sold on it for sure, and I will buy the first available one as soon as I find the $170m or so that it takes. I am still asking around about the employee discount.

Finally we come to today. I'm reading The Facts and Fallacies of Software Engineering. I count this as studying for one of my CF.Objective(). talks. Speaking of...

This May Is CF.Objective()! I have two sessions to call my own - "Making Software Better" and "LESS CSS, Meet ColdFusion." I'll talk more about these later, but for now this has gone on long enough. Here's to a successful blogging career in 2012!


Adobe and Homeschool (free and discounted software)

posted under category: General on October 17, 2011 by Nathan

I'm not related to Adobe, but I do co-manage an Adobe software users group for ColdFusion. Adobe has been really good to the group, giving us shirts and pens (swag items), plus two huge software giveaways every year, and lots of other benefits for my co-manager and I. That's my disclaimer. I like Adobe because they like me, and because their software is great.

Another thing I do is school my children at home. Well, who am I kidding, my amazing wife really does all of the hard work! There are a lot of up-sides and down-sides to homeschooling, same as any schooling option, but it's just a choice we made and are taking it year-by-year with each of our kids.

With all that said, I want to highlight a couple things that I found on for home schooling families.

According to Adobe's educational purchasing eligibility page, Adobe's education discounts apply to homeschooled students and their teachers. To prove that you are a valid home school family, about 2/3 down that same page lists the articles you can send Adobe as proof. We are a member of a couple homeschool associations, so I scanned my AFHE ID card.

Now what can you get with it? has a great site for introducing their software in education, Adobe Education. Check it out. From there, I discovered the educational price list. You can see it for yourself that the price differences vary. I would say that most of the software is around 60% off, but some is 75% and some only 25%. A few of them are even free!

Those free packages point to the Free RIA Tools site. You can get ColdFusion 9, ColdFusion Builder 2 and Flash Builder 4.5 for free, just because you homeschool your kids! I made my request last Saturday and was given a serial number today (2 days later).

That's a win, fellow home-schooling families. Very expensive software, yours free.


A week with the BlackBerry PlayBook

posted under category: General on May 19, 2011 by Nathan

If you've followed me on twitter even a little bit over the past week, you probably learned that I was at CF.Objective(), and that I have a new BlackBerry PlayBook. I've been tweeting about it like crazy, I just can't stop. I don't remember being that excited about the iPhone, probably because everyone already had theirs. It's nice to be on the cutting edge once in a while.

So it's been a little over a week since I got my PlayBook. I'm not a BlackBerry fanboy, like I said, I've got an iPhone, BBs never appealed to me. Also, I didn't buy it, I haven't wrapped any money in it, it was a gift, and if they did it just to make people talk about it, they win; I have been talking.

In a couple minutes, after making my way past the gorgeous packaging, I was setting up my PlayBook. It guides you through a few easy, non-invasive steps, no credit cards involved, install a 300mb update over wi-fi, restart and it's all good. They left me with some helpful videos on how to use the device, I found them interesting and I wanted to know what I was doing, so I watched them.

The multitasking interface has taken a bit of criticism from my friends. They don't want to learn a new interface or they aren't so sure about this swiping from outside the screen. Yes, the frame is touch-sensitive. Somehow, I found it perfectly natural. Switching between apps is a swipe from side-to-side, going back out to the menu is a swipe from the bottom. The application context menu is a swipe from the top. The menu bar (battery / wifi / clock etc.) is a swipe from one of the top corners, and the keyboard from the bottom left corner. Multitasking is a rich experience and more akin to a desktop computer, like hitting [win]+[tab] on Win7 to switch tasks. I find it so natural that I keep trying to swipe-up on my iPhone.

The PlayBook multitasking interface

So after playing with the interface, I loaded up the App Store Market World. I will skip being tactful. The apps suck. They are so bad that I am seriously thinking of building a few things for myself that I need and use daily, like an Evernote client (where I am writing this), a Read It Later client, a Netflix streaming client (if only), file browser, a twitter client, and some decent games. The list goes on and on. The apps are either not there, or are so bad that it doesn't matter. The good news for developers out there is that it means the field is ripe for the picking. Really, any app that's not built-in is a good idea to create.

The browser however is amazing, simply for the fact that flash works, and it works well. Browsing the web was responsive. Zooming in to content is a bit slow, but it works fine. Navigating is a lot like the browser on my iPhone.

Videos on the 1024x600 screen are beautiful. High-definition mobile video is the new hotness for me. I love it. I loaded a few movies up for the plane trip to & from CF.Objective(). It takes everything I throw at it - MP4s, WMVs and Divx avi videos mostly.

At first I had no idea how I was going to get files on & off. I plugged it into my PCs USB port, installed the drivers and started copying files, then I found my favorite setting. With 1 setting I can turn on file sharing, and with another, I can turn on file sharing over wi-fi. As soon as that goes on, a new share appears on my network, I navigate to it and start copying files. This is reason enough to hate every other smartphone and tablet on the market. This is both obvious and amazing to me.

Extending that is downloading files from the browser. If you download office files, you can open them in the msoffice-like apps that are preinstalled. If you download a PDF, you can open it in the preinstalled acrobat reader. If you download a zip file, you can just save it until you want to transfer it to your desktop PC. Again, it's both obvious and amazing. Not something you will find in iOS.

The plane ride was good, I played with the browser in the airport, I watched over an hour of video on the plane, then that night when I was showing it off at the conference, the battery was around 80%. Even trying to give it somewhat heavy use, I can't kill the battery in less than 2 days. I don't have the patience to use it continuously for long enough to tell you a real answer. I did manage to kill it today finally - two full days of use, on and off, and finally watching high-def videos made it happen. As far as I can tell, there is no global messaging system, so it didn't let me know the battery had reached 0%, it just started to shut down.

The cameras are there. Front & rear. I got a mixture of quality all based on lighting. Normal indoor lighting is very grainy, and outdoor shots look like a digital camera, but are usable. The worst part is the delay when taking a photo. Let's say I hit the button when you started reading this paragraph. It actually took the photo right about now. *click*

PlayBook photo from the Hyatt 23rd floor.
From the Hyatt 23rd floor, overcast daylight gave a pretty good shot.

PlayBook photo, Marc Esher shot Ben Nadel.
I think Marc Esher shot Ben Nadel here. Notice how it was the camera delay that caused the photo to come out blurry.

The worst thing of the whole experience, and mind you I am coming from an iPhone, is the text editing. The keyboard in landscape is too small for my hands, too big for my thumbs, so I have to peck at it. In portrait it is about right for two thumbs. That's fine, but actually editing text, selecting text and moving the cursor is awful, even unusable. Fixing misspelled words and automatic capitalization is nonexistent. You can tell when I tweet with it because there are no capital letters and [space][space] doesn't insert a period. It took Apple a number of years to get to where they are now; I hope it doesn't take that long for RIM.

There are a few things I haven't even tried yet. I understand it does HDMI video out in the background while you can do somethign else in the foreground, like play a game while your wife watches a chick flick (you heard it here first, folks). Also if you have and love a BlackBerry phone already, BB bridge gives you mobile internet and access to your phone's email & contacts. Yeah, I'm not doing that.

Bonus: I discovered a few tricks that you may not know. First, you can take a screenshot on the PlayBook by hitting the [Volume UP]+[Volume Down] buttons at the same time. Second, you can navigate the local hard drive using the browser by going to file:///. I created an HTML document with my speaker notes and uploaded the files to the PlayBook, then navigated to the local file in the browser - that gave me an offline copy of my presentation notes to use on stage. Sweet!

To summarize, I am very thankful to RIM for bringing me this new toy. As far as a consumer device goes, it's a game of contrasts - the PlayBook has the best tablet browser that I have seen anywhere, but the worst text editing, the best multitasking, the worst app store, the best file sharing and management, but a lame camera. The foundations are laid for something incredible. I like this device. I really do. Its strengths are worth taking a look at in spite of its shortcomings. And with that, I'm keeping it, and I'll show it off to anyone with eyes because it's so dang pretty.

PlayBook photo of Elly reading a book.


I was going to diss client variables...

posted under category: General on April 26, 2011 by Nathan

A couple months ago, an edict from on high (AKA my company's enterprise IT infrastructure middleware hosting support department -- it's a big company) came down that said in order to host our applications on the new ColdFusion 9 server cluster, we have to stop using session variables and switch to client variables.

I have a rage-induced past with client variables (and here). To say I am not a fan does not do it justice. Forcing me to consider them does not make me happy.

They sent us all a document detailing how to do it. It's easy, (1) you just do a find-and-replace to turn session.* into client.*, then (2) watch Nathan's blood boil with pure hatred.

The reasoning behind it was simple (meaning both obvious and dull-witted). The new server environment is clustered, if one server crashes, we'll lose our session, but client variables will live on in a shared client variables database. <red flags>! I could rant for a few days about the policy. There are a number of other factors that increase the fallability of the recommendation, including the use of our single sign-on service, use of sticky sessions, the fact that I tend to put components into the session scope, and on and on.

So I wrote.

First, I wrote some code to get around the entire fiasco without using a single stupid client variable.

Then, I started writing in Evernote. I have about 5 printed pages worth of blog material. I was going to blog it all, it was going to be epic. Then, I saw there were lightning talks at CF.Objective() 2011, and they needed volunteers for speeches. I pitched the Client Variable Ultimate Smackdown and was accepted! Now, I'm saving the blog-rage for sometime after May 12th-14th, and instead you should come see my lightning talk on client variables on Thursday May 12th at CF.Objective()! LTs are a lot more informal, but it's going to be a lot of work for me. I'm really excited to be speaking twice now!

I'm trying to treat my Lightning Talk a little like a melodrama, a little like a speech to anger everyone, a little like just sharing something that interests me, and a lot like revealing the shocking evidence on why client variables are probably the worst aspect of the ColdFusion Markup Language.

See you there!

Update 4/29, They officially announced the lightning talk speakers!


Book Report - Driving Technical Change

posted under category: General on March 28, 2011 by Nathan

The last book in this mini-series of book reviews (my wife laughs when I call it a book report), is the Pragmatic Programmer's book Driving Technical Change by Terrence Ryan. I know Terry as the Adobe evangelist for ColdFusion, so as a user group manager, we talk some.

Driving Technical Change is an interesting book because it's essentially a people-skills book for nerds. As I read through and discussed it with my aforementioned better half, it became evident that the basic strategies outlined in this book are something that she does every day, almost without thinking. It's a great thing to do, just not something that would have ever occurred to me.

The format is simple. You get to know a person, figure out what kind of social dysfunction they have toward you, then treat them in a way where they get what they want while you succeed with your agenda. The book is actually like a social reference for people who get in the way of technical progress. I put my copy on my shelf at work because that's where I run into these people.

Overall I liked it, on the immediate side because I could vouyeristically classify my co-workers (past and present), and on the long-term side it will be an ally for helping to share my technical position at my day job. See, I work at a big company, 160,000 or so employees. My technical agenda tends to be advocating my programming platform of choice (plus other favorite complimentary technologies as mentioned in the book) as well as my own application that I am trying to roll across the enterprise. Not everyone is as receptive as they should be, so this book is a practical perfect win.

It's an eye opener and a nice read. It went by pretty quickly, too, which means it didn't sit around a long time as big books seem to intimidate me. You learn more about the book at the publisher's site, and pick it up at Amazon for about $22 at today's price.


Book Report - Object-Oriented Programming in ColdFusion

posted under category: General on March 21, 2011 by Nathan

I am finally up to books that are new in the past few months! This is Matt Gifford's new book Object-Oriented Programming in ColdFusion. I know Matt, he's a great person, and that alone is reason enough for me to pick up his book. Problem solved. I recommend it. End of discussion.

But, who do I recommend it to?

Object-Oriented Programming in ColdFusion starts off with the lighter stuff, CFML tags and concepts that enable object-oriented development, but then includes enough of the gritty details so you don't hang yourself as soon you realize how much rope you've been given. It is very commendable how much of the important facets of CFC development Gifford fits into such a quick and entertaining first pair of chapters.

After the basics and theoreticals come the practical use. I love the way this book shows how easy it is to gain an advantage using OOP concepts. Real life discussion and demonstration of Beans, DAOs, Gateways and Services to complete the journey.

This book is very practical. It move straight from book to brain to program in a way that most will be able to follow and with a formula that will bring you near-instant success.

If you do ColdFusion development and want to know why there is all this fuss about object-oriented programming, you need this book! If you have some OOP knowledge and wanted to translate it to a real program, get it. If you are struggling with the right way to design your objects, this could be your key to success. Also, if you've been doing OOP for a while and want to know if you are doing it right, this is how you find out.

On the other hand, if you are one of the elite few hackers that invent new names for types of classes because they haven't been invented yet, maybe you don't need it. If you are an OO purist who hates to see when someone uses inheritance over composition, you may not be helping yourself by reading through.

Over all, I hope that this book makes it into every store shelf that holds a copy of any ColdFusion book. The information here is so useful, so helpful, so good, I wish everyone would follow Matt's recipes for successful object-oriented application development - the world of CFML would be a different place. Applications would all make sense. All of our concerns would be separated. All of our knowledge would be well encapsulated in our models. Simplicity would reign. Think of the children! [maybe I'm going too far with that last one... how about this:] Think of me! I don't want to maintain another awful CFML app. Buy this book already! That's my plea. Thank you.

You can learn more about it at the publisher's site, or you can pick it up at Amazon for about $35 today.

Finally, if you want my copy, I plan to give it away at the AZCFUG meeting this Wednesday (March 23). I'm a polite reader and it's in almost perfect condition. Show up if you want it.


Book Report - JavaScript: The Good Parts

posted under category: General on March 20, 2011 by Nathan

Another book I finished on my path to even getting to the books I scored over the holidays was JavaScript: The Good Parts. Let's see, how can I describe a book like this? Maybe like so: this book should be required reading for web developers before ever touching a script tag or js file. Of course we know the entire Javascript domain is riddled with bad code and bad parts, which is why a book like this is necessary.

JavaScript: The Good Parts is the ultimate Douglas Crockford book that shows this man's mastery of the JavaScript language. I've seen him speak a number of times thanks to the Yahoo Developer Network's YUI Theater. Crockford knows his stuff, it's impressive, and to have it all in text makes this book a real treasure.

The book takes a walk through JavaScript as a language, how to use the best features, the best way. It makes our old friend (or enemy!) JS really feel like something that wasn't hacked together in the Netscape basement over a decade ago (even though it basically was). A lot of attention is given to object & function composition, as it is a tricky subject especially in Javascript and something you need to figure out before you get too deep.

Crockford has some amazing quotes, too. Here's one from my favorite chapter, Chapter 9: Style, on the subject of how we format our written code.

JavaScript allows variables to be declared after they are used. That feels like a mistake to me, and I don't want to write programs that look like mistakes. I want my mistakes to stand out.

A word of warning, this book is for the true hackers. If you are getting into programming for the first time, don't even try it. If you are still working on the mouseovers for your first web site, this book won't do you any good. If you can't see where the DOM ends and the Javascript language begins, maybe practice up a bit. This book is about programming, not about web pages.

I read the book through Safari Books Online via the Safari browser on my iPhone. The good part was that it didn't log me out even once over the course of the 5 months I had the tab open (so it took me a while, did I mention I have kids?), and the mobile formatted site is great. The bad part was that every time I re-visit it after a few hours, Safari reloads the page; I have to wait for all the assets to download before I can continue. They need an app for that in a bad way.

Again, it's an O'Reilly book, so you may be able to score a copy from your local user group in trade for a publicly written review like this. If you like the sound of it, you can pick up JavaScript: The Good Parts from the publisher's site or from Amazon, a steal at about $17 today.


Book Report - Head First Design Patterns

posted under category: General on March 19, 2011 by Nathan

I've had the great pleasure of taking extra time to read this year. I had a few books given to me at Christmas, so I've been polishing off as many books from last year as I could, in order to get to this year's books. The First victim on the list was Head First Design Patterns.

I'm a huge fan of the Head First series. The first moment I saw Head First Java at my local book store, I bought it. The helpful, irreverent, comical style of the Head First series was a great change from technical books I had seen before. I sped through it, did all the puzzles, and learned a load of Java. I loved it. Not long after, I went through Head First Servlets and JSP and Head First EJB, both benefits to my web development brain, but because I don't do servlets, JSP or EJB, it was really more theoretical. I decided to bring it back into the realm of something I could actually use.

Head First Design Patterns uses the same tone, the same kinds of jokes, the same repetitous learning style that works so well, and it covers a range of design patterns as implemented in Java. Because Java is so similar to CFML, the translation to my world was easy. Also, it's not so code heavy that you need deep knowledge of Java.

The book talks through common problems we face as programmers, and the most common strategies we can use to solve them. The majority of the book is talk about these patterns - the strategy pattern, the observer pattern, the factory pattern, and other important blueprints you should know about.

One of the strange things for me was that I had already implemented a lot of these concepts. I was doing a lot of things right before I knew the name my pattern goes by. The rest of the time reading, I spent thinking about how I was doing it wrong. It opened a lot of doors that I otherwise would not have known about.

If you know a little about object oriented design patterns, or you always wanted to, I recommend this book. If you are trying to get into Object-Oriented Programming but haven't figured out how to make your objects smarter, this could be your savior. It's smart without making you feel bad. It's hard concepts boiled down to casual conversation.

Another cool thing, the book comes with a giant design patterns poster. I hang it right next to my desk and look to it when I need inspiration working on my object-oriented designs.

If you like the sound of Head First Design Patterns, it is available from O'Reilly, or where I bought it, on Amazon (down around $25 when I wrote this).

This being an O'Reilly book, you may be able to get a free review copy through your local user group. The catch is you have to type and post a review of your own like this one. Check with your user group manager.

Next up is Javascript: The Good Parts, finished just this last week.


How to get a free BlackBerry PlayBook tablet

posted under category: General on November 17, 2010 by Nathan

If there's one thing I know about programmers, it's that we love toys. Whether its Legos or smartphones, we love them. The next season's most promising toy that I've seen is the BlackBerry PlayBook tablet PC. Seriously, it's peppy and I want it. Mine is on preorder, and yes, I have a total bias because I'm getting it for free, but I don't want to be the only one. You can have it, too.

RIM currently has a giveaway program. It's simple: you make an app for the PlayBook and get it into their App World (aka the BB app store) by launch time, and they will send you the device. This developer promo is for real, so get started early. Here is the PlayBook dev overview page and the PlayBook developer resources page to get you going. I am starting with the webcasts from that last link.

Maybe it's a little ironic, you have to develop an application for a vaporware device, test it, deploy it and only then get the device, but I would argue that it is worth it. Having seen it in person, I will testify that is is a really nice toy, and I'm not above acting the shill because I really do want it to succeed.


The Single Greatest iPhone Ringtone Ever

posted under category: General on April 15, 2010 by Nathan

It's a simple concept, really. Think about it. What sound makes you sit up a little straighter? What sound makes you want to run forever? What sound makes you want to kick a turtle more than anything else you have ever heard in your lifetime?

The answer is obvious. You must be thinking of the invincible music from the original Super Mario Bros, circa 1985. As soon as you picked up the star, nothing could stop you. Fire breathing plants and flying fish fall by your wayside as you don the seizure-inducing clothes.

As a ringtone, this invincible music will own your attention every time. Your eyebrows will lift. Your heart will beat a little faster. Your hands may sweat.

As a final insult, as if you needed it, when you don't answer it soon enough, it goes into one minute left double time music. Yes, that's invincible on speed. Your b-sprint finger cannot handle ringtones of this magnitude.


Download this Mario Bros Invincible iPhone Ringtone now!

It's 500KB, m4r, just add it to iTunes, sync and change your ringtone global or per-contact settings. I made it with Adobe Soundbooth using a free wav file I found somewhere, and I converted it to m4r with Not responsible for damage.

*Update: By request, an MP3 version for you lucky ducks using Android phones. 400KB.


Reminder: Talk about the basics (and 6 reasons to do it)

posted under category: General on February 11, 2010 by Nathan

We tend to forget about the basics. Once we've mastered them, we move on to whatever else interests us. When beginning a learning project, we grow the most, we post the most questions, answers and blog entries, and we talk about our beginner problems the most. Later on, we stop talking about what it's like to get started, and for good reason, we're not getting started. It's out of sight, out of blog.

Take me, for instance. I have become so wrapped up in OO, design patterns, frameworks and extensibility, that I've nearly forgotten there are loads of new developers out there, hoping to learn something from the likes of me.

But big deal, why should we even talk about the basics? Well lucky for the universe, I've compiled this list, because we all love lists.

Talking about the basics...

  1. Gives you something to blog about
    I have like 2 posts for the entire year so far. I need some new subjects.
  2. Ups your search results ranking, bringing more traffic to your web site
    And who doesn't want more traffic? Not me, man, I want it all.
  3. Increases the stability of the global knowledge on the given subject
    Maybe esoteric and meta, but it's true. Sometimes old resources go dry, while new ones are usually prettier.
  4. Increases the keyword rank
    Increase the google trends ranking. Increase the general popularity of your subject. Get uninitiated people interested in a "that looks easy" kind of way.
  5. Gets uninitiated people interested
    If you have them saying "Hey, I can do that, it's easy" then you can add to the numbers of those working in your world.
  6. Guarantees your high place in the minds of the unknowing
    Readers like a hero, and you'll like people coming up to you, years later, expressing their gratitude.

So with that, I hereby to promise to talk about (at least a few) easier concepts, (at least a little) more often. I'll use this blog to do it. I promise to use my position as a ColdFusion software user's group manager for the benefit of newer programmers and recent and future converts.


Like puzzle games? iPhone & iPod Touch users, try Relix

posted under category: General on January 4, 2010 by Nathan

A good friend of mine (and ColdFusion developer [see how I'm on topic {note the stylish use of nested parens}]) at work has been hitting iPhone development on his spare time to come up with this game Relix. I've been playing it tonight and am thoroughly perplexed at some of these puzzles, like level 12:

It's been fun playing it, and it's only a buck, on the app store now, plus you'll be helping a fellow programmer, one of the 'little guys.'

This should link to it - Relix, the puzzle game for iPhone & iPod Touch. Oh, and do check the video, it makes starting off way easier.


Should You Go 64 Bit?

posted under category: General on November 6, 2009 by Nathan

In case you have trouble deciding if a 64 bit operating system is right for you, I give you Should I Go 64 Bit? which should finish the argument once and for all.

If you buy the upgrade to Windows 7 (which you should), you will be forced to choose - it comes with 2 DVDs, one for a 32 bit install, and one for 64 bits.

Should I Go 64 Bit? is the quick and dirty answer.

The long answer is more complicated, but I have boiled it down to your computer, if you have 2GB of memory and a 64 bit CPU, take the plunge. The only 2 caveats you may have will be software compatibility (if you have any 16 bit software, it will no longer run in Windows 7 64 bit), and hardware driver compatibility. Chances are, if your hardware is so old as to not work with Windows 7, you need to upgrade anyway, and if your software is so old, you can always virtualize.


A few miscellaneous upkeep things

posted under category: General on September 15, 2009 by Nathan

First up, Twitter. Follow me: @nathanstrutz.

Second, Facebook: Friend me: nathan.strutz.

I guess you could have figured that out, though, if you visited Hi, I'm Nathan Strutz. Hi.Im is very cool.

Finally, MAX. I couldn't talk Boeing into sending me to the annual Adobe MAX conference. I'm not sure I will ever get them to send me anywhere. There is a chance I could hit a conference if I'm a speaker, so I'll be coming up with some kind of presentation that people would like, and maybe try out for a few next year.

There is, however, the Adobe Community Summit, which is held Sunday, October 4th, right before MAX. With the price so very right (free), and the location close enough (L.A.), I'm sure I can get there.

This ACS day happens to run only a week after I bring the family home from 10 days in Alaska. We've got a lot of friends and family to visit, wish us luck with 4 kids on a 6 hour plane ride.

Anyways, if you're an Adobe ACE or UGM, and will be in L.A. in October, make sure to meet me at Community Summit day!


Microsoft is on fire

posted under category: General on June 4, 2009 by Nathan

Somehow, Microsoft is the new hotness, hitting nearly every shot they throw out there. According to my favorite game (well, from 1994) NBA Jam, the're on fire.

Windows 7
It's Vista. It just is. It took like a year for them to make it, which is nothing in comparison to Vista's decade dev cycle. They didn't re-do anything, and it's not faster, but the fact is, it's what people want, and they're loving it. The only negative things I've heard are from those who are trying to run it on their macs. Hah!

Stealing, err, rebranding basically everything from Live Search, Microsoft comes through with a word that people like ("Let me Live Search that for you") and a searching experience that, for some unknowable reason, people like. Google may have the first competition since destorying Yahoo all those years ago. Personally, I'm not convinced, but people are talking.

.NET becoming superior
The programmers have been the core of Microsoft for a long time, but it wasn't until the recent .NET framework 3.5 (and service pack 1) that they gave them Linq and MVC. These tools are finally something on par and superior to the competing Java platform. The quick movement of both C# and VB.NET have thrown these languages much closer to the top of the "cool" stack.

XBOX 360
Ok, second to Nintendo's invincible Wii is a fantastic place to be. The recent exclusive content is a real winner, and the games are head and shoulders above anything from Sony, aside perhaps from Little Big Planet. Further, their just-announced Natal project, which essentially gives you the Minority Report interface for your TV, is just, well, "Ka-boom" (in my best NBA Jam announcer voice).

Of course Microsoft has a number of smaller successes, things that have really started to go right but aren't as big. The XBOX update with mii-like avatars, Netflix on the XBOX and Media Center, and the re-invigoration of the browser war, giving us IE8, which, if nothing else, sucks less than IE7 and 6.

That doesn't mean everything they do is the bomb. I'm not about to go out and buy a Zune or a Windows Mobile phone, I'm just making observations.


Managing your application's emails

posted under category: General on April 3, 2009 by Nathan

Here's a recurring problem I've discovered. Many, if not all, of my applications send email, and they tend to do it in an unmanaged, un-object oriented type of way. For instance, if you comment on this blog entry, I and other subscribers are sent an email. The template for this email is tucked away inside a CFC, right below where I insert the record into my database. This, of course, is a problem that can be solved in a repeatable, managed fashion.

I have actually solved this problem before at a previous company I worked at. Obviously all of that code is under lock and key, unusable due to NDAs and basically unethical anyway, so instead, I am planning on recreating something like it, but better, from scratch. Hey, if nothing else, I'll just use it on this blog. Of course I'm talking about open sourcing it - why would I tease readers with a cool toy, and not share it?

Overarching idea: A reusable open source library and API for both the management and sending of emails via templates.

Basic requirements:

  • Manage storage of email templates (CRUD basics, consider varying storage options)
  • Allow dynamic variables in email templates (Dear #user#)
  • Create basic administrative UI, key on easy integration
  • Create simple API for sending email

Groupthink questions: Does anyone else do this? How do you solve it? Why have I not heard of anyone else doing it?

Final thoughts: Sending email from your application is a scenario that I see often, and can be handled by an administrative managed, reusable application. Move your email templates out of your code and reduce the complexity of your application.

Oh, and I don't have a name for it yet. I'd hate to call it the Email Template Manager or something stuffy and boring.


My experiences working with Google Docs Presentations

posted under category: General on March 5, 2009 by Nathan

I gave a recent presentation for the AZCFUG on Ant and Groovy. One interesting point about it was that I used Google Docs to do the whole presentation, including creating it, presenting it and publishing the slides the next day. Here are my thoughts, weighed out in a pro / con table.

The BadThe Good
Lack of fancy special effects or animations, only a single text fade in effect.No eye-gouging awful effects, the text fade looks nice.
Somewhat slow editing, just due to the fact that it's online instead of local, and it's HTML and Javascript instead of a native desktop application.Not so slow that it matters, will improve with the faster javascript engines coming in 2009.
Also, the features keep coming as the tools improve, no need to wait for the next $900 release of MS Office, incremental changes are just weeks away.
Have to be online to use it.Collaborative editing, collaborative viewing (I didn't use either of these, but may, in the future). Can access the presentation from anywhere on the internet.
Presentation mode has awful white lines on the top and right side, and a black utility bar at the bottom (I was using Firefox).The fact that it even has an online presentation mode is great.
The utility bar is very handy, not terribly in the way.
Can't control the presentation next/previous from the presenter's screen (when presenting with dual-screens). Controlling the presentation on the primary screen requires clicking on the slide, where the cursor gets in the way, or by clicking on the arrows in the lower left corner. These arrows can get in the way of the content. Either way, I would rather not have the cursor on the presentation screen at all.Speaker notes pop up in a separate window for dual-screen presentations.
Unlike Flash's full screen mode, it doesn't go back to the embedded size when it loses focus.
Unlike QuickTime or other embedded media players, it is very predictable.
Published slides required an iframe tag on my HTML Strict doctyped web site. Would have liked to foce visibility of my speaker notes on the published embedded slideshow.Published presentation was 1 line of HTML and was all HTML based (as opposed to Flash). Can publish on a web page, but viewers can get closer and use the full-screen view, see the speaker notes and even download it.
Exporting to a PPT file lost my gradual loading effects (eg. show 1 bullet at a time).It can export to PDF and PPT with fair enough quality. I had done this for a just-in-case-the-internet-fails backup. Plan B would have been degraded, had I needed it.
Less features than PowerPoint.Less annoyance than PowerPoint.
Had all the features I needed, not much more to get in my way.
It was evident, in stark opposition to PowerPoint, that this was about content and presentations, not about useless frustration, lining up pixels or worrying about fonts.
Limited design templates.Current template selection was adequate, I found one I liked.
Minor UI annoyances:
  sometimes wonky box selection
  smallest font size too large
  limited link type selection, no linking to slides, documents
  no shift-drag for straight line object moving
Great UI examples:
  drag & drop slides
  context menus always had the right actions
  so solid and easy, I didn't even consider using the help system
Interface was not customizable like MS Office, move toolbars, etc.Not bothersome, as it felt so good that I wouldn't want to change it around.

Overall, I had a great experience. Google Docs is constantly moving forward and this latest version of their presentation system was fantastic. I will definitely be using it in the future.


The problem with Microsoft's software platform

posted under category: General on December 19, 2008 by Nathan

I've got a fever, and the only prescription is a bunch of ranting run-on sentences...

See, here's the problem with Microsoft's software platform, especially relating to ASP.NET, but they keep doing things like this: they went from having no MVC, where web sites feel like desktop app programming, except with HTML, which really just makes no sense whatsoever and is a retarded paradigm to program for even though they pulled it off fairly well even from the first version, to finally having some basic MVC support; things that the rest of the programming universe have been doing and loving, where they finally addressed the issues where they just suck at, acknowledging that maybe all the programmers out there in the world are smart and are basically right and that the feeling of needing to make maintainable applications that aren't ridiculous to update and work with and acknowledging that letting the developers do the HTML, CSS and Javascript to do their web-based apps might be a good thing because after all, they probably work on a team with designers and deselopers and the like and the developers have to eventually be sick of the stupid paradigm of being forced to use ASP.NET's web controls and having those things write all their tables and login forms because the code those output just really sucks and they can't get in and fix it and make it look like the designers really wanted without sacrificing a lamb, by introducing ASP.NET MVC late last year, which would finally let Java programmers in, and maybe even ColdFusion and Ruby guys as well because they can all do MVC even though ASP.NET couldn't, and would also just make the platform much more approachable by traditional web developers who understand the request/response model and who like to get their markup right enough to validate and who are always annoyed by Microsoft's web stack getting in their way because there's only 3rd party support for making a normal web site instead of postback and having the whole page be a form, which again, makes no sense, ok, from that, straight into the ASP.NET MVC Design Gallery, where the traditional ASP.NET desktop software developers - and yes, I said they make desktop applications in ASP.NET because there's no other real excuse or explanation for what you're doing when you work with ASP.NET except that you're posting back and responding to events exactly like a desktop app in visual studio where you double-click on a button and write a codebehind action for the click event where it makes sense for desktop applications but falls utterly flat on the web unless you actually are doing something special with the button's onClick event like popping up a 'loading' image so the user doesn't hit the link again - now they can download and apply a pre-made design so that suddenly your MVC app is friendly, and you don't really have to do HTML and CSS because that's for web people, and programmers aren't web people, they're programmers and shouldn't have to learn html because it's somehow too difficult to understand for a programmer because after all, the programmers doing ASP.NET and dragging their little web controls onto the stage and shying away form the HTML probably actually are too slow to learn something as 'challenging' as the div and span tags, or at least Microsoft has somehow formed the permanent opinion that they are and they coddle their developers and pet them on the head and say "it's alright, you don't have to do HTML." If you commit your life to programming on the Microsoft platform, I would pretty much promise you that you will never have to learn HTML, Javascript or CSS, just C# or better yet, VB because then you can do vbscript too and program in classic ASP or make windows scripts and macros for Excel which is really all your business wants anyway. Imagine a programmer who never learns anything about what they're doing or what platform they're working on, then imagine armies of them crying and whining until Microsoft gives in and releases something that takes them from zero to hero, but you have to do it this one certain way and whenever you deviate off the path you're out of range, even for some clever googling because no one else has ever gone that path and that error number is so obscure that Microsoft would really rather that you never saw it so the MSDN page for it says something about how to get back on the right course because you tried to change the font tag to a span with a class and they didn't expect you to know what you were doing so you should leave it because, after all, IE v.16 still supports the font tag even though firefox had disbanded it 22 years after the standards committees threw the tag out and they figured no one would actually have software that generated a font tag because that would be ludicrous.

Dear Microsoft, make the developers on your platform grow some brains and learn a little about HTTP and a little about forms and links, where the Javascript goes and where CSS fits in, and how to write a multi-page form without postback (even though postback is a clever solution). See, it's too hard to know why we would implement a pattern (like postback or MVC) until we've suffered without it. There's no reason for an ASP.NET desktop programmer - yeah, i said it again - to switch to MVC (other than it's new and now has a design gallery) because MVC doesn't solve any of their problems, and MVC is better for making web applications that work together and have reusable parts and are well managed but it's not so good for just web pages, and who knows, I'm sure there will always be a market for those end-developers who really just want a web page with a login form and a table from the database and they want to call it an application even though the only cohesion it has with the rest of the pages is a link to another page and it has no reusability or management from the standpoint of the application as a whole and all the code is on the page or in a partial class which might as well be on the page except that now you have to have 2 files open in visual studio as if to prove the point that Microsoft is always trying to solve the wrong problem. Maybe if you allow ASP.NET to really be a part of the web instead of this alien spaceship that visits the web when it feels like it, then we'll drop some of the dead weight out of the programming chairs, as if the programming industry could downsize itself based on IQ, or better yet, it would let people learn some of what's really going on and how technology works and would excite them and make programming on your platform as fun and rewarding as we all know it can be like when you solve your first big problem and even though your manager wouldn't ever understand the programming difficulty you just overcame, you know you did it and you did it well, and it's 4:50 Friday afternoon so you can free your mind to have a relaxing the weekend and everything just feels right.

I like ASP.NET MVC. I really do, but I do not think it should be the first point of entry for a new developer getting into web development. I even somewhat like ASP.NET and web forms, although, I suppose in another way, I also despise them with the fire of a thousand suns, so it's maybe 50/50 what I'll feel depending on my caffeine intake for the day, but I don't think ASP.NET and web forms should be a new web developer's entry point into web development. It just isn't right. What is right? JSP is close, as it's still fairly modern and can be upgraded into an MVC pattern (many frameworks are available) as the developer matures, except for the complexity, specifically with getting your server up and running, and learning about beans and stuff, it's just overkill and that is a rant for a different day. PHP would work, except that when you look at the language you see C versus Perl with an out of control language library that could choke three camels. Ruby on Rails is a magical UFO that does MVC - too much code generation that hides what the world wide web does, not a good starter. Classic ASP, not really a language as much as a lightweight platform, and it's coupled usually with vbscript, I would say avoid it because, while not technically end-of-life, it hasn't seen any activity since ASP.NET came out in 2002 and is no longer considered modern. That leaves us with ColdFusion, which is perfect with its syntax that's similar to HTML and javascript without performing any type of web magic that can't be deduced by just looking at it, easy debugging, easy database connections, the ability to move into object oriented concepts and some well supported frameworks that give you as much MVC as you can wish for. As much as ColdFusion is touted for its ease of programming, it also doesn't hide the real web from you - it just makes it easy to get to.


Integrating 3rd party applications into yours, safely

posted under category: General on October 30, 2008 by Nathan

Reuse-in-the-small is a solved problem. Reuse-in-the-large remains a mostly unsolved problem.
Jeff Atwood from Robert Glass, Facts and Fallacies of Software Engineering

I'm actively hacking at my latest toy project, which integrates a few 3rd party projects, and I had the thought, integrating a library, like jQuery, is drastically simpler than integrating a whole application, like a discussion board or WYSIWYG text editor. How do you solve these problems?

A few years ago I attempted to drop Ray Camden's Galleon Forums into another project. My app was Fusebox, so I had to rewire some of the front end, then move the component calls back out to the circuit. Sounds fairly easy, but with 3 gaping problems.
1st, the client calls and we have to modify it heavily. It turned out the only thing Ray's app was good for, was a starter kit on the database and DAO templates.
2nd, Ray puts out a new version with features we like, avatars, BBcode and signatures. We were so far out of sync that there's no way we could implement his new version.
3rd, I was never sure how stable the rewritten code was (turns out it was ok, but I was crossing my fingers).

Result: Thanks for the starter kit, now I'm on my own.

Fast-forward a few years to my new project, and I've started integrating Edit Area, a javascript code editor, into my application. Edit Area presents a few challenges, including the build program written in PHP and the authors not being native English speakers. Also, I have some application requirements, such as no externally linked files, and oh yeah, it has to work right (grrr).

So, how do I make changes to the application while keeping myself open to future versions?

The method I chose was to make changes to Edit Area in my build file. Ant calls Groovy. Groovy reads in their file and turns it into my file, which my program includes. It is repeatable but not destructive. When the next version comes out that fixes some of my problems (and I do hope it does), it will be mostly zero effort to update my code. Their changes could break my build temporarily, but I can tweak and adapt.

The biggest issue here is the challenge of meta-programming, or programming programs to reprogram programs. It's a lot of trial and error to get it right, and a lot of regular expressions. Also, Ant isn't exactly a real programming language, so I have Ant run a Groovy script. It's initial complexity to solve a repeating problem, which is a fair trade to me.

Result: Brainiacs only, but it works well.


Required training 2008

posted under category: General on July 29, 2008 by Nathan

At work, we are required to take 5 days of training this year. This is a challenge for me on a few levels. First, I have a new baby at home, so I don't want to leave the Phoenix area. Second, I'm having trouble finding classes that are open and applicable to me.

I have a SQL Server background, and I'm using Oracle, so I tried to get into a good Oracle class, but it was cancelled, so now, I'm weighing Java and .NET among others.

Unfortunately, at this point, it's quickly turning into an annoyance that i just have to 'fix' instead of the terrific learning opportunity that I'm sure it was meant to be.

If anyone has any suggestions, I'm all ears.


Upgrading my HTPC

posted under category: General on July 15, 2008 by Nathan

With my old MCE experiences blogged, now it is time to discuss my upgraded Media Center PC. No, we're not going Tivo, that would be ridiculous. We are, however going completely off-the-shelf this time. For not much more than the price of a nice Blu-Ray player, we purchased a PC with one included, from woot. Here are the key PC stats:

  • Quad-core CPU, perfect for encoding and decoding video, and doing multiple tasks all at once, but higer electricity costs
  • Windows Vista Home Premium - I hear the upgraded media center software is fantastic
  • 3GB of RAM - 10x more than I ever used on my old HTPC, but will be nice because of Vista
  • High-def TV tuner with cable and atsc inputs - I doubt it has hardware MPEG encoding, but the recorded content will be mostly standard definition cable
  • Blu-Ray/HD DVD combo drive - I guess it was a clearance item
  • Two, 500GB SATA drives - 1TB total. If it has an IDE channel, I might bring over a 320GB drive from the old DVR
  • Card reader - a big plus, considering it is our digital photo center
  • 8-channel audio - I wish it was digital audio, but it is an upgrade from 6 channel

Additionally, we made 2 changes in the home network:
  • We upgraded the router to 802.11n - now file access will be faster from other PCs
  • We moved the router and cable modem over to the entertainment center; now the HTPC connects via 1Gb ethernet, as it has no WiFi adapter

Overall, this will be a good, much needed upgrade. We've been enjoying having an XP media center so much, I think that with a faster CPU, it can only get better.


My Media Center experience

posted under category: General on July 10, 2008 by Nathan

A couple years ago, I wrote about my experiences with building my first Media Center PC - a low powered, half-purchased, half-constructed PC, DVR, file server and entertainment center based on Windows XP MCE. Since then, I've discovered a few things that have been working really well, and a few things that have not. These are my experiences.

Things that worked really well:

  • Low powered CPU - budget-wise, has been nice on the electricity bill, considering this PC is on 24/7
  • Purchased instead of built the core components - this gave me rock-solid stability, rebooting mostly just for an occasional sound glitch
  • Recycling old IDE HDDs - gave me about 750GB of total storage
  • DVD cataloging - We just put unwatched or often-watched movies on the HDD so we don't have to relocate the discs
  • uTorrent's WebUI - I can access it from my desktop PC, which is only on occasionally, and have my media center download torrents 24/7
  • MCE's movie library - allows us to access DVDs, Divx and home movies across multiple HDDs
  • File server as a central location for our gigantic digital photo library
  • 6 channel audio - even though our receiver supports 7.1, we only have a 5.1 speaker setup anyway

(jump break - things that sucked up next)

Things that did not work so well:
  • Low powered, single core CPU - clocking in at 1.4GHz, I have roughly enough CPU to record 1 live TV show and, just barely, watch another
  • Single TV Tuner - I want to record more than one show at a time - Windows can handle more, the CPU can't
  • Nero software - burning shows onto a DVD was incredibly time-consuming. Again, this is probably CPU related
  • Inability to play HD content - my plasma TV loves it, but the CPU is too weak - I get low frame rates, then the audio stutters, then the video
  • IDE HDDs - No SATA support means I maxed out my available IDE channels with 3 HDDs and a DVD drive
  • 802.11g with a cheap USB 1.1 adapter - it is online, but moving files across then network is slow
  • Web Guide - Microsoft's free software to access MCE functionality over HTTP has CPU and network bandwidth requirements beyond my setup
  • Media Center music library - my hundreds of albums slow the library to a crawl while they are fine in Windows Media Player
  • Access permissions between users and PCs is annoying with workgroup networking, and having a domain server is overkill

Other miscellaneous thoughts:
  • I have about 640MB of RAM, which doesn't seem to even matter; I rarely use more than 300
  • The Windows MCE license came from an MSDN subscription, and I did do some development and testing with it, but I'm probably using it for more than the license permits
  • I had originally tried to use Ubuntu + MythTV, but gave up in compatibility and configuration frustration
  • Thanks to my CPU issue, I can't even consider upgrading it to Vista

My upgrade is coming soon...


What is Nathan doing?

posted under category: General on June 18, 2008 by Nathan

My mother-in-law passed away last month, and I haven't really had anything to say here since then. I have some pre-written stuff, I just didn't really feel like posting it. We're still coping with the loss.

At work, I just got a major release out of the way. It was 6 months in the making, so my boss is prodding me to become "agile," as in, regular releases with smaller changes. I agree, so I'll be experimenting with it. A year or so ago we had a client who demanded us to work with their agile process, which was just a huge, uncomfortable time wasting disaster. It makes sense in development teams, not so much in a business end where you're paying developers in another company, halfway around the globe, by the 6-minute increment to sit in your daily hour-long "scrum" calls. That was just set up for failure from the start.

I had some thoughts on code coverage, but I'm still not sure how to word it. I think my current application's code coverage is around 15% - hey, it's better than zero!

Firefox 3 - I'm liking the new features, but I've had a few javascript-heavy pages that wouldn't render, such as the uTorrent WebUI that I have running on my media center box at home.

Alanda got a new notebook (dude, guess what brand). Great machine, but riddled with problems, and, for the record, the Intel X3100 is NOT a decent video card for ANY gaming whatsoever. We're returning it, free of charge. Would buy again. Instead, Alanda's letting me build her a PC. She'll take my old video card (GeForce 8600 GTX) and I'll get a new one (probably a 9600, waiting for the price drop once the new nVidia cards are out in a couple weeks).

We're taking her old tablet PC downstairs to stream media to the TV. The downstairs (it's just a single, small room/bomb shelter from the 60's) is being converted into a workout room.

Final note, we've gone 'N'. I upgraded my router to an 802.11N Linksys. This will make a huge difference with movement of video files and music to and from our media center / file server / backup server (via Mozy).

We have to tell our kids that most people don't have a computer on their TV. They're like "Wow, really? Why not?" They have no concept. It's adorable.

In summary, I'm sad, I'm busy with home PCs, and I'll keep blogging.


Running Vista Ultimate 64 bit

posted under category: General on May 6, 2008 by Nathan

At home, I've been using Vista Pro, 32 bit for nearly a year. I got it free from a developer promo Microsoft was pushing. I'm fairly cheap, and fairly into developing windows software, so I went for it. My XP install at that point was almost 2 years old, which is ancient for me. I was eager to wipe it and try out Vista.

A few months ago, Microsoft had another promo, and I, being cheap, traded my privacy for Vista Ultimate. My software came last Saturday.

If you don't know, when you get Vista Ultimate, it comes with both 32 bit and 64 bit discs. Since I was going to trash my Vista Pro install anyway, why not go 64.

I decided to split up my primary partition and make room for an XP install to make sure my kids' software still works, and, you know, just in case. Truth is, Vista can't be trusted.

So I installed XP, which overwrote my boot record. Now only XP will boot. I formatted my boot partition and installed Vista 64 - a good experience, but not as good as installing Ubuntu. Now only Vista will boot.

XP's recovery software is awful. Truly bad. Wait 20 minutes for the DOS-like installer to load SCSI drivers that I don't need, then give me a crippled DOS prompt. If you destroy your boot records with XP (which I did 4 times), Vista's install disc will fix it for Vista, but there's no clear way to get them to dual boot.

Eventually, with a few lucky googles, I stumbled on EasyBCD. Great software. A few trial & error reboots and now it's perfect.

The 64 bit nature thus far has been a real sleeper. Vista hasn't crashed yet, so that's good. I haven't installed enough software to notice the larger memory footprint. The only thing even noticeable is the "Program Files (x86)" folder and the special designation for x86 software in the task manager. Not bad. So far, everything has just worked. I think the real test will come when I reinstall Crysis.

As for it being Ultimate, animated desktops, a poker game and drive encryption are not worth the extra money I would have paid.

Overall, it's good. I like having the things I wanted from Home Premium along with my IIS7 that I liked from the Pro version. The price was right. No complaints.

Next, I'm going to try triple-booting by adding Ubuntu.


CSS naked day already

posted under category: General on April 9, 2008 by Nathan

Yeah it just pops up on me every year. I can't believe it's already CSS Naked day.

I wish they would have it on the same day every year so I don't have to change my code. A week ago I moved my CSS Naked script up from the 5th to the 9th. Good thing, or I would have been a little premature.


Software quality update

posted under category: General on March 4, 2008 by Nathan

I said a few months back that I had decided to go head first into software quality as a general scope to become proficient at, so here's an update. I'm proud to announce that I've been making good progress.

I have been using Selenium to test some of my web applications. It can get complicated, but so far it has been marginally worth it. After figuring out the system, I set up a test suite for one app and have been working on it. I will blog about this experience soon.

I looked into CFUnit and CFCUnit. These are both CFC unit testing tools. If you google it, you won't learn which is better. They both have really good pluses. I went with CFCUnit because Sean Corfield and Chris Scott said so and it was easier to get working. Unit testing, even on the handful few components I applied it to, has already paid off really well. I will be doing more of this.

I made a couple Ant scripts. It's definitely starting to pay off, so I'm not giving up. I think I just now "get" the paradigm, so things are picking up. I will blog this one soon, probably after Selenium.

I will be playing with these new tools for a long while now before declaring myself king (or whatever it is I do before I get bored and move on).

Some day, I would like to explore some sort of DBUnit testing. I am seeing at least half a dozen angles for this, but two in particular. First, to test database relational integrity and just performing crud operations on all the tables, I would need a framework to support that - this isn't unthinkable to do in CFCUnit. Second, to snapshot my data's current state for when the data changes due to any testing and I would like to be able to change it back, quickly and easily.


The best keyboard in the world

posted under category: General on January 29, 2008 by Nathan

I call myself a real hacker, so naturally I'm at my keyboard a lot. In mid-2007 I passed a budget approval through the family finance committee and began researching keyboards. I have a few important criteria that are all important. I'm not a really picky person, I can jam on a standard dell keyboard and do alright, I can type fine on strange and annoying keyboards just fine, and with practice, on a notebook, but we all know there's getting by, and then there's getting what you really wanted.

This is my list of must-haves for selecting a new keyboard:

Must be a full sized keyboard
Must connect via USB port (for speed and compatibility)
Must not be split for ergonomics
Must not have a malformed control navigation area (home, end, insert, delete, pgup pgdwn)
Must not have a malformed arrow navigation area (I hate you, MS natural keyboard)
Must have a numeric keypad, spaced out from the rest of the keyboard
Must be wired, both because I don't want to fiddle with batteries and for responsiveness
Must have multimedia control buttons, specifically volume control
Must not be a mouse/keyboard combo
Must cost less than $100
No generic brands
Extra gadgets, buttons, sliders and such are a plus

Logitech has exactly one choice that fits my criteria, the $99 G15 Gaming Keyboard. I like games, but I don't know if I'm that hardcore. Programmable keys and the LCD screen are nice.

Microsoft also has exactly one choice that fits my criteria, the $30 Digital Media Pro Keyboard. No screen, but many other strengths, and less than 1/3 the price of the Logitech choice.

NewEgg revealed some other choices from Saitek and Belkin, but both seemed to have compressed layouts and odd designs. Amazon showed basically nothing else.

So of the two choices it looks like I have, I chose the Microsoft Digital Media Pro Keyboard. $70 extra for a keyboard screen doesn't really sound like a great deal for what I do.

I've been using my Digital Media Pro Keyboard now for a few months and have been very happy with it. I highly recommend it to anyone who is looking.

Have you fallen in love with a keyboard? Share your obsession, write a comment.


Good Reading: Wikipedia Anti-Patterns

posted under category: General on January 16, 2008 by Nathan

Some of the anti-patterns listed on Wikipedia's page are way too familiar. It's good reading in the sense that we should learn what not to do. Here are my favorites that hit closest to home:

  • Bug magnet: A block of code so infrequently invoked/tested that it will most likely fail.
  • Anemic Domain Model: The use of domain model without any business logic which is not OOP because each object should have both attributes and behaviors
  • BaseBean: Inheriting functionality from a utility class rather than delegating to it
  • Lava flow: Retaining undesirable (redundant or low-quality) code because removing it is too expensive or has unpredictable consequences
  • Ravioli code: Systems with lots of objects that are loosely connected
  • Copy and paste programming: Copying (and modifying) existing code rather than creating generic solutions
  • Reinventing the square wheel: Creating a poor solution when a good one exists
  • Tester driven development: Software projects where new requirements are specified in bug reports
  • Crisis mode (a.k.a firefighting mode): Dealing with things only when they become a crisis, with the result that everything becomes a crisis
  • Seagull management: Flies in, makes a lot of noise, craps all over everything, then flies away.
  • Warm bodies: The worker who barely meets the minimum expectations of the job and is thusly shunted from project to project, or team to team.


Using regex in your IDE #2

posted under category: General on December 7, 2007 by Nathan

We had some good responses to yesterday's post, Use regular expressions to be clever in your IDE, so today I'll post another example. This time, it's the exact opposite.

Yesterday, we created code that will end up like this:

querySetCell(myQuery, "first_name", "Nathan");
querySetCell(myQuery, "middle_initial", "J");
querySetCell(myQuery, "last_name", "Strutz");
querySetCell(myQuery, "phone", "480-123-4567");
querySetCell(myQuery, "country", "US");
querySetCell(myQuery, "state_province", "AZ");
querySetCell(myQuery, "city", "Phoenix");

Now, what do you do when you want to get just the column names out of that mess? For me, I would use this search pattern:
querySetCell\(\w+, "([^"]+)",.+

The regex says to find the word "querySetCell", any query name - the actual word myQuery could be put here -, a quote, then save any character that's not a quote up to the next quote, a comma, and then anything until the end of the string (in our case, the line).

With regular expressions and code, always remember to escape special characters in your code, such as parentheses, square brackets, backslashes and so on.

Replace it with this matched text:
Or be creative :)

There you have it, right back to the original list we started with yesterday.

Another thing to remember is that it's the parentheses that define the backreferences ($1 because we have just one). Nothing's stopping you from capturing the content in the column value portion of the querySetCell calls. Something like this would allow you to use that as $2:
querySetCell\(\w+, "([^"]+)", "?([^"\)]+)"?.*

Then replace it with:
myStruct.$1 = "$2";


Use regular expressions to be clever in your IDE

posted under category: General on December 6, 2007 by Nathan

Here's something I do almost daily it seems. So much so that I take it for granted. A couple months ago a friend was looking over my shoulder and he exclaimed "What the--? You've got to save that and send it to me!" I explained how it was just throw-away code, and I could send it to him if he wanted. The code is long gone but that reaction stuck in my mind, so let's dive in with an example.

You have a list of values on lines and you want to want to apply some code to each:

Select the lines, and use your IDE's find/replace tool with the regex option. In Eclipse, this is just CTRL+F and check the checkbox. Use this as the search pattern:

This regex says to select any line with at least one character in it and store it in a character group.

Some code like this would be the replace pattern:
querySetCell(myQuery, "$1", "");

Replace them all and your code will be generated in an instant. The regex will drop each line's content into the $1 backreference.

There are dozens of other types of uses just like this one.


HTML was so easy, what have we done?

posted under category: General on December 4, 2007 by Nathan

We all remember it. HTML was easy. That's how we all got started. For a beginner, just starting out (over a decade ago for me), it was straight forward and easy to get into. Make (or take) some images, put them on a page, maybe use a table. FTP it to geocities or one of those bargain basement $50/month web hosts. Bam! 300 visitors a month, easy.

Now what have we built for ourselves?

These days, to make a good site, you're pretty much required to have advanced HTML and XHTML skills, CSS mastery including managing floats and positioning, fine tuned event-driven object-oriented javascript abilities, DOM manipulation, command over Photoshop (or whatever you prefer), firm knowledge of AJAX, XML and JSON, and also have a handful of frameworks under your utility belt.

Then your site is useless unless it can connect to a database (SQL knowledge required) and do some neat tricks (knowledge of ColdFusion, PHP, ASP.NET which is the .NET library, the ASP tag library mixed into HTML and a language like c# or VB.NET, or, Java, for which you would know JSP, JSF and/or plain Java servlets, and probably Spring and Hibernate). Use of a server-side language then requires an architect, a business analyst, requirements gathering sessions, high-level and low-level diagrams, usability studies, flowcharts, requirements docs, use cases, test cases, project managers and so on.

Of course you get more traffic now, too, so you probably need dedicated servers, clusters or server farms. Virtualize some of that to save space (and add complexity). Redundant hardware load balancing is a must, along with redundant firewalls, redundant switches, redundant servers and redundant disk arrays with redundant hard drives. And what about disaster recovery? You'll have to get a redundant datacenter in Arizona with redundant power and cooling.

Now what have we built for ourselves? Job security, higher salaries, and a big industry with lots of workers. That's what.

(entry continued after the jump)

It's been amazing to watch it grow from a garage operation in the 90's to what it is today. Amazing. Astounding even.

The first web site I visited was made by one guy and it ran from a cluster of 4 servers. One day he deleted the home page., seriously. The FTP site was far more interesting than the HTTP site.'s oldest record is from October 1996, by that time they had some real features, and were toting IE 3.0. Now it's multiple data centers with thousands of servers and workers.

This whole thing is amazing, and it's all because we all got into HTML in the 90's. Good job, team. Thanks for employing me. I hope I've helped make it complex as well and helped employ some of you. Of course simplicity is always the goal, sometimes the simplest way to do something requires the most complex solution, but that's another story.

Now, the down side is that it's harder to get into. Much harder. What was simple HTML and leeching images is now a large handful of connected technologies, which you must know to contribute nearly anything more than your myspace page. Try breaking into the world of web development today and I'll ask to see your master's degree. A lot of those ho-hum web guys are ones who got into it late and didn't get those foundational elements.

That's why the smart software companies are opening up easy routes in. Microsoft's free express tools are exactly that. ColdFusion is always there and Adobe Elements is a great effort, but aimed more at those who will never make it all the way into the industry.

The web business is more complex, but it employs us, and I think software companies forget how hard it was to get us here.


Hal and Jeff are back | Matt and Peter are back

posted under category: General on September 11, 2007 by Nathan

I've been enjoying my commute the last couple weeks, as it seems Hal Helms and Jeff Peters' podcast "Out Loud" is back in business and Matt Woodward and Peter J. Farrell's ColdFusion Weekly podcast is back from summer vacation.

For Out Loud, the August 16th episode talked about jQuery, which I have subsequently taken up and fallen in love with. The August 31st episode talked about layer separation of your view layer and finding/creating/defining beauty in coding, a couple of subjects that have always interested me. Interesting how different layers of a layered architecture can be broken up.

CF Weekly, I confess, I haven't listened yet. I will have to get to it during tomorrow's commute. Looks like a big welcome back and news party from the show notes.

It's a little difficult to sync my iPod without a video card. Not impossible, just very, very difficult. Dual core due Wednesday. :D


The Yahoo YUI Theater

posted under category: General on September 5, 2007 by Nathan

Here's something I spotted that should be pretty interesting to all developers who like to learn by way of video. I stumbled upon the YUI Theater.

Now, before you get scared off, if you're not interested in the YUI javascript framework, the YUI Theater isn't about YUI as much as it is about javascript in general.

I'm progressing through Douglas Crockford's segmented presentation "The JavaScript Programming Language". He has an incredible amount of information that comes very quickly. I'm glad they split it up into 4 parts so I can breathe in between.

One that looks great to me is Joe Hewitt presenting on his own project, Firebug. Another is John Resig's javascript framework presentation (John Resig is the creator of jQuery).

There is a serious amount of content on the YUI Theater site, and I recommend that anyone who touches javascript try learning some more via Yahoo.


Firefox - enable spell checking programmatically

posted under category: General on August 17, 2007 by Nathan

Just playing around with Firebug and I noticed that my form fields have a "spellcheck" field. Of course Firefox doesn't spell check plain text fields normally, so it's set to false except in text areas. The cool part is that this is just a plain attribute. Feel free to turn it on, like this:

document.getElementById("myTextInputField").spellcheck = true;

Then start typing in that text input field and Firefox will spell check it as you type.


No, Thunderbird did not just delete all your email.

posted under category: General on June 15, 2007 by Nathan

I just had a minor freak-out because it looked like Mozilla Thunderbird (my email client of choice) just deleted a ton of email. Years worth. I was moving it to an archive folder, and when I went to check the folder, it was all gone. Just a handful of emails were left. They weren't in my inbox! They weren't in my archive folder!

I left and checked the file system. The new archive folder files were 50 MB, the old inbox was still 150 MB. Something wasn't right.

My next thought was that I didn't have a backup. This is the one place I've found Windows Vista (hey, I got it for free) to shine - Shadow Copy. It's like a constantly running backup on the same disk that reminds me a lot of Eclipse's local file version archiving. I restored my mail folder back a couple days and expected everything to be peachy. Guess what? Nothing changed.

My inbox was noticeably a couple days older, but my older mail was still gone. Ok, this is getting weird. I re-restored to my current-date inbox.

After poking around a minute in the Thunderbird interface, I found the Rebuild Index button, conveniently located on the folder's properties window (right-click on a folder, properties, Rebuild Index button). It took a few seconds and suddenly everything was back.

No, Thunderbird did not just eat all my email. It was still there, safe and sound, but boy did that give me a scare.


I use Google Reader, and I like it.

posted under category: General on May 25, 2007 by Nathan

There was a question posted on the cf-talk list about feed readers. In an effort to make everyone exactly like me, I said I use Google Reader, and here's why I like it.

I find the shortcut keys essential, so much so that I keep trying to hit "j" when reading blogs on other sites to get to the next entry. I typically get a few hundred of entries a day, many of which I can go next, next, next right past, then star the deeper stories for later reading.

There's a "share" button on each story that kicks out a feed of its own here's mine). You can find a little widget on the left side of my blog with my latest shared items. I like the idea of sharing what I find that's cool, so there's fresh content on my blog even if I'm not writing anything.

Then there's the Google Reader tools on the iGoogle homepage - I use the Reader pod and have a few individual RSS feeds directly in their own pods. iGoogle is the first homepage I've used since yahoo circa 1996 - I had about:blank until about a year ago.

Perhaps the most fun and obscure feature of Google Reader is the Wii version. It makes reading my feeds simple and fun from the couch. This very responsive interface has naturally easy controls, which I love.


Adobe Web Studio CS2 Review

posted under category: General on May 22, 2007 by Nathan

I thought now that CS3 is out, I should probably write up something about my experience with CS2, since Adobe was nice enough to give it to me free (thanks to User group giveaways).

The box cover was large and colorful. The inside box itself had a black-on-black A for Adobe logo. I put up a couple nice shots of it on Picasa for you to see for yourself.

The installation.
Really, there were 2 parts to the installation - installing Adobe products and installing former Macromedia products. Adobe products included Photoshop, Illustrator, GoLive, Acrobat, and a couple other things I've never used nor plan on using, like Bridge, Version Cue and LiveCycle Designer. There were lots of disks, I hope this ships on one DVD next time around. The Macromedia software installation was as simple as ever, click a couple buttons and it all comes off of one disk. Macromedia software included Dreamweaver, Flash Pro, Fireworks, FlashPaper and Contribute.

Photoshop CS2.
The undisputed king of all computer graphics, Photoshop, is as good as ever, but honestly, it hasn't changed much in the last few versions. There's a lot of people who would debate its bloatedness and complexity, but for those of us who have been using it for 10 years, it couldn't be easier. So it helps to learn a couple hundred keyboard shortcuts, you're smart, you can learn them. So maybe it takes a gigabyte of memory, that's memory well spent. Anyways, all the old favorite features are in here, but I get the sense that the new features were hardly more than putting enough in just to make marketing look good. I'm just saying, it was a little light compared to changes in some of the previous upgrades. Maybe not worth of a full upgrade from CS, in my opinion. Not to say that I don't love Photoshop, and perhaps there are a few big time savers in there that will allow you to justify the cost. In fact, the layer organization features alone may be worth it, but that's your call.

Continue on to read the thrilling conclusion...

Illustrator CS2.
I haven't used a lot of Illustrator, but trying it out a couple times since I installed this version has been a very satisfying and fun experience. Illustrator is just as technical as before, but somehow it works a little better and makes more sense. I hate to say it, but this version of Illustrator makes Freehand look really bad. This is the most fun I've had in a drawing program since Auto-Illustrator. I will be using this one more.

GoLive CS2.
I've used GoLive since it was GoLive CyberStudio for the Mac, though I've never used it much. It's been a fine editor for a long time, but always lacked that pro feel of Dreamweaver. I cracked this version open a few times only to click around, get bored and close it again. I did, however, use it to open an XML file one time, and I've got to say, that was a treat. The collapsing tag view was perfect for browsing and editing XML nodes. This, however, is the only reason I think I would ever use GoLive again.

Dreamweaver 8.
I've used Dreamweaver since the original beta version, so I'm fairly comfortable with it, though I haven't ever committed to it, thanks to HomeSite/CFStudio and CFEclipse. Anyways, this release is better than ever. DW's tried and true "we don't change your code" strategy is always a winner when using the design view, and Dreamweaver remains the best tool out there for visually designing web sites. The code editor still, for no reason whatsoever, feels wrong, like it's not fast enough or instantly gratifying enough. I can't explain it. The greatest thing is the huge list of file types it supports. It gives intellisense and highlighting for almost any web-related file type. It's solid, never once crashing for me, and I believe it opens a fair amount quicker than the previous version. Dreamweaver 8 is a very nice program, and is becoming easier and easier to use, while not forcing developers to give up control.

Fireworks 8.
Again a Macromedia product I've used since it entered beta, and I'm happy to see some of the ideas from fireworks entering Photoshop CS3. Likewise, a lot of the advanced photo editing features that MM "borrowed" from Photoshop are here, but not nearly as well polished. Fireworks is a truly fun web image program that instantly gratifies. It's fun to use, but even as much, I would only use it on the types of projects I worked on, say, 7 years ago - these were tourist sites, simple 6-page brochures, etc., where I did design, graphics, HTML and programming all by myself. Sadly, I personally don't have much use for it today. Ahh when times were simpler. :)

Flash Professional 8.
The program I have used the least of all. I just don't do flash anymore. I never really loved the event/action/keyframe programming model - I know it's better now, but I'm too buried in CF to do any flash. Sadly, I have nothing really to say. I played with it for a couple minutes just to say I had, and I fire it up whenever I have a flash file to edit, but that's so rare these days. It does export to previous versions of the flash player quite well.

The Rest.
Contribute: Never used, probably never will.
Flash Paper: I keep hoping to find a reason to use it.
Bridge, Version Cue: Bloatware, in my opinion.
LiveCycle Designer: Could be cool, if I take time to learn it.

Overall, it's an amazing software package to own for any developer. Thanks to the AZCFUG and Adobe for supplying it, I really do appreciate it a lot!


GParted - Best Utility Ever

posted under category: General on April 24, 2007 by Nathan

I bought a new hard drive last week, along with my new video card. Now I had to figure out how to get all my data off of one drive and onto the other. The only thing I could think about was good old Norton Ghost, which surprisingly is still being made, version 10.0 now, but it's $70! Then there's Partition magic - another Symantec product and another $70! No thanks, when I know that the open source community has to have something better. And, of course, they do.

Free, in every way, the GParted LiveCD is a 40MB ISO Image that you burn to a CD, which then becomes a bootable Linux OS and application all-in-one that manages all your partitions and hard drives. When you boot with the CD in, it starts the GUI and GParted application which allows you to visually manage your drives and partitions. It slices and dices, it visually resizes. I copied and pasted my 2 partitions (I always have 1 for the OS and applications, one for everything else) onto my new drive, and it worked like a charm. It was very stable, very fast, and very easy to use (if you've ever managed partitions before). Plus, it saved me potentially $140.

I'm happy to say that my HDD migration went flawlessly thanks to GParted.


A calm in the storm...

posted under category: General on April 23, 2007 by Nathan

I had a weekend without phone calls, the first for a little while. I've been very busy, pretty much since November with a little work project. Oy! What a ride, and it's finally close to final production. But it looks like things are finally cooling down, so I'll try to start blogging again :)

Thanks for tuning in, all. I promise to not be too boring.


Save your life in subversion

posted under category: General on February 22, 2007 by Nathan

A few years ago, I read a story on Slashdot about a guy who saved his linux home directory in CVS.

Today, John Blayter mentioned someone doing exactly that but only with their Eclipse install.

What an interesting idea, I thought. I could save my plugin configuration and my workspace folder in subversion. I can roll back when things get screwed up, and commit when I make a good change. Ahh, but what about hacking at home versus at work? How about a branch for each? Maybe work will be the main trunk and I would be able to merge changes from home while rebasing changes from work. When I install a plugin, I can make a new branch for it to see if I like it. If I do, I can roll it back into the trunk and rebase with the home branch. If not, I can drop the branch and roll back to the trunk. I can track different eclipse versions and test compatibility with my other plugins. This really could solve a number of problems.

I'm not sure I would do it. I don't currently have a place to hold my entire Eclipse setup, with versions. But the idea is something to think about, for sure.


Phoenix CFUG, Feb 28 - Desiging the Obvious

posted under category: General on February 21, 2007 by Nathan

Just wanted to echo the word that this month's AZCFUG meeting will be Robert Hoekman, Jr. talking about his excellent book "Designing the Obvious". From what I hear, this is a great book and the subject is something everyone in our field should be aware of.

Also, you can probably guarantee we will be giving away a copy or two, and who knows what other stuff you might score just by showing up. Then there's the social interaction with making contacts in the community, which is good for your career. I'm just saying, there's like a hundred reasons to come to these things, even beyond learning the subject matter.

As usual, the meeting will be held at the UAT in Tempe, AZ at 6:30 PM. Hope to see you there!


Interactive Sites would like to hire you

posted under category: General on February 16, 2007 by Nathan

Interactive Sites, Scottsdale, AZ.

We're hiring ColdFusion developers. New this round: varying skill levels are OK, and we have training options for promising candidates. Also, PHP/ASP etc. developers will be accepted, providing they have good experience and would like to learn different technologies. To everyone outside of the Phoenix area with stronger ColdFusion skills, consider this position and send in your resume (training may not apply if you're out-of-state). Everything I said last time still applies. Free snacks, great environment and some of the smartest people around.

We've got a lot of other smaller benefits, things that aren't technically benefits, like Alan (my co-worker who manages the CF user group - AZCFUG) shares some Adobe freebies like Flex posters and the like. Also, Alan's server in the office hosts dopefly and other employees' personal sites, so it's free. Sign up, send in your resume!


Photo: Adobe Acrobat Connect works on Nintendo Wii

posted under category: General on January 25, 2007 by Nathan

I connected to the AZCFUG (Arizona ColdFusion User's Group) presentation last night with my Wii's browser, and I felt my geekieness factor hit the roof, so I snapped a handful of pics.

Click for a larger view and a couple thumbnails.

The one shown is a couple together because I couldn't get the lighting right.


Need a PS3?

posted under category: General on January 16, 2007 by Nathan

I saw this stack of 60 Gb PS3 systems at BestBuy yesterday on my way to pick up a game for my Wii (WarioWare). Are these things really just not selling?

This was in the BestBuy at Raintree and Northsight in Scottsdale, AZ.


Brushing off the dust

posted under category: General on January 9, 2007 by Nathan

Ahh what an incredibly busy holiday season. It's just now starting to wind down, and I'm starting to feel more rested, even though I've been staying up late the past few nights.

In November, I went on my first client trip, across the country to NJ, and even hit up the Big Apple for an evening. Came back and stood in line for the Wii with successful results. Then thanksgiving left us with 16 turkey eaters in our home. We spent Christmas, my 28th birthday and New Year's up in Alaska with my (numerically) huge family. Kids played in snow for the first time. All the while, my gigantic project, the reason for going to NJ, was due on Jan 4th. We made that deadline, just barely, but now have a lot left to make it right. And I'm talking huge project. Like, you may hear about it in the general public huge.

Anyways, I'm back in the saddle, for the most part. Work's still busy, but not THAT busy. I think the AZCFUG has some news in the near future about summer events, and I promise to not leave the blog so long next year. I've got a couple more cob webs to clear and some mice to kick out, so I'll see you all around.


AZCFUG - Dates moved again - now it's November 6!

posted under category: General on November 1, 2006 by Nathan

The October AZCFUG meeting is now on Monday, November 6th. We had a booking problem with the Tempe UAT main presentation room.

The subject is still regular expressions, the presenter is still yours truly, and the CFUG is still giving away our last copy of ColdFusion MX 7 Professional (or it's monetary weight in Adobe software!). It looks like we may be be raffling tickets to drum up revenue (still waiting for that corporate sponsorship), so bring a few bucks to make sure you get into the drawing.

If you're in Arizona and want to learn (or better your knowledge of) regular expressions, this is your chance. If you like nearly free Adobe software, show up and buy a lot of raffle tickets. If you want to get ahead, make connections, etc., show up and hang out! See ya there!


Is it time to sell out to Google?

posted under category: General on October 11, 2006 by Nathan

I don't mean for my daily searching. I mean for all of my typical work (minus programming). Exactly how wrong is it to completely sell out?

Today, Google released Google Docs, which basically googlized Writely and strengthened their link to Google Spreadsheets. I've been using both for a while, for personal, portable docs, and you can tell that things are really starting to get exciting. Without expending too much brainpower, anyone can see where they're going.

Google Docs and Google Spreadsheets are the cornerstone of their office offering. Combine that with GMail and Google Calendar, whose integration with each other is becoming completely awesome, and you've got 90% of the typical use for most office suites.

Of course, no one's office is the same as any others. Some of them offer presentation software, some drawing software, some note taking, most have basic web site tools. Open Office has a mathematical equasion tool. Microsoft has a diagaraming app and a project management app. Corel has a photo editor. KDE's KOffice has all of this, plus dedicated charting and reporting tools. Google has mapping and searching built in.

I think that Google's office is almost completely viable in this space. What's missing? What's coming next? Other than the possibility of a new tool here or there, I'd say it's obvious what's next. Packaging. Google Office Suite is coming soon. It's already so close. They only need a central launching point for their tools. I can see many opportunities for central launching points, such as the google personalized homepage, gmail, search results pages, etc. The google talk desktop app would be my personal favorite.

Very soon now we'll start seeing "Web 2.0"-style companies switching to Google as their central document repository and dealing with customers and clients through the Google Office.

Next step? The Google Hosted Office Solution! Stay tuned...


My -cheap- HTPC project: budget is spiraling

posted under category: General on October 2, 2006 by Nathan

So I had this grand idea a few months ago, to build a home theater PC. You know, a DVR/PVR to record TV, and if it doesn't record, I can have it hit the torrents and download the episodes, have skype running as our long-distance phone, hold my 20+ GB of music and play it whenever I want, let my kids use it to play disney/pbskids/nickjr sites and other kids games, and download video podcasts. The best part was this was only going to cost a couple hundred bucks, thanks to a Fry's GQ cheap PC ($200), a simple memory upgrade ($40) and MythTV on Linux ($0).

Well, here's my story so far...

The GQ PC has an AMD "Geode" processor. Yeah, I hadn't heard of it either, but it's for low-power, low-heat applications, so it's fine. 1.4 GHz or so. I tried out the Linspire Linux OS that came standard, and let me tell you, Linspire is garbage - I installed Ubuntu (dapper). I had a simple TV card ($40) that I thought would work, and I would use that 1.4 GHz to compress TV to MPEG on-the-fly. Well, it turns out, there are no linux drivers. Ok, so I buy a Hauppague 150 card, with a remote ($90). The S-Video connector on the 150 is only video-in, so I buy a cheap nVidia card ($50) to get video out because I know it's well supported on Linux.

Now I try to install MythTV. The Debian library for Dapper only has MythTV 0.18, and MySql 5.0. Those are incompatible. I downgrade MySQL to 4.0. MythTV has other problems, I manually upgrade to MythTV 0.20 and re-upgrade MySql to 5.0.

Sigh. It works. Kind of.

I get no sound in MythTV. Also, there's a blue border on top of my TV screen. I try to ignore it. I use VLC to check the TV signal, it works great, as does the sound. I'm starting to figure out how Linux works, but I'm not sure why they chose to do it this way. MythTV is recording sound, but can't play it back. It's not muted, it's not the volume. Hey, maybe if I install the remote, I can turn the volume up (sounds nice, right?).

IVTV (the IR remote driver) is a mess, their entire model is crap. I'm sure they put a lot of work into it, but it just doesn't work. I can't use the latest version of the remote driver because Dapper's kernel is a couple micro-versions back.

Originally, I thought MythTV would do a lot more. Turns out, it doesn't do hardly anything. It connects a few disparate systems and drivers, and ultimately is just calling other applications via the command line. I'm having less faith in it.

So now I can watch TV without sound, or record it and watch it later in VLC with sound. My remote doesn't work, and there's still a blue border around the top of the screen.

I figured this was a good time to give up. I've got all the parts, and certainly enough horsepower to run Windows, so I install Windows Media Center Edition ($no comment). It's great. It works. I install the drivers and I'm watching TV in minutes. It sucks that Windows works so much better.

But, now, the remote doesn't work. It controls the tv card's native software, which is pretty lame compared to the Win MCE TV software. Now the remote will let me rewind & pause TV, etc, but not change channels and control MCE, and after a couple minutes of working, it quits, every time. Why doesn't it work? Apparently MCE can only use MCE remotes. Period. Sigh.

MCE remotes are another $40+, so I talked Alanda (my wife) into getting a lower-end Logitech Harmony remote ($90). It's on its way as I write this, so I hope it will eliminate at least some of my 7 remote controls. Otherwise, Windows Media Center is chugging away, recording all the important shows (like Lost and JoJo's Circus).

I have some high hopes for it still. I couldn't get the new remote interface to uTorrent working, but I'll keep up on that as they release new beta versions. I'm thinking of getting Democracy running to manage video podcasts, but I'm not convinced that ther are any worth watching on TV. I also need to buy a skype phone handset ($50?) so it feels like a telephone. I think that will make it a lot easier to use. Then I need a bigger HDD ($100). And a DVD drive ($30). And... (forever).

Grand total so far? Over $500 and climbing.At least it's been gradual, and it's a fun hobby, and a real learning experience. That's what I keep telling my wife.


I told you I would do it...

posted under category: General on October 1, 2006 by Nathan

Thanks to Bryan and Michael of the ColdFusion Podcast and their 2 minute dissertation on the ownership of this blog (which was really funny), I have redesigned Dopefly to include my name in much more obvious places, and increased the font and layout sizes enough for it to be visible from space.

That wasn't the only reason. I was looking for a way to get more horizontal space in here as well, and was getting bored of the old dusty feel. I think I still have some problems. Alanda's tablet makes the background look "puke pink," and there's a display problem with IE (isn't there always) on the top nav.

Overall, I would call this a great success for CSS and included display (header & footer) files. This whole change wasn't more than a handful of hours.

Please comment if anyone has other display issues with the site. Complaints about it being too wide are valid, as are color scheme gripes and so on. Thanks all.


Interactive Sites is hiring!

posted under category: General on September 15, 2006 by Nathan

Interactive Sites, my employer, is hiring ColdFusion developers. We have at least a couple positions open, possibly more. We have a lot of exciting new projects coming up and are quickly finding ourselves in need of more CF programmers. If you live in the Phoenix area, or anywhere in the US, and want to check out what we have to offer, drop your resume into the form here:

As a quick summary of what it's like working here over the past year, I can say what's cool. Snacks and beverages are provided (anything you want), it's a very casual environment and you can wear what you like. We typically have music playing in the main area, monthly birthday parties, Christmas decoration competitions. The engineering dept goes to lunch together most days (for those that want to eat out, so it's not everybody most of the time), and that really builds friendships and teamwork. We have intellectual conversations about practically anything, my favorites are subjects like the USB RAID array, making millions of dollars with simple web apps, finding new ways to automate everything and replacing our former employees with shell scripts.

If you like the programming scene, love playing with CF, making web sites, and coming up with new ways to solve new problems, send us your resume!

If you write CF in a dull environment and are bored or underpaid, you owe it to yourself to see what it's like here.

If you live in Alaska (like I did), or anywhere cold, wet or humid, you should really think about this opening.

PS, Here's the official opening.


It's at the bottom...

posted under category: General on August 29, 2006 by Nathan

A comment on this week's ColdFusion Weekly vaguely mentions my blog's lack of an about pod. Well, Matt, Peter, my about pod is at the bottom of this blog's main page. Also, on the bottom right, just below the sand dune, or whatever that is, is my name.

Actually, I was just happy to hear my project mentioned. Thanks guys, I love the show.

Incidentally, I got a mention of my Reactor reverse-engineering disaster scenario project on The Coldfusion Podcast. It's just cool to be known, sort of like cheers. They didn't use my name either, though, so I'm starting to get the hint.

Now you've got me planning on a design update for Dopefly. Stay tuned, folks.

PS, Strutz is pronounced like "struts." ;o)


Flash Cookies (literally)

posted under category: General on August 24, 2006 by Nathan

Happy birthday, Flash. 10 years already. Here's a picture I snapped from my Nokia before I scarfed this little puppy down.

Flash Cookie
Speaking of little puppies, our little beagle puppy, Zorro, is back living with us after a few years off. It feels sort of like the cosby show.


Installing Ubuntu is very, very fun

posted under category: General on July 11, 2006 by Nathan

So I installed Ubuntu last night onto my newish $150 PC. The plan is to make the cheapest DVR possible. I've been planning this for a while and haven't been motivated until just recently.

Anyways, the Ubuntu installation process. First off, if you put the CD in on Windows, it will tell you about Ubuntu and allow you to install some of the Windows open source software it carries on the disk - things like Firefox and OpenOffice. That's nice.

Once you boot from the CD, it loads Linux, just like a Linux live CD. It gives you the full Gnome shell, applications and games you can run and so on, with an icon on the desktop labeled "Install." Double click and it starts the easiest install process I have ever witnessed, plus all the while, you can play solitaire or surf the web while the installation finishes up in the background.

If you follow down my path, check out Automatix to get you a good head-start on the software you need.

Now as soon as I figure out my video drivers and install MythTV, I'll be set.


Eclipse Callisto out now!

posted under category: General on June 30, 2006 by Nathan

For those of you who use Eclipse (which should be everyone by now, for one reason or another), The Eclipse Callisto project is out!

Callisto is the simultaneous release of 10 major Eclipse projects, including the Eclipse Platform 3.2 (required for the latest beta of CFEclipse) and Java Development Tools, The Eclipse Web Tools Platform (HTML, Javascript, CSS, XML and more), the Data Tools Platform (making Eclipse a strong database developer tool) and a whole lot more.

Download it now at the Eclipse Callisto Page.

p.s., Digg my story, then add me as a friend :)


Searching for javascript frameworks, day 2

posted under category: General on May 11, 2006 by Nathan

I've had a lot of good responses from yesterday's question about Javascript frameworks, and the search continues. Here's what I'm still considering:

Prototype is popular, more than I thought, especally with Scriptaculous. Sounds like a winning combo, but it can be a big download.

The new Adobe Spry seems quite cool, very promising, and, since I'm still choosing, would be an awesome thing to get into at the ground floor (it was released yesterday). One negative is that Spry is an "AJAX Framework," not necessarily javascript and not big on effects, but those Flex-style layouts are just great.

MooFX got big props, from the few people who use it. It requires their "prototype lite", which sounds like a cool deal and a smaller download. Looking at the samples, the syntax doesn't seem as obvious as Scriptaculous.


Choosing a javascript framework

posted under category: General on May 10, 2006 by Nathan

I've been thinking about choosing a javascript framework for a few weeks now, and, having no experience using any, so I was hoping for suggestions.

Frameworks on my radar are Prototype, Dojo, Scriptaculous, MochiKit, and I've briefly hit up the frameworks page on the Ajax Patterns wiki, but have become pretty completely overwhelmed.

Does anyone actually use OSS JS Frameworks? For all of my projects, so far, I have always built my own from scratch, but I'd love to build on the work that a lot of others have already put in.


How the CF community should engineer a scaffolding replacement

posted under category: General on March 17, 2006 by Nathan

This is me scratching down some notes for my theoretical scaffolding project, a mechanism that takes a database model and turns it into a set of forms and records pages.

We need to pre-generate forms give the flexibility to modify. Forms dynamically created on request would not be so easily customizable.

Do we marry the scaffolding framework to an ORM such as Reactor, or do we have it create the necessary DAOs itself? In the effort of not duplicating any work that has already been done, and to not render any pre-installed data access layer useless. Our project should have tie-ins to the various ORM frameworks and require that one exists. It should, however be possible to extend the framework to use any custom data model layers, and to force it to manually map to a cfc/function. To summarize - this tool is not a SQL generator - there are plenty of those elsewhere.

[Reading Fields]
Where does the data come from? If we are going to force the use of an ORM like Reactor or ARF, we may be able to read metadata out of those objects. It would be safer than reading it out of the database, in case the ORM uses aliases to certain tables. Creating autowiring to all of the major ORMs has a huge possible headache factor.

The product should ship with a few templates, Flash forms, plain CFForms, plain HTML forms, etc, a few of each. Each template should probably contain named field templates. The idea here is the rendered template is as close to a form that you actually want to use as possible. The less modifying on the end-result, the better.

Furthermore, the item list page should have a few templates to choose from to complete the round-trip process. Again, we should include a few with the framework.

More after the jump...

We need to make a way to include the most popular form validation techniques, be it qForms, cfform default validation, custom server-side validation, validation based on the ORM, or any combination of the above. The template page will control where validation messages appear (if inline).

[Table Metadata]
We all have (or should have) metadata on most of our tables - who created this and when, is it deleted, etc. You don't want that info printed out on the form, and you shouldn't have to delete it from the generated code every time you make a form. This would be a fairly simple system of checking which fields shouldnt' show up.

An attractive, easy-on-the-eyes administrator to manage everything on a global level, manage the generation of 'scaffolds', manage a scaffold on an individual level, and manage each and every form field, including displaying, default values, linking selects, form field types, etc. Yes, this is very granular. You will have to drill down a ways to find these details, but if we don't put it in, nobody will be happy.

[Client Ready]
Imagine if we had a client-ready, somewhat dumbed-down interface. Your CMS users could make their own forms based on a generic table. This may be a side-project, but a useful one, nonetheless.

Re-generating a scaffold shouldn't overrwrite everything if any changes have been made to it. We should consider partial regeneration where possible.

[Rediculously Easy]
It needs be easy to set up and create the first few forms. Easy as dropping the files in a folder and hitting it in your browser. Perhaps a quick setup page and a tour mode that turns on helpful tips for your first few times through. We have to tout the real WOW factor.

[Recognize Changes]
Something I know Reactor does, if a table changes, it modifies all the CFCs it has created for said table. New fields should be added instantly to forms.

[Special Data Rules]
Everybody's database has special rules. For instance, deleting a record sometimes means changing a deleted bit flag. This change has to be reflected on the item list. Changes of this sort should be considered and many will likely be adapted as an administrative option.

[Framework integration]
Many developers using this product need framework support. As such, framework code needs to be generated and inserted into the correct and logical place. Of course, options would exist to prevent tampering with your configuration files. In these cases, developers should be presented with framework-specific code that they can insert into their files manually.

[Framework reliance]
To Be Determined. The administration tools should be built to harness a framework, and use of frameworks should be implicitly preferred wherever we go. I have no preferences, personally. I may like to stick it in model-glue just for giggles (thanks Ray Camden).

I have a feeling I'm biting off more than anyone can chew. This stuff is totally open for public ridicule/flames/corrections/additions/praises. Leave comments!


So happy with stuff I find on

posted under category: General on March 6, 2006 by Nathan

Anytime I need some kind of utility, I know can find it at I know I can't be the only one with this experience, but you've got to agree, there's just no equal. And the level of quality on some of the projects hosted there is just astounding.

Today I needed an FTP to local file synching tool. I could build it myself over the next 4 hours, or use someone elses (that probably will work better), so I found a few, all under $40, but I'm cheap. Then it hit me, duh, sourceforge. So, one quick search nets me FullSync, a very simple app that does one thing, and does it good. Works like a charm.

Of course it's not the first time. How could I forget the day I stumbled upon CDEX, FileZilla, Azureusor WinMerge? I bet I've got 50 of these stories.

The open source community in general are some of the nicest folks I know of in the whole world. Thanks open-sourcers. You're the best!


1st Page 2006 released. Pigs sprouting wings.

posted under category: General on January 20, 2006 by Nathan

6 years and no releases, and finally Eversoft releases 1st Page 2006. It's the same, free HTML editor it's always been, just newer with a lot of cool stuff.

Take a look at the features list on this one. Specifically the CSS and cross-browser help it gives you. Yep, it looks mighty familiar. Ladies and gentlemen, it's nearly a free version of Dreamweaver. It's got scripting support for all our favorite languages, and looks like even some tools lost in transition from HomeSIte.

Of course I'm not switching from my much loved Eclipse, but I do plan on giving this a shot, I could use a free HomeSite/CF Studio replacement in my tool library, couldn't you?


10 reasons why I don't blog more

posted under category: General on January 20, 2006 by Nathan

10. Getting tired of my blog admin - I made the app myself, and cheaped out on administrative features, now I don't really want to use it
9. Long list of important things, and blogging is about #18
8. Holidays and family keeping me busy
7. Already blogged almost everything for Fusebox and CFEclipse I could think of
6. The only thing I want to blog about is a certain company who fired my wife for Christmas, but they appear to not like their name out in the open and have angry lawyers
5. Busy at work, JB is killing me - I enjoy it and all, but I'm busy
4. It's more fun writing my new blog software than using the old
3. It's more fun writing software than blogging, and I've been playing in c# (if you hadn't noticed)
2. 2 hours of commuting every day, taking time away from the wife & kids - awake time goes to mostly to them
1. Call of Duty 2 (pc version)


Free internet! (or, fun with wardriving)

posted under category: General on December 5, 2005 by Nathan

It seems our local cable technician can't jot down a MAC address correctly, so we were net-less over the weekend at our new place. The bad thing about that is my wife had some howework due at 5 am on Monday (that's today).

This is when we learned about Alanda's tablet's great wardriving features, including toshiba's radar app where networks come on and off, moving toward the center, closer for higher strength signals. Drag a line from a network to the center and you connect.

We had a lot of fun, and were amazed by how many houses and businesses have wireless networks, and how many of them are unsecured and open. We sure do appreciate the help, residents of Chandler. You're tops in our book ;o)

I'm thinking of taking the password off of my router.


New iPod Owner

posted under category: General on December 1, 2005 by Nathan

I just had to mention how pumped I am about my new video iPod. This thing really is cool! Alanda got it for me for our 5th anniversary last weekend (I got her a new wedding ring - it's sort of a long story). Anyways, the iPod really is everything I was hoping for, and with the video features, podcasts, video podcasts, and 30 gigs of space, I can't imagine ever getting bored with it. The tiny screen is completely incredible.

Transferring movies to it is as easy as processing them through Videora Converter and adding them to my iTunes library. I'm still trying to get used to iTunes, vs my old standby (since '97) WinAmp.

Now i'm busy looking for cool accessories that fit the 5th gen iPod. They're a little rare, but I'm patient.

PS, my wife is the best :)


Stupid web tricks out of boredom

posted under category: General on June 11, 2005 by Nathan

Visit at night and you'll get a different skin than the normal daytime look & feel. It's just a tiny bit of date/time math and switching a stylesheet out, but it's cool, and a nice project for a Friday.


Musical Baton Meme

posted under category: General on May 26, 2005 by Nathan

And coming in days late, it's time to put up or shut up, all thanks to Sean Tierney, who reminded me to post this last night at the cfug meeting. So...

Total Volume (of my MP3 library): 18.2 GB

Last CD Bought: "Phenomenon" - Thousand Foot Krutch

Song Playing Right Now: "I Sigh" - Sackcloth Fashion

Five Songs I Listen to a Lot:
* POD - Asthma
* Andy Hunter - Go
* Blindside - Pitiful
* Chevelle - Vitamin R
* MeWithoutYou - Four Word Letter (Pt. Two)

Five People to Whom I'm Passing the Baton:
And curse the rest of you? No, I'll be kind. Not to say there aren't a lot of people who should fill this out, like, oh, say, Rob Rohan, or maybe John Blayter, who's blog appears to be offline due to server problems, or how about Sarge, Andy Jarrett, or Mark Mandel. But I wouldn't want to put other people through this. No not me.


Programmers, Prepare Your Pranks!

posted under category: General on March 30, 2005 by Nathan

As a friendly reminder that April Fool's Day is just around the corner, and better yet, it's a weekday, for those of you who run any intranets, here's a little code to get you going. Just a simple little trick, but it gets the job done. Click below to view it (just a little CF, mostly Javascript).

<cfif not dateCompare(now(),"4/1/#year(now())#","d")>
var r = Math.round(Math.random()*100);
function dang() {if(r==25){document.bgColor=getRandColor();setTimeout("dang();",50);}}
function getRandHex() {var b16=new Array(1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f');return b16[Math.floor(Math.random()*15)];}
function getRandColor() {var c="";while(c.length<6){c+=getRandHex();}return c;}

Try it out. Doesn't do anything? There's a 1% chance that it will, but once or so out of a hundred hits, you'll get a random color flashing page background. Refresh and it's gone! Pretty sneaky, no?


Macromedia Pens

posted under category: General on March 24, 2005 by Nathan

Went to the AZCFUG meeting last night. There was hardly anyone there (I think it was due to short notice), but there was a nice spread of junk/schwag/stuff/gear to give away. I scored two of those amazing macromedia pens, a gel pen and one with its own sleeve. I've gotta ask, is there anything better in the world?

Everybody out there should hit up your local usergroups. You can really score some decent stuff. Last year I won a copy of CFMX Professional. I've won 2 books and 4 pens this year. If you're not involved, you should try it out.


Thunderbird hits 1.0

posted under category: General on December 7, 2004 by Nathan

I've been running Thunderbird since the 0.6 release, and it's been incredibly stable, an honest step upwards from outlook express and outlook 2000 that I had been using, plus it's free. Earlier today (well, yesterday, it's after midnight now), Mozilla released Thunderbird 1.0.

If you use Outlook Express, the free email program that comes with Windows, you shoud seriously consider upgrading. Thunderbird will migrate your mail and other settings so there is nothing to set up. It's easier to use. Easier to customize. It has built-in spam control -- it learns what spam is to you and can automatically delete it for you. There are already dozens of extensions and themes for Thunderbird, including many good time-savers.

If you use a more complex mail program such as Outlook, but don't find any use in the extra "bloat" features such as the calendar, tasks and sticky-notes, give Thunderbird a test drive for a few days. It's a lot faster and smarter overall. It's also more secure than Outlook.

If you're already using it, upgrade to the 1.0 final version. If you're not, look into it and try it out. "Reclaim Your Inbox!"


Professional tip #1

posted under category: General on November 1, 2004 by Nathan

Here's a professional tip:
Have a family.

Having a family reduces stress on your life (assuming your family life isn't stressful). Lower stress equals general happiness and contentment with life, which is important for feeling successful professionally.

Having a family, especially with kids, increases your income. At the very least, you get the dependant tax-break, but moreso, people with families generally make more money. Why? It's probably a balance of parents who know they have to work harder to create stability, and businesses who feel some warmth to people who rely on them to take care of others. I'm sure there's more there, if you were to dig deeper.

I'm no pro, really. I just saw it on 60 minutes a few months back and wanted to comment.

Anyway, my family (including week-old Jude) couldn't be happier.


Thunderbird users: Compact This Folder!

posted under category: General on September 28, 2004 by Nathan

If you're using Mozilla Thunderbird to manage your email, this is important. Right-click on your folders, one at a time, and select "Compact This Folder." Don't worry, it's safe. It seems to flush out messages that were deleted, but still take up space in the mailbox

My mail folder was over 100MB for one account, and after compacting my mail folders, it ended up just over 40MB. Certainly worthwhile to remember to do every once in a while.


Gmail invites for ideas

posted under category: General on August 31, 2004 by Nathan

Give me a suggestion on how to improve this site, and I'll send you a GMail invite. It's as simple as that. I've got 6 to send right now, and my site sorta sucks :o) Leave your ideas and your address in the comments below!


Hotmail Junk Filter

posted under category: General on August 17, 2004 by Nathan

Now that I've got 250MB in my ancient Hotmail account, I can actually have the junk filter send messages to my junk mail folder, instead of straight to the trash. That's good, but I wish I could've done it sooner. Looks like Hotmail was filtering out ALL KINDS of mail. 5 out of the 24 it deemed junk were actually good, valid emails. Things like password requests and newsletters I'd signed up for, and had, at one point, been receiving regularly. Even the CFDJ newsletter I didn't know I was supposed to receive every month.

It's amazing the kinds of things you find just by looking harder.


Hotmail - 1% of 250MB

posted under category: General on August 16, 2004 by Nathan

Looks like hotmail is sneaking in their 250 MB upgrade this weekend. What a relief. I've had a hotmail address for ages, and I've lost more than a few emails due to the old 'Your Inbox is reaching critical size' problem.

It's about time Hotmail catches up to the rest of the internet standard. Yahoo already upgraded to 100MB, and of course GMail with 1GB.


The DopeFly Tech Blog

posted under category: General on August 12, 2004 by Nathan

So, welcome to my techie blog, thanks for reading it. Very kind of you. This isn't my first ever web log, in fact I've had plenty of the more manual versions in the past, since 97 or so. This one is by far the coolest (I think say that every time).

I made it myself, so there's a few things left to do to make it as cool as a real live blog, like searching by categories, dates, showing a little calendar of posts, maybe links to other blogs, all nice things that blogs tend to do, although I'm just guessing, since I've never even seen a real being administrated.

The more I work on this thing, the more I realize I should've just used raymond camden's blogCFC. But the experience was fun.

I've got some content brewing in the back of my head (and in my palm pilot), so this should be fun.Stay tuned.

Nathan is a software developer at The Boeing Company in Charleston, SC. He is essentially a big programming nerd. Really, you could say that makes him a nerd among nerds. Aside from making software for the web, he plays with tech toys and likes to think about programming's big picture while speaking at conferences and generally impressing people with massive nerdiness and straight-faced sarcastic humor. Nathan got his programming start writing batch files in DOS. It should go without saying, but these thought and opinions have nothing to do with Boeing in any way.
This blog is also available as an RSS 2.0 feed. Click your heels together and click here to contact Nathan.