I’d like to say big thanks to the organisers of the conference (especially CJ @cjkihlbom) – everything went really smooth, even though there’s been 150 people attending this year compared to 90 last year.
Some points that I’d really like to highlight are:
- a lot of time to meet people and discuss: 30 minutes talks followed by 30 minutes breaks, no q&a – those who had questions had an opportunity to talk to the speakers during the breaks
- venue was great (of course, the boat 🙂 – there was enough space for everyone to move around, but at the same time it was compact enough not to get lost also everyone had an opportunity to have lunch and dinner together
- “job board” a huge white board where anyone can post information about open positions in their companies – it got filled withing firts few hours – job market is really hot
- lightning talks that any participant can give – 5 minute talks in the end of the day – it was really great
- real coffee 🙂 espresso, latte, cappuccino, americano – you name it – professional baristas were at your service
- 5K Nordic Ruby run organised on the second day’s morning
Day 0
The conference started with a party on Göthenborg ship. It was a great way to get to know the speakers and participants in an informal setting.
Day 1
“GitHub Flavored Ruby” was by Tom Preston-Werner (@mojombo) from GitHub.
Tom had a hard task of waking up the auidence after yesterday’s pre-conference party, and he succeeded in this task. Tom explained what is a README driven development that he and some of his colleagues in GitHub are using – a golden mean between waterfall and cowboy coding.
Start a new project with writing a README file, where basic design principles and conventions will be described, and don’t forget to update it as the architecture changes.
Another interesting topic was TomDoc – code level documentation – a better alternative than RDoc/Yard, designed for hackers/humans, not for machines to read.
Modularisation was yet another subject – Tom explained how at GitHub they try to split the code into independent modules to reduce complexity of the system.
Grit is a good example of that – a module for Ruby-Git interaction was written even before the rails code for GitHub.
Other examples of modles created in GitHub (and open-sourced) are: resque, jekyll, proxymachine and chimney, albino, gollum, bart, camo, failbot, giraffe, nodeload (in node.js), ernie (in erlang), stratocaster (for event feed), ghromosome (which is apparently not used anymore, but worth mentioning just because of the fun name).
And naturally for versioning of the components Tom proposes to use Semantic versioning.
A few notes from the after-talk discussion with Tom and others:
– Github uses git powered deploys – instead of copying the new release from git and then changing symlink to current release, they use single directory and do direct git updates – rollbacks are also easy to do using git fucntionality
– it’s possible to deploy Github from Campfire by giving deploy command to a robot
– to avoid downtime – build_cache is executed on a local machine before deploy and pushed to the servers during deploy
– GitHub is still running on Rails 2.3, Tom’s estimate for migration to Rails 3 is ~2 weeks of “stop commits and migrate” (the estimate seems to be pretty consistent – I’ve been talking to several people about it)
– experience from a fairly large web-app developers: MySQL to Postgres migration took 3 weeks
“API Design Matters” was by Anthony Eden (@aeden) from DNSimple
Central points from Anthony’s presentation:
– APIs outlive their implementation (“Think about the children” when designing APIs 🙂
– Design APIs so that they are easy to extend
– 5 Cs: consistent, clear, convenient, concise and complete
– The best API is no API
– If you’re a software developer – you are and API designer
– And use semantic versioning that Tom was talking about
Reading recommendations:
– Jasmine Blanchette “The little manual of API design”
– Joshua Bloch “How to design a good API and why it matters”
“Bridging the gap – Using JavaScript in Rails to write DRY rich client applications” by Thorben Schröder (@walski), KOPFMaschine
An interesting talk about using Java Script from Ruby code and the other way around.
Implementing validations on the client side reduces amount of round-trips and speeds up user interaction, but since smart people can hack JavaScript and bypass client-side validations, also server side validations are necessary. To avoid writing validations twice use The Ruby Racer, CommonJS and CommonJS models to DRY your code and write validations only once and use them from both Ruby and JS code. Pretty smart, huh?
“Limited Red Society” by Joseph Wilk (@josephwilk)
Slides: http://www.slideshare.net/josephwilk/the-limited-red-society-8367200
Kanban is limiting number of tasks the team has in progress at any given moment. Joseph described in his talk how to apply this methodology to testing.
It’s important to have metrics for your testing and it’s important to visualize them. How much time do you spend in “red” when your tests are failing, which modules in your code are changed most often, are they the same that usually fail tests, are there any oscillating test cases that pass then fail then pass again?
One thing to be noted – some metrics have limited lifespan – measure what you’re interested in and then throw them away.
Reading recommendations:
“Refactoring in Ruby”
“Refactoring. Ruby Edition” Kent Beck
“Must It Always Be About Sex?” by Joshua Wehner (@jaw6)
Links from the talk: http://pinboard.in/u:jaw6/t:nr2011/
Minorities and women are under-represented in our community. Black man is more likely to be hit by lightning than become a computer science professor.
75% of women engineers leave profession because they are not socially accepted in the working culture. In the beginning of computer era programming was mostly a job for women.
Do you think that your application is mobile friendly if you have iPhone optimised version? Think again – the most popular phone with a web browser is Nokia 1100 – more than 250 million phones sold to date,
and that kind of devices are the only way how most people in Africa or India access the Internet.
What do we need to do to change current situation?
Just today I came across an article on the same subject: Two 11-year-old entrepreneurs learned the hard way what it’s like to be a minority in tech during Startup Weekend
“Infinite data – finite solutions” by Randall Thomas (@daksis) from Engine Yard
Quick dive into Bayesian statistics. That is the technology that helps to filter out spam from your inbox: “Keeps spam at Bayes” 🙂
Bayes + DAG (Directed Acyclic Graph) = BBN (Bayesian Belief Network)
Probably the most scientific talk of the conference and two great demos: reconstruction of Bach’s first invention using BBN (amazing stuff) and analysing whiskey properties
Book to read: “Robust Nonparametric Statistical Methods”
Site to check: Eliezer Yudkowsky
Tool to check: Weka – analysis tool – live example how to analyze properites of whiskey.
A great collection of links on Bayesian Networks: https://gist.github.com/1031597
“Taking Back Education” by Joe O’Brien (@objo)
Education. We are in the top 5 to 2% of the developers by just being here – attending the conference.
Why education system sucks? There’s a clear need for apprenticeship institute.
Harward Business Review research indicated that team IQ depends on diversity, not on IQ of individual members.
Adding a women to the team cnsistently improves team performance (good reference for Diversity problems talk by Joshua)
In the end of the first day there was a series of “lightning talks”.
* Anthony Eden (@aeden) proposed to use DNS protocol for resolving dependencies. Definitely idea worth studying.
* Twitter will be native on all iOS devices – think about it, and what do you want to do with it.
* Stephen Sykes – obfuscated code for fun and ruby quiz – really, really fun – see the slides here: http://www.stephensykes.com/obfu_lightening.pdf
* Emily Bach (backconsulting.com) shared her experiences in teaching TDD
* Theo from Burt talked about his experiences and lessons learned from scaling:
– build two of everything from the start – will help with horizontal scaling later
– fail fast (Göthenburg ship made it to China and back to Sweden and sank a hundred meters from the home harbour, Vaasa is a lot better example – it sank right after it was deployed 🙂
– queues
* Tom from GitHub talked about Hubot – a Campfire robot they wrote in node.js and keep developing just for fun – absolutely amazing stuff, every team should do that
* David from Streamio (one of the sponsors of Nordic Ruby) did a “shameless self-promotion” of his company
* Alex who has been doing a great job filming the conference talked about making a movie – what it takes
* Antony Sastre – talked about photography – really inspiring, Antony was a web developer, then left the field and was doing photography for living for two years, now came back to web development
* Nikolai (@nikolayb) Is this a bad idea? Deploying always to production on a site with millions of page views per day, one branch always – test code on a live service? Somehow it works…
* Paul Wilson (@paulanthonywils) talked about Agile Delivery Network – doing better government IT, and here’s a bunch of links from his talk: https://gist.github.com/1035392
* Paul Campbell (@paulk) talked about whenever.js and made it public on GitHub in the end of his talk http://whatever-js.heroku.com/#1, https://github.com/paulca/whenever.js
Day one ended with a BBQ dinner at the River Cafe.
Day 2
Paul Campbell who ended Day 1 with his lightning talk also started Day 2 with a autobiographical talk “In search of me fein” (myself in Irish).
7 days in my life, zombie movies and finding inspiration
Technologist, developers, live in a bubble – we have no problems finding jobs, we can travel, we can choose where we live and work. It’s not like that outsie of our industry.
“Actors on stage” by Elise Huard (@elise_huard)
Slides: http://www.slideshare.net/ehuard/ruby-hollywood-nordic
We have multiple cores in our processors now – how do we benefit from it?
MRI is the only Ruby where parallel threads are executed time-scliced in one real thread.
Cellucloid – a concurrent object framework for Ruby.
Languages that implement actors: Erlang, Scala (Actors are in standard library), Closure (Actors called Agents)
Mats hates threads 🙂
Should there still be a better cuncurrency primitives in MRI? shall we create a branch of Ruby to implement it?
“Beyond Ruby” by Jakob Mattson from Burt (@jakobmattsson)
Slides: http://jakobmattsson.tumblr.com/post/6664704401/beyond-ruby
Bold statement: Ruby is not a dynamic language. Not everyting in Ruby is an object, despite what many books claim.
E.g. dot (.) or “or” (||) operators cannot be redefined. Or operator doesn’t evaluate second argument if the first one is true.
Ruby is not as moldable as it could be.
It would be cool to implement calling by name – passing expression along with the context to the callee and letting it decide whether to evaluate it or not.
Io language is probably 80% there. A new language needs to be invented. And coding it would not be that difficult – because if it is
truly dynamic, then most of it can be implemented in itself.
“Fewer constraints” by Ryan Smith (@ryandotsmith) from Heroku
Slides: http://dl.dropbox.com/u/1579953/concurrency_deck_with_notes.pdf
Continuing the theme that Elise started this morning. How to improve performance of your application by parallelizing.
Amdahl’s law – adding processors gives only marginal speed-up. “Even though we have 10 workers
available to us, we are only seeing a speedup factor of 5.2, with 20 workers it get only to 6.9”.
Real life example – improving queue performance. Using Fuzzy FIFO instead of traditional queues FIFO implementation.
Example with using spinlock in PostgreSQL to implement it. See queue_classic on github.
“Mountain Dew and My Trail of Tears” by Aaron Patterson (@tenderlove) from AT&T Interactive
Aaron discussed in depth how to work with legacy code.
– use “ruby -w” to see the warnings in your code, warnings can be used by developers to inform about upcoming deprecations
– Liskov substitution principle (LSP)
– Single responsibility principple
– Method extraction
– Object#extend
– Code seams
– sleep sort: http://dis.4chan.org/read/prog/1295544154 🙂
Recommended reading: Working effectibely with legacy code
“Legacy” by Chad Fowler (@chadfowler)
Chad started with playing a recording of Beethoven – this is legacy. Miro is legacy. Gaudi is legacy too, and the only reason to visit Barcelona.
Legacy is good.
Nobody will remember your work when you die. There are still systems in use written 25 years ago – why don’t we write that kind of code anymore?
Average lifespan of a business software is 5 years (figure is probably made up)
Recommended reading:
Michael Feathers “Your Code.. it’s Alive..”
Richard P. Gabriel “Design Beyond Human Abilities”
What kind of software lasts – either small (cell-size) or systems consisting of cell-sized software (like UNIX).
Force heterogenity – languages, OSes, frameworks – will change over time. If it’s hard to force heterogenity – do it all the time.
“Must.Try.Harder” by Keavy McMinn (@keavy)
An absolutely fascinating and inspirational talk from a woman who decided to train for an IronMan from pretty much zero.
She did it. A rare inspirational example of how to go outside your comfort zone and achieve a goal that looked impossible.
Other conference notes:
Fredrik Rubensson: http://www.highlevelbits.com/2011/06/nordic-ruby.html
Andreas Ronge / Jayway: http://blog.jayway.com/2011/06/19/notes-and-thoughts-from-a-great-conference/
Leave a Reply