post Category: Uncategorized — josh @ 9:48 pm — post Comments (0)

Historically, I am not a regular blogger. It’s something that I have battled with ever since trying to utilize the medium. I have tried different subject matter and different formats, but could never seem to stay on top of it. I thought that had changed with this blog, but then I look and I have 6 (now 7) posts streched out over the last few months. While I think that I have finally picked the right path, there are still things that bother me.  How do I budget my time so I can say what I would like to say? How do I stop second guessing myself? How can I get into a rythm? These are all questions I am working to address in 2009.

Looking forward, I plan to take control over every aspect of my life, including this blog. I have recently met with the bosses at my office to unclutter my work life. And I plan to do the same with my headspace. I have been working hard to finish projects that I have started and am beginning to see real results.  While that’s part of the reason that I haven’t spent more time here, I will no longer sacrifice one project to benefit another. I am commited to all my projects and I will spend the needed time to give them the attention that they need. I may think twice about taking on more projects for a while though.

For this blog, my goal for the new year is to be a productive blogger. There are many topics that I think to write about everyday, and I will put pen to paper ( or font to screen ) in a more proactive way. Along with posting more, I am going to finally move away from the free themes that have driven the look and feel of this site. I have loved the ease of use, but it’s imperative that I put my own touch on the style of the site.

That’s it for rambling on a late December night. This post that was drafted as an apology for gaps in posts has become a plan for the future. In my mind, the latter subject is much more constructive.

post Category: Uncategorized — josh @ 3:11 pm — post Comments (0)

You learn something new everyday (at least you should) and today I learned that although my hosting package has unlimited space, the individual FTP accounts have default limits around 10mb. During the upgrade to wordpress 2.7 yesterday, I exceeded the limit in that account. This left the site in a half uploaded state and hosed everything.
I am back now and the upgrade was totally worth it!

post Category: Uncategorized — josh @ 2:19 am — post Comments (0)

A lot of speculation comes with the idea of monetizing Twitter. With recent news that they have a plan for Q1 of 2009, more is sure to come.

When I first came across the suggestions of how to monetize the microblogging service, inspiration struck. I have been kicking it around from time to time for the last few months and it still seems like a solid option.

My idea shares it’s base with every other internet cash generating scheme, advertising. The only difference is the delivery method. Users have already begun placing traditional web advertising directly on their Twitter pages. The only problem with this is it’s limited audience. Because of the api driven tools available, it’s rare that users see their own page for much, let alone surf the pages of the people they are following. In the traditional ad sense, users that have ads on their own pages are basically advertising to themselves.

The way I see it, every one that places an ad on their website is essentially an evangelist for each company and service that they serve ads for. Where Twitter could break the mold is by using it’s members posts, or tweets, as the delivery mechanism for ads. Each member could sign up for an ad service, allowing the advertiser to post on their behalf. The draw for users would be a cut of the click through revenue generated. The bigger your audience (followers), the higher the cut. This creates a draw for users to utilize the service more to drive up their audience and in turn, drive more traffic to the advertisers. Ads would get pushed in-line with regular user posts to every existing desktop client and mobile client. Even social networking status updates (think Facebook) would serve these ads, making them the farthest reaching on internet. Think about how well Google Ads does mainly because of Google’s user base. Google users are everywhere and take Google Ads with them.

To me, this seems very doable. In fact, anyone could create this business by utilizing Twitter’s api. Although, if Twitter doesn’t get to it first, they will be forced to find a different model to start making money. This model would almost defintely come from a paid API or something of a pay to post, or pay to follow model. Either of which runs the risk of making users flee to a different service.

We’ll see what the big idea Twitter has next year. It will be interesting to see how the service changes, no matter what direction they go.

post Category: Uncategorized — josh @ 3:40 pm — post Comments (0)

* Editor’s Note *

It should be noted that this is a repost. It was originally posted on the company’s internal/external blog crosspixelnation.com. Whle I normally would not post content twice, it became obvious that it didn’t get the visibility that I was hoping for. While this blog has much less visibility overall, I can at least keep it in an area where I have more control.

Thanks,

Josh

We recently picked up a copy of Robert C Martin’s Clean Code, a book that expels the virtues of developing clean, reliable code.  Right off the bat, the first chapter speaks directly to everyone on the product team, and has great value for anyone that writes even one line of code.

*sorry for the long quote, but I wanted to make sure it all made it in here*

The Total Cost of Owning a Mess

