Posted 4 days back at Ruby Inside
Rails 3.0 has been underway for a good two years, so it’s with immense pleasure that we can declare it’s finally here. We’ve brought the work of more than 1,600 contributors together to make everything better, faster, cleaner, and more beautiful.
David Heinemeier Hansson
DHH rings the bell and announces that Rails 3.0 (final) has been released after two years of determined effort by the Rails core team (and, significantly, Merb team members, since Rails 3.0 is heavily influenced by the Merb merger). Grab it now with gem install rails --version 3.0.0 or, if you're in no rush, Rails 3.0.1 might come along within a week or two.
The Videos
DHH gives a quick roundup of some of Rails 3's new features but like Emma Watson's head PhotoShopped onto yet another naked body, it's nothing you haven't seen before. If you're really fresh to Rails 3.0, though, Gregg does an admirable job of boiling everything down into a digestible format with his (free!) Dive Into Rails 3.0 screencast series:
Ryan Bates has also produced a fistful of his typically succinct but precise RailsCasts videos on a wide array of Rails 3.0 topics. Ryan always focuses on code and practicalities so these are a good place to start if you want to follow along and do some coding yourself:
If you don't like videos, still follow the links, because there are links to the ASCIIcasts regular HTML versions of the Railscasts videos. These are regular blog posts that you can follow at your own pace.
Or some books
Michael Hartl's Rails Tutorial book is the #1 (and only, in my opinion) place to start when it comes to books about learning Rails 3.0. Not only is it available to read for free online, but you can buy a well formatted PDF too. It's an amazing piece of work and, unusually, walks you through building a Rails app from start to finish with testing. If you want to just read one book/site and feel like a Rails 3.0 master by the end of it, pick RailsTutorial.org.
If you speak German, though, check out this "Ruby on Rails 3" book by Michael Voigt and Stefan Tennigkeit. It's one of the first Rails 3.0 specific books to hit the presses.
Or just dive into some code
If you want to just "get started" and check out a working Rails 3.0 application, try Daniel Kehoe's Rails3-Subdomain-Devise app. It's a basic Rails 3.0 app that demonstrates using the Devise authentication system, as well as custom subdomain access. Not just that, but Daniel has put together a walkthrough of how the app works and how it was put together.
Posted 4 days back at RailsTips.org - Home
There are several things I have learned building object mappers that I now take for granted. Last week while pairing with Jason, I was explaining a trick and he said I should blog about it, so here goes nothing.
Let’s say you are building a new object mapper named TacoMapper. A sensible place to start is with attribute accessors. One other thing to note is that we don’t care about old news, so we won’t support Rails 2 in any fashion. Deciding this, we can take advantage of ActiveModel and new features in ActiveSupport.
First Goal
First, let’s think about API. Our first goal will be to make the following work:
class User
include TacoMapper
attribute :email
end
user = User.new
user.email = 'John@Doe.com'
puts user.email # "John@Doe.com"
First Solution
The first thing we need is a class method named attribute.
require 'active_model'
require 'active_support/all'
module TacoMapper
extend ActiveSupport::Concern
module ClassMethods
def attribute(name)
attr_accessor(name)
end
end
end
class User
include TacoMapper
attribute :email
end
user = User.new
user.email = 'John@Doe.com'
puts user.email # "John@Doe.com"
ActiveSupport::Concern is a handy little ditty that does a lot out of the box. In our case, it will automatically call extend(ClassMethods) and add our attribute class method whenever our TacoMapper module gets included. With just a tiny bit of code, we have met our first goal.
Second Goal
Now, I am going to throw a kink in the mix. The goal of this post is to create override-able accessors. Let’s say we want to override the email writer method and make sure that we always get lowercase emails. If we override our attribute accessors right now, we have to set the instance variable for things to work and we get no benefit from TacoMapper.
require 'active_model'
require 'active_support/all'
module TacoMapper
extend ActiveSupport::Concern
module ClassMethods
def attribute(name)
attr_accessor(name)
end
end
end
class User
include TacoMapper
attribute :email
def email=(value)
@email = value.to_s.downcase
end
end
user = User.new
user.email = 'John@Doe.com'
puts user.email # "john@doe.com"
In this simple example, that might be ok. But what if other things were in the mix, like dirty tracking, typecasting, etc.? Those other things would immediately stop working. Would it not be nice if we could just override our accessor and call super to get all the normal functionality of TacoMapper? I am glad you agree.
Second Solution
If you haven’t yet, you might want to read Lookin’ on Up…To the East Side, a post I wrote on how Ruby’s method lookups work. In it, I explain that if you include a module, you can override methods that were in the module and call super. We’ll do the same in TacoMapper so we can make things a bit more robust.
require 'active_model'
require 'active_support/all'
module TacoMapper
extend ActiveSupport::Concern
module ClassMethods
def attribute_accessors_module
@attribute_accessors_module ||= Module.new.tap { |mod| include(mod) }
end
def attribute(name)
attribute_accessors_module.module_eval <<-CODE
def #{name}
@#{name}
end
def #{name}=(value)
@#{name} = value
end
CODE
end
end
end
class User
include TacoMapper
attribute :email
def email=(value)
super(value.to_s.downcase)
end
end
user = User.new
user.email = 'John@Doe.com'
puts user.email # "john@doe.com"
Note that we get the same result as the previous example, except that now we can just call super and still take advantage of all the loveliness that TacoMapper will eventually provide. We changed a couple of key things, so lets cover the differences in detail.
First, we created a method (attribute_accessors_module) that returns a memoized module and includes it in the current class. No matter how many calls you make to this method, it will return the first module we created and it will only be included once, since we memoized it (||=).
Second, since we have a module and it is included in our class, all we have to do is module_eval our accessor methods into it. This is what is happening in the attribute method.
Third, instead of setting the email instance variable in the email= method, we just call super, which will call the method we module_eval’d into our accessors module.
Pretty sweet, eh?
Third Solution
We could stop there, but we said we were going to use ActiveModel a bit, right? ActiveModel has a module for attribute accessors that does the same thing as above and a bit more (although a bit confusing).
require 'set'
require 'active_model'
require 'active_support/all'
module TacoMapper
extend ActiveSupport::Concern
include ActiveModel::AttributeMethods
included do
attribute_method_suffix('', '=')
end
module ClassMethods
def attributes
@attributes ||= Set.new
end
def attribute(name)
attributes << name.to_s
end
end
module InstanceMethods
def attribute(key)
instance_variable_get("@#{key}")
end
def attribute=(key, value)
instance_variable_set("@#{key}", value)
end
def attributes
self.class.attributes
end
end
end
class User
include TacoMapper
attribute :email
def email=(value)
super(value.to_s.downcase)
end
end
user = User.new
user.email = 'John@Doe.com'
puts user.email # "john@doe.com"
Note that again, we get the same result and that we are using super as before. So what changed this time?
First, we included ActiveModel::AttributeMethods. We then took advantage of the attribute_method_suffix method it provides to declare that we would have a reader ('') and a writer ('='). Now all our attribute class method has to do is add the attribute to the set of attributes.
Lastly, we define methods that implement the suffix methods we defined (attribute and attribute=). Note that we also define the attributes instance method so that ActiveModel knows when it is dealing with one of our attributes. Now, it takes only a few more lines of code to add a boolean presence method.
require 'set'
require 'active_model'
require 'active_support/all'
module TacoMapper
extend ActiveSupport::Concern
include ActiveModel::AttributeMethods
included do
attribute_method_suffix('', '=', '?')
end
module ClassMethods
def attributes
@attributes ||= Set.new
end
def attribute(name)
attributes << name.to_s
end
end
module InstanceMethods
def attribute(key)
instance_variable_get("@#{key}")
end
def attribute=(key, value)
instance_variable_set("@#{key}", value)
end
def attribute?(key)
instance_variable_get("@#{key}").present?
end
def attributes
self.class.attributes
end
end
end
class User
include TacoMapper
attribute :email
def email=(value)
super(value.to_s.downcase)
end
end
user = User.new
puts user.email? # false
user.email = 'John@Doe.com'
puts user.email? # true
Using ActiveModel like this makes adding things like dirty tracking take a few minutes instead of a few hours. That said, the main point of this post is how the internals of ActiveModel actually work and how you can do it on your own if you so choose.
For those of you that are MongoMapper users, it has the same functionality built in though in a not as elegant way (which I will be updating soon). Also, your accessors are not used when loading things from the database, as that is handled internally. This means you can make your public accessors do whatever you want and it will not foobar the loading of your documents.
Hope this helps others trying to grok ActiveModel or build your own object mapper. If you enjoyed this post and would like to learn more about building an object mapper, let me know with a comment and I will try to round up a few more posts on the topic.
Posted 4 days back at Riding Rails - home
Rails 3.0 has been underway for a good two years, so it’s with immense pleasure that we can declare it’s finally here. We’ve brought the work of more than 1,600 contributors together to make everything better, faster, cleaner, and more beautiful.
This third generation of Rails has seen thousands of commits, so picking what to highlight was always going to be tough and incomplete. But here’s a choice selection of major changes for Rails 3:
New Active Record query engine
Active Record has adopted the ARel query engine to make scopes and queries more consistent and composable. This makes it much easier to build complex queries over several iterations. We also delay the actual execution of the query until it’s needed. Here’s a simple example:
users = User.where(:name => "david").limit(20)
users.where("age > 29")
# SELECT * FROM users
# WHERE name = "david" AND age > 29
# ORDER BY name
# LIMIT 20
users.order(:name).each { |user| puts user.name }
Read more in new Active Record guide and watch the Dive into Rails 3: ARel video.
New router for Action Controller
When we switched to a REST-based approach for controllers in Rails 2, we patched on the syntax to the existing router while we were waiting to see if the experiment panned out.
It did and for Rails 3 we’ve gone back and revamped the syntax completely to favor the REST style with less noise and more flexibility:
resources :people do
resource :avatar
collection do
get :winners, :losers
end
end
# /sd34fgh/rooms
scope ':token', :token => /\w{5,5}/ do
resources :rooms
end
# /descriptions
# /pl/descriptions
# /en/descriptions
scope '(:locale)', :locale => /en|pl/ do
resources :descriptions
root :to => 'projects#index'
end
Read more in the new routing guide.
New Action Mailer
Action Mailer was born with a split-personality of half model, half controller. In Rails 3, we’ve made the choice to make it all controller. This means that the feel and functionality will be much closer to Action Controller and in fact they now share a bunch of underlying code. Here’s a taste of what it looks like now:
class Notifier < ActionMailer::Base
default :from =>
"Highrise <system@#{APPLICATION_DOMAIN}>"
def new_project(digest, project, person)
@digest, @project, @person = digest, project, person
attachments['digest.pdf'] = digest.to_pdf
attachments['logo.jpg'] = File.read(project.logo_path)
mail(
:subject => "Your digest for #{project.name}",
:to => person.email_address_with_name
) do |format|
format.text { render :text => "Something texty" }
format.html { render :text => "Something <i>texty</i>" }
end
end
end
The new Action Mailer is built on top of the new Mail gem as well. Say goodbye to TMail headaches.
Read more in new Action Mailer guide.
Manage dependencies with Bundler
Managing all the dependencies of a Rails application has long been a hassle of patchworks. We had config.gem, Capistrano externals, custom rake setup tasks, and other incomplete solutions.
Bundler cleans all that up and allows you to specify the libraries, frameworks, and plugins that your application depends on. All Rails 3 applications are born with a Gemfile to control it all. See more on the Bundler site.
XSS protection by default
The internet is a scary place and Rails 3 is watching out for you by default. We’ve had CRSF protection with form signing for a while and SQL-injection protection since the beginning, but Rails 3 ups the anté with XSS protection as well (hat tip to Django for convincing us).
See the Railscast on XSS video and the Dive into Rails 3: Cross-site scripting video for more.
Say goodbye to encoding issues
If you browse the Internet with any frequency, you will likely encounter the � character. This problem is extremely pervasive, and is caused by mixing and matching content with different encodings.
In a system like Rails, content comes from the database, your templates, your source files, and from the user. Ruby 1.9 gives us the raw tools to eliminate these problems, and in combination with Rails 3, � should be a thing of the past in Rails applications. Never struggle with corrupted data pasted by a user from Microsoft Word again!
Active Model: Validations, callbacks, etc for all models
We’ve extracted quite a bit of commonly requested Active Record components into the new Active Model framework. This allows an ORM like Mongoid to use Active Record’s validations, callbacks, serialization, and i18n support.
Additionally, in the rewrite of Action Controller, we removed any direct references to Active Record, defining a clean, simple API that ORMs can implement. If you use an API-compliant ORM (like DataMapper, Sequel, or Mongoid), you will be able to use features like form_for, link_to and redirect_to with objects from those ORMs without any additional work.
Official plugin APIs
We also rewrote Railties with the express goal of using the new plugin API for all Rails frameworks like Active Record and Action Mailer. This means that Rails plugins like the ones for DataMapper and RSpec have access to all of the integration as the built-in support for Active Record and Test::Unit.
The new Railtie API makes it possible to modify the built-in generators, add rake tasks, configure default Rails options, and specify code to run as early, or as late as you need. Rails plugins like Devise were able to add much better integration in the Rails 3 version of their plugin. Expect to see a lot more of that in the months ahead.
Rewritten internals
We rewrote the internals of Action Pack and Railties, making them much more flexible and easier to extend. Instead of a single monolithic ActionController::Base, Rails 3 exposes a number of modules, each with defined APIs, that you can mix and match to create special-purpose controllers for your own use. Both Action Mailer in Rails and the Cells project make heavy use of this new functionality.
You can also take a look a this blog post by Yehuda (from last year) to see how the new architecture makes it easy to implement Django-style generic actions in Rails by leveraging Rack and ActionController::Metal.
The Rails generator system is got a revamp as well. Instead of monolithic generators that know about all of the Rails frameworks, each generator calls a series of hooks, such as :test_framework and :orm, that plugins can register handlers for. This means that generating a scaffold when using rSpec, DataMapper and Haml will generate a scaffold customized for those plugins.
Agnosticism with jQuery, rSpec, and Data Mapper
The rewritten internals and the new plugin APIs have brought true agnosticism to Rails 3 for all components of the framework. Prefer DataMapper to Active Record? No problem. Want to use jQuery instead of Prototype? Go ahead. Eager to test with rSpec instead of test/unit? You got it.
It’s never been easier to Have It Your Way™ with Rails 3. And at the same time, we’ve made that happen without making using the excellent default stack any more complicated.
Documentation
Rails 3 has had a long development cycle and while that might have lead to some impatience, it has also given book and tutorial authors a chance to catch up and be ready. There’s a wealth of great Rails 3 documentation available already and more is coming shortly.
The Agile Web Development with Rails 4th Ed book is almost ready and there are plenty more books coming. Check out all the new guides, the new official videos, new Railscasts, and a new tutorial. See the recent recap of documentation sources for more.
Installation
gem install rails --version 3.0.0.
We also have a Rails v3.0.0 tag and a 3-0-stable branch.
Rails 3.0 has been designed to work with Ruby 1.8.7, Ruby 1.9.2, and JRuby 1.5.2+.
Gratitude and next steps
I’m personally incredibly proud of this release. I’ve been working on Rails for more than 7 years and the quality of the framework we have today is just astounding. This is only possible as a community effort and Rails 3 has seen so many incredible developers step up and help make this our best release ever (wink). Many thanks to all of you.
We’ll continue to develop Rails 3.0 with fixes and tweaks via the stable branch and Rails 3.1 is already cooking on master.
Posted 5 days back at Segment7
This may be inaccurate because it trusts the gem specification, but the oldest 100 gems are:
| Date | Name
|
|---|
| 16-03-2000 | rquery-0.1.2
|
| 01-01-2004 | rubyslippers-0.93
|
| 02-01-2004 | rwdaddresses-0.91
|
| 06-01-2004 | rwddemo-0.7
|
| 08-01-2004 | rubyslippers-0.94
|
| 11-01-2004 | rwdaddresses-0.92
|
| 18-08-2004 | ncursesw-0.9.2
|
| 18-08-2004 | ncursesw-0.9.1.a
|
| 18-08-2004 | ncurses-0.9.1
|
| 18-08-2004 | ncursesw-0.9.1
|
| 15-09-2004 | rake-0.4.8
|
| 15-09-2004 | an-app-0.0.3
|
| 17-09-2004 | libxosd-ruby-0.4
|
| 17-09-2004 | rlirc-0.3.1
|
| 17-09-2004 | libxosd2-ruby-0.4
|
| 19-09-2004 | vruby-2004.08.07
|
| 19-09-2004 | swin-2004.03.14
|
| 20-09-2004 | gnuplot-1.0
|
| 20-09-2004 | vim-ruby-2004.09.20
|
| 20-09-2004 | sqlite-ruby-2.0.3
|
| 23-09-2004 | extensions-0.4.0
|
| 24-09-2004 | termios-0.9.4
|
| 25-09-2004 | diff-lcs-1.1.1
|
| 26-09-2004 | copland-0.8.0
|
| 27-09-2004 | cmdparse-1.0.0
|
| 27-09-2004 | archive-tar-minitar-0.5.1
|
| 27-09-2004 | sqlite-ruby-2.1.0
|
| 27-09-2004 | amatch-0.1.3
|
| 29-09-2004 | sqlite-ruby-2.1.0
|
| 29-09-2004 | term-ansicolor-0.0.4
|
| 30-09-2004 | file-tail-0.1.2
|
| 30-09-2004 | latex-0.1.1
|
| 30-09-2004 | lazylist-0.1.2
|
| 01-10-2004 | jobserver-0.1.4
|
| 01-10-2004 | ctapi-0.2.2
|
| 01-10-2004 | fxruby-1.2.2
|
| 01-10-2004 | genx4r-0.04
|
| 02-10-2004 | complearn-0.6.2
|
| 02-10-2004 | yip-0.8.2
|
| 04-10-2004 | extensions-0.5.0
|
| 06-10-2004 | ruby-activeldap-0.4.1
|
| 07-10-2004 | dnssd-0.6.0
|
| 07-10-2004 | getopt-declare-1.09.7
|
| 07-10-2004 | ruby-activeldap-0.4.2
|
| 08-10-2004 | ruby-activeldap-0.4.3
|
| 08-10-2004 | dev-utils-1.0
|
| 10-10-2004 | ruby-activeldap-0.4.4
|
| 11-10-2004 | copland-1.0.0
|
| 13-10-2004 | dev-utils-1.0.1
|
| 14-10-2004 | needle-0.5.0
|
| 16-10-2004 | builder-1.2.0
|
| 16-10-2004 | builder-1.1.0
|
| 18-10-2004 | SimpleSearch-0.5.0
|
| 19-10-2004 | latex-0.1.2
|
| 20-10-2004 | mysql-2.5.1
|
| 20-10-2004 | diff-lcs-1.1.2
|
| 20-10-2004 | postgres-0.7.1
|
| 21-10-2004 | needle-0.6.0
|
| 21-10-2004 | fcgi-0.8.5
|
| 21-10-2004 | ruby-activeldap-0.5.0
|
| 21-10-2004 | nitro-0.1.2
|
| 22-10-2004 | ruby-activeldap-0.5.1
|
| 22-10-2004 | ruby-activeldap-0.5.2
|
| 22-10-2004 | rmail-0.17
|
| 23-10-2004 | formvalidator-0.1.3
|
| 23-10-2004 | jpeg2pdf-0.12
|
| 23-10-2004 | xhtmldiff-1.0.0
|
| 24-10-2004 | rwdtinker-1.2
|
| 24-10-2004 | hprevalence-0.1.0
|
| 25-10-2004 | actionpack-0.9.0
|
| 25-10-2004 | test-unit-mock-0.30
|
| 25-10-2004 | rwdtinker-1.23
|
| 25-10-2004 | rubyslippers-0.92
|
| 25-10-2004 | rails-0.8.0
|
| 25-10-2004 | rwddemo-0.6
|
| 25-10-2004 | activerecord-1.0.0
|
| 25-10-2004 | actionmailer-0.3.0
|
| 25-10-2004 | nitro-0.2.0
|
| 25-10-2004 | algorithm-diff-0.1
|
| 26-10-2004 | sqlite-ruby-2.2.0
|
| 27-10-2004 | io-reactor-0.05
|
| 27-10-2004 | rwdshell-0.9
|
| 27-10-2004 | sqlite-ruby-2.2.0
|
| 27-10-2004 | rwdaddresses-0.8
|
| 27-10-2004 | ruvi-0.4.12
|
| 27-10-2004 | hprevalence-0.1.1
|
| 27-10-2004 | crosscase-0.0.1
|
| 28-10-2004 | needle-0.9.0
|
| 28-10-2004 | rwdaddresses-0.9
|
| 29-10-2004 | rwdschedule-0.5
|
| 29-10-2004 | dbc-1.1.0
|
| 29-10-2004 | ruby-activeldap-0.5.3
|
| 30-10-2004 | rake-0.4.9
|
| 30-10-2004 | rwdtinker-1.24
|
| 30-10-2004 | builder-1.2.1
|
| 31-10-2004 | narf-0.5.1
|
| 01-11-2004 | lockfile-1.1.0
|
| 01-11-2004 | posixlock-0.0.1
|
| 01-11-2004 | dbc-1.1.1
|
| 01-11-2004 | rq-0.1.7
|
Posted 5 days back at Jake Scruggs
Last day of Ruby Kaigi! Sad to see it go, it's been a great conference. As per usual Tweets are in bulleted italics and the rest is after the fact commentary.
First I've got to show you the commemorative fans they were handing out:

It's Matz and... Someone else (sorry if it's obvious - I don't know). And of course they are programing in the bath.
- BigDecimal: You can handle numbers as large as can fit into memory as opposed to the IEEE double #rubykaigi
- BigMath is the Math module for BigDecimal #rubykaigi
- Lots of different rounding modes in BigDecimal #rubykaigi
- BigDecimal.mode is global per process - not thread safe #rubykaigi
- So BigDecimal is Fiber unsafe #rubykaigi
Bummer.
- .@mrkn implemented a solution storing mode in thread local #rubykaigi
- You can now change modes in a block (added to trunk yesterday) #rubykaigi
- Effective digits/ Significant digits determines which digits to keep and which to round off #rubykaigi
- BigDecimals don't know their own effective digits #rubykaigi
But I think the point of talking about sig figs was that it's coming soonish in Ruby. 1.9.3?
- It is dangerous to mix floats and BigDecimals #rubykaigi
- BigDecimals can't convert from rational, integer, or float. just strings #rubykaigi
- And you can't do BigDecimal(BigDecimal) !! #rubykaigi
That is one crappy interface. Taking in only strings is frustrating and weird. How did this happen?
- Now a preview of the future of BigDecimal #rubykaigi
- No library for irrational numbers in Ruby #rubykaigi
- Perhaps we can represent irrational numbers as algorithms and on convert when needed. #rubykaigi
- BigDecimals don't have real significant digits implemented right now. #rubykaigi
- The issue of BigDecimal not being able to handle anything other than a string as input will be fixed as it is a bug #rubykaigi
The irrational numbers thing sounds pretty cool. Since I mostly sling around strings for my day job I don't know that I'll ever use it. But purely for Ruby pride I like to see ruby challenge Python's rising dominance in the sciences and maths.
- I really don't like the lack of travel time between session. You should have at least 5 minutes to change sessions. #rubykaigi
Look, this has been a great conference and any slights I've tended to overlook because they've really done a heroic job of keeping the admission price down but that lack of a passing period is just... Well I don't see why they did it. Just having the time as a buffer in case talks run over is reason alone. Moreover, no passing period traps people in sessions that they'd rather not be in and restricts choice.
- Apparently there is a lot of chatter in IRC by ruby commiters that NArray should be added to strd lib. #rubykaigi
- NArray is 28x faster and uses 8x less characters in 1.9.2 #rubykaigi
- NArray is faster than what? Array, I assume, but I may not be following the translation correctly. #rubykaigi
Translation is volunteer and best-effort so it adds some challenge to attending sessions in a foreign language. So if I make any mistakes in this here blog, that's what I'm blaming it on.
- Pwrake is parallel distributed Rake - being developed here in Tsukuba. #rubykaigi
Just a little tidbit dropped at the end of the NArray presentation -- sounds pretty cool. Masahiro Tanaka is using it drive his workflow in his scientific research.
- yarv2llvm tries to speed up Ruby by implementing type inference (yarv is the vm for 1.9x) #rubykaigi
- There are times in Ruby when type can not be inferred and in those cases yarv2llvm is often slower than Ruby 1.9x #rubykaigi
- Fixnum overflow to BigNum is one of the hardest problems to solve #rubykaigi
- Btw, I think the title of this talk: "How Did Yarv2llvm Fail" is wonderful. Way to keep everything above board. #rubykaigi
Great talk and very honest. The type inference thing looks promising but there are a couple of tough hurdles to clear. Maybe some day. Until then there's always
Mirah.
- Ruby AOT complier is "mostly compatible" with Ruby 1.9 #rubykaigi
- AOT == "Ahead of time"
- Ruby AOT compiler is passing 7847 of 7850 Ruby Spec tests as of now. #rubykaigi
- On average Ruby AOT compiler is 3.5x faster than 1.9 for common benchmarks #rubykaigi
Cool, let's all move to Ruby AOT!
- It doesn't fair quite so well in the real world Ex: Rails. Slightly slower than 1.9 #rubykaigi
- Something about cache misses makes it slower #rubykaigi
- The Ruby AOT compiler team wants to reduce the generated code size to increase speed. #rubykaigi
- Rails can be compiled in 77 min and size of compiled code is 92MB with Ruby AOT #rubykaigi
Oh. Never mind. Plus, compiling. Boo. Hiss.
- This memory profiler's gui looks amazing! #rubykaigi
- Seriously, this is the sexiest profiler ever #rubykaigi
- Can attach to running Ruby programs from another machine #rubykaigi
- Designed to have as small as possible impact and be easy to use #rubykaigi
I gotta tell ya the audience was chomping at the bit to get a hold of this profiler. You can run it in production for christ's sake! And the GUI is to die for.
- Not available yet!?! #rubykaigi
- Needs to get patch accepted into ruby core - maybe in 1.9.3. RATS! #rubykaigi
Very cruel of Tetsu Soh not to mention this up front. I'm sure it was an oversight but everyone was crazy disappointed. Still this was one of the best talks of the conf. Tetsu Soh is one to watch.
- Dear Ruby Core please, please, please, please, please, please, please, please accept Tetsu Soh memory profiler patch #rubykaigi
Indeed. I'm famous (on the internet (in one corner)) so you should listen to me.
- Lots of requests to publish Tetsu Soh's memory profiler on Github. I agree! #rubykaigi
- Automatic sliding doors in Japan trigger much latter than Americans would expect leading to a lot of stopping and hand waving
I'm not the only one who noticed this so I'm not crazy.
- More awesome techno in the #rubykaigi main hall. I want, nay, need the playlist.
Please post it on the 'Goodies' section of the Ruby Kaigi site. Or tweet about it. Something.
- Shay Friedman has spent the first five minutes of his talk apologizing for being associated with Microsoft. Stop. #rubykaigi
There was this weird hostile vibe coming from Shay. I felt like he hated us for liking Apple products. The weird thing is that there are a lot fewer Apple computers here than at a normal Ruby Conf. Maybe he thought we were all Microsoft haters and so he might as well fire first. Seemed like a mistake.
- Just saw a nice hello world creating windows and dialog boxes in IronRuby #rubykaigi
- IronRuby currently passes 85% of Ruby Spec. #rubykaigi
- IronRuby 1.0 is 1.8.6 compatible. 1.1 (coming soon) will be 1.9.2 compatible. #rubykaigi
- Windows Presentation Foundation's view templates are written in xaml which is like html. #rubykaigi
Another markup language because we needed more. I feel like the IronRuby team really needs a win. They've been the slowest progressing Ruby VM for a long time now.
- <script language="ruby"> Whaa? Gestalt hides a hidden bit of Silverlight in the page so you can replace Javascript with Ruby. #rubykaigi
Pretty neat trick that. Of course it means making your site dependent on silverlight. No worse than depending on Flash I guess.
- IronRuby.Rack is Rack implementation on ASP. Currently in beta. #rubykaigi
It's all coming along, I'd just like to see something working at this point in its life.
- If key is symbol then only one instance - less object creation. Which is why everyone uses symbols. Or because everyone else does #rubykaigi
So did you know why everyone uses symbols? Or did you just do it because that's the convention. Yeah, me too but then I learned. I'm not going to say how long ago that was.
- Presenter's computer went down and it's taking forever to reboot. Stupid Mac. #rubykaigi
That's one of those rough moments where you really feel bad for the presentor. But he handled it like a champ -- continuing the presentation while he waited for his machine to boot back up. Well done. I wish I got more out of the talk but it was one of those inspirational talks that are hard to translate. The Japanese speaking audience seemed to love it.
- Please use the overburdened network to download the english version of the slides. Umm... What? #rubykaigi
Huh. Why did that seem like a good idea. Since when does asking a room full of people to download something all at once ever work. And yet, it seems it happens once a conference. Repeat after me: Never ever depend on the network at a conference.
Funny story time. All through the conference I spent a lot of time staring at the IRC screens on either side of the stage where the translations happen. But since it's just IRC, anyone can join the room. There was this one guy who posted A LOT and everyone of the posts seemed to be either:
888888888888
or
wwwwwwwwww
I later found out that 888888 means clapping and wwwww means laughter. OK but stop cluttering up the screen that I'm trying to read translations off of. Then I found out who sora_h was: He's 14 and his name is Shota Fukumori. He got up and gave an entertaining lightning talk. Turns out he's a Ruby commiter so he's got that on me.

And, all of a sudden, it was time for the final keynote by Chad Fowler. He gave a talk about how to live a remarkable life and it was good stuff.
- The two things that are necessary to live a remarkable life are: To have intention and a system of realizing that intention #rubykaigi
- Living intentionally means being mindful of your actions. It's easy to coast through life. #rubykaigi
- "My co-workers laughed at me when I learned Ruby" - Chad Fowler #rubykaigi
- "You don't want to be in a situation where you are competing on price" - Chad Fowler #rubykaigi
- Programming Cobol is like working in a hospice. There's a market for that. - Chad Fowler #rubykaigi
- "Always be the worst musician in whatever band you're in" Pat Matheney #rubykaigi
- "If you're playing things that sound good then you're not practicing" lesson from music that applies to programming #rubykaigi
- "I needed a project that was useless" - Chad Fowler #rubykaigi
- "Was today better than yesterday?" All you have to do is get a little better every day #rubykaigi
- "Passion is a resource that you have to conserve" - Chad Fowler #rubykaigi
Lots of gems in there.
- RubyKaigi 2011 will be in July and in Tokyo. #rubykaigi
There was something about the theme being "The Last Ruby Kaigi" but I think it was sort of a joke making fun of some guy who posted a rant about how the Ruby Kaigis need to end. I didn't have enough background to get it.
Oh, I forgot to talk about the guy hawking "The Last Google Wave Book Ever Published." It seems he had been working on a Google Wave book and it was printed on the same day Google announced the end of wave. His response? To shamelessly promote the book at Ruby Kaigi in a lightning talk, at some sort of hallway session (with 30 people gathered around), and pretty much everywhere else. And I actually saw some people carrying the book around. Did they buy it? Who knows -- his positive personality was so powerful I wouldn't be surprised if they did.

Ruby Kaigi was an excellent time. I thought it might be crazy intimidating but everyone was super nice and there were enough english speakers so that I could always get my ideas across. Go if you have the chance.
Also, check out my every growing set of Ruby Kaigi photos at Flickr:
Posted 5 days back at Ruby Inside
EuRuKo is the brand of Europe's principal Ruby conference series and EuRuKo 2010 took place in late May. Why, then, am I posting about it in August? First, I'm a strong supporter of EuRuKo and promised to post a roundup of the event here. Secondly, it turns out it took a while for the videos to all be uploaded ;-) Third, I've taken my time in getting round to it. Nonetheless, there are some amazing presentations you can watch and they're still fewer than three months out of date!
One of the event's organizers, Ela Madej, gives a summary:
European Ruby Conference 2010 is now well over and the Berlin EuRuKo 2011 team are surely working on their opening song for the next year. Yes, we all know they sing well - their uber-strong German vocal was nothing but adorable.
Despite the flooding and changing the conference venue just one week before the event, EuRuKo was great! It was filled with fantastic talks and Rubyists from all over the planet. Here are some numbers: around 121 Poles (less than half of all 280 attendees), at least 40 Germans, Rubyists from Japan, Austria, Spain, UK, Switzerland, Uruguay, USA, Cuba, Slovakia, Czech Republic, Slovenia, Croatia, Estonia, The Netherlands, Latvia, Italy, France, Belgium, Brasil and more.
For everyone who missed the event, the videos from the conference are on Vimeo. There is also a great summary of the talks for Day One and
Day Two. Here are the links to EuRuKo official photos on Flickr for Day One and Day Two also.
Ela Madej
While there are 37 videos on offer, some standouts include:
EuRuKo is supported by not only by Rubyists paying to attend but by quite a few sponsors, with 2010's event no exception. The organizers asked me to specially thank their biggest sponsor Novelys - a team of French Ruby on Rails experts. On top of that, EuRuKo's afterparty sponsors were Applicake and Lunar Logic Polska, two Ruby development teams from Poland. Finally, 16 micro sponsors helped out too.
I've been a keen supporter of EuRuKo since the first event so a big thanks to all of the sponsors and attendees for supporting Ruby's principal Ruby conference. Now, go enjoy those videos.
Posted 5 days back at Ruby Inside
EuRuKo is the brand of Europe's principal Ruby conference series and EuRuKo 2010 took place in late May. Why, then, am I posting about it in August? First, I'm a strong supporter of EuRuKo and promised to post a roundup of the event here. Secondly, it turns out it took a while for the videos to all be uploaded ;-) Third, I've taken my time in getting round to it. Nonetheless, there are some amazing presentations you can watch and they're still fewer than three months out of date!
One of the event's organizers, Ela Madej, gives a summary:
European Ruby Conference 2010 is now well over and the Berlin EuRuKo 2011 team are surely working on their opening song for the next year. Yes, we all know they sing well - their uber-strong German vocal was nothing but adorable.
Despite the flooding and changing the conference venue just one week before the event, EuRuKo was great! It was filled with fantastic talks and Rubyists from all over the planet. Here are some numbers: around 121 Poles (less than half of all 280 attendees), at least 40 Germans, Rubyists from Japan, Austria, Spain, UK, Switzerland, Uruguay, USA, Cuba, Slovakia, Czech Republic, Slovenia, Croatia, Estonia, The Netherlands, Latvia, Italy, France, Belgium, Brasil and more.
For everyone who missed the event, the videos from the conference are on Vimeo. There is also a great summary of the talks for Day One and
Day Two. Here are the links to EuRuKo official photos on Flickr for Day One and Day Two also.
Ela Madej
While there are 37 videos on offer, some standouts include:
EuRuKo is supported by not only by Rubyists paying to attend but by quite a few sponsors, with 2010's event no exception. The organizers asked me to specially thank their biggest sponsor Novelys - a team of French Ruby on Rails experts. On top of that, EuRuKo's afterparty sponsors were Applicake and Lunar Logic Polska, two Ruby development teams from Poland. Finally, 16 micro sponsors helped out too.
I've been a keen supporter of EuRuKo since the first event so a big thanks to all of the sponsors and attendees for supporting Ruby's principal Ruby conference. Now, go enjoy those videos.
Posted 5 days back at Segment7
DNS Service Discovery (aka Bonjour, MDNS) API for Ruby. Implements
browsing, resolving, registration and domain enumeration. Supports
avahi’s DNSSD compatibility layer for avahi 0.6.25 or newer.
Changes:
Posted 5 days back at Riding Rails - home
To this day I still hear people complain that Rails has poor documentation. From where I’m sitting this seems far from the truth. Let me lay out the evidence piece by piece:
RailsTutorial.org
To learn Rails from scratch Michael Hartl recently finished his book Ruby on Rails Tutorial: Learn Rails by Example. The book teaches Rails 3 from the ground up and it’s available for FREE online. If you’d rather have a PDF or a book you can grab that as well (and he’s even working on some screencasts).
The source for the finalized book will be pushed to GitHub and released under a Creative Commons License shortly after Rails 3 is done. If you’d like to help translate the book to your language of choice, feel free to contact Michael and he’ll get in touch when it’s time to make it happen.
Rails Guides
If you’re not a Rails newbie don’t forget about the Rails Guides, which have been updated for Rails 3.
Rails API Docs
There are two main websites I use to do API lookups. The first is Rails Searchable API Doc, which has online and offline searchable documentation. The second is APIdock which is online only, but has the ability to comment and easily compare different versions of documentation.
Rails 3 Free Screencasts
If you’re more of a visual learner (like me) then there are plenty of free screencasts to teach you about Rails 3. About 2 months ago I produced the Rails 3 Screencasts, which will get you started.
Ryan Bates has also produced an incredible amount of Rails 3 screencasts over on Railscasts.com. Ryan has been producing Railscasts for over 3 1/2 years, isn’t that crazy?
There’s also a few good free screencasts over on Teach me to Code by Charles Max Wood.
Keeping on the Edge
If you find yourself wondering how to keep up with all of the newest features / libraries for Rails 3, both the Ruby5 Podcast and the Ruby Show are going strong. Don’t listen to audio? It doesn’t matter, just subscribe to the Ruby5 RSS feed and get links with descriptions to all the newest libraries, tutorials, and more. You might also want to checkout Peter Cooper’s new Ruby Weekly, a Ruby email newsletter.
Need to upgrade a big app to Rails 3?
Jeremy McAnnaly’s Rails 3 Upgrade Handbook PDF is just $12. There’s also a few paid screencasts for the upgrade over on Thinkcode.tv and BDDCasts.
Need a Book?
There’s a bunch of books that will be coming out after the release, most of which you can start reading now. The Rails 3 Way by Obie Fernandez, Rails 3 In Action by Ryan Bigg and Yehuda Katz, Beginning Rails by Cloves Carneiro Jr and Rida Al Barazi, and of course the Agile Web Development with Rails:fourth edition by Sam Ruby, Dave Thomas, and David Heinemeier Hansson.
In conclusion
No more complaining about lack of good documentation! Seriously. If you want even more Rails 3 content, check out the blog post by Kevin Faustino on 34 Ruby on Rails 3 resources to get you started.
Posted 6 days back at Jake Scruggs
Holy crap am I tired. It's been a long awesome day. It started out with some excitement:
- Just found out I have an hour time slot when all I prepared was 30 minutes. Ok, time to write some more. #rubykaigi
- Panic! Maybe I'll talk about metric_fu a bit. #rubykaigi
I must have looked at that schedule 20 times and never realized that I had an hour slot. Everyone else had 30 minutes so I thought I did too.
- Attendees of "The Importance and Implementation of Speedy Tests" will also get "Metrics Based Refactoring" at no additional cost! #rubykaigi
I did something I almost never do: Look at crisis as an opportunity (crisi-tunity). I had to write "Metrics Based Refactoring" anyway for Windy City Rails so why not write it now. In less than 4 hours. While watching my friends present at a conference. Looking over those sentences now I can't believe I didn't freak out.
- Ted Han used publicly available data to settle reviewing bais accusations against "The Edge" of hating the PS3 #rubykaigi
- Turns out there was no bais. Math to the rescue! #rubykaigi
- bais? bias? baise? no idea.
You are probably not surprised to find out that I can't spell. Even Eito Katagiri, who did a wonderful job translating my slides, found a bunch of spelling errors and English is not his first language.
- I just pulled out a table in the main hall and the table police where all over me. My mistake. Sorry. #rubykaigi
There were announcements everywhere about not doing this and yet I did. In my defense: I'm an idiot.
- They're giving out an award to the person who committed most to Ruby 1.9.2: Yusuke Endoh #rubykaigi
A very nice gesture. Lots of class here at Ruby Kaigi.
Time for Matz's keynote!
- Matz is talking about Ruby 2.0... again. #rubykaigi
This topic is a staple of Matz's speaking career. I think the first time I saw him talk, years ago, he was talking about Ruby 2.0. Someday...
- "Right now ruby is just good enough" - Matz #rubykaigi
- Matz hates local variable propagation (the lack thereof) but no one else seems to care so he's abandoning it. #rubykaigi
- Ruby's private is not private: it can be accessed from subclasses and overridden by accident #rubykaigi
- Monkey patching modifies the class globally. #rubykaigi
- Classbox is the solution to global monkey patching #rubykaigi
Lots of talk about the mysterious 'classbox.' What is it? Well here's a paper on the subject:
And some pertinent lines from the abstract:
...Unfortunately existing approaches suffer from various limitations. Either class extensions have a global impact, with possibly negative effects for unexpected clients, or they have a purely local impact, with neg- ative results for collaborating clients. Furthermore, conflicting class extensions are either disallowed, or resolved by linearization, with consequent negative effects. To solve these problems we present classboxes, a module system for object-oriented lan- guages that provides for method addition and replacement. Moreover, the changes made by a classbox are only visible to that classbox (or classboxes that import it), a feature we call local rebinding. To validate the model we have implemented it in the Squeak Smalltalk environment, and performed benchmarks.
Now for more Ruby 2.0 preview:
- 5/2 => 2 should be 2.5 or 5/2 (rational) #rubykaigi
- Inheritance in ruby is more for connivence than for other merits #rubykaigi
- Matz is thinking about moving mix-ins to a traits like solution which would have conflict detection (unintentional overrides) #rubykaigi
- You could declare the 'mix' and specify how to deal with conflicting methods. #rubykaigi
- mix Foo, [:*] would copy all constants from the mix, or you can specify which ones you want and rename them #rubykaigi
- mix raises error on method/constant name conflict or removing #rubykaigi
- From Matz's slides "Ruby 2.0, just started, small step from 1.9, should be done soon" #rubykaigi
- Ruby 2.0: Traits, Classbox, Keyword arguments, a few other nifty features #rubykaigi
- There some fierce discussion going on in IRC about the proposed changes in Ruby 2.0 #rubykaigi
The debate on 'mixes' got pretty hot and heavy. Keep in mind that all this IRC chatter is displayed behind Matz while he was giving his keynote because the translations are done in IRC. So you'd be reading a translation of what he said right along with people discussing it.
- My presentation on "Speedy Tests" and "Metrics Based Refactoring" starts at 13:30 (10 min) in room 200 #rubykaigi
- The 'slides' from my presentation on "Speedy Tests" http://is.gd/eHNTN #rubykaigi
I think the talk went very well. Especially considering that I wrote the second half fairly fast.
- I just disparaged integration tests in favor of unit tests. Next up is @p_elliott talking about how he only does integration #rubykaigi
- .@p_elliott does a lot of things to make his integration test fly. I would like to see one of their suites. I could learn a lot. #rubykaigi
So I asked Paul how long their suites take and he said that they develop on 8 core machines and use Specjour to utilize 4 more cores so they tend to run between 5-8 minutes. Pretty damn fast for full stack integration testing.
- Hey, someone else made the 30 minutes vs. 60 minutes mistake. I feel better now. #rubykaigi
Except he found out at the end of his presentation when he asked: "How much time do I have left?" and go the response: "25 minutes." Yipes. Luckily there were a lot of questions.
- .@nusco did a really good job explaining the basics of Ruby metaprograming
- RT @sudhindraRao Whatever works in #java does not work in #ruby. Even huge classes are maintainable. @rubykaigi
- .@nusco's favorite metaprogramming trick is method_missing. I thought he was kidding but he was not. #rubykaigi
When he said method_missing I grabbed the microphone back and responded: "Really?" I couldn't help myself. I tend to avoid method_missing. There's usually a way to do what you want with other programming tricks.
- Modules are extremely decoupled and can be tested in isolation so they are very flexible @nusco #rubykaigi
Good point.
- Lightning Talks! I'm excited! #rubykaigi
Talking very fast does not lend itself to translation. But still they were very cool. Even better there was a lady in a kimono who would 'gong' you if you ran out of time.

That is awesome.
After the lightning talks a few of us went back to the hotel to drop our things of before the party and we ran smack into this huge festival that happens once a year in Tsukuba. Here are some pics:


The party was super nice. And they had a fantastic spread of wonderful foods and drinks.
Posted 6 days back at mir.aculo.us - Home
It seems that Google Chrome is getting all the develope [...]
Posted 6 days back at Segment7
dnssd version 1.3.2 has been released!
DNS Service Discovery (aka Bonjour, MDNS) API for Ruby. Implements
browsing, resolving, registration and domain enumeration. Supports
avahi’s DNSSD compatibility layer for avahi 0.6.25 or newer.
Changes:
Posted 6 days back at Jake Scruggs
Here I am in Japan at RubyKaigi 2010. Wow. Generally I tweet a lot about the conf live and then publish those tweets here (in italics) and provide slightly more commentary. So lets get it on.
- So my flight leaves at noon for #rubykaigi, takes 13 hours, and arrives at 3pm tomorrow... Wait -- that can't be right. #looksitupagain
- Before today's trip to Japan the furthest from the U.S.A. I've ever been is: Canada. #howisthatpossible
- In cab. It has begun.
- Someone once said "If you've never missed a flight you're spending too much time in airports" #atgate2hoursearly
Yep - can you feel the panic in those first couple of tweets? I was totally freaked out. The actual trip turned out to be easy. I met up with Chad Fowler, Yehuda, and Woody at the airport and we took a bus straight to Tsukuba. I went to an exotic foreign land and the first thing I did was take a bus through 100 minutes of strip malls. But I was in Japan. And Yehuda held forth on 'snowmen' and encodings for most of the way so that was interesting.

- So it's 7:15 am in Chicago, meaning I've been up for over 24 hours. So that's like 36 old man hours.
- My first meal in Japan was near 60 bucks. And I'm not even in Tokyo yet. I'm gonna need a bigger wallet.
- Also, I almost got run over by not one, but two bicyclists using cell phones to text.
- And 7-11's are everywhere.
So I survived the first day and even had an excellent dinner. It was a bit pricey but worth it. Many thanks to Makoto Inoue for helping organize this get together - it was exactly what I needed.
- Donuts are cute in Japan: http://is.gd/eFXCR

Ate second breakfast/lunch at "Mr. Donut" which is really nice here in Japan. Of course you can get noodles.
- Good news: #rubykaigi has a non-freezing temperature. I was worried it would be 91 outside and 50 inside. Which tends to make me sick
- Some nice low-key techno playing in the #rubykaigi main convention hall.
- RT @headius Ruby 1.8.8 will release this year and be the last 1.8 release. Some debate still about whether to backport 1.9.2 features. #rubykaigi
Ah, Charles got to got to the secret Ruby Core meeting so he's in the know. Actually I could have probably gone too but I wasn't sure if just anyone was allowed.
- Btw, the advice I received to stay up as long as possible after my flight to Japan was good. Feeling no jet-lag.
- I adjusted my Japanese rent-a-phone to display am/pm and now it reads "0:32pm" I guess they really like military time here
It's the little things that are the most endearing.
- Getting an introduction to #rubykaigi in japanese with translations coming in IRC which is displayed on side screens. #lag

- Next up at #rubykaigi is a panel on Rails 3/ Ruby 1.9.2 (replacing canceled keynote)

- Ah, the translations are back. Mostly. #rubykaigi
- RT @headius I can't decide if it will be more or less exhausting to attend three days of conference sessions I can't understand :) #RubyKaigi
- .@wycats is fearless - he's critiquing Ruby 1.9.2 while sitting 5 feet from matz on stage
So Leonard was doing the translation from Japanese to English and Matz was doing the translation from English to Japanese which lead the a moment where Matz had to translate Yehuda's (nice) criticism of Ruby 1.9.
- One of things @tenderlove really likes about 1.9 is using encodings is painless. You have to think about it but it's easy. #rubykaigi
- Secret to getting commit rights on Ruby or Rails? Submit patches with tests over a consistent period. #rubykaigi
- .@tenderlove doesn't think that ActiveRecord got the same amount of love that ActiveSupport did in Rails 3. #rubykaigi
- Specifically @tenderlove doesn't like ActiveRelation's integration in ActiveRecord in Rails 3. "It needs help" #rubykaigi
- .@wycats' response: "There's always 3.1" #rubykaigi
- .@tenderlove feels less able to bounce around the whole project when developing on Ruby as compared to Rails. #rubykaigi
- .@wycats brought up something for Ruby core, saw a lot of discussion referencing his name but he could not participate. #rubykaigi
Ah the perils of trying to develop across (real) languages.
- Wait, Sarah's talk is going to be in Japanese? #rubykaigi
- Oh, just the first part -- well done. #rubykaigi
She learned a lot of Japanese just for this presentation. Good for her.
- Rails wrapping of Javascript is kind of a disaster - mostly because javascript is changing fast. #rubykaigi
Good point - I hadn't really thought about why wrapping SQL works so well while wrapping Javascript works out so poorly.
- Step one to writing testable Javascript: Get it out of the view. #rubykaigi
- Pivotal uses Jasmine to test their Javascript: Bdd/RSpec like syntax and no dom is required. Can run in browser or headless. #rubykaigi
- There's no time between sessions to escape one and go to another. Good thing I don't mind appearing rude. #rubykaigi
Picture a lot of me saying "Excuse me" to people who don't understand english.
- OH "Social games are just CMS with bad UI's" #rubykaigi
That's really funny.
- MySql 5 only supports 3 bytes for UTF8. huh. #rubykaigi
- A 'u' with an umlaut is two code points that represent one character. #rubykaigi
- UTF8 and UTF16 are both encodings of unicode. #rubykaigi
- In Ruby 1.8 and C a string is just an array of bytes. #rubykaigi
- "Corruption is normal" - @wycats #rubykaigi
- force_encoding is not the way. If you have to use it you probably have a deeper problem. #rubykaigi
- Dear internet: Take all sweeping statements with a grain of salt.
Two sessions in a row on encodings. We all feel like we need to know more about encodings. And then we ignore that feeling until it bites us in the ass.
- jugyo has a lot of Growl-themed ideas. #rubykaigi
- Had an outbreak of super-sleepiness. Purchased a strange energy drink from an even stranger vending machine and I'm good. #rubykaigi
- TermColor can do blink! Now that's progress. #rubykaigi
- Cinatra is Sinatra for command line apps. #rubykaigi
- "write code like writing blog entries" - jugyo #rubykaigi
Watching Jugyo talk is always entertaining - I loved his lightning talk at last years Ruby Conf.
- .@tenderlove has changed into a crappy suit -- It's business time! #rubykaigi
- And headgear? #rubykaigi

That, my friends, is awesome. I can't compete in shear crazy and acknowledge my superior.
- The number of languages (code) vs. the number of languages (speak) is completely off. #rubykaigi
- "People are interpreters with forgiving parsers." - @tenderlove #rubykaigi
- .@tenderlove enjoys programming the most at hack nights. Challenging and fun. #rubykaigi
- PHP and Ruby living together: Webrick serving up WordPress. You are one weird dude @tenderlove #rubykaigi
Webrick serving up PHP WordPress. Think about that for a moment.
- Making some last minute changes to my #rubykaigi presentation: "Speedy Tests" Come see it tomorrow at 13:30 in room 200
Hey, I just found out I have an hour time slot when I had thought I was going to present for 30 minutes. I guess the crowd is going to get some bonus metric_fu coverage. As I'm going to present in 4 hours I better go write some more content. Panic!
Posted 6 days back at mir.aculo.us - Home
Yarrrr!! Meet Captain Track, the awesome animated CSS3 [...]
Posted 6 days back at InfoQ Personalized Feed for unregistered user - Register to upgrade!
A unique university program of education in software and systems design has been restarted at New Mexico Highlands University. The program is based on experiential learning, features apprenticeships, and uses a radically restructured and accelerated curriculum. The program goal: "to produce a community of professionals capable of solving complex, "wicked," problems with computing technology. By Dave West