Writing Code is the Easy Part
My Equipment: Mackie PROFX12 12-Channel Compact Effects Mixer with USB Sony MDR7506 Professional Large Diaphragm Headphone Roland R-05 Studio WAVE/MP3 Recorder Transcend 32 GB Class 10 SDHC Flash Memory Card (TS32GSDHC10E) (for the Roland R-05) Griffin Technology iMic USB Audio Device Doctor Who TARDIS USB Hub Doctor Who TARDIS USB Hub Model #DR115 QuickVoice Recorder Rolls MM11 Microphone Muting Switch Designed to Temporarily Mute a Balanced XLR Signal Heil PR-40 Dynamic Studio Recording Microphone Heil Sound SM-2 Shockmount for PR-30 and PR-40 Champagne Heil Sound PL-2T Overhead Broadcast Boom (Standard) Podcasting Club Setup: Behringer Xenyx 802 Premium 8-Input 2-Bus Mixer with Xenyx Mic Preamps and British EQs Shure SM58-CN Cardioid Dynamic Vocal Microphone with Cable On Stage Foam Ball-Type Mic Windscreen, Black Hamilton Nu-Era Tabletop Mic Stand JVC HA-V570 Supra-Aural Headphones
When preparing to add some layout features to JotRod, I realized it was a Rails 3.0.9 application. Here's a quick rundown on upgrading to Rails 3.1.3. Download 164.7 MB Download (iPod & iPhone) 37.9 MB Take the 2011 Readers Survey
In order to get someone a timeline in JotRod, we need followers and following lists to compile the Jots from. This means that we need to add a new ColumnFamily called Followers and another one called Following. We don't have the joins capability from relational databases to do this for us. I'm going to hijack the User model's database connection to create the ColumnFamilies. (We don't have migrations, yet.) Here's what I ran in the rails console: cf_def = CassandraThrift::CfDef.new(:keyspace => "JotRod", :name => "Followers") User.connection.add_column_family(cf_def) cf_def = CassandraThrift::CfDef.new(:keyspace => "JotRod", :name => "Following") User.connection.add_column_family(cf_def) Now that we have the ColumnFamilies, I want to have syntax like this to define the relationships on the User model: list :followers, :User list :following, :User This should provide the following API: #followers - returns an array of users as specified from the Followers ColumnFamily #followers
In the Jots (like tweets) in JotRod, I needed to generate a hash on creation as the key for the Jots. So, I determined that the easiest way to do that was to include ActiveModel Callbacks. The module is pretty simple to add to your classes. Here's a demo of how to add it to Sandra. Sandra's repository JotRod's repository Download 223 MB Download (iPod & iPhone) 37 MB Take the 2011 Readers Survey
Here's an introduction to creating a Rails connector gem for an ORM with a model generator. Download 352.3 MB Download (iPod & iPhone) 84.7 MB Take the 2011 Readers Survey
When I started playing with Cassandra, I wound up writing part of an ORM to get what I needed from it. I want to build actual projects with Rails, Ruby, or other technologies for my videos rather than just narrowly demonstrate a piece of technology. So, I'm bringing you up to speed with Sandra so that as I continue with the Twitter Clone, you'll know what I'm using and why I'm adding things to it. Sandra is available on Github at https://github.com/charlesmaxwood/sandra Download 531.0 MB Download (iPod & iPhone) 111.8 MB Take the 2011 Readers Survey
I’m working on another Cassandra demo, but didn’t have time to finish, so I decided to show you Ruby Koans. It’s a very interesting test-driven approach to learning Ruby. I hope you enjoy it. Download 52.5 MB Download (iPod & iPhone) 31.1 MB Take the 2011 Readers Survey
You can get cassandra at cassandra.apache.org and the ruby gem by running: gem install cassandra I did run into a problem with the trift_client gem when installing. If you get a Load Error, run this. sudo chmod 644 /usr/local/lib/ruby/gems/1.8/gems/thrift_client-0.6.3/lib/thrift_client/*.rb sudo chmod 755 /usr/local/lib/ruby/gems/1.8/gems/thrift_client-0.6.3/lib/thrift_client/connection Here are some of the Cassandra commands from the video: #connects to the cassandra server using the Twitter keyspace store = Cassandra.new(“Twitter”) # create a new column family in the Twitter keyspace called Users cf_def = CassandraThrift::CfDef.new(:keyspace => “Twitter”, :name => “Users”) store.add_column_family(cf_def) # add or create a row to the column family store.insert(“Users”, “cmaxw”, {“name” => “Charles Max Wood”, “description” => “Awesome coder”}) # remove a column from a row store.remove(“Users”, “cmaxw”, “description”) Download 17.2 MB Download (iPod & iPhone) 20.9 MB Take the 2011 Readers Survey
With the recent release of the Google Plus beta (ask me for an invite if you want one), I felt it appropriate to show a simple way to create a Like or +1 button for your Rails application. The app and concept is pretty simple, so I won't worry about posting the code below. Install: gem 'make_flaggable', :git => 'git://github.com/cavneb/make_flaggable.git' bundle install rails generate make_flaggable rake db:migrate Models: class Article < ActiveRecord::Base make_flaggable :like end class User < ActiveRecord::Base make_flagger end Links: https://github.com/medihack/make_flaggable https://github.com/cavneb/make_flaggable Download 93.4 MB Download (iPod & iPhone) 43.9 MB
Specification Clicking a star rating turns on the stars to the left of the star I clicked. Clicking a star submits the star rating. When I refresh the page, the star ratings should be persistent. We’ll be using Rails’ functions including: form_for hidden_field Rails Helpers We’ll be using jQuery functions including: click each ajax {:id => form_id , :class => "star_rating_form"} do |f| %> form_id + "_stars" %> var set_stars = function(form_id, stars) { for(i=1; i
For a basic deployment recipe, check out Basic Deployment with Capistrano This episode demonstrates how to extend deployment to deploy to stage and production. Overall it’s rather simple. All it entails is creating a new task for each stage you want to deploy to with the settings you need changed. Here’s an example: task :stage do role :web, "stage.teachmetocodeacademy.com" # Your HTTP server, Apache/etc role :app, "stage.teachmetocodeacademy.com" # This may be the same as your `Web` server role :db, "stage.teachmetocodeacademy.com", :primary => true # This is where Rails migrations will run set :deploy_to, '/var/www/stage-teachmetocodeacademy/' set :user, 'deploy' end That will allow you to run `cap stage deploy` to deploy to your staging environment. Download 55.3 MB Download (iPod & iPhone) 35.1 MB
Polymorphic associations are very simple, as are many-to-many associations. When you blend the two, it's not nearly as simple. Since there isn't a working build-in mechanism for many-to-many polymorphic associations. Here's a quick demo of what happens if you try to set up a traditional has_many :through association with a polymorphic association. I also show how to set things up so you can get the associated objects. Download 101.3 MB Download (iPod & iPhone) 45.5 MB
I had several requests in UserVoice to provide a Many to Many tutorial in Rails. This is a demonstration of how to put together a "has and belongs to many" association and a "has many through" association. This is somewhat basic to Ruby on Rails, but important if you need to associate different models. Download 161.3 MB Download iPhone & iPod 97.7 MB
On the Ruby Rogues podcast I mentioned that I had moved away from Cucumber to RSpec and Capybara for my integration tests. Here's a demo on how to do some TDD with RSpec and Capybara. Download 180.6 MB Download iPhone & iPod 109.2 MB
CoffeeScript offers more than nice syntax for setting and managing data and functions. It also offers Classes, Inheritance, access to a 'super' method, Ruby-style string interpolation, easy variable and function bindings, and chained comparisons. Here's the code I showed in the video: class Vehicle constructor: (@name) -> move: (miles) -> console.log @name + " drove " + miles + " miles." class VWBug extends Vehicle move: -> console.log "Cruisin'..." super 100 class Truck extends Vehicle move: -> console.log "Haulin'..." super 50 mater = new Truck "Mater" herbie = new VWBug "Herbie" mater.move() herbie.move() a1c = "7.6" healthy = 7.0 > a1c > 5.0 console.log "A1C within healthy range: #{a1c}" Account = (customer, cart) -> @customer = customer @cart = cart $('.shopping_cart').click (event) => @customer.purchase @cart If you're new to CoffeeScript, make sure you check out the CoffeeScript Cookbook and CoffeeScript Basics. Download 150.3 MB Download (iPod & iPhone) 87.1 MB
Ruby on Rails 3.1 is moving to use Sprockets to compile CoffeeScript into JavaScript and include JQuery in it's JavaScript by default. This is a quick demo of how it all hangs together to manage your JavaScript in Rails 3.1. Download 65.7 MB Download (iPod & iPhone) 41.4 MB
CoffeeScript is now going to be a default installation with Ruby on Rails. So, I installed CoffeeScript and NodeJS and have been playing with it for the last hour or so. Here are the basics you need to know to use CoffeeScript including functions, arrays, hashes (objects), control functions (if, else, unless) and loops. In my opinion it is friendlier than JavaScript and more terse, but I don't feel like it's a huge win over JavaScript. That being said, it is something I'm likely to use in the future. Download 168 MB Download (iPhone & iPod) 87.3 MB
Single Table Inheritance is a great way to handle related models that descend from the same class. The classic example is a Car class with Ford, Chevy, and Honda subclasses. This Ruby on Rails Tutorial provides an example and explains how Rails puts all of the information in the same database table and allows you to query things from both the superclass and subclass. Download 59.5 MB Download (iPod and iPhone) 36.3 MB
In preparing to show off SASS, I found the Compass system, which uses SASS and organizes your stylesheets in a unique way. In this tutorial, I walk you though installing compass, installing the 960 grid system, and organizing your SASS stylesheets in an intelligent way. One note, I couldn't remember the URL for the 960 grid system. It's http://960.gs Download 158.5 MB Download (iPod & iPhone) 97.3 MB
This is a basic demonstration of adding a rake task to Ruby on Rails. Some of the same principles apply to Rake in general. You also see how to call out to the command line and how to convert ERB and HTML to HAML. Download 51.9 MB Download (iPod & iPhone) 30.8 MB
This is a basic implementation of creating bookmarks for our delicious clone using the Rails built in REST. I also found out that you need the haml-rails gem in order to get your views to generate in HAML. Download 255.3 MB Download (iPhone & iPod) 119.2 MB
In this installment in the Delicious Clone, we use CanCan to set some permissions on the Bookmarks Controller. Next week, we'll finish the bookmark creation process and the following, we'll add styling with SASS. Download 133.9 MB Download (iPhone & iPod) 55.9 MB
Run your tests faster with parallel_tests gem using all the cores you have on your computer. Download Download (iPhone & iPod)
This is a quick demonstration of how to switch your Rails 3 application to HAML from ERB.
Because I'm going to be testing in cucumber sections of the site that require a user to be logged in, I decided to get it out of the way. So, in this video, I write a cucumber feature to test login and round it off with a few tests on the devise generated user model to make sure it continues to behave as I expect it to as I update it throughout the process of building this application. Download 191.8 MB Download (iPhone & iPod) 87.2 MB
Here is what I've done to create this application: Use the 'rails new' command to create a rails application Set up the Gemfile Configure the Database Install Cucumber Install Rspec Install Devise Install CanCan Install jQuery Configure Devise Download (HD) 84.2 MB Download (iPod & iPhone) 47.4 MB
This video demonstrates how to build a countdown timer with the setInterval function in Javascript, a text field, and jQuery to update your text field. Download 70.8 MB Download (iPhone & iPod) 40.6 MB
Capistrano has been the most popular way to deploy Ruby and Rails applications for a long time. This video provides a quick demonstration of a basic recipe for deploying a Rails 3 application. I made this video a while ago and I realized that I never posted it. Here is a very basic recipe for deploying with Capistrano. Download 30.1 MB Download (iPhone & iPod) 13.3 MB
I'm trying something new and using the YouTube player. Let me know if you see any differences. In this video, I demonstrate how to create, merge, and delete local and remote branches in Git. Git is a Source Control Management system written by Linus Torvalds for managing development on the Linux operating system. Download (29.3 MB) Download (iPhone & iPod) (16.3 MB)
Twitter just turned off Basic Auth and is forcing application developer to use OAuth. Here is a demonstration of how to add Twitter OAuth to your Ruby on Rails Application. Download 90.9 MB Download (iPod & iPhone) 45.6 MB
Sinatra has a really nice DSL. You can fake the basics of the DSL with some simple Rack middleware created by metaprogramming. If you like the screencasts, please give $5 to help me get to RubyConf Download (64.2 MB) Download iPhone & iPod (35.6 MB)
Rack is the basis for most major web frameworks in Ruby (like Ruby on Rails.) This video gives a basic overview on how it is used and what features make it a powerful component for Ruby Web Frameworks Download 36 MB Download (iPod & iPhone) 25 MB
This is the continuation of the Rails 3 Build a Blog series. This episode includes implementation of the Edit and Destroy methods on the Posts Controller. There are a lot of things left to cover on Rails 3, but this gets you the basics of the MVC framework and how to use Cucumber to build your application using BDD. Download 361.3 MB Download (iPhone/iPod) 79.9 MB
In this screencast, I show you how to generate the api and guides for offline viewing. Download 28MB Download iPhone/iPod 7MB
This video goes over some issues that popped up while upgrading a Rails 3 application to the Release Candidate This video goes over some issues that popped up while upgrading a Rails 3 application to the Release Candidate. Download 131 MB Download (iphone & ipod) 11.7 MB
Quick Ruby Tip: The inject method is useful for aggregating data across a dataset. For example a summation could be done with inject (by aggregating each number into the sum.) Download 49.1 MB Download (iphone & ipod) 7.6 MB
The second part of the tutorial for building a blog with Ruby on Rails version 3. We demonstrate how to set up some basic routes, manage the controller and views, and create a basic form for creating posts. Download 161.4 MB Download (iphone & ipod) 65.8 MB
Every good project needs a good setup. In this episode, I set up a github repo, create a new rails application, hook in Cucumber and Rspec, write a Cucumber feature, and write the code to make it pass. Download 142 MB Download (iphone & ipod) 59 MB
RSpec gives us many powerful tools to make our tests readable. Matchers allow us to provide custom predicates to our should statements that succinctly define the behavior of our code. Download 27 MB Download (iphone & ipod) 14 MB
This is an introduction to Ruby metaprogramming where I cover two different ways to define a method. The idea actually started as a joke, but there are valuable lessons to be learned here. Download 11.2 MB Download (iphone & ipod) 4.9 MB
Shoulda is a framework that sits on top of Test::Unit and adds a ton of nice features like macro's, nested context, and the ability to create custom tests in a block-based DSL. Download 160.2 MB Download (iphone & ipod) 71.9 MB
RSpec provides an extremely concise way of representing simple tests to be called on new instances of a class or on explicitly defined receiver objects. You can do this by using 'subjects' either as defined by the 'describe' or the 'subject' methods. Download 38 MB Download (iphone & ipod) 18.2 MB
Maintainability of your code can be measured in many different ways. Jake Scruggs has combined several of the tools that measure you code into one Ruby Gem: metric_fu. Here's a demonstration. Go check it out! Download 116.1 MB Download (iphone & ipod) 55.8 MB
Ruby uses special characters to define certain data types. If you wish to use these characters in your data types, you need to escape them or use percent functions. Percent functions are much simpler. Download 35.8 MB Download (iphone & ipod) 14.7 MB
Ruby on Rails allows you to nest models within a form. Ryan Bates of Railscasts demonstrated how to set up these forms with JavaScript using the Prototype framework, which ships with Rails. In this episode, Charles Max Wood gives a brief overview of how Ryan's code works, and then refactors the JavaScript to use JQuery. Ryan Bates demonstrated how to build a form with nested attributes in Ruby on Rails with Prototype. This screencast demonstrates how to refactor that form into usage of jQuery. Download 88.4 MB Download (iphone & ipod) 40.7 MB
RVM is a program that allows you to install and manage multiple versions of Ruby and Gems. This setup is ideal for testing your application or gem (library) against multiple versions of Ruby.Also, if you're looking into Rails 3 on Ruby 1.9 this is a great way to try it out. Are you thinking about moving your application to Ruby 1.9? Do you have a gem or plugin you need to test in multiple Ruby versions? RVM is your tool. It allows you to manage and install multiple Ruby versions and the gems installed under each version. Download 118.1 MB Download (iphone & ipod) 49.6 MB
Loading multiple Ruby Gems can result in runtime errors when an incompatible version of a gem dependency is already loaded as a dependency of another gem.Gem bundler can also pre-load and cache gems for faster loading. Having two gems that require different versions of the same dependency can sometimes cause runtime errors. Yehuda Katz and Carl Lerche have created an elegant solution in the Gem Bundler. Download 108.8 MB Download (iphone & ipod) 48.8 MB