Caffeinated Coder

A Grande, Triple Shot, Non-Fat Core Dump by Russell Ball

Browsing Posts published by Russell Ball

trollUp until recently I thought I had to resort to the lottery or white collar crime to fund my beach house.

However, soon after hearing a story on NPR about software patent trolling, I decided to finally apply for that patent on the blog reading technique that I’ve worked so hard on inventing (patent # c7c0f810-e5b8-4b64-9cfc-e7a93cc1d9cf).

Needless to say, my invention is extremely complicated. It involves the internets, procrastinating at work, and anonymously leaving lots of rude, off-topic comments on blogs.

My lawyer, Guido, will explain it to all of you in more detail while you cut me a big fat check (I captured your IP Address when you loaded this page).

Unfortunately, I won’t be able to go after most of the software giants, who spend billions to purchase random software patents for no other reasons than to defend themselves through the threat of the counter-suit.

On the other hand, if something happens to my beach house and I can’t manage to think of any more incredibly obvious ideas on my own, I could always follow the lead of Oasis Research, who purchased a broad patent from 1998, formed a company with no operations, no products, no employees, and started suing the hell out of people.

Since defending against a patent infringement suit cost millions of dollars and most companies are willing to settle even non-meritorious suits they consider frivolous for several hundred thousand dollars, it’s a pretty lucrative business model.

Then again, if I get really ambitious, I could always follow the lead of Intellectual Ventures. They managed to raise 5 billion in venture capital, purchase 35,000 patents, and then charge protection money…oops, I mean fees… to their clients so that their butcher shops wouldn’t get burned down…oops I mean so that they wouldn’t get sued.

Welcome to the new world of software innovation.

Now pay up.

Popularity: 2% [?]

I got an email request to publish this article a few days ago.

I was actually on the verge of moving the email to the trash when I noticed the first name of the author: Rand.

For those of you not familiar with the Wheel of Time series, the main character’s name is Rand.

I admit that it’s an embarrassing weak reason to respond to a strange email, but reading some 10,000 pages of a fantasy series obviously messes with your mind.

Then again, it’s probably no stranger than Rand Mendoza wanting to publish his article on this blog to begin with.

Anyways, enjoy…

********

 

Do Not Get a Good Programmer to be a Systems Analyst, Software Engineer or Software Architect

When you are on the lookout for someone who will occupy the coveted position of Software Architect or Designer in your team or company, the first thing that usually comes to mind is to hire the best programmer that you can afford. Don’t. Avoid hiring good programmers for the position. Promoting one of your senior programmers for it is just as bad.

It might sound weird at first. Why should I not get a good programmer to design solutions? After all, she will be designing programs, won’t she? Actually, yes, she will be. But the thing to remember is that designing programs requires a totally different skillset than writing programs or programming.

Let us see why a good programmer will not be a good software designer. But first, let us ask ourselves what makes a programmer good, or even brilliant. To be a good programmer, you must be able to implement real world, critical software. Being able to write a simple text editor is simply not enough.

To be capable of implementing non-trivial, complex programming problems, a programmer needs to have years of experience in a particular programming language. This means she has to focus on this language in order to be fluent in it and to be familiar with its idioms. Herein lies the problem.

To Someone Who Only Has a Hammer, Every Problem Begins to Resemble a Nail

If you focus only on one language to gain proficiency in it, you will be restricted to the paradigm of the problem domain for which your language was designed. In short, if all you know is PHP, then every programming problem starts to look like Web development problems. In the same manner, if Java is all you know, you will try to approach every problem from the object-oriented standpoint even if the problem is better solved using procedural programming as in the majority of systems programming.

Knowing only one or even two programming languages as good programmers should, will severely limit your capability to solve problems. For example, if your language is C, you will find it very difficult to think of the problem at hand in an object-oriented way because your programming language does not readily provide that functionality. Unlike Haskell programmers, C++ programmers cannot approach a problem the functional way either. Whether your programming language offers structs and enums or not can greatly affect how you attempt to dissect the problem. If your language is inadequate or if you only know a few languages, your ability to solve problems efficiently will likewise be hampered.

Language Shapes the Way We Think

Some say that our language shape how we think and perceive the world. I tend to agree. A speaker whose language requires that the gender of nouns be specified obviously thinks differently than someone who thinks that the police are not feminine. Someone who speaks a language that does not distinguish the color Blue from the color Green obviously perceives the world differently compared to a person whose language does.

If we look back at the Trivium, they are described as follows: Grammar deals with how concepts and objects are represented in writing and in speech so that they may be dissected in thought using Logic and thereafter communicated to another mind with the aid of Rhetoric. For our purposes, grammar is the syntax of our programming language. If our language is inadequate, we will also have an incomplete view of objects and concepts and how they are represented.

Language, the kind we use to talk to humans and to computers, clearly affects how we think. The richness and number of the languages we know can either aid or hinder our problem solving capability.

So, Who Would Be a Better Fit?

Therefore, a good programmer, who is a specialist in one or two programming languages, will have limitations in approaching a problem. She is restricted to what her programming language allows her to do. As such, she cannot be a good designer or analyst.

But if we shouldn’t hire a good programmer, who could we call upon to design our software? Certainly not someone who doesn’t know programming at all? Certainly not, but we need someone who is a generalist. A good designer must be familiar with procedural, object-oriented, functional, and logic programming languages—not to mention good software engineering practices. She must not be tied to a single paradigm like the specialist. Of course, she cannot write a complex program herself because of her broad but shallow approach to learning programming languages; nevertheless, she can properly determine the right tool for the task. If the problem is a nail, she can bring someone in who is well versed with a hammer; if the problem is a boulder, well, she could call in the explosive ordnance division instead of pounding it up futilely with a hammer.

Popularity: 32% [?]

If there is such a thing as divine retribution, then I’m pretty sure that most of the people on Microsoft’s SSIS product team will be spending eons merging SSIS packages.

I took the following screenshot from an issue I reviewed at my old job. The developer who resolved the issue only made two property changes and realigned the boxes in the visual designer (can you say OCD), so I expected to see a small diff but instead saw this unholy mess.

SSIS_Merge

For those of you who are not familiar with BeyondCompare, all those red bars on the left represent changes to the file (100’s of lines).

Since only two meaningful changes occurred in the revision, that means that the vast majority of it is noise related to tracking the positions of all the elements rendered by the visual designer.

Is the visual tooling here so essential that it is really worth losing the ability to track and comprehend how the code has changed over time?

What about the ability to collaborate or work in parallel on tasks?

At my last job it was extremely common for devs to work on different features at the same time that touched the same code files. Unless the exact same lines of code were changed, the devs were able to merge these files with little or no effort.

However, when it came to SSIS packages we were forced to ditch the last 10 years of software engineering best practices and instead expend vast amounts of effort in planning and endure ridiculous amounts of inefficiency just to ensure that no devs even thought about touching the same SSIS package at the same time.

If the dreaded merge window did ever appear during the check-in dance on an SSIS package, devs habitually ditched the merge tool and instead relied on the extremely tedious and error-prone approach of manually reapplying all the changes through the visual designer.

I realize that there are quite a few developers who work in small shops and don’t have to deal with scenarios involving extensive collaboration and parallel development, but what about the case of a hotfix that happens in the middle of a multi-week project?

With a normal code file you would be to follow a simple mainline-release pattern, make a change to the release branch, then merge back into the mainline branch.

However, with SSIS the only alternatives are to either lose work, try to do some wonky work-around with a data load, or else just throw throw yourself at the mercy of your boss and try to convince them to delay the hotfix until the larger project is done.

Did nobody on the SSIS team consider these issues when designing the product or was SSIS really just meant to be a basic end-user tool like Access?

Perhaps this is one of those situations like with VSS where everyone who actually works at Microsoft uses some other ETL tool that allows them to follow basic modern software development practices.

Then again, maybe the development community as a whole has just become so blinded by the desire and expectation for visual tooling that it trumps all other considerations.

Whatever the reason, there is no way I would ever voluntarily use SSIS again.

Does anyone know of any more source control friendly alternatives?

Popularity: 4% [?]

Here’s a tech support session from a friend of mine trying to log into his bank account.

Pseudo_c9Web Customer: I’m trying to log in to my online account but the system is telling me that a session already exists. Can you cancel that session manually or do I have to wait for it to timeout?
Customer Support: You must close all browsers, wait about 10 seconds, then start a fresh browser session.
Web Customer: I think I did that and it didn’t work. If that’s the case, what’s the next step?
Customer Support: I would clean off cookies and temporary internet files, then reboot.

Geez…I know I’ve been away from UI stuff for a while, but I didn’t know web apps had changed THAT much.

Popularity: 1% [?]

Behold the new look of CaffeinatedCoder.com.

BlogMakeover

I realize it’s beyond surreal to show a screenshot of the site on the site, but we’re living in a google-reader world so I figured it was fair game.

I spent days…er…hours…ok, maybe about 15 minutes on this new look, so enjoy.

I’ve been meaning to change the look of the site for a long time, but I had modified the php pages in my old theme to display the widgets the way I wanted and no longer had a local test environment set up for the blog, so it just didn’t seem worth the hassle.

However, since I recently upgraded my version of WordPress from an embarrassingly old version, I thought it was worth checking out the current state of skinning again.

It has always been pretty easy to change skins in WordPress, but now it’s also really easy to customize the widgets through a nice drag and drop interface.

BlogMakeover_Widgets

Say what you will about its spaghetti-like PHP code base, but WordPress offers some pretty compelling features.

Popularity: 1% [?]

I’ve been doing the equivalent of a mental exercise program for about 10-20 minutes a day for the last few weeks on lumosity.com.

I’ve always believed that I’ve had some degree of control over my overall mental acuity. For example, I naturally assumed that choosing to read instead of watching TV would help stem the tide of atrophy being caused by my excessive alcohol consumption. Nevertheless, I thought that I was basically stuck with the mental hardware (IQ) that I was born with.

It turns out that there has been a lot of research done in the last few decades in the area of neuroplasticity that challenges this long-held belief. Researchers have discovered that the brain can fundamentally reorganize itself when confronted with new challenges and that this reorganization can occur regardless of one’s age.

Building on this concept, Lumosity has come up with a series of games on their site that are targeted at improving intelligence in the areas of speed, memory, attention, flexibility, and problem solving.

Although most of the games are simple in concept, they are engaging because they constantly adjust to your skill level and thus provide an optimal training intensity. That means that if you suddenly get in over your head you won’t get stuck and become frustrated. Instead, the game will drop back a notch in difficulty for a little while before giving you another chance to redeem yourself.

Lumosity also tries to keep members engaged by providing game-like feedback, comparisons with other members, customized training programs that allow you to target areas you are particularly weak in (memory for me), and historical progress charts to show your improvement over time.

Here are a few of the games that I’ve been playing:

Memory  Game – A pattern flashes on the screen and you have to click squares to recreate it. The grids expand in size with each right answer and contracts in size if you get it wrong.

lumosity_memory

Attention – You have to hit the arrow key as quickly as you can to match the direction of the center bird, which is often pointing in a different direction than the other birds.

lumosity_lostInMigration

Flexibility – In this task switching game, you have to focus on whether the number is even when it appears in the top grid or whether the letter is a vowel when it flashes in the bottom. This is surprisingly hard (at least for me), especially since the numbers and letters randomly swap places.

Lumosity_Flexibility

I’m not really expecting any dramatic improvements from this new training program. Basically I would be happy with the equivalent of overclocking my CPU, refragging my hard drive, and maybe even adding a new a new 1 GB memory stick.

However, if all else fails I’ve at least found an effective warm up technique to jump start my day.

Popularity: 2% [?]

I was browsing through JQuery plugins the other night when I stumbled across this little gem.

JQuery_vibrate

Vibrating Buttons? Really?

I assumed that this was the product of some geeky joksters blowing off steam after being forced to participate in some grueling SOX or PCI compliance audits.

After all, who in their right minds would want to resurrect an only slightly snazzier version of the blink tag, which epitomizes everything that was gaudy and cheap about the early days of the web?

I mean the only thing that could possibly be tackier would be one of those ubiquitous “under construction” images that site creators used back in the day to highlight all the features that they would probably never get around to implementing.

Then it occurred to me that I might be able to discover some clues by looking at the corporate site where the plugin is hosted.

VibratePlugin_UnderConstructin.

Wow.

Any bets on whether their new site will lead off with a fancy flash video (a.k.a animated gif) to round off their ninety’s resurrection theme?

This moment of zen was brought to you by our Italian developer brethren at NextCode. If you feel like showing them your appreciation, then head over to JQuery.com and give their little surreal plugin your 5 star endorsement.

Arrivederci.

Popularity: 1% [?]

A few weeks ago I accidentally installed the wrong Cisco VPN Client while trying to set up a VPN connection and as a result I lost all network connectivity.

I wasted a good 45 minutes uninstalling the bad software, reinstalling my laptop’s network drivers, and fiddling with the various network settings before I remembered about Window’s System Restore functionality.

I had never actually used it before and was a little hesitant because I remembered it having a really bad reputation for not working back in the early days of XP. However, I was tired of troubleshooting the problem, so I figured it was worth a shot.

I simply typed in ‘System Restore’ in the Run menu (still one of my favorite Windows 7 features) and was soon greeted with a plethora of possible rollback points, since Windows automatically takes checkpoints on both a scheduled basis as well as before every program install and windows update.

WindowsRestore

I selected the rollback point prior to the bad install and within a few more clicks I had my internets back!

If you’re like me and prone to F’ing up your computer from time to time, then you’ll be happy to know that this handy feature is available in Safe Mode as well as from the windows installation disk.

I also discovered that you can even manually create checkpoints with Powershell using the Checkpoint-Computer cmdlet, which I thought was pretty cool only because I’ve been getting my PowerShell freak on all week with build automation scripts.

Mostly, it was just nice to be pleasantly surprised by a piece of Microsoft software, which in general has been pissing me off more times than not lately.

Popularity: 1% [?]

Let’s face it. We’re all losing the password length arms race.

Today’s GPUs can process two teraflops (a trillion floating-point operations per second), which means that my nephew’s high end gaming PC has roughly the same processing power as a multi-million dollar super computer did ten years ago.

Thanks to the power of the GPU and modern algorithms like rainbow tables, there are now commercial products available that can churn through nearly 3 billion passwords a second on a standard desktop computer

This may prompt the more conventional among us to follow the advice of a pre-eminent researcher in the field like Richard Boyd, who recommends a minimum password length of 12 characters to protect against brute force attacks.

Then again, you might be inclined to follow the Adobe way and try to outwit hackers with some cutting edge reverse psychology self-defense.

Adobe_fail

I know…you’re probably wondering why any moron ever thought it was a good idea to limit the password length as part of their security policy.

But think about it…

If I were a hacker, I would naturally assume that such a pre-eminent software company like Adobe would require at least a minimum of 12 characters. As a result, I would tailor my brute force attack to focus only on lengths above that threshold, thereby making their systems impenetrable.

Brilliant!

…and I thought that Adobe only excelled at creating massively bloated and annoying software that nobody in their right mind uses anymore.

Popularity: 1% [?]

Thanks to my new employer, I’m now happily a member of the three monitor club (better late than never).

Three monitors are good, but three monitors plus WinSplit Revolution is freakin’ awesome.

Snapping windows from monitor to monitor and resizing them from quadrant to quadrant with a quick keystroke actually makes me feel like this guy on a daily basis (minus…or at least with fewer…of the crazies).

minority-report

Even the cheapest monitors are 22 inches these days, which means a lot of wasted space for most apps. With WinSplit you can quickly Ctl+Alt+ NumberPad your way any number of really efficient and hence more productive configurations.

winRevolution_diagram

I find myself moving windows pretty fluidly around based on my activities and the types of apps that I have open (some demand more real-estate than others), but here’s an example of what one of my monitors often looks like.

winRevolution_screenshot

By the way, for those of you that are still monitor-challenged, I was able to do it for less than $250 (22” monitor plus USB powered video card since one of my monitors is a 17” laptop screen).

My former employer stubbornly resisted my best nagging efforts, but now I kick myself for not having just spent my own money to make myself more productive (and happier) at work.

Popularity: 1% [?]

hermes kelly hermes Outlet hermes Store Gucci bags Hermes Kelly hermes kelly louisvuitton handbags cheap Louis Vuitton louis vuitton outlet

cheap louisvuitton

louis vuitton outlet

chanel handbags outlet

louis vuitton monogram canvas

hermes birkin

hermes handbags

louis vuitton outlet online