Installing JRuby in a Windows Environment

Education, Programming No Comments

I just installed JRuby on my Windoze XP box and thought I would share my experience for anyone interested in doing the same. It’s pretty straight forward, unless you know nothing of setting path variables in Windoze.

First, you’ve got to download JRuby (I got it from the jruby codehaus repository) and uncompress it into your choice of location. I grabbed the 1.1.2 binary tarball.

Next, you need to make sure you have a compatible Java runtime environment (JRE) or Java development kit (JDK) installed. If you don’t have one already, you can get these from the Sun Java site. You’ll notice the ‘Popular Downloads’ menu on the right has what you need. I already had this installed for my NetBeans installation.

Now comes the fun part. Make a note of the path to the JRE or JDK directory, as well as the path to your JRuby directory. I chose to install these as follows:

  • JDK: D:\programs\Java\jdk1.6.0_06
  • JRuby: D:\jruby-1.1.2

We’re nearly there! Next, just follow along:

  1. Right click on “My Computer” and select ‘Properties’.
  2. Choose the ‘Advanced’ tab at the top.
  3. Click on the ‘Environment Variables’ button near the bottom.
  4. Click the ‘New’ button under the ‘User variables’ section.
  5. For ‘Variable name’, put JAVA_HOME and for Variable value, put the path to your java install directory. Click the ‘OK’ button.
  6. Again, click on the ‘Environment Variables’ button near the bottom.
  7. For Variable name, put JRUBY_HOME and for Environment variable, put the path to your JRuby install directory. Click the ‘OK’ button.
  8. Select your PATH variable and click on the ‘Edit’ button.
  9. If the ‘Variable value’ field is empty, put your JRuby install directory’s path followed by \bin (mine: D:\jruby-1.1.2\bin)
  10. If the ‘Variable value’ field is not empty, put a semi-colon followed by your JRuby install directory’s path followed by \bin (mine: D:\jruby-1.1.2\bin)
  11. Click on the ‘OK’ button then click on the ‘OK’ button then click on the ‘OK’ button to get out of all this mess. tongueout

Finally, open a command prompt, type ‘jruby -v’ and hit return!

I tried to be as verbose and explicit as I thought possibly necessary in these directions. If I missed something or messed something up, please post to let me know and I will change or add to it right away.

Modulus as Handled by Ruby

Education, Programming No Comments

This is an explanation I gave to a student in class today of how the modulus operator behaves in Ruby. As I was writing the explanation down, it all became quite clear to me. I only had a tentative grasp on this concept until trying to explain it. That’s a good feeling when your helping another to understand something gives you clarity on the subject.

Given (-n % x) or (n % -x), the RHS (right hand side) of the modulus operation must be multiplied by the negative integer closest to 0 that will get it past the number on the LHS (left hand side). Then, the result is the difference between this number and the LHS. e.g.:

-7 % 3   # result is 2
# climbing (positive) from -9 (3 * -3) to -7

7 % -3   # result is -2
# dropping (negative) from 9 (-3 * -3) to 7

Of course, when the polarity is the same on both sides, such as (n % x) or (-n % -x), you just multiply the RHS times the positive integer that gets you the closest to the RHS without going past it then the result is the difference between the remainder and the LHS. e.g.:

7 % 3    # result is 1
# climbing (positive) from 6 (3 * 2) to 7

-7 % -3  # result is -1
# dropping (negative) from -6 (-3 * 2) to -7

It might help to note that in Ruby, the RHS always dictates the polarity of the result.

Mensa Hash Horror Event

Programming, Random Thought, Web Development No Comments

Over at Jeff Atwood’s blog on the Coding Horror site, there is quick mention of a foible at Mensa’s web site. The problem he alludes to, and which many comments point out and discuss at great length, is the lack of security used with the site’s login credentials.

What I find quite humorous is that the Mensa site’s ‘forgotten password’ page appears to be located within the calendar section of the site as an event. Mensa membership is supposedly based upon processing power and not memory, so why make a calendar event out of a member’s lack of memory? :-P

Happy Albert ‘Cerebronaut’ Hawking Brain Fart Day!!!

SyntaxHighlighter

Education, Programming, Web Development No Comments

I finally got a syntax highlighter installed. I figure that since I’m taking the free Ruby course at RubyLearning.org, I should make my code look nice (and be more usable) when I decide to put some here on my blog. Just to get things rolling, here is a bit of code from one of the exercises I’ve done during the first few weeks of the course.

class Dog
  def initialize(name)
    @name = name.capitalize
    @what = self.class.to_s.downcase
    puts "Hi! I'm #{@name}, your new #{@what}!"
  end

  def teach(new_trick)
    @tricks = Array.new unless @tricks
    @tricks += [new_trick]
    puts "#{@name} now knows how to #{new_trick}!"
  end

  def show_tricks
    list_of_tricks = [@tricks[0]]
    1.upto(@tricks.length-1) do |modify|
      list_of_tricks += [" and #{@tricks[modify]}"]
    end
    @name + ' knows how to ' + list_of_tricks.to_s
  end

  def bark
  end

  def eat
  end

  def chase_cat
  end

  def to_s
    @name + " (your #{@what})"
  end

  def capable_of?(capability)
    self.respond_to?(capability) ?
    puts("I can #{capability} or my name's not #{@name}!") :
    @tricks.include?(capability) ?
    puts("I have recently been taught to #{capability}!") :
    puts("This is something I have not heard of before... \
    #{capability} you said?")
  end

  def method_missing(method, *more_arguments)
    "#{@name} cocks it's head to the side as if to say \n\t\
    \"I don't understand what #{method} means.\""
  end
end

# a few examples of usage:
rex = Dog.new 'rex'
max = Dog.new 'Max'
rex.teach 'jump through hoops'
ObjectSpace.each_object(Dog) {|dog| dog.teach('chase cars') }
puts rex.show_tricks
rex.capable_of? 'bark'
rex.capable_of? 'chase cars'
rex.capable_of? 'fetch'
puts "#{max} is feeling a bit left out..."

Sadly, I had misinterpreted the challenge guidelines. The instructor wanted the learned tricks to be methods and not properties. Anyhoot, this post is just so I can see what the highlighter will do on my blog. :-P

RubyLearning.org

Education, Programming, Web Development No Comments

Well, I signed up for a free online Ruby course at rubylearning.org some time last week. Classes start tomorrow and I’m pumped.

I’ve been seeing the popularity of Ruby, decidedly due to the Rails framework, skyrocket in the past few years. It seems that lately, you can hardly go to a web design or web development centric site without seeing a bright red gem or a red locomotive on the home page.

I read somewhere that Ruby is entirely Oo, which really piqued my interest. I’ve been wanting to get my noodle wrapped around OOP for years while dealing with PHP and javascript; not to mention (though I am) my very short lived foray into the seemingly mind-numbing world of C++ that I embarked upon.

Once I realized that Ruby might hold the key to my eternal salvation, I decided not to take my usual tack when trying to learn a programming or scripting language. That process would be best described as: buy a few $50 tomes, crack them open enough to get a feel for the writers’ personalities and then let them sit on my bookshelf while knowing that I am free at any time to pick them up and soak it all in.

CIAProject.com

Designing, Graphics, Personal, Programming, Random Thought, Web Development No Comments

Central Illinois Artists Project is a site I am currently working on for Central Illinois artists. I do so because I am one… hehe. I suppose it will mainly be for original musical artists at first, as that is my primary interest and it seems a lot more feasible in the short term of things to keep it simple. Anyhoot, I just wanted to share that. There’s still a tonne of work to be done on it, but at least it’s coming together now. I’ve been working on this for over a year (in my ‘spare’ time… heh), and I’ve owned the domain for about two. I hope to have at least the artists able to build their own band page within a week. After that, I will let a few of the locals know it’s usable. They should be able to share their concert schedules, pictures, music clips and whatnot.

If my writing seems a bit erratic, I believe it’s because I only got an hour of sleep last night. I’ve been off work for a couple of weeks with a bad back, and the sleep schedule has gone pitooueyyy.