If you have been a programmer for more than two or three years, you have probably been significantly slowed down by someone else’s messy code. If you have been a programmer for longer than two or three years, you have probably been slowed down by messy code. The degree of the slowdown can be significant. Over the span of a year or two, teams that were moving very fast at the beginning of a project can find themselves moving at a snail’s pace. Every change they make to the code breaks two or three other parts of the code. No change is trivial. Every addition or modification to the system requires that the tangles, twists, and knots be “understood” so that more tangles, twists, and knots can be added. Over time the mess becomes so big and so deep and so tall, they can not clean it up. There is no way at all.

As the mess builds, the productivity of the team continues to decrease, asymptotically approaching zero. As productivity decreases, management does the only thing they can; they add more staff to the project in hopes of increasing productivity. But that new staff is not versed in the design of the system. They don’t know the difference between a change that matches the design intent and a change that thwarts the design intent. Furthermore, they, and everyone else on the team, are under horrific pressure to increase productivity. So they all make more and more messes, driving the productivity ever further toward zero. (See Figure 1-1.)

Figure 1-1 Figure 1-1 Productivity vs. time

The Grand Redesign in the Sky

Eventually the team rebels. They inform management that they cannot continue to develop in this odious code base. They demand a redesign. Management does not want to expend the resources on a whole new redesign of the project, but they cannot deny that productivity is terrible. Eventually they bend to the demands of the developers and authorize the grand redesign in the sky.

A new tiger team is selected. Everyone wants to be on this team because it’s a green-field project. They get to start over and create something truly beautiful. But only the best and brightest are chosen for the tiger team. Everyone else must continue to maintain the current system.

Now the two teams are in a race. The tiger team must build a new system that does everything that the old system does. Not only that, they have to keep up with the changes that are continuously being made to the old system. Management will not replace the old system until the new system can do everything that the old system does.

This race can go on for a very long time. I’ve seen it take 10 years. And by the time it’s done, the original members of the tiger team are long gone, and the current members are demanding that the new system be redesigned because it’s such a mess.

If you have experienced even one small part of the story I just told, then you already know that spending time keeping your code clean is not just cost effective; it’s a matter of professional survival.

Attitude

Have you ever waded through a mess so grave that it took weeks to do what should have taken hours? Have you seen what should have been a one-line change, made instead in hundreds of different modules? These symptoms are all too common.

Why does this happen to code? Why does good code rot so quickly into bad code? We have lots of explanations for it. We complain that the requirements changed in ways that thwart the original design. We bemoan the schedules that were too tight to do things right. We blather about stupid managers and intolerant customers and useless marketing types and telephone sanitizers. But the fault, dear Dilbert, is not in our stars, but in ourselves. We are unprofessional.

This may be a bitter pill to swallow. How could this mess be our fault? What about the requirements? What about the schedule? What about the stupid managers and the useless marketing types? Don’t they bear some of the blame?

No. The managers and marketers look to us for the information they need to make promises and commitments; and even when they don’t look to us, we should not be shy about telling them what we think. The users look to us to validate the way the requirements will fit into the system. The project managers look to us to help work out the schedule. We are deeply complicit in the planning of the project and share a great deal of the responsibility for any failures; especially if those failures have to do with bad code!

“But wait!” you say. “If I don’t do what my manager says, I’ll be fired.” Probably not. Most managers want the truth, even when they don’t act like it. Most managers want good code, even when they are obsessing about the schedule. They may defend the schedule and requirements with passion; but that’s their job. It’s your job to defend the code with equal passion.

To drive this point home, what if you were a doctor and had a patient who demanded that you stop all the silly hand-washing in preparation for surgery because it was taking too much time?2 Clearly the patient is the boss; and yet the doctor should absolutely refuse to comply. Why? Because the doctor knows more than the patient about the risks of disease and infection. It would be unprofessional (never mind criminal) for the doctor to comply with the patient.

So too it is unprofessional for programmers to bend to the will of managers who don’t understand the risks of making messes.

The Primal Conundrum

Programmers face a conundrum of basic values. All developers with more than a few years experience know that previous messes slow them down. And yet all developers feel the pressure to make messes in order to meet deadlines. In short, they don’t take the time to go fast!

True professionals know that the second part of the conundrum is wrong. You will not make the deadline by making the mess. Indeed, the mess will slow you down instantly, and will force you to miss the deadline. The only way to make the deadline—the only way to go fast—is to keep the code as clean as possible at all times.

The Art of Clean Code?

