How to react to conference criticism

March 6, 2014

During RubyKaigi 2013, Peter Evjan criticised the audience of a talk for applauding a sexist talk slide. You can read what he wrote at RubyKaigi 2013 – great conference, but I probably wouldn’t go next year if I was a woman.

I didn’t enjoy the criticism one bit. It hurt. I really love RubyKaigi, and the majority of English-language tweets were now about this incident. I also worried what non-Japanese people would think about the Japanese Ruby community.

While I may have disagreed with what he said, there was one thing I did not do:

I did not criticise him for saying what he did.

To the best of my recollection, no other RubyKaigi attendees did, either. Random internet trolls who hadn’t attended RubyKaigi did, though, in a very abusive manner.

Why didn’t I criticise his decision to speak out? Because he was genuine in his opinions, and it’s a topic that many people don’t want to talk about.

To the credit of the Japanese Ruby community, they discussed what he said, with one person even translating an outline of the blog post into Japanese. In addition, Kakutani Shintaro gave on the RubyKaigi blog a genuine apology, with no ifs, ands, or buts: We apologize.

How the anti-harassment policy helped at Rubyconf AU

February 27, 2014

At Rubyconf Australia 2014, I attended one of the workshops. For the workshop, the presenter was planning on using Lena.jpg, a picture derived from Playboy. For more information on the image, see the Geek Feminism Wiki article Lena Söderberg’s photograph. Because of the anti-harassment policy, I was able to stop that from happening.

How did the policy help? It meant that the image was clearly not allowed in the workshop. To quote the policy:

Sexual language and imagery is not appropriate for any conference venue, including talks.

As the Geek Feminism Wiki notes, even though the image is not explicit, it is sexualised. Since the image was clearly not allowed, I knew that telling the presenter not to use it would be a quick and easy process. No long drawn-out arguments. If he decided not to change the content, then I’d notify the organisers, and he’d be shown the door if need be. This gave me the confidence to tell him not to use it.

Thankfully, dealing with the image was quick and easy. There was a very short discussion, and we agreed not to use the image.

One troubling aspect was that he said during the discussion that he hadn’t read the anti-harassment policy. If true, this is a failing not only on the presenter’s part, but on the conference as well.

I didn’t discuss the incident on the day with the conference organisers, as it had been resolved promptly, and I wasn’t worried about further behaviour later in the conference. However, I mentioned the incident to a conference organiser during the party after the last day, and to all organisers in an email giving feedback on a variety of topics about the conference two days after the conference.

The organisers have announced that they will be more active about the code of conduct in future conferences. I hope this will improve things.

RubyConf Australia

October 12, 2013

RubyConf Australia 2014

RubyConf Australia 2014 will be Australia’s second Ruby conference. It will be held in Sydney in Luna Park, an amusement park. The workshops will be on February 19, and the talks will be on February 20 and 21.

About Australia

Australia has an active Ruby community, because many programmers are able to use Ruby on Rails at work. We have Ruby meetup groups in many cities in Australia.

We also hold an event every six months called “Rails Camp”. Rubyists from all around Australia go to a retreat. We have no internet access, just a wi-fi network. We do hacking, and give talks, and play games such as werewolf (Japanese link: 汝は人狼なりや?). And we drink! At the end of Rails Camp, there is a session where many people give lightning talks on what they worked on at the camp, no matter how beginner or advanced the project is. The first one was held in June 2007, and the fourteenth Rails Camp will be held in November.

Australia has an international-minded Ruby community. Many people in the Australian Ruby community are from overseas, and some Australians have moved overseas for work. We also attend overseas conferences, including Red Dot Ruby Conf and RubyKaigi. I’ve been to RubyKaigi  2011, Sapporo RubyKaigi, RubyKaigi 2013, and plan to go to RubyConf Taiwan next year.

Australia is regarded as a slightly expensive destination, but it’s possible to reduce your expenses by choosing less expensive accommodation and restaurants.

Workshops

