Now that OSCON is over, I like to make an attempt at distilling my thoughts on the conference. Last year I wrote a lengthy post on my observations; this year it’s going to be short. I was a bit disappointed by this year’s OSCON – not that I didn’t have a good time and learn a bit – but the mood seemed more subdued, there wasn’t the excitement that was felt last year. In fact, many of the attendees I spoke to in the halls felt the difference too and several said that this would be their last OSCON. I can’t pin it down to a single change in the conference – in fact, prior to the conference I had expected it to be even better than last year as I had so many conflicting sessions that I wanted to attend. The absence of Paul Graham at the Tuesday night keynotes was disappointing but Kathy Sierra gave an excellent talk. The quality of speakers was roughly the same as last year and the topics were similar (lots of Perl, Python, Ruby, Ajax, etc). The variety of keynotes was good, though last year I left many of the keynotes feeling inspired and excited, this year I really didn’t feel that. So on the surface, this year’s OSCON should’ve been just as good as last year’s – but in some intangible way it wasn’t – if I didn’t receive agreement on this from others, I would simply chock it up to my imagination or melancholy. So 2006 might be the last year I attend OSCON as well … I guess we’ll see what happens next year.
OSCON: Sessions Day Three
Below are my notes from the third and final day of sessions here at OSCON. The talks I attended were:
- Practical OpenID
- Highly-technical Management of Software Development
After the morning keynotes, I attended Practical OpenID, presented by David Recordon and Brian Ellin. They gave a quick overview of authentication and then discussed how OpenID works:
- You obtain an OpenID from someplace like MyOpenID (linked below).
- You add two lines of HTML to your site header – to prove you own that URL.
- You then go to an OpenID enabled site and enter your URL.
- The site goes to the URL you entered and determines the OpenID server from the information in the page header
- The web app then redirects you to the login page on the OpenID server.
- Once you’ve authenticated yourself with your password, the browser is redirected back to the web app with your credentials.
Then Brian ran the Rails demo and showed how his Rails app was able to authenticate through MyOpenID and redirect back to his Rails app with additional registration information.
David also mentioned that there is a $5,000 bounty for open source apps which integrate OpenID: iwantmyopenid.org.
Next up was Highly-technical Management of Software Development by Alex Martelli of Google. He started out by listing the three legs of the software development stool:
- Right intention => strategic leadership
- Right action => excellent developers
- Right endeavor => effective highly-technical management
He then asked a series of questions regarding these three pillars:
- What is great strategic leadership?
- a strong vision of the business model
- mutual trust, interaction and respect
- courage, integrity, humility, etc
They do their job well and let me to do mine.
- What makes developers excellent?
- great at design, coding, developing, testing, debugging, user interface design, etc.
- mutual trust, interaction and respect
- courage, integrity, humility, etc.
They do their job well and enable me to do mine.\ Aside: How do you get excellent developers? Luck, choice or grow them.
- What is effective highly-technical management?
- start with a manager who’s a technical peer of the developers
- develop mutual trust, interaction and respect with the developers
- the manager deployes themself as a “wildcard� technical
resource – not for the “fun� tasks, for the urgent ones
needing extra resourcesThere are usually three objections to
this:
What about Brooks’ Law?
- “Adding resources to a late project makes it later�
- Yes, but in that case it’s due to the fact that the new developer must get up to speed on the project
- The highly-technical manager should already be up to speed on the project – no extra overhead, so Brooks’ law doesn’t apply
Where does one find the time?
- NOT in working long hours (aim for 40 a week).
- NOT by telecommuting (communication is the most critical task and face-to-face communication is best)
- Time management works (recommended Time Management for System Administrators – schedule 50% of your time each week for emergency tasks or with filler that can easily be post-poned
Shouldn’t a manager always delegate?
- Yes, but delegation doesn’t remove your responsibility – you need to stay up to speed on all of your projects
- You should trust your people to do what’s right, but you have to enable them to do it
- Once they see your technical contributions are useful, they will want you involved – as long as you’ll never steal the credit
At the end of his presentation he mentioned that Joel Spolsky got it right about scheduling – a spreadsheet is all you need (Gantt/Pert charts usually don’t work). Use agile methodologies (agile planning, TDD, refactoring/DRY, 40-hour week, ego-less programming, frequent releases).
Alex’s final message was to control your dependencies or they will control you!
OSCON: Sessions Day Two
Below are my notes from the second day of sessions here at OSCON. The talks I attended were:
- Subversion Best Practices
- haXe: A Cross-platform Web Language
- Building DSLs in Ruby
- Testing Rails Apps
- When Interface Design Attacks!
- Web Heresies: The Seaside Framework
In the morning, I attended Subversion Best Practices by Ben Collins-Sussman and Brian Fitzpatrick. I don’t see the slides up yet at the Subversion site, but they said that the slides would be posted. Several of the best practices they covered were:
Server Best Practices
- svnserve: good for simple setups
- svn+ssh: great if you already depend on sshd
- Apache: more points of integration, repos web browsing, network share, etc.
- Always use a single repository when you have shared users, shared code, etc; except when you have radically different access policies, radically different data types, etc.
- Some nice repos browsing tools are: ViewVC and Trac
Hook scripts:
- pre-commit: don’t try to modify the transaction, just fail it if you need the code to be formatted, for example. Mentioned case-insensitive.py.
- post-commit: run it in the background so it doesn’t hold up the user. Mentioned mailer.py and CIA bot.
Repos Maintenance:
- dump: slow, not for backups
- hotcopy: does a cp -R, can be used for backups and then you can rsync the copy, if needed
Client Best Practices
- commit often
- commit small, discreet chunks (but don’t commit individual files)
- have a consistent log message policy
Misc Best Practices
- Use branches: you can have task branches, feature branches, release branches, etc.
- Merge tracking: must be done by humans currently, but in 1.5 there is real merge tracking.
- Autoprops: take advantage of these, some examples are: svn:mime-type, svn:eol-style, svn:needs-lock
Thankfully Nicolas Cannasse’s talk entitled haXe: A cross-platform web language was moved earlier (prior to this I had a triple-conflict this afternoon). Nico appears to be an amazingly smart fellow and haXe along with the NekoVM (only 220KB!) look like very interesting technologies. He started with a simple ‘Hellow World’ example in haXe which was then generated into JavaScript, Flash and Neko – that is the same source code can be easily re-targeted to different ‘platforms’. At the end he showed off Dinoparc and Hammerfell, two Flash games that were written using haXe. Nico also mentioned that someone is writing a Ruby compiler which targets the NekoVM.
After lunch I attended Neal Ford’s Building DSLs in Ruby. He showed off a simple calendaring DSL. His slides are here and he followed them very closely so I don’t have much commentary. I guess the only way to get comfortable designing and implementing DSLs in Ruby is to actually write them … I’m going to have to pick some domain and just start.
Then Mike Clark was up with Testing Rails Apps – much of this was review for me, but I was looking forward to his tips/tricks to make testing easier. I’m really trying hard to be a “test-first� developer but I get so excited writing new features that I leave the tests for last (of course, this usually means that I end-up refactoring the code I wrote based on the tests, which is a good thing). Since his slides aren’t up yet, I’ll post some of my notes. Mike’s keypoint was that tests are insurance – they ensure that programming your app remains fun, so you’re not scared of making changes because you have a nice test suite which can quickly find out if you’ve broken something else with your change. Some of his tips are below:
# if the product isn't valid, print out the errors
assert product.valid?, product.errors.full_messages
# checking uniqueness
assert_equal ActiveRecord::Errors.default_error_message[:taken],
product.errors.on(:title)
# for integration testing create a user object with method
# names that are in plain English
def regular_user
open_session do |user|
def goes_to_store
get :index
assert_response :success
end
def is_viewing_index
assert_template "index"
end
def buys_book
post :add_to_cart, :item => { :id => 1234 }
end
def checks_out
post :checkout, :payment_info => { ... }
end
end
end
Following the break, I attended When Interface Design Attacks! by Amy Hoy. Her slides should be up on her website soon but some of the key points were that interface involves:
- expectations (baggage)
- interaction (usability)
- behavior (your app’s personality)
Some of the principles she mentioned were:
- users’ brains are affected by literacy; they scan in predictable patterns (reading right to left, top to bottom)
- users adapt to web design (ignoring headers, sidebars, stuff below the fold)
- if it looks like an ad, it’s ignored (or if it’s a small bit of content surrounded by ads, it’s ignored)
- users ‘satisfice’ or give up (they pick the closest thing to what they were looking for)
- 30-40% of users have low literacy (reading blocks of text is difficult for them – the changes you make for these users also pay off for those who don’t have literacy issues)
- There should be twice as many pixels above an object than below it
- Labels should be above their input and labels should have the same name/id as their corresponding input fields
Amy then went through several examples from popular websites.
The last talk of the day was Web Heresies: The Seaside Framework by Avi Bryant – basically it was WebObjects meets ViaWeb (in Smalltalk). The ideas behind Seaside are quite cool, but having never used Smalltalk and hating every IDE I’ve ever tried it just didn’t appeal to me. Technically, the continuation usage is incredible – every time you click a link a continuation is generated (complete call stack) so if you go back you’re old call stack is still there and you can then have the function return a different value taking you some place else within the web app. Avi doesn’t like templates, he wants HTML to be back in the domain of the developer and it should be generated from within the web app – the designer only gets to touch the CSS (see CSS Zen Garden for examples of how this works). To handle form fields, Seaside simply uses callbacks – you place the block of code in a callback right where the text field is generated, this is what the code looks like:
html form:
[html text: 'Name: '.
html textInputWithValue: person name callback: [:val | person name: val].
html break.
html submitButton]
OSCON: Sessions Day One
Below are my notes from the first day of sessions here at OSCON. The talks I attended were:
- Using Ruby on Rails to Build a Massive Multiplayer Game
- Easy AI with Python
- Driving Rails Deep into the Back Office
- Streamlined
- Ruby for Java Programmers
- Coding Wizard, Savvy Trader
In the morning, I attended Michael Buffington’s talk on “Using Ruby on Rails to Build a Massive Multiplayer Game�. He gave a nice overview of the development of unroll discussing isometric art, game design and briefly mentioning Ajax/JavaScript/script.aculo.us. Hopefully his slides will be available online shortly. The code for unroll can be downloaded here. At 11:35am, I was torn between Mike Clark’s Deploying Rails Apps with Capistrano and Raymond Hettinger’s Easy AI with Python. Since I’ve already deployed a couple of Rails apps using Capistrano, I decided to sneak into the Python camp (I ended up sitting right in front of Guido). I found the presentation quite interesting and will be looking into similar libraries for Ruby. Raymond covered the following topics: neural networks for datamining, solving the mastermind game, solving sudoku, a Bayesian classifer and, finally, a generic puzzle solver. Though the slides do not appear to be online yet, the Python code is available here. After lunch I attended Obie Fernandez’s Driving Rails Deep into the Back Office. Obie discussed the PCS project for Barclays Bank in Willmington, DE that Thoughtworks was involved in. He discussed the various ways in which to get new technology into the very conservative back office of companies, such as: Trojan horse (sneaking it in), the race (two parallel development teams using different technologies), the pilot project, the rescue (for a failed/failing project) and finally undercutting (but he cautioned that this de-values the work you’re doing). The three key points of his talk were:
- Optimize and raise your level of abstraction (by creating custom DSLs and capturing the requirements in Ruby)
- Rails really breathes life into extreme programming (they had one week iterations on their project)
- Don’t sweat performance and scaling (they had their custom DSL generate SQL directly instead of Ruby to keep the performance up – so you can’t completely ignore performance issues, but they’re usually not as bad as you think)
Stuart Halloway demoed the Streamlined generator for Ruby on Rails ‘backend’ admin interfaces. Stuart described Streamlined as:
- Product ready backend scaffolding
- Generic enterprise CRUD
- The simplicity of ActiveRecord brought to views and controllers
He’s not going to put the material present online since it is all basically available via the Streamlined blog. Ugo Cei gave a talk entitled Ruby for Java Programmers – which confused many folks who thought it was an introduction to Ruby for those coming from a Java programming background – instead it covered how to call Ruby from Java and how to call Java from Ruby. All of the material is covered in his slides, which are available here. At the end of his talk he demo’ed Rails running inside of JRuby which was pretty neat (though very slow and a bit buggy – sometimes controllers wouldn’t respond). Since I’ve already written a C extension for Ruby, I decided to attend a different kind of talk, Coding Wizard, Savvy Trader by Kartik Subbarao of HP. It was a whirlwind talk covering stocks and options trading and how to get access to financial information as well as how to process it using Perl, GreaseMonkey, etc. When the slides are posted, I’ll link back to them but here are several of the sites which were recommended:
FOSCON II: The Ruby Rodeo
Tonight I was able to attend FOSCON II at FreeGeek (I wish they’d hold FOSCON at the OCC so it wasn’t such a hassle to get there and back – but I will say the volunteers who walked us down there and then drove us back did make it easier). Follow the link below for brief summaries of the presentations and links to them. First up was Lucas Carlson who spoke about distributed processing using Rinda and DRb. Lucas showed how to setup a simple DRb server and run a client against it, then he showed how to run a Rinda ring server. Once he got through the basics he setup a server which parceled out ranges of numbers for us to check for primes within – several folks in the audience were able to connect up and process jobs handed out by his prime finder server. Next up was Topher Cyll who gave a talk entitled “A Ruby/DHTML Turn Based Strategy Game… in 20 Minutes� – unfortunately I don’t see the slides online yet, but here’s a link to his TBS gem with some exposition. Topher used his TBS gem to create a simple turn based strategy game in which you control a cowboy by moving and attacking (there is another ‘evil’ cowboy which you must defeat to win the game). Even though the game is very simplistic it shows the potential of Rails, JSON and DHTML/Ajax. Seeing this I was reminded of the talk I went to this morning at OSCON about unroll (llor.nu) – which I’ll write about later as I’m wiped out and want to finish this FOSCON post before bed. Ryan Davis from seattle.rb spoke about the ruby2c project. The project appears to have many facets (more than my tired brain can grok right now) but two key points I took away from Ryan’s talk were 1) ruby2c is about generating that subset of the Ruby interpreter which needs to be in C, everything else should be written in Ruby so that Ruby can bootstrap itself (like Lisp) and 2) as a result of the work done on ruby2c, it was really easy for the team to create a Ruby Obfuscator (a commercial product they are selling). Geoffrey Grosenbach of the Ruby on Rails podcast spoke next – it was quite eerie watching and listening to him as I pictured him totally differently from hearing his podcasts. Geoffrey discussed several short cuts, scripts, tools and Rake tasks he uses to make his life easier when developing Ruby and Rails. He promised to post the slides on his blog soon. Next Jim Weirich gave an abbreviated version of his OSCON talk, entitled “Test-driven Development Meets Design-by-Contract�. He mentioned the fact that Eiffel has built-in support for design by contract and went through an example of a stack with the contracts for pop and push. This is what makes duck typing work – it’s not just that the method is there but that the contract is the same for those methods. Wrapping up FOSCON II was Amy Hoy with a talk entitled “Community Explosion�. She spoke about the problems that go with massive popularity (not everyone who wants to being able to attend a particular conference) and in particular focused on the problems surrounding newbies. See her earlier write-up on Help Vampires for more detail about the problem. But she was asking for help in setting up materials for newbies so that they could increase their skills and not be such a drain on the community. Ok, I’m wiped, I haven’t been getting much sleep since arriving at OSCON so no more posts until later tomorrow.