Archive for the ‘Software Engineering’ Category

CodePlex is dead; long live my repositories

I own 2 fairly large projects on CodePlex but having just heard the news that CodePlex is shutting down, I’ve moved them all over to GitHub.

I was planning on keeping all my Windows-based projects on CodePlex and everything else in my GitHub repositories. But I will now hoard everything into one place. The project with the biggest following is…

Exception Reporter

Exception Reporter is a .NET component (a dialog basically) that you use to show to the end-user when an unexpected exception throws up.

The component gathers information on the exception you give it (eg stack trace/message) and also fetches system information from Windows (memory usage/cpu etc) – all resulting in a formatted email to the developer for diagnosis.

There were about 95 followers on this project at CodePlex so it’s a little sad to see it start from scratch. It’s also published as a NuGet package.

I had some help from Simon Cropp on this one – and I accidentally replaced his commits with my email address when I tried to clean up the conversion from CodePlex to GitHub repository – sorry about that.

I haven’t worked on this project much lately and there’s also a WPF version in development in there – but it needs a lot more work before it’s ready.

Since I started using a Mac at home this isn’t easy to find time for (WPF doesn’t work on Mono). Join in if you’re a software engineer!

The other project is…

Cradiator

Cradiator is a WPF app – and designed to fill a monitor that’s on display somewhere in a dev room. It basically monitors a build server (eg CruiseControl or TeamCity) and shows all the projects being built and their current status.

We’ve added a bunch of ways to configure it for great team fun – including showing an image of the build breaker.

It uses Speech Synthesis support on Windows to make announcements eg it can announce a build breakage by saying “Bob, you broke the Production build, please leave the building immediately!”

This was really fun to work on and involved a challenge from a friend about avoiding the use of private methods. So there a lots of small classes and I think it has a fairly decent, accessible design.

It all started from a much simpler project called Big Visible Cruise. I took that code and ran with it and added a lot of features over time with ideas that our dev team had.

I had some help from Ruben Willems on this one too. These open source projects are rarely the work of one person.

One thing I wanted to announce to those who previously followed my Cradiator repo on GitHub… I deleted the original Cradiator GitHub repo, and moved it to CodePlex (as it fell into my Windows-on-CodePlex plan). So now I’ve had to move it back. But by deleting it, I’ve lost the 15 or so original followers. Who by now will be confused.

rubyann – for people too lazy to write Ruby

At last, I’ve written my own jQuery plugin.

My plugin tries to help lazy people (a noble cause) to write Ruby. It’s called rubyann which is short for ruby annotation.

But you have to understand something about Ruby… hardly anyone knows about it – it’s quite obscure.

Ruby is part of XHTML 1.1 – and now part of HTML 5. Ruby characters are small reading aids that are placed on top of characters. They can be useful for any language, but my interest comes from Japanese furigana – here’s what Ruby looks like:

The 1st example uses Ruby to explain a translation and the 2nd uses furigana
ruby example
And yes, that really is a translation – the word “kill” is not needed to say “kill 2 birds with 1 stone” – it’s obvious!

 

To get this seemingly simple annotation you must type XML into your HTML:


<ruby>

<rp>(</rp>
<rt>1</rt>
<rp>)</rp>
</ruby>

And that’s just for the 1st character! Multiply that XML by the number of ruby characters you want… and you’d better have an automated HTML ruby generator or rubyann

rubyann inserts the required ruby XML where it finds markup (I invented), so this:

With rubyann eg: $('.textWithFurigana').rubyann(); becomes this: I’ve written the jQuery plugin in coffeescript and it’s on GitHub – rubyann

Here’s what it looks like in my editor, RubyMine, with the coffeescript plugin

Running CoffeeScript In-Browser

One of the ways to run CoffeeScript (other than processing on the server or using the command line to pre-compile) is to run CoffeeScripts, directly, in-browser.

This simply means that you can write coffeescript inside the HTML document. It has the disadvantage of being near impossible to debug as the running code will be encased in a very large javascript eval statement.

Running CoffeeScript in-browser is therefore not encouraged by the Author of CoffeeScript (jashkenas) – to the extent that he preferred not to include my submission (or pull-request as it is known on GitHub) to improve the documentation for it. This may be reasonable, however I would like to put the documentation here.

To run your coffeescript inline:

  1. Tag your coffeescript with the type “text/coffeescript”
  2. Include coffee-script.js after all coffeescript on the page (this is the compiler that will evaluate and compile all coffeescript in order)
  • The text contents of remote scripts (those referenced via src=””) cannot be accessed from the browser unless they are hosted on the same domain, and are capable of being accessed via an XMLHTTPRequest (which is how the compiler loads it)

And the main improvement to the documentation I wanted to make, an example:

<html>
<head>
<title>In-Browser testtitle>
<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js&#8221;> script>
<script type=”text/coffeescript”>
$
-> $(#header).css background-color, green
script>
<script type=”text/javascript” src=”http://github.com/jashkenas/coffee-script/raw/master/extras/coffee-script.js&#8221;> script>
head>
<body>
<h1 id=”header” style=”color:white”>CoffeeScript is alive!h1>
body>
html>

And the corresponding output: