Wednesday, January 31, 2007

Thinkpad with Bluetooth Headphones

When it comes to writing code, I'll often use the phrase "head down, headphones on."  This is how I prefer to work when the time comes to crank it out.  The problem I'm been having at work is that with corded headphones, I am constantly either moving too far from my desk and strangling myself, or else running over my cords.

Well for Christmas I did my research and got the Plantronics 590a Bluetooth headset.  I liked this set in particular for a couple of key features.  First they're rechargeable (can you believe some wireless headphones still expect you to load up on AA's every 10 hours or so??).  What's cool is that you can recharge them both by their own docking station (to leave on the desk at work when I go home for the night), or else directly via USB port for travelling.  There's even a bonus cable for using them on an airplane, but I don't expect to get too much use out of that. 

Second, they come with a transmitter as well as the headphones.  What's that mean?  Well, if you have a Bluetooth capable machine like my Thinkpad, not much.  But if you don't, then what you can do is plug this little disk into your audio-out jack and presto, your headphones work the same as they would have.  That's actually pretty cool.  One obvious use there would be to plug that into iPod, put iPod in pocket and not worry about it for the commute across town.  But that's not really why I bought them.  For walking across town I much prefer the earbuds approach and can live with a single wire sticking out of my coat.

Anyway, though, that's not the point of the story.  Getting them working is the point.  This took a little while on the ThinkPad (T60p, if that matters).  Here's three crucial things I've learned to making them work:

  • this laptop has a physical switch that controls the wireless radio (which covers both Bluetooth as well as 802.11).  If you didn't know that, you could spend hours pulling your hair out.  It's right on the front of the machine, down under where your left thumb would go. 
  • if you change the status of your audio device, you'll often have to restart the application you're running.  So if you've got iTunes up playing through the speakers, and then you switch on the Bluetooth headphones, iTunes won't magically know to switch.  You'll have to get out and back in again.
  • If you don't hear anything and you think you've done everything right, make sure you've hit the "off the hook" button on the earpiece just as if you were answering a phone call.  The sound won't just magically start coming through them until you tell it to.
  • I'm having a bad problem with my signal just dropping out a couple of times a day.  For no good reason I'll get silence, and then just the steady low beep that means no connection.  All attempts at forcing a reconnection via software are met with disaster, as Windows gets into a state where it seems to think that it's still connected even though it's not.  So you can't disconnect, but you can't connect either.  Solution?  Hit Function+F5, turn off the bluetooth and turn it back on again.  When I did this the headset automatically reconnects itself and I'm back in business.  I can live with doing that once or twice a day if it happens.  Beats rebooting the machine!

Supposedy these headphones are smart enough that you can pair them up with your cellphone as well as your laptop, and when a call comes in you can switch.  I haven't tried that yet.  Not sure I need that.

 

Technorati tags: , , , , ,

Monday, January 29, 2007

Now, see, here's a great idea.

From the "why didn't I think of that" category comes The Footpull.

Problem - You go into the public restroom, do your thing, and then wash your hands.  But you know for a fact that others don't wash their hands.  So when it comes time to leave the restroom you have to grab the same doorhandle that they do, and defeat the whole purpose of washing your own.  Sure, one solution is to wrap papertowels around the handle - but these days most restrooms have switched over to those horrible hot air dryers. 

Hence the Footpull, a handle that fastens to the bottom of the door so that you can pull it open with your foot.

Brilliant.  Instant market - everyplace that has a public restroom.  And there's lots of those.

Even more brilliant, the makers are already working on a home version for the refrigerator, for when you've got your hands full of groceries.  Not sure my wife would dig me attaching a gadget to the bottom of her nice appliances, but still, it shows that the inventor isn't sitting back on his (their?) laurels, they're coming up with new variations on the general concept.

 

Technorati tags: , , ,

Thursday, January 25, 2007

[Rant] Every MP3 is not a podcast!

Ok, this is becoming annoying. I simply cannot stand when a site says "We have many podcasts for you to download and listen to" and then what they have is a bunch of links to MP3s.  Every MP3 file is not a podcast!  The word "cast" is in there for a reason, people.

If somebody tells me they have a podcast, I expect to find a link to an RSS file that I can copy into iTunes.  When a new MP3 file is available (or even if they have already all been made available) I will see it on my list of available episodes, and I will specify in one place which ones I want.

The Small Business Administration (SBA) is the latest site to pull this nonsense.  They even have a special little orange button that says POD on it.  How cute.  But it points to the stupid MP3 file!

