HOWTO: Learn Stuff Efficiently

I enjoy learning new skills and technologies on my own, and it occurs to me that there isn’t a lot written on the subject.

I’ve been developing this approach for about 20 years and here’s a brief summary of what I find works for me.  It may not work for you, and that’s OK.  But give this a try, refine your own technique, and share what works!

  1. Choose a topic/technology outside your comfort zone.  This is self-evident; you can’t expect to learn anything new if you’re working in a sandbox you’ve already mastered.
  2. Make time for yourself.  Lots of it.  You can’t expect to dig into a topic deeply if you’re distracted by email, phones, tax deadlines, bills, dinner, family, friends, and bathing.  Seriously, these things have to take a backseat, you’ll come across as a recluse, and people will hate you.  Accept it.
  3. Set a goal.  It might be as simple as a “Hello World” or something more complex.  However, it should be something you think you can attain and which will make you happy to see completed.  So, choose something reasonable and within reach.
  4. Code until you get stuck.  Keep pushing small, obtainable goals until you get to a point where you are baffled or sleepy.  This is the time to take a nap.
  5. Before you take a nap, read something.  Your brain runs threads in the background while you’re sleeping.  Don’t waste that CPU power thinking about Angelina Jolie.  Instead, search for guidance on the thing that’s got you stuck (either with a colleague or online), or read (or re-read) a chapter in a coding book that’s relevant.
  6. Sleep until you wake up.  This might be 3 hours, 6 hours or 8 hours; your brain will sleep for as long as it needs to process the information you’re trying to absorb.  NOTE: At this point the thought of having a regular sleep schedule should make you giggle.  You should sleep and code when you feel like it, which likely will not be on any particular schedule.
  7. As you fall asleep, meditate on the questions you’re trying to answer.  The intense concentration available to you as you are nearing sleep will enable you to define and isolate the problems at hand, and this will provide a kind of “normalized grist” for your brain as it prepares to do your heavy lifting for you.
  8. When you wake up, you will have some answers.  You may not have all the answers yet, but you should have some fresh insights that will enable you to blast past your last impasse (wow).  This should give you some encouragement and allow you to repeat the cycle (3-8) again.

I’m presently employing this technique to learn Objective C and Cocoa Touch for the iPhone, and it’s working great.  This is the sort of thing that society will not allow you to do continuously (unless you’ve evolved a significant number of support mechanisms) but you should be able to get away with it at least some of the time.  It delivers great results for me.

And for those of you to whom I owe emails, bear with me; I will get back to you shortly.

SocialDevCamp East: Awesome People, Awesome Day

I just want to say thank you to everyone that showed up to make SocialDevCamp yesterday such a huge success. I say it was a success not as an organizer, but as a participant. I learned a ton of practical information yesterday and made contact with dozens of talented people, most of whom are either nearby or a short train ride away.

I can rant and rave about how great yesterday was, but here’s what others are saying:

  • “Dude – we were surrounded by talented folks – I think I talked myself out – so many interesting things happening.” — Bear
  • “I think its official #socialdevcamp is the best event Baltimore has seen in a LONG time.” — Greg Cangialosi
  • “Thanks for setting up #socialdevcamp yesterday. I thought the discussion was quite insightful & well-organized.” — kyeung808
  • “@chrisbrogan Morning chris, you missed an awesome SocialDevCamp yesterday” — Jimmy Gardner
  • “Good day at socialdevcamp (always a good day when you make friends with an MIT post doc)… also, I’m Bill Pardy.” — James Lombardi
  • “Socialdevcamp was perfect. Met so many great people. Totally worth the sore vocal chords.” — Amy Hoy
  • “What a day! socialdevcamp was seriously a lot of fun, the after party even a little more so.” — vees
  • “After working with the highly esteemed @cyberhorse for 5 years, I met him for the first time today at #socialdevcamp” — Keith Casey

