<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss version="2.0"><channel><title>English - AkitaOnRails.com</title><link>http://www.akitaonrails.com/english</link><language>en-US</language><managingEditor>fabioakita@gmail.com (Fabio Akita)</managingEditor><lastBuildDate>Wed, 18 Nov 2009 07:46:21 PST</lastBuildDate><generator>AkitaOnRails http://www.akitaonrails.com</generator><description></description><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/AkitaOnRailsEnglish" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Chatting with Adam Jacob</title><link>http://akitaonrails.com/2009/11/18/chatting-with-adam-jacob</link><pubDate>Wed, 18 Nov 2009 07:46:21 PST</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5229</guid><description>&lt;div style="float: left; margin: 3px"&gt;&lt;img src="/assets/2009/11/18/Opscode_logo_final_full_aspect_medium_original.png" alt="" /&gt;&lt;/div&gt;&lt;p&gt;Configuration Management is a tricky subject. For non-starters, when you&amp;#8217;re a developer and you have few boxes to take care of, you can usually get away with just managing them manually. People are probably just used to pop in a CD, double-click the &amp;#8220;install&amp;#8221; program and click &amp;#8220;next&amp;#8221;, &amp;#8220;next&amp;#8221; until the end, then you manually log in to backup (when you remember it), and sometimes you do apply some security updates when you remember about them. &lt;/p&gt;
&lt;p&gt;But then you have more than a dozen machines, things start to get uglier, you end up making more mistakes, forgetting important steps, and all of a sudden managing machines become a nightmare. You end up being woken up in the middle of the night because you forgot to install some crucial component, and so on and so forth.&lt;/p&gt;
&lt;p&gt;The same way you need testing, continuous integration tools when you&amp;#8217;re a developer, you also need automated, reliable and flexible tools for the system administrator role. That&amp;#8217;s where tools such as &lt;strong&gt;Chef&lt;/strong&gt; kick in to help.&lt;/p&gt;
&lt;p&gt;From &lt;a href="http://opscode.com/"&gt;Opscode Inc.&lt;/a&gt;, we have &lt;a href="http://twitter.com/adamhjk"&gt;Adam Jacob&lt;/a&gt; (&lt;span class="caps"&gt;CTO&lt;/span&gt;) and &lt;a href="http://twitter.com/jesserobbins"&gt;Jesse Robbins&lt;/a&gt; (&lt;span class="caps"&gt;CEO&lt;/span&gt;) to talk about the new contender in the automated system administration field, &lt;a href="http://www.opscode.com/chef/"&gt;Chef&lt;/a&gt;, already in use by many companies which are striving with the cutting edge to maintain their datacenters.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; To kick start this interview, it would be great to have more background info about you guys. So, how did you end up in the configuration management space?&lt;/p&gt;
&lt;div style="float: right; margin: 3px"&gt;&lt;img src="/assets/2009/11/18/adam_jacob_original_original.png" alt="" /&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Adam:&lt;/strong&gt; I&amp;#8217;ve been a systems administrator for 13 years, and for a majority of that time I was working for companies who did a lot of mergers and acquisition work.  Every couple of months we would acquire a new company, and it was my job to help figure out how to absorb those companies into the whole.  I got really good at looking at an application I had nothing to do with creating, and figuring out what needed to be done to make it scale (or at least make it run.)&lt;/p&gt;
&lt;p&gt;One thing we couldn&amp;#8217;t do was tell the people who had built the applications that they needed to be radically altered (in many cases, they weren&amp;#8217;t even around anymore.)  What that meant in practice was we needed to have a very flexible, modular underlying architecture &amp;#8211; everything we did had to be in service of the application, not the other way around.  By necessity that meant becoming a tools developer &amp;#8211; if we didn&amp;#8217;t have the tools we needed, we would never be able to do the job in front of us.&lt;/p&gt;
&lt;p&gt;Eventually I co-founded a consulting firm called &lt;span class="caps"&gt;HJK&lt;/span&gt; Solutions.  We built fully automated infrastructure for startups &amp;#8211; everything from OS installation to application deployment, all fully automated (including Identity Management, Monitoring and Trending, etc.)  Over the course of the next two years we built infrastructure for 12 different startups, whose products ranged from electrical car fleet management to online dating.&lt;/p&gt;
&lt;p&gt;So I come to configuration management through the trenches &amp;#8211; as a line-level systems administrator trying to make my life easier, as a consultant helping others to reap the benefits, and now as a tool builder trying to move the state of the art forward.&lt;/p&gt;
&lt;div style="float: right; margin: 3px"&gt;&lt;img src="/assets/2009/11/18/Jesse_Robbins_original_original.png" alt="" /&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Jesse:&lt;/strong&gt; Jesse Robbins is &lt;span class="caps"&gt;CEO&lt;/span&gt; of Opscode (makers of Chef) and a recognized expert in Infrastructure, Web Operations, and Emergency Management. He serves as co-chair of the Velocity Web Performance &amp;amp; Operations Conference and contributes to the O&amp;#8217;Reilly Radar. Prior to co-founding Opscode, he worked at Amazon.com with a title of &amp;#8220;Master of Disaster&amp;#8221; where he was responsible for Website Availability for every property bearing the Amazon brand. Jesse is a volunteer Firefighter/&lt;span class="caps"&gt;EMT&lt;/span&gt; and Emergency Manager, and led a task force deployed in Operation Hurricane Katrina. His experiences in the fire service profoundly influence his efforts in technology, and he strives to distill his knowledge from these two worlds and apply it in service of both.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What&amp;#8217;s the story behind Opscode, what&amp;#8217;s its mission, and what&amp;#8217;s the story for Chef&amp;#8217;s creation?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Opscode:&lt;/strong&gt; The story behind Opscode really starts when we met Jesse.  He had written an article for O&amp;#8217;Reilly Radar about &lt;a href="http://radar.oreilly.com/2007/10/operations-is-a-competitive-ad.html"&gt;Operations being the new secret sauce&lt;/a&gt; for startups.  He and I met for coffee, became friends, and stayed in touch.  Jesse understands operations culture at a visceral level, and he&amp;#8217;s very well connected to a huge community of like-minded people that I didn&amp;#8217;t even know existed.&lt;/p&gt;
&lt;p&gt;As our consulting company grew, we reached a crossroads &amp;#8211; we clearly had a nice business going, and it wasn&amp;#8217;t difficult for us to find more work.  What was difficult was finding people who had the skills to actually deploy a new infrastructure, and to adapt the stack we had developed for a new application.  We couldn&amp;#8217;t avoid the fact that there was a couple of weeks of very high-touch work that was required to get the entire infrastructure up and running for a new client.&lt;/p&gt;
&lt;p&gt;We tried to recruit Jesse during this period, since he was one of those rare people who could do that initial high-touch engagement.  He turned us down &amp;#8211; primarily because he saw what we did: we could build a consulting company that was huge, but it would still be down to us in the trenches every day.  Unless we could get over that hump, there were probably less stressful ways to make a living. :)&lt;/p&gt;
&lt;p&gt;So we started looking at what was stopping us from being able to get that initial part of the engagement done as quickly as possible.  What was stopping us from literally having a customer fill out a questionnaire, and letting that data drive 95% of the decisions about the infrastructure?&lt;/p&gt;
&lt;p&gt;It turned out the answer was, in a word, &amp;#8220;everything&amp;#8221;.  The entire stack of open source tools we were using had been built in a different era, and they saw the world through a very different lens. We needed everything to have an &lt;span class="caps"&gt;API&lt;/span&gt;, we needed everything to be more open with it&amp;#8217;s data, and we needed everything to be flexible enough to handle the next evolution of application architectures (whatever that may be.)&lt;/p&gt;
&lt;p&gt;Once we had that revelation, the next step was figuring out what a &amp;#8216;new stack&amp;#8217; would really look like.  If we could start from scratch, what would we take with us, and what would we leave behind? Amazon had done such a great job showing us what an &lt;span class="caps"&gt;API&lt;/span&gt; over the bootstrapping process could look like, and the kind of benefits that could be had from the approach.  So assuming something like that existed for bootstrapping, what about the next layer of the stack (configuration)?&lt;/p&gt;
&lt;p&gt;We started experimenting with Chef during this period of questioning. We started working on Chef with the goal of putting ourselves out of business &amp;#8211; making the barrier to entry to having a fully automated infrastructure so low that any developer or systems administrator could just do it.  We built a prototype, showed it to Jesse, and he agreed to come on board.&lt;/p&gt;
&lt;p&gt;Opscode was born then, and our mission came out of those experiments: we are bringing Infrastructure Automation to the Masses.  We want to tear down the barriers to entry that stop people from having really great, repeatable, automated infrastructure.  Our role is to bring developers and systems administrators the best tools possible, so that they can build the systems they have always wanted.&lt;/p&gt;
&lt;p&gt;We raised 2.5 million from &lt;span class="caps"&gt;DFJ&lt;/span&gt; in January of 2009 on that vision, and have been at it ever since.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; I&amp;#8217;d like to say that only amateur sysadmins do everything manually, but I think most small to medium corporations at least still do everything manually or with random scripts spread all over the place. The notion of &amp;#8220;configuration management&amp;#8221; is still new to a lot of people. Could you briefly explain what it is, and why it is important?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Opscode:&lt;/strong&gt; To me, &amp;#8220;Configuration Management&amp;#8221;, at it&amp;#8217;s core, is all the stuff you have to do to take a system from &amp;#8220;running an operating system&amp;#8221; to &amp;#8220;doing it&amp;#8217;s job&amp;#8221;.  When a systems administrator configures a system by hand, and posts her notes on a Wiki, she&amp;#8217;s practicing the most primitive form of Configuration Management.&lt;/p&gt;
&lt;p&gt;Now, having those notes is better than nothing &amp;#8211; when she needs to do that task again, she can at least go back and read them to remember what she did last time.  She still has to do it over again, though &amp;#8211; and the repetition gets tiresome.  So she starts writing scripts that encapsulate that knowledge in code, so that now she only has to run a series of smaller commands.&lt;/p&gt;
&lt;p&gt;Time passes, though, and entropy sets in.  The systems begin to drift from where they were when the systems administrator wrote the scripts. Next thing you know, the scripts don&amp;#8217;t run anymore, or if they did, the configuration they build is wrong.  Our intrepid admin then starts editing the scripts, or making new ones, to deal with the system when it&amp;#8217;s in this new state.  This is the stage we call &amp;#8220;tool sprawl&amp;#8221; &amp;#8211; you have a tool for each different phase of a systems observable life-cycle.&lt;/p&gt;
&lt;p&gt;Modern configuration management tools solve this problem by providing a framework for describing the final state a system should be in, rather than the discrete steps we should take to get there at any given time.  Rather than writing a script that lists the commands to install Apache, write the configuration file, and start the service, you would describe that &amp;#8220;apache should be installed&amp;#8221;, the configuration file &amp;#8220;should look like this&amp;#8221;, and the service &amp;#8220;should be running&amp;#8221;.&lt;/p&gt;
&lt;p&gt;When the configuration management system runs it looks at each of these descriptions individually, and makes sure that they are in the proper state.  We no longer care what the initial state of the system is &amp;#8211; the configuration management system will only take action at each step in the process if the system is not in the state you described. If you run it again, and nothing has changed, the system takes no action.  (Configuration management geeks call this property &lt;a href="http://en.wikipedia.org/wiki/Idempotence"&gt;idempotence&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;This means that you can describe your systems once in code, and as they change over time, simply update that code to reflect what you want the state of those systems to be.  The impact of this model on the daily life a systems administrator cannot be overstated &amp;#8211; it makes everything easier.&lt;/p&gt;
&lt;p&gt;It also has huge impacts outside the systems administrators world. You now have a living document that describes how all your servers are configured &amp;#8211; you can share it, you can put it in revision control, you can print it out for an auditor.  Business processes that previously required manual intervention frequently can be boiled down to discrete changes.  The more you work in this way, the more the impacts spread throughout the organization.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Even though the Ruby community probably compares Chef to Puppet, I think one of the most widely used system is CFEngine2. How does Chef compare with CFEngine2?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Opscode:&lt;/strong&gt; Cfengine 2 is where almost everyone in the configuration management world cut their teeth.  Mark Burgess is responsible for the academic papers that outlined the idea that each part of the system should be idempotent, and his work in studying how real-world systems can be managed at scale has done more to impact the evolution of configuration management than any other individual.&lt;/p&gt;
&lt;p&gt;In addition to the idea of idempotent resources, Burgess introduced the larger concept of &amp;#8220;convergence&amp;#8221;.  The basic idea here is that if you have the description of how every finite resource should be configured, given enough time, those resources will bring the system into a compliant state.  The order in which the resources run fundamentally does not matter &amp;#8211; eventually, they will all wind up in the right place.&lt;/p&gt;
&lt;p&gt;While this model works at a fundamental level, it has some pretty dramatic inefficiencies.  Cfengine applies resources based on their type &amp;#8211; all the files are managed at once, then all the services, then all the packages.  You can control the order they are run with the &amp;#8216;actionsequence&amp;#8217;, but each system gets only one order.  So if you need to have a file copied, a package installed, and a service restarted, it&amp;#8217;s easy enough to model.  When you start getting into more complex configurations, however, it becomes more and more difficult to get an actionsequence assembled that allows you to configure your entire system in a single run.&lt;/p&gt;
&lt;p&gt;This is not a bug in Cfengine &amp;#8211; it&amp;#8217;s by design.  Convergence is the answer &amp;#8211; it&amp;#8217;s okay that it has to run more than once, it will get there eventually.  If you are thinking too much about the order things should happen in, you&amp;#8217;re probably not thinking about idempotent descriptions.&lt;/p&gt;
&lt;p&gt;In my experience, though, this was frustrating at scale.  It meant that the amount of time it took to configure a system increased as the configuration became more complicated, and your ability to model complicated interactions in the system became increasingly opaque.&lt;/p&gt;
&lt;p&gt;For the era in which it was written, this problem mattered a lot less. If it takes you 6 to 8 weeks to get a server even ordered, then another week to get it racked, stacked, and the OS installed, the fact that Cfengine needs to run 3 times to configure it doesn&amp;#8217;t matter very much. (You have lots of bigger problems!)  In a world where many of us can go from bare-metal to running operating system in 5 minutes, either via our own install systems or an &lt;span class="caps"&gt;API&lt;/span&gt; call to &lt;span class="caps"&gt;AWS&lt;/span&gt;, it starts to matter a whole lot.&lt;/p&gt;
&lt;p&gt;Chef takes a different approach.  We start with the idea of an idempotent &amp;#8220;resource&amp;#8221; &amp;#8211; a package, a service, etc.  We add the idea of &amp;#8220;actions&amp;#8221; &amp;#8211; these are all the different states you might want to request a resource to be in.  Then you put these resources into &amp;#8220;recipes&amp;#8221;, which are evaluated in the order they are written. You can then have recipes rely on other recipes having completed before they are run, giving you the ability to say &amp;#8220;make sure Apache is installed before you configure my Web Application&amp;#8221;.&lt;/p&gt;
&lt;p&gt;The goal is that, with Chef, you can always bring the system into the proper state with a single Chef run.  It sees convergence as a response to a bug &amp;#8211; a system that is 1/2 configured is, in fact, broken.  If the cause of the bug is environmental &amp;#8211; a network service is not available, for example &amp;#8211; then running Chef again will likely fix things.  If the issue is that you haven&amp;#8217;t specified the order that you want resources to be configured in, though, then it&amp;#8217;s a bug in your recipes.  If you can&amp;#8217;t write a recipe to configure your system in a single Chef run, it&amp;#8217;s a bug in Chef.&lt;/p&gt;
&lt;p&gt;This also has side-effects for reasoning about the system at scale. Given the same configuration and attributes, Chef will always behave the same way, on every system.  As you add more and more things to the system, it&amp;#8217;s still easy to reason about when, and how, they will be configured.&lt;/p&gt;
&lt;p&gt;Interestingly enough, Cfengine 3 implements a system that is very similar to Chef.  Rather than a single global actionsequence, it uses a &amp;#8216;bundlesequence&amp;#8217;, where bundles are roughly analogous to Chef&amp;#8217;s concept of a recipe.&lt;/p&gt;
&lt;p&gt;Another major difference is that Chef allows you to &amp;#8216;look up&amp;#8217; at your entire infrastructure when configuring a system.  This ability comes in handy when you want to do things like configure a monitoring system, or a load balancer.  You can ask Chef questions like &amp;#8220;what are all the servers running my application in production&amp;#8221;, and use the response to configure your system. (You can see an example of this on &lt;a href="http://www.opscode.com/blog/2009/10/07/preview-chef-0-8-and-the-opscode-platform/"&gt;our blog&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;From a systems architecture point of view, Chef and Cfengine are actually fairly similar.  They both push the majority of the hard work of configuring a system out to the systems themselves.  This is highly advantageous at scale &amp;#8211; the Chef and Cfengine servers are really glorified file transfer systems.&lt;/p&gt;
&lt;p&gt;We differ pretty deeply on our approach to what a language for configuration management should look like, but I&amp;#8217;ll talk more about that in a later question.&lt;/p&gt;
&lt;p&gt;Cfengine is at work in some of the largest data centers in the industry, and it fundamentally altered the landscape of systems management.  While it&amp;#8217;s not the tool I want anymore, you can&amp;#8217;t understate the impact it&amp;#8217;s had on the design of every configuration management tool that came after it &amp;#8211; including Chef.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Chef has a lot of components to it. Could you briefly describe all the main components that work together? The client side, the server side, cookbooks?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Opscode:&lt;/strong&gt; Sure!  The most important part of Chef is the cookbooks &amp;#8211; they are where you actually describe your configuration.  They collect recipes, and all the assets needed for the recipe to run (files, templates, etc.).  &lt;a href="http://cookbooks.opscode.com"&gt;Cookbooks&lt;/a&gt; are very often share-able, and lots of cookbooks already exist.&lt;/p&gt;
&lt;p&gt;Chef can run your cookbooks in two modes &amp;#8211; a client/server mode (chef-client), or a stand-alone mode (chef-solo).  When you run chef-solo, you pass a &lt;span class="caps"&gt;URL&lt;/span&gt; to a tarball full of the cookbooks you want to have run.  There is no more infrastructure than that &amp;#8211; put your tarballs someplace you can download them, and go nuts.&lt;/p&gt;
&lt;p&gt;In client/server mode, each Chef client is configured to talk to a Chef Server.  The Server stores information about each client (a whole lot of it &amp;#8211; things like IP addresses, loaded kernel modules, and more), and distributes the cookbooks they need to configure themselves.  It also provides a &lt;span class="caps"&gt;REST&lt;/span&gt; &lt;span class="caps"&gt;API&lt;/span&gt; and an interactive Web UI, so you can easily alter the configuration of your systems centrally. Finally, all the data the server collects is indexed and searchable &amp;#8211; you can then use this in your recipes to configure services that require complex, dynamic configuration. (Some examples would be dynamically discovering a master MySQL server, or finding all the memcached servers in a cluster)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What would you say about Chef&amp;#8217;s maturity? CFEngine has more than a decade of usage, which is difficult to beat. Would you say that it&amp;#8217;s &amp;#8220;mature enough&amp;#8221;? Meaning, it&amp;#8217;s already in production in companies of many sizes, its APIs don&amp;#8217;t change too much and my cookbooks will probably work if I upgrade to newer version of Chef?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Opscode:&lt;/strong&gt; Chef is a little over a year old &amp;#8211; it was first released to the public on January 15th, 2009.  Since then, 42 different developers have committed to the &lt;a href="https://www.ohloh.net/p/opscode-chef/factoids/2025809"&gt;project&lt;/a&gt;, around 5 of whom work for Opscode.  It&amp;#8217;s been in production use in the Engine Yard Cloud from the day it was released.  Since then, it&amp;#8217;s seen adoption by companies and universities of all different sizes, from small startups to huge enterprises with very heavy compliance requirements.&lt;/p&gt;
&lt;p&gt;So it&amp;#8217;s definitely &amp;#8220;mature enough&amp;#8221; for real world use &amp;#8211; lots of people are using it, and relying on it, every day.  Balancing that knowledge with the reality that the project is fast moving and evolving is important, and we try and do it in a number of ways:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;The recipe syntax is considered basically &amp;#8220;complete&amp;#8221;.  If we do make changes, they are backwards compatible to previous Chef releases. Short of something truly amazing coming along that radically alters the shape of the universe, this will remain true.&lt;/li&gt;
	&lt;li&gt;We test a lot.  Chef has over 2000 unit tests, and functional tests that cover the entirety of the &lt;span class="caps"&gt;REST&lt;/span&gt; &lt;span class="caps"&gt;API&lt;/span&gt;, and much of the individual resources (we&amp;#8217;re aiming for 100% feature test coverage.) There are more lines of code testing chef than there are lines of code in Chef proper.&lt;/li&gt;
	&lt;li&gt;If we do break backwards compatibility, we try and make it happen only when we bump the minor revision.  If you have an 0.7.x version of Chef installed, it should always work with other versions of Chef in the same release cycle.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Most of the work in Chef currently is around adding more functionality, not in changing the way existing functionality works. It&amp;#8217;s safe to use Chef today &amp;#8211; in the future, you&amp;#8217;ll just keep getting more good sauce to add to the mix, rather than having to deeply re-factor the way you do things.&lt;/p&gt;
&lt;p&gt;Finally, the Chef Community is truly epically great &amp;#8211; we have lots of people who are spending significant amounts of their time with Chef. Even if they aren&amp;#8217;t contributing code, they are answering questions, they are writing documentation, they are hanging out on &lt;span class="caps"&gt;IRC&lt;/span&gt; and offering you cupcakes.  It&amp;#8217;s a group of people that are focused on solving real world problems, and helping each other to do the same. It&amp;#8217;s by far what I&amp;#8217;m proudest of, and I think it has a significant impact on whether Chef is ready for prime time.  The bench is really, really deep.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Chef uses Ruby directly, which some would say it&amp;#8217;s both a blessing and a curse. It&amp;#8217;s probably perfect for Rubists, but I feel that most sysadmins are used to Bash, Python and are not very flexible on change. Why did you choose to use Ruby instead of a simpler language?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Opscode:&lt;/strong&gt; The answer to the question of why we use Ruby directly for the configuration language comes in two parts: why we extended a 3GL rather than build a declarative &lt;span class="caps"&gt;DSL&lt;/span&gt; or a complete modeling language, and why we chose Ruby as that 3GL.&lt;/p&gt;
&lt;p&gt;First, why we extended a 3GL.  Tools like Cfengine and Puppet build a declarative &lt;span class="caps"&gt;DSL&lt;/span&gt; for configuration management &amp;#8211; a custom language, which provides a model within which systems administrators or software developers can work to automate their system.  Other tools like Elastra&amp;#8217;s &lt;span class="caps"&gt;EDML&lt;/span&gt; and &lt;span class="caps"&gt;ECML&lt;/span&gt;, OpsWare&amp;#8217;s &lt;span class="caps"&gt;DCML&lt;/span&gt;, or Bcfg2 give you an &lt;span class="caps"&gt;XML&lt;/span&gt; schema to describe how the system should behave.&lt;/p&gt;
&lt;p&gt;The issue with these approaches is that, by definition, they must build an abstraction for every task the end-user may want to perform: an impossible feat.  The level of complexity inherent in automation, coupled with the inability to break out to 3GL language constructs when necessary, result in a system that can only target a subset of the total complexity, rather than enable users to find innovative solutions to their specific problems. By leveraging Ruby, adding support for other use cases is a matter of adding new sets of base classes while maintaining consistency and approachability in their interface design, because the full scope of the language is available.&lt;/p&gt;
&lt;p&gt;Our goal with Chef was to keep the simplicity that comes from having the focus be on idempotent resource declaration, while giving you the flexibility of a full 3GL.  In practical terms, anything you can do with Ruby you can do with Chef &amp;#8211; and since Ruby is a 3GL, that amounts to essentially anything.&lt;/p&gt;
&lt;p&gt;Larry Wall, the creator of Perl, has a quote that I love:&lt;/p&gt;
&lt;blockquote&gt;&amp;#8220;For most people the perceived usefulness of a computer language is inversely proportional to the number of theoretical axes the language intends to grind.&amp;#8221;&lt;/blockquote&gt;
&lt;p&gt;Since we wanted Chef to have the maximum amount of usefulness, we have actively tried to remove as many theoretical axes as possible &amp;#8211; a belief that we can imagine the total breadth of the problem space being one of them.  There is more than one way to do it with Chef, and the only valid criteria for rating the success of your automation project is whether it solves your problems in a reliable way.&lt;/p&gt;
&lt;p&gt;In practice, you need to know very little Ruby to use Chef. Here is an example of installing the program &amp;#8220;screen&amp;#8221;:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;package &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;screen&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="r"&gt;do&lt;/span&gt; &lt;tt&gt;
&lt;/tt&gt;  action &lt;span class="sy"&gt;:install&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;The same thing in Puppet:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;package { &amp;quot;screen&amp;quot;: &lt;tt&gt;
&lt;/tt&gt;  ensure =&amp;gt; present &lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;And in Cfengine 2:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;packages:&lt;tt&gt;
&lt;/tt&gt;  screen action=install&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;While all of these systems require learning the syntax, at a base level, there isn&amp;#8217;t much difference between them in terms of raw learning required.  The difference is that when you hit a limitation in Chef, you have the ability to innovate easily, and when you hit those same limitations in other tools, you do not.&lt;/p&gt;
&lt;p&gt;We chose Ruby because of it&amp;#8217;s fairly unique ability to create new syntax easily.  Tools like Rspec are fine examples of ways you can manipulate Ruby for fun and profit that are very difficult to duplicate in other tools.  We wanted to make sure that, even though you were &amp;#8220;in&amp;#8221; a 3GL, you didn&amp;#8217;t have to go through any extra hoops to make the simple things work.  Ruby was the language that I was comfortable enough in, that I knew had the ability, to make that a reality.&lt;/p&gt;
&lt;p&gt;That said, one of our goals is to extend the ability to write Chef recipes into other 3GL&amp;#8217;s.  We have an example of doing this already with Perl &amp;#8211; and we made no changes to the Chef source to accomplish it.  You can see the &lt;a href="http://search.cpan.org/~holoway/Chef-0.01/lib/Chef.pm"&gt;demo here on &lt;span class="caps"&gt;CPAN&lt;/span&gt;&lt;/a&gt;.  It works by using Chef&amp;#8217;s &lt;span class="caps"&gt;JSON&lt;/span&gt; &lt;span class="caps"&gt;API&lt;/span&gt; to ship the compiled resources over to the Ruby library for execution, and over time we&amp;#8217;ll be extending those interfaces.  You&amp;#8217;ll be able to have recipes written in Python interoperating with recipes written in Ruby and Perl.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Does Chef have (or for that matter, need) something like Augeas, which Puppet is trying to support?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Opscode:&lt;/strong&gt; Augeas is neat.  Chef doesn&amp;#8217;t have Augeas support today, and the reason is that nobody has needed it badly enough to write the integration.  One reason is that, with Chef, it is quite easy to dynamically add to a resource (like, say, a template) or search for particular systems that match a criteria.  This means that the use-case for Augeas (which edits files in place) is less necessary &amp;#8211; you can often get the data you need to render a template, rather than needing to build it up over time with incremental edits.&lt;/p&gt;
&lt;p&gt;We think this is a better practice in general, as it ensures that all the systems you are managing can always be restored to a working state from nothing but the cookbook repository. If you use Augeas to allow idempotent changes of individual lines of a configuration file, it encourages the behavior of individual administrators editing files in place, which is a configuration management anti-pattern.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Sysadmins used to CFEngine complain about Ruby&amp;#8217;s dependencies and overall weight. Because for Chef to run you need Ruby installed. Not all distros have Ruby in the same version (although most already migrated to 1.8.7). Then you have the problem of weight. I am not familiar with Chef, but Puppet can grow to hundreds of megabytes. What they don&amp;#8217;t want is to have clusters of Chef machines (which, by themselves, also need maintenance, adding to the overall complexity). How do you deal with datacenters with thousands of servers? I know it&amp;#8217;s difficult to measure precisely, but what would be a reasonable ratio between Chef servers x managed servers?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Opscode:&lt;/strong&gt; When you are evaluating the scalability of configuration management systems, you want to look at two different axis.  The horizontal one, which is the number of systems that can be managed by a single configuration management server at a particular rate of change, and the vertical, which is how much of your infrastructure can be automated by the tool.&lt;/p&gt;
&lt;p&gt;On the vertical axis, I think Chef is the clear winner, for reasons I think are pretty well summed up by my answer to question 7. I would put Puppet second, and Cfengine last.&lt;/p&gt;
&lt;p&gt;On the horizontal axis, Cfengine is the clear winner.  It&amp;#8217;s written in C, and it has the thinnest possible server component &amp;#8211; it does nothing but authenticate clients and serve files, essentially. I know first hand of data-centers that are running huge numbers of servers off a single cfengine server.&lt;/p&gt;
&lt;p&gt;One important metric to keep in mind when discussing the horizontal scalability of a configuration management solution is that the most important metric is the &lt;strong&gt;rate of change&lt;/strong&gt;.  All the tools we&amp;#8217;ve been talking about are &amp;#8216;pull&amp;#8217; based &amp;#8211; the clients check in at an &amp;#8216;interval&amp;#8217; with the server, and apply a &lt;em&gt;&amp;#8216;splay&amp;#8217;&lt;/em&gt; to ensure that not all the systems check in at once.  A common out of the box configuration is an interval of 30 minutes, with a splay of 15 minutes. (This means a server checks in every 30-45 minutes, depending.)  If you are comfortable increasing that interval, you will get more scalability out of fewer resources (by lowering the amount of concurrency.)&lt;/p&gt;
&lt;p&gt;So when anyone says &amp;#8220;I have 10 thousand servers on a single configuration management server&amp;#8221;, ask them &amp;#8220;at what interval?&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Chef scales like a web application.  The server itself is quite thin, and is responsible for authenticating clients, transferring files, storing node state, and providing a search interface.  It scales horizontally by adding new Chef Servers as necessary.  The &lt;span class="caps"&gt;API&lt;/span&gt; is RESTful, and there is no session state between the clients and the server. (At least not in Chef 0.8+)  When you encounter scalability problems with Chef, the tools you apply are the same ones you apply to any well designed web application.&lt;/p&gt;
&lt;p&gt;You asked specifically about memory utilization &amp;#8211; Chef does quite well in this regard.  Individual server processes usually are between 14-50MB resident.  The client itself, running in daemon mode, is usually around 28MB resident.&lt;/p&gt;
&lt;p&gt;In our testing, the current bottleneck in a Chef server is &lt;span class="caps"&gt;CPU&lt;/span&gt;.  Chef is smart about how it handles file transfers &amp;#8211; we only transfer files that have changed on the server.  To support this we calculate a checksum for each file requested, and we currently don&amp;#8217;t cache the results.  We&amp;#8217;re planning on fixing this for the next major release of Chef (0.8.0) which should shift the bottleneck over to &lt;span class="caps"&gt;RAM&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;With Chef 0.7, you should be able to support thousands of clients at a half-hour interval and fifteen minute splay on reasonable commodity hardware.  The changes in Chef 0.8 should bring that number up dramatically &amp;#8211; I&amp;#8217;ll get back to you with some benchmarks once the patches are in. :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Probably related to the previous question, seems like specially after Sarbanes Oxley there&amp;#8217;s been an increasing interest in stuff such as &lt;span class="caps"&gt;ITIL&lt;/span&gt;, CoBit. Have you ever seen successful implementations of those in the Web-style infrastructure? I mean, I can see them succeeding in Banks, Aerospace and Defense, etc but I fail to see them working as advertised in a very dynamic environment such as Web services hosting. What are your experiences regarding this issue?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Opscode:&lt;/strong&gt; Well, I think you can think of &lt;span class="caps"&gt;ITIL&lt;/span&gt; in the same way you think about the classic &amp;#8216;Waterfall&amp;#8217; model of software development. For some kinds of projects and companies, it is essential &amp;#8211; it&amp;#8217;s hard to imagine working a different way.  Most often these are companies with huge manufacturing or quality control concerns &amp;#8211; medical health, aerospace, banking and finance, etc.&lt;/p&gt;
&lt;p&gt;The same thing applies to &lt;span class="caps"&gt;ITIL&lt;/span&gt; &amp;#8211; the larger the concern, and the more stringent the requirements, and the longer the lead time, the more the processes they describe start to make sense.  Like all large process, though, they tend to de-emphasize the human element &amp;#8211; people have roles to play, and forms to file. :)&lt;/p&gt;
&lt;p&gt;In the Web Ops culture, things are different.  I&amp;#8217;ve never seen a successful marriage of &lt;span class="caps"&gt;ITIL&lt;/span&gt; and Web Ops, and the reason is that the domains are so very different.  If there is a bug on the website, it&amp;#8217;s better to ship the fix now than wait for a release management process to ensure that the site won&amp;#8217;t have any more issues based on your fix, for example.  It&amp;#8217;s also a bad cultural fit &amp;#8211; in the best Web Ops teams, the focus is heavy on communication, agility, and respect, rather than process, formalism, and tooling.  The shift you start too see in the really great Web Ops companies is that their operations personel become enablers of the organization, rather than end-line blockers of change (to keep stability high.)&lt;/p&gt;
&lt;p&gt;In general, I think the 4 steps outlined in visible ops for emergency management are not bad ones, but the devil is always in the details. The guy you should really ask about this is Jesse &amp;#8211; he&amp;#8217;s largely responsible for Amazon&amp;#8217;s operational culture, and knows what it means to start hacking on that sort of thing from within huge organizations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Awesome, I think this is a wrap. Thank you very much for this interview!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/I2pkxX0NZ2dxbS5mFESnQDgwRO0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I2pkxX0NZ2dxbS5mFESnQDgwRO0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/I2pkxX0NZ2dxbS5mFESnQDgwRO0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I2pkxX0NZ2dxbS5mFESnQDgwRO0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Chatting with Luke Kanies</title><link>http://akitaonrails.com/2009/11/18/chatting-with-luke-kaines</link><pubDate>Wed, 18 Nov 2009 07:45:32 PST</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5228</guid><description>&lt;p&gt;Configuration Management is a tricky subject. For non-starters, when you&amp;#8217;re a developer and you have few boxes to take care of, you can usually get away with just managing them manually. People are probably just used to pop in a CD, double-click the &amp;#8220;install&amp;#8221; program and click &amp;#8220;next&amp;#8221;, &amp;#8220;next&amp;#8221; until the end, then you manually log in to backup (when you remember it), and sometimes you do apply some security updates when you remember about them.&lt;/p&gt;
&lt;p&gt;But then you have more than a dozen machines, things start to get uglier, you end up making more mistakes, forgetting important steps, and all of a sudden managing machines become a nightmare. You end up being woken up in the middle of the night because you forgot to install some crucial component, and so on and so forth.&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;img src="/assets/2009/11/18/pic2_original.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The same way you need testing, continuous integration tools when you&amp;#8217;re a developer, you also need automated, reliable and flexible tools for the system administrator role. That&amp;#8217;s where tools such as &lt;strong&gt;Puppet&lt;/strong&gt; kick in to help.&lt;/p&gt;
&lt;p&gt;This time I&amp;#8217;ve interviewed &lt;a href="http://twitter.com/puppetmasterd"&gt;Luke Kanies&lt;/a&gt;, from &lt;a href="http://reductivelabs.com/"&gt;Reductive Labs&lt;/a&gt;, former contributor to the famous CFEngine tool and creator of &lt;a href="http://github.com/reductivelabs/puppet"&gt;Puppet&lt;/a&gt;, one of the most acclaimed configuration management tool for 21st century datacenters.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; To kick start this interview, it would be great to have more background info about you. So, how did you end up in the configuration management field? I understand that you have a long history with CFEngine development, right?&lt;/p&gt;
&lt;div style="float: right; margin: 3px"&gt;&lt;img src="/assets/2009/11/18/luke_kanies_portrait_original.jpg" alt="" /&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Luke:&lt;/strong&gt; I was a Unix admin going back to 1997, always writing scripts and tools to save myself time, and around 2001 I realized that I shouldn&amp;#8217;t have to write everything myself &amp;#8211; that someone somewhere should be able to save me time.  After a lot of research and experimentation, I settled on Cfengine, and had enough success with it that I started consulting, publishing, and contributing to the project.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What&amp;#8217;s the story behind Reductive Labs, what&amp;#8217;s its mission, and what&amp;#8217;s the story for Puppet&amp;#8217;s creation?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Luke:&lt;/strong&gt; After a couple of years with Cfengine, I had a lot more insight but was frustrated because it still seemed to be too hard &amp;#8211; no one was sharing Cfengine code, and there were some problems it made you work really hard to solve.  The biggest issue, though, was that its development was very closed &amp;#8211; it was difficult to contribute much more than just bug fixes.&lt;/p&gt;
&lt;p&gt;I got frustrated enough that I stopped consulting and looked for other options.  I worked briefly at BladeLogic, a commercial software company in this space, but in the end I decided that the insight I had and the lack of a great solution were a good enough start for a business that I decided to morph my consulting company into a software company and write a new tool.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; I&amp;#8217;d like to say that only amateur sysadmins do everything manually, but I think most small to medium corporations at least still do everything manually or with random scripts spread all over the place. The notion of &amp;#8220;configuration management&amp;#8221; is still new to a lot of people. Could you briefly explain what it is, and why it is important?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Luke:&lt;/strong&gt; It&amp;#8217;s surprisingly difficult to describe it succintly, but for me, there are two key rules:  You shouldn&amp;#8217;t need to connect directly to a given machine to change its configuration, and you should be able to redeploy any machine on your network very quickly.&lt;/p&gt;
&lt;p&gt;These two rules combine to require comprehensive automation and/or centralization for everything that goes into making a machine work.  Annoyingly, they also immediately introduce dependency cycles, because your automation server needs to be able to build itself, which is always a bit of a challenge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; I think one of the most widely used system is CFEngine2. How does Puppet compare with it? Meaning, what do I have as value added when switching to Puppet, and what are the known caveats?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Luke:&lt;/strong&gt; There are multiple important functional differences.  The biggest is Puppet&amp;#8217;s &lt;strong&gt;Resource Abstraction Layer&lt;/strong&gt;, which allows Puppet users to avoid a lot of the detail they don&amp;#8217;t really care about, like how rpm, adduser, or init scripts work &amp;#8211; they talk about users, groups, and packages, and Puppet figures out the details.&lt;/p&gt;
&lt;p&gt;We also have explicit dependency support, which makes a huge difference &amp;#8211; it&amp;#8217;s easy to order related resources and restart services when their configuration files change, for instance.&lt;/p&gt;
&lt;p&gt;The language is also a bit more powerful. Like Cfengine, we have a simple custom language, but Puppet&amp;#8217;s language provides better support for heterogeneity, along with a composite resource construct that allows you to easily build in-language resource types like Apache virtual hosts that model more complex resources consisting of multiple simple resources.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Puppet has a lot of components. Could you briefly describe some of the main ones that work together? The client side, the server side, recipes?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Luke:&lt;/strong&gt; Most people use Puppet in client/server mode, where the central server is the only machine that has access to all of the code, and it runs a process capable of compiling that code into host-specific configurations. Then each machine runs a client (including the server), which then retrieves and applies that host-specific configuration.  This has nice security implications because you&amp;#8217;ve not shipped your code to every machine on your network.&lt;/p&gt;
&lt;p&gt;If this model doesn&amp;#8217;t work for you, though, it&amp;#8217;s also easy to run Puppet stand-alone, where each machine has all of the code and compiles it separately.  Multiple Puppet users do this for various reasons.  This stand-alone &amp;#8216;puppet&amp;#8217; executable is a standard interpreter &amp;#8211; it can be used to run 1 line scripts or thousands of lines in a complete configuration.&lt;/p&gt;
&lt;p&gt;Beyond this, we&amp;#8217;ve got a few other interesting executables, such as to access our certificate authority functionality, and an interesting executable called &amp;#8216;ralsh&amp;#8217; that provides a simple way to directly manage resources from the Unix shell, without having to write a separate script.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What would you say about Puppet&amp;#8217;s maturity? CFEngine has more than a decade of usage, which is difficult to beat. Would you say that it&amp;#8217;s &amp;#8220;mature enough&amp;#8221;? Meaning, it&amp;#8217;s already in production in companies of many sizes, its APIs don&amp;#8217;t change too much and my recipes will probably work if I upgrade to a newer version of Puppet? I think the 0.x version makes some people nervous :-)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Luke:&lt;/strong&gt; Really we should have called a version from 2007 1.0, but it&amp;#8217;s hard to know how stable a release is going to be until it&amp;#8217;s been out for a while. :)&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s obviously tough to match Cfengine&amp;#8217;s long life, although they&amp;#8217;re somewhat forcibly migrating to Cfengine 3, which is a complete rewrite, so that maturity isn&amp;#8217;t worth quite as much right now.&lt;/p&gt;
&lt;p&gt;However, Puppet&amp;#8217;s been in production usage around the world since 2006, and it&amp;#8217;s currently used by more large companies than I could reasonably name &amp;#8211; Twitter, Digg, Google, Sun, Red Hat, and lots more &amp;#8211; and our community and customer base consider it to be mature.  For the line came some time early last year, when I found that the vast majority of issues people had were user issues on their part, rather than some flaw or shortcoming in Puppet.&lt;/p&gt;
&lt;p&gt;In general the APIs are quite stable, and we&amp;#8217;ve done quite well, I think, at maintaining backward compatibility when the APIs have had to change.  The point about &lt;span class="caps"&gt;API&lt;/span&gt; stability in a 1.0 release isn&amp;#8217;t so much to differentiate it from previous efforts as to make a promise for the future.  This especially matters for companies like Canonical, who want a release that they can support on Ubuntu for five years.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Puppet has its own language and you can use Ruby for the advanced cases. It&amp;#8217;s probably perfect for Rubists, but I feel that most sysadmins are used to Bash, Python and are not very flexible on change. Why did you choose to use Ruby instead of a more widespread language? What do sysadmins need to realize to shift paradigms?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Luke:&lt;/strong&gt; Part of it is that most people don&amp;#8217;t really need to know any ruby to be effective with Puppet.  Sure, you can get some more power if you do, but if you&amp;#8217;re not a language person, you&amp;#8217;re perfectively functional with just Puppet.&lt;/p&gt;
&lt;p&gt;Another nice thing is that we have a pretty smooth scale in terms of Ruby knowledge &amp;#8211; you can start out writing &lt;span class="caps"&gt;ERB&lt;/span&gt; templates or five line extensions to &lt;a href="http://github.com/reductivelabs/facter"&gt;Facter&lt;/a&gt;, which is our client-side querying system, and grow smoothly through to writing custom resource types.&lt;/p&gt;
&lt;p&gt;In the end, I chose Ruby because I was most productive in it.  I likely should have chosen Python, given its speed benefit and popularity at Red Hat and other places, but I found I just couldn&amp;#8217;t write code in it.  I started thinking in Ruby after only a few hours of usage, so it was impossible for me to turn away from it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Sysadmins used to CFEngine complain about Ruby&amp;#8217;s dependencies and overall weight. Because for Puppet to run you need Ruby installed. Not all distros have Ruby in the same version (although most already migrated to 1.8.7). Then you have the problem of weight. Puppet can grow to hundreds of megabytes. What they don&amp;#8217;t want is to have clusters of Puppet machines (which, by themselves, also need maintenance, adding to the overall complexity). How do you deal with datacenters with thousands of servers? I know it&amp;#8217;s difficult to measure precisely, but what would be a reasonable ratio between Puppet servers x managed servers?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Luke:&lt;/strong&gt; It&amp;#8217;s as impossible to tell you how many clients a Puppet server can handle as it is to tell you how many clients a Rails server can handle &amp;#8211; it all depends on the complexity of the tasks.  Google scaled to 4500 client machines on a single server, but most people tend to add another server at around 500-1000 clients.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s true that it&amp;#8217;s hard to keep memory usage down in a Ruby process, but we&amp;#8217;ve made great strides in our recent releases by doing things like deduplicating strings in memory and being more efficient in our code paths.  Really, though, we&amp;#8217;ve spent a lot more time on features and bug fixing and less time on optimizing &amp;#8211; until recently, we&amp;#8217;ve been a small development team, and we just didn&amp;#8217;t have the bandwidth for it.&lt;/p&gt;
&lt;p&gt;Now that my company, Reductive Labs, has some investment, we&amp;#8217;ve been able to add three full time developers, which is going to really help in this area.&lt;/p&gt;
&lt;p&gt;As to dependencies, this is one area we break strongly from the Ruby community &amp;#8211; we don&amp;#8217;t require a single gem, other than our own Facter tool (and it&amp;#8217;s usually not shipped as a gem).  Rubyists tend not to worry too much about package dependencies &amp;#8211; they just put it in vendor, as I&amp;#8217;m fond of saying &amp;#8211; but that doesn&amp;#8217;t work when you have to deploy thousands of copies.  So yes, you might have to install Ruby, but there won&amp;#8217;t be any other dependencies you have to deal with, which greatly simplifies it.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s generally as tough to know how you&amp;#8217;ll need to size your puppetmaster as it would be to size a web server &amp;#8211; it depends on how complicated the workload is.  In general, somewhere between 500 and 5000 clients, you&amp;#8217;ll need to have a second server, but most people probably find it closer to 500.  Really, though, if you&amp;#8217;ve got 3000 clients hitting a service, you probably want to make it horizontally scalable for stability in additional to performance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Security is a big concern nowadays, Puppet was worried from the beginning on the handshake procedure between clients and server, can you describe it a little bit? Also, is there any built-in recipes for hardening machines, for example? Or at least any desires to add such tools in the future?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Luke:&lt;/strong&gt; Puppet uses standard &lt;span class="caps"&gt;SSL&lt;/span&gt; certificates for authentication and encryption, including a certificate signing phase.  By default, the client generates a key and a certificate request (&lt;span class="caps"&gt;CSR&lt;/span&gt;) and then uploads the &lt;span class="caps"&gt;CSR&lt;/span&gt; to its server.  This upload, along with the later certificate download, are the only unauthenticated connections that are allowed by default.&lt;/p&gt;
&lt;p&gt;From there, a human normally has to trigger the client&amp;#8217;s certificate to be signed, but many organizations, including Google, automatically sign client certificates because they trust their internal network.&lt;/p&gt;
&lt;p&gt;As to automatic hardening, there aren&amp;#8217;t any recipes that I&amp;#8217;m aware of right now, but it&amp;#8217;s something that I&amp;#8217;m definitely interested in. Years ago I was a big fan of &lt;span class="caps"&gt;TITAN&lt;/span&gt;, which is a hardening package for various *NIX platforms, and it was part of the inspiration to write Puppet &amp;#8211; I&amp;#8217;ve always wanted a portable, executable security policy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; The puppetmaster uses Webrick by default, but the documentation also describes using Mongrel or Passenger. Are there any real gains in using those? Is it more for convenience or do we have performance/robustness improvements?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Luke:&lt;/strong&gt; Holy cow Webrick is slow.  It&amp;#8217;s really fantastic for proof of concepts &amp;#8211; get up and running in minutes.  Once you get beyond that proof of concept, though, you really need to switch to Mongrel or Passenger. If you get more than one concurrent connection in webrick, your clients start to suffer, but you can scale to far more with the other solutions out there.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Are there any clients case you are allowed to talk about? Meaning, more details on the kind of infrastructure, difficulties, caveats, best practices?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Luke:&lt;/strong&gt; The possibilities here are pretty open ended.  Google uses Puppet to maintain their corporate IT, which means they&amp;#8217;re running it on thousands of laptops and desktops which is pretty different. MessageOne, a division of Dell, is really interesting in that their developers have to ship Puppet code to manage the applications that they ship, so if an app isn&amp;#8217;t trimming its logs or backing itself up, it&amp;#8217;s a bug that the app developer has to fix rather than the sysadmin.  This really helps to bridge the divide between dev and ops, which has worked out really well for them.&lt;/p&gt;
&lt;p&gt;Otherwise, there are lots of stores and best practices, but I&amp;#8217;m afraid that would be a whole second article. :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; I&amp;#8217;ve seen Andrew Shaffer talk about &lt;a href="http://www.slideshare.net/littleidea/agile-infra-agileroots-2009"&gt;Agile Infrastructure&lt;/a&gt; for a couple of years now, but I still think most IT organizations are unaware of this concept. Can you elaborate on what does it mean to be Agile outside of the development field?&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;embed src='http://agileroots2009.confreaks.com/player.swf' height='380' width='640' allowscriptaccess='always' allowfullscreen='true' flashvars='image=images%2F15-jun-2009-14-30-agile-infrastructure-andrew-shafer-preview.png&amp;file=http%3A%2F%2Fagileroots2009.confreaks.com%2Fvideos%2F15-jun-2009-14-30-agile-infrastructure-andrew-shafer-small.mp4&amp;plugins=viral-1'/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Luke:&lt;/strong&gt; I think Agile Infrastructure has even less adoption than Agile Development.  The vast majority of IT shops haven&amp;#8217;t changed practices significantly in years and are largely unprepared for the growth in server count that they&amp;#8217;re experiencing.  They mostly try to scale by adding more people, which we call the &lt;em&gt;meatcloud&lt;/em&gt;, rather than scaling their tools and practice.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Probably related to the previous question, seems like specially after Sarbanes Oxley there&amp;#8217;s been an increasing interest in stuff such as &lt;span class="caps"&gt;ITIL&lt;/span&gt;, CoBit. Have you ever seen successful implementations of those in the Web-style infrastructure? I mean, I can see them succeeding in Banks, Aerospace and Defense, etc but I fail to see them working as advertised in a very dynamic environment such as Web services hosting. What are your experiences regarding this issue?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Luke:&lt;/strong&gt; In general, I think these kinds of high-level policies are great for filings but aren&amp;#8217;t so great for actually solving problems.  The bigger a company is and the more public they are, the more likely they are to care about &lt;span class="caps"&gt;ITIL&lt;/span&gt; et al, but it doesn&amp;#8217;t really help them solve problems outside of PR in my experience.  You can be &lt;span class="caps"&gt;ITIL&lt;/span&gt; compliant and dysfunctional, or completely out of compliance but in fantastic shape.  Considering that the best standards are derived from implementation and best practice, which few of these are, I don&amp;#8217;t have a lot of hope for these being adopted by the best shops out there.&lt;/p&gt;
&lt;p&gt;My personal experience is that very few companies ask or care about these standards, and the ones that do usually do so in a kind of checkbox way, in that they want to make sure they can check off things like &lt;span class="caps"&gt;CMDB&lt;/span&gt; but they aren&amp;#8217;t really that concerned with the specifics.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; I think this is it! Thank you very much for this conversation!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p4t_zChl25kieVdx8GgA9VGNJ0w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p4t_zChl25kieVdx8GgA9VGNJ0w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p4t_zChl25kieVdx8GgA9VGNJ0w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p4t_zChl25kieVdx8GgA9VGNJ0w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Rubistas.com.br</title><link>http://akitaonrails.com/2009/11/10/rubistas-com-br</link><pubDate>Wed, 11 Nov 2009 11:22:15 PST</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5225</guid><description>&lt;p&gt;Last night I made available www.rubistas.com.br, a translation fork of the original &lt;a href="http://rubyists.eu"&gt;Rubyists.eu&lt;/a&gt;. I thought it&amp;#8217;s a great website because of its simplicity on the approach to group together communities and make them easier to find for everyone.&lt;/p&gt;
&lt;p&gt;But, I was careless. According to the &lt;a href="http://creativecommons.org/licenses/by-nc-sa/3.0/"&gt;Creative Commons License&lt;/a&gt; I failed to add proper attribution to Rock &amp;amp; Code and Rubyists.EU. So, Rock &amp;amp; Code contacted me. We talked and I agreed to cease and desist both my fork at github and the website.&lt;/p&gt;
&lt;p&gt;I was told that the way I wrote the original blog post in Portuguese (already removed) did upset some of the European collaborators. Specially the part that would translate as &lt;em&gt;&amp;#8220;&amp;#8230; it is nothing more than a Google Maps mashup.&amp;#8221;&lt;/em&gt; Again, the intention was never to be negative, quite contrary, it was to pinpoint the fact that it would not be difficult for people to collaborate.&lt;/p&gt;
&lt;p&gt;So, rubistas.com.br will remain down. I have no plans for it for the time being.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WYsIIEDsQdwzwmHyLcWT8iasiJc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WYsIIEDsQdwzwmHyLcWT8iasiJc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WYsIIEDsQdwzwmHyLcWT8iasiJc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WYsIIEDsQdwzwmHyLcWT8iasiJc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>[Rails Summit 2010] Commence Planning</title><link>http://akitaonrails.com/2009/10/30/rails-summit-2010-commence-planning</link><pubDate>Thu, 29 Oct 2009 21:39:14 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5219</guid><description>&lt;p&gt;Railers all around the globe, I am very happy to report that the Ruby on Rails community in Brazil is growing strong. Last 13, 14th of October we had &lt;a href="http://www.railssummit.com.br/en/home"&gt;Rails Summit Latin America&lt;/a&gt;, with 550+ attendees we had the 2nd edition of the second largest Rails conference in the world after the official RailsConf.&lt;/p&gt;
&lt;p&gt;This conference is possible thanks to &lt;a href="http://www.locaweb.com.br"&gt;Locaweb&lt;/a&gt;, the largest hosting company in South America. Together, we were able to organize two very successful events. When I started being a Rails activist back in 2006, with virtually no rubyists in Brazil, I never imagined how far we would be able to go. Now we have a healthy ecosystem, with some great recognized open source programmers, some small consultings starting to pop up, a few startups starting to show up, even some &amp;#8216;enterprisey&amp;#8217; companies coming to adopt it. The Brazilian Rails community is a force to be reckoned.&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;img src="http://www.akitaonrails.com/assets/2009/10/29/_URA6555_original.JPG" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s a lot more to do though, and I am again counting on the international rubyists support to keep on going. The last 2 Rails Summits were real challenges, and we will strive to continue to deliver the best conference in South America. Up to this year&amp;#8217;s edition I had to have closed speakers list, but for 2010 I will finally be able to have an open Call for Participation, and I hope Railers all around the world show interest to come visit Brazil, get to know our beautiful country and meet our friendly people. I will let you know the details next year, as soon as I can.&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;img src="http://www.akitaonrails.com/assets/2009/10/29/_URA6631_original.JPG" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Rails Summit gets inspiration from the official RailsConf. The format of the conference comprises 2 full days, with 2 parallel tracks, a Lightning Talk session, real-time translation from English to Portuguese and Portuguese to English, rooms with power plugs and ubiquitous wireless internet access. Up to this year we used the Elis Regina auditorium, inside the Anhembi Convention Center area, in São Paulo City. For next year we will move it to &lt;a href="http://www.convencoesfreicaneca.com.br/Conteudo.asp"&gt;Frei Caneca Convention Center&lt;/a&gt;, which is also in São Paulo City, nearer the famous Paulista Ave. area, much more convenient to find hotels and entertainment areas. I think you will enjoy it. Prices will be around &lt;span class="caps"&gt;USD&lt;/span&gt; 140 for the same 2 full days of event. &lt;strong&gt;Above&lt;/strong&gt;, you can see 2 photos from one of the other conferences that Locaweb does in the Frei Caneca Convention Center.&lt;/p&gt;
&lt;p&gt;We recorded all the talks from this year&amp;#8217;s edition and I will release them as soon as possible, so you can see how it was. &lt;a href="http://www.twitter.com/AkitaOnRails"&gt;Follow me&lt;/a&gt; on twitter or subscribe to this &lt;a href="http://feeds.feedburner.com/AkitaOnRailsEnglish"&gt;blog&amp;#8217;s feed&lt;/a&gt;. I&amp;#8217;ll keep you posted.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/J_L4H7DfVg9S6Cbw5nBjfnWa-3s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J_L4H7DfVg9S6Cbw5nBjfnWa-3s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/J_L4H7DfVg9S6Cbw5nBjfnWa-3s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J_L4H7DfVg9S6Cbw5nBjfnWa-3s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>[Rails Summit 2009] ThoughtWorks pousa no Brasil</title><link>http://akitaonrails.com/2009/10/08/rails-summit-2009-thoughtworks-pousa-no-brasil</link><pubDate>Thu, 08 Oct 2009 14:55:34 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5216</guid><description>&lt;p style="text-align: center"&gt;&lt;a href="http://www.railssummit.com.br?utm_campaign=Railssummit&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=por_728x90"&gt;&lt;img src="http://railssummit.com.br/imgs/43/original/728x90.gif" alt="Rails Summit 2009"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;English readers:&lt;/strong&gt; click &lt;a href="/2009/10/08/rails-summit-2009-thoughtworks-pousa-no-brasil#thoughtworks_english"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Como eu &lt;a href="http://twitter.com/AkitaOnRails/statuses/4687822234"&gt;twitei ontem&lt;/a&gt;, estamos muito orgulhos de anunciar que a &lt;a href="http://www.thoughtworks.com"&gt;ThoughtWorks&lt;/a&gt; se juntou como patrocinador da conferência na última hora. Inclusive eles resolveram dar um presente à comunidade: patrocinar metade de &lt;strong&gt;30 ingressos&lt;/strong&gt; para o Rails Summit, promoção que começou algumas horas atrás e ficará no ar até acabarem os ingressos patrocinados. Não percam!&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;img src="http://www.akitaonrails.com/assets/2009/10/8/TW_Logo_original.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Mais ainda, você deve ter ouvido rumores sobre isso. Roy Singham, fundador da ThoughtWorks, soltou o anúncio na conferência &lt;a href="http://agiles2009.org"&gt;Agiles 2009&lt;/a&gt; acontecendo em Florianópolis, SC alguns minutos atrás. Estou muito contente de confirmar que sim, os rumores eram verdade: a ThoughtWorks decidiu aterrissar no Brasil. Eles estabelecerão seu quartel-general em Porto Alegre, RS, começando este ano.&lt;/p&gt;
&lt;p&gt;Agora, eles tem intenções de começar a contratar desenvolvedores de software brilhantes imediatamente. Eles estarão no Rails Summit para falar com &lt;strong&gt;você&lt;/strong&gt;, procurando grandes pessoas para embarcarem nessa empreitada.&lt;/p&gt;
&lt;p&gt;A ThoughtWorks é muito conhecida como uma força no mundo de desenvolvimento de software, com diversos escritórios pelo mundo. Eles tem grandes e conhecidos engenheiros, arquitetos trabalhando lá, redefinindo a maneira como fazemos software, como Martin Fowler.&lt;/p&gt;
&lt;p&gt;Não percam essa oportunidade de vir conhecê-los, pessoalmente. Estaremos esperando por você no &lt;a href="http://www.railssummit.com.br"&gt;Rails Summit 2009&lt;/a&gt;, semana que vem!&lt;/p&gt;&lt;p&gt;&lt;a name="thoughtworks_english"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;ThoughtWorks lands in Brazil&lt;/h2&gt;
&lt;p&gt;As I &lt;a href="http://twitter.com/AkitaOnRails/statuses/4687822234"&gt;twitted yesterday&lt;/a&gt;, we are very proud to announce that &lt;a href="http://www.thoughtworks.com"&gt;ThoughtWorks&lt;/a&gt; joined us as sponsor for the conference at the last moment.&lt;/p&gt;
&lt;p&gt;Moreover, you may have heard rumors about this. Roy Singham, founder of ThoughtWorks,  just released the announcement at the &lt;a href="http://www.agiles2009.org"&gt;Agiles 2009&lt;/a&gt; conference in Florianópolis, SC a few minutes ago. I am very happy to confirm that yes, the rumors are true: ThoughtWorks decided to land in Brazil. They will establish their head-quarters in Porto Alegre &amp;#8211; RS, starting this year.&lt;/p&gt;
&lt;p&gt;Now, they have intentions to start hiring bright and insightful software developers right away. They will be at Rails Summit to talk to &lt;strong&gt;you&lt;/strong&gt;, searching for matches to sign up for their enterprise.&lt;/p&gt;
&lt;p&gt;ThoughtWorks is a well known software development powerhouse, with offices around the globe. There are several great and well known engineers, architects working there, redefining the way we do software, such as Martin Fowler.&lt;/p&gt;
&lt;p&gt;Don&amp;#8217;t miss this opportunity to come and get to know them, in person. We will be awaiting you at &lt;a href="http://www.railssummit.com.br/en/home"&gt;Rails Summit 2009&lt;/a&gt;, next week!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0ozgoY3sSh_mvZx5x6OcgtMr_2k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0ozgoY3sSh_mvZx5x6OcgtMr_2k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0ozgoY3sSh_mvZx5x6OcgtMr_2k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0ozgoY3sSh_mvZx5x6OcgtMr_2k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>[Rails Summit 2009] Palestrante Arthur Zapparoli</title><link>http://akitaonrails.com/2009/10/06/rails-summit-2009-palestrante-arthur-zapparoli</link><pubDate>Tue, 06 Oct 2009 08:03:42 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5215</guid><description>&lt;p style="text-align: center"&gt;&lt;a href="http://www.railssummit.com.br?utm_campaign=Railssummit&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=por_728x90"&gt;&lt;img src="http://railssummit.com.br/imgs/43/original/728x90.gif" alt="Rails Summit 2009"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;English translation:&lt;/strong&gt; click &lt;a href="/2009/10/06/rails-summit-2009-palestrante-arthur-zapparoli#arthur_english"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;div style="float: right; margin: 3px"&gt;&lt;a href="http://railssummit.locaweb.com.br/pt-BR/speakers#arthur_zapparoli"&gt;&lt;img src="http://railssummit.locaweb.com.br/imgs/19/original/arthur.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Arthur é Desenvolvedor de Softwares, trabalha com Ruby e Rails desde 2006. Atualmente trabalha para a startup brasileira &lt;a href="http://spix.info/"&gt;Spix&lt;/a&gt;. É conhecido como &lt;a href="http://twitter.com/arthurgeek"&gt;@ArthurGeek&lt;/a&gt; na comunidade e publica artigos no seu &lt;a href="http://arthurgeek.net/"&gt;blog&lt;/a&gt; no qual fala sobre assuntos relacionados à desenvolvimento.&lt;/p&gt;
&lt;p&gt;Ele foi um dos que começou a evangelizar mais o &lt;a href="http://merb-br.org/"&gt;Merb&lt;/a&gt; na comunidade brasileira, assim como o &lt;strong&gt;Git&lt;/strong&gt; como versionador de controle.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Como você encontrou Ruby/Rails, o que foi que mais te atraiu?&lt;/p&gt;
&lt;p&gt;Conheci Rails na época da versão 0.13. Eu já trabalhava com Python, e adorava os recursos de uma linguagem dinâmica. Quando conheci o Rails, não me apaixonei por ele de cara, ainda gostava mais do Python. Nessa época, me envolvi com alguns &amp;#8220;clones&amp;#8221; do Rails para o Python (ironicamente, nenhum deles deu certo). Porém, como precisava de algo pronto para ser usado, acabei usando o Rails nos projetos da empresa onde trabalhava, e, com isso, precisei estudar Ruby da maneira certa. Depois disso, me apaixonei por Ruby e estou nessa até hoje. Claro que não abandonei o Python, mas hoje posso dizer que Ruby é minha linguagem favorita.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Quais assuntos mais te interessam atualmente e porque?&lt;/p&gt;
&lt;p&gt;Tenho um grande interesse pelo Rails 3, já que sempre gostei do Merb. Ruby 1.9 é algo que utilizo nos dias de hoje e estou sempre de olho nas novidades com relação à isto. Fora do mundo Ruby/Rails, me interesso bastante pelos &amp;#8220;Document based databases&amp;#8221; como CouchDB, e, principalmente o MongoDB. Tanto o Ruby 1.9 quanto o MongoDB é algo que utilizamos no dia-a-dia da empresa onde trabalho.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Sobre o que trata a sua palestra e para que tipos de desenvolvedores é mais indicado?&lt;/p&gt;
&lt;p&gt;A palestra se chama: &amp;#8220;Git: Controle de versões do jeito certo&amp;#8221; e abordará temas básicos, diferentes workflows e algumas dicas mais avançadas. É indicada para desenvolvedores que não usam nenhum controle de versões ou para aqueles que querem saber mais sobre como o Git pode ajudar no dia-a-dia de seu trabalho.&lt;/p&gt;&lt;p&gt;&lt;a name="arthur_english"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Speaker Arthur Zapparoli&lt;/h2&gt;
&lt;div style="float: right; margin: 3px"&gt;&lt;a href="http://railssummit.locaweb.com.br/en/speakers#arthur_zapparoli"&gt;&lt;img src="http://railssummit.locaweb.com.br/imgs/19/original/arthur.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Arthur is a Software Developer, works with Ruby and Rails since 2006. He currently works for a Brazilian startup &lt;a href="http://spix.info/"&gt;Spix&lt;/a&gt;. He is known as &lt;a href="http://twitter.com/arthurgeek"&gt;@ArthurGeek&lt;/a&gt; in the community and posts articles in his &lt;a href="http://arthurgeek.net/"&gt;blog&lt;/a&gt;, talking about topics related to software development.&lt;/p&gt;
&lt;p&gt;He also began helping to evangelize more &lt;a href="http://merb-br.org/"&gt;Merb&lt;/a&gt; in the Brazilian community as well as the &lt;strong&gt;Git&lt;/strong&gt; version control system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; How did you find Ruby / Rails, what attracted you the most?&lt;/p&gt;
&lt;p&gt;I got to know Rails at the time of version 0.13. I&amp;#8217;ve worked with Python, and loved the features of a dynamic language. When I met Rails, I didn&amp;#8217;t fall in love with it right away, I still liked Python more. At that time, I got involved with some &amp;#8220;clones&amp;#8221; of Rails for Python (ironically, none of them worked for me). However, as I needed something ready to be used, I ended up using Rails in projects for the company where I worked, and, therefore, I had to study Ruby the right way. After that, I fell in love with Ruby and I&amp;#8217;m with it today. Of course not I&amp;#8217;ve not abandoned Python, but today I can say that Ruby is my favorite language.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What topics interest you the most today and why?&lt;/p&gt;
&lt;p&gt;I have great interest in Rails 3, as I always liked Merb. Ruby 1.9 is something that I use today and I&amp;#8217;m always on the lookout for news regarding this. Outside the Ruby / Rails world, I&amp;#8217;m very interested by &amp;#8220;Document based databases&amp;#8221; such as CouchDB, and especially MongoDB. Both Ruby 1.9 and MongoDB are things we use in a daily basis at the company where I work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What is your talk about and what kind of developers will benefit the most?&lt;/p&gt;
&lt;p&gt;The talk is called &amp;#8220;Git: Version control the correct way&amp;#8221; and will address key topics, different workflows and some more advanced tips. It is recommended for developers who do not use any version control or for those who want to learn more about how Git can help in your daily workflow.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oIZ7_nCDAQuL3M2stPMHZVqYYe4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oIZ7_nCDAQuL3M2stPMHZVqYYe4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oIZ7_nCDAQuL3M2stPMHZVqYYe4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oIZ7_nCDAQuL3M2stPMHZVqYYe4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>[Rails Summit 2009] Palestrante Nando Vieira</title><link>http://akitaonrails.com/2009/10/01/rails-summit-2009-palestrante-nando-vieira</link><pubDate>Thu, 01 Oct 2009 08:32:35 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5213</guid><description>&lt;p style="text-align: center"&gt;&lt;a href="http://www.railssummit.com.br?utm_campaign=Railssummit&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=por_728x90"&gt;&lt;img src="http://railssummit.com.br/imgs/43/original/728x90.gif" alt="Rails Summit 2009"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;English translation:&lt;/strong&gt; click &lt;a href="/2009/10/01/rails-summit-2009-palestrante-nando-vieira#nando_english"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;div style="float: left; margin: 3px"&gt;&lt;a href="http://www.railssummit.com.br"&gt;&lt;img src="http://railssummit.locaweb.com.br/imgs/20/original/nando.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://railssummit.locaweb.com.br/pt-BR/speakers#nando_vieira"&gt;Nando Vieira&lt;/a&gt; é um dos rubistas mais antigos da nossa comunidade. Ele bloga no &lt;a href="http://simplesideias.com.br/"&gt;Simples Ideias&lt;/a&gt;, um dos blogs mais conhecidos sobre Ruby on Rails do Brasil. Trabalha atualmente como desenvolvedor web na Abril Digital, utilizando Rails. É também o fundador do &lt;a href="http://spesa.com.br/"&gt;Spesa&lt;/a&gt;, além de manter dezenas de &lt;a href="http://github.com/fnando"&gt;projetos Open-source&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Recentemente lançou um e-Book da sua série &lt;a href="http://howto.simplesideias.com.br/"&gt;&lt;span class="caps"&gt;HOWTO&lt;/span&gt;&lt;/a&gt; entitulado &lt;a href="http://simplesideias.com.br/pdf-o-que-mudou-no-ruby-1-9/"&gt;O que mudou no Ruby 1.9&lt;/a&gt;. Da mesma série você pode baixar o e-Book gratuito &lt;a href="http://howto.simplesideias.com.br/rails-application-templates"&gt;Rails Application Templates&lt;/a&gt; que ele também escreveu.&lt;/p&gt;
&lt;p&gt;Venha conhecê-lo no &lt;a href="http://www.railssummit.com.br"&gt;Rails Summit Latin America&lt;/a&gt;, que acontece nos dias 13 e 14 de Outubro. Estamos chegando perto. Você já se inscreveu?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Como você encontrou Ruby/Rails, o que foi que mais o atraiu?&lt;/p&gt;
&lt;p&gt;Conheci o Rails ainda na versão 0.13. Na época, não tinha quase nenhum blog em português sobre o tema e decidi criar o meu! Tinha visto algum artigo falando sobre ele e sobre como era fácil criar aplicativos e fui conferir. Por coincidência, estava querendo conhecer uma nova linguagem e quando vi a sintaxe do Ruby, decidi que era ela que eu iria aprender! E nessa estou até hoje!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; O que você tem estudado ou desenvolvido recentemente, seja em projetos particulares ou open source?&lt;/p&gt;
&lt;p&gt;Tenho visto bastante coisa sobre o Ruby 1.9, principalmente para poder adequar meus projetos a esta versão. Além disso, tenho me interessado bastante sobre testes em geral, principalmente Javascript (&lt;a href="http://visionmedia.github.com/jspec/"&gt;JSpec&lt;/a&gt; e &lt;a href="http://pivotallabs.com/users/nick/blog/articles/433-screw-unit-a-new-js-testing-framework-version-0-1"&gt;Screw Unit&lt;/a&gt;) e Aceitação (Cucumber).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Sobre o que trata a sua palestra e para quais tipos de desenvolvedores é mais indicado?&lt;/p&gt;
&lt;p&gt;Irei abordar as mudanças do Ruby 1.9 em relação à versão 1.8, com exemplos mostrando as novas funcionalidades e como corrigir comportamentos que deixaram de funcionar. É um assunto indicado para todos os programadores, pois cedo ou tarde, esta será a versão recomendada!&lt;/p&gt;&lt;p&gt;&lt;a name="nando_english"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Speaker Nando Vieira&lt;/h2&gt;
&lt;div style="float:left; margin: 3px"&gt;&lt;a href="http://www.railssummit.com.br/en/home"&gt;&lt;img src="http://railssummit.locaweb.com.br/imgs/20/original/nando.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://railssummit.locaweb.com.br/en/speakers#nando_vieira"&gt;Nando Vieira&lt;/a&gt; is one of the luminaries of the Brazilian Ruby Community. He blogs at &lt;a href="http://simplesideias.com.br/"&gt;Simples Idéias&lt;/a&gt;, one of the most popular blogs about Ruby on Rails in Brazil. He currently works as web developer for April Digital, using Rails. He&amp;#8217;s also the founder of &lt;a href="http://spesa.com.br/"&gt;Spesa&lt;/a&gt;, and maintains dozens of &lt;a href="http://github.com/fnando"&gt;Open-source projects&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;He recently released an e-book of his &lt;a href="http://howto.simplesideias.com.br/"&gt;&lt;span class="caps"&gt;HOWTO&lt;/span&gt;&lt;/a&gt; series titled &lt;a href="http://howto.simplesideias.com.br/o-que-mudou-no-ruby-19/"&gt;What has changed in Ruby 1.9&lt;/a&gt;. In the same series you can download the free e-Book &lt;a href="http://howto.simplesideias.com.br/rails-application-templates"&gt;Rails Application Templates&lt;/a&gt; which he also wrote.&lt;/p&gt;
&lt;p&gt;Come meet him at &lt;a href="http://www.railssummit.com.br/en/home"&gt;Rails Summit Latin America&lt;/a&gt;, on October 13th and 14th. We&amp;#8217;re getting close. Have you registered already?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; How did you find Ruby/Rails, what attracted you the most?&lt;/p&gt;
&lt;p&gt;I found Rails when it was still in version 0.13. At the time, there was nearly zero blogs in Portuguese about the subject and I decided to create my own! I had seen an article talking about how easy it was to create applications with it and I decided to give it a shot. Coincidentally, I was thinking of learning a new language and when I saw the syntax of Ruby, it was decided that I would learn it! And I continued up to this day.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What have you studied or developed recently, for private projects or open source?&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve seen quite a lot about Ruby 1.9, mainly in order to tailor my projects to this version. Also, I have been concerned enough about testing in general, especially Javascript (&lt;a href="http://visionmedia.github.com/jspec/"&gt;JSpec&lt;/a&gt; and &lt;a href="http://pivotallabs.com/users/nick/blog/articles/433-screw-unit-a-new-js-testing-framework-version-0-1"&gt;Screw Unit&lt;/a&gt;) and Acceptance Testing (Cucumber).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What is your talk about and what kinds of developers are going to benefit the most?&lt;/p&gt;
&lt;p&gt;I will address the changes in Ruby 1.9 from version 1.8, with examples showcasing the new features and how to fix the behaviors that no longer work. It is a subject recommended for all developers, because sooner or later, this will become the mainstream version!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9BXPaHLHGWYrC9IdUGINooqscCI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9BXPaHLHGWYrC9IdUGINooqscCI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9BXPaHLHGWYrC9IdUGINooqscCI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9BXPaHLHGWYrC9IdUGINooqscCI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>[Rails Summit 2009] Palestrante Ilya Grigorik</title><link>http://akitaonrails.com/2009/09/27/rails-summit-2009-palestrante-ilya-grigorik</link><pubDate>Sun, 27 Sep 2009 19:18:40 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5212</guid><description>&lt;p style="text-align: center"&gt;&lt;a href="http://www.railssummit.com.br?utm_campaign=Railssummit&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=por_728x90"&gt;&lt;img src="http://railssummit.com.br/imgs/43/original/728x90.gif" alt="Rails Summit 2009"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;English translation:&lt;/strong&gt; click &lt;a href="/2009/09/27/rails-summit-2009-palestrante-ilya-grigorik#ilya_english"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;div style="float: left; margin: 3px"&gt;&lt;a href="http://railssummit.locaweb.com.br/en/speakers#ilya_grigorik"&gt;&lt;img src="http://railssummit.locaweb.com.br/imgs/11/original/Ilya.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://railssummit.locaweb.com.br/en/speakers#ilya_grigorik"&gt;Ilya Grigorik&lt;/a&gt; é um desenvolvedor Ruby bem conhecido, especialmente por causa do seu blog &lt;a href="http://igvita.com"&gt;Igvita.com&lt;/a&gt; onde encontramos alguns dos artigos tecnicamente mais ricos e ainda assim de fácil compreensão, não só em torno de aplicações Rails, mas tudo que se relaciona com ele, incluindo drivers de banco de dados, análise de desempenho, integração de serviços e muito mais. Por causa disso ele foi premiado como &lt;a href="http://weblog.rubyonrails.org/2009/2/18/2009-ruby-hero-awards"&gt;Ruby Hero&lt;/a&gt; na RailsConf 2008 em Portland.&lt;/p&gt; 
&lt;p&gt;Ele também é o fundador do &lt;a href="http://www.postrank.com/"&gt;PostRank&lt;/a&gt;, um sistema de monitoramento em tempo real de  engajamento social de mídia e plataforma de análise. Ele acabou de lançar um outro produto complementar chamado &lt;a href="http://analytics.postrank.com/"&gt;Analytics&lt;/a&gt;, outra ótima maneira de controlar os seus relacionamentos.&lt;/p&gt;
&lt;p&gt;Você terá uma grande oportunidade de conhecê-lo no &lt;a href="http://www.railssummit.com.br/en/home"&gt;Rails Summit Latin America&lt;/a&gt; este ano. Não esqueça de se inscrever logo! Estamos apenas a mais alguns dias de distância!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; O que você mais gosta sobre a linguagem Ruby, o recurso ou conceito que &amp;#8220;clica&amp;#8221; para você?&lt;/p&gt;
&lt;p&gt;Eu não consigo escolher apenas um atributo, pois como a maioria das coisas, geralmente é a soma das partes que compõe a experiência. E, na verdade, é o que eu mais gosto sobre Ruby: todas as peças &amp;#8220;clicam&amp;#8221; juntas. As decisões de design por trás da linguagem Ruby dão uma natureza incrivelmente maleável: é fácil estendê-lo, é fácil modificá-lo, é fácil fazê-lo funcionar da maneira que você precisa para trabalhar na sua aplicação. Rails é o principal exemplo disso, mas as centenas de outras estruturas construídas em cima de Ruby são todos exemplos dessa propriedade.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Como um desenvolvedor Rails, o que é a coisa que você realmente gosta quando está codificando aplicações web?&lt;/p&gt;
&lt;p&gt;A capacidade de ir do nada para um protótipo totalmente operacional, em uma xícara de café. Se você está olhando para uma aplicação Rails, ou uma rápida em Sinatra / Rails Metal, a enorme quantidade de recursos e plugins torna o processo divertido e imediatamente gratificante.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Qual é a sua mais recente pesquisa ou interesse em desenvolvimento?&lt;/p&gt;
&lt;p&gt;Muito do meu tempo é dedicado à investigação e criação de protótipos de instrumentos e abordagens de arquiteturas de software distribuído &amp;#8211; desde mensagens, para balanceamento de carga, a bancos de dados. Combinado com o fato de que a maioria dos serviços que implantamos no &lt;a href="http://www.postrank.com"&gt;PostRank&lt;/a&gt; são escritos em Ruby, significa também se aprofundar mais na compreensão das partes internas do Ruby, tentando otimizar a VM para uma arquitetura distribuída.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Sobre o que é a sua palestra para o Rails Summit e quem são os tipos de desenvolvedores que se beneficiarão mais?&lt;/p&gt;
&lt;p&gt;Nesta palestra vou cobrir as tecnologias emergentes por trás da &amp;#8220;Real-Time Web&amp;#8221; (&lt;span class="caps"&gt;XMPP&lt;/span&gt;, &lt;span class="caps"&gt;AMQP&lt;/span&gt;, &lt;span class="caps"&gt;PSHB&lt;/span&gt;, Webhooks). A adoção do Rails ao modelo RESTful liberou os dados dos aplicativos e nos permitiu definir serviços que poderiam facilmente falar uns com os outros, a Real-Time Web está indo um passo além: em vez de diferentes web-services se consultando o tempo todo, conectá-los através de interfaces &lt;em&gt;push&lt;/em&gt;. Esta palestra terá início a partir do início e fornecerá uma visão geral de alto nível das tecnologias subjacentes. Saindo dela, você deve ser capaz de diferenciar e decidir sobre qual tecnologia se adaptará melhor às suas necessidades (não são todos iguais!).&lt;/p&gt;&lt;p&gt;&lt;a name="ilya_english"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Speaker Ilya Grigorik&lt;/h2&gt;
&lt;div style="float: left; margin: 3px"&gt;&lt;a href="http://railssummit.locaweb.com.br/en/speakers#ilya_grigorik"&gt;&lt;img src="http://railssummit.locaweb.com.br/imgs/11/original/Ilya.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://railssummit.locaweb.com.br/en/speakers#ilya_grigorik"&gt;Ilya Grigorik&lt;/a&gt; is a very well known Ruby developer, specially from his blog &lt;a href="http://igvita.com"&gt;Igvita.com&lt;/a&gt; where one can find some of the most technically rich yet easily understandable articles surrounding not only Rails apps but everything that goes with it, including database drivers, performance analysis, services integration and much more. Because of that he was awarded &lt;a href="http://weblog.rubyonrails.org/2009/2/18/2009-ruby-hero-awards"&gt;Ruby Hero&lt;/a&gt; at RailsConf 2008 in Portland.&lt;/p&gt;
&lt;p&gt;He is also the founder of &lt;a href="http://www.postrank.com"&gt;PostRank&lt;/a&gt;, a real-time social media engagement monitoring and analytics platform. He just released another companion product called &lt;a href="http://analytics.postrank.com/"&gt;Analytics&lt;/a&gt;, another great way to keep track of your online engagements.&lt;/p&gt;
&lt;p&gt;You will have a great opportunity to get to know him at &lt;a href="http://www.railssummit.com.br/en/home"&gt;Rails Summit Latin America&lt;/a&gt; this year. Don&amp;#8217;t forget to Register! We&amp;#8217;re just a few more days away!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What do you like the most about the Ruby language, what feature or concept really &amp;#8220;clicks&amp;#8221; for you?&lt;/p&gt;
&lt;p&gt;I can never pick any one attribute because as with most things, it is usually the sum of parts that makes up the experience. And in fact, that&amp;#8217;s what I enjoy most about Ruby: all the parts click together. The design decisions behind the language give Ruby an incredibly malleable nature: it is easy to extend it, it is easy to modify it, it is easy to make it work in just the way you need it to work for your application. Rails is the premier example of this, but the hundreds of other frameworks built on top of Ruby are all examples of this property.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; As a Rails developer, what is the thing you really enjoy when you&amp;#8217;re coding web apps?&lt;/p&gt;
&lt;p&gt;The ability to go from nothing to a fully operational prototype with one cup of coffee. Whether you&amp;#8217;re looking at a fully fledged Rails application, or a quick Sinatra / Rails Metal app, the sheer amount of resources, and plugins makes the process both fun and immediately rewarding.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What are your most recent research or development interests?&lt;/p&gt;
&lt;p&gt;A lot of my time is always dedicated to research and prototyping of tools and approaches for distributed software architectures &amp;#8211; anything from messaging, to load balancing, to databases. Combined with the fact that most of the services we deploy at &lt;a href="http://www.postrank.com"&gt;PostRank&lt;/a&gt; are written in Ruby, it also means delving deeper into understanding the internals of Ruby, and trying to optimize the VM for the distributed architecture.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What is your Rails Summit talk about and who are the kind of developers that will benefit the most?&lt;/p&gt;
&lt;p&gt;In this talk I will cover the emerging technologies behind the &amp;#8217;Real-Time Web&amp;quot; (&lt;span class="caps"&gt;XMPP&lt;/span&gt;, &lt;span class="caps"&gt;AMQP&lt;/span&gt;, &lt;span class="caps"&gt;PSHB&lt;/span&gt;, Webhooks). Rails adoption of the RESTful model liberated the data from the app and allowed us to define services that could easily talk to each other, the Real-Time Web is looking to go one step beyond that: instead of polling different web-services, it aims to connect them via push interfaces. This talk will start from the beginning and will provide a high-level overview of the underlying technologies. Coming out of it, you should be able to differentiate and decide on which technology suits your needs best (they are not all the same!).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IqfqTStNSNWG3aXzoHahnrCtd3Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IqfqTStNSNWG3aXzoHahnrCtd3Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IqfqTStNSNWG3aXzoHahnrCtd3Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IqfqTStNSNWG3aXzoHahnrCtd3Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>[Rails Summit 2009] Palestrante Matt Aimonetti</title><link>http://akitaonrails.com/2009/09/23/rails-summit-2009-palestrante-matt-aimonetti</link><pubDate>Wed, 23 Sep 2009 17:13:12 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5210</guid><description>&lt;p style="text-align: center"&gt;&lt;a href="http://www.railssummit.com.br?utm_campaign=Railssummit&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=por_728x90"&gt;&lt;img src="http://railssummit.com.br/imgs/43/original/728x90.gif" alt="Rails Summit 2009"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;English translation:&lt;/strong&gt; click &lt;a href="/2009/09/23/rails-summit-2009-palestrante-matt-aimonetti#matt_english"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;div style="float: left; margin: 4px"&gt;&lt;a href="http://railssummit.locaweb.com.br/pt-BR/speakers#matt_aimonetti"&gt;&lt;img src="http://railssummit.locaweb.com.br/imgs/36/original/matt.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://merbist.com/"&gt;Matt Aimonetti&lt;/a&gt; é um ativista Rails, ele começou como evangelista de Merb e se envolveu na já famosa junção do Rails + Merb. Ele também é ativo na área de MacRuby e HotCocoa. Ele mora em San Diego, onde dirige sua  própria &lt;a href="http://ma-agile.com/"&gt;consultoria&lt;/a&gt;, fazendo projetos e treinamentos relacionados com Ruby, e ele também é um palestrante conhecido em eventos. Nós nos encontramos pela primeira vez no ano passado, na QCon de São Francisco. Você pode ouvir a entrevista que gravamos naquela época &lt;a href="/2008/11/21/rails-podcast-brasil-qcon-special-john-straw-yellowpages-com-and-matt-aimonetti-merb"&gt;aqui&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Ele estará conosco no &lt;a href="http://www.railssummit.com.br/"&gt;Rails Summit Latin America 2009&lt;/a&gt;. Não esqueça de se inscrever!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; O que você mais gosta na linguagem Ruby, qual recurso ou conceito te atrai?&lt;/p&gt;
&lt;p&gt;Acho que o Ruby é a melhor linguagem de programação para expressar o que eu quero no meu código. É tão natural que parece mesmo &amp;#8220;certo&amp;#8221;. As pessoas são, como o falecido Guy Decoux era, capaz de se comunicar apenas em &lt;a href="http://www.ruby-forum.com/topic/166658"&gt;código Ruby&lt;/a&gt; e isso significa muito para mim. Mas há mais do que a fantástica sintaxe. Ruby tem uma maravilhosa comunidade e valores fortes, tais como testes, refatoramento, melhores práticas, open source etc.&lt;/p&gt;
&lt;p&gt;Eu estou realmente empolgado vendo empresas como a Apple e a Microsoft apostando fortemente na linguagem Ruby e sua comunidade.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Qual é a coisa que você mais gosta sobre Rails quando codifica aplicações web?&lt;/p&gt;
&lt;p&gt;O que eu mais gosto quando escrevo uma aplicação Rails está em usar Ruby. Eu tentei usar outros clones de Rails em outras línguas e nenhuma chegou perto da mesma experiência, devido à linguagem de programação subjacente. Mas além do Ruby, minha segunda coisa favorita sobre o Rails é a seqüência de uso de convenções inteligentes. Eu posso ver qualquer projeto Rails e compreender imediatamente o que está acontecendo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Qual é o seu interesse mais recente de pesquisa ou desenvolvimento?&lt;/p&gt;
&lt;p&gt;Eu aprendi muito sobre Ruby, trabalhando em MacRuby. Como se vê, há um monte de coisas no Ruby e suas bibliotecas-padrão que muito raramente uso. Eu também estou experimentando com pequenos jogos 2D escrito em Ruby. É uma mudança agradável de desenvolvimento web. Finalmente, eu ainda estou trabalhando com CouchDB e armazenamento de dados alternativos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Sobre o que é sua palestra para o Rails Summit e quem são os tipos de desenvolvedores que irão se beneficiar mais?&lt;/p&gt;
&lt;p&gt;Minha palestra é sobre o futuro do Ruby on Rails e concretamente o que isso significa para os desenvolvedores. Não será uma palestra sobre o encanamento interno, mas mais sobre uma perspectiva de alto nível com exemplos de nível mais elevado de código e exemplos concretos de coisas novas impressionantes que estarão disponíveis para os desenvolvedores Ruby.&lt;/p&gt;
&lt;p&gt;As pessoas que estão interessadas no que está chegando, os céticos e pessoas considerando usar Ruby/Rails pela primeira vez provavelmente acharão isso interessante.&lt;/p&gt;
&lt;p&gt;Além disso, se você gosta de &amp;#8220;futebol&amp;#8221;, deveria vir assistir minha palestra ;)&lt;/p&gt;&lt;p&gt;&lt;a name="matt_english"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Speaker Matt Aimonetti&lt;/h2&gt;
&lt;div style="float: left; margin: 4px"&gt;&lt;a href="http://railssummit.locaweb.com.br/en/speakers#matt_aimonetti"&gt;&lt;img src="http://railssummit.locaweb.com.br/imgs/36/original/matt.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://merbist.com/"&gt;Matt Aimonetti&lt;/a&gt; is a Rails Activist, he started as a Merb evangelist and was involved in the now famous Rails + Merb merge. He is also active in the MacRuby arena with HotCocoa. He lives in San Diego where he runs his own &lt;a href="http://ma-agile.com/"&gt;consultancy&lt;/a&gt;, doing Ruby related projects and training, and he is also a well known speaker in events. We met for the first time at last year&amp;#8217;s San Francisco QCon. You can listen to an interview we recorded back then &lt;a href="/2008/11/21/rails-podcast-brasil-qcon-special-john-straw-yellowpages-com-and-matt-aimonetti-merb"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;He will be with us at &lt;a href="http://www.railssummit.com.br/en/home"&gt;Rails Summit Latin America 2009&lt;/a&gt;. Don&amp;#8217;t forget to register soon and make reservations for hotel and city tour (it will be a great opportunity to also get to know São Paulo City).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What do you like the most about the Ruby language, what feature or concept really &amp;#8220;clicks&amp;#8221; for you?&lt;/p&gt;
&lt;p&gt;I found Ruby to be the best programming language to express what I want my code to do. It is so natural that it feels &amp;#8220;right&amp;#8221;. People are, like the late Guy Decoux was, able communicate only in &lt;a href="http://www.ruby-forum.com/topic/166658"&gt;Ruby code&lt;/a&gt; and that means a lot to me. But there is more to it than the awesome syntax. Ruby has an awesome community and strong values such as testing, refactoring, best practices, &lt;span class="caps"&gt;OSS&lt;/span&gt; etc..&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m really psyched to see companies like Apple and Microsoft bet heavily on the Ruby language and community.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What is the thing you really enjoy about Rails when you&amp;#8217;re coding web apps?&lt;/p&gt;
&lt;p&gt;What I enjoy the most when writing a Rails app is using Ruby. I tried using other Rails clones in other languages and none came close to the user experience due to the underlying programming language. But apart from Ruby, my second favorite thing about Rails is the string use of smart conventions. I can take almost any Rails projects and understand right away what&amp;#8217;s going on.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What are your most recent research or development interests?&lt;/p&gt;
&lt;p&gt;I learned so much about Ruby by working on MacRuby. As it turns out, there are a lot of goodies in Ruby and its standard libraries that we very rarely use. I&amp;#8217;m also experimenting with small 2D video games written in Ruby. It is a nice change from web development. Finally, I&amp;#8217;m still working with CouchDB and alternative data storage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What is your Rails Summit talk about and who are the kind of developers that will benefit the most?&lt;/p&gt;
&lt;p&gt;My talk is about the future of Ruby and Rails and what it concretely means for developers. It&amp;#8217;s not going to be a talk about the inner plumbing but more about the big picture with higher level code examples and concrete examples of awesome new things that are going to be available to Ruby developers.&lt;/p&gt;
&lt;p&gt;People who are interested in what&amp;#8217;s coming up, skeptics and people considering using Ruby/Rails for the first time will hopefully find the talk interesting.&lt;/p&gt;
&lt;p&gt;Also, if you like &amp;#8220;futebol&amp;#8221; you should definitely come check out my talk ;)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZvAJ8oB-u_TmQ118h_Eb59cSjNY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZvAJ8oB-u_TmQ118h_Eb59cSjNY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZvAJ8oB-u_TmQ118h_Eb59cSjNY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZvAJ8oB-u_TmQ118h_Eb59cSjNY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>[Rails Summit 2009] Palestrante Carlos Brando</title><link>http://akitaonrails.com/2009/09/21/rails-summit-2009-palestrante-carlos-brando</link><pubDate>Mon, 21 Sep 2009 06:18:29 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5209</guid><description>&lt;p style="text-align: center"&gt;&lt;a href="http://www.railssummit.com.br?utm_campaign=Railssummit&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=por_728x90"&gt;&lt;img src="http://railssummit.com.br/imgs/43/original/728x90.gif" alt="Rails Summit 2009"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;English translation:&lt;/strong&gt; click &lt;a href="/2009/09/21/rails-summit-2009-palestrante-carlos-brando#carlos-brando-english"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;div style="float: left; margin: 3px"&gt;&lt;a href="http://railssummit.locaweb.com.br/pt-BR/speakers#carlos_brando"&gt;&lt;img src="http://railssummit.locaweb.com.br/imgs/21/original/brando.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;O &lt;strong&gt;Carlos Brando&lt;/strong&gt; acho que dispensa apresentações :-) Todos já o conhecem pelo blog &lt;a href="http://nomedojogo.com"&gt;Nome do Jogo&lt;/a&gt;, pelo e-book &lt;a href="http://www.nomedojogo.com/2008/06/09/new-free-book-ruby-on-rails-21-whats-new/"&gt;Rails 2.1&lt;/a&gt; e por &lt;a href="http://github.com/carlosbrando/"&gt;projetos open-source&lt;/a&gt; como o &lt;a href="http://www.nomedojogo.com/2008/11/18/shoulda-for-rspec-is-remarkable/"&gt;Remarkable&lt;/a&gt;. Dentre suas colaborações mais recentes, está a tradução do excelente livro do _why, o &lt;a href="http://why.nomedojogo.com/"&gt;Poignant Guide to Ruby&lt;/a&gt;; e o lançamento da versão nacional do site britânico &lt;a href="http://www.rubyinside.com.br"&gt;Ruby Inside&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Na sua &lt;a href="http://www.nomedojogo.com/sobre/"&gt;própria descrição&lt;/a&gt;, ele é viciado em programação e atualmente é diretor de tecnologia da &lt;a href="http://amanaie.com.br/"&gt;Amanaiê&lt;/a&gt;, uma empresa que cria, produz e distribui aplicativos sociais. Atua na área de desenvolvimento de softwares há mais de doze anos, tendo trabalhado com Visual Basic, C, C++, Java, C# e agora &lt;strong&gt;Ruby&lt;/strong&gt;. Já trabalhou em várias companhias brasileiras e estrangeiras como Portugal Telecom Group, AT&amp;amp;T Latin America, DirecTV, &lt;span class="caps"&gt;SKY&lt;/span&gt;, &lt;span class="caps"&gt;VISA&lt;/span&gt; e &lt;a href="http://surgeworks.com/"&gt;Surgeworks Inc&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Já se apresentou em vários eventos brasileiros relacionados com Ruby, incluindo a edição do ano passado do &lt;a href="http://www.railssummit.com.br/"&gt;Rails Summit Latin America&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Além de suas atividades profissionais, Carlos e sua esposa trabalham como voluntários dando aulas para deficientes auditivos. Ele regularmente ensina língua de sinais e atua como interprete.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Como você encontrou Ruby/Rails, o que foi que mais te atraiu?&lt;/p&gt;
&lt;p&gt;Eu já trabalhava há 12 anos como programador e pelo menos 7 principalmente com tecnologia Microsoft e estava um pouco cansado de fazer as mesmas coisas todos os dias, literalmente tinha perdido o prazer no meu trabalho. Foi quando ouvi falar do Rails pela primeira vez, mas sem entender do que se tratava, simplesmente o ignorei. Alguns meses depois li um artigo no blog do Chad Fowler onde ele mencionava o Ruby e como estava feliz em trabalhar com esta linguagem e isto me fez voltar a olhar para o Rails.&lt;/p&gt;
&lt;p&gt;Comecei estudando por conta própria e comprei o livro &amp;#8220;Repensando a web com Rails&amp;#8221; do Fábio Akita e o &lt;a href="http://www.amazon.com/Ruby-Way-Second-Techniques-Programming/dp/0672328844"&gt;The Ruby Way&lt;/a&gt; de Hal Fulton. Em duas semanas eu já tinha montado meu primeiro site em Rails, o extinto CarreiraTI, um site de empregos para profissionais da área de tecnologia. Seis meses depois fui convidado para fazer parte da equipe da Surgeworks, onde trabalhei por quase 2 anos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails&lt;/strong&gt;: Quais assuntos mais te interessam atualmente e por quê?&lt;/p&gt;
&lt;p&gt;Tenho me interessado muito pelas entranhas da linguagem, entender como o Ruby funciona por dentro. Aos poucos estou deixando o Rails cada vez mais de lado, e me envolvendo mais com o Ruby.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails&lt;/strong&gt;: Sobre o que trata sua palestra e para que tipos de desenvolvedores é mais indicado?&lt;/p&gt;
&lt;p&gt;Atualmente fui contratado por uma startup brasileira chamada Amanaiê, que desenvolve aplicativos para redes sociais. Depois de passar um tempo fazendo software para estas plataformas, estou trabalhando especificamente no desenvolvimento de um framework para acelerar a criação de projetos deste tipo. Durante muito tempo acompanhei de perto o desenvolvimento do Rails, o que me rendeu dois livros. Este conhecimento é o que tem me ajudado a repensar algumas coisas e criar um novo framework baseado no Ruby.&lt;/p&gt;
&lt;p&gt;Minha palestra no Rails Summit tratará exatamente deste tema: o processo de construção de um framework utilizando Ruby. Se você realmente quer entender como o Rails funciona, então crie o seu próprio framework. Nesta palestra vou comentar sobre algumas das dificuldades que encontrei durante este projeto e quais as soluções encontradas. O processo de renderização, geradores de códigos, helpers e banco de dados estão entre os assuntos que serão tratados. Acredito que ao analisar este tópicos de um ponto de vista mais simplista fará com que você entenda melhor como algumas coisas funcionam internamente no Rails.&lt;/p&gt;
&lt;p&gt;&lt;a name="carlos-brando-english"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Speaker Carlos Brando&lt;/h2&gt;
&lt;div style="float:left; margin: 3px"&gt;&lt;a href="http://railssummit.locaweb.com.br/en/speakers#carlos_brando"&gt;&lt;img src="http://railssummit.locaweb.com.br/imgs/21/original/brando.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I think &lt;strong&gt;Carlos Brando&lt;/strong&gt; needs no introduction :-) Everyone knows his blog &lt;a href="http://nomedojogo.com"&gt;Nome do Jogo&lt;/a&gt;, the e-book &lt;a href="http://www.nomedojogo.com/2008/06/09/new-free-book-ruby-on-rails-21-whats-new/"&gt;Rails 2.1&lt;/a&gt;, his &lt;a href="http://github.com/carlosbrando/"&gt;open-source projects&lt;/a&gt; such as &lt;a href="http://www.nomedojogo.com/2008/11/18/shoulda-for-rspec-is-remarkable/"&gt;Remarkable&lt;/a&gt;. Among his most recent collaborations, there&amp;#8217;s the translation of the excellent book from _why, the &lt;a href="http://why.nomedojogo.com/"&gt;Poignant Guide to Ruby&lt;/a&gt;; and the launch of the Brazilian version of the British website &lt;a href="http://www.rubyinside.com"&gt;Ruby Inside&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;In his &lt;a href="http://www.nomedojogo.com/sobre/"&gt;own words&lt;/a&gt;, he is addicted to programming and is currently chief technology officer for &lt;a href="http://amanaie.com.br/"&gt;Amanaiê&lt;/a&gt;, a Brazilian company that creates, produces and distributes social applications. He is in the software development field for over twelve years, having worked with Visual Basic, C, C++, Java, C# and now Ruby. He has worked in several Brazilian and foreign companies like Portugal Telecom Group, AT&amp;amp;T Latin America, DirecTV, &lt;span class="caps"&gt;SKY&lt;/span&gt;, &lt;span class="caps"&gt;VISA&lt;/span&gt; and &lt;a href="http://surgeworks.com/"&gt;Surgeworks Inc&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;He has performed in several events related to Ruby in Brazil, including last year&amp;#8217;s edition of &lt;a href="http://www.railssummit.com.br/"&gt;Rails Summit Latin America&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In addition to his professional activities, Carlos and his wife volunteer teaching to deaf people. He regularly teaches sign language and acts as interpreter.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails&lt;/strong&gt;: How did you find Ruby / Rails, what most attracted you?&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve been working 12 years as a programmer and at least 7 of them primarily with Microsoft technologies; and I was a bit tired of doing the same things over and over. I&amp;#8217;ve literally lost the pleasure in my work. When I heard about Rails for the first time &amp;#8211; without understanding what it was &amp;#8211; I simply ignored it. A few months later I read an article in Chad Fowler&amp;#8217;s blog where he mentioned how happy he was to work with Ruby, and this made me take a second look at Rails.&lt;/p&gt;
&lt;p&gt;I started studying on my own and bought &amp;#8220;Rethinking the web with Rails&amp;#8221; book by Fabio Akita and &lt;a href="http://www.amazon.com/Ruby-Way-Second-Techniques-Programming/dp/0672328844"&gt;The Ruby Way&lt;/a&gt; by Hal Fulton. In two weeks I had set up my first site in Rails, the now extinct CarreiraTI, a job site for professionals in technology. Six months later I was invited to join the Surgeworks team, where I worked for almost 2 years.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails&lt;/strong&gt;: What subjects interest you the most nowadays and why?&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve been very interested in the inner plumbings of the language, to understand how Ruby works from the inside. I am gradually leaving Rails aside, and getting more involved with Ruby.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails&lt;/strong&gt;: What is your talk at Rails Summit about, and what kind of developers will benefit the most?&lt;/p&gt;
&lt;p&gt;I am currently hired by a Brazilian startup called Amanaiê, which develops social network applications. After spending time making software for these platforms, I&amp;#8217;m working specifically on developing a framework to speed up the creation of such projects. For a long time I closely followed the development of Rails, which resulted in two books. This knowledge is what helped me to rethink some things and create a new framework based on Ruby.&lt;/p&gt;
&lt;p&gt;My talk at Rails Summit will address exactly this issue: the process of building a framework using Ruby. If you really want to understand how Rails works, then create your own framework. In this talk I comment on some of the difficulties I found during this project and what were solutions I used. The process of rendering, code generators, helpers and database are among the subjects to be treated. I believe that in examining this topic from a  more simplistic standpoint will make you better understand how things work internally in Rails.&lt;/p&gt;
&lt;p&gt;Rails Summit will have Portuguese to English translator, so you can watch Carlos talk too! &lt;a href="http://www.railssummit.com.br/en/home"&gt;Register now!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5za2X4aTUw3Xqeh_FEcbUtUwUw4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5za2X4aTUw3Xqeh_FEcbUtUwUw4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5za2X4aTUw3Xqeh_FEcbUtUwUw4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5za2X4aTUw3Xqeh_FEcbUtUwUw4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>[Rails Summit 2009] Palestrante Bryan Liles</title><link>http://akitaonrails.com/2009/09/18/rails-summit-2009-palestrante-bryan-liles</link><pubDate>Fri, 18 Sep 2009 09:29:47 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5207</guid><description>&lt;p style="text-align: center"&gt;&lt;a href="http://www.railssummit.com.br?utm_campaign=Railssummit&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=por_728x90"&gt;&lt;img src="http://railssummit.com.br/imgs/43/original/728x90.gif" alt="Rails Summit 2009"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;English translation:&lt;/strong&gt; click &lt;a href="/2009/09/18/rails-summit-2009-palestrante-bryan-liles#en_bryan_liles"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://railssummit.locaweb.com.br/pt-BR/pages/speakers#bryan_liles"&gt;Bryan Liles&lt;/a&gt; ficou bastante conhecido depois do Ruby Hoedown de 2008 com sua palestra &lt;a href="http://rubyhoedown2008.confreaks.com/05-bryan-liles-lightning-talk-tatft-test-all-the-f-in-time.html"&gt;Test All the Fucking Time&lt;/a&gt; cunhando o termo &amp;#8220;&lt;span class="caps"&gt;TATFT&lt;/span&gt;&amp;#8221;.&lt;/p&gt;
&lt;p style="text-align:center"&gt;&lt;object width="600" height="345"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4544115&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=4544115&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="345"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/4544115"&gt;RailsConf 2009 &amp;#8211; Mensagem de Bryan Liles para Brasileiros&lt;/a&gt; from &lt;a href="http://vimeo.com/akitaonrails"&gt;Fabio Akita&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Ele virá falar sobre boas práticas de programação, baseado numa séria que começou recentemente no seu blog &lt;a href="http://smartic.us/"&gt;Smartic.us&lt;/a&gt;, chamado &lt;a href="http://smartic.us/category/yerdoinitwrong/"&gt;#yerdoinitwrong&lt;/a&gt; (literalmente, &amp;#8220;voceestafazendoerrado&amp;#8221;). Veja a apresentação da série:&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;object width="600" height="405"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=6581783&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=6581783&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="405"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/6581783"&gt;#yerdoinitwrong intro&lt;/a&gt; from &lt;a href="http://vimeo.com/bryanl"&gt;Bryan Liles&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;O &lt;a href="http://smartic.us/2009/09/16/yerdoinitwrong-episode-1-logging-with-syslog/"&gt;primeiro episódio&lt;/a&gt; fala sobre enviar os logs do Rails para um servidor remoto usando syslog, e recomenda o excelente Splunk, que eu também gosto. Não perca os episódios.&lt;/p&gt;
&lt;p&gt;Não deixe de trocar figurinhas com ele durante o Rails Summit! &lt;a href="http://www.railssummit.com.br"&gt;Inscreva-se já!&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="en_bryan_liles"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Speaker Bryan Liles&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://railssummit.locaweb.com.br/en/pages/speakers#bryan_liles"&gt;Bryan Liles&lt;/a&gt; became very well known after his talk &lt;a href="http://rubyhoedown2008.confreaks.com/05-bryan-liles-lightning-talk-tatft-test-all-the-f-in-time.html"&gt;Test All the Fucking Time&lt;/a&gt; at Ruby Hoedown 2008, coining the term &amp;#8220;&lt;span class="caps"&gt;TATFT&lt;/span&gt;&amp;#8221;.&lt;/p&gt;
&lt;p style="text-align:center"&gt;&lt;object width="600" height="345"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4544115&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=4544115&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="345"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/4544115"&gt;RailsConf 2009 &amp;#8211; Bryan Liles message to Brazilians&lt;/a&gt; from &lt;a href="http://vimeo.com/akitaonrails"&gt;Fabio Akita&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;He&amp;#8217;ll come to talk about best practices in software development, based on the series he recentely started at his blog &lt;a href="http://smartic.us/"&gt;Smartic.us&lt;/a&gt; called &lt;a href="http://smartic.us/category/yerdoinitwrong/"&gt;#yerdoinitwrong&lt;/a&gt;. Watch his introduction to the series:&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;object width="600" height="405"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=6581783&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=6581783&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="405"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/6581783"&gt;#yerdoinitwrong intro&lt;/a&gt; from &lt;a href="http://vimeo.com/bryanl"&gt;Bryan Liles&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://smartic.us/2009/09/16/yerdoinitwrong-episode-1-logging-with-syslog/"&gt;first episode&lt;/a&gt; talks about sending your Rails logs to a remote server using syslog, and he even recommends the excellent Splunk, which I like as well. Don&amp;#8217;t miss his episodes.&lt;/p&gt;
&lt;p&gt;And come to the Rails Summit to talk and exchange information with him! &lt;a href="http://www.railssummit.com.br/en/home"&gt;Register now!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ETLMmCCvE8KdWfucEeT0Bm1UjJ8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ETLMmCCvE8KdWfucEeT0Bm1UjJ8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ETLMmCCvE8KdWfucEeT0Bm1UjJ8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ETLMmCCvE8KdWfucEeT0Bm1UjJ8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>[Rails Summit 2009] Palestrante Leonardo Borges</title><link>http://akitaonrails.com/2009/09/17/rails-summit-2009-palestrante-leonardo-borges</link><pubDate>Thu, 17 Sep 2009 15:51:48 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5206</guid><description>&lt;p style="text-align: center"&gt;&lt;a href="http://www.railssummit.com.br?utm_campaign=Railssummit&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=por_728x90"&gt;&lt;img src="http://railssummit.com.br/imgs/43/original/728x90.gif" alt="Rails Summit 2009"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;English translation:&lt;/strong&gt; click &lt;a href="/2009/09/17/rails-summit-2009-palestrante-leonardo-borges#leonardo-borges-english"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A partir de hoje vou colocar alguns posts sobre alguns dos palestrantes do &lt;a href="http://www.railssummit.com.br"&gt;Rails Summit Latin America 2009&lt;/a&gt;. Não deixe de se inscrever! Dias 13 e 14 de Outubro, em São Paulo.&lt;/p&gt;
&lt;div style="float: left; margin: 3px"&gt;&lt;a href="http://railssummit.locaweb.com.br/pt-BR/speakers"&gt;&lt;img src="http://railssummit.locaweb.com.br/imgs/5/original/leonardo.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Leonardo Borges&lt;/strong&gt; é desenvolvedor com 9 anos de experiência, já trabalhou em empresas de portes variados criando aplicações corporativas especialmente em Java. Atualmente vive em Madrid e trabalha com Ruby On Rails na &lt;a href="http://www.miraiespana.com/"&gt;Mirai España&lt;/a&gt; onde, dentre outros projetos, participa da iniciativa JRuby de integrar código legado com Rails. Escreve no &lt;a href="http://www.leonardoborges.com/"&gt;seu blog&lt;/a&gt; sobre desenvolvimento de software e temas relacionados.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Como você encontrou Ruby/Rails, o que foi que mais te atraiu?&lt;/p&gt;
&lt;p&gt;Foi no início de 2007. Lendo blogs e notícias na internet cheguei no site oficial do Rails e vi o famoso vídeo &lt;a href="http://www.rubyonrails.pro.br/apresentacoes"&gt;Creating a weblog in 15 minutes&lt;/a&gt;. Fiquei impressionado! Aquele vídeo foi capaz de vender nao só a produtividade que o Rails proporciona, mas o nível de expressividade ao qual podemos chegar em Ruby.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Quais assuntos mais te interessa atualmente e por quê?&lt;/p&gt;
&lt;p&gt;Devido à natureza dos projetos aqui na empresa &amp;#8211; um mix de Ruby e Java &amp;#8211; tenho me interessado bastante em JRuby e a &lt;span class="caps"&gt;JVM&lt;/span&gt; de uma maneira geral, estudando também alternativas como Scala.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; Sobre o que trata sua palestra e para que tipos de desenvolvedores é mais indicado?&lt;/p&gt;
&lt;p&gt;Eu acredito que JRuby veio pra ficar e que uma de suas maiores forças está em atrair empresas/desenvolvedores já acostumados ao mundo Java. Para isso uma integração precisa e simples entre Ruby e Java deve ser possível.&lt;/p&gt;
&lt;p&gt;Na minha palestra &amp;#8220;JRuby no mundo corporativo&amp;#8221; vou mostrar como essa integração pode ser feita para dar uma nova roupagem a um sistema legado usando JRuby on Rails.&lt;/p&gt;
&lt;p&gt;Essa sessão é para qualquer desenvolvedor Ruby interessado em rodar suas applicaçoes na &lt;span class="caps"&gt;JVM&lt;/span&gt;. No entanto, se você está trabalhando com Java no momento e está pensando como pode introduzir Ruby na sua empresa, essa palestra pode ser particularmente útil.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;AVISO&lt;/span&gt;: Você verá fontes Java e &lt;span class="caps"&gt;XML&lt;/span&gt; nessa sessão! :P&lt;/p&gt;
&lt;h3&gt;Links&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Blog do Leonardo: &lt;a href="http://leonardoborges.com/"&gt;http://leonardoborges.com/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Site oficial do JRuby: &lt;a href="http://www.jruby.org/"&gt;http://www.jruby.org/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;JRubyConf, primeiro evento específico de JRuby em São Francisco, pela Engine Yard: &lt;a href="http://www.jrubyconf.com/"&gt;http://www.jrubyconf.com/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Blog do Charles Nutter, principal mantenedor: &lt;a href="http://blog.headius.com/"&gt;http://blog.headius.com/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Jetty-Rails, uma das melhores formas de desenvolver JRuby on Rails: &lt;a href="http://jetty-rails.rubyforge.org/"&gt;http://jetty-rails.rubyforge.org/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;JTestR, testando Java usando ferramentas Ruby como RSpec: &lt;a href="http://jtestr.codehaus.org/"&gt;http://jtestr.codehaus.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a name="leonardo-borges-english"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Speaker Leonardo Borges&lt;/h2&gt;
&lt;p style="text-align: center"&gt;&lt;a href="http://www.railssummit.com.br?utm_campaign=Railssummit&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=por_728x90"&gt;&lt;img src="http://railssummit.com.br/imgs/43/original/728x90.gif" alt="Rails Summit 2009"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Starting off today, I&amp;#8217;ll post about some of the speakers for &lt;a href="http://www.railssummit.com.br"&gt;Rails Summit Latin America 2009&lt;/a&gt;. Register today! It&amp;#8217;s gonna be at São Paulo, Brazil, October 13th and 14th.&lt;/p&gt;
&lt;div style="float: left; margin: 3px"&gt;&lt;a href="http://railssummit.locaweb.com.br/pt-BR/speakers"&gt;&lt;img src="http://railssummit.locaweb.com.br/imgs/5/original/leonardo.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Leonardo Borges&lt;/strong&gt; is a developer with 9 years of experience. He&amp;#8217;ve been working for several companies creating enterprise applications specially with Java. He currently lives in Madrid, where he works with Ruby on Rails at &lt;a href="http://www.miraiespana.com/"&gt;Mirai España&lt;/a&gt; where, among other projects, colaborates in the JRuby initiative to integrate legacy code with Rails. He writes in &lt;a href="http://www.leonardoborges.com/"&gt;his blog&lt;/a&gt; about software development and related subjects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; How did you find Ruby/Rails, what attracted you the most?&lt;/p&gt;
&lt;p&gt;It was in the beginning of 2007. By reading blogs and news on the internet I arrived at the Rails official website where I saw the famous &lt;a href="http://rubyonrails.org/screencasts"&gt;Creating a weblog in 15 minutes&lt;/a&gt; screencast. I was impressed! That video was able to sell not only the productivity that Rails delivers, but also the level of expressiveness where we can achieve in Ruby.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What subjects most interest you and why?&lt;/p&gt;
&lt;p&gt;Due to the nature of the projects I have in my company &amp;#8211; a mixture of Ruby and Java &amp;#8211; I&amp;#8217;ve very interested in JRuby and the &lt;span class="caps"&gt;JVM&lt;/span&gt; in general, studying alternatives such as Scala as well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AkitaOnRails:&lt;/strong&gt; What is the subject of your talk and what kind of developers will benefit the most?&lt;/p&gt;
&lt;p&gt;I believe that JRuby will stay for a long time and one of its major strengths is to attract companies/developers already used to the Java world. For that end, a precise and simple integration between Ruby and Java is necessary.&lt;/p&gt;
&lt;p&gt;In my talk &amp;#8220;JRuby in the enterprise&amp;#8221; I&amp;#8217;ll show how that integration can be achieved to bring new life to a legacy system using JRuby on Rails.&lt;/p&gt;
&lt;p&gt;This session is recommended to any Ruby developer interested in running his applications on the &lt;span class="caps"&gt;JVM&lt;/span&gt;. On the other hand, if you&amp;#8217;re currently working with Java and trying to figure out how to introduce Ruby in your company, this talk can be particularly useful.&lt;/p&gt;
&lt;p&gt;Warking: You&amp;#8217;ll see lots of Java and &lt;span class="caps"&gt;XML&lt;/span&gt; source code in this talk! :P&lt;/p&gt;
&lt;h3&gt;Links&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Leonardo&amp;#8217;s Blog: &lt;a href="http://leonardoborges.com/"&gt;http://leonardoborges.com/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;JRuby official website: &lt;a href="http://www.jruby.org/"&gt;http://www.jruby.org/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;JRubyConf, the first specific event for JRuby, in San Francisco, by Engine Yard: &lt;a href="http://www.jrubyconf.com/"&gt;http://www.jrubyconf.com/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Charles Nutter&amp;#8217;s Blog, the main maintainer: &lt;a href="http://blog.headius.com/"&gt;http://blog.headius.com/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Jetty-Rails, one of the best ways to develop with JRuby on Rails: &lt;a href="http://jetty-rails.rubyforge.org/"&gt;http://jetty-rails.rubyforge.org/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;JTestR, testing Java using Ruby tools such as RSpec: &lt;a href="http://jtestr.codehaus.org/"&gt;http://jtestr.codehaus.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kI8eWrjQc5FhwpAchjVkrD2DsX4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kI8eWrjQc5FhwpAchjVkrD2DsX4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kI8eWrjQc5FhwpAchjVkrD2DsX4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kI8eWrjQc5FhwpAchjVkrD2DsX4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Playing with Dry Scaffold and Inherited Resources</title><link>http://akitaonrails.com/2009/09/09/playing-with-dry-scaffold-and-inherited-resources</link><pubDate>Wed, 09 Sep 2009 11:40:37 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5200</guid><description>&lt;p&gt;There are several ways to start a new Rails project nowadays, specially since Rails brought &lt;a href="http://github.com/jeremymcanally/rails-templates/tree/master"&gt;project templates&lt;/a&gt; to the mix. On the other hand there are still lot&amp;#8217;s of generators. So, today I want to just pinpoint some tips on this regard.&lt;/p&gt;
&lt;p&gt;First of all, make sure you have all the usual suspects installed:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;sudo gem install rspec rspec-rails josevalim-inherited_resources mislav-will_paginate justinfrench-formtastic thoughtbot-factory_girl haml ryanb-nifty_generators&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;One other is &lt;a href="http://github.com/akitaonrails/dry_scaffold/tree/master"&gt;dry_scaffold&lt;/a&gt; from &lt;a href="http://github.com/akitaonrails/grimen"&gt;grimen&lt;/a&gt;. I&amp;#8217;ve made a fork and added rspec support today. I think the 0.3.3 version should be generated soon from Github, then you will be able to install it like this:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;sudo gem install akitaonrails-dry_scaffold&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;But you can also install it manually from the source:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;git clone git://github.com/akitaonrails/dry_scaffold.git&lt;tt&gt;
&lt;/tt&gt;cd dry_scaffold&lt;tt&gt;
&lt;/tt&gt;gem build dry_scaffold.gemspec&lt;tt&gt;
&lt;/tt&gt;sudo gem install dry_scaffold-0.3.3.gem&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Now, create a normal Rails 2.3.x project and configure your config/environment.rb with:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;config.gem &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;haml&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;config.gem &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;will_paginate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;config.gem &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;justinfrench-formtastic&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="sy"&gt;:lib&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;formtastic&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;tt&gt;
&lt;/tt&gt;  &lt;span class="sy"&gt;:source&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;http://gems.github.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;config.gem &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;josevalim-inherited_resources&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="sy"&gt;:lib&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;inherited_resources&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;tt&gt;
&lt;/tt&gt;  &lt;span class="sy"&gt;:source&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;http://gems.github.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;And also add the following to your config/environments/test.rb:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;config.gem &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;rspec&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;config.gem &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;rspec-rails&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;In order to add Rspec support, create the initial &lt;a href="http://github.com/justinfrench/formtastic/tree/master"&gt;Formtastic&lt;/a&gt; stylesheets and add a little bit of sugar to your layouts do the following:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;./script/generate rspec&lt;tt&gt;
&lt;/tt&gt;./script/gererate formtastic_stylesheets&lt;tt&gt;
&lt;/tt&gt;./script/generate nifty_layout --haml&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Notice that I am referring to Ryan Bates&amp;#8217; &lt;a href="http://github.com/ryanb/nifty-generators/tree/master"&gt;Nifty Generators&lt;/a&gt;. I really like it&amp;#8217;s initial &lt;span class="caps"&gt;CSS&lt;/span&gt; and layout to start a new project instead of the default &amp;#8216;blank&amp;#8217; theme. But that&amp;#8217;s just me :-)&lt;/p&gt;
&lt;p&gt;The excellent &lt;a href="http://github.com/justinfrench/formtastic/tree/master"&gt;Formtastic&lt;/a&gt; will create your scaffolded views with a bit more of web semantics, so it&amp;#8217;s highly recommended to use. To make it look pretty, add the following to your &amp;#8216;app/views/layouts/application.html.haml&amp;#8217;:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;  = stylesheet_link_tag &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;application&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  = stylesheet_link_tag &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;formtastic&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  = stylesheet_link_tag &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;formtastic_changes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Finally, you can start scaffolding some resources to get started, for example:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;./script/generate dry_scaffold Post title:string body:text --rspec&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;If you don&amp;#8217;t like fixtures you&amp;#8217;d rather use &lt;a href="http://github.com/thoughtbot/factory_girl/tree/master"&gt;Factory Girl&lt;/a&gt; instead doing this:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;./script/generate dry_scaffold Post title:string body:text --rspec --fgirl&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;By default, it&amp;#8217;s going to create thin controller with Inherited Resources and paginated with Will Paginate. The view templates will use &lt;a href="http://haml-lang.com/"&gt;&lt;span class="caps"&gt;HAML&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://github.com/justinfrench/formtastic/tree/master"&gt;Formtastic&lt;/a&gt; for a semantically rich form. It will create tests using the standard test/unit and fixtures, but I&amp;#8217;d rather choose Rspec and &lt;a href="http://github.com/thoughtbot/factory_girl/tree/master"&gt;Factory Girl&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s also going to generate a separated &amp;#8220;_form&amp;#8221; partial that both &amp;#8220;new&amp;#8221; and &amp;#8220;edit&amp;#8221; views will use, which is one of those things that you do all the time after a normal scaffold. The usage of &lt;span class="caps"&gt;HAML&lt;/span&gt; is not very common, but I would recommend everybody to at least try it for a while, it will grow on you quickly. And having well formatted &lt;span class="caps"&gt;HTML&lt;/span&gt; outputs is always nice.&lt;/p&gt;
&lt;p&gt;The Dry Scaffold also supports generating just models (&amp;#8220;./script/generate dry_model&amp;#8221;). Read the documentation on the github project site to understand all the options.&lt;/p&gt;
&lt;p&gt;With this, you should be good to go and start to rapidly prototype your next web application.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wQaQaVVAgZAw725tb4A9ae5A0Os/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wQaQaVVAgZAw725tb4A9ae5A0Os/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wQaQaVVAgZAw725tb4A9ae5A0Os/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wQaQaVVAgZAw725tb4A9ae5A0Os/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Default Scopes and Hash Posers</title><link>http://akitaonrails.com/2009/09/08/default-scopes-and-hash-posers</link><pubDate>Mon, 07 Sep 2009 22:07:58 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5198</guid><description>&lt;p&gt;&lt;a href="http://www.railssummit.com.br?utm_campaign=Railssummit&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=ing_728x90"&gt;&lt;img 
src="http://railssummit.com.br/imgs/44/original/en_728x90.gif" 
alt="Rails Summit 2009"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While I was editing my &lt;a href="http://www.akitaonrails.com/2009/09/08/user-editable-liquid-templates-in-the-database"&gt;last article&lt;/a&gt; I was thinking about multi-site. Usually, Railers prefer to have a single app per Rails project. But what if I do want to have a &lt;span class="caps"&gt;CMS&lt;/span&gt;, an e-Commerce, something like &lt;a href="http://mu.wordpress.org/"&gt;Wordpress MU&lt;/a&gt; and so on?&lt;/p&gt;
&lt;p&gt;I thought to myself: &lt;em&gt;&amp;#8220;dead simple: just add default&amp;#95;scope to the relevant Active Record models&amp;#8221;&lt;/em&gt;. Ended up not being quite so simple because it seems like &amp;#8216;default_scope&amp;#8217; doesn&amp;#8217;t support blocks just yet as you can follow on this &lt;a href="https://rails.lighthouseapp.com/projects/8994/tickets/1812-default_scope-cant-take-procs"&gt;open ticket at Lighthouse&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The problem is that &amp;#8216;default_scope&amp;#8217; will be different per user, so I can&amp;#8217;t have an static conditions hash pre-defined in the model. To solve that &amp;#8211; at least until a more official solution comes along &amp;#8211; Brian Mitchell has a great suggestion: use a &lt;strong&gt;Hash Poser&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Now, a Hash Poser is a class that acts and behaves exactly like a normal Hash. Let&amp;#8217;s see his code:&lt;/p&gt;
&lt;script src="http://gist.github.com/160809.js"&gt;&lt;/script&gt;&lt;p&gt;Dead Simple, you can copy and paste this code to somewhere like &amp;#8216;config/initializers/hash_poser.rb&amp;#8217;. You can easily see how this can be used in your models:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;Post&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ActiveRecord&lt;/span&gt;::&lt;span class="co"&gt;Base&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  default_scope &lt;span class="co"&gt;HashPoser&lt;/span&gt;.new &lt;span class="r"&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    { &lt;span class="sy"&gt;:conditions&lt;/span&gt; =&amp;gt; { &lt;span class="sy"&gt;:user_id&lt;/span&gt; =&amp;gt; &lt;span class="co"&gt;UserSession&lt;/span&gt;.find } } &lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;This is supposing you&amp;#8217;re using something like &lt;a href="http://github.com/binarylogic/authlogic"&gt;Authlogic&lt;/a&gt;, but actually you will want something more like &amp;#8216;Site.find&amp;#8217; or whatever. The point is, now whatever finder you were using throughout your application will have this conditions added to it. So, a simple &amp;#8216;Post.all&amp;#8217;, in this example, will automagically run:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;SELECT * FROM &amp;quot;users&amp;quot; WHERE (&amp;quot;users&amp;quot;.&amp;quot;id&amp;quot; = 1) &lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Considering that you&amp;#8217;re not using something like &amp;#8216;find_by_sql&amp;#8217; with hand crafted &lt;span class="caps"&gt;SQL&lt;/span&gt; queries, the &amp;#8216;default_scope&amp;#8217; will override all your finders. Of course, it&amp;#8217;s easier said than done, so have your test suite ready when you do this change. As I said, you will have to add a column like &amp;#8216;site_id&amp;#8217; to every table you need to be multi-site.&lt;/p&gt;
&lt;p&gt;I would like to see what other people think of this way of thinking and what caveats there are for this use case. Most of the time Rails apps will be stand-alone, but in a few exception cases, we really do want to have a single app serving multiple customers. What&amp;#8217;s your take on this concept?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7BJNMoeuoaNeg8h1imt9WkW9-Ek/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7BJNMoeuoaNeg8h1imt9WkW9-Ek/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7BJNMoeuoaNeg8h1imt9WkW9-Ek/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7BJNMoeuoaNeg8h1imt9WkW9-Ek/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>User Editable Liquid Templates in the Database</title><link>http://akitaonrails.com/2009/09/08/user-editable-liquid-templates-in-the-database</link><pubDate>Mon, 07 Sep 2009 20:49:52 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5197</guid><description>&lt;p&gt;&lt;a href="http://www.railssummit.com.br?utm_campaign=Railssummit&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=ing_728x90"&gt;&lt;img 
src="http://railssummit.com.br/imgs/44/original/en_728x90.gif" 
alt="Rails Summit 2009"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For quite some time I wanted to create an experiment: having user-editable view templates stored in the database instead of the filesystem.&lt;/p&gt;
&lt;p&gt;The Use Case is quite simple: it&amp;#8217;s either a theme system or a website where each user can edit his own set of templates to have a customized usage of the application. In the case of a simple theming system, just adding additional view load paths would be enough. But the second case needs scalability and having a potential set of thousands of view sub-folders around never felt well.&lt;/p&gt;
&lt;p&gt;One solution is to have every view in a database table. If performance becomes critical, we can always add Memcached to the equation, so it shouldn&amp;#8217;t be a problem. Now, there is another problem: we can&amp;#8217;t just store the &lt;span class="caps"&gt;ERB&lt;/span&gt; view files directly into the database and make them user-editable. That&amp;#8217;s because &lt;span class="caps"&gt;ERB&lt;/span&gt; executes arbitrary Ruby code, which means that the user would have access to the entire machine. Haml and other templating engines have the same feature. One of the few that implements a user-centric, restrictive templating engine is Tobias Lütke’s &lt;a href="http://github.com/tobi/liquid"&gt;Liquid&lt;/a&gt;, created precisely for the same purpose for his Shopify.com website.&lt;/p&gt;
&lt;p&gt;Having that in mind, I just published the &lt;a href="http://github.com/akitaonrails/dynamic_liquid_templates/tree/master"&gt;dynamic_liquid_templates&lt;/a&gt; plugin as an attempt to have just that. In order to get started, you can create a new Rails project and add it as a normal plugin:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;rails demo&lt;tt&gt;
&lt;/tt&gt;cd demo&lt;tt&gt;
&lt;/tt&gt;./script/generate dynamic_templates&lt;tt&gt;
&lt;/tt&gt;rake db:migrate&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;You will have to require Liquid from &lt;em&gt;config/environment.rb&lt;/em&gt;&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;config.gem &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;tobi-liquid&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="sy"&gt;:lib&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;liquid&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="sy"&gt;:source&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;http://gems.github.com&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;And, of course, &lt;em&gt;sudo rake gems:install&lt;/em&gt; to have it installed if you still don&amp;#8217;t have it. Now, create a normal Rails resource, such as &amp;#8216;posts&amp;#8217; or whatever. You will have to modify your scaffolded controller so the &amp;#8216;format.html&amp;#8217; calls look like this:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;respond_to &lt;span class="r"&gt;do&lt;/span&gt; |format|&lt;tt&gt;
&lt;/tt&gt;  format.html { render_with_dynamic_liquid }&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;If you&amp;#8217;re inside a nested controller (such as &amp;#8216;Comment belongs_to Post&amp;#8217;), declare a method named &amp;#8216;parent&amp;#8217;, for example:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;CommentsController&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ApplicationController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  ...&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;parent&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@post&lt;/span&gt; ||= &lt;span class="co"&gt;Post&lt;/span&gt;.find(params[&lt;span class="sy"&gt;:post_id&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;The plugin will use this method to refer to the proper named routes, such as _post_comments_path(parent)_ or _post_comment_path(parent, @comment)_ and so on. Namespaces will work too, for example:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;Admin::PostsController&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ApplicationController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;index&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;     &lt;span class="iv"&gt;@posts&lt;/span&gt; = &lt;span class="co"&gt;Post&lt;/span&gt;.all&lt;tt&gt;
&lt;/tt&gt;     respond_to &lt;span class="r"&gt;do&lt;/span&gt; |format|&lt;tt&gt;
&lt;/tt&gt;       format.html { render_with_dynamic_liquid(&lt;span class="sy"&gt;:namespace&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;) } &lt;tt&gt;
&lt;/tt&gt;     &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;There&amp;#8217;s probably a better syntax for that, but it works like that too. The other thing is that your models need to be &amp;#8216;liquified&amp;#8217; in order to be usable from inside a Liquid template. You have to declare a _to_liquid_ method explicitly saying which columns you want exposed:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;Post&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ActiveRecord&lt;/span&gt;::&lt;span class="co"&gt;Base&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  ...&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;to_liquid&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    { &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="pc"&gt;self&lt;/span&gt;.title, &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="pc"&gt;self&lt;/span&gt;.body }&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Notice that the hash keys have to be strings, and not symbols. The other thing is that the plugin will append other attributes to this hash automagically, so you can do the following from within your Liquid templates:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;{{ 'Show' | link_to: post.show_path }}&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;It adds &amp;#8216;show_path&amp;#8217; and &amp;#8216;edit_path&amp;#8217; to your model instances, so you can use them to create links or form actions. There are other globally assigned variables as well, such as:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;collection &amp;#8211; refers to the controller collection (for index action) such as @posts&lt;/li&gt;
	&lt;li&gt;object &amp;#8211; referes to the controller single object (for non-index actions) such as @post&lt;/li&gt;
	&lt;li&gt;collection_path &amp;#8211; the named route for the index action, including nested and namespaced versions&lt;/li&gt;
	&lt;li&gt;object_path &amp;#8211; the named route for the non-index action, including nested and namespaced versions&lt;/li&gt;
	&lt;li&gt;parent &amp;#8211; if you have the &amp;#8216;parent&amp;#8217; method in your controller, it&amp;#8217;s exposed within Liquid&lt;/li&gt;
	&lt;li&gt;parent_path &amp;#8211; if you have the &amp;#8216;parent&amp;#8217; method in your controller, it&amp;#8217;s used for named routes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And, of course, your models are properly assigned to Liquid too so, for example, &amp;#8216;@posts&amp;#8217; is exposed as &amp;#8216;posts&amp;#8217; to Liquid.&lt;/p&gt;
&lt;h2&gt;Next Steps&lt;/h2&gt;
&lt;p&gt;Now, this is just the beginning. You can create a scaffold for the DynamicTemplate model, so you have an editing interface. You can refer to the &amp;#8216;spec/fixtures&amp;#8217; folder within the plugin for examples on how a Liquid template looks like (it&amp;#8217;s less convenient than &lt;span class="caps"&gt;ERB&lt;/span&gt;, I can tell).&lt;/p&gt;
&lt;p&gt;Then you can add multi-site support to your website by adding a foreign-key to all your models, a new table such as &amp;#8216;Site&amp;#8217; and a &amp;#8216;site_id&amp;#8217; column in all your other models. Then, each Active Record model can have the &amp;#8216;default_scope&amp;#8217; declared, such as:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;Post&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ActiveRecord&lt;/span&gt;::&lt;span class="co"&gt;Base&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  default_scope proc { { &lt;span class="sy"&gt;:conditions&lt;/span&gt; =&amp;gt; [&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;site_id&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="co"&gt;Site&lt;/span&gt;.current_site] } } &lt;tt&gt;
&lt;/tt&gt;  ...&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;But, this is not quite possible today because &amp;#8216;default_scope&amp;#8217; seems to &lt;a href="https://rails.lighthouseapp.com/projects/8994/tickets/1812-default_scope-cant-take-procs"&gt;not be accepting a proc just yet&lt;/a&gt;. Let&amp;#8217;s hope this feature comes sooner, or we can just create yet another plugin anyway, so no big deal.&lt;/p&gt;
&lt;p&gt;Another thing, we can still improve it&amp;#8217;s performance by serializing the pre-compiled template instead of the raw text version as explained in &lt;a href="http://cjohansen.no/en/rails/liquid_email_templates_in_rails"&gt;this article&lt;/a&gt;. I will do it this week, probably.&lt;/p&gt;
&lt;p&gt;Then, we need to add caching support. As I am using plain Active Record, simple &lt;em&gt;config.cache&lt;/em&gt;store_ configuration should do. And you will also want to add other features such as versioning the dynamic_templates table so the user can change his mind later on. For this one, it&amp;#8217;s as easy as watching Ryan Bates&amp;#8217; recent &lt;a href="http://railscasts.com/episodes/177-model-versioning"&gt;vestal_versions&lt;/a&gt; screencast.&lt;/p&gt;
&lt;p&gt;This is just an experiment, I hope it can be useful to someone.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wGhYy3WGr2-9BSDiEQe-q-sxpqg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wGhYy3WGr2-9BSDiEQe-q-sxpqg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wGhYy3WGr2-9BSDiEQe-q-sxpqg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wGhYy3WGr2-9BSDiEQe-q-sxpqg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>[Screencast] Real Thin Restful Controllers with Inherited Resources</title><link>http://akitaonrails.com/2009/09/01/screencast-real-thin-restful-controllers-with-inherited-resources</link><pubDate>Tue, 01 Sep 2009 04:24:14 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5194</guid><description>&lt;p&gt;&lt;strong&gt;Update 10/01:&lt;/strong&gt; José just released version &lt;a href="http://twitter.com/josevalim/status/3684913313"&gt;0.9.1&lt;/a&gt; while I was uploading the video :-)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.railssummit.com.br?utm_campaign=Railssummit&amp;utm_source=banner_parceiros&amp;utm_medium=banner&amp;utm_content=ing_728x90"&gt;&lt;img 
src="http://railssummit.com.br/imgs/44/original/en_728x90.gif" 
alt="Rails Summit 2009"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://weblog.rubyonrails.org/2009/8/31/three-reasons-love-responder"&gt;José Valim&lt;/a&gt; is doing a great work in the soon to the released Rails 3.0. He surprised everybody with his Google Summer of Code project, rewriting the entire Generator code to use Thor and be more agnostic. Not only that he enhanced the ActionController with ways to make it leaner and cleaner.&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;object width="600" height="360"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=6377199&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=6377199&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="360"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/6377199"&gt;Real Thin Rails Restul Controllers with Inherited Resources&lt;/a&gt; from &lt;a href="http://vimeo.com/akitaonrails"&gt;Fabio Akita&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Much of this later work comes from an old Rails gem of his called &lt;a href="http://wiki.github.com/josevalim/inherited_resources"&gt;Inherited Resources&lt;/a&gt;. It can be used right now in your Rails 2.3 projects and he just backported some of the Rails 3.0 features such as &lt;a href="http://blog.plataformatec.com.br/2009/08/inherited-resources-is-scopes-and-responder-fluent/"&gt;ActionController Responders&lt;/a&gt; and other goodies.&lt;/p&gt;
&lt;p&gt;In essence it feels a lot like James Golick &lt;a href="http://akitaonrails.com/2008/1/25/easy-restful-rails-screencast"&gt;resource_controller&lt;/a&gt; or Hampton Caitlin&amp;#8217;s &lt;a href="http://github.com/hcatlin/make_resourceful/tree/master"&gt;make_resourceful&lt;/a&gt;, &lt;em&gt;Yet Another Thin Controller Plugin&lt;/em&gt; if you like. But José&amp;#8217;s is definitely interesting.&lt;/p&gt;
&lt;p&gt;So, I decided to make a screencast showcasing some of its basic features. Bear in mind that this gem offers a lot more and I highly encourage you to read his &lt;a href="http://wiki.github.com/josevalim/inherited_resources"&gt;Wiki page&lt;/a&gt; about it. There are dozens of options that you can leverage to make your projects even more maintainable and lean.&lt;/p&gt;&lt;p&gt;Para utilizar os códigos que eu menciono no screencast, apenas comece assim:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;git clone git://github.com/akitaonrails/ryanb-15min-blog.git&lt;tt&gt;
&lt;/tt&gt;cd ryanb-15min-blog&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;This video is divided in two parts, the first is  a simple conversion to use inherited_resources. To access this code do like this:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;git checkout -b inherited_resources --track origin/inherited_resources&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;This will bring the branch with the first part. To see the second part, with more goodies, do like this:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;git checkout -b inherited_resources_complete --track origin/inherited_resources_complete&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Now you should have 3 branches: master with the original 15 min. blog, &amp;#8216;inherited_resources&amp;#8217; with the first part and &amp;#8216;inherited_resources_complete&amp;#8217; with the second part. Use the &amp;#8216;git checkout [name of the branch]&amp;#8217; to switch back and forth between branches.&lt;/p&gt;
&lt;p&gt;José is also a speaker for &lt;a href="http://railssummit.locaweb.com.br/en/pages/home"&gt;Rails Summit Latin America 2009&lt;/a&gt;, the largest Rails conference in South America, and it&amp;#8217;s gonna happen on October 13th and 14th, at São Paulo, Brazil. Help us &lt;a href="http://railssummit.locaweb.com.br/en/pages/banners"&gt;promote&lt;/a&gt; it and be sure to attend! :-)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FfwDzGCx0UF7LasFh1DocWueDUo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FfwDzGCx0UF7LasFh1DocWueDUo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FfwDzGCx0UF7LasFh1DocWueDUo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FfwDzGCx0UF7LasFh1DocWueDUo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Rails Summit Latin America 2009</title><link>http://akitaonrails.com/2009/07/30/rails-summit-latin-america-2009</link><pubDate>Wed, 29 Jul 2009 23:59:56 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5188</guid><description>&lt;p&gt;&lt;strong&gt;Brasileiros:&lt;/strong&gt; Cliquem &lt;a href="http://akitaonrails.com/2009/07/30/rails-summit-latin-america-2009#railssummit2009-br"&gt;aqui&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.railssummit.com.br/en/home"&gt;&lt;img src="http://akitaonrails.com/assets/2009/7/30/railssummit2009_original.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Don&amp;#8217;t miss this year&amp;#8217;s &lt;a href="http://www.railssummit.com.br/en/home"&gt;&lt;strong&gt;Rails Summit Latin America&lt;/strong&gt;&lt;/a&gt;. This is a huge opportunity for Railers throughout of South America to gather and meet. It will take place in Sao Paulo, Brazil once again bringing together a great roster of known Railers such as Matt Aimonetti, Rich Kilmer, Chad Fowler and many others for 2 full days, with 2 parallels tracks of Ruby and Rails goodness.&lt;/p&gt;


	&lt;p&gt;Rails Summit 2008 was a huge success with a great positive &lt;a href="http://www.akitaonrails.com/2008/11/12/rails-summit-blogosfera"&gt;repercussion&lt;/a&gt; on the community. We do intend to even surpass the level of quality of last year&amp;#8217;s event.&lt;/p&gt;


	&lt;p&gt;This year, we&amp;#8217;ll have a larger area, with 2 rooms, both with Portuguese-English and English-Portuguese real-time translators so everybody can enjoy every single talk. We will have a great lobby for social networking complete with wi-fi network and power plugs so you can code during the event and share code and techniques with your new developer mates.&lt;/p&gt;


	&lt;p&gt;Help us out promote the event by wearing our &lt;a href="http://railssummit.locaweb.com.br/en/banners"&gt;banners&lt;/a&gt; in your website as well.&lt;/p&gt;


	&lt;p&gt;&lt;a href="https://railssummit.locaweb.com.br/en/users/new"&gt;Register now!&lt;/a&gt; We will be waiting for you on &lt;strong&gt;October 13th and 14th&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;&lt;a name="railssummit2009-br"&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;h2&gt;Rails Summit Latin America&lt;/h2&gt;


	&lt;p&gt;&lt;a href="http://www.railssummit.com.br/"&gt;&lt;img src="http://akitaonrails.com/assets/2009/7/30/railssummit2009_original.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Não percam o &lt;a href="http://www.railssummit.com.br/"&gt;&lt;strong&gt;Rails Summit Latin America&lt;/strong&gt;&lt;/a&gt;. Esta é uma enorme oportunidade para os Railers se encontrarem e se conhecerem. Acontecerá novamente em São Paulo trazendo uma lista estelar de Railers conhecidos como Matt Aimonetti, Rich Kilmer, Chad Fowler e muitos outros para 2 dias inteiros com 2 sessões paralelas de palestras de Ruby e Rails.&lt;/p&gt;


	&lt;p&gt;O &lt;a href="http://www.akitaonrails.com/railssummit2008"&gt;Rails Summit 2008&lt;/a&gt; foi um enorme sucesso com uma grande &lt;a href="http://www.akitaonrails.com/2008/11/12/rails-summit-blogosfera"&gt;repercussão&lt;/a&gt; positiva pela comunidade. E nós pretendemos superar o nível de qualidade do ano passado.&lt;/p&gt;


	&lt;p&gt;Este ano, teremos uma área maior, com 2 salas, ambas com tradutores em tempo real tanto de inglês-português e português-inglês para que todos possam aproveitar todas as palestras. Teremos um grande lobby para networking, completo com rede wi-fi e tomadas para que você possa codificar durante o evento e dividir código e técnicas com seus novos colegas desenvolvedores.&lt;/p&gt;


	&lt;p&gt;E nos ajude a promover o evento vestindo nossos &lt;a href="http://railssummit.locaweb.com.br/pt-BR/banners"&gt;banners&lt;/a&gt; em seu site também.&lt;/p&gt;


	&lt;p&gt;&lt;a href="https://railssummit.locaweb.com.br/pt-BR/users/new"&gt;Registre-se agora!&lt;/a&gt;, as vagas são limitadas! Estaremos esperando por vocês nos dias &lt;strong&gt;13 e 14 de Outubro&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-C1QdPBTVPR-QgJEnuENLKNTdb0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-C1QdPBTVPR-QgJEnuENLKNTdb0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-C1QdPBTVPR-QgJEnuENLKNTdb0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-C1QdPBTVPR-QgJEnuENLKNTdb0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Rails developers in Japan</title><link>http://akitaonrails.com/2009/07/15/rails-developers-in-japan</link><pubDate>Tue, 14 Jul 2009 23:19:24 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5184</guid><description>&lt;p&gt;これは僕のはじめの日本語で核ブログポスト。減った糞な日本語で書くのもすみません、でも今日は&lt;a href="http://twitter.com/satoko"&gt;@satokoさん&lt;/a&gt; ていうプログラマーと話して何となく日本語で書ムードになりました。僕はブラジル生まれなので、子供のころからアニメや漫画読みながら少しだけ日本語学んだ、でも経験不足です。&lt;/p&gt;


	&lt;p&gt;残園ながらまだ日本まで旅行した事がまだない。僕はブラジル生まれで Ruby on Railsの初めてのエバンジェリストです。２００６年に初めてのRails本がポルトガル語で書きました。ルビーも日本生まれって事は面白い、マッツさんが本当に英雄と思います。&lt;/p&gt;


	&lt;p&gt;で、ほかの日本人が、もし、このブログを読んだら、日本にRailsがどうやっているか書いてください、すごく興味あります。&lt;/p&gt;


	&lt;p&gt;どうもよろしくお願いします。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RfJzB-aUncFJYnJ52LEGhSUQzxw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RfJzB-aUncFJYnJ52LEGhSUQzxw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RfJzB-aUncFJYnJ52LEGhSUQzxw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RfJzB-aUncFJYnJ52LEGhSUQzxw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>RailsConf 09 - Ninh Grosenbach Bui</title><link>http://akitaonrails.com/2009/05/11/railsconf-09-ninh-grosenbach-bui</link><pubDate>Sun, 10 May 2009 23:12:03 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5161</guid><description>&lt;p&gt;RailsConf is not your &amp;#8220;normal&amp;#8221; tech conference. You will have people ranting, doing real rocket-science and lot&amp;#8217;s of people having real and genuine fun. We are very lucky to have people such as Geoffrey Grosenbach, Jason Seifer, Peter Cooper, Ninh Bui and so much more to remind us that there is an upper layer to technology: geeks love to have fun.&lt;/p&gt;


&lt;object width="500" height="375"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4583129&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=4583129&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="375"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/4583129"&gt;RailsConf 2009 &amp;#8211; Ninh Grosenbach Bui&lt;/a&gt; from &lt;a href="http://vimeo.com/akitaonrails"&gt;Fabio Akita&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;And don&amp;#8217;t miss the awesome &lt;a href="http://www.rubyinside.com/rubystein-wolfenstein-3d-recreated-in-ruby-1751.html"&gt;Rubystein&lt;/a&gt;, Phusion&amp;#8217;s reimplementation of Wolsfenstein 3D in Ruby. They wanted to prove that Ruby is fast enough even to write games on it, and they succeeded in spades!&lt;/p&gt;


&lt;embed src="http://blip.tv/play/AYGA106WjnE" type="application/x-shockwave-flash" width="640" height="510" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt; 

	&lt;p&gt;A RailsConf não é sua conferência &amp;#8220;normal&amp;#8221; de tecnologia. Você verá pessoas reclamando, fazendo coisas realmente avançadas e muitas pessoas genuinamente se divertindo. Somos muito afortunados em ter pessoas como Geoffrey Grosenbach, Jason Seifer, Peter Cooper, Ninh Bui e tantos outros para nos lembrar que existe uma camada ainda acima da tecnologia: geeks adoram se divertir.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sum2PQkVqPhP7R30x2HRcj18bPc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sum2PQkVqPhP7R30x2HRcj18bPc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sum2PQkVqPhP7R30x2HRcj18bPc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sum2PQkVqPhP7R30x2HRcj18bPc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>RailsConf 09 - Message from Bryan Liles (TATFT) to Brazil</title><link>http://akitaonrails.com/2009/05/08/railsconf-09-message-from-bryan-liles-tatft-to-brazil</link><pubDate>Fri, 08 May 2009 04:26:35 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5160</guid><description>&lt;p&gt;Bryan Liles&amp;#8217; &lt;a href="http://rubyhoedown2008.confreaks.com/05-bryan-liles-lightning-talk-tatft-test-all-the-f-in-time.html"&gt;Test All The Fucking Time&lt;/a&gt; video really struck a cord and people have been repeating his motto ever since. He was so kind to send a message to the Brazilian programmers as well, check it out:&lt;/p&gt;


&lt;object width="500" height="375"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4544115&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=4544115&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="375"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/4544115"&gt;RailsConf 2009 &amp;#8211; Mensagem de Bryan Liles para Brasileiros&lt;/a&gt; from &lt;a href="http://vimeo.com/akitaonrails"&gt;Fabio Akita&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;O vídeo do Bryan Liles, &lt;a href="http://rubyhoedown2008.confreaks.com/05-bryan-liles-lightning-talk-tatft-test-all-the-f-in-time.html"&gt;Test All The Fucking Time&lt;/a&gt; realmente tocou num ponto importante e as pessoas vem repetindo seu lema desde então. Ele foi muito legal em enviar uma mensagem aos programadores Brasileiros, dêem uma olhada ;-)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/B8a7849cls5uwJ6MZRscj7_3lvk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B8a7849cls5uwJ6MZRscj7_3lvk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/B8a7849cls5uwJ6MZRscj7_3lvk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B8a7849cls5uwJ6MZRscj7_3lvk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>RailsConf 09 - Exclusive Audio Interviews</title><link>http://akitaonrails.com/2009/05/08/railsconf-09-exclusive-audio-interviews</link><pubDate>Fri, 08 May 2009 04:07:01 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5159</guid><description>&lt;p&gt;I&amp;#8217;ve had a great time interviewing several interesting Rubysts and Railers on their new projects. I think you will like to hear what they have to say.&lt;/p&gt;


	&lt;p&gt;My first guest was Joshua Timberman. He is a fervorous evangelist for the &lt;a href="http://www.infoq.com/news/2009/01/chef-management-tool-announced"&gt;Chef&lt;/a&gt; project. Chef could be seen as a more modern Puppet, which by itself, already is a modern systems configuration manager. Chef is composed of several pieces, cookbooks and details that Joshua explains in his interview.&lt;/p&gt;


&lt;object type="application/x-shockwave-flash" data="http://files.akitaonrails.com/player_mp3.swf" width="200" height="20"&gt;
    &lt;param name="movie" value="http://files.akitaonrails.com/player_mp3.swf" /&gt;
    &lt;param name="bgcolor" value="#ffffff" /&gt;
    &lt;param name="FlashVars" value="mp3=http%3A//files.akitaonrails.com/Joshua_Timberman_Chef.mp3" /&gt;
&lt;/object&gt;

	&lt;p&gt;&lt;a href="http://files.akitaonrails.com/Joshua_Timberman_Chef.mp3"&gt;Download&lt;/a&gt; (22:24)&lt;/p&gt;


	&lt;p&gt;One project that I am particularly very interested is &lt;a href="http://spreecommerce.com/"&gt;Spree&lt;/a&gt;. Sean Schofield started this Rails based e-commerce system to support developers that had to reinvent the wheel all the time, and e-commerce systems are notoriously not easy to do. Spree is a fairly complete project, with many nice features, including integration with ActiveMerchant, shipping support, tax categories and so on. I helped a bit doing the Brazilian Portuguese internationalization of the project as well. Highly recommended.&lt;/p&gt;


&lt;object type="application/x-shockwave-flash" data="http://files.akitaonrails.com/player_mp3.swf" width="200" height="20"&gt;
    &lt;param name="movie" value="http://files.akitaonrails.com/player_mp3.swf" /&gt;
    &lt;param name="bgcolor" value="#ffffff" /&gt;
    &lt;param name="FlashVars" value="mp3=http%3A//files.akitaonrails.com/Sean_Schofield_Spree.mp3" /&gt;
&lt;/object&gt;

	&lt;p&gt;&lt;a href="http://files.akitaonrails.com/Sean_Schofield_Spree.mp3"&gt;Download&lt;/a&gt; (22:15)&lt;/p&gt;


	&lt;p&gt;By now I think we all know New Relic, Fiveruns and Rails monitoring systems. But there are more competition coming up, from the guys of Highgroove Studios we have &lt;a href="http://scoutapp.com/"&gt;Scout&lt;/a&gt; a non-nonsense approach to Rails monitoring and data analysis. They are willing to go an step further: instead of just presenting raw data as reports, they are analyzing this data and giving you relevant recommendations so you can further optimize your application. And more than that: they are highly competitive in price. And the client agent that gathers data and send to their servers is open source and extensible through plugins, so you can add even more to what they already offer. Definitely worth checking out:&lt;/p&gt;


&lt;object type="application/x-shockwave-flash" data="http://files.akitaonrails.com/player_mp3.swf" width="200" height="20"&gt;
    &lt;param name="movie" value="http://files.akitaonrails.com/player_mp3.swf" /&gt;
    &lt;param name="bgcolor" value="#ffffff" /&gt;
    &lt;param name="FlashVars" value="mp3=http%3A//files.akitaonrails.com/Matt_Todd_Highgroove_Studios.mp3" /&gt;
&lt;/object&gt;

	&lt;p&gt;&lt;a href="http://files.akitaonrails.com/Matt_Todd_Highgroove_Studios.mp3"&gt;Download&lt;/a&gt; (13:43)&lt;/p&gt;


	&lt;p&gt;At RailsConf 2008, last year, I interviewed &lt;a href="http://www.akitaonrails.com/2008/6/5/railsconf-2008-brazil-rails-podcast-special-edition"&gt;James Lindenbaum&lt;/a&gt; about Heroku. They were still in beta at that time. Now they finally released a commercial version with lots of new features. I was particularly surprised to find Ryan Tomayko at their booth, working for Heroku. I think Heroku really nailed easy deployment for Ruby applications over Amazon &lt;span class="caps"&gt;EC2&lt;/span&gt;. If you don&amp;#8217;t want to worry about infrastructure, Heroku may be the answer:&lt;/p&gt;


&lt;object type="application/x-shockwave-flash" data="http://files.akitaonrails.com/player_mp3.swf" width="200" height="20"&gt;
    &lt;param name="movie" value="http://files.akitaonrails.com/player_mp3.swf" /&gt;
    &lt;param name="bgcolor" value="#ffffff" /&gt;
    &lt;param name="FlashVars" value="mp3=http%3A//files.akitaonrails.com/Ryan_Tomayko_Heroku.mp3" /&gt;
&lt;/object&gt;

	&lt;p&gt;&lt;a href="http://files.akitaonrails.com/Ryan_Tomayko_Heroku.mp3"&gt;Download&lt;/a&gt; (33:49)&lt;/p&gt;


	&lt;p&gt;Again, last year, everybody was blown away by the announcement of Gemstone &amp;#8211; traditional Smalltalk software-house &amp;#8211; showing a very preview version of Ruby actually running over a very mature Smalltalk VM. This is the &lt;a href="http://maglev.gemstone.com/"&gt;Maglev&lt;/a&gt; project. Since then the development has been quite secretive. But they are finally disclosing more and more information on how the project is going. This year, they were able to show a small Sinatra application already running &amp;#8211; albeit, with some tweaks. I think they are evolving very fast. Ruby is notoriously not an easy language to implement and Maglev will be incredible when released. In this interview we have Monty Williams, Peter McLain and Michael Latta discussing about the current development and future roadmap.&lt;/p&gt;


&lt;object type="application/x-shockwave-flash" data="http://files.akitaonrails.com/player_mp3.swf" width="200" height="20"&gt;
    &lt;param name="movie" value="http://files.akitaonrails.com/player_mp3.swf" /&gt;
    &lt;param name="bgcolor" value="#ffffff" /&gt;
    &lt;param name="FlashVars" value="mp3=http%3A//files.akitaonrails.com/Maglev_Team.mp3" /&gt;
&lt;/object&gt;

	&lt;p&gt;&lt;a href="http://files.akitaonrails.com/Maglev_Team.mp3"&gt;Download&lt;/a&gt; (36:42)&lt;/p&gt;


	&lt;p&gt;Finally, I think everybody knows Ilya Grigorik by now, from &lt;a href="http://www.igvita.com"&gt;igvita.com&lt;/a&gt;. He received last year&amp;#8217;s Ruby Hero Awards, and it was well deserved. He is one of the few developers that can tackle very advanced subjects in a way that anyone can understand. He started a new company recently and they have a very very interesting product called &lt;a href="http://www.postrank.com"&gt;PostRank&lt;/a&gt;. The overall idea is fairly simple: they went a step further over Google&amp;#8217;s own PageRank system. Instead of just considering link tracebacks, they now weigh in social network behavior. For example, a single Digg page traces back to a website with just one link. But this same page at Digg can have something like hundreds of comments, or &amp;#8220;engagements&amp;#8221; as Ilya calls it. This gives a totally different weigh to this traceback instead of just a simple link. So companies are starting to pay attention to social networks such as Digg, Reddit, Twitter and others and now Ilya comes up with the tool to deliver them the necessary metrics. I highly recommend you to test-drive this site, I think you will be impressed.&lt;/p&gt;


&lt;object type="application/x-shockwave-flash" data="http://files.akitaonrails.com/player_mp3.swf" width="200" height="20"&gt;
    &lt;param name="movie" value="http://files.akitaonrails.com/player_mp3.swf" /&gt;
    &lt;param name="bgcolor" value="#ffffff" /&gt;
    &lt;param name="FlashVars" value="mp3=http%3A//files.akitaonrails.com/Ilya_Grigorik_PostRank.com.mp3" /&gt;
&lt;/object&gt;

	&lt;p&gt;&lt;a href="http://files.akitaonrails.com/Ilya_Grigorik_PostRank.com.mp3"&gt;Download&lt;/a&gt; (21:43)&lt;/p&gt;


	&lt;p&gt;And this wraps up my series of interviews at RailsConf 2009. I wish I had more time to interview more people. There were very insightful and smart developers there, and I would have to &lt;em&gt;git clone&lt;/em&gt; myself many times to be able to talk to all of them. I hope you enjoy this set of interviews.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LqX6IR6AUrex5obwNG1JoEJF3aE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LqX6IR6AUrex5obwNG1JoEJF3aE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LqX6IR6AUrex5obwNG1JoEJF3aE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LqX6IR6AUrex5obwNG1JoEJF3aE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>RailsConf 09 - Message from Peter Cooper to Ruby Inside Brazil</title><link>http://akitaonrails.com/2009/05/08/railsconf-09-message-from-peter-cooper-to-ruby-inside-brazil</link><pubDate>Fri, 08 May 2009 03:11:19 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5157</guid><description>&lt;p&gt;Maybe not everybody knows it but the well known Ruby Inside website now has a &lt;a href="http://www.rubyinside.com.br"&gt;new branch in Brazil&lt;/a&gt;. It was recently released and we have a bunch of highly motivated Railers that are doing a great work posting everything that is news in the Ruby and Rails world both in Brazil and in other countries. Check it out Peter Cooper&amp;#8217;s take on this:&lt;/p&gt;


&lt;object width="500" height="375"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4540305&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=4540305&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="375"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/4540305"&gt;RailsConf 2009 &amp;#8211; Peter Cooper&lt;/a&gt; from &lt;a href="http://vimeo.com/akitaonrails"&gt;Fabio Akita&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;Talvez nem todos saibam, but o bem conhecido site Ruby Inside agora tem uma &lt;a href="http://www.rubyinside.com.br"&gt;nova filial no Brasil&lt;/a&gt;. Eles iniciaram recentemente e tem uma equipe de Railers muito motivados que estão fazendo um grande trabalho publicando notícias do mundo Ruby e Rails tanto do Brasil quanto de outros países. Dêem uma olhada na opinião do Peter Cooper sobre isso.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8cFM2ATRq2Zm98ZxNO25wb9WcrA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8cFM2ATRq2Zm98ZxNO25wb9WcrA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8cFM2ATRq2Zm98ZxNO25wb9WcrA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8cFM2ATRq2Zm98ZxNO25wb9WcrA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>RailsConf 09 - DHH - The Secret of Productivity</title><link>http://akitaonrails.com/2009/05/08/railsconf-09-dhh-the-secret-of-productivity</link><pubDate>Fri, 08 May 2009 03:07:33 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5156</guid><description>&lt;p&gt;David Hansson delivered a nice keynote, showing how Rails evolved throughout the years, the criticisms, the discussions. He introduced the future Rails 3 feature set and, finally, discussed about the secret for productivity. There was nothing particularly new if you are already an Agilist, but it is always good to reinforce the basic concepts:&lt;/p&gt;


&lt;object width="500" height="375"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4539735&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=4539735&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="375"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/4539735"&gt;&lt;span class="caps"&gt;DHH&lt;/span&gt; Keynote na RailsConf 2009 &amp;#8211; O Segredo&lt;/a&gt; from &lt;a href="http://vimeo.com/akitaonrails"&gt;Fabio Akita&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;And don&amp;#8217;t miss the complete keynote at &lt;a href="http://railsconf.blip.tv/#2091808"&gt;railsconf.blip.tv&lt;/a&gt;&lt;/p&gt;


&lt;embed src="http://blip.tv/play/Af_XBIa8BA" type="application/x-shockwave-flash" width="640" height="390" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt; 

	&lt;p&gt;O David Hansson deu um excelente keynote, dentre outras coisas mostrando como o Rails evoluiu nos últimos anos, as críticas, discussões. Deu uma introdução às novas features do Rails 3 e finalmente, falou sobre qual o segredo da produtividade. Na realidade, para agilistas, não há nenhuma novidade. Mas vale a pena reforçar o conceito de qualquer maneira.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Kqf97FtIkItkiYHq3lhuNqqtrGA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kqf97FtIkItkiYHq3lhuNqqtrGA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Kqf97FtIkItkiYHq3lhuNqqtrGA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kqf97FtIkItkiYHq3lhuNqqtrGA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>RailsConf 09 - Uncle Bob - Professionalism</title><link>http://akitaonrails.com/2009/05/07/railsconf-09-uncle-bob-professionalism</link><pubDate>Thu, 07 May 2009 03:34:25 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5155</guid><description>&lt;p&gt;&lt;strong&gt;Brasileiros:&lt;/strong&gt; tradução mais abaixo&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Update 08/05:&lt;/strong&gt; Bob Martins&amp;#8217; full keynote is now available at RailsConf&amp;#8217;s &lt;a href="http://railsconf.blip.tv/file/2089545/"&gt;Blip.TV&lt;/a&gt; page. Definitely go check it out!&lt;/p&gt;


	&lt;p&gt;It seems that O&amp;#8217;Reilly promised to deliver &amp;#8211; at the very least &amp;#8211; the main keynote recordings, so unfortunately we will have Tim Ferris, but much fortunately we will have Uncle Bob. Definitely the best talk I&amp;#8217;ve seen in eons. This particular snippet comes from the Q/A session, where Bob answer the question: &lt;em&gt;&amp;#8220;can you be too professional?&amp;#8221;&lt;/em&gt; Where many would be discussing for hours, he was able to distill it in a very simple and elegant way. Check it out:&lt;/p&gt;


&lt;object width="500" height="375"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4526461&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=4526461&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="375"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/4526461"&gt;Uncle Bob na RailsConf 09 &amp;#8211; Profissionalismo&lt;/a&gt; from &lt;a href="http://vimeo.com/akitaonrails"&gt;Fabio Akita&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;And the official, complete video of the keynote is already available! Kudos to the RailsConf staff for releasing it so quickly.&lt;/p&gt;


&lt;embed src="http://blip.tv/play/AYGAlmaGvAQ" type="application/x-shockwave-flash" width="640" height="390" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt; 

	&lt;p&gt;Parece que a O&amp;#8217;Reilly prometeu entregar &amp;#8211; pelo menos &amp;#8211; as gravações dos keynotes principais, então infelizmente teremos Tim Ferris, mas muito felizmente teremos Tio Bob. Definitivamente a melhor palestra que vejo em muito tempo. Este trecho em particular é da sessão de perguntas e respostas, onde Bob responde à pergunta &lt;em&gt;&amp;#8220;podemos acabar sendo profissionais demais?&amp;#8221;&lt;/em&gt; Onde muitos discutiriam por hora, ele foi capaz de destilar tudo de maneira simples e elegante. Dêem uma olhada.&lt;/p&gt;


	&lt;p&gt;Aproveitando, vejam a descrição da palestra &lt;a href="http://tecblog.locaweb.com.br/2009/05/07/railsconf09-lave-as-maos-antes-de-programar/"&gt;neste blog&lt;/a&gt; também.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ojT6G-kC1D6Mg5hUxSZn-BGGoHY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ojT6G-kC1D6Mg5hUxSZn-BGGoHY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ojT6G-kC1D6Mg5hUxSZn-BGGoHY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ojT6G-kC1D6Mg5hUxSZn-BGGoHY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>RailsConf 09 - Uncle Bob Martin</title><link>http://akitaonrails.com/2009/05/07/railsconf-09-uncle-bob-martin</link><pubDate>Wed, 06 May 2009 21:26:06 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5154</guid><description>&lt;p&gt;&lt;strong&gt;Brasileiros:&lt;/strong&gt; tradução mais abaixo&lt;/p&gt;


	&lt;p&gt;Today we were very fortunate to have the ending keynote by Robert Martin himself (a.k.a. Uncle Bob), from Object mentor.&lt;/p&gt;


	&lt;p&gt;I recorded most of the talk and I will publish them soon (and I still have lots of material that I was unable to compile just yet), but at the end of the talk I asked Bob to quickly give an advice to my fellow Brazilian programmers that were still unable to wrap their heads around &lt;span class="caps"&gt;TDD&lt;/span&gt;.&lt;/p&gt;


&lt;object width="500" height="375"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4523516&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=4523516&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="375"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/4523516"&gt;Uncle Bob Martin na RailsConf 2009&lt;/a&gt; from &lt;a href="http://vimeo.com/akitaonrails"&gt;Fabio Akita&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;Hoje tivemos a sorte de ter o keynote de encerramento do dia apresentado por ninguém menos que Robert Martin (também conhecido como Uncle Bob), da Object Mentor.&lt;/p&gt;


	&lt;p&gt;Eu gravei boa parte e depois vou publicar (aliás, tenho muito material que ainda não tive tempo de compilar), mas no final eu pedi que ele rapidamente desse um conselho aos programadores Brasileiros que ainda não entenderam &lt;span class="caps"&gt;TDD&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AN5kFYktr4VwGqJ843-NrPa355Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AN5kFYktr4VwGqJ843-NrPa355Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AN5kFYktr4VwGqJ843-NrPa355Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AN5kFYktr4VwGqJ843-NrPa355Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>The Best Environment for Rails on Windows - Part 2</title><link>http://akitaonrails.com/2009/04/27/the-best-environment-for-rails-on-windows-part-2</link><pubDate>Mon, 27 Apr 2009 18:58:20 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5152</guid><description>&lt;p&gt;If you&amp;#8217;re a Windows user new to this article, I recommend you start reading my original &lt;a href="/2009/01/13/the-best-environment-for-rails-on-windows"&gt;The Best Environment for Rails on Windows&lt;/a&gt; article from a few months ago, so you know what I am talking about.&lt;/p&gt;


	&lt;p&gt;Assuming you already have the &lt;a href="http://prdownloads.sourceforge.net/ctags/ec57w32.zip"&gt;Exuberant CTags&lt;/a&gt; and &lt;a href="http://code.google.com/p/msysgit/downloads/list"&gt;msysGit&lt;/a&gt; installed as described in my original article, then, once you get to the &lt;em&gt;&amp;#8220;Configuring gVim for Rails&amp;#8221;&lt;/em&gt; section, you can avoid all those steps and just do this (on Windows):&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;cd %HOME%&lt;tt&gt;
&lt;/tt&gt;git clone git://github.com/akitaonrails/vimfiles.git&lt;tt&gt;
&lt;/tt&gt;cd vimfiles&lt;tt&gt;
&lt;/tt&gt;git submodule init&lt;tt&gt;
&lt;/tt&gt;git submodule update&lt;tt&gt;
&lt;/tt&gt;copy vimrc ..\_vimrc&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;If you&amp;#8217;re on Mac &lt;span class="caps"&gt;OS X&lt;/span&gt; or Linux you can do:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;cd ~&lt;tt&gt;
&lt;/tt&gt;git clone git://github.com/akitaonrails/vimfiles.git .vim&lt;tt&gt;
&lt;/tt&gt;cd .vim&lt;tt&gt;
&lt;/tt&gt;git submodule init&lt;tt&gt;
&lt;/tt&gt;git submodule update&lt;tt&gt;
&lt;/tt&gt;ln -s ~/.vim/vimrc ~/.vimrc&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;I don&amp;#8217;t quite remember all the shortcuts, but the ones that you will immediatelly need are:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;Ctrl-F    Open up FuzzyFinder (similar to Textmate Command-T)&lt;tt&gt;
&lt;/tt&gt;\-P       Open up Nerd Tree (similar to the Project Pane in Textmate)&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;If you&amp;#8217;re a developer that had previously forked from my &lt;a href="git://github.com/akitaonrails/vimfiles.git"&gt;vimfiles repository&lt;/a&gt;, keep reading.&lt;/p&gt;&lt;h3&gt;Git Conflicts&lt;/h3&gt;


	&lt;p&gt;A few months ago I had forked from scrooloose&amp;#8217;s repository and added several modifications, including a new set of snippets for the NERDSnippet plugin and configurations to respect Windows file path differences.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://github.com/scrooloose"&gt;Scrooloose&lt;/a&gt; accepted my changes but instead of properly merging them into his repository, he copied the changes and made major changes to his repository. He decided that it would be better for maintenance to have the &amp;#8216;snippets&amp;#8217; sub-directory be a separated git project, which is now &lt;a href="http://github.com/scrooloose/snippets"&gt;here in Github&lt;/a&gt;. Then he replaced the original &amp;#8216;snippets&amp;#8217; folder for a git submodule, linking both projects together.&lt;/p&gt;


	&lt;p&gt;Having no common ancestor no more, I was unable to easily merge back from his changes. I was getting this error whenever I tried to git pull&amp;#8212;rebase or git pull -s resolve:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;fatal: cannot read object c1a25b84627516da46b6c375f4dc874deedbb597 &lt;tt&gt;
&lt;/tt&gt;'snippets~a4c30e94d52232e958d4f53c6a633ed438c54bcc': &lt;tt&gt;
&lt;/tt&gt;It is a submodule!&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;The actual commit refs are different, but this is the error message I was getting. Unfortunately I am no Git-expert yet so I didn&amp;#8217;t know if there&amp;#8217;s a better solution for this problem. So, what I ended up doing was hard resetting back to commit &lt;a href="http://github.com/akitaonrails/vimfiles/commit/7e2366c20fb19b5709369e77aa3bc095a869e1ce"&gt;7e2366c20fb19b5709369e77aa3bc095a869e1ce&lt;/a&gt;, which was the last known common ancestor for our repos. Then I git pulled from scrooloose, which brought me back on track with his, but also made me lose all my custom changes.&lt;/p&gt;


	&lt;p&gt;But as most of my work was on the snippets and he already merged them into the separated project, I decided I could lose my commits. Finally I manually added &lt;a href="http://github.com/akitaonrails/vimfiles/commit/4d9bb7e0e16468c665db1c2360c1d255aea81ff1"&gt;minor tweaks&lt;/a&gt; into just 3 files to make them compatible with Windows again and adding a little bit more of eye-candy for &lt;span class="caps"&gt;GUI&lt;/span&gt;-mode on Windows, Mac and Linux.&lt;/p&gt;


	&lt;p&gt;If someone knows how to resolve this kind of situation in git without having to resort to those drastic measures, please let me know, I still don&amp;#8217;t know how to handle submodule situations with git. I hope this doesn&amp;#8217;t disrupt too much of your work if you were forking from me.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rrVgnEdIme_AAfU3QafZqxDRXU0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rrVgnEdIme_AAfU3QafZqxDRXU0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rrVgnEdIme_AAfU3QafZqxDRXU0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rrVgnEdIme_AAfU3QafZqxDRXU0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>E-TextEditor, or, how NOT to do business</title><link>http://akitaonrails.com/2009/04/12/e-texteditor-or-how-not-to-do-business</link><pubDate>Sun, 12 Apr 2009 14:04:12 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5147</guid><description>&lt;p&gt;There was a very exciting news recently regarding the Windows software &lt;a href="http://www.e-texteditor.com/"&gt;E-TextEditor&lt;/a&gt; becoming open source. The E is a very good editor, still in need of more features, reliability, stability.&lt;/p&gt;


	&lt;p&gt;But, the news is not as good as it seemed. You can certainly build E for Linux for &amp;#8220;free&amp;#8221; (as in beer), but you cannot do that for Windows. They are using a &amp;#8220;modified&amp;#8221; &lt;span class="caps"&gt;BSD&lt;/span&gt; style license, which is very restrictive (and therefore &lt;span class="caps"&gt;CANNOT&lt;/span&gt; be called &lt;span class="caps"&gt;BSD&lt;/span&gt; anymore). Calling it &amp;#8220;essentially &lt;span class="caps"&gt;BSD&lt;/span&gt; with one extra clause&amp;#8221; is extremely misleading. You can contribute if you like to work for free, but you cannot fork the project, you cannot remove the licensing functionality and you don&amp;#8217;t get anything for contributing: you will still have to pay for it. So, what they want is just free labor. The &amp;#8220;extra clause&amp;#8221; goes like this:&lt;/p&gt;


&lt;blockquote&gt;Any redistribution, in whole or in part, must retain full licensing
  functionality, without any attempt to change, obscure or in other ways
  circumvent its intent.&lt;/blockquote&gt;

	&lt;p&gt;I am certainly not against commercial applications, as I paid for TextMate myself for the Mac and I am very happy paying for high quality software. I am against paying for low quality software  and I am very very against trying to misuse the open source values in a misleading way.&lt;/p&gt;


	&lt;p&gt;You either &lt;span class="caps"&gt;ARE&lt;/span&gt; Free Open Source Software or you are not. There is no such thing as &amp;#8220;almost like &lt;span class="caps"&gt;FOSS&lt;/span&gt;, but with an extra restrictive clause&amp;#8221;. If it is restrictive, it is, by definition, not &lt;span class="caps"&gt;FOSS&lt;/span&gt; anymore. Bummer.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/00mhluK5VuYhrAtOsMi5vCJFd9E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/00mhluK5VuYhrAtOsMi5vCJFd9E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/00mhluK5VuYhrAtOsMi5vCJFd9E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/00mhluK5VuYhrAtOsMi5vCJFd9E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Locos x Rails Wrap up</title><link>http://akitaonrails.com/2009/04/07/locos-x-rails-wrap-up</link><pubDate>Tue, 07 Apr 2009 12:55:46 PDT</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5136</guid><description>&lt;p&gt;&lt;strong&gt;Brasileiros:&lt;/strong&gt; tradução &lt;a href="/2009/04/07/locos-x-rails-wrap-up#locosxrails_pt_br"&gt;abaixo&lt;/a&gt;.&lt;/p&gt;


&lt;p style="text-align: center"&gt;&lt;a href="http://www.locosxrails.com"&gt;&lt;img src="http://www.akitaonrails.com/assets/2009/4/7/logo-locosxrails_original.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

	&lt;p&gt;This last weekend I had a wonderful time in Buenos Aires, Argentina, at the &lt;a href="http://locosxrails.com"&gt;Locos x Rails&lt;/a&gt; event which I think is the first big Ruby and Rails community gathering there. They did an extraordinary job making a very compelling and exciting event that I am sure people liked a lot. I don&amp;#8217;t have any official numbers but I think there were more than a 100 attendees and a stellar international speaker roster including Obie Fernandez, Desi McAdam, Yehuda Katz, Evan Phoenix, Evan Henshaw Plath.&lt;/p&gt;


&lt;p style="text-align: center"&gt;&lt;object width="500" height="375"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4048963&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=4048963&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="375"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/4048963"&gt;Locos x Rails&lt;/a&gt; from &lt;a href="http://vimeo.com/akitaonrails"&gt;Fabio Akita&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;small&gt;(see it on &lt;a href="http://www.youtube.com/watch?v=14VPW7PucqQ&amp;#38;feature=player_embedded"&gt;YouTube!&lt;/a&gt; as well)&lt;/small&gt;&lt;/p&gt;&lt;p&gt;In the first day we had Obie Fernandez opening keynote where he presented the same talk he did at Rails Summit in Brazil, about the 4 Agile principles and the &amp;#8220;Hashrocket-way&amp;#8221; on implementing them. As always, a very inspiring talk. Then Fabián Ramírez, from Chile, talked about Ruby on Rails on real projects with his real life experiences and why companies should be looking seriously toward adopting Rails. Evan Henshaw Plath (aka Rabble), from &lt;span class="caps"&gt;ENTP&lt;/span&gt;, followed with an explanation on privacy issues on the Web and the OAuth solution toward web services interoperability and authorization.&lt;/p&gt;


	&lt;p&gt;After lunch, Carla Ares and Claudio Zamoszczyk demonstrated how to control Arduino hardware using Ruby &amp;#8211; and for those who are interested, Randal Schwartz recently interviewed Massimo Banzi, co-founder of Arduino in the &lt;a href="http://twit.tv/floss61"&gt;&lt;span class="caps"&gt;FLOSS&lt;/span&gt; Weekly podcast&lt;/a&gt;. Evan Phoenix, from Engine Yard, didn&amp;#8217;t talk about Rubinius this time, but his talk was nonetheless important because he was pointing out code smells in Ruby (such as using &amp;#8216;rescue nil&amp;#8217;), I think it was very informative. And the first day closed with a video conference with David Hansson himself, answering the audience&amp;#8217;s questions. Unfortunately this session had some internet connection drawbacks but all in all I think the audience was able to have a good chat with &lt;span class="caps"&gt;DHH&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;The second day opened with Luis Lavena talking about Ruby cross compatibility, the One-Click Ruby Installer challenges and his Rake compiler project, which allows even Linux developers to cross compile Windows compatible binaries. After that Emilio Tagua, who is also a Rails Core Contributor, talked about ruby-debug and techniques on debugging Rails applications. Nicolás Sanguinetti gave an introduction about Sinatra and non-Rails light web frameworks. Desi McAdam, also from Hashrocket and leader for &lt;a href="http://www.devchix.com/"&gt;devchix.com&lt;/a&gt;, gave a tutorial on how to create web applications with Rails for Facebook, using the Facebooker gem.&lt;/p&gt;


	&lt;p&gt;After lunch we had Adrian Mugnolo, one of the organizers, replacing Ben Scofield &amp;#8211; who unfortunatelly was unable to fly to Argentina. Adrian talked about Sequel as an alternative to ActiveRecord to talk to databases. Chad DePue followed talking about ActiveResource and Restful web services in Rails. Finally, we had the final talk with Yehuda Katz, also from Engine Yard, who talked about the Rails and Merb merge, the challenges and what we should expect. His main point: merging Rails and Merb does not end healthy competition in the community: on the other hand, it should increase it, but instead of focusing on big chunks as an entire web framework, people can compete on smaller pieces such as ActiveRecord vs DataMapper vs Sequel. He did a great job on explaining the evolution of the merge.&lt;/p&gt;


	&lt;p&gt;To finish the event, Tom Aadland conducted a raffle of 10 books from O&amp;#8217;Reilly. All in all, I think this event was very well organized, the talks were compelling, the audience was full of Railers, we had real-time translators from English to Spanish as well so I think no one missed anything. They also recorded all the talks and they will release it very soon. Follow them at Twitter as &lt;a href="http://twitter.com/locosxrails"&gt;@locosxrails&lt;/a&gt; and their &lt;a href="http://locosxrails.com"&gt;website&lt;/a&gt;. Congratulations to all the organizers and staff for a well done event, and we hope to see you all, first at Rails Summit in Brazil this year, and again in Argentina next year!&lt;/p&gt;


	&lt;p&gt;&lt;a name="locosxrails_pt_br"&gt;&lt;/a&gt;
&lt;h2&gt;Locos x Rails&lt;/h2&gt;&lt;/p&gt;


	&lt;p&gt;Este último fim de semana tive uma excelente estadia em Buenos Aires, Argentina, no evento &lt;a href="http://locosxrails.com"&gt;Locos x Rails&lt;/a&gt; que eu acho que foi o primeiro grande encontro da comunidade Ruby e Rails de lá. Eles fizeram um trabalho extraordinário criando um evento interessante e empolgante que tenho certeza que as pessoas gostaram. Não tenho números oficiais mas acho que foram mais de 100 pessoas além de uma seleção internacional estelar incluindo Obie Fernandez, Desi McAdam, Yehuda Katz, Evan Phoenix, Evan Henshaw Plath.&lt;/p&gt;


&lt;p style="text-align"&gt;&lt;div style="width:425px;text-align:center" id="__ss_1261167"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/akitaonrails/locos-x-rails?type=presentation" title="Locos x Rails"&gt;Locos x Rails&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=locos-090407161915-phpapp02&amp;#38;stripped_title=locos-x-rails" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=locos-090407161915-phpapp02&amp;#38;stripped_title=locos-x-rails" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/akitaonrails"&gt;Fabio Akita&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;

	&lt;p&gt;No primeiro dia tivemos Obie Fernandez abrindo com a mesma palestra que ele fez no Rails Summit no Brasil, sobre os 4 princípios Ágeis e a &amp;#8220;maneira Hashrocket&amp;#8221; de implementá-las. Como sempre, uma palestra inspiradora. Então Fabián Ramírez, do Chile, falou sobre projetos reais de Ruby on Rails com suas experiências reais e porque empresas devem olhar seriamente em adotar Rails. Evan Henshaw Plath (Rabble), da &lt;span class="caps"&gt;ENTP&lt;/span&gt;, seguiu com uma explicação sobre problemas de privacidade na Web e a solução OAuth interoperabilidade de serviços web.&lt;/p&gt;


	&lt;p&gt;Depois do almoço, Carla Ares e Claudio Zamoszczyk demonstraram como controlar hardware Arduino usando Ruby &amp;#8211; e para os interessados, Randal Schwartz recentemente entrevistou Massimo Banzi, co-fundador do Arduino no &lt;a href="http://twit.tv/floss61"&gt;podcast &lt;span class="caps"&gt;FLOSS&lt;/span&gt; Weekly&lt;/a&gt;. Evan Phoenix, da Engine Yard, não falou sobre Rubinius desta vez, mas sua palestra foi muito importante porque ele explicou sobre código ruim em Ruby (como usar &amp;#8216;rescue nil&amp;#8217;), eu acho que foi muito informativo. E o primeiro dia fechou com uma vídeo conferência com o David Hansson, respondendo perguntas da platéia. Infelizmente essa sessão teve alguns problemas de conexão mas no final acho que a platéia teve chance de ter uma boa conversa com o &lt;span class="caps"&gt;DHH&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;O segundo dia abriu com Luis Lavena falando sobre compatibilidade de Ruby em múltiplas plataformas, os desafios do One-Click Ruby Installer e seu projeto Rake Compiler, que permite até a desenvolvedores em Linux de compilar binários compatíveis com Windows. Depois disso Emilio Tagua, que também é Rails Core Contributor, falou sobre ruby-debug e técnicas de debugging em aplicações Rails. Nicolás Sanguinetti deu uma introdução sobre Sinatra e web frameworks leves não-Rails. Desi McAdam, também da Hashrocket e líder do &lt;a href="http://www.devchix.com/"&gt;devChix.com&lt;/a&gt;, deu um tutorial sobre como criar aplicações web com Rails, para Facebook, usando a gem Facebooker.&lt;/p&gt;


	&lt;p&gt;Depois do almoço tivemos Adrian Mugnolo, um dos organizadores, substituindo Ben Scofield &amp;#8211; que infelizmente não conseguiu chegar a tempo por problemas aéreos. Adrian falou sobre Sequel como uma alternativa para ActiveRecord para conversar com bancos de dados. Chad DePue seguiu palestrando sobre ActiveResource e serviços web Restful em Rails. Finalmente, tivemos a palestra final com Yehuda Katz, também da Engine Yard, que falou sobre o merge do Rails com Merb, os desafios e o que deveríamos esperar. Seu principal ponto: mesclar Rails e Merb não acaba com a competição saudável na comunidade: do contrário, deve aumentá-la, mas em vez de focar em pedaços grandes como um framework web inteiro, as pessoas devem competir em pedaços menores como ActiveRecord vs DataMapper vs Sequel. Ele fez um bom trabalho explicando a evolução do merge.&lt;/p&gt;


	&lt;p&gt;Para finalizar o evento, Tom Aadland conduziu um sorteio de 10 livros da O&amp;#8217;Reilly. No geral, acho que o evento foi muito bem organizado, as palestras foram interessantes, a platéia estava cheia de Railers, tivemos tradutoras em tempo real de Inglês para Espanhol então acho que ninguém perdeu nada. Eles também gravaram todas as palestras e devem lançá-las em breve. Siga-os no Twitter como &lt;a href="http://twitter.com/locosxrails"&gt;@locosxrails&lt;/a&gt; e seu &lt;a href="http://locosxrails.com"&gt;website&lt;/a&gt;. Parabéns aos organizadores e equipe por um evento bem feito, e esperamos vê-los todos, primeiro na Rails Summit no Brasil este ano, e novamente na Argentina ano que vem!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_f2bD-ohFI3lwz2UElyHG4bzU3s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_f2bD-ohFI3lwz2UElyHG4bzU3s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_f2bD-ohFI3lwz2UElyHG4bzU3s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_f2bD-ohFI3lwz2UElyHG4bzU3s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Rails (Im)maturity Model?</title><link>http://akitaonrails.com/2009/02/17/rails-im-maturity-model</link><pubDate>Tue, 17 Feb 2009 01:53:41 PST</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/5050</guid><description>&lt;p&gt;As usual in the Ruby on Rails community, another drama took place :-) It all started by a very well intended Obie Fernandez in the &lt;a href="http://groups.google.com/group/rails-business/browse_thread/thread/e24cfda7947fda10?pli=1"&gt;Rails-business&lt;/a&gt; Google Group. He jotted down a proposal for a Rails Maturity Model (RMM), which would somewhat resemble the CMMi in its core but geared towards helping companies and clients to get higher quality Rails projects.&lt;/p&gt;


	&lt;p&gt;I can totally understand where it went bad: the association with &amp;#8220;CMMi&amp;#8221; and the &lt;strong&gt;assumption&lt;/strong&gt; that it is all about &amp;#8220;certifications&amp;#8221;. Good developers hate certifications, this is a given. We all know that you can totally suck in programming and still get certified at something fancy. When you&amp;#8217;re &amp;#8216;certified&amp;#8217; you&amp;#8217;re only asserting that you can memorize random stuff out of a book, not that you can really apply the theories in real life. Hence, real developers are always terrified of working close to &amp;#8216;certified&amp;#8217; developers with no real working hours.&lt;/p&gt;&lt;p&gt;The bottom line about certification is that good developers will be good without any certification process, period. It is also a given that certification has the sole purpose of being a marketing stunt for people with mediocre real past success cases in real life. HR people &amp;#8211; who are total noobies about technology &amp;#8211; rely on certifications to filter out candidates for an interview. They would be lost without it. I know, I am being too general, but you get the idea. Don&amp;#8217;t argue on this point just yet and keep on reading.&lt;/p&gt;


	&lt;p&gt;So, this is a vicious market, sorry. The rules of engagement are almost craved in stone and it is very difficult to change them. Agilists know what it is like to fight old habits in companies. Convincing an old corporate geezer to take a look at the Agile philosophy hurts, badly.&lt;/p&gt;


	&lt;p&gt;Since the inicial discussion, Obie wrote &lt;a href="http://blog.obiefernandez.com/content/2009/02/rails-maturity-model.html"&gt;another article&lt;/a&gt; trying to be more specific on his ideas of a maturity model for Rails. And just yesterday he was really pissed off and wrote yet again that &lt;a href="http://blog.obiefernandez.com/content/2009/02/for-giles-et-al.html"&gt;&lt;span class="caps"&gt;RMM&lt;/span&gt; has nothing to do with certifications&lt;/a&gt;. Understandably, people can&amp;#8217;t spell &lt;span class="caps"&gt;CMM&lt;/span&gt; without thinking of certifications right away. Please, take your time to read Obie&amp;#8217;s articles before continue reading my points here. But rest assured: if you don&amp;#8217;t agree with Obie, chances are that you have no idea of what CMMi stands for.&lt;/p&gt;


	&lt;h2&gt;People don&amp;#8217;t understand CMMi&lt;/h2&gt;


	&lt;p&gt;Ok, for starters, I am not &lt;strong&gt;&lt;span class="caps"&gt;AT ALL&lt;/span&gt;&lt;/strong&gt; a fan of CMMi. But let me explain about CMMi so I can go back to Obie&amp;#8217;s point on the &lt;span class="caps"&gt;RMM&lt;/span&gt;. And also note that Obie himself stated that he doesn&amp;#8217;t fully understand the CMMi either.&lt;/p&gt;


	&lt;p&gt;I am not an expert in CMMi by far. I&amp;#8217;ve researched a lot about it and for a short period of time I lived and breathed CMMi. Actually it was SE-CMM, prior to it becoming CMMi. I think it was around 2002. I&amp;#8217;ve studied the texts, participated in conferences, talked to consultancies and so on. I was very much into it &amp;#8211; and believed it, go figure! 3 years later, I also certified myself as a &lt;span class="caps"&gt;PMP&lt;/span&gt; (a Project Management Institute certificate for Professional Managers) and I studied a lot of the &lt;span class="caps"&gt;OPM3&lt;/span&gt; model. Before all that I&amp;#8217;ve been into the Unified Process and &lt;span class="caps"&gt;RUP&lt;/span&gt; stuff. So, yes, I&amp;#8217;ve been into lots of &amp;#8216;enterprisey&amp;#8217; stuff in the early days. I am out of the drugs by now, thanks for asking. None of it matters because I am very rusty in all this.&lt;/p&gt;


	&lt;p&gt;So, first and foremost: the CMMi is not a &amp;#8220;standard&amp;#8221; and, therefore, you can&amp;#8217;t be &amp;#8220;certified&amp;#8221; in CMMi &amp;#8211; at least not in the legal definition of &amp;#8220;certification&amp;#8221;. There is no certification for CMMi. It is a body of knowledge that outlines a model of process improvement, thus &amp;#8216;maturity&amp;#8217;. Well, at least that&amp;#8217;s the theory.&lt;/p&gt;


	&lt;p&gt;You can go through an &lt;strong&gt;appraisal&lt;/strong&gt; though. The &lt;span class="caps"&gt;SEI&lt;/span&gt;, the lead organization that manages CMMi, is still an academic research center in Carnegie Mellon University. People can go through a lengthy process to become a Lead Appraiser and work for Partners to appraisal a company. I think prior to 2007, when there was an &lt;a href="http://www.sei.cmu.edu/cmmi/appraisals/appraisalpoliciesupdate.html"&gt;update to the appraisal policy&lt;/a&gt;, it was a little bit easier to get appraised.&lt;/p&gt;


	&lt;p&gt;Now, don&amp;#8217;t quote me on that because I will be saying just what I have heard in the industry some 6~7 years ago. Back then we were very interested in the outstanding growth of the indian IT market, specially the big guns such as Tata, Infosys, Wipro, Satyam, etc. There were unfounded rumors that they were all appraised &lt;span class="caps"&gt;CMM&lt;/span&gt; Level 5 because they had their own people certified as Lead Appraisers. If you just look at the &lt;span class="caps"&gt;SEI&lt;/span&gt; &lt;a href="http://partner-directory.sei.cmu.edu/"&gt;partner&amp;#8217;s&lt;/a&gt; list, you will see them listed there, though it is not evidence for anything and this is not an accusation. Rumors, just rumors. The appraisal model has been criticized before, and if I am not mistaken, one of the reasons being that once you&amp;#8217;re asserted to be in one Level of maturity you don&amp;#8217;t go down because there was not a post-appraisal follow up.&lt;/p&gt;


	&lt;p&gt;&lt;span class="caps"&gt;CMM&lt;/span&gt; was first created as a kind of an insurance for the military software projects to assert that the winning companies could demonstrate at least a shred of evidence that at the very least they had some best practices and the processes in place to back them up. Anyone that worked for Tata will tell you how bureacratic they are. The appraisal process itself (SCAMPI) is based on evidence collection &amp;#8211; though this can be very subjective at times and it is not an investigative process.&lt;/p&gt;


	&lt;p&gt;Well, to be fair, I hope that big companies do at least have that. Really big government projects have to have some level of manageability. A maturity model is by no means a hard evidence for guaranteed success, but it helps for big guns to have that. Companies such as Lockheed-Martin, for instance. If you&amp;#8217;ve never worked for really really massive enterprise projects, you have no idea of the nightmare.&lt;/p&gt;


	&lt;p&gt;But again, I have the personal feeling that the &lt;span class="caps"&gt;SEI&lt;/span&gt;&amp;#8217;s original goals were corrupted long ago. The way the market works is pretty straight forward: big companies and governments &amp;#8220;requires&amp;#8221; you to be CMMi at some Level. So, &amp;#8216;serious&amp;#8217; companies will invest some time (a couple of years) and money (a lot) to put their processes in place and call in an appraiser. This is very expensive and traumatic to do, so only companies that can take the punch will do it. This is very elitist indeed, but it works. This is outside of the market that I personally want to be in, that&amp;#8217;s why I walked away.&lt;/p&gt;


	&lt;p&gt;If you have no idea of what CMMi stands for, it is a model divided in 5 levels of maturity, from 1 to 5, and can be summarized this way:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Level 1: Initial (Ad hoc, chaotic, no processes, success out of luck, where most companies really are)&lt;/li&gt;
		&lt;li&gt;Level 2: Repeatable (some project management, some discipline, a rough process that can be used repeatedly)&lt;/li&gt;
		&lt;li&gt;Level 3: Defined (the organization has institutionalized the processes)&lt;/li&gt;
		&lt;li&gt;Level 4: Managed (management means that is can be quantified, there are metrics in place to actually measure a project)&lt;/li&gt;
		&lt;li&gt;Level 5: Optimizing (with the proper processes in place, the process can give feedback to itself, helping to refine the process)&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;To assert that you&amp;#8217;re in a certain level, you must implement (in a verifiable manner) a series of Key Process Areas (KPAs). Each level has its own set of KPAs which define a Goal, Commitments, Abilities, Activities, Methods of monitoring, Methods for verification. As I said, this is not a small thing.&lt;/p&gt;


	&lt;p&gt;&amp;#8220;Implementing&amp;#8221; the CMMi up until Level 5 can really take some good years. Implement a &lt;span class="caps"&gt;KPA&lt;/span&gt; properly means really to understand the gut of it, sometimes knowing how to consciously bend it over and still have it validated. It is a real struggle to go through the whole process, specially when you already have lots of projets going on in an ad hoc manner (Level 1)&lt;/p&gt;


	&lt;p&gt;There is a whole lot more to be said about the CMMi and I recommend you read this small &lt;a href="http://www.cmmifaq.info/"&gt;&lt;span class="caps"&gt;FAQ&lt;/span&gt;&lt;/a&gt; about it that can be quite enlightening. Also read some of the &lt;a href="http://www.scribd.com/doc/11161107/Fallacy-of-ISOCMMI-Certifications"&gt;criticisms&lt;/a&gt;, specially to its appraisal system.&lt;/p&gt;


	&lt;p&gt;This is a very very short summary of what CMMi is. There is a vast literature about this subject and if you&amp;#8217;re interested I suggest you go research about it. You will learn a lot, but don&amp;#8217;t take it too seriously. This is the kind of thing that every good developer/manager should&amp;#8217;ve read at least once in their lives.&lt;/p&gt;


	&lt;p&gt;Some people think that it is possible to blend Agile with CMMi. I wouldn&amp;#8217;t say it is impossible, but I would certainly ask &lt;em&gt;&amp;#8220;What is the point?&amp;#8221;&lt;/em&gt; I really think it is kind of pointless to attempt such a thing, but I digress.&lt;/p&gt;


	&lt;h2&gt;Obie&lt;/h2&gt;


	&lt;p&gt;Now, going back to Obie&amp;#8217;s idea, the way I understood it, it is just an idea of maybe implementing something akin of CMMi&amp;#8217;s 5 Levels of maturity, where in each level you comply to a set of KPAs, such as &amp;#8220;we do pair-programming 100% of the time&amp;#8221; or &amp;#8220;we have extensive and almost total test coverage&amp;#8221;. Not going into the merit of the KPAs themselves, one could assert a certain level of maturity with some well known criteria, if they can be clearly defined.&lt;/p&gt;


	&lt;p&gt;The idea in itself is not bad. Having a reliable, updated body of knowledge is a good idea. The CMMi is based on past history and past data of successful projects. A possible &amp;#8220;RMM&amp;#8221; would be similar, with the best practices and techniques used by the most successful companies of the time, such as Hashrocket or Pivotal.&lt;/p&gt;


	&lt;p&gt;There are some problems though: this is an appraisal for the company, not for an individual, so the problem of lack of good quality developers would still be an issue as this doesn&amp;#8217;t attempt to solve this problem. The second problem is just that there is still not that many Rails projects, consultancies and a true record of past projects to even start thinking of a maturity model. We are, by definition, not mature enough yet. And don&amp;#8217;t take this as a criticism to anyone. Thinking about it, Rails is just 4 ~ 5 years old now. This is just too short.&lt;/p&gt;


	&lt;p&gt;Finally, Rails is a technology. Even though the idea may sound compelling for us, fans, Rails is a technology, not an specific professional area such as &amp;#8220;Software Engineering&amp;#8221;. You can certainly apply Rails into CMMi companies, but having Rails implemented properly doesn&amp;#8217;t lend anyone a Level 5 stamp.&lt;/p&gt;


	&lt;p&gt;I think the CMMi is not a very good starting point as it is just too monumental, with a very very big overhead, and very very bureaucratic processes. It is just like &lt;span class="caps"&gt;RUP&lt;/span&gt; vs Agile again. The core idea is good if we keep the CMMi analogies out of the question.&lt;/p&gt;


	&lt;p&gt;Now, I do think the idea of a body of knowledge is appealing. This could be an organic repository where people would be able to organize their metrics, their own discovered best practices and outlines for successful projects. Over time new material would stack up until we could finally have enough data to actually start thinking of maturity: when the whole community goes into the next level.&lt;/p&gt;


	&lt;p&gt;Neither a possible &lt;span class="caps"&gt;RMM&lt;/span&gt; nor CMMi actually answers the questions most clients have. None of them can guarantee a software life-cycle with real healthy, without sloppy programming. None of them will make it easier for customers to find good freelance Railers. And if you, as a savvy customer, ever need a Railer you would never trust a consultancy with an &amp;#8220;RMM badge&amp;#8221;, I bet.&lt;/p&gt;


	&lt;p&gt;In the end of the day, processes are important, but never to become too overwhelming. There is a gray area between monumental models such as CMMi and agile methodologies (I know, I know, a capability model is not an engineering methodology, I am just comparing complexity). I think the community is still too young to make decisions on maturity. But, I am open to ideas. If someone come up with a detailed &lt;span class="caps"&gt;RMM&lt;/span&gt; specification proposal, I would be very interested in reading it.&lt;/p&gt;


	&lt;p&gt;But again, I do think the Agile philosophy, the techniques from XP, &lt;span class="caps"&gt;DDD&lt;/span&gt; are enough by now. Before we start debating on bigger processes, some people don&amp;#8217;t even know the basics yet, such as algorithms, data structures, proper OO programming, etc. Heck, there are web developers that don&amp;#8217;t even understand the &lt;span class="caps"&gt;HTTP&lt;/span&gt; protocol or the &lt;span class="caps"&gt;TCP&lt;/span&gt; stack yet. This article is by no means an attempt to answer the question and it is still open for debate, but it is very valid to debate it. Bashing and complaining will not bring good ideas to the table.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pIZ4a-tW-xlMXvQ1oSXVTTmSF1Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pIZ4a-tW-xlMXvQ1oSXVTTmSF1Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pIZ4a-tW-xlMXvQ1oSXVTTmSF1Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pIZ4a-tW-xlMXvQ1oSXVTTmSF1Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Off-Topic: (Probable) Leopard fix to connect to Windows VPN</title><link>http://akitaonrails.com/2009/01/15/off-topic-probable-leopard-fix-to-connect-to-windows-vpn</link><pubDate>Wed, 14 Jan 2009 23:00:05 PST</pubDate><guid isPermaLink="false">tag:www.akitaonrails.com,2008:Post/4868</guid><description>&lt;p&gt;This has been frustrating me for the longest time. Mac &lt;span class="caps"&gt;OS X&lt;/span&gt; has both &lt;span class="caps"&gt;L2TP&lt;/span&gt; and &lt;span class="caps"&gt;PPTP&lt;/span&gt; support for VPNs but for some reason it has a very difficult time dealing with Windows based &lt;span class="caps"&gt;PPTP&lt;/span&gt; VPNs. Speculation goes on along the lines that &lt;span class="caps"&gt;OS X&lt;/span&gt; uses a newer implementation of &lt;span class="caps"&gt;PPTP&lt;/span&gt;, and Windows doesn&amp;#8217;t (or most probable, it has a buggy implementation that only works on Windows, same problem as &lt;span class="caps"&gt;SMB&lt;/span&gt;, LDAP3, etc).&lt;/p&gt;


	&lt;p&gt;Whatever the reason, the behavior that I&amp;#8217;ve been seeing is that Leopard is able to connect to a Windows &lt;span class="caps"&gt;VPN&lt;/span&gt;, it is able to authenticate, it is able to route correctly but then it won&amp;#8217;t drop the connection but simply stops routing packages into the &lt;span class="caps"&gt;VPN&lt;/span&gt; tunnel after around 5 min of usage. So, I decided to Google around and I tried a few tricks.&lt;/p&gt;


	&lt;p&gt;Up until now I am connected to my company&amp;#8217;s Windows &lt;span class="caps"&gt;VPN&lt;/span&gt; for &lt;strong&gt;1 hr&lt;/strong&gt; &amp;#8211; which might be a world record! Let me explain a few things I tried and that might have helped in this.&lt;/p&gt;&lt;p&gt;First, I tried a trick I read in a forum:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Open System Preferences &amp;rarr; Network&lt;/li&gt;
		&lt;li&gt;Click the &amp;#8220;Location&amp;#8221; drop down menu and choose &amp;#8220;Edit Locations &amp;#8230;&amp;#8221; &lt;/li&gt;
		&lt;li&gt;Create a brand new Location&lt;/li&gt;
		&lt;li&gt;Configure your Wifi or Ethernet connection so you&amp;#8217;re online&lt;/li&gt;
		&lt;li&gt;On the lower left corner, click on the &amp;#8221;+&amp;#8221; button, then on &amp;#8220;Interface&amp;#8221; choose &amp;#8220;VPN&amp;#8221; and on &amp;#8220;VPN Type&amp;#8221;, choose &amp;#8220;PPTP&amp;#8221;.&lt;/li&gt;
		&lt;li&gt;Configure your &lt;span class="caps"&gt;VPN&lt;/span&gt; using your company&amp;#8217;s setting (IP address, &amp;#8220;DOMAIN\username&amp;#8221;, type your password clicking on the &amp;#8220;Authentication Settings &amp;#8230;&amp;#8221; button.&lt;/li&gt;
		&lt;li&gt;Again on the lower left corner, click on the 3rd icon, next to the &amp;#8221;-&amp;#8221; icon and choose &amp;#8220;Set Service Order &amp;#8230;&amp;#8221; &lt;/li&gt;
		&lt;li&gt;Drag and drop your &lt;span class="caps"&gt;VPN&lt;/span&gt; service to the top of the list&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;If you have VMWare Fusion installed, I read that the virtual network adapters could be one of the reasons so you need to stop them typing this in the Terminal:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;sudo /Library/Application\ Support/VMware\ Fusion/boot.sh --stop&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;After that, again in the Network Preferences Pane, I connected into my &lt;span class="caps"&gt;VPN&lt;/span&gt; and surprisingly the connection stayed on for more than 1 hr whereas I couldn&amp;#8217;t stay connected for more than 5 min before that. None of the steps above make much
sense, but it seems to have worked for me.&lt;/p&gt;


	&lt;p&gt;I also left a Terminal open constantly pinging some server inside the company network to make sure I am keeping the connection alive. I have no idea if those steps actually &lt;em&gt;solve&lt;/em&gt; the problem or I just got lucky all of a sudden. Please drop a line in the comments if it solved it for you or if you have other insights around this issue.&lt;/p&gt;


	&lt;p&gt;Bottom line: if you can, don&amp;#8217;t build a Windows-based network.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Jmhak0xpV5FidHwgIR9u_4f1xm4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Jmhak0xpV5FidHwgIR9u_4f1xm4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Jmhak0xpV5FidHwgIR9u_4f1xm4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Jmhak0xpV5FidHwgIR9u_4f1xm4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>