Let’s say you believe that messy code is a significant impediment. Let’s say that you accept that the only way to go fast is to keep your code clean. Then you must ask yourself: “How do I write clean code?” It’s no good trying to write clean code if you don’t know what it means for code to be clean!

The bad news is that writing clean code is a lot like painting a picture. Most of us know when a picture is painted well or badly. But being able to recognize good art from bad does not mean that we know how to paint. So too being able to recognize clean code from dirty code does not mean that we know how to write clean code!

Writing clean code requires the disciplined use of a myriad little techniques applied through a painstakingly acquired sense of “cleanliness.” This “code-sense” is the key. Some of us are born with it. Some of us have to fight to acquire it. Not only does it let us see whether code is good or bad, but it also shows us the strategy for applying our discipline to transform bad code into clean code.

A programmer without “code-sense” can look at a messy module and recognize the mess but will have no idea what to do about it. A programmer with “code-sense” will look at a messy module and see options and variations. The “code-sense” will help that programmer choose the best variation and guide him or her to plot a sequence of behavior preserving transformations to get from here to there.

In short, a programmer who writes clean code is an artist who can take a blank screen through a series of transformations until it is an elegantly coded system.

full chapter

The realties of agency life can make it hard to code cleanly when client deadlines are set in stone and features are not. Code creep is an enemy to all of us. It will take time to get ourselves to a point where we know that we are putting the best code out there for our clients. Internally though, we can make all our lives easier by creating code that’s easy to test, understand and maintain over time.

post Category: Uncategorized — josh @ 4:09 pm — post Comments (0)

Just prior to the birth of my daughter I decided to change my last name to honor my natural father. I wanted my daughter to pass on my real family name. There are many things to consider with a name change like, driver’s license, the IRS, social security, etc. The change it took me longest to make was my Google identity. I had a great email address with <lastname>@gmail.com that worked well for me. I was able to get it because it was a pretty unuique name and the rest of the family wasn’t as aware of gmail when I snagged it. Over the years, I have built that identity through email contacts, gtalk friends, and Googe Reader feed subscriptions. Letting email and gtalk contacts know was as easy as “If you want to still talk to me, hit me up <here> instead of <here>”. With RSS subscriptions, it wasn’t was easy. A website doesn’t care if it can reach you or not. It’s owners may care, but the site itself doesn’t really know about you so why would it care? So, I put that change off for the last year thinking that I would have to resubscribe to all those feeds. Until today.

Migrating was easier than I ever could have imagined, and it was right there in front of me if I just would have spent more than a second thinking about the fix rather than the problem.

In the Reader account that you are mirgrating away from, click “Settings” in the upper right corner. Once in there, click “Import/Export” to export your subscriptions in OPML format. In your new Reader account, again to go “Settings” then “Import/Export” and this time, import the file you just exported. That’s it. Done.

It should be noted that this feature will also help you migrate to and from any other RSS reader.

Happy feeding!

post Category: Uncategorized — josh @ 2:29 pm — post Comments (1)

At the end of last year, I was asked what a major trend in 2008 would be. My answer was quick and easy, Linux on the desktop. This response was met with mixed emotions. I could tell from the body language that 1) it was an interesting theory, 2) it wasn’t totally agreed with and, 3) the person had no idea how to approach it.

While I am not the first person to suggest the “year of the linux desktop” and I won’t be the last, it’s good to see that 2009 is going to see Linux have a chance to make a serious dent in the market.

The driver behind this new wave of Linux is not the full replacement of Windows, but a supplemental boot to provide an “instant on” system. Windows is still there to do the desktop heavy items, but for simple tasks like checking email and surfing the web, there will be an alternative.

I have long abandoned Windows as an OS outside of specific tasks and a testing VM. As an IT person, I hardly expect everyone to make the switch. What I do like is the increasing awareness of an option. Linux is still years away from being the only OS on a system, but this drive towards using the openness of the system to provide a better user experience is refreshing.

From the article….

What does this mean for Linux? First it means that Linux is more central to the user experience. As the New York Times points out, this is “Microsoft potentially losing the user experience.” Linux is not only powering fastboot applications, but the Moblin project has already demonstrated a five second boot at the Linux Foundation’s recent Plumbers conference.

link: http://www.linux-foundation.org/weblogs/jzemlin/2008/10/29/linux-to-ship-on-more-desktops-than-windows/

post Category: Uncategorized — josh @ 1:36 pm — post Comments (0)

Welcome.