RubyConf Australia 2013’s workshops were on the day before the talks, and the same will happen in 2014. There were five different workshops available. “Advanced Ruby” by Dave Thomas, “Code Retreat” by Corey Haines, “JRuby” by Hiro Asari and Charles Nutter, “Rails4iOS” by Lori M Olson and Tim Breitkreutz, and “Rails Girls” by Robert Postill, Kai Lemmetty, and Susan Jones. I attended the JRuby one, and found it an excellent experience. Charles and Hiro were really helpful, and I learnt a lot.

Keynote talks

There were four keynote talks given in 2013. The first was by Corey Haines, the co-founder of Code Retreat. He promoted the idea of #EmuMarch, in which you *emu*late someone you admire during the month of *March*. (His slides also had pictures of emus in them) At the end of the first day of talks, the internationally famous Aaron “Tenderlove” Patterson gave an amusing but useful keynote.

For the start of the second day of talks, the keynote was given by Australian Rubyist Mikel Lindsaar. He talked about how Ruby and Rails can and will succeed in the future and your right as an employee to deliver value. Before attending this talk, I wondered “If Ruby makes programmers happy, what language makes bosses happy?”. Because of that talk, I realized that Ruby is the language that makes bosses happy.

The closing keynote was “The Ruby Language”, by Dave Thomas. I learnt from the talk that the Himba people in Namibia have a completely different way of describing colours than English-speakers or Japanese-speakers have. Because they describe colours in a different way, they can distinguish colours that look identical to me, but can’t distinguish colours that appear completely different to me.

Other talks

The talks in 2013 were diverse and enlightening. They were given by both international and local speakers. Some of the most esoteric talks were “Sinatra in SIX lines – How to do crazy stuff with Ruby” by Konstantin Haase, and “Hacking with Gems” by Benjamin Smith, which talked about security exploits that can be put into Ruby gems. Meanwhile, Carina C. Zona’s talk “Schemas for the Real World” made us question what assumptions are made by social networking sites about people’s identities.

Less esoteric, but equally enlightening, talks were given about topics such as immutability, concurrency, and performance.

Social Activities and Touring

Social activities were held on the night after the workshop, and on each of the nights of the conference. However, on one of the nights I chose instead to have dinner with a few attendees at one of the many ethnic restaurants available near the venue.

On the day after the conference, I happened to spot a Rubyist showing other Rubyists around the city. I joined the group, and we saw various sights.

__goto__ :rubyconf_au_2014

“Egg” (pre early-bird) tickets are available until October 28. Other tickets will be available afterwards, but with less of a discount. Scholarships to attend the event are also available.

The Call For Proposals is open until October 31. Proposals will be made by Github pull requests, which was inspired by Sapporo RubyKaigi.

The official site is http://www.rubyconf.org.au/ . For updates, follow us on twitter at @rubyconf_au, or subscribe to our mailing list.

To find out more about 2013’s conference, watch the videos on Vimeo, check out Eventifier, or visit the Lanyrd site for 2013.

We hope to see you there!

MRI: boring, but reliable

July 8, 2013

A year ago, I filed a bug report for JRuby. Unfortunately, the bug is still alive and well today. Its name is JRuby 6763.

I am interested in the idea of Ruby having alternative implementations. Such alternatives have their own advantages, and create their own opportunities, such as bringing Ruby into a Java only shop.

I also like the JRuby team. I’ve met Charles Nutter and Hiro Asari in Australia and Japan, and I like them. Not to mention Yoko Harada, and other people I’ve met who I either forgot their names, or forgot they were JRuby people. JRuby people have also contributed to MRI, which is wonderful news for a world where too many unnecessary divides exist. In addition, the JRuby team fixed a performance issue that I encountered (JRuby 6766).

But my experience with MRI, compared to that of JRuby and other implementations, is that MRI has never produced false information, whereas the alternatives have.

What I mean by this is that I’ve found bugs in MRI that causes it to crash. But I’ve never written a program that successfully executed, but gave me incorrect output. By contrast, both of the major alternatives have done so.