By linking to the MP3 file, you require me to do the following before I can have the content in the format I want it:

  • Right click and choose "Save link as."
  • Decide where on the file system to save it, and by what name.
  • Repeat for every episode I'm interested in.
  • Go into iTunes.
  • Go into "Add Files to iTunes".
  • Find each file I've just downloaded, and wait for iTunes to recognize them.
  • Create a special playlist to manage my new files.

My playlists are all centered around the concept of "new episodes of podcasts I'm subscribed to."  They are sensitive to newness, and to getting rid of episodes I've already listened to.  If you have a real podcast feed, you will show up in my listening stream pretty much immediately and entirely automatically.  But if you give me nothing but a batch of MP3s, then you're pretty much not giving me anything I couldn't get 5 years ago, so please get off the buzzword bandwagon until you're ready to do it right.  Argh.

Rant over.

 

Technorati tags: , , , , ,

Wednesday, January 24, 2007

Postfix Inheritance : How would you do it?

Ok, I've got an object hierarchy I'm using to spit out a fairly lengthy XML document.  Every element in the system is basically unique except for one unifying feature - they can all have an optional element called Note, and if they do include Note, then Note has to have the same structure wherever it is used.  This element comes as the last child.  Got that?

Ok then.  What I want to do is create an abstract object XmlElement which basically has one method, ToXml, which will spit out the element as an XmlElement.  From there I create NoteElement which is a child of XmlElement that might have this optional Note inside of it.

Ok, so far so good.  I have all of my elements extend NoteElement, and then in the few cases where I want a Note I can simply add it, without having to rewrite it 100 times for 100 elements.

But!  When it comes to actually emitting the object as XML, how do I do it?  Ideally I want to say something up in NoteElement that says "Hey, don't forget about me...do whatever you want to do, but before you return, append me if I exist.  By doing it just once I don't have to individually write it 100 times.  99% of my objects will not have this information (although I have to write the support for it in there for spec compatibility, blah blah blah).

I'm trying to envision how to go about doing this.  I suppose one way is to have the ToXml method stop at NoteElement, and then have the others all implement a ToPartialXml or something like that.  Then NoteElement's ToXml method would simply call the appropriate ToPartialXml (which, for NoteElement, would be abstract so that the children have to supply a meaningful body), and then after that, tack on the Note if it exists.  Hmmm, that might work.

Blogging aloud because it's too late in the day for me to actually start up the code but I wanted to get the idea down.  Maybe somebody reading knows if I'm about to go down a dark and twisty path.

 

Technorati tags: , ,

Tuesday, January 23, 2007

ORA-12154 using C# with Microsoft Visual Studio : Not what you think!

Ok, this one goes in the infuriating category, because I quite literally spent days on it.  Everybody who's tried to interface with Oracle should know the ORA-12154 error, TNS:could not resolve the connect identifier specified.  Basically it means failed to connect to the database because the driver can't figure out what you want to connect to.  Normally that's a problem with TNSNAMES.ORA or something similar.  (A bad username/password would be a different error.)

Well, I started getting this in a Solution I'd been working in.  Couldn't understand why.  I was simply creating a new console application that linked into an object framework of my own creation that I was using in plenty of other places.  I kept assuming it had something to do with my connection string, since I can never remember whether it's "User Id" or "UID" and all that nonsense.

Where it gets weird is that I'd create a new solution, create a test project...and it worked fine.   So I know it's not my machine's ability to connect to the database.  That is, not a TNSNAMES.ORA problem or anything like that.

So then I'd take my working project, link it into my solution, and it continues to work.  Ok, cool.  Create a new console application in my solution, and basically mirror everything that's in the working project, including dragging and dropping the App.config file (which contains the connection string) from good project to new project.

And it fails.

This went on for days.  I tried every combination I could imagine.  I checked the versions on all my DLLs.  I diff'd every source file in the two directories.  They were literally the exact same.  Just a single line invoking a common library they both shared, for pete's sake.  So it's not even like the error is in the common code, because it works for one but not the other.

At last, just now, I found it. Ready for the clear and obvious solution that makes all the sense in the world now that you see it?

There was a parenthesis in the directory name where my solution was stored.  Apparently at some point when I wasn't paying attention I'd nested a reference to Foo and VS had created a directory called c:\Foo (2) where it was putting my solution.

I close the solution, rename the directory c:\Bar, and reopen the solution. Rebuild it (you have to rebuild it when you do that), and everything works fine.  Rename it again and put the parenthesis back, and back comes the ORA-12154 error.

So, there you go.  The problem was not in anything I wrote, it was in where it lived on the disk.  Naturally when I created a project outside the solution and then linked it back in, it did not live in the same directory (even though it appeared to now be part of the solution).  And when I created a new project, supposedly right next to the working one, I was really creating it inside of the bad directory.  Maybe I'm the only person in the history of Visual Studio to have a parenthesis in a directory name, but I didn't even put it there, the software did it automatically and I never really paid it much attention.  But when you have a parenthesis in the directory where your solution is stored, it will manifest itself as a "TNS:cannot resolve connect identifier" error. 

Have I mentioned how much I hate this technology recently?

 

 

Technorati tags: , , , , ,

Saturday, January 20, 2007

Survive the Layoff

A recent post on Lifehacker reminds me that even though the dotcom bust is over, people do still get laid off.  When that happens they need advice, both about what to do if they sense it coming, and what to do afterwards.  Back in 2002 I actually wrote a book (well, an ebook) on the subject called Survive the Layoff.  It languished for awhile with a poor publisher who ultimately failed, but last year it was picked up and saw the light of day at a site called Top Tips To.  I keep forgetting that it's all still just as relevant today as it was a few years ago, it's just not always front page news anymore.

 

Friday, January 19, 2007

Running a Brainstorming Session

At the beginning of this year, the CTO asked me to run a brainstorming session to start the new year off right with the team.  I'd been a part of the audience in the past, but never a moderator, so I went back to my original resources and found a set of rules for running a succesful session.

  1. Have a moderator.  The moderator's job is going to be mostly to write things down, and ask questions  The moderator does not do most of the talking.  That means that if you have one team member who is traditionally the talky one you can try the tactic of making that person the moderator so that other people can get a word in edgewise.
  2. Flip charts are better than whiteboards.  Ideally the kind where you can rip off a whole sheet and then stick it to the wall.  You want to record everything that's valuable, and not have to erase anything.  When you fill up a sheet, rip it off and stick it to the wall. 
  3. Rules:
    1. Stress the positive, optimistic approach.  There are no wrong answers. 
    2. Everyone is encouraged to have an opinion.  It's not about job titles.  (This is easier if the big bosses are not in the room.)
  4. Have a structure, but not an agenda.  Is the group leaning more toward talking about specific new features for the product, or maybe a whole new away to position the product for a different audience?  It's the moderators job to find the theme of the discussion and keep it from veering too much into chaos.  It's ok to have an agreed upon topic, and if the conversation strays too far, the moderator must bring it back.
  5. Document and share your notes ASAP so people don't feel like everything was done in a vacuum.  They want to see physical evidence that they accomplished something.  (Walking out of the room with massive rolls of flipchart paper is a good start to this).

Our session ended up taking place in three 90 minute sessions.  During the first I did an exercise where the first 15 minutes were spent on the "What don't I like about the current product" question.  We made a big panel of Post Its.  I then announced that those ideas were documented and we didn't have to bring them up anymore. We moved them off to the side and started talking about new ideas, not complaining about existing problems.

