comments edit

My friend Thomas Wagner has a small epiphany of sorts. At first, I thought he was writing the biography of my first year at my current job. But apparently this is quite common among businesses.

Very frequently the profit center of a company drives the development schedule and also drives the pressure being excerted on a developer or team. Can you guess who the people are that drive most of the profit? Those crazy lunatics in the Sales Dept.! Yes, the flunkies who like to bend reality in order to make a deal. Those are the folks that set your schedule and drive your work.

Just the other day, I was working on a task that requires certain deliverables from the marketing team be in my hand before I can even begin. Of course those items were delivered late, but naturally I get several emails in the span of the day asking for the status with wording like

This is something a client is waiting to see and technically it’s already late. Yadda yadda please get it done ASAP.

My reply was [edited slightly to protect the guilty] (note the weird pronoun use as time travel is involved).

I’ll tell you what, I will personally bend space, time and reality so that the deliverables will have been delivered to me a week prior to the day they actually were. And then I will personally spike everyone’s water with SPEED so they will have been working faster this entire time, and I will swap out our networks with a 1 TB connection so data will have been transferred faster. Also, I’ll swap out our systems with quantum computers so that they too aren’t limited by the silly constraints of a linear time continuum.

Of course, we have to remember that Sales and Marketing guys have their own pressures and are human too. Sometimes they aren’t all flunkies and can even be intelligent and witty as his reply indicates:

I think I saw a quantum computer at the local pawn shop… crazy shit.

Afterwards I reminded myself not to be such a jackass to this guy. But then again, the more of a jackass I am, the funnier he gets.

comments edit

There’s a house on fire a couple of blocks away. It’s a veritable light show down there with nearly 10 or so fire trucks arriving on the scene.

House Fire

comments edit

I love Ian’s response to James Gosling’s opinion on .NET’s C++ support and it’s supposed inherent insecurity. It’s basically a “Booyah! In your face” piece as he bit by bit dissects Goslings arguments and presents a Java example that directly contradicts Gosling claim that type unsafety is incapable in Java.

Ian, you’re the man! If you’re in L.A., I need to buy you a pint.

It just goes to show that it’s not just Ballmer who spreads the FUD thick. It’s time to bridge the Java/.NET divide and be reasonable here. The “religious” wars aren’t worth the time and energy. Quit spreading FUD in both directions and realize that both technologies have their weaknesses and strengths. It’s really disappointing to see this type of FUD from someone as respected as Gosling. I guess I expect that sort of thing from Ballmer.

comments edit

In his latest entry about life as a infrastructure reconstruction project manager in Baghdad, Mr. Serjak describes the security detail that drives him to an onsite location. One detail in particular struck me as funny.

Our lead Humvee’s job is to clear a path for us which he does by waving an assault rifle at anyone that gets too close. If that doesn’t get their attention, his favorite weapon seems to be half-liter water bottles. He tosses these like a Nolan Ryan fastball at the windshield of cars that don’t pull to the side of the road quickly enough in his estimation. He actually has a little rack of water bottles mounted inside the turret.

I seriously need to get a rack mount of water bottles for my car. That would come in quite handy for the L.A. free way. Can you see me chucking an Evian at grandma ahead of me for driving too slowly in the fast lane?

comments edit

Dare announced the beta version for the Wolverine edition of RSS Bandit (version 1.3.x) today. You can read his announcement to see some of the nice features it includes.

I’ve been feverishly updating the documentation to take into account the new features and the updated look and feel. Documentation is hard work when you’re trying to keep up with developers as productive as Dare and Torsten.

One feature that wasn’t announced, but quietly added by yours truly, is the ability to configure keyboard shortcuts via an XML settings file. The reason this is not an “announced” feature is that we have yet to provide any GUI support for configuring these settings. Nor have I documented the format for these settings or the proper way to change them.

Assuredly, I will be working to post both documentation as well as a separate shortcut editing tool soon. For the adventursome, there is a beta of the editing tool in the Child Projects folder in CVS. You can edit the settings and save the result in the RSS Bandit Application Data folder to override the default settings.

In the long term, we’ll have to decide if this remains a separate tool for power users who demand this level of control and are willing to take the risk, or if it should be added to the main GUI.

comments edit

I’ve kept a couple of other blogs before, but this is my first with staying power. My blog new year resolutions include being even more irreverent, geeky, rash, and misguided (if even possible). It’s been one year, and I recently passed the 500 post mark without even noticing (I hate missing an opportunity to party).

If you’re a regular reader (hi Mom, Dad, Wife), do you realize that there’s much better drivel out there? But you probably read this blog for the same reason I read yours, you’re trying to expunge some latent guilt by self flagellation (Ignore the fact that the phrase “self flagellation” is redundant.). I hope that works out for you.

