Wednesday, December 27, 2006

Rails Quick Reference

I don' t know who Johnny is or what he's thinking, but blog Johnny's Thoughts has a Rails Quick Reference that just taught me several things I never knew.  A database option to the initial rails setup command?  Nice.  I can't count how many times I've just naturally gone into an editor and changed the mysql stuff to oracle or sqlite3.

Forget about bookmarking it for later, I'm printing it and taking a highlighting marker to it and sticking it on my cube wall.


Technorati tags: , , ,

Clocky Lives!

Ok, my wife would kill me if I actually bought one of these things, but check it out -- Clocky is shipping!

What's Clocky, you may ask?  Well, let me ask you, what's the biggest problem with alarm clocks today?  The snooze button.  You can keep hitting that little bugger as long as you want.  Many clocks have tried offering features to get around that, such as making the alarm louder each time, or making the snooze shorter.  What does Clocky do?  Clocky jumps off the table and runs away.  That's right, you have to go chase it to turn it off.

I love it.  I have no affiliation with it at all (it dawns on me that the above sounds like a sales pitch), but I think it's an awesome geeky idea.  If I was still a single geek I would have one in a heartbeat.


Technorati tags: , , ,

Thursday, December 21, 2006

Evil DRM : iTunes

Perfect example of why all DRM is doomed to failure.  My laptop is having a hardware problem, so I pop the hard drive from it and swap it out with another, identical machine here at work.  Put laptop in docking station, fire it up...and iTunes wakes up, tells me that this machine is not authorized to play my iTunes "purchases" (including free downloads from the iTunes store), and promptly removes them from my iPod.

Think about that.  The poor iPod was simply connected to the wrong place at the wrong time.  I didn't change iPods.  I didn't even technically change computers, since I took my harddrive, my install of iTunes, all that stuff with me.  Any library that I had on that machine was still there.  But it sensed that I had changed machines and because, and this is a direct quote, "you are not authorized to play them on this computer", it removed them from my iPod.  They are still on my computer, and I can play them if I want to authorize this machine, which I don't, because it is a loaner and it would be a waste.  But I don't see how Apple figures they had a right to delete stuff from my iPod?  Why not let me keep playing them on the iPod and simply tell me I can't play them on the computer?

All DRM is evil and bad for the consumer.  It prevents you from using products you purchased in ways that you should legitimately be allowed to use them.  Never forget that.


Technorati tags: , , ,

Friday, December 15, 2006

JXplorer/LDAP with Active Directory

Just a quick note, since it took more than a little Googling to find this one.  Trying to connect up a JXplorer (an open source Java LDAP client) to our Active Directory server, and kept getting errors like these:

Error opening connection:
[LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 525, vece]


Error opening connection:
[LDAP: error code 1 - 00000000: LdapErr: DSID-0C090627, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, vece]

The second message means no connection could be made, and I get that when trying "Anonymous".  So I guess my server doesn't allow anonymous access. 

If you're seeing the first one on just trying to connect, you might be doing the same silly thing I was doing.  When Level is set to User + Pass, then in the User DN section you want the whole name of the person, not just the login/username.  So you want "John Smith" in there, not "jsmith".  Once I did that, it came up just fine.

(Remember also that "dc" means "domain component", so you just use as many of them as you have parts of your address:  dc=duanesbrain,dc=blogspot,dc=com.  It's not any sort of hierarchical thing.)


Tuesday, December 12, 2006

HOWTO Hire Developers

There's a million different articles out there on how to hire developers, or if you're a developer, how to get yourself hired.  I'm not going to bother with a top ten list of questions, be they technical apocrypha, logic puzzles, or what not.  When it comes right down to it the thing that I'm often making my final decision upon is a combination of the candidates comfort level, his confidence, and my respect and faith in his answers.  It's hard to explain, but it's also almost impossible to fake.

Let me try putting it another way.  When I'm interviewing someone who is supposed to be a technical person, I find that they tend to fall into four basic camps. I'm not going to number or label them, this is just an observation based on experience.

  • Someone who has no meaningful, relevant technical skill.  They've either lied on their resume, or they can't back up what they have done.  They fall apart under questioning.  Hopefully you don't have to see many of these, as properly preparing your recruiter with exactly what you're looking for can cut way back on the posers.
  • Knows the technology but "not enough."  Sometimes I'll get someone who I believe can write the code to get the job done.  But they don't show any kind of deeper understanding, they're just parroting back what they've learned.  They won't, I feel, be able to creatively move forward on their own when it's needed.  More importantly, maybe they can move forward, but maybe I'm worried that they don't have the vision for such decisions and I'll constantly have to watch over their shoulder and micromanage them to make sure that they're not getting themselves into situations where yes, the code works, but that doesn't mean it's not completely the wrong way to do it.
  • Alpha geeks.  These are the guys that have got so much experience that *they* are doing *me* a favor by even showing up for the interview.  Normally they have at least as much experience as me, if not more.  The biggest problem with these folks is can they get over the fact that they didn't build the product, and they're not being asked to rebuild it?  I used to work for a company that prided itself on only hiring this sort of superstar coder.  The in-house joke was that every new hire spent his first week trying to figure out which part of the system he could singlehandedly rewrite in order to make his mark.  No one ever successfully implemented such a thing, to my knowledge - but lots of them talked about doing it. 

    Personally I don't want to spend my time telling people why they can't rewrite large hunks of the code.  Sure, a geeky conversation over lunch or in the hallway. But if there are specific projects to get done and I've got somebody saying, "If we only took 3 months to rewrite this whole portion over here, this project that's due in 2 days would be even easier!"
  • Peers.  This is the goal.  I find one of these I can't get on the phone fast enough to the recruiter to say "Love him."  A peer is somebody that I'm not going to have to argue with, nor am I going to have to micromanage.  It's somebody who I can share the technical design with.  Sure, at the end of the day somebody has to make the final decision, and I'm the one with the seniority, but my ideal development environment is to put three people in a room with a big whiteboard and not come out until everybody is on the same page.  It is quite possible that this person does not have a spectacular pedigree of technical skills.  What's important is that they have the foundations that enable them to work with what they've got, and learn new things as needed.

    How do I know I've stumbled upon a peer?  I have a simple test that may not be perfect, but it gives me a very big clue.  I walk up to the whiteboard and I draw a problem.  Or, I encourage the candidate to go up and draw something.  Because in the real development world, you're going to be in front of a whiteboard with your fellow programmers and you have to be able to work together.  Does this candidate have the understanding of my business enough, as well as the confidence, to offer suggestions on what I'm doing?  Likewise is he confident enough in his own designs that if I ask questions about it he won't see them as an attack and go into defense mode?

I want somebody that I can collaborate with, bottom line.  Whether I'm hiring somebody on the same level as me, or someone who will report to me, I use the same test.  I want this person to be comfortable in the environment he's (or she's, I shouldn't be so politically incorrect) walking into.  It takes a little longer, and it's much harder to explain to the recruiter what I'm looking for and why a candidate doesn't have it, but it's worked very well for me in all situations I've used it.  Where I've personally been the one responsible to say "Yes, hire this person," I've almost never been disappointed.


Technorati tags: , , , , ,

Monday, December 11, 2006

Tivo Channel Changing Problem

I know I'm not the only one who has a broken Tivo.  Over the last few months there's been a problem where Tivo will fail to properly change the channel by a digit (for instance heading for 218 and ending up on 21) and basically making it useless as a recording device since to make sure you don't miss your show you have to stand and watch it.

Tivo has not acknowledged it as a problem yet, though there are plenty of people in the forums who would beg to differ.  Some are suggesting fixes, like using the Advanced Setup to switch from fast channel changing speed (A) to medium or slow (B or C).  I tried switching to B, but still had the problem.

I'm currently trying a new idea.  No matter what channel we're heading for, Tivo can be configured to send 2 digits, or 3, or even 1.  Should Tivo send just the channel number, or should it pad with zeroes?  I switched my configuration over to "send 1 digit", in other words don't send any leading zeroes.  It's important to couple this approach with the "press enter to change channel" mode, so that nothing tries to parse a single digit while you're typing it.

I just tried this tonight, and the first season pass I had went through fine . I'm curious to see tomorrow night, after a few more have kicked in, if I'll still be as pleased.

Update:  Well, it didn't completely work.  Twice last night it failed - once when changing to channel 61 it went to "6-enter" and I got channel 6.  A second time when changing to channel 12 it did "1-2" but then did not do the enter, so it stayed on the channel it was.  so I think I've improved my odds, at least, since Tivo does not have to execute 4 keystrokes every time (3 digits plus enter), so there's less opportunity for it to fail.  But unfortunately I think we've reached the point where Tivo is just unable to faithfully execute even a 3-key sequence to change the channel every time.  That's sad.  I wish they'd at least acknowledge it as a problem and tell us that a fix is in the works, because it's pretty obviously on their end at this point.  I wonder if it will fail to change to a single digit channel properly?  Can you imagine that?  Go to channel 7, please.  Nope, can't do it.  Not even gonna try.

Maybe somebody with more time on their hands can start up the class action paperwork and get all of us subscribers some money back, since really, what are we paying for if we can't sign up for shows in advance?  That is the major difference between the device and the subscription, right?  The device can do all the smart digital recording we want, but we subscribe so that we can get the guide, so that we can do season passes and wishlists.  Well, that part's failing ,so Tivo is not providing me the service that I'm paying for.



AddThis Social Bookmark Button

Technorati tags: , , ,

Tuesday, December 05, 2006

Zip Code Visualization

This is a nice little piece of coding that shows a visual representation of how zip codes break down around the US.  It's interactive, so as you type out a zip code you'll get to see it drill down.  Don't forget to press Z to turn the Zoom animation on.

This ties in very nicely to what I'm doing in my regular job (the address matching problem).  Recently I noticed that I only get about 3 digits of signifance out of my zip code matches, so I'm curious to see just how large of a physical area such situations tend to represent.

Sometimes I forget how skewed my perception is

I listen to lots of podcasts about starting your own business.  Many of them take the same form, "I have an idea but I want somebody else to do all the hard work."  Sometimes it's irritating, but often it is motivational.

The other day I was listening to a particular show out of I believe Tennessee.  And the caller actually uttered the following sentence:  "I'm plannin ta be up around Nashville next week, and was thinkin about maybe goin to the library and usin the computer."

It took me awhile to fully appreciate how different that person's world is from mine.  Right now, in my home, I have ... 6 computers. Not counting my PDA.  I've been surrounded with computers since I was about 14 years old.  I have a degree in computer programming. I can't imagine life without them.  When I need something from somebody, I'll usually email them first rather than calling.  When I need to look up a phone number I head to google, not to 411.  And I absolutely can't stand to see a trivia question go by unanswered, if Wikipedia, IMDB and Google are only a few keystrokes away.

And then there's this guy.  Not only does he not have a computer of his own, either his local library does not have a computer either, or else he doesn't even have a local library.  I'm guessing that wherever he was, Nashville was not exactly one town over.  It's not like somebody plans a trip a week in advance to be "up around Nashville" if it's just the next town over.  So here's a guy that gets exposed to computers maybe 1/1000th of the time that I do.

That'll certainly make you think about your perceptions of the technology around you.  Ironically my other college degree is in sociology, specifically majoring in the impact of technology on society.  Maybe that's what makes me notice such things.  Man, is it a wakeup call.  This is not just somebody who hasn't upgraded his own computer in a few years, something that in my neck of the woods will get you smirked at in the local Best buy.  This is a guy to whom computers are still an alien item, something for someone else to own, something that he will use under very special and unique circumstances.  I'm intrigued by this guy.

Sunday, December 03, 2006

The Address Matching Problem

I have a list of organizations in my company database.  We are working with a customer who has data on some of those organizations.  They will provide us, multiple times per week, a list of their database.  So I have to say "For any given organization in my list, is variable X true from their list?"

Do you have any idea how complex that problem is?  You see, there's no linking value betwen the tables.  No common identifier that I can rely on.  So I have to do a natural match on whatever information I do have, which is basically name, address, city, state, zip.

Stop and consider all the different ways that this information can be different - abbreviations, word choices, even just plain typos and misspellings. That happens more in such data than you'd think.  What constitutes a match?  If one list says, I dunno, "Paul Smith College" and the other says "Paul Smith College of New York", is that a match?  Do you always have to validate against every single field you have, or can you be confident enough in one of the fields to match it and move on? 

You can't match all the fields perfectly.  First throw out zip code because some entries will have zip5 and some will have zip5+4.  Experience shows that even if you just look at the first 5 you'll find that many entries are off by one digit, since people often know a common zip code for a given city and don't necessarily realize that there could be several.  So maybe you can get by with matching on 4 digits of the 5, but then you don't have an exact match.

Forget about address as well.  Entry one has "1 Main Street" listed for address line 1, and "Suite 220" for line 2.  But the other entry from the other list has "Main Office" for line 1 and "1 Main Street Suite 220" for line 2.  It's a match, but not an easy one.

Worst of all, the data is coming in at a rate of several updates a week.  So it's not even like somebody can sit and go through the list (about 5000 records) once to clean it up and move on.  Every week there could be hundreds of new entries that will exhibit all the same behaviors I've described above.

I realize that there are companies built up around this exact problem.  But when you're a single programmer whose been handed the problem and told to solve it in a week, what do you do?

Goals: Achieve a confident, 'exact' match as frequently as possible (ideally 70-80%, given what is known about the intersection between the two lists).  Ambiguity (where an entry from list 1 might match more than one entry from list 2) is allowed, to an extent, in that the customer will be asked to narrow down the selection.

At least I'm doing it in Ruby :).


Technorati tags: , , ,