Tuesday, January 24, 2012

I want to share with you something that I wrote in an email back in 12/2004:

Imagine your favorite book.  The sort of book that you always like to
have a copy of, because there's always something in there worth
revisiting.  Maybe it's the Bible, maybe Shakespeare, maybe the Tao of
Physics.  Or, maybe it just happens to be the text book for a course
you're currently taking.

Now imagine you have a thought on that book.  Maybe it's an idea you
want to scribble down so you don't forget.  Maybe it's a question.
Maybe you just want to talk to somebody about the book, but none of
your friends are into it.  How do  you find a community of people who
are interested in it?

What if that book was really an e-book, and that e-book had a wireless
internet connection?  And, whenever you had such a thought or a
question, with a simple tap of the keys you could connect immediately
to a community of people exactly like you.  I like the notion of a
"deep" book, it feels very alice in wonderland to me.  Because you're
leaving the original intact, and that's key.  You're telling somebody
"Look, we're not gonna get in the way of your enjoyment with this
book.  But when you want us, just look a little deeper."  The book
itself is merely a reader onto the larger, centralized service that
tracks all the comments, questions, and so on.

Right now, the idea would have to take the form of a PC-based reader.
It's really the only technology that can handle it.  But hey, that
could easily mean laptops.  What about PDAs?  Pretty soon.  Need a
better UI.  And before you know it, ebooks really will take off.

How does this fit our model?  Imagine the kind of content that can be
plugged in to that sort of interface.  Who says it has to be a
straight blog/message board?  Maybe you work up a quiz on a certain
subject, and you link it directly into the book.  And charge people
for it.  Not everyone will take it, of course, but some will.  Or
maybe you're the author of another book on the subject.  Maybe you're
teaching a class that uses this text, and you want to leave a message
for your students.    The book itself not only becomes a walking
course on itself, it becomes an infinite number of courses on itself.
By grabbing a "deep" view of Shakespeare you open up the door to
everything you could possibly learn about the subject, all depending
on how you choose to navigate through it.  On your terms and your time
line.  Want to pay for some stuff?  Ok.  But there'll be free stuff as
well.  You pick.

The question, as always, is revenue.  Who pays?  Will readers pay to
be a part of this service?  Probably not 100%.  But they might pay for
certain premium services.  Imagine if J.K. Rowling offered sneak peeks
into her books to premium subscribers?  And what about content
authors?  Do they expect to be paid, or will they pay us to be a part
of the service?  The latter is not so very far fetched.  Because
basically what you're talking about is a built in community support
forum.  All an author needs to do is enable his book to work with this
system and presto, a community might/can/will spring up, and he's
done.    He can even make some money back by offering premium
services, as above.

We've finally reached the point where this is possible.  Check out Subtext for iPad. I hate when this happens. 


Tuesday, June 14, 2011

Rails : no such file to load -- devise/orm

If you're like me, you're getting this error while trying to get Devise set up. You google around and everything talks about mongoid or mongo_mapper, which you're not using.


Turns out the solution to this one is easy. Go into config/initializers/devise.rb and not this section:



# ==> ORM configuratio

# Load and configure the ORM. Supports :active_record (default) an

# :mongoid (bson_ext recommended) by default. Other ORMs may be

# available as additional gems

  require 'devise/orm/'



See it? When I read that I assume it meant that I could leave this alone and get active_record support. Apparently not. Change the line to read : require 'devise/orm/active_record' and see if your problem doesn't go away. Mine did! :)



Thursday, May 26, 2011

How'd You Get Your Job?

In my day job I'm tasked with building a job board. What that means is still pretty open.  Never one to just copy what the other guys are doing, I've been on a research kick.

So tell me.  How'd you get your job?  Job board?  If so, which one (if you remember)?  Or was it more about the connections, the who-you-know?  Right place, right time?  Newspaper ad?  Something else altogether?

I'm interesting in all kinds of input from all angles, regardless of what sort of job you have. If people are using job boards I want to understand what the most important features are. If they're not, I want to figure out if there's something I can build into one that will make them useful again.