In fairness to the other implementations, some of the Ruby code that I’ve had issues with has been fairly obscure and esoteric. I was the one who complained that Rubinius didn’t implement the flip flop operator. And JRuby 6763 is about trouble when I use a method named … “method”. 

I don’t know why MRI has been more reliable for me. It could be a different culture in the MRI team compared to JRuby or Rubinius. It could be that MRI has more staff and volunteers. Or merely that MRI has more users, which mean bugs are detected earlier.

No doubt, some people have code that works fine on alternative implementations, but has trouble on MRI. I can only talk about what I know.

As to why I haven’t fixed 6763 myself? With regards to fixing it in work hours, the problem is that I’m a bioinformatician, not a programmer. I wouldn’t be able to justify learning Java during work hours to be able to fix this problem. And with regards to spare time, I spend too much of my time staring at a computer screen as it is, and becoming a JRuby patch submitter would make it worse.

Do I feel “entitled” to a bug fix? No I don’t. The only thing I’m entitled to do is write a blog post expressing what I think.

Would I use JRuby if this bug were fixed? Not in production. The first thing I’d do if this bug were fixed would be to run the unit tests failing because of 6763, and try to find another bug or three to complain about! I might also use JRuby to profile my application for CPU usage or object creation.

Do I think the JRuby team doesn’t pay enough attention to bugs? I wouldn’t assume that. This is just speculation, but I assume the core team decided their time is best spent on major tasks that improve JRuby, and that bug fixes that don’t affect many people and are trivial to fix are best handled by casual committers.

Unfortunately, I don’t have the answers for what can be done. Is it more users trying out alternative implementations? More paid staff? Or something else? I don’t know.

include(:english)

December 28, 2012

Brian Ford wants discussion about Ruby to be in English.

I also want Japanese programmers to use English more often.

Some Japanese programmers said to me that they can’t attend overseas conferences, because their English is not good enough. That made me very sad.

Many programmers still make bug reports in Japanese.

Some Japanese programmers are trying to improve their English. At Sapporo RubyKaigi, many programmers attended try(:english). At Minami.rb, there are sessions to study English.

I think some Japanese people want to use English, but are unable to. Do you need help?

Can non-Japanese Ruby programmers help Japanese Ruby programmers use English?

Japan.binders.full?(&:women) => true

November 26, 2012

(For Japanese readers: Not familiar with “Binders full of women?” Click here)

Once upon a time, I wondered if it was inevitable that programmers were predominantly male. Visiting another country disabused me of that notion. Surprisingly enough to me, that country was Japan.

Before visiting Japan for RubyKaigi 2011, I had the perception that while Japan was a technologically advanced country, it still remained socially very conservative, and that sexism existed to a much larger extent than in western countries such as Australia, the UK and the US.

In defiance of my expectations, I found that there were many women speaking at RubyKaigi, and also involved in the organization of the event. When I dropped in on ordinary meetup groups during subsequent visits to Japan, such as Ruby Sapporo and Minami.rb, I also noticed a high proportion of female attendees.

How could I explain this?

One possibility is that my perceptions of Japan were wrong. That would be interesting in and of itself.

But there’s an even more interesting possibility. What if sexism existed in the general Japanese community, but the Japanese Ruby community decided to behave differently? That we can decide what our community is like?

I have found the Japanese Rubyist community to be diverse in other ways as well.

I’ve found the Japanese Ruby community to be diverse in what programming languages they know. For example, when I showed off the [“1”, “2”, “3”].map(&method(:Integer)) trick to a Ruby meetup group, one of the attendees remarked that there’s something like that in Haskell.

In one way, this diversity is forced upon them – many of them don’t use Ruby in their day jobs. Instead, they use Ruby in their spare time. But I doubt that they’re using Haskell in their day jobs, either.

