August AITP Presentation

Here are the slides to the talk I gave on Wednesday. Enjoy!

Posted by Jason Dew Fri, 08 Aug 2008 18:41:00 GMT


POSSCon Talk

Awesome conference. Met lots of great people and the roundtable and ensuing conversation at the end were the best part. We need more of these kinds of conferences. Here are the slides from my talk: I'm looking forward to next year!

Posted by Jason Dew Thu, 31 Jul 2008 12:25:00 GMT


POSSCon: Palmetto Open Source Software Conference

I'll be speaking at the new South Carolina OSS conference in Columbia, SC on July 30th -- more details at their website. I plan to talk about the open-source technologies that we use at the SC Budget and Control Board -- mostly Ruby on Rails and mySQL. I'm pretty excited about the conference as its the first of its kind here in Columbia. Should be worth coming to check it out -- oh, and did I mention its free to attend? See you guys there!

Posted by Jason Dew Fri, 11 Jul 2008 23:02:00 GMT


Calculating IRR

So I decided to give the latest Ruby Quiz a shot. I created an `Algebra` module to deal with finding the root of a function -- using Newton's method.
module Algebra

  class MaximumIterationsReached < Exception
  end

  class NewtonsMethod

    def self.calculate(function, x)
      x - function.evaluated_at(x) / function.derivative_at(x)
    end

  end

  class NewtonsDifferenceQuotient

    def self.calculate(function, x, delta=0.1)
      (function.evaluated_at(x + delta) - function.evaluated_at(x) ).to_f / delta
    end

  end

  class Function

    attr_accessor :differentiation_method, :root_method, :maximum_iterations, :tolerance

    def initialize(differentiation_method=NewtonsDifferenceQuotient, root_method=NewtonsMethod, &block)
      @definition = block
      @differentiation_method, @root_method = differentiation_method, root_method
      @maximum_iterations = 1000
      @tolerance = 0.0001
    end

    def evaluated_at(x)
      @definition.call(x)
    end

    def derivative_at(x)
      differentiation_method.calculate(self, x)
    end

    def zero(initial_value=0)
      recursive_zero(initial_value, 1)
    end

    private

    def recursive_zero(guess, iteration)
      raise MaximumIterationsReached if iteration >= @maximum_iterations

      better_guess = @root_method.calculate(self, guess)

      if (better_guess - guess).abs <= @tolerance
        better_guess
      else
        recursive_zero(better_guess, iteration + 1)
      end
    end

  end

end
and here is the more specific code to calculate the IRR:
require 'algebra'

class IRR

  def self.calculate(profits)
    begin
      function(profits).zero
    rescue Algebra::MaximumIterationsReached => mir
      nil
    end
  end

  private

  def self.function(profits)
    Algebra::Function.new do |x|
      sumands = Array.new
      profits.each_with_index {|profit, index| sumands << profit.to_f / (1 + x) ** index }
      sumands.inject(0) {|sum, sumand| sum + sumand }
    end
  end

end

puts IRR.calculate([-100, 30, 35, 40, 45])
puts IRR.calculate([-1, 1])
puts IRR.calculate([])

Posted by Jason Dew Mon, 11 Feb 2008 18:25:00 GMT


Ruby and Rails Talk

I gave this talk at the Columbia Linux Users Group meeting last night. Thought I would post it here in case anyone wanted to have a look at it.

Rails Talk

Posted by Jason Dew Fri, 14 Dec 2007 23:29:00 GMT


My new favorite website

I know its geeky, but I love it. Its great practice –

refactormycode.com

The general idea is: people post code that they think could be written better and then other people refactor it and get rated on it. How cool!

Posted by Jason Dew Thu, 08 Nov 2007 02:32:00 GMT


Common Beginnings

Its funny what a hobby can turn into. Listening to Matz at RubyConf 07 made me reminisce about how I got started programming. He was asked "do you consider yourself to be a scientist or an artist?" to which Matz responded: "a hobbyist." Ruby was just a hobby to him, something he found to be fun and fulfilling. Its kind of the same way I made it into full-time web development. Its what I did on the side because I enjoyed it. Now I feel privileged that I have a job where I can do what I love most of the time. Its nice to find commonalities with people that you respect.

Posted by Jason Dew Sat, 03 Nov 2007 01:17:00 GMT