I'll start - my last two jobs came when a former coworker said "Come work for/with me."  In both cases I knew and trusted the coworker and made the move.  Prior to that I had a trusted recruiter that I'd used on multiple occasions.

Who's next?

Monday, January 03, 2011

In Praise of Single Use Devices

There's an old marketing joke about the guy who went into the corporate office of the shampoo company and said "I can double your business with one word." That word? "Repeat."

Very related to this story has to be the first guy who decided that any device with a computer chip in it has to come with a game. Cell phones, calculators, MP3 players, what device of sufficient computing power these days does not have some sort of game? Even the early ipods had some sort of solitaire in them if I recall, as well as this "Name that tune" game that was actually pretty innovative since if use your own music.

Stop to think about it for a second. Why? Why does your phone need to play Blackjack?

The answer is simple - it's so that when you don't need to use your phone, you will still want to use your phone. "I'm bored. Hey, I know, my phone plays Solitaire, I'll do that."

Never forget that this is an invention intended to benefit the producer of the device, not the consumer. If there are two phones on the market, one of them does 3 things and one of them does 4 things, which one will most customers go for? Why, the one that does 4 things of course.

Well as I sit here with my new Kindle in hand, I'm having something of a Luddite moment. There's value in single use devices. Let's go back to that very first example, your stupid phone that still managed to play Blackjack on that tiny keypad. That moment when you said to yourself "Nobody's calling me, I don't have anyone to call...but my phone plays Blackjack, I'll do that." Imagine that the phone didn't play blackjack. What would you do? How about SOMETHING THAT DOESN'T INVOLVE YOUR PHONE? Read a book. Exercise. Go visit someone. Clip your fingernails. There's got to be 1000 things you could do besides play that game, but because someone put that game in your hand, you will play it.

I have a Kindle, not an iPad. Most people agree right now, at least from a distance, that multi-use devices like iPad will destroy single-use devices like Kindle. Why not, after all? Why get a device that does one thing when you can get a device that does 100 things? Well, because that device does 100 things, really.

In the week I've had my Kindle I've already finished one book (The Princess Bride), am half way through another (A Wrinkle In Time, which I am scanning to see whether my 8yr old is ready for it), and have made a dent in 4 others. I carry it with me, and whenever I have a moment I read.

If I had an iPad, what would I have done in that time? Yes, iPad has an ebook reader. Would I have used it? Of course not, and we all know it. I would have played Angry Birds every chance I got. New levels! New levels!! There are new Angry Bird Levels!!!

When a device only does one thing, you come to appreciate the quality of doing that thing. The Kindle could be a better reader, on a number of fronts. I'd like a light, but not at the expense of that crisp contrast it has. I'd like better text-to-speech, and better page turning. But will either of those make me say "Oh, well, see, the iPad is better, then." Nope, because I know that the iPad is too much in the wrong direction. The Kindle wants to do one thing better than anybody else. The iPad wants to do everything good enough. Sometimes everything is too much.

Monday, August 16, 2010

When Does “You” Become “We”?

I’ve noticed this every time I start a new job.  How long does it take before you stop referring to the company as “you” (as in, “What did you guys mean to do over here…”) and when do you start using “we”?  Twice now my new bosses have caught me and said “Feel free to start using ‘we’ any time, you’re part of the company now too.”

I think the distinction I make is that when I’m speaking of the efforts that came before me, I say “you”.  After all, it’s not like I want to take credit for their work.  I can’t say “Here’s what we meant to accomplish in version 6.1” if it came out before I was around, right?  Once I’ve got new features added to the product I’ll feel more comfortable saying We.

Wednesday, July 28, 2010

Test Driven Learning

So, I’ve been out of work for about a month.  During my time back in the hunt I learned just how big test-driven development, or TDD, has become.  Quite literally every place I interviewed (for Java and Rails jobs alike) asked me what my experience with it was, my philosophy, and on and on.