Honestly it all makes me a little emotional.  This is our community.  These people are the future of innovation, and we’re committed to making a go of it here along the silicon rails of the Amtrak east-coast corridor. I am so incredibly proud to be associated with this community, and the notion that we all have a stake in making the east coast a better place to start and run businesses.  More on that later.

I also want to especially thank all of the people who helped make the event possible on the unimaginably short time schedule of 25 days notice: our sponsors (listed here) as well as Melanie Kelleher of Kelleher Consulting for her invaluable assistance with the venue, the catering and at the registration table, Jen Gunner with the Greater Baltimore Technology Council for their support and encouragement, my wife Jennifer Troy for her help with a thousand details and the afterparty, and of course the event co-chairs Ann Bernard and Keith Casey who enlisted the support of their networks and helped shape and promote the event.  People wondered how we could do this so quickly, and it was because everybody involved is a superstar in one way or another; you couldn’t ask for a better event team!

We also need to make special mention of one person who was indispensable in making the event the success that it was: Jim Kucher at the University of Baltimore deserves huge kudos for securing the terrific space at the Thumel Business Center at a deeply discounted price.  Without the University’s support yesterday, as we all experienced it, would not have been possible.  Lots of folks mentioned that the space was really exemplary as a Barcamp-compatible space:  a large common area for mixing and meals, a great auditorium with theater style seating, and four, easy-to-find and easy-to-use breakout rooms.  We really could not have asked for a better space.

Also thanks to Brewer’s Art for putting up with the flash mob that colonized their Saturday happy hour.  We warned them that we were coming, but they might not have expected the sheer numbers and zeal that the SocialDevCamp crowd exhibited yesterday!

One thing is certain:  yesterday was a big success and it affirmed our belief that there is a need for exactly this kind of event and community in our region.  We will be planning a second event, SocialDevCamp East Fall 2008, for September.  Date TBD soon!

I will be writing more about my reflections on yesterday in the coming days.  Right now, I need to finish a presentation for the O’Reilly Where 2.0 conference on the openlocation.org initiative I am working on, and get on a plane to San Francisco at 6:00.

My Talk at eComm 2008: Imagining Roomba Asterisk and More

I spoke at eComm 2008, held this year in March 2008 at the Computer History Museum in Sunnyvale California.  I’ve been involved in the VoIP and open source telephony world for the last several years as a contributor to Asterisk, hacker on OpenSER and several other projects small and large involving tearing down the 100 year old telephony infrastructure and replacing it with something better different.

If you’re a part of the Asterisk community, you know that I have a certain amount of notoriety as The Roomba Guy.  In a visionary fit of silliness during the Christmas holiday week in 2005, I decided it would be interesting to play with the Roomba API and see if I could hook it up to a Linksys WRT54G wireless router.

  • The Roomba uses an RS-232 CMOS 3.3V interface
  • The WRT54G has an RS-232 CMOS 3.3V interface
  • The Roomba supplies a 14V DC unregulated power output
  • The WRT54G can run off about 12V DC and has voltage regulators

You can see that based on this, the rest is inevitable.  The Roomba has a 7-pin mini-din connector that provides the power and the RS-232 connection, so I made up a cable that goes from that connector to the 10-pin serial header interface on the WRT54G.

I got the serial port working pretty quickly and could send basic hex commands like start and stop to the Roomba.  My friend made up some mounting “rails” to hold the WRT onto the top of the Roomba, and now the thing was autonomous and could be controlled via an SSH session established via WiFi.  The WRT runs the White Russian OpenWRT Linux distribution.

The prospect of controlling the Roomba using SSH or a web interface wasn’t too compelling.  I happened to be aware that some folks had success getting Asterisk (the open source telephony PBX) working on the WRT.  So, I thought, what if we could put Asterisk onto the WRT and control the Roomba with that?

