I thought Universities took referencing seriously

I recently decided to take a look at who is using RSS 2 HTML (a site of mine that allows you to take an RSS feed and present it as HTML; it’s great for website creators).

RSS 2 HTML works by giving the website creator a bit of HTML code that embeds the RSS feed into a web page. The end result is that when you visit this person’s website, you see the contents of the RSS feed along with the other content on the page. Additionally, it puts a small link back to the RSS 2 HTML website. This link is the only acknowledgment I receive for the websites that use my service (this includes bandwidth costs that are incurred every time a person visits a page that uses RSS 2 HTML).

When looking through the list of websites that use RSS 2 HTML, I found a highly interesting result:

University of New South Wales – Library – RSS Library Resources

The link following each and every bullet point on that page loads an RSS 2 HTML feed. “Great!”, I thought, “a prestigious university using my tool”. But then I noticed that they had hidden the link back to my site; this means no acknowledgment to me whatsoever! That’s right – UNSW, with total revenue in 2007 of $959 million1, is too cheap to recognise the contribution of my work to their website.

What adds insult to injury is that I used to be a student at UNSW, and I was charged large sums of money for the privilege.

But I’m a nice guy. Even though they don’t acknowledge me, I’ll still provide them with the same fast efficient RSS 2 HTML service – which is perhaps more than they deserve.

1 http://www.unsw.edu.au/news/pad/UNSW_AnnualReport_Financials_2007.pdf

08:45 Sat 2008-07-05 (Index)

Working at Katalyst

Here’s a photo of me taking a well earned rest at work. I really enjoy the relaxed corporate culture here :)

08:39 Sat 2008-06-07 (Index)

Bookmarkelet to automatically fill in forms

UPDATED: Bookmarkelet now fills out password fields and radio buttons.

This bookmarkelet will find all the form fields on a page and fill them with the word “test”. It will also check all checkboxes on the page. This is a great time saver for when you need to work on a form, allowing you to actually do work instead of wasting time typing random text in.

To use, just drag this link:

Fill Form Fields

into your bookmarks or links bar, or copy the JavaScript below and add a new bookmark, then paste the JavaScript as the link for the bookmark.

When you want to fill out a form automatically, just click the link and it will fill out all the forms on the page you’re currently viewing.

Here’s the JavaScript source for those who want it:

javascript:var a=document.getElementsByTagName('input');for(var i=0;i<a.length;i++){if(a[i].type=='text'||a[i].type=='password'){a[i].value="test"}else if(a[i].type=='checkbox'||a[i].type=='radio'){a[i].checked=true}};a = document.getElementsByTagName('textarea');for(var i=0;i<a.length;i++)a[i].value='test';void(0);

15:17 Fri 2008-06-06 (Index)

Update to Henrietta

Some more work has been done on Henrietta – the awesome parts of the gun/skirt by my mother.

Picture from yesterday:

I’ve done a bit more work on it since then, bit it’s awful, so I’ll post a new pic when it’s AWESOME again.

08:40 Sun 2008-05-25 (IndexHenrietta)

Where are all the RSS feeds?

I made myself a little netvibes clone for my own use – mainly because netvibes is very CPU/loadtime heavy, especially when firebug is running. I’ve been trying to find feeds of my most commonly used blogs/sites. Unfortunately, many of the sites don’t offer RSS feeds. Some examples:

This post is not specifically intended to call out these sites, rather to illustrate that RSS feeds don’t have nearly the penetration that I assumed they did. This will really reduce the usefulness of my feed app. I hope more forums etc. include RSS feed outputs by default and that more site owners add RSS feeds to sites.

10:53 Wed 2008-05-21 (Index)

Update: Painting Henrietta

I’ve done some more on Henrietta.

Note: The first coat of some of the painting (mostly the gun) was done by my mum – I’ll be doing more with the second coat. Plus the gun was really hard and would have taken me forever to do on my own.

13:26 Mon 2008-05-19 (IndexHenrietta)

Painting Henrietta

I’m currently painting a desktop background from an anime I’ve been watching called ‘Gunslinger Girl’. This is pretty much my first painting ever, and I’m getting quite a bit of help from my artist mum. This is the original background:

The character depicted is Henrietta, a trained child assassin. To quote the Wikipedia article:

Set in modern-day Italy, Gunslinger Girl follows the exploits of the Social Welfare Agency (often referred to as simply “the Agency”), ostensibly a charitable institution sponsored by the Italian government. While the Agency professes to aid the rehabilitation of the physically injured, it is actually a military organization specializing in counter-intelligence and counter-terrorism. It comprises two independent branches, Public Safety (公安部, kōan-bu) and Special Ops (作戦部, sakusen-bu), with Public Safety being its surveillance and intelligence-gathering arm and Special Ops its anti-terrorist division. Special Ops is itself divided into Sections 1 and 2, the latter of which employs young girls fitted with cybernetic implants as agents. The implants, which consist of synthesized muscles and carbon fiber frames, result in heightened strength and reflexes as well as high resilience to damage and pain. Each girl is paired with a male trainer, or “handler,” and together they are referred to as a fratello (Italian for "brother"). The handler is responsible for the training, welfare and field performance of his charge, and is free to use whatever methods he considers suitable. While these methods vary according to the handler, a common part of each girl’s regimen is brainwashing called “conditioning,” which produces a deadly assassin with unquestioning loyalty to her handler.

Henrietta is one of the girls going through training.

This is is the canvas after some of the drawing was done (the canvas is 30 by 40 inches):

And after some of the painting had been done:

And the painting as it is currently:

It will be a little while before I’m finished, but I can say with some certainty that this will be AWESOME!

For you art nerds out there, this is being done in acrylic first, then I’ll go over it with oil to blend in some of the blurry edges e.g. the muzzle flash. I’ll keep this blog updated with my progress, so check back to see the finished result!

13:50 Sat 2008-05-17 (IndexHenrietta)

Best. Comedy. Ever.

So I went to TCAoTVH (The Chaser’s Age of Terror Variety Hour) this Friday, and it was AWESOME.

We had to rush to get to the theatre (Thebarton theatre), and arrived just before it was due to start, but loads of people were still arriving (the theatre holds over a thousand) so it wasn’t till around 7:30 that it got started – and when it did, it was hilarious. From impressions of Al Gore to Craig Recassaul’s naked ass (long story) I barely stopped laughing. It ended with the Chaser singing to the audience ’You’re the worst audience we’ve ever had’", followed by a resounding ‘GET FUCKED’ by the Chaser team. Then the entire audience stood for the national anthem, ‘Advance Australia Dah’.

I hung around at the end to get some merch:

Anyway, if the Chaser is touring near you, SEE IT! You’ve only got a couple weeks before it’s over, and I’m betting there won’t be many tickets left to buy either.

13:21 Sat 2008-05-17 (Index)

Humanize your numbers!

I’ve created a ruby script that converts numbers into their long english forms e.g. 1233 => one thousand, two hundred and thirty-three. The code is below; to use it, just put the code in a file called numeric_humanize.rb, require 'numeric_humanize' at the top of your files, and call 5466.humanize for the English form. The script converts positive and negative integers and decimal numbers, and has a range between -999,999,999,999,999,999,999,999,999,999,999,999 and +999,999,999,999,999,999,999,999,999,999,999,999 so no number should fail to convert!

I’ll be posting often from now on, so keep checking out my blog.

class Numeric
  def humanize
    num, dec = self.to_s.split('.', 2)
    output = ''
 
    if num[0..0] == '-'
      output << 'negative '
      num = num[1..-1]
    elsif num[0..0] == '+'
      output << 'positive '
      num = num[1..-1]
    end
 
    if num[0..0] == '0'
      output << 'zero'
    else
      groups = num.rjust(36, '0').scan(/d{3}/)
      groups2 = groups.map { |g| humanize_three_digit(g[0..0], g[1..1], g[2..2]) }
 
      groups2.each_with_index do |part, z|
        output << part << (z == 11 ? '' : ' ' + HUMANIZE_GROUP_TEXT[z] + (!groups2[(z + 1)..10].detect { |g| g != '' } && groups2[11] != '' && groups[11][0..0] == '0' ? ' and ' : '', ')) if part != ''
      end
 
      output.gsub!(/, $/, '')
    end
 
    output << " point " << dec.scan(/./).map { |n| HUMANIZE_ONES_TEXT[n.to_i] }.join(' ') if dec.to_i > 0
 
    return output
  end
 
  private
  HUMANIZE_GROUP_TEXT = %w(decillion nonillion octillion septillion sextillion quintrillion quadrillion trillion billion million thousand).freeze
  HUMANIZE_TENS_TEXT = %w(ten twenty thirty forty fifty sixty seventy eighty ninety).freeze
  HUMANIZE_ELEVEN2TWENTY_TEXT = %w(eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen).freeze
  HUMANIZE_ONES_TEXT = %w(zero one two three four five six seven eight nine).freeze
 
  def humanize_three_digit(dig1, dig2, dig3)
    output = ''
 
    return '' if dig1 == '0' && dig2 == '0' && dig3 == '0'
 
    if dig1 != '0'
      output << HUMANIZE_ONES_TEXT[dig1.to_i] << ' hundred'
      output << ' and ' if dig2 != '0' or dig3 != '0'
    end
 
    if dig2 != '0'
      output << humanize_two_digit(dig2, dig3)
    elsif dig3 != '0'
      output << HUMANIZE_ONES_TEXT[dig3.to_i]
    end
 
    return output
  end
 
  def humanize_two_digit(dig1, dig2)
    if dig2 == '0'
      HUMANIZE_TENS_TEXT[dig1.to_i - 1]
    elsif dig1 == '1'
      HUMANIZE_ELEVEN2TWENTY_TEXT[dig2.to_i - 1]
    else
      HUMANIZE_TENS_TEXT[dig1.to_i - 1] + '-' + HUMANIZE_ONES_TEXT[dig2.to_i]
    end
  end
end

13:29 Tue 2008-05-13 (Index)

Job length generator

Whenever someone (your boss, a client) asks you how long a task will take, simply use the Job length generator, and it will consult the stars and give you the results. Guaranteed 100% accurate!

13:04 Tue 2008-05-13 (Index)

Find out how you're DOM nodes are distributed

This little bookmarklet:

javascript:var n=document.getElementsByTagName('*');var o=[];for(var i=0;i<n.length;i++){var x=-1;for(var j=0;j<o.length;j++){if(o[j].m==n[i].nodeName) {x=j;break;}}if(x>0) {o[x].c++;}else{o.push({m:n[i].nodeName,c:1});}}o=o.sort(function(a,b){return(a.c<b.c)?1:(a.c>b.c?-1:0);});for(var i=0;i<o.length;i++){o[i]=o[i].m+": "+o[i].c;}alert(o.join("
"))

will grab all the nodes on the page and tell you the number of each node in descending order, like so (from the Google home page using Google Labs experimental search):

A: 28
SPAN: 21
BR: 10
DIV: 6
INPUT: 4
FONT: 4
TD: 3
SCRIPT: 2
NOBR: 2
B: 2
HTML: 1
HEAD: 1
META: 1
TITLE: 1
STYLE: 1
BODY: 1
U: 1
SMALL: 1
CENTER: 1
IMG: 1
FORM: 1
TABLE: 1
TBODY: 1
TR: 1
P: 1

13:23 Mon 2008-05-12 (Index)