And I had to answer, in each case, truthfully.  I get the idea of TDD.  I’m a fan.  But never have I been in a place that’s truly adopted it.  Usually the typical legacy excuses all get in the way – nobody wants to write tests for code that already exists, so there’s no good framework from which to build new tests, and it’ll take too much effort to make that happen when it’s easier to just continue writing code like they’ve always done.  Not a good excuse, just a popular one.

Well, I’ve got a new job now and all the above is still true.  However I think I’ve found a bit of a loophole in that logic that’s going to allow me to force feed TDD into the mix.  I’m a new hire.  There’s an existing code base.  I can read the code all day long, and I can think I understand it, but how do I really know?  Should my first real interaction with the code be when I’m making changes that could potentially introduce bugs? Into production?  Not such a great idea.

So instead, as my first project, I integrate JUnit (it’s a Java shop).  Then, I start writing unit tests.  I read an existing function of an existing object, I think I understand what it’s supposed to do, so I write a test for it.  One of two things is going to happen.  Either the test will work, in which case my understanding of the code was correct, or else it’s going to fail, in which case either my understanding of the code was wrong, or else the code itself was wrong.

The end result is that a) I know the code does what I think it does, b) I potentially uncover bugs that would have otherwise been uncovered the hard way, and c) now unit tests exist for the next guy.  Win win win.

I call it “test driven learning”, and I dub it TDL.  Pass it on.

Monday, May 24, 2010

What Do Drivers Do In Computers?

I've been working on a project recently where I get to look at the kinds of questions people ask of Google, when phrased as a question.  For any given subject I get a glimpse of what people want to know, based on how they ask it.

Today's question is a very popular one on the subject of Windows device drivers :

What do drivers do in computers?
To really understand what drivers do in computers, you need to stop for a second and consider what's really going on under the covers.  You have "hardware".  That's the physical stuff - your memory, your CPU, your hard drive, your DVD player, your microphone.  Then you have "software".  That's the programs and files that live as bits (ones and zeroes) in the memory and on the hard drive.  The magic of how computers work could be summed up very briefly as, "The software tells the hardware what to do."

When you load a DVD, there are some physical steps.  You open the tray, usually by pushing a button.  You put the DVD in, and then close the tray either by pushing the button again or giving the tray a little shove.  And then your movie starts playing.  But that's where software comes in.  How exactly did the computer know that you put a new disk in the drive? The DVD player itself has just enough smarts to know when that tray door opens and closes. So when you close it, a signal is sent down the cable that connects player to motherboard. The CPU, which listens to everything going on around it, says "Ok, I just got an XYZ signal from the PDQ cable, what am I supposed to do with that?"

And that's where your "device driver" comes in.  The driver is a tiny little program whose sole purpose in life is to raise its little digital hand and say "Me!  Ooo!  I know how to handle XYZ signals from the PDQ cable!"  Ok, I'm being a little silly, but that's really what it comes down to.  Signals come through that cable, they go over to this little driver program, and the driver speaks a language that the rest of the software (Windows, typically) can understand.  So that XYZ signal is might translate into something like, "A new DVD has been inserted, pop up that dialog box that asks the user what she wants to do with it."

Before Windows, you actually would have had to do this all yourself.  When you bought a new printer or even a mouse, it would come with a disk that contained these drivers.  You'd copy them over to your hard drive, and then have to modify the startup programs to let the computer know these drivers were available.  One of the reasons that Windows took over the PC world was because, in the words of one famous industry analysis, it was just "a big bag of drivers."  That was the whole point -- now you don't have to deal with drivers anymore, they're just there.

Except when...they're not.  New devices come out all the time, it's impossible for Windows to have every driver for every device.  Worse than that, sometimes these driver programs have bugs in them and need to be updated.  So it's important to recognize the role these drivers play, and keep them updated.  Modern versions of Windows have an Update Service that will let you know when it's time to download new drivers.  Or you could look into a service like DriverAgent.com which will do all the work for you, scanning your computer to determine which drivers are out of date and then offering you an easy way to download them all in one visit.