Someone at work wasn’t paying attention and gave me a password to the new Centro Tech blog. Check out our first post, it’s the follow up to the LaunchPad Challenge I wrote about previously.
Someone at work wasn’t paying attention and gave me a password to the new Centro Tech blog. Check out our first post, it’s the follow up to the LaunchPad Challenge I wrote about previously.
I just spent far far to long trying to get an ejabberd service to authenticate with an external Ruby script. In the hopes of saving someone else the trouble I’ve thrown together this gist.
I know, it’s been a really long time since I’ve actually written anything on this blog. About a year ago I left Leapfrog Online and moved to Centro. I’m still doing similar stuff, mostly Ruby and a lot of Javascript, but recently I’ve found myself helping out with some recruiting efforts.
This Friday, November 19th, Centro is sponsoring the ITA Fall 2010 Challenge. This is the first year the Illinois Technology Association is putting on the contest and I think it’s a great idea. The ITA’s goal is to show local college students that there are plenty of tech jobs in the area, they don’t have to move to the coasts just to nerd it up professionally. Centro is a key sponsor, and as always, we’re looking to make a splash. We’ve decided to pass out some slightly unusual conference swag.
The TI LaunchPad is an extremely affordable entry into hardware development at only $4.30 a piece. The LaunchPad is very similar to the Arduino I’ve blogged about before. Unlike most Arduinos the MSP430 dev board doesn’t come completely assembled leaving the customer to solder on the pin headers. It’s a great way to save cost and make the units more customizable, but it’s definitely a barrier to entry for those new to hardware. Since we don’t know the students are that are getting these boards we decided we needed to do some assembly and, because electronics bought in bulk are so cheap we threw in some LEDs, resistors, wires and a breadboard.
What kind of fun would it be to just hand these students a box of parts and a random microcontroller development board? Sure they could find a diagram explaining how to wire up an LED with a breadboard, but then what? They could jump into some of the cool projects people have been sharing like this LED POV message writer, but in the spirit of the ITA Fall Challenge we wanted to give these kids both a starting point and a bit of an incentive. We’ve preprogrammed every board with our own little contest and have great prizes for the winners.
I can’t divulge much about our contest yet, we haven’t even passed out the boards. But as the contest progresses expect updates here, and eventually I’ll release all the code after the prizes are awarded. This is all for fun, and will hopefully be a nice, simple hardware introduction for people who might not have had the opportunity.
Seeing as this all came about in an effort to help us recruit more developers it would be foolish of me to not include a link to the Centro Job Board. If you have any questions or find yourself interested in one of the positions listed please email me: andrew [dot] bloom [at] centro [dot] net. I also owe a huge thank you to my teammates who helped me solder and pack all 100 of these boxes, especially Amy for picking up the beer!
CRUD in the JS shell http://github.com/mdirolf/shell_presentation Schema Design 4MB object limit atomicity at the document level ... the rest of the talk isnt visible due to his slides/projectorthe $ operator sounds cool, I need to research this compare & swap is the safer and more appropriate pattern than just modifying a single value Sharding should be considered when designing the schema Capped Collection - a rrd(?) style. fixed size, will delete oldest records when the size limit is reached automatically stores insertion time and allows for queries based on that value From Mysql to MongoDB mongo loves system resources run on its own machine to keep from paging takes significantly more disk space than mysql disk speed is your bottleneck mongo is faster than hibernate in java (woohoo?) reduce disk usage by using shorter key names (veryLongAttributeName => vlan) Mongomapper custom types => DowncasedString (to_mongo/from_mongo) gridfs + jnunemaker's joint plugin to store files identity map plugin may help reduce queries but requires a rethink of how to use mongomapper prophesying activemodel (when rails 3 is complete) validations, callbacks, dirty tracking, serialization, etc. blank document mongomapper w/o all the plugins (ie: more customization) mongo::query similar to ARel Class in Michigan: ideafoundry.info/mongodb Event Logging map/reduce counting in real time! (?) use ruby to generate JS map/reduce code mongo is really fast for map/reduce Administration log rotation commands built in
I’m at SCNA today, and so far it’s pretty great. I know this post is short but I plan on eventually cleaning up my notes and posting them here later today or tomorrow. I promise!
*edit* As promised, here are my notes (maybe, just maybe I’ll write up a summary… later).
George Leonard - Mastery (Book)
Ken Auer - Swimming Upstream, ...
Does a fish know he's wet?
Google: "Sutherland Sketchpad"
"intrapreneurs"
Home schoolers vs Classroom schoolers
apprenticeships
Staying home everyday leaves you less challenged
Leaving home everyday leaves your family less challenged
rolemodelstudios.com <= family project/business
integrated life - large home for family, extended family, and work
Pragmatic Programmer
Learn to Program (Yellow Belt)
Agile Wed Dev w/Rails (Black Belt)
Michael Feathers - Self Education and the Crafstman
Big O / Little O / Theta Notation
Covariance & Contra-variance - substitutability
Types - not just language constructs
State Machines - the forgotten diagram
Turing Machines
The Halting Problem - limits on verifiability (?)
Worse is Better - simplified design is easier to debug (but has less features)
Redundancy is not Strength - reinforce a bridge
the same specs to different teams produces a correlation in the bugs from each team
"things only fall apart when we touch the code"
Security on Sand - On Trusting Trust (paper)
Location Transparency is a Myth
Books - "Cool stuff to know"
SICP - Structure and Interpretation of Computer Programs (http://mitpress.mit.edu)
Syntropy - Designing Object Systems - Steve Cook & John Daniels
Graph Theory - Graphs: Theory and Algorithms
Compilers, Principles, Techniques and Tools
Discrete Mathematics with Combinatorics - James A. Anderson
Theory of Computation - Michael Sipser
Christopher Avery - Demonstrating Responsibility: The Mindset of -an Agile Leader- Crafstmanship
Involved w/Agile ~ 2004 - Accidental Expert
How You Respond to a Problem
Who did this? Who's responsible?
That doesn't happen when things go well
How many time a day do things go wrong (people not attending meetings, or replying to emails)
Problem => Denial => Lay Blame => Justify => Shame => Obligation => Responsibility
Lay Blame - pointing fingers (humans do it and are good at it, coping mechanism)
"You can get stuck there, or you can get off of it" - C. Avery
Cause / Effect scenario
Obligation - transient mindset, have to do it, don't want to, but we have no choice
Responsibility only happens when you refuse to accept obligation
Quit (transient mental state) can come between shame / obligation
you've checked out because you refuse to accept responsibility
Highly engaged customers predict revenue/stock/etc. increases
only thru highly engaged employees is this possible
Intention - the winning key
Awareness - the change key
Confront - the truth key
Jim Weirich - Grand Unified Theory of Software Design
Way more than 4 forces in the software universe
SOLID, Law of Demeter, DRY, Small Methods, Design by Contract, etc.
Sheldon Jordan - RCA Missile Test Project - mentor to J. Weirich
Composite Structured Design - Book
Coupling & Cohesion
Coupling - (less) None, Data, Stamp, Control, External, Common, Content (more)
Connascence - 2 pieces of software share connascence when a change in one requires a corresponding change in the other
Connascence of Name
Connascence of Position
Generally good to move from CoP to CoN (array vs hash)
Connascence of Meaning (ex. 1 = true, 2 = false)
use a constant to convert to CoN
Connascence of Algorithm
use DRY to convert to CoN
Connascence of Timing (Race Condition) - Threading
mutex's can protect against this problem
Connascence of Execution - ordering of steps in an algorithm are important
Connascence of Identity - duplicate objects (2 sql queries for the same object, AR::Base problem, DataMapper solves this with an identity map)
Connascence of Value
Ward Cunningham - What if Bacteria Designed Computers?
Dorkbot
Invented his own wire protocol called Bynase
Arduinos are the future
Uses random numbers and electronic "noise" to communicate between processors
Dave Hoover / Paul Pagel - Apprenticing to Mastery
Apprenticeship is the only way to achieve mastery
Picaso wasnt a child genius, he apprenticed
Open source projects are a great way to learn
Great programming books generally dont have the name of a language in their title
A master must also be a good teacher
intuition is great, but without articulation it's not helpful
Bobby Norton - Test Driven Learning
Start small, dont take on to much at once
apprenticeship patterns, walk the long road
Novice, Advanced Beginner, Competent, Proficient, Expert
Experts adapt, create and advance the practice
work from intuition, not reason
don't need rules
github.com/bobbyno/shubox
Bob Martin - Craftsmanship Under Pressure
Holy shit, thermodynamics and crazy astrophysics
The universe appears to defy the law of conservation of energy
Estimation -> Manage Expectations
QA shouldn't find any bugs
close to 100% code coverage (I don't agree)
dogmatic about TDD
Changing code makes it changeable
each refactoring strips out hard to change areas with better versions
boy scout rule - leave it cleaner than you found it
time between writing code and tests should be very very small (or negative: TDD)
one week of overtime is ok, but 2 months is not
you will do harm to your code, become complacent and stop caring
professionals know how to have an uncomfortable discussion (ex: slipping release date or change in scope)
"when i feel pressure i slow down"
professionals have a work ethic
not coding for their own joy (that should be a secret)
will work for our employer to deliver value
40hrs are the property of your employer (or customer)
employer is not responsible for your education (books, conferences, etc.) if they do it's very nice
"The core of this craftsmanship movement is developers taking responsibility for their own career"
You should be able to list ALL the design patters, it's your profession!
You should know many languages, only knowing 1 is a problem
There is a lot of information that has been accumulated over the decades that you should know, it's your profession!
Read the works of David Parnis (sp?) and his tables to describe how systems work
Why can't anyone in this room write quick sort out of their head
Continuous Learning - our profession has a tendency for the individuals to never stop learning
we live to learn, and love to learn (at least we should)
Jugglers and Musicians are over represented in SE's
both take time to learn and master, but we love to learn
Step outside your comfort zone
language and methods included!
broaden your zone
More notes to come at Octavity from a fellow attendee.
Check out these tubes, pretty bad ass, don’t you think? With the help of Daniel Naito’s amazing project and the TI TLC5628CN 8-bit serial DAC I’ve managed to get my Arduino controlling an IN-13 tube. I’ve got simple 3 wire serial communication working with the TLC5628 (thanks Ogi Lumen), and but I’m only utilizing one DAC right now. The nixie tubes on the left are facing up and therefore are hard to see, but they are cycling 0-9-0.
As my previous posts show, I’ve been working with an Arduino and some Nixie Tubes. Don’t get me wrong, they’re pretty cool, but they don’t come close to IN-13 Bar Graphs. Yeah, neon tube bar graphs that glow orange, don’t even try to deny the badass nature of these.
Check out the circuit I put together to test these tubes out. No Arduino required, just a power supply, a couple of resistors, some pots and a capacitor. I’d love to take credit for designing this circuit, but I borrowed it from this super helpful project: Multi-band VU Meter. Specifically, the circuit I built can be found here.

Still want more? Check out this video I took with the iSight in my Macbook.
I gave a brief Lightning Talk today at work. It went well and the audience seemed genuinely interested and engaged. I’ve posted a 30 second youtube video of the device running on my desk and showing off a few of the commands over the serial port.
A few people have mentioned they have no idea what I’m talking about or what’s going on in those awful videos I’ve put on youtube. To help clear things up here are a couple of photos.

With the flash it is hard to see the lit digit, but it is a 5 on the right. Arduino up top and Ogi Lumen power supply on the right.

Same as above but without a flash and the five on the left.

More of the same but with 00 on the tubes.

You get the point, it displays digits, for example: 99.
Hopefully the pictures make it clear how simple the configuration is. No extra components are required, the Arduino wires directly to the Nixie Tube Driver and the power supply only has two wires. The code is also pretty simple at about 115 lines and heavily commented. I forgot how fun playing with electronics can be when it isn’t for a grade.
I might have mentioned previously that I recently bought an Arduino Duemilanove. It’s pretty damn cool and I’m amazed at the amount of power you can get for such small price (and form factor).
My first month or so was spent hooking it up to LED’s and the Ethernet Shield. I wasted a bunch of time on a poorly thought out messaging system. I had LED’s hooked up to PWM outputs and was controlling their brightness independently from my computer. It was a great learning experience and the perfect way to remind me how to write C. Luckily for us all, that code has been scrapped (it can probably be found at the first revision on Github).
This week I got a package from Canada. “What comes from Canada?” you might ask. Not much, but there is a place that loves to ship NOS Russian Nixie tubes. Ogi Lumen has been a pleasure to deal with, and provides a top quality kit. Assembling the Nixie Driver kit took about an hour, and getting it up and running was smooth as can be. Ogi Lumen provides a concise and well written library with only a handful of functions for the developer to learn.
Tomorrow I’m giving a lightning talk at work about all this. I’ve spent the better part of the evening putting together some code to help with a demo. I’ve cleaned up the messaging protocol a bit (it still needs major refactoring, but I’ve opted to keep it simple). Now I have a few different kinds of messages, as well as minor error handling. I’ve set up a simple way to clear the Nixie tubes, a command to left justify some digits (and continuously shift them to the right) as well as right justify the display (with no shifting). But my ace in the hole is a demo command I’ve put together that will do some cool cycling of content across the tubes.
Ok, so it’s still not all that exciting, eventually I’ll buy more than two tubes. First though, I have plans to conquer this beast: Neon Bar Graph. I’ve placed an order from Digi-Key for a few discrete components to get myself started, eventually building a shift register/DAC driver similar to the Ogi Lumen Nixie Tube Driver kits (probably without the cool boards though).
Oh news groups, we really have a love hate relationship.
Why do many people chose never to send a final correspondence to let the others in the discussion know how things turned out? It’s really frustrating to try to offer help and have no idea if you were useful.
Also, why isn’t Google Groups more like a forum and less like a minor update to an aging system?