Developer Day Boulder a win!
Today was spent enjoying the Developer Day Boulder, held at Techstars' offices. It was totally worth the $75 I laid down for the ticket.
The location was really cool - nicely sized for the crowd, and everyone, I think, had a good view of the screen. The only downside was that the heaters were roaring inside that room, and with all the folks packed in it was sauna-like at times. But it was worth braving the heat for the info.
First off was Chad Fowler, talking about passion in your career, based on his book The Passionate Programmer. One of his big points was that you spend over half your time awake working at your job, so becoming passionate about your job is similar to becoming passionate about your life. He talked about how he lost about 70 pounds by scheduling meals and exercise, and then following that routine, as part of his point that making a plan for any change in your life makes your life easier. He also used it to learn Hindi, partially because at the time he was working in an office where his co-workers were all from India.
He mentioned how he noticed a lot of people tended to see their job as a family, with them as the children, and his point was this meant that people didn't try new things unless 'dad' - ie, their boss - wanted them to. But a business needs to hire on the value they get for their employees - "You are a product - give them return on their value".
He says that a good way to improve/become remarkable with life is by following a loop somewhat like this:
loop do choose_your_market invest execute marketing end loop
What do you want to do with your life? You can follow supply and demand - look for what programs are becoming big, but don't have a lot of developers supporting it, or look for languages that are slowly dying, where again there's not a lot of help for legacy systems. (also see here)
Choose who you want to work with - you want to be the worst musician in the band, because the others will inspire you to work harder and rise to the challenge, rather than drag the others down, and the same works with programming. He also suggested choosing a business domain and learning a new one each year.
Do you want to be a generalist who knows about a lot of things, or a specialist who has dug down into a language or technology and knows it deep-down?
He also mentioned practicing - doing code kata - do practicing aside from work, just like mucisians do, and don't plan out your own projects, get in and work on them.
Finally, marketing is 'a moral imperitive' - don't limit yourself by not letting people know how good you are - but the best way to show that off is to be remarkable, write, teach.
You should enjoy your job!
Next up was Chris Perkins, with his discussion of TurboGears. I didn't get as much out of this presentation as I got out of some of the others, but I did pick up that Turbogears is part of a web framework, built on python, which allows you to link together various db providers, web servers, and the like, as you need. This Sounded interesting, but I'm not really into python just yet... maybe another time I'll take some time and learn about this.
The Cloud - Real World Applications and Pragmatics was next, presented by Rob Sanheim. His point was that the term cloud is kind of like AJAX was back in 2005 - but beyond the hype, it really is important for anything that needs to scale outwards, and even better, can do so automatically. He used the example of 'braincron', a project where people can 'stick' notes to the database and have them sent out as reminders of all sorts when the time comes. The data entry is standard crud, but the important job of sending out the messages could be handled by a job/message queue and a number of consuming objects which read off messages and send them out.
What was really cool was him starting up a braincron server on the cloud from the command line with two commands. First was sumo launch, which he had configured to create a new ubuntu cloud machine for his use. Once that had launched, he used 'chef solo', a ruby system for setting up/configuring servers, to install all the cool stuff he needed on the server, move his code in, and then it worked. It was pretty stunning to see it all working automatically.
Finally, before lunch, we had Jeremy Hinegardner discussing Playing Nicely with Others. The gentleman discussed how there area lot of languages out there - What they have in common is:
- Data Structures
- Communication (either via Network or API)
- Snapshot (saving objects to disc, usually)
With that, he went through a variety of storage systems that can be used in many languages - memcached, for instance, uses network communication with no persistence, and most databases are network communications with lifetime persistence... except sqllite, which is API communication. After that he went over a lot of interesting-sounding systems like Tokyo Products, going into Tokyo Cabinet, which is a database library, and Tokyo Tyrant, which exposes it to a network. Some of the advantages to this is that tyrant has a memcached-like protocol, has a RESTful api, and can compress the data stored.
Next up was REDIS, a network-accessed snapshot persistence data layer. Redis is a key-value database. It is similar to memcached but the dataset is not volatile, and values can be strings, exactly like in memcached, but also lists and sets with atomic operations to push/pop elements. It's also good at replication between servers, in-server set operations, and sorting.
Next up was beanstalkd, a queue database store with no persistance (although some is planned) which has network access - perfect for job-queues. When things are 'taken' by consumers, they remain marked as taken until either the consumer notes that they are done with it (and it is deleted) or a time limit expires (and it is available for other consumers).
Finally he discussed MONGO, a key/value data store with dynamic queries and index support which can reach deep inside of child objects of the data.
A final link from this was Internet Mind Map, which lists a ton of information about database software.
Then we had lunch. Mmmm... Pizza. It was warm, as I mentioned, so we actually ate outside of the offices, in the atrium area.
After lunch we had a series of lightning talks.
- A discussion of Ruby and Hiphop stars of the 90's.
- A discussion of chaiscript, dynamic scripting inside of C++, better for that than Lua due to lower complexity.
- One gentleman discussed how Philanthropy - giving his talents away - both helped others and increased his own abilities to make websites.
- Another person discussed the 'One true way of CSS:
- Use one file for CSS, with an additional sheet that resets all styles (use Eric Myers'), an additional sheet to compensate for IE6 quirks (if you *must*), and then additional sheets for other presentations, like 'mobile.css' and 'print.css'.
- Structure that one file containing first the application-wide tag defaults - no classes here. Then the styles by sections, header, then content, then footer.
- Use comments to call out blocks of related styles
- Add the page controller and action names to the body element, so you can target page specific css easier.
- Finally, don't put style in elements, no tables for non-tabular data.
- Finally, one of the people running the event, showed how a simple RMDB just can't handle how insanely complicated the comic book publishing business is, with reprints, alternate covers, series switching publishers, and so forth.
David Eisinger discussed Email Interfaces for your Ruby Apps, although it was more about Email Interfaces for Web Apps. His point that email makes a great interface because everyone has it, everyone understands it, and everyone checks it often. He listed the types of interfacing:
- Links in Emails
- Simple links in an email to do something, such as netflix letting you signal how long it took a movie to arrive, or craigslist making sure your email address is correct for an ad you're posting.
- Reply to Emails
- This is when you reply to an email to do something, such as with yahoo groups or google groups letting you reply to an email to signal that an email is accepted.
- Email Command Line
- When you create a new email and send it to a service, then you're using email to issue commands, such as with the Remember the Milk app and 3 mind me
- Forwarding an email to a service lets them skim the mail for data, such as sending a flight confirmation to TripIt, or Track My Shipments.
- User-Generated Content
- Such as sending blog posts to Posterous via email, or photographs to Flickr or ratings to Rate It All. The content of the post is presented on the web directly.
He pointed out that the elements of the interface is the 'To Address' - where the data goes in, the Subject, which can be a command or the subject of the content, and of course the body.
A lot of possible methods for doing this were mentioned - POP/IMAP, Lamson, Postfix filters, TMail::MailDir, Fetcher, Cron, Lockfile, and something named upstart - my notes got a little rough here. Also mentioned were RESTful email controllers getting messages, and something called Astrotrain, complete with silly picture of the 'astrotrain' transformer.
Up next was Derek Chen-Becker, whose blog just crashed both firefox and google, so I don't suggest going there. His talk was Stepping Up: A Brief Intro to Scala, which went into some detail about how scala was really cool in relation to Java, which it's related to. Scala compiles down to Java bytecodes, so it uses the same Java framework, without requiring all of the extra syntax that Java needs. I didn't quite get a good feeling for why this was better than Groovy, which is a ruby-like scripting language which is also based on the Java VM.
Local Bill Dudney then stepped up to talk about Core Animation on the iPhone and Mac. I've been meaning to get into iPhone programming, which is why I picked up a Mac Mini a while ago, but hadn't looked into Core Animation. He showed off how core animation does a nice job of combining simple animations, going from step a to step b and extrapolating the steps inbetween for you, which is really very cool.
And finally we heard from Bruce Eckel on The Archaeology of Language Features in C++, Java and Python. Basically, he dug into the history of Python, C++, and Java (with a little ruby), looking at how their program structure had been imposed by historical forces, such as C++'s need to be backwards compatible with C, and Java's need to be backwards compatible with itself. It was interesting to see him talk about how C++ shaped his life, then Java, and how he keeps returning to Python now. I also got a copy of his book 'First Steps in Flex', which was cool.
And then I was tired, and went freaking home.