Seriously though, I’ve been surprised by the quality of comments I receive on my postings. I may have a few readers, but they’re smart readers *cough* *suckup* *cough*. Except for those who find this site by Google and are not searching for a technical topic. Them are the dumbest f***s I’ve ever seen.

Well stick around, I have an exciting line-up of topics coming up. They actually involve a bit of work *damn!*, so they’ll be out less frequently. But they will be above poor. I’ll probably try to blatantly start a controversy or two to drum up traffic so that people will click on my ads (oops, I’m not supposed to promote the ads, there’s controversy #1) and this blog can pay for itself. And you can be sure I’ll continue to be one vain motherblogger.

comments edit

Props to any,one who can tell me the song and artist that my subject line refers to.

Sunday afternoon I flew to NYC, stayed at the W on Lexington (nice), had a Long Island Ice Tea (to commemorate), woke up the next morning, caught a train to Long Island for a meeting, found out our approach to a big project was all wrong (the product guys on their side love it, but the keeper of the tech gates changed his mind), caught a plane back to L.A. (business class upgrade. Loved it), and am now back to work.

One night business trips across the country suck. I didn’t have time to hang with my buddy Dave out there. I called him when I got in. It was only midnight, you would think he’d still be working. Slacker.

comments edit

CAPTCHAAs if to punctuate my post entitled Image Based CAPTCHA is Fast Losing it’s Appeal, Casey outlines his .NET code used to beat the CAPTCHA employed by many blogs using a Neural Network approach.

Neuron This is a beautiful attack on CAPTCHA (as it is currently often implemented) and only shows that there is no “ONE” solution to rule them all. The attacks against rel=”nofollow” as ineffective against spam now apply to CAPTCHA. Blocking automated spam in all its forms will be a continuous iterated process encapsulating multiple combined defenses (such as rel=”nofollow”).

And to the haters that are pissed that Casey published this, get over yourself. You need to realize that his post shows that CAPTCHA (as it is currently implemented) is a wall of sand. If it was this easy for him to beat CAPTCHA, a black hat out there probably already has a similar solution. Ignorance is no substitute for security. Now you know it can be beat quite easily, go fix it and quit whining.

Thanks to Scott Reynolds for pointing out Casey’s approach.

comments edit

Received this comment on my “Blogging Is Pure Vanity” Post.

I’ve always thought blogging was the product of excessive self-indulgence. When one of my particularly vain coworkers started a particularly insipid blog, it was time to strike back. So I started blogging the news of his life. Then I told everyone else at work about it except him. He still doesn’t know about it and we’ve been laughing at him for a week now.

Now that’s funny. I’ve been searching, but I haven’t found anyone blogging about my life due to my particularly insipid blog.

comments edit

Every Friday the company buys lunch. Today we all received an email with the list of choices from a Thai restaurant. I replied with “Orange Chicken”. Soon afterwards one of my coworkers thanks me for letting him know I’m having Orange Chicken. Huh?

Then I get this email from another coworker:

You know… for a second there I thought we would all be held in suspense while we tried to guess what you were going to have for lunch. \ \ I feel so much better knowing you plan on eating the orange chicken tomorrow; seriously it takes a lot off my mind…

Ahh, I’ve made the rookie AOLer mistake of hitting “Reply To All”. I swear this is my first time.

I responded that

I’m a trend setter and it’s my duty to inform the wannabes, losers, and biters of my choices so they have ample opportunity to jump on the bandwagon.

Besides, it’s good to let the President of the company know that I’m an up and comer. Orange Chicken is the choice for an individual who deserves a very large raise. I work with a bunch of wise-asses.

UPDATE:It gets worse. After some good natured ribbing, I send out the following to the “everyone” list.

Hi All,\ \ I accidentally hit the “Reply To All” button earlier when indicating my choice for the savory options we have lined up for this Friday. I apologize for spamming you with my choice, which happened to be, and remains, Orange Chicken.\ \ I just wanted to make it clear that the company neither endorses nor supports the choice of Orange Chicken. The company takes no official position on your choice of Thai food other than to pick from the choices given. The choice of Orange Chicken is a personal choice and should not influence you in your own decision relating to fine Thai cuisine.\ \ Therefore, if you should choose to go with Garlic and Pepper Beef, for example, feel free to make such a fine and tasty choice (though I would suggest you consider Orange Chicken as it is quite delicious).\ \ Phil

After hitting “SEND” I notice that there’s a few emails in my inbox where another coworker had been sending puzzles to the everyone list and received a reprimand from our HR person, let’s call her Bonnie.

This email address sends to everyone in {COMPANY} and should be used ONLY for business purposes. While I appreciate the heart of it is to share fun, addressing it to everyone is extremely inappropriate.

So my “extremely inappropriate” email arrives in everyone’s inbox AFTER this one and my coworkers think I’m both hilarious and a dead man for my “response” to Bonnie. I have some ‘splaining to do.

comments edit

Colin has a nice little quiz about enumeration on his blog. Basically he asks, how would you implement a class to enumerate through all the letters of the alphabet. Below is my “cute” response.

using System;
using System.Collections;
 
public class Alphabet : IEnumerable
{
  public IEnumerator GetEnumerator()
  {
    return "abcdefghijklmnopqrstuvwxyz".GetEnumerator();
  }
}

Now if you compile my answer and run it, it seems to answer the question correctly (for an academic quiz), but it’s completely wrong for a real world developer. The right answer is “Well, which alphabet or alphabets must I support? Does it need to be localizable based on the current locale?”.

Yes my friends, the answer is to gather more requirements. Make sure you really understand the problem domain. This is why software isn’t as easy as “well I want it to do this so just do it.” This quiz asks what seems to be a very straightforward question. If you as a developer gave me the solution I wrote above, I’d be pretty pissed as a client if I was ready to deploy this to Korea.

sql comments edit

Found this interesting article via Hassan Voyeau that details the performance penalty when naming your stored procedure with an sp_ prefix in a database other than the master database.

Personally, I hate adding extraneous and unecessary prefixes and suffixes to names. Sometimes they’re useful and necessary, like when programming in Fortran 77. But I hate naming tables with a tbl prefix and stored procs with an sp prefix (I’m forced to at my current position). Sql Enterprise Manager does a nice job of separating tables from stored procedures when they are being displayed. I’m never going to get the fact confused that that square looking thing on my database diagram is a table and not a user defined function.

Anyways, Hassan, how’s the weather in Trinidad?

comments edit

If you’re a fan of good music (I mean objectively, not subjectively) I plan to recommend a few songs here and there in this blog. Never mind the fact that if you end up purchasing the songs via my site, I get paid. I give you my word, a vow, that I will never lead you musically astray. I may lead you astray in other ways, but not in music.

Having said that, let me introduce you to this new single by The Chemical Brothers.

I’m a big fan of Metropolis on KCRW. If you live in the Los Angeles area and are a fan of good music then you’re probably familiar with this radio show hosted by Jason Bentley. It’s a great place for discovering new music as Jason really does have his finger on the pulse of electronica and world music.

It’s on this show that I first heard the song Galvanize, which contains the catchy hook that is the subject of this post, “My finger is on the button”. I purchased it on Galvanize today and am totally digging the violin action mixed in with the funky beats. The image on the left is a deep link into the iTunes music store. If you’re not an iTunes user, you can click on the Amazon.com link.

[Listening to: Galvanize - The Chemical Brothers - Push the Button (6:33)]

comments edit

Given that I’ve written much of the documentation for RSS Bandit on the documentation site and have spent a lot of time in the code making a few contributions here and there, I feel a bit sheepish that I didn’t know about this particular feature.

After reading this post (which is one of many discussing how to create one click subscription links) from Phil Ringnalda I discovered that a common way to subscribe to an RSS (or ATOM) feed is to merely drag the link into your aggregator.

I hadn’t seen that described before so I thought I’d try it out with RSS Bandit and sure enough it works. Sweet! I’ll have to add that to the docs.

comments edit

Being married to a Japanese woman, I’ve cultivated a love of tea. Although Koreans have great tea as well, it doesn’t figure as highly in the culture as it does for the Japanese.

My favorite tea is a type of Green Tea called Gyokuro. It’s hard to describe the taste as it has a lot of character and almost a silky texture that just spreads across the tongue when you drink it.

So to make a long story, the point of this post is to try to earn some green tea from Adagio teas as part of their link rewards program. Yes I can be bought with a cup of tea.

[via Opiniated Geek via Scobleizer].

comments edit

Today marks the completion of my thirtieth trip around the sun. And it’s been a scenic ride. Much love and thanks to my lovely wife for putting together a little shindig for me and a few of our closest friends. Great food and drink were consumed and a good time was had by all.

sql comments edit

What will the last two lines print. Will they be the same?

DECLARE @test VARCHAR(2)
DECLARE @first VARCHAR(4)
DECLARE @second< VARCHAR(4)

SELECT @first = ISNULL(@test, 'test')
SELECT @second = COALESCE(@test, 'test')

PRINT @first
PRINT @second

What do you think?