So, I did.  Asterisk was easy to install on the WRT and in pretty short order I had cooked up an Asterisk dialplan that tied the telephone keypad to actions on the Roomba.  2 is forward, 5 is back, 6 turns right, 4 turns left, 5 stops, etc.

I was demonstrating this at Astricon 2006, a few months later, and my friend John Todd suggested that we contact Allison Smith, a voice artist of some renown and the “voice of Asterisk” — she supplied all the default english prompts for Asterisk.

She was incredibly accomodating and obliged graciously.  She recorded about 20 prompts, including “forward”, “backwards”, “right”, “left”.  We also allowed for control of the vacuum and brushes in the robot.  So, you can press 1 to “start sucking” and press 3 to “stop sucking”.  Did I mention that Allison is an incredibly good sport?

So, the final form took shape.  A talking, SIP-enabled, WIFI, autonomous, cleaning, sucking, four-port ethernet switch able to run a small business phone system and clean it at the same time.  It’s really quite baroque in its overall frilly uselessness, yet still compelling in a circus side-show sort of way.

We’ve experimented with adding a camera to it, but have found that it tends to create too much power draw.  I’ve looked at using other routers that can run embedded Linux, but there always seems to be some reason why it doesn’t work.  I really don’t have the time to spend on this, and that’s probably a good thing.

But, the overall lesson is an important one:  Imagination is more important than knowledge.  Einstein said it , but it should be repeated.  As techies, we spend too much time thinking about how to solve a problem, rather than playfully considering new ways of framing problems.  Imagination is truly the plutonium of technology, and we tend to lock it up and not use it that often.  Knowledge is certainly important, but knowledge without imagination is everything that’s wrong with tech today.  Certainly the telecomm industry needs more imagination.

So, Lee Dryburgh, who did an incredible job of organizing eComm 2008 (it’s the successor to the O’Reilly produced eTel conference) posted my presentation from eComm online last week, and I wanted to share it with you.

If you’re interested in more of the Roomba Asterisk specifics, ping me and I’ll blog in more depth about it.

 

SocialDevCamp East: Your To Do List

Hey folks,

I can’t tell you how excited we are about SocialDevCamp East on Saturday. We’ve heard from so many of you saying that this is exactly the event you wanted, and we have high hopes that we’ll have an engaging event that we’ll want to repeat in the fall.

We’ve been busy doing all kinds of things in preparation. As this is a user-powered un-conference, here’s your to-do list:

1) Visit the wiki page at http://barcamp.pbwiki.com/SocialDevCampEast

2) Be sure you’re signed up as an attendee (or volunteer or sponsor) on the Wiki page (password is c4mp); if you do not list yourself there, there *will not* be enough food for everyone.

2) Know where you’re going. Study the map and photos on the Wiki page.

3) Bug your friends. If there are people who *should* be at this event that are not listed, please reach out to them. We want smart people with interesting perspectives. Be sure they are there.

4) If you’re not coming, please use Facebook to indicate that now; we need as accurate a picture as possible so we have room for everyone who wants to be there.

5) *Think* about the sessions you want to propose and/or lead. Remember, this is an unconference. Everybody should be prepared to lead and share. Lurking is strongly discouraged.

6) Be prepared to make a monetary contribution of at least $10-$20 (if you are not already a sponsor). While a contribution is not mandatory, we are over $1000 in the red right now. If everyone pitches in $10-$20, we can cover all of our costs and have some funds to cover some more food and beer at the afterparty.

7) Bring your brain. Seriously, don’t leave home without it. Everyone is expected to contribute.

SDCE will be featured on WYPR 88.1FM Baltimore this afternoon at 5:30pm, on the Digital Café with Mario Armstrong. We’ll have some other press at the event as well. This is a great opportunity to showcase all the activity in our region! It’s not all about the valley!

We are at over 160 people now and this should allow us to have some great conversations.

Looking forward to seeing ALL of you on Saturday!

Sincerely,

Dave, Ann, Keith, and Jennifer