The Japanese Ruby community is making a strong effort to interact with western countries conference-wise. Virtually every piece of information about international RubyKaigis is posted in English as well as in Japanese. Talks at RubyKaigis are translated live from Japanese into English, and vice versa.

In RubyKaigi 2011, attendees were given conversation sheets, with a list of phrases they could say in English and Japanese. There were also anti-bocchi boards, which organized lunch between strangers. I took advantage of this to have lunch with Japanese Rubyists, and was often the last to finish lunch because I was talking so much with them.

At Sapporo RubyKaigi, the organizers accepted my proposal, which was about the Japanese language. The aim of that talk was to encourage other people to learn Japanese. In the same session as my talk was Yoko Harada’s talk “Why Don’t You Go To Conferences In US?” Harada also organized try(:english), an event where Japanese Rubyists practiced English with native speakers.

To be honest, there have been challenges. Some Rubyists I’ve talked to say that they’d like to come to Australia, but that it’s too expensive. Others have laughed when I suggested that they come to RubyConf Australia – not at me, but at themselves, because they feel that their English is too bad (a lot better than my Japanese, let me tell you!).

One regret I have is that not many Japanese Rubyists go to nearby asian countries, and not many people from Japan’s neighbours come to RubyKaigi.

I’m thinking TJRCINSWAN: The Japanese Ruby Community Is Nice, So We Are Nice!

In Ruby, &method passes you!

October 3, 2011

Most Rubyists would know what the following does.

[1, 2, 3].map(&:to_s)

It takes the array of numbers, calls to_s on each item, and returns an array of the return values.

But what if you want to do the opposite? Rather than calling a method on the object, what if you want to call a method with the object as a parameter? Simple!

["1", "2", "3"].map(&method(:Integer))

Wait … what?

I’m sure you all understand how it works, because you already use map(&:to_s), and none of you would use something you don’t understand, right?

Who am I kidding?

I’ll explain how map(&:method_name) works, and then how map(&method(:method_name)) works.

When you use & (ampersand) in front of the last variable in a method call, you’re saying that what’s passed in shouldn’t be treated as an object, but treated like a piece of code – a proc.

Symbols aren’t procs, but they can be converted into them by Ruby. You can see for yourself by running to_proc and call on it with the following:
# my_proc will be something like #<Proc:0x00000001014c39c8@(irb):35>
my_proc = :reverse.to_proc
# This causes "abc".reverse to be called, which returns "cba"
my_proc.call("abc")

As Ruby calls `to_proc` if an ampersand parameter isn’t a proc, the following

def call_me_three_times(parameter_1)
  puts((yield parameter_1).inspect)
  puts((yield parameter_1).inspect)
  puts((yield parameter_1).inspect)
end

call_me_three_times("abc", &:reverse)

will print the string reversed three times.

Now that the & part is understood, let’s look at the method part.

When you call method(:method_name), you get back an object of class Method that represents the method.
# Integer(string) is a method kind of like String#to_i, but 100% more awesome.
# Look it up if you haven't done so already.
# PS: don't worry about it starting with a capital letter!
# another_proc will look like #<Method: Object(Kernel)#Integer>
another_proc = method(:Integer)
another_proc.call("42") # Returns 42

and as `Method#to_proc` exists, the `call_me_three_times` method will convert the method object into a proc and will run it without any complaints.

When you run `call_me_three_times("42", &another_proc)`, it’ll print 42 (not “42”) three times.

But wait … there’s more!

The method doesn’t even have to be from your own object – it can be something else’s. For example, if you wanted to read in a series of files, you could do

filenames = ["a.txt", "b.txt", "c.txt"]
texts = filenames.map(&File.method(:read))

File.method(:read) turns the read singleton method of the File class into an object, and then (with the help of Method#to_proc) that object gets passed to map as something that should be executed on each filename.

Downsides

Firstly, you may need to document what &method does. I’ve been programming in Ruby for over three years, and hadn’t come across this trick until I noticed it on Stack Overflow. However, it is mentioned in the Pickaxe, now that I looked it up.

Second, there may be performance penalties for this approach. If hardly anybody has used this approach, it’s unlikely to have been optimized.

Third, making code shorter isn’t always a good thing. It may make smelly code seem less smelly. If you’re doing twenty different things on one line, the answer isn’t to cram things up to make the line shorter, but to refactor that line into something more logical.

Fourth, I haven’t worked out how to abuse this trick fully. Under Ruby 1.9, if foo takes two arguments, I don’t know how to do [["a", "b"], ["c", "d"]].map(&method(:foo)) yet. That code works under 1.8, however.

(Apologies for the awful appearance of the code – I haven’t worked out how to make wordpress use Github gists without adding a plugin)

RubyKaigi 2011, the Small Eigen Collider, and Bear Impact

September 18, 2011

RubyKaigi 2011 was really great. My talk was well received, the other talks were great, the atmosphere of RubyKaigi was wonderful, and I had a lovely time in Japan.

Makoto Inoue translated my talk from English into Japanese. On the day, my talk on the Small Eigen Collider was well-attended, and people asked questions, aided possibly by my offering t-shirts! People tweeted and IRC’d about my talk. Some of them even did so in a language I can read!

The talks

I really enjoyed the talks at RubyKaigi. Some were about implementations of Ruby, such as JRuby and MacRuby. Others were about upcoming features of Ruby, such as method shelters, or running tests in parallel. Eric Hodel gave advice on how to write good libraries, while other talks were about the community, such as Shota Fukumori’s talk on school students doing Ruby. There were also talks on concurrency, such as Elise Huard’s “Actors on stage”.

One talk I’ll remember after everything else is forgotten is the parse.y Famtour. By editing one file, he could redefine the Ruby language. He implemented fuzzy logic, possibly doing an action, but maybe not, based on a boolean. He also created a flexible keyword for de-indenting several layers at once. De-indent two levels? ennnd! Three levels? ennnnnd! Five levels? ennnnnnnnnd! This is what I want in a talk – something completely new and unknown!

This isn’t a very complete write-up of the talks, but I’m hoping that subtitles will be done of the talks so I can watch them again.

RubyKaigi itself

The social experience at RubyKaigi was wonderful and unique. You could create an origami Ruby. For the lightning talks, time running out wasn’t indicated by an iPhone app, but by a lady in traditional clothing gonging you.

For lunch, there was an anti-bocchi board, where you could organize to have lunch with other Rubyists. Some Australia-jin (Aussies) tended to have lunch with other Australia-jin, but I wanted to have lunch with Nihon-jin (Japanese). I was always the last one to finish lunch because I was talking so much. That, and because I’m bad at chopsticks – part way through the meal I’d ask foku o kudasai (fork please)!

The goodies I received were very useful. The fan and sweatband were appreciated considering that RubyKaigi was held during summer and that air conditioning was reduced because of of 3/11-related electricity shortages.

The situation with regards to language varied from talk to talk. Some people talked purely in English, some talked in Japanese but had English slides, while with others you had to rely on live translations. These translations appeared on a screen adjacent to the presentation screen and in IRC.

Sometimes the live translations were excellent, and sometimes they were frustrating. To be honest though, the main time language was an issue was when the subject matter was fairly technical, and I was wanting an excuse to ignore the talk and see what’s going on in twitter, such as RubyKaigi trending for the whole of Japan. Occasionally, there was a bit of Engrish – the most notable was “crap your hands”, which they joked about afterwards.

With regards to translating English talks into Japanese, I was one of the few people who took advantage of RubyKaigi’s offer to do so. To not do so is a missed opportunity!

Books were available for sale. I bought a Japanese book on bioinformatics with Ruby which transliterates as “Ruby de hajimeru baioinfomatikusu”, and means something like “beginning Bioinformatics with Ruby”. One day I’ll be able to understand it, but so far I’ve used it as practice for reading kana (Japanese characters that represent syllables). Neither that book, nor any other book on Ruby and bioinformatics, exist in English to my knowledge.

Events were held before and after RubyKaigi. Before the event was JRubyKaigi. At that event, I was talking with someone about the Ikebukuro Earthquake Museum and its simulations, and the next minute, a real earthquake occurred. One person noted “Demos are always experimental and dangerous!”.

After RubyKaigi was Asakusa.rb, and a Github drinkup. I met with Matz during the drinkup, and I talked with him about the fate of the flip-flop operator in a hundred years’ time. Apparently, it may not exist then. I also went around Tokyo with two Rubyists who were from outside of Tokyo (Cuzic and one other person).

Japan

Manhole from Karuizawa

Even the manholes are beautiful (Karuizawa photo)

I visited a variety of places before and after RubyKaigi. The first place I visited was the Ikebukuro Earthquake Museum. It took me a while to find the place, even with my iPhone, because all I could find was the fire department, and I was too shy to ask them for directions for a tourist. It wasn’t until I saw a sign to the museum inside that I realized that the museum was within the fire department!

The museum was very much practical rather than historical. It had an earthquake simulation, where you started off sitting at a table, and when the earthquake started, you had to duck underneath the shelter of the table. To make it a bit scarier, the lights went out a few seconds in, and you could hear a kettle falling to the ground. The next activity was navigating through a smoke-filled series of rooms. You had to remember to be half-crouching, and cover your mouth with a handkerchief. The following activity was CPR. Of course, the Japanese I said to my mannekin wasn’t that good – I said “genki desu?” when others were asking their dummies something slightly more serious to ask if it was ok. At least it didn’t say “mo-ichi do?” back to me! The final activity involved putting out a fire. I only got to use a fire extinguisher, while others got to use a fire hose!

Some of the information was only in Japanese, but the museum staff were very helpful to me, for example checking that I understood what was going to happen in the smoke-filled rooms exercise. They asked me afterwards why I came, and I explained that I was a scientist. Maybe I’m a little bit odd like that. To be honest though, the museum had the advantage of being close to the Ryokan (Japanese-style hotel) I was staying at, such that I didn’t need to take a train.

I visited the Tokyo National Museum . It had a variety of different artefacts, including pottery, calligraphy, weapons, armour, but the thing that I remember the most was the lacquer-work. The amount of work put into a single box made me feel sad. Was it worth the effort?

While I was with the two out-of-town Rubyists, we visited a maid bar in Akihabura, and browsed a few stores there. We saw the palace gardens, and then we visited Tokyo Tower. It described what there is in Tokyo, and had a exhibit where you could look at a map of Tokyo in earlier times compared to now. There was also a gift store where I bought a pair of tea cups. We then went on to Asakusa.rb.

The next day, I wanted to visit somewhere nice outside of Tokyo, and ended up choosing Karuizawa. It is a resort town, and is a bit cooler than Tokyo because of its elevation. It’s also the only town that’s hosted both Summer and Winter Olympic events: it hosted the equestrian events for the 1964 Tokyo games, and curling for the 1998 Nagano games. I saw a famous waterfall called Shiraito Waterfalls (literally “white strings”), and went shopping, buying some sweets for my Japanese class, and a hand-made doll of a cat wearing a kimono.

Travelling by shinkansen was very nice – you don’t have to book a specific time if you don’t want to, and there’s no security screening, but it has the cool things about flying. You can order food, and there’s a shopping catalogue of all things weird and wonderful. My favourite is a device that allows you to set up a desk from the steering wheel of your car. I’m glad I wasn’t driving while in Japan! According to my iPhone, the shinkansen was clocking speeds of 230 kilometres per hour!

The flight to and from Japan on JAL was also very nice. On my flight from Sydney to Tokyo, they upgraded me to an emergency row for free, and the hostesses were very friendly. I loved the anime demonstration of flight safety, and thought it was more informative than standard demonstrations as well. The meal on the flight to Tokyo had an Australian element to them – they had tim tams as a sweet, and meat pie for afternoon tea. However, I have one pro-tip: if you’re 6 foot 4 inches, and you’re wanting to sleep during your flight back home, don’t book a standard seat on lilliput-jin airlines!

Message saying a train's late due to Bear Impact

Earthquakes cannot stop Japanese trains. All it can do is delay it for a while.

Public transportation in Tokyo was good – information was available in English. The biggest challenge was just logistics, not language: make sure you use the right exit from the station, as the stations are massive, and that you don’t choose a train that goes past your station! While you’re in trains, you can read about reasons for delays with other trains. They were pretty good reasons – one delay was because of an earthquake, while another was due to “bear impact”! I wish Sydney’s Cityrail was that reliable!

Having studied Japanese for 6 months this year, language wasn’t that big a issue. It was a barrier only three times. The first was at a love hotel. I wasn’t able to understand what the receptionist was saying, apart from not being able to get a room. Maybe it’s mandatory that you’re undergoing an illicit affair with someone, whereas I was just a dumb solo tourist that had got locked out of my Ryokan. I’ll never find out. The second was at Mister Donut. I had asked for an interesting-looking drink, but the cashier gave me instructions that I couldn’t understand, so I had to order koka kola kulashikku instead. The third, ironically enough, was with Google transit. I couldn’t work out how to display Romaji names for the train stations or train lines, so I had to rely on the suburb names near the train stations, which were in Romaji. Unfortunately, my Japanese was fairly basic, and I didn’t learn much new Japanese while I was there. Next time I’m there I’ll be good at the language, I hope!

Ennnnnnnnnd!

Zombie chaser – it’s alive!

April 12, 2010

Zombie-chaser is a graphic(al) user interface to mutation testing. Mutation testing involves making modifications to code, and seeing if the unit tests detect these changes and indicate a failure. In the zombie-chaser gooey metaphor, mutated code is represented by zombies. Each successful test is represented as the zombies getting one step closer to you, and a failed unit test kills off the zombie. If you fail to kill the zombie, it gets to eat your brains.

There are two alternatives for the interface. One is a GUI, while the other is a nethack-style interface within the console itself. Like the chaser project, zombie-chaser aims to be compatible with any flavor of ruby on any platform. If it isn’t – if it’s lukewarm on JRuby, if it’s rusty on IronRuby, or if it’s having kittens on LOLRuby, and it’s possible for me to fix it, let me know!

This program incorporates code from chaser and heckle, written by Ryan Davis and Kevin Clark, and code from brains, a game written by Chris Lloyd, Dave Newman, Carl Woodward & Daniel Bogan. The idea of ripping out brains code and producing something different was inspired in part by Zombino, written by Ryan Bigg, and psDooM helped inspire the idea of melding work with a game interface.


Declare War on Everything with Chaser

November 8, 2009

Chaser is a new lightweight mutation tester. Mutation testing involves messing up code that’s being tested, and seeing if the unit tests notice anything’s wrong.

Fake APEC passes by the Chaser

You need to detect when something's wrong

The name is based on The Chaser, an Australian comedy team. They’re best known internationally for a penetration test gone horribly, horribly right.

The main ruby gem that does mutation testing right now is Heckle. The folks from Seattle.rb have done a lot of work on it, but sometimes you’re simply out of luck. It doesn’t work on certain platforms – Windows (correction below), Ruby 1.9 and the like – because it currently relies on ParseTree. One day, I decided that I wanted to be able to do mutation testing on Windows. Like, yesterday. And thus Chaser was born.

Chaser uses plain old metaprogramming. If you’ve got ruby, and you’ve got test/unit, then you satisfy the requirements for chaser. So far, I’ve played with it on Windows, 1.9 and JRuby.

Bug reports, feedback, new features, and fake beards are welcome.

Correction 2009-12-17: Apparently, it is possible to make Heckle work on Windows, if you have a suitable compiler and make a minor change to Heckle’s code.

Extra links: Slideshare notes, and a video presentation thanks to the awesome folk at Ruby On Rails Oceania.