Although I had no real agenda, the first session became all about the user experience and new features that would benefit the user.  For the second session I started with a topic, "Ways that we can be more efficient at our jobs, so that we have time to work on all those cool features we talked about last week."  Finally for the third session we talked about business model and how to keep our paying customers (who are not our users, but that's a different story) happy.

Everyone seems to have come away pleased.  The company founder has asked to see the summary of my notes once I get them typed up.  I'm already working on a prototype of one of the ideas that was mentioned.

 

Technorati tags: ,

The Demand Paradox

Ok, here's a quick one.  You have an idea for a business.  Should you pursue it?  Is there a market?  A demand, in other words?

Well, is anyone else doing it?

If not, then you have to ask yourself whether there's really a demand.  A truly innovative idea means that no one has thought of it yet.  This is very different from "People think of it every day, but there's no demand for it."     Because if people have already thought of it and chosen not to pursue it, you'll never know.  It's a risk.

However, if people are doing it, then your challenge is completely different.  Now you're stuck with, "Well, people are already doing it.  Therefore rather than simply act on my idea, I have to compete for a piece of it."  There are times when this is a fine approach.  The world always needs more dry cleaners, gas stations and pizza shops.  You can indeed do the same thing as the guy across town and simply do it better.  But what if you truly thought that your idea was one of those ones from up there in the first category, something truly innovative?  It's a definite mental shift (heck, it's a mental jump off a cliff) to go from "My unique idea will be something no one has ever seen before" to "Oh bugger, there are dozens of people already doing it, which small piece of the original idea can I spin so that I have a hook?"

Just one of those random thoughts that keeps me from making the leap.  If I don't see anyone else pursuing my idea I can assume that there's no market.  But if people are doing it, then I don't want to play because I'm interested in innovating, not in competing.

 

Technorati tags: , ,

Thursday, January 18, 2007

Which Idea Wins

I've asked this question on a number of entrepreneurial forums and I never get an answer.  Well duh, why don't I ask it on my own blog?

Ideas are a dime a dozen.  Some people produce more than others, some produce better ideas than others.  But they're all over the place.  Let's assume for a moment that there are people out there (I count myself among them) who can measure how bored or unhappy they are with life by how many "ideas" they juggle in their brains at any time.  I've got a full time job (one that I commute 3 hours daily to get to and from).  But when people hit me up with the "What are you passionate about?" question, do I tell them about my day job?  No, I tell them about one of my ideas.

Don't worry, I'm getting to the question.

Ideas come from all over the place.  Right now, in my head, I could tell you about a podcast, two ebook projects, a real-life book proposal, two or three game ideas, some software ideas for educational projects, and a couple of web2.0 types of things. Oh, and one actual physical product that would have to be made out of something other than bits.  In almost every case I could tell you my motivation, the market, how I would go about making and selling it, and so on.  These aren't just "Oh, there's an idea..." thoughts, they are mini business plans that I keep in my brain.

What I don't have is time.  Time is the crucial resource.  Especially if you're bootstrapping.  Oh, did I mention that I have three young kids?  My time each day is basically: two 25 minute trips on the train, and then maybe about an hour and a half in the 10pm-11:30pm range after kids and wife go to sleep.  Could I work later in the night? Eh, sometimes.  See earlier point about having 3 kids and a full time job.  Gotta sleep.

So, at this point I'm sure you've figured out the question:  which idea wins?  That is, when ideas are easy and time is hard, and you can only really pick one, which one do you pick?  There's at least three or four variables that go into that decision:

  • which idea are you most passionate about?  Surely some ideas are of the "Oh, hey, I think I could make some money like this" variety.  I'd probably put all eBay businesses in this category :). But then there ideas where you say "Wow, I think the world would be a better place if this idea became reality."
  • how much money will you make?  Naturally if you're unhappy with your dayjob and trying to bootstrap something, you can probably envision supporting yourself via your idea(s).  So the amount of money that you can make will factor in.  And that, sometimes, is mutually exclusive to the "how passionate am I" question.  I might love Shakespeare, I might want to write my own book someday about how to teach Shakespeare.  Something that would make my kids love it as much as I do.  But, will it make me rich?  Tough market out there.
  • what other resources do I need?  The digital age has empowered many people to do start businesses.  Anybody with a computer, basically, can start a business.  Or write an ebook, or create a podcast.  But what if the idea involves the real world? Physically making something, or getting it out into a non-web market?  Such products do still exist, ya know :).  Sometimes an idea requires that you step out into an area you know nothing about.  Typically an area where it'll start to cost you time and money (such as scheduling face to face meetings with strangers you want to do business with, paying to have prototypes designed, and so on).

Each idea will fall differently on those three scales.  You can only pick one.   If you pick more than one, than ultimately all you're doing is a disservice to both, since neither will get the kind of time that it should.  No fair hedging your bets, all it shows is that you don't have confidence in either idea.  But picking one idea is putting all your eggs in one basket.  No other ideas will advance when you focus all your energy on just one.

So, again I ask, and I'll shut up now...which idea wins?

 

Technorati tags: , ,

Monday, January 15, 2007

Motorola Introduces Two Linux Phones

Ok, I'm sure I've already said it, but I'm perfectly happy with my Motorola V360.  It's got a USB port for charging.  It's got Bluetooth.  It plays video that I store on my miniSD card.  And it has MP3 ringtones.  Overall, a sufficiently geeky phone.

But man, the software stinks.  The interface is horrendous.  I've noted elsewhere, for example, that the word "ringtone" does not appear anywhere in either the interface or the manual.  The most popular topic among people who want to actually personalize their phone, and it's never even mentioned.

The hope of these new Linux phones is that they will bring with them an even higher geeky factor, meaning that we should be able to mod the holy heck out of them.  Some of the choices are weird -- Bluetooth printing?  What's this for?  I suppose pictures, maybe.  Or "airplane mode" so you can turn off the cell phone but still use the music player.  Yeah, now give us a way to charge the thing while on the plane so you don't use up your batteries in half an hour by playing all that music.

The Z6 is just a fancy RAZR.  That's fine. The A1200 appears to be a competitor in the "does everything" space - touch screen, voice recognition, handwriting recognition....man, that sounds like it's gonna be a big failure. :(  REAL music player?  Interface to Microsoft's Media Player?  Ok, where did the Linux go? Forget everything I just said.

 

Technorati tags: , , ,