Ghost Opera, Ltd.

Lori Holden, software development, games, technology, and general mischief.

Finding Extrasolar Life

| Comments

Our universe is huge, and by huge I mean that there are trillions of trillions of stars. Our galaxy alone has 300+ billion stars, many of which have their own planets. With numbers like these, the odds of life on existing on another world is pretty insurmountable.

So life is out there somewhere, how does one actually detect the life on another world, and is it even possible?

The Newbie Guide to Getting Started on Common Lisp

| Comments

Getting into the world of Common Lisp programming can be a daunting one, even for the experienced programmer. The language is beautiful and powerful yet has many sharp edges and no real commonly understood starting point.

This guide will likely be a work in progress for a while, but hopefully it will make the task of getting into Common Lisp a less daunting one.

The First Class Lambda in Ruby (or Lack Thereof)

| Comments

Lets start off by taking a look at traditional block passing in ruby.

1
  5.times {|i| puts i}

Looks great right? Go ahead and pass that block off to another method.

Using the block/yield syntax
1
2
3
4
5
6
7
8
9
10
  def first
    yield "Hello!"
  end

  def second
    # first yield...?
    first {|str| yield str}
  end

  second {|str| puts str}

Instead of just passing the original block we are forced to create another block which yields to the original block. Of course, we could make the situation a little better by catching the block by reference.

Using the block/ref syntax
1
2
3
4
  def second(&block)
    first &block
  end
  second {|str| puts str}

This is certainly more DRY and visually pleasing over the first example. Do notice however that Ruby is actually converting our block into a lambda (a Proc object technically) for us now. Even worse is that Ruby handles argument and block syntax somewhat antagonistically.

Antagonistic blocks
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Are we passing a block to our upto method, making a hash, 
# or passing something to our object 5?
1.upto 5 {|i| puts i}

# SyntaxError: (irb):23: syntax error, unexpected '{', expecting $end
# 1.upto 5 {|i| puts i}
#           ^
#    from /Users/lori/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'

# We could solve this with do / end
1.upto 5 do |i|
  puts i
end

# Resort to using parens
1.upto(5) {|i| puts i}

# Or just pass a lambda by reference
1.upto 5, &->(i) {puts i}

A first class lambda would gain us the ability to pass it around, manipulate it, use it as a function / method, and treat it like any other object. Unfortunately this is not entirely the case with Ruby. We have an odd mixture of blocks, lambdas, by reference conversions, and so forth. Having said that, lets see how close we can get to a first class lambda.

A Plea on International Women’s Day

| Comments

I implore you my dear world: let us no longer fail by leaving behind our daughters.

Provide to her the encouragement and strong constitution so that she may become a leader of tomorrow.

Teach to her pioneers such as Ada Lovelace, Eva Ekeblad, Elizabeth Blackwell, Marie Curie, and Rita Levi-Montalcini; strong minds whom have achieved great things in spite of adversity.

Introduce to her the ideas of engineering, software development, chemistry, math, astronomy, and physics so that her mind can soar with the possibilities that the world has to offer her.

Enable in our daughters the tools of courage, will, and determination so that she may achieve her dreams.

Fight for IPv6!

| Comments

"World IPv6 Launch" The Internet that we all use every day has run out of IP addresses. We have a solution to this called IPv6; It’s been around forever and just lacks serious adoption. Companies are waiting for consumer demand before putting money and time into investing into IPv6 solutions. Consumers do not know they want it so producers don’t have the drive to provide it. Worse is that most people have no idea what it means for IPv4 to be out of addresses or why they should even have an interest in IPv6. This lack of adoption is doing a lot of damage to the viability of the Internet as we know it.

SOPA and PIPA were big issues that people could understand. Allowing governments to censor information would change the very nature of the Internet as we know it. But there is a hidden threat; our lack of adoption in IPv6 is harming the very functionality of the Internet.

Welcome to the New Site!

| Comments

This is a short post, but I just wanted to welcome everyone to my new site. I’ll attempt to migrate some of my old posts over to the new blog system as time permits.

Are We Alone?

| Comments

Between all the stars of all the galaxies in the universe, the odds of there being other life besides us is amazingly huge. So high in fact, that the odds are likely greater then your having been born.

Not a technical source, but I liked the quote:

All of my ancestors (and yours) survived long enough to procreate against considerable odds – in a long, long line going back to a single [celled] organism. And, of course, each of my ancestors (and yours) which produced millions of sperm or hundreds or thousands of eggs were the focal point of a genetic jackpot in themselves.

The problem to keep in mind with SETI is that the time-frame for advanced life on a planet is amazingly small compared to the life-span of planets, star systems, galaxies, and the universe. Even worse - the further away we look, the older the source for any indication of life will be.

Merb Is Rails 3.0

| Comments

You can read the warm welcome from the Rails community on the Ruby On Rails website. The official announcement:

It’s christmas, baby, and do we have a present for you. We’re ending the bickering between Merb and Rails with a this bombshell: Merb is being merged into Rails 3!

We all realized that working together for a common good would be much more productive than duplicating things on each side of the fence. Merb and Rails already share so much in terms of design and sensibility that joining forces seemed like the obvious way to go. All we needed was to sit down for a chat and hash it out, so we did just that.

What this will mean in practice is that the Merb team is putting their efforts into bringing all of the key Merb ideas into Rails 3. Yehuda Katz will outright join the Rails core team, Matt Aimonetti will work on a new evangelism team, and Carl Lerche and Daniel Neighman (hassox) will be co-starring the effort to bring all this over. We’ve immortalized the merge with plaque page at rubyonrails.org/merb.

MerbCamp 2008

| Comments

This year I will be giving a presentation at MerbCamp in San Deigo on using Sequel with Merb. I can’t wait to meet everyone, and I’m looking forward to this conference!

Some time after the conference, I will be posting my slideshow online for everyone to see. As a side note, I wrote a small presentation tool to build my slides in.

Once Merb 1.0 is released, I will also be posting the source for my blog.

See you at the conference!