Ten fun projects to improve your hacking skills
These pages are the support information for my “10 fun projects to improve your hacking skills” talk on the RailsWayCon 2010 in Berlin. Here you can find additional information, links and code for all the projects.
News
Update on 4th of June: I added some links – There’s still a lot of info missing – I will try to update as much as possible on this until next week, since I will be on vacation for a few weeks after that.
The badges and how to get them
During the RailsWayCon presentation I promised to come up with “real badges”. These will most likely be standard buttons with a custom design. I have a colleague who’s got a button press, so this will be feasible.
To claim a badge, send the description, photos, links to videos and such things to me. Don’t forget to include your postal address.
A note on open source
Although it will not be mandatory to claim your badges, I would highly recommend to release all software and hardware designs you do to complete one of the ten projects as open source.
Project #1: Tworld Cup
Quest: Build a web application that shows twitter „matches“ alongside the real WoldCup matches.
Skillset
- Alternative Database approaches (NoSQL)
- Simple Data mining
- Twitter API usage
Proposed technology stack
Ruby, Sinatra, Twitter-Gem, CouchDB.
Achievements
- NoSQL-Badge
- Twitter-API-Badge
Infos
- Use the Twitter gem
- Use CouchDB (if you’re on Mac, you might be interested in CouchDBX)
- Use Sinatra as a small web application framework.
- Use Simply Stored as a CouchDB wrapper.
Project #2: Hackday
Quest: Participate in a Hackday, RailsRumble or any other 24-48 hour long coding challenge.
Skillset
- Planning and execution under extreme time constraints
- Knowing your phyiscal boundaries
- Less is more
Proposed technology stack
Caffeine, Sleeping Bag, Paper, Rock, Scissors
Achievements
- Hackday-Badge
- Endurance-Badge
Infos
- Infos on the rails rumble (no RR2010 announced by now, unfortunately)
- The Music Hackday project
Project #3: RetroJS
Quest: Recreate the first video game you ever played in HTML5 and Javascript.
Skillset
- HTML5, Canvas, SVG, Audio element
- Advanced Javascript, Javascript libraries
- Event driven designs
Proposed technology stack
HTML, Javascript, maybe jquery.
Achievements
- DHTML-Badge
- Javscript-Badge
- Event-Driven-Badge
Inspirations
Project #4: Texas Estimate‘em
Quest: Build an application to remotely play planning poker using WebSockets
Skillset
- HTML5, Javascript
- Websockets
- Realtime applications
Proposed technology stack
node.js, HTML, Javascript (jquery)
Achievements
- Realtime-Badge
- Node-Badge
- Agile-Badge
Infos
- node.js
- js.io a convenience library for using websockets and other methods for realtime communication, including a node.js implementation
- jquery
Project #5: SoundTest
Quest: Create an Autotest plugin (or a CI-Server plugin) that sonically signals the quality of your code using PD.
Skillset
- Sound processing. OpenSoundControl
- Graphical stream programming using PureData
- Autotest extensions.
Proposed technology stack
Ruby scripts, OSC library, PureData.
Infos
- PureData (Download the pd-extended version)
- Open Sound Control
- rosc (This is the ruby OSC implementation that worked best for me, there may be others)
As I said, I will try to come up with a basic PureData sketch that will allow you to start with some basic sound capabilities already in place to smooth out the rather steep learning curve of PureData. Stay tuned.
Achievements
- Graphical-Programming-Badge
- Test-Signalling-Badge
- Audio-Badge
Project #6: Dashboard
Quest: Build a large dashboard displaying important metrics (Whatever that means to you) using HTML, SVG and Redis.
Skillset
- Graphics design
- Using a Key value store
- Data aquisition and aggregation with Redis
Proposed technology stack
Sinatra, Redis, Raphael.js
Achievements
- Dashboard-Badge
- Design-Badge
- DataMunger-Badge
Infos
Please note that Raphael is just one possibilty to create such graphics. There are also Libraries that use the canvas element to draw graphs instead of SVG.
Project #7: Back to the Desktop
Quest: Build a desktop application that controls an aspect of one of your rails web applications.
Skillset
- Desktop UI design
- Desktop development
- API design
Proposed technology stack
Rails, MacRuby/hotcocoa or QTRuby, RubyFX etc.
Achievements
- Desktop-Badge
- API-Badge
Project #8: Rube Tweetberg
Quest: Build a Rube Goldberg machine that starts or that‘s started by a tweet or other forms of electronic messaging.
Skillset
- Build stuff.
- Create physical in/output for computer.
Proposed technology stack
threads, duct tape, marbles, inclined planes, USB devices
Achievements
- Handicraft-Badge
- Physical-I/O-Badge
- Patience-Badge
Infos
The hardest part here (apart from building the rube goldberg machine) is to create physical action to start the machine. So the other way round is much simpler (sending a tweet at the end of the machine), since physical input exists in form of a mouse button or the space key of a keyboard. So the “starting the machine with a tweet” definitely will give you higher merits. :)
Project #9: BuildLight
Quest: Build a hardware representation (e.g. stoplight) of your build status.
Skillset
- basic electronics and eventually soldering
- Interfacing Hardware
- Build/CI server extension
Proposed technology stack
#{buildserver}, Arduino, Relais, Stop light, etc.
Achievements
- Signalling-Badge
- Arduino-Badge
- CodeQuality-Badge
Infos
- Arduino On the Arduino web page you will find every information you need to build such a build light. It will take a while to get through all of it, tho.
Please note that I know that this is nothing especially new or innovative, people have done this kind of stuff literally for ages. Still I think it is really important to build it by yourself. We (at mindmatters) even considered at one point to use the project kickoff phase to let the team build it’s build indicator itself. Also I’d like to add that the possibilities of the form of signalling are actually endless.
Project #X: TouchySubject
Please note that at this time, Project#X is more or less a placeholder, I’ve yet to come up with a good specific idea for it.
Quest: Build something with a multitouch/tangible interface
Skillset
- New interface paradigms
- Multi-User interactivity
Proposed technology stack
iPad, iPhone, Android, Reactable, whatever
Achievements
- Multitouch-Badge
- Tangible-UI-Badge
