Thursday, December 20, 2007

Ripping Vista A New Arsehole

Oh man, I knew there was a reason I wasn't running out to upgrade to Windows Vista, or as we call it, Windows Shickza (sp?)....

Review: Windows XP

Monday, December 10, 2007

O'er The Background We Watched, Was So Gallently Deadspace

Here is yet another example of the Tourist-Using-Native-Language Syndrome (no link, I made that term up) which I mentioned in a previous post, where they think you are fluent just because you managed a couple good sentences.

Man can people really abuse GUI design! I was just reviewing some screen mockups, and was horrified to see that there was more background showing than data!

I am putting it down to horrible lack of training or interest in Graphics Design, yaddayaddayadda. For God's sake, I was talking last week to a Software Engineer who didn't even know what a serif was!!!!

I will lay more blame at the feet of the VB6-generation, with such a non-existent container or layout component, people are forced to sprinkle globs of UI into Group Boxes, and poop them all over the background, sometimes not even bothering with the little things, like edge alignment and consistent sizing!

Whatever the root causes, there is considerable lack of aptitude and/or training in the ability to perform even the most rudimentary Microsoft Outlook-style of GUI layout.

What stings my bung even more about the whole thing, is that these UI abominations go unchallenged by even more ignorance, i.e. they are approved and built without any regard for even the most basic use cases.

"Good work Jimmy! But can you spread out those buttons more, and make them bigger, because, you know, this can be used on a touchscreen...."

"Sure, but won't that mean shrinking the size of the main data display?"

"Just worry about those buttons...."

Hmmm. Just how big is your finger, anyway? Yes, I know about Fitts' Law, but it's yet another trade-off between ease-of-target-acquisition, and information density. As someone who personally has touched many-a-button incorrectly sized and adjacent to another button (think delete row) I can tell you cramped margins and insufficient sizing is no way to go.

Just what is the compulsion to put every last UI element on the screen at once? Why do we need a UI with 10 tabs on it, when 8 of them are used to configure the system, then never needed (until another configuration change)? Hmmmm, sounds like a good place for a modal dialog or 8....

What is the penchant for "inventing" new ways to do the same old thing? A dropdown list is not a "cool" way to invoke commands; buttons are, or perhaps a menu. Why bother with those staid elements, when we can "invent"...?

The horrible assumption is that all software designers are capable of designing usable graphic interfaces, and I am being very liberal here with that word.

The abjectly horrible reality is that most software designers are not capable graphically. Hmmm. Need to arrange a row of UI elements, here's a novel idea, use a ToolStrip!!! Need it to align to one edge, dock it there!

Resizability is another ignored yet critical issue. Web designers deal with this on a regular basis, it is called fluid layout. Sorry no link, but visit this gem to refresh (or more-likely initialize) your memory. Today's GUI frameworks provide more than enough layout containers to mimic this technique, with less code than ever. There is absolutely no reason whatever for big swatches of background to stick out between the major blocking areas of an interface.

Thursday, November 15, 2007

How To Stay Out of The Forums You N00bs!

Just another add-on opinion from a favorite blog.

From The Old New Thing

Reading this just reminds me of why I hate forums so much. Not forums in general, but just a certain aspect of it: newbie (or more properly n00b) ignorance.

This comes in two flavors in my opinion:

  • I'm too (busy/lazy/ignorant/etc.) to do a Google Search to find 1000s of links with tutorials and general information. Please do the search for me and post the links in your reply.
  • I'm too (busy/lazy/ignorant/etc.) to solve the problem I'm getting paid for at my job. Please post complete or nearly-complete source code in your reply, or link to open source.

No follow-up is necessary. Just build up your anger....now! And....release!

And that's what keeps me out of the forums.

In fact, I'm going to reveal the secret to Staying Out Of The Forums Forever!.

I'm smelling snake-oil here...

You only need to master One Easy Technique!

Use Google Search, because there is a plethora of stuff out there.

Want to start learning Java ME? Use Java Me Tutorials. OMFG you will be amazed at how many links you can start following! Certainly this is way simpler than going to a forum and posting your ignorance. And it was; that's exactly how I bootstrapped myself into Java ME, to name only one of many many topics.

Sure there's a lot of repetition. That just serves to reinforce it. After reading the 6th beginner tutorial, I could remember how the "story" was going to go. And usually there are a few unique tidbits to digest along the way.

And ironically enough, you get lots and lots of links to...that's right, you heard right...

Forum Threads.

Monday, November 12, 2007

New Blog Title!

I have re-titled this blog.

In case anyone doesn't know their Italian, the previous title translated into "Farts For Everyone!"

The DNS hasn't been changed, yet....

It's All Full Of Crap (The Internet That Is...)

Man, today just seems teeming with people correcting other people. In our era of easy Internet Publishing (just look at this blog), anyone can publish anything! In fact, they can publish any inaccurate piece of shit they want, because they can create a blogging account for free!

Good thing no one is reading this blog.

No shit. Anyway here are the culprits.

I have to say, the Original Posts are not very impressive. Since it's just opinion, they can bias things however they choose, and put their ignorance on display for all. The Original Spring poster doesn't even mention the version of Spring, so is free to use one that is completely inadequate to his beloved EJB 3.

As for the other Original Post, just more ignorance on display. How can anyone with an Internet Connection get Behaviour-Driven Development messed up?!

On the other hand, the "policemen" are bloggers I regularly read and trust, and their posts are intelligent. Needless to say, I found their posts first.

I'm glad someone has time to search out the crap and report it.

So when will they find this piece-of-crap and report on it?

I don't know; I keep posting in their comments sections....

Wednesday, October 31, 2007

What is Normal?

All of us.

This post has been sitting in the "Unpublished" bucket for a while, and this post has prompted me to unleash hell....

There is no getting around the Normal Distribution, unless you are some kind of mathematical pagan who doesn't believe in The Central Limit Theorem.

With that behind us, it is safe to say that out of any "random" selection from any population:

  • There are some below average,
  • There are many that are average (within a certain SD anyway),
  • There are some above average.

Of course, the measured value is irrelevant; it could be IQ, height, weight, eye color, ability to lay out UI elements, etc.

With that stark slap-in-the-face, take a look around at your coworkers. Some of them are better than you are, some are not.

So even if you think you are really smart, in the right crowd, you are just an idiot. Keep that one in your hip pocket, next time you want to be condescending or hurtful.

Monday, October 29, 2007

No Wonder Software Works Like Shit!

A recent customer meeting regarding loading trucks and their requirements, leads me to the following scare:

Most "software" practitioners just totally ignorant of so much thoery of computation/philosophy/etc. Stuff that relates at the most fundamental level to what we do every day. Forget about easy crap like The Halting Problem, which I'm sure anyone educated on-the-job is clueless about, even though it is a critically-important result.

My shit always terminates! Does a segfault count? So are you just bitter about having a degree or what? Anyway, what a downer. Just write more tests then.

After recalling an anecdote where a bunch of idiots thought they could solve the equivalent of the Halting Problem for Ladder Logic (yes that project segfaulted), and my latest trip down Wikipedia Lane, I might just do. Spend some time on these gems and get back to me:

And that is barely scratching the surface....

Paradoxes, what self-contradicting crap! Big Deal! Those are topics so lofty they shit marble!

Yes, ignore them at your own risk. However, I'm sure people out there are churning out logic like all of the above on a routine basis, in blissful ignorance, then wonder why "it doesn't work".

I thought Ignorance was Bliss.

And don't forget Freedom is Slavery!

Friday, October 26, 2007

Always Be Always

Man, I dig this blog! Thanks for the inspiration (only 9 months to go)!

How To Achieve Ultimate Blog Success In One Easy Step

Wednesday, October 17, 2007

Some Flip-Flopping For You

No, this is not about digital logic or that US politician. I just switched the left and right panes on the blog template. Hopefully someone will visit and notice the difference.

So you finally figured out to keep content flush-left for real estate-constrained devices?

Yes, I saw how it looked on my Nokia N95....

Wednesday, October 3, 2007

JavaME: Not For The Faint-of-Heart

I have been threatening to do JavaME development for quite some time now, and finally took the plunge. The main thing holding me back was a good idea.

All I can say is, "Thank God all the tools are free!"

Now that the rant is over, let me just say that the unskilled masses should just stay home, and leave mobile application development to actual professionals.

Not sure if I'm offending you? Take this quick quiz, and be brutally honest with yourself:

  1. Not expert at starting and keeping synchronized many threads? Don't know about race conditions and deadlock? You're building a piece-of-crap then.
  2. Not good at minimizing asynchronous contexts (e.g. various Listener interface implementations)? I'd hate to be using your location-based MIDlet.
  3. Don't decouple presentation and "business" logic? Good luck keeping things maintained.
  4. Like to implement all your application logic right in the CommandListener.command()? You're building a big, user-annoying piece-of-crap!
  5. Don't like to handle exceptions? Good luck making users confirm every security prompt you ever trigger.

This can be generalized of course. However, the effects of piece-of-crap syndrome are acutely presented in the constrained mobile environment.

Hey, it still sounds like ranting to me....

Yes, don't get me started on all the newbies clogging the JavaME forums with their "I need to do X; please post full source code". First off, how do these skilless people (no excuse for not using Google to find tutorials; I did, and there are tons of them!) get into the position of being responsible for such things? Second off, Get a life (preferably in another field) and leave the real work to the skilled.

Perhaps the scariest aspect of JavaME is that I started building without a unit test framework firmly in place. Not that there aren't any; I just fell into the trap of wanting something working, putting years of experience to the test (pun intented) on this one.

Here are some pointers for you, if you insist on moving forward:

  • Use the Sun WTK as your first-line debugging environment. It installs and works out-of-the-box.
  • If you use Eclipse, definately install the EclipseME plugin. This plugin uses Antenna for WTK build tasks, so make sure to download that too.
  • Run your stuff on as many emulators as you can possibly find! I hate to break your bubble, but this is just another case of "Run Once, Test Everywhere". The Nokia S60 3rd-Edition emulator is sweet; other OEMs have emulators too. Especially download the one that goes with your personal mobile device.

With all that said, my MIDlet uses a plug-in architecture, is fully asynchronous, and multi-threaded like a mofo!

What an elitist bunch of crap!

Damned fucking-ay right!

Thursday, September 20, 2007

Using NUnit For GUI Prototyping

I love NUnit. I am starting on a new project, so what better way to prototype some primordial ooze, than to bang out some test cases?

It was all groovy until I realized one the elements I must prototype is a custom user interface control.

This did not provide much of an issue; I simply made a new set of test cases that displayed a form with the control in it.

Dude! That's not very automated.

True enough, but we are preempted by getting the job done. These cases are isolated enough that they can be excluded from the non-visual automated test cases.

Let's just call these UI Tests, since they require user-interaction to complete. Perhaps there's no need to label them, but I feel it requires differentiation, because these test cases cannot run "in a vacuum" on your CI server.

So why wouldn't I just start building a prototype application, and do it that way?

Another bonus is that by implementing debug "harnesses" of "typical" event-handler scenarios (e.g. tracking selections, event-handler firing), one can actually debug a lot of behavior, and even use Assert to validate.

This is awesome, because it allows you to really focus in on both the client-side (How do we want this code to look?) and the custom control side (Are events firing in appropriate sequence?) I maintain you can't concentrate on this in the context of all the noise of "bringing up" a prototype.

And for the memory-challenged (me!), you now no longer have a reason to "forget" to test any user interaction scenarios before committing.

For example, the custom control had to present a grid of items in 1 of 8 possible orderings (RowMajor/ColumnMajor,LtR/RtL,TtB/BtT) two-cubed equals 8. What better way to systematically run through all 8 presentations? Want to do that manually? I didn't think so. Granted, the user must manually validate the orderings (for now), but the important part is the completeness.

For example, I was implementing ISelectionService on my custom control, so I created a debug harness to manipulate the selection in all the different ways supported in the control's implementation (there were 6).

Just to show I'm not totally heartless, here is some sample debug harness code:

ISelectionService iss = sender as ISelectionService;
   Assert.IsNotNull(iss, "sender as ISelectionService failed");
   bool wasselected = iss.GetComponentSelected(cea.Cell);
   int oldcount = iss.SelectionCount;
   _list[0] = cea.Cell;
   iss.SetSelectedComponents(_list, _st);
   switch (_st) {
    case SelectionTypes.Add:
     Assert.IsTrue(iss.GetComponentSelected(cea.Cell), "iss.GetComponentSelected() failed");
     Assert.AreEqual(oldcount + (wasselected ? 0 : 1), iss.SelectionCount, "iss.SelectionCount failed");
     break;
    case SelectionTypes.Primary:
     Assert.IsTrue(iss.GetComponentSelected(cea.Cell), "iss.GetComponentSelected() failed");
     Assert.AreEqual(1, iss.SelectionCount, "iss.SelectionCount failed");
     break;
    case SelectionTypes.Toggle:
     Assert.AreNotEqual(wasselected, iss.GetComponentSelected(cea.Cell), "Toggle failed");
     Assert.AreEqual(oldcount + (wasselected ? -1 : 1), iss.SelectionCount, "iss.SelectionCount failed");
     break;
   }

Pretty much what you would verify visually, but let's not forego automated checks to keep everyone honest.

There were additional debug harnesses for validating Enter/Leave/Click event firing, etc.

I'm sorry, but that's just plain hard to get done if you are "embedding" this into a prototype "product". This way, the test cases make you operate the UI in the specific way that the debug harnesses are Asserting for.

Now granted, the user must cooperate with the test case's objective, and the Assert strategy of a debug harness is only as good as the effort you put into it, and can be tantamount to actual use cases. Don't Fret! This is a great thing! You can now refactor that code and re-integrate it back into new test cases. Well done!

Wednesday, September 19, 2007

My Karma Ran Over My Dogma

C'mon, sing it with me...

Jabba, Jabba, Jabba-jabba jing-jing-jing ($$$)...

Anyway, that's what I'm singing there, don't know about the rest of y'all...

Oh yes, you are blindly singing along with the "correct" words.

It is a cute song. Much cuter than the posse themselves lol.

What?? Was that a swipe at The Posse!?

Well, kind of. Don't get me wrong; their podcasts are informative, and I listen to them religiously; it helps me keep track of the alternate reality that is Java.

As a member of the .NET alternate reality, I am really cheesed-off at their ignorance of .NET related topics. They are so dogmatically entrenched in their canon that they cannot see the ways of others.

It is wise to know the ways of one's enemy...

That is my favorite line in that whole movie, and I use it as a strategy. It sounds evil in Russian, doesn't it?

Yea, well aren't you just a hypocrite too? What kind of Java did you ever use?

Well, a bunch more than you might think. I'm quite happy with all of those J acronyms. I've deployed J2EE application servers, I love Eclipse and not NetBeans, JSF is just ASP.NET (but thank God they have a component model now), etc.

I've used it enough to tell you that not having syntactic support for properties sucks the big banana. JavaBeans is just a necessary dogma in order for people to actually build tools and interoperable components. Oh, you didn't want to use Notepad and a Command Prompt as your IDE? I think it's a big reason GUI development in Java sucks so bad. If it didn't suck, you would see way bigger penetration. It's too bad I think; we got stuck with VB6 instead (well not me personally; I was using Delphi and laughing hard the whole time). Not having syntactic support for event listener invocation is also a non-brilliant idea.

The deal is, it's classic Yin-Yang. We won't debate which is which here, perhaps in a poll. These two alternate realities feed off one another, but most of the people on both sides are so dogmatic, they don't see it. The agnostics and atheists see it though, because they are opportunistic. That's why Java has annotations, finally. I've been using annotations, closures, and reified generics for years now, sorry you took so long. In fact, I'm still using better features that you don't have, like real properties. Argue all you want on that one, I'm with dogma there.

And as a final rememberance on the whole managed code thing, who remembers the UCSD P-System (besides me and Jim)? JVM/CLR my ass, that was an adventure (yes I wrote code in it, no pity necessary), and I'm not even sure that was the first one.

You tell'em, bruvva....

Just remember, it's all opinion, just like what you're reading now, and my opinion is that Their Employers are just-as-big or bigger than the one they constantly demonize, and they can believe what they want about how pure policies are (oh My Company is a perfect saint, ask anyone that works there), but we all know large corporations (composed of greedy humans) are greed-based; if it wasn't greed-based, it wouldn't be operating in their shareholder's best interests. How fast would you be bailing on your XYZ Corp shares if you heard at the shareholder's meeting:

We will no longer be seeking to increase share price or dividends or market share.

That is the most absurd idea ever, we all know it.

Well, isn't Greed an extreme word?

Not if you've been paying attention to headlines over the last decade. Remember Enron? No greed there, huh?

Perhaps it's just that you are bitter they are popular and you are not?

If I were popular, I probably wouldn't have the balls to rip on them.

Tuesday, September 18, 2007

What Happens in Vegas, Stays Off Corporate Servers!

This post contains descriptions of nudity and adult language. Reader discretion is advised.

I tell you, it pays to share an office with members of IT Operations, and this is why....

I was busily typing away at some NUnit test cases, when my office-mate exclaimed (she was trying to free up some space on a corporate file server), "Oh my God!"

My mind immediately sank to the gutter. "You found porn!?" I asked in anticipation.

She confirmed my wild hypothesis. "Let's see...." Mind you, this was not found on someone's laptop, but on a corporate file server. I was quite taken aback, since I figured in this day-and-age, no one would be that careless.

Surely enough, there were some images of two younger women, completely nude, having strap-on sex in a hotel room. By the way, they were both shaved, and having a good time with it.

The game was afoot. Just who did these pictures belong to? Fortunately, there was more evidence. My office-mate was busily emailing her IT Operations counterpart with the full UNC (pun intended?) path to our source of amusement.

Most of the pictures were of the same (hot) girl posing with various other "working" girls. Unfortunately, no one was recognized as an employee. Then, we finally got to one! It was one of our salesmen; he should have stayed behind the camera lens.

But why store these on our server? Was he afraid his wife would find them?

It was a good theory, until we found out that it was his wife in the pictures!

Tuesday, September 11, 2007

TDD Is For Me

I just read this blog entry, from one of my favorite authors:

TDD- It's Not About Testing... Except When It Is

That pretty much sums it up.

What kind of self-referential crap is that? Check your pipe for residue....

No, really. Here is the anecdote.

I was heavily refactoring some "serial port" code, and I was paying close attention to the section of code responsible for filling the input buffer and watching for the "line terminator" character, which signals a complete "message".

I immediately got concerned about off-by-one and buffer-overrun situations, e.g. what if my input buffer was shorter than my longest possible incoming packet? Did things fail properly?

You and your fail correctly crap....

As I say, anyone can code for success; it takes skill to code correctly for failure.

The astute reader knows exactly what happened next, but for the sake of the rest of you, I will continue the story.

First, the buffer length was refactored such that it could be configured. Next, a test case was established that set the buffer size to less than the size of the expected message. Next, run the test and adjust expectations accordingly.

How utterly boring and predictable. Were you able to adjust?

Certainly. Needless to say, fears were confirmed; some minor tweaking was necessary to cover the smaller-than and equal-to cases.

I can sleep easily now.

Friday, August 31, 2007

Let's All Hate The Effin' Windows Registry!

Read This Now!

I am 100% on-board with this one, and am currently writing registry-free applications!

BTW, that reference comes from another favorite blog.

Thursday, August 30, 2007

N95 Update: Nokia Nirvana

Yes, it's been a long time since posting; that's what being on-site without Internet access will do for you. That's another whole post for later though.

Since last reviewing, I have installed a Podcasting application and a Handy Weather screen-saver, both of which are super-cool groovylicious. The weather is not real-time, it's just daily-level forecasts. And it's not free, but I will probably fork out the $14.95US when the trial period expires.

Another big application install is Fring, which performs Skype interop! Yes, I am getting to all my Skype buddies anywhere WLAN is available! Did I mention Nirvana in the title already?

Battery life so far is quite satisfying; I can easily go several days without a charge, especially if just using it in phone mode.

Still issues with certain apps being picky about whether they will use a WLAN connection or not. The Weather app only works over a packet data connection. I am attributing this so far to the operating environment, not a specific application. I will eventually research this when it bothers me enough.

I also had a WtF moment when I tried to connect to one of my workstations via USB in Mass Storage mode. On the upside, N95 presents a nice menu of options, so you can decide what you want the device to appear as on the USB. However, the phone would not allow me to connect, because there was an application accessing memory; it turned out to be the Podcasting application, which had a media player open.

The 5-megapixel camera is still the most stellar feature on this device. My wife had a good time taking images at a recent outdoor party. A couple images were blurred; I think that was due to excessive zoom, which is mentioned in the documentation (yes, I read the manuals). For the most part, pictures are crisp, and the water in the pool shots sparkled brilliantly.

The worst thing about it so far, is that the credit card bill finally came. After all, it was expensive.

But it is worth every penny.

Friday, August 17, 2007

Paris Hilton Ain't No Lindsay Lohan

Good, I have your attention.

Sure they're both hot chicks, but are they interchangable? Maybe if you're filming a porno....

Dude! What's with all this SEO-driven lingo? Paris Hilton!? Are you selling out for traffic or what?!

Sorry, I am desparate for some traffic. Have you seen the number of Diggs on this blog?

We have a similar problem; they think if your title is Software Engineer, that you are proficient at 100% of development tasks. That just ain't so.

The same for Java Programmer. I hate to break it to the Personnel Manager, but I'm afraid that sector is so fragmented, you might not even get someone with relevant skills. I asked one interviewee what was his favorite "J" acronym, and he couldn't even name one! I'm sorry, but that's effin pathetic.

All the gak aside, ask for what you need, not some generalization of what you need.

Wednesday, August 15, 2007

Nokia N95 Update

I am really digging this phone. Everything works up to expectations, but I haven't really got into every crevise of the thing.

Here is the good:

  • Phone features are top-notch. My Cingular/AT&T SIM worked flawlessly.
  • Battery life seems like an eternity, compared to the Motorola Razr V3 I had previously.
  • Thicker than a typical cell phone, but still fits easily into a hip pocket.
  • The display functions very well in direct sunlight.
  • The speakerphone and volume in general are very good.
  • WLAN features also top-notch; locating available networks is only a few "clicks" away. Too bad there is no easy way to enter a 128-bit WEP key.
  • Web browser is adequate; I did not tax it much, yet. It did bring up this blog with no issues, and has support for Feeds.
  • UPnP (aka Home Network) works surprisingly well; you can get support via Windows Media Player 11. Beware! Not all media formats supported (guess whose are not...)
  • The MicroSD slot and USB/Removable Storage features are indispensible. Wouldn't be much of a media player without it. Mine came with a 1GB card, very adequate.
  • The 5-megapixel camera is awesome! Plus, when you use it as a camera, you hold it like a camera! Complete with shutter-release button in the anticipated location.
  • I successfully configured POP3 email with little hassle.
  • The system is very good at allowing you to control which connection to use, when it needs a data connection.

Here is the bad (and I'm reaching):

  • The GPS is functional, but getting a "fix" can be very slooooowwww since you need to "see" the GPS satellites. Also, make sure you have good bandwidth for downloading maps (i.e. don't use your cellular data provider if you can avoid it).
  • It is easy to "jog" the sliding keypad while in a pocket, which regularly triggers the "keypad locked" message, and activates the display, draining battery life. Some kind of physical "lock" or more rigid retention would be welcomed.
  • The FM radio does not want to play through the speakers; it wants you to use the headphones. Ironically, there is a Play through Loudspeaker option, which is only available when using the headphones, but not available otherwise.
  • I experienced problems retrieving email over a WLAN connection (thank God it asks you to choose a connection); retrieving email over my wireless data provider worked flawlessly.
  • Other than UPnP/Home Network, there is no way to access remote file systems via networking.
  • I could not find a way to alter the text color of the main display. It wants to use black text, no matter what colors are in my background image. Some alpha-blended text background or contrasting font outlining (like on the Razr) would help make the text stand out, no matter what the background.

And there just ain't no Ugly on this thing.

These features are unrated at this time:

Monday, August 13, 2007

Unmanaged Code Considered Harmful

Yes, I am spoofing the title of the famous Considered Harmful article. Add me to the pile....

Not to mention totally dating you as a dinosaur, it is just not where things are headed.

I just want to break in here and say Wikipedia is just awesome for providing citings.

Managed code is the new virus that will take over the programming organism, and we will all be in the trusting hands of the JITter. Don't try to slip one past the goalie, or you will be suspended from the CPU party.

Soon there will be so much surplus compute power, even device drivers will be written in managed code, what with hypervisors and all doing the heavy lifting, and operating system is just another user-level application; how ironically wonderful.

The pigeons have come home to roost, Bobby Boucher....

With all this emphasis on the managed universe, and the reductio ad absurdum of operating systems into "normal" applications, what is the real need for all of those unsafe unmanaged instructions?

Can we dream even bigger? Can the managed code virus spread "over the wire" to the embedded platform? And we're not talking about Smart Phones or Pocket PCs, but DVD players, toasters or whatever. Can it infect the last bastion of progamming immunity? I mean, .NET Micro Framework, how far away can it be?

If we have our way, i.e. transistor densitiy will continue to increase, then it is inevitable that enough transistors will be assembled cheaply enough to give one an entire server on a wafer; plenty of power to run a normal programming environment, the managed code environment.

I just want to break in here and say Wikipedia hit 100% on citings for this post.

Friday, August 3, 2007

Nokia N95: The Anticipation Is Maddening...

After much research, I have settled on the Nokia N95 SmartPhone. What was the kicker? The 5 megapixel camera with macro mode. I love macro photography; even though I don't own a suitable camera for it. Anyway, I read a bunch of reviews, and this is the one.

But wait-a-minute! That ain't no Windows Mobile phone, that's one of them-there Symbian OS phones!

Believe me, that was a tough one to swallow. Good thing I know Java....

Thursday, August 2, 2007

And You Wonder Why You Like To Work Alone?

This post cites a book that explains exactly why:

Quote of the Week: Why Brainstorming is a Bad Idea

It also explains why I never like anyone else's ideas, either....Unless it is on my list already.

What Did We Ever Do Before Factories and DI Containers?

What else is there to say after the title, really? Funny that I'm talking about it like it has been around since the mainframe.

Oh yes, I remember now; it wasn't really that long ago. There was tedious initialization protocol everywhere something got constructed, and in a "real" system, that's a lot of places.

Of course, that information didn't just evaporate; it just got transformed into metadata. Anything can be solved with another level of indirection, whether it takes the form of anno.attributes or XML configuration verbosity.

And of course, there's the wonderful ability to control lifecycle policy, etc. Ahhhhh.....

Now remember how gak you feel when you have to go back to a codebase that doesn't use those techniques. Yes, I just worked on some. Work up some bile with me as you visualize a seemingly-endless if/else chain, checking for hard-coded strings, with even more hard-coded constructor sequences.

Now it's hard to implement a nice dynamically-loaded-module class and object factory cough use ATL cough in C++; That darned Windows LoadLibrary() is so hard to use, and that GetProcAddress() just can't find a mangled name to save its life.

Let's face it, some platforms make it way easier; dynamic platforms like Java/.NET allow even amateurs to build factories cough get an open source DI container cough, and let's face it, this is for the better.

Now some dinosaurs won't get it, but they are going extinct; next they will be telling you the world is flat, and how can you argue with such an arcane point-of-view?

Monday, July 30, 2007

A Few Words About Tea

I just bought several boxes of new tea for work. I am struggling to get one of them open (they are sealed with plastic wrap) and had no scissors (we aren't allowed to have them apparently). I was using a key to "slice" away a square of wrap at one end of the box, and got it removed, only to see the thin golden line of the "open" ribbon. Obviously a wtf-lol moment.

So it is with starting something new.

You have the excitement of just getting the thing open, but you really should take a step back and look at the entire package first.

Oh yes, it was Darjeeling.

Friday, July 27, 2007

Code Without Tests is Like A Life Without Sunshine

It is incredibly hard to move between codebases with/without automated testing, especially moving in the without direction.

I have never been so scared-shitless as when recently deploying a new build of such a codebase.

I have been very careful to avoid touching it as much as possible, but nevertheless must deploy it: the partially-to-untested work of others.

There were deployment and operational problems, mostly due to:

  • no automated tests,
  • no test suites,
  • insufficient test environment, i.e. not all devices present on-site are available for developers to test with,
  • no clean install environment, to test for installation issues.

It should be no surprise that we got bitten by all of the above. Nothing like doing your development in-the-field. Obviously this can't always be avoided, but taking measures can minimize it.

The sad part is we may not be able to reproduce the recorded defects, due to the aforementioned reasons. I'm only happy I won't be the one single-stepping through the debugger....

Yes, people still do that; the ones without tests. It's like using a microscope to inspect an elephant.

Thursday, July 26, 2007

Interview With A Vampire

The following is an indulgent self-interview with the author.

So The Gassy One: what kind of fucked-up moniker is that?

It's one that goes with the title of the blog.

And what's up with the Italian? Are you some kind of fascist?

That depends. It was just something I used to say, started during a trip to Italy, if-you-get-my-drift. Plus it goes with the moniker. I show up at the top of a Google Search by the blog's title, so I'm pretty happy with that.

And you won't translate that for us?

I think everyone can figure it out.

So what inspired this blog?

Mostly phone call rant sessions with other programmer friends. Also from reading lots of blogs; I track over 70 blogs a day, and add to that as necessary.

That's a lot of blogs. What do you supervisors think about all that non-billable time?

Let's just say the research usually finds its way into current projects. Next question please....

What's the fascination with UK English?

Started a long time ago, probably from watching Monty Python. I didn't start actually getting the idioms until well into adulthood. Then of course there are the accents.

So what is your favorite programming activity?

Most probably Refactoring. That activity of incremental improvement, the fight against Entropy. I certainly enjoy Test Driven Development techniques, and working on non-TDD projects is becoming a real sore spot.

What's up with all the Wikipedia shit? Are you some kind of shill or what?

Let's face it, there's stuff in here that not everyone knows about, including me, and the references are a boon to giving the reader something else to do, expand their horizons perhaps, within the context of this blog. I want to stay informational, and not link to ad-laden crap, if possible.

How noble.

(in the style of Commander McBragg) Yes, quite.

Wednesday, July 25, 2007

What Could Be Worse?

If you can't laugh at (and possibly learn from) your own mistakes, perhaps you can bask in the glory(?) of another's misfortunes.

I have to say that this is one of my favorite blogs.

Tuesday, July 24, 2007

A Word-to-Quadword About int

In UK English, they have turned a contraction into an even-shorter contraction.

The word in''t is a further contraction of isn't. Not sure of the actual spelling of this; first heard on the Chris Moyles Show or maybe Coronation Street.

Combined with some other delicious idiomatic grammar, you get sentences like

It in''t in t'tin.

Say that 3 times fast, then translate into US English.

And you thought in''t was a datatype....

Monday, July 23, 2007

Service Container is the Best Thing Since Timesliced Bread

Ever been struggling with the ever-morphing parameter list?

Or perhaps you've been struggling with coupling issues?

The Service Container is your salvation!

It is basically a dictionary keyed by type, typically an interface type. Need to pass that ICrucialInterface down the call chain? Just stuff it in there.

Important to recognize is that only the creator of the Service Container usually has the ability to populate it. Once populated, read-only access is assumed. This is accomplished with appropriate interfaces. In .NET these are called IServiceProvider (read-only) and IServiceContainer (read-write).

Service containers may be chained together in parent/child linkage. The holder of a reference to a child container also gains access to all "higher" levels of linkage.

The biggest benefit here is that you are future-proof. If the universe of parameters changes, there are no messy signature refactorings to contend with. Package boundaries remain pristine.

This is the classic early-vs-late binding tradeoff.

"So where's the down side, since you said it's a tradeoff?"

Ok, busted. There is one minor one, but this can quickly be turned into an advantage.

The bummer here is since you are now loosely coupled to the universe, you must physically dig every last reference out of the container before use. This can be advantaged by changing mindset to a dynamic mode, where nothing is required, and the logic accounts for this (unlike WestWorld....)

Couldn't find a reference to the ICrucialInterface? Either degrade gracefully (i.e. use the INotSoCrucialInterface), or throw an exception.

The chaining of Service Containers into a hierarchy can alter the scope of what is visible to downstream call sites. At any point, a caller can add to the container chain and use it in calls.

Thursday, July 19, 2007

What Skill!?

I tell you, they just think you are skilled in every aspect, just because you know a little.

It's like speaking a foreign country's native language, then all of a sudden they think you are fluent, and a torrent of language comes flying at you.

Anyway, they are trying to connect devices together over a serial cable.

"There's no way to tell if there's something running on the other side..."

Now mind you, this is an embedded systems person talking. I had to pipe up, since I actually had to learn about RS-232 communication.

"Yes there is, it's called 'handshaking'....

Monday, July 9, 2007

Non-determinstic finalization as a Design Pattern

Sounds like an April Fool's Day topic, doesn't it?

Or perhaps your mind is just reeling with the possibilities?

It is really the ultimate race condition; you never know when it will really be called, so it better be synchronized!

Forget for a second that we are talking about finalization, but you really do want that to be thread-safe. Not much tolerance for freeing unmanaged resources multiple times.

Think of it for a second; a system where everything gets constructed, but then nothing happens until things start destructing, and destruct they will!

Don't be afraid to abuse your garbage collector. Lock away, allocate more; let your conscience be your guide....

Disclaimer

Look, this is humor, so put away the flame-thrower! Just have a laugh and go on your merry way....