« November 2004 | Main | January 2005 »

December 2004 Archives

December 1, 2004

Today I have mostly been listening to ...

An amazing and very rare live version of John Martyn's Ana. Very stripped down, just the man, his guitar and his soulful voice. Haunting...It's available here on johnmartyn.net

December 4, 2004

Web Service Ports

Just read an interesting post on Steven Vinoski's middleware matters about the lack of multiple-port support in the End-Point Reference EPR currently under review by the WS-Addresing working group and augmenting WSDL 1.1 by allowing for more dynamic usage patterns. Currently the EPR doesn't suport multiple ports. Ports, for those that remember the original WSDL spec, enable a webservice to be accesible through multiple protocol/transport/format alternatives. Steve Vinoski proposes a useful "business card" analogy to explain the practicality of multiple ports, covered by one EPR. Personal addressing on the internet has arguably evolved this way anyway. Here are some examples of ports associated with the person Shane Dempsey (of Geesan Tech, for SPAM avoidance purposes) with basic URI: sdempsey@geesan.com


  • EMAIL: mailto:sdempsey@geesan.com (TCP, port 25)

  • MULTIMEDIA SESSIONS: sip:sdempsey@geesan.com (UDP/TCP, port 5060)

  • SIP INSTANT MESSAGING: im:sdempsey@geesan.com (UDP, port 5060)

  • JABBER INSTANT MESSAGING: sdempsey@geesan.com (TCP, port 5222)


In some cases the URL scheme is provided, indicating a particular port (e.g. mailto: implies SMTP). The use of schemes is far from uniform however, meaning that there is not a direct port-scheme correlation. In the service domain, this is better. For example a SOAP service where information is transferred over an alternative application layer protocol such as SOAP, SIP or SMTP is possible. A hyperlink to such a SOAP service would take a form similiar to mailto:soap@mydomain.com

December 5, 2004

Can't Add, Can't Post!

Picked up the following link from Jon Udell about the CAPTCHA (Computer Automated Public Turing test to tell Computers & Humans apart) preventing blog spam. This is a really (should that be raelly) tasty idea from Rael Dornfest. It can be summed up as can't add, can't post. He uses the Blosxom Writeback function which provides weblog comments with write-backs. An arithmetic sum is embedded in the writeback and no commets are allowed unless the answer is posted correctly. An example of this is
5 + 2 =
Neatly sidestepping more general blog spambots. The numbers are generated randomly. A definite improvement would be image obfuscation (a la Captcha!) and a bigger range.. He currently only uses 0-9 meaning a 1 in 20 chance you're gonna get the right number. I'm not sure I want to encourage blogspammers to brute force my site, especially when a post is so tantalisingly close
I'm working on my own interesting weapon in the battle against blogspam. It currently has the catchy title of blogassasin (Apologies to jmason & the rest of the spamassasin team). Also, it doesn't kill blogs but early versions come close. Active blacklist generation is another tidy feature. So spammers should think before thy HTTPiss Off innocent bloggers. Personally I don't believe that my blog (or anyone else's for that matter) needs to become any less relevant or increasingly grbled. So let's say NO to blogspam ;-)

History of Linux Midi

Just picked this up on Linux Journal. Reviews of the best Midi apps for linux from the ubiquitous Rosegarden to seq24. The power of rosegarden has always impressed me. It supports Disposable Software Synth Interface (DSSI) and the LADSPA audio processing API enabling a wide range of plugins to be added (or even developed).. As a composition tool, it's usefulness is enhanced through support for the Lilypond notational format, it's pretty much the complete midi sequencer. If you're serious about music but not so big on linux then tough it out. Rosegarden is one of the reasons why I love free software.

December 8, 2004

Blog trading

It had to happen at some stage I suppose. (although I'm still not quite sure why???). Blogshares enables users to trade blogshares similiar to a fantasy stockbroker game.
Blogs are assigned monetary values based on the number of incoming and outgoing links to other blogs. It's similiar to Google in that it measures 'connectedness' Currently this blog is very lowly ranked :( Probably due to the fact that most of my friends don't actually maintain blogs so the usual web of trackbacks is avoided. It could also be that I haven't said anything interesting. I hope not. Also my blogroll is generated using javascript and it appears that the blogshare parser has failed to pick up these links...

December 9, 2004

Is spam driving you mad?

Evolutiontwo has a profane and funny response to all spammers. I hear you brother. Like the rest of the sane world he has no intention of passing his bank a/c details over to some spammer claiming to be from Africa, buying a fake rolex or using a super-cheap online pharmacy to buy drugs to enlarge various body parts. Also, to give a lot of net user's credit they're bright enough to know that it was a spammer rather than an online lottery that harvested their email address.

December 10, 2004

Fun with Regular Expressions

I was playing around with regular expressions in Java. AFAIK these are only around since the JDK 1.4 and are therefore quite new. As a sometimes Perl programmer I've some experience with these but .
Hoever, all this hacking reminded me of the most amazing regular expression I ever saw. I saw this on the ActiveState's RX cookbook some time ago.
It's actually a useful and logically sound solution to a common problem... How to match all RFC 1738 compliant URLs and turn them into hyperlinks! It was posted by Abigail to comp.lang.perl.misc on 08/14/2000. Abigail, I love you!!!


$string =~ s<
(?:http://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.
)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)
){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F
\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{
2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{
2}))|[;:@&=])*))?)?)|(?:ftp://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?
:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-
fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-
)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?
:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!
*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'()
,]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:;type=[AIDaid])?)?)|(?:news:(?:
(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;/?:&=])+@(?:(?:(
?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[
a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3})))|(?:[a-zA-Z](
?:[a-zA-Z\d]|[_.+-])*)|\*))|(?:nntp://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[
a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d
])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)/(?:[a-zA-Z](?:[a-zA-Z
\d]|[_.+-])*)(?:/(?:\d+))?)|(?:telnet://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+
!*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'()
,]|(?:%[a-fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a
-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d]
)?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))/?)|(?:gopher://(?:(?:
(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:
(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+
))?)(?:/(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))(?:(?:(?:[
a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))*)(?:%09(?:(?:(?:[a-zA
-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:%09(?:(?:[a-zA-Z\d$
\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))*))?)?)?)?)|(?:wais://(?:(?:(?:
(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:
[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?
)/(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)(?:(?:/(?:(?:[a-zA
-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)/(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(
?:%[a-fA-F\d]{2}))*))|\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]
{2}))|[;:@&=])*))?)|(?:mailto:(?:(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%
[a-fA-F\d]{2}))+))|(?:file://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]
|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:
(?:\d+)(?:\.(?:\d+)){3}))|localhost)?/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'()
,]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(
?:%[a-fA-F\d]{2}))|[?:@&=])*))*))|(?:prospero://(?:(?:(?:(?:(?:[a-zA-Z
\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)
*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)/(?:(?:(?:(?
:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-
zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:(?:;(?:(?:(?:[
a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&])*)=(?:(?:(?:[a-zA-Z\d
$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&])*)))*)|(?:ldap://(?:(?:(?:(?:
(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:
[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?
))?/(?:(?:(?:(?:(?:(?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d])
)|(?:%20))+|(?:OID|oid)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%2
0)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F
\d]{2}))*))(?:(?:(?:%0[Aa])?(?:%20)*)\+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(?
:(?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID
|oid)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])
?(?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)))*)(?:(
?:(?:(?:%0[Aa])?(?:%20)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))(?:(?:(?:(?:(
?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID|o
id)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(
?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*))(?:(?:(?:
%0[Aa])?(?:%20)*)\+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(?:(?:(?:[a-zA-Z\d]|%(
?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID|oid)\.(?:(?:\d+)(?:
\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a
-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)))*))*(?:(?:(?:%0[Aa])?(?:%2
0)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))?)(?:\?(?:(?:(?:(?:[a-zA-Z\d$\-_.+
!*'(),]|(?:%[a-fA-F\d]{2}))+)(?:,(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-f
A-F\d]{2}))+))*)?)(?:\?(?:base|one|sub)(?:\?(?:((?:[a-zA-Z\d$\-_.+!*'(
),;/?:@&=]|(?:%[a-fA-F\d]{2}))+)))?)?)?)|(?:(?:z39\.50[rs])://(?:(?:(?
:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?
:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))
?)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+)(?:\+(?:(?:
[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+))*(?:\?(?:(?:[a-zA-Z\d$\-_
.+!*'(),]|(?:%[a-fA-F\d]{2}))+))?)?(?:;esn=(?:(?:[a-zA-Z\d$\-_.+!*'(),
]|(?:%[a-fA-F\d]{2}))+))?(?:;rs=(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA
-F\d]{2}))+)(?:\+(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+))*)
?))|(?:cid:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@&=
])*))|(?:mid:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@
&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@&=]
)*))?)|(?:vemmi://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z
\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a
-fA-F\d]{2}))|[/?:@&=])*)(?:(?:;(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a
-fA-F\d]{2}))|[/?:@&])*)=(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d
]{2}))|[/?:@&])*))*))?)|(?:imap://(?:(?:(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+
!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~])+)(?:(?:;[Aa][Uu][Tt][Hh]=(?:\*|(?:(
?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~])+))))?)|(?:(?:;[
Aa][Uu][Tt][Hh]=(?:\*|(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2
}))|[&=~])+)))(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[
&=~])+))?))@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])
?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:
\d+)){3}))(?::(?:\d+))?))/(?:(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:
%[a-fA-F\d]{2}))|[&=~:@/])+)?;[Tt][Yy][Pp][Ee]=(?:[Ll](?:[Ii][Ss][Tt]|
[Ss][Uu][Bb])))|(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))
|[&=~:@/])+)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[
&=~:@/])+))?(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1-
9]\d*)))?)|(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~
:@/])+)(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1-9]\d*
)))?(?:/;[Uu][Ii][Dd]=(?:[1-9]\d*))(?:(?:/;[Ss][Ee][Cc][Tt][Ii][Oo][Nn
]=(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~:@/])+)))?))
)?)|(?:nfs:(?:(?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-
Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:
\.(?:\d+)){3}))(?::(?:\d+))?)(?:(?:/(?:(?:(?:(?:(?:[a-zA-Z\d\$\-_.!~*'
(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d\$\-_.!~*'(),
])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?)))?)|(?:/(?:(?:(?:(?:(?:[a-zA-Z\d
\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d\$-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?))|(?:(?:(?:(?:(?:[a-zA-
Z\d\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d
\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?)))
><a href = "$1">$1</a>>gx;

Needless to say, anything this complex requires a license to say that it may not work which is reprinted here (even though it logically should work at all times). Wow and wholeheated respect to Abigail...

The Gaisan regular expression toolkit

If you want to match URL's reliably without creating a regexp monster so big that you need to connect up the digital projector just so you can work on it then this is something tasty I've come up with. Demonstrated in java, my language of choice


Pattern urlPattern = Pattern.compile("(((URL:|url:|http:|htt:)\\/\\/)|www\\.)(((([A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9]"+
"|[A-Za-z0-9])\\.)*([a-zA-Z][A-Za-z0-9-]*[A-Za-z0-9]|[a-zA-Z]))|([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+))"+
"(:[0-9]+)?(\\/([a-zA-Z0-9$_.+!*'(,);:@&=\\~\\#-]|%[0-9A-Fa-f][0-9A-Fa-f])*(\\/([a-zA-Z0-9$_.+!*'(,)"+
";:@&=\\~\\#-]|%[0-9A-Fa-f][0-9A-Fa-f])*)*(\\?([a-zA-Z0-9$_.+!*'(,);:@&=\\~\\#-]|%[0-9A-Fa-f][0-9A-Fa-f])*)?)?)";
Matcher urlMatcher = urlPattern.matcher("http://streamserver.gaisan.com/ourapplication?sd=234324&cam=1");
boolean matches2 = m2.matches();
System.out.println("Match should be true:\t" + urlMatcher.matches());

December 13, 2004

The Law of Empty Plenty

I've discovered a new law which seems to govern most of human desire and explains a great deal about many social interactions. It's kinda ironic too! I call it Shane's law of Empty Plenty and it goes like this

Past a threshold of desire the probability of obtaining something that you want appears to be inversely proportional to your desire for it. The greater the desire the less chance there is of successfully realising it.
Or in other words "it often seems that you can have an unlimited amount of what you don't really want". I'm sure some readers will think this is nonsense but I believe it just may be true. The semantics are more subtle than it first appears. Many of us are familiar with something difficult suddenly becoming easier when we stop caring so much about it. Be it study, work, relationships etc. It's not that the thing itself has become any less complex but we've given our minds the chance to see with clarity as opposed to being clouded by desire. We work ourselves into a state over many different things and become incapable of objectivity. Other careers become exciting and fantastically lucrative, everything would be OK if you could persuade Mr/Miss X that they love you etc.... It's quite possible that there are more realistic alternatives that may be just as good but they are mostly overlooked as they don't seem so attractive. It often seems that there are a limitless amount of these not-quite-so-perfect opportunities around us but we don't act on them. Unfortunately it's only hindsight and often bitter experience that helps us to refocus.

As old as a chinese brewery

Would be very old indeed if a recent article in Scientific American is to be believed. It appears that proof has been found that Chinese villagers brewed alcoholic beverages more than 9000 years ago. A technique known as mass spectrometry was used by researchers at the Pennsylvanian Museum of Archaelogy to detect tartaric acid (a bi-product of grape fermentation) on shards of pottery that dated from around 7000 BC. The tests revealed that:

"13 of the 16 remnants came from containers that had held the same liquid, a "mixed fermented beverage of rice, honey and a fruit"
.
While I'm at it here's a informative extract from that well known organisation The Amercian Society for Mass Spectrometry.
"Mass spectrometry is a powerful analytical technique that is used to identify unknown compounds, to quantify known compounds, and to elucidate the structure and chemical properties of molecules. Detection of compounds can be accomplished with very minute quantities (as little as 10-12g, 10-15 moles for a compound of mass 1000 Daltons). This means that compounds can be identified at very low concentrations (one part in 1012) in chemically complex mixtures. Mass spectrometry provides valuable information to a wide range of professionals: physicians, astonomers, and biologists, to name a few."

So that explains that then! Actually it's a very interesting website and I recommend people to take a look.

December 15, 2004

Ban P2P applications

Perhaps not. I've commented in the past about the effects that P2P networks have upon the ISP traffic topologies (timing, upstream/downstream biases etc.) and we all know they can be used to illegally share copyrighted files. However, I strongly believe that P2P applications are the prototype for the next generation of highly resilient and scalable internet applications. In my former job as a telecomms researcher at TSSG we came up with quite a novel approach to integrating active networking and peer-2-peer apps at the top of the stack. I'm not sure what became of that work but my faith in the technology hasn't waivered.
I guess that's why I was so fascinated by the following post on boing-boing about 2 Princeton researchers who've cooked up a P2P app in 15 lines of concise Python code. The original post is located on Ed Felton's blog. It was damn funny to see someone hack up a Perl version in 9 lines. Without disrespect, the python implementation is more legible but the Perl code wins my "tight code" Award for 2004. Matthew Scala has a well used styrofoam cup with an strategicaly embedded 1/2 fried 2Mb Dimm (circa 1993) winging its way to him at this very moment. Enjoy! What a prize and what a hack :D

Where old computers go to die :(

IBM_AT_System_s1.jpg
While I was typing the last entry I wondered if there were any websites devoted to old PC technology. My sense of nostalgia overwhelmed me when I visited Old-Computers.com. In particular this article on the IBM PC AT brought it all back. I remember using one of these in school when I was younger. It had the 286 processor (which really kicked ass in its day) an outlandish 1Mb of RAM and 16-bit expansion slots, of course. This had a type 2 mobo with 4 standardised 256k slots instead of 128.. Those were the days.. when computers were dumb, real men used DOS, we played footie in the park, jumpers for goalpsots...
Apparently the 128 k slots were a bit weirder than they seemed initially.

The first AT used 128 k chips, which appeared to be two 64k chips stacked. It used two DMA chips, which tended to fail in tandem. It also used a second IRQ controller. If the AT had more than 640 k of RAM, the CMOS would only allocate the first 512 as Convential, the rest as Extended.
Only 17 hard drive type were supported in the CMOS, causing no end of headaches when Seagate realsed their 40 meg half height. The 1.2 meg floppy drive could read and write 360's, but if you formatted one, it couldn't be read by a regular double density drive.

December 18, 2004

Inspiring quote from Paolo Coelho

It's Christmas time and as usual books are on the wish list. I was reading through an old Paolo Coehlo book recently and stumbled across the following great quote. Definitely words to inspire

"A warrior accepts defeat. He does not treat it as a matter of indifference, nor does he attempt to transform it into a victory. The pain of defeat is bitter to him; he suffers at indifference and becomes desperate with loneliness. After all this has passed, he licks his wounds and begins everything anew. A warrior knows that war is made of many battles; he goes on. Tragedies do happen. We can discover the reason, blame others, imagine how different our lives would be had they not occurred. But none of that is important: they did occur, and so be it. From there onward we must put aside the fear that they awoke in us and begin to rebuild." The Fifth Mountain - Paolo Coelho

December 20, 2004

Santa's grounded this year kids

Thought I'd get into the Christmas spirit with a festive cartoon.
Ho, ho, ho!
santa_trial.gif

headmap

I must confess to being absolutely fascinated by headmap.org. I'm fascinated by the idea of smart spaces which infer user intent based on learned context. For example an office space that learns that automatically adjusts the heating in a room based on predictions about a meeting occuring. Lights that switch themselves off when there's nobody around etc. The most value is achieved when the ambient intelligence is fully integrated with other organisational information systems such as email and IM servers, project management tools, data and profile repositories etc. I fancy the idea that every node in an increasingly networked world could dynamically negotiate new cooperative strategies and operations based on an understanding of user intent. A true User Oriented Architecture. This could be communicated using a standardised information markup with transforms for hetergeneous devices to address capability differences. I'm straying into agents territory here but there was a lot of value in that research. In essence,extending the human computer interface (HCI) throughout the user environment. In particular I like the idea about capturing memories at locations, augmenting the real world with location/memory tags, a bit like the virtual worlds created by multi-player games. The possibilities are amazing & the results would perhaps be indistinguishable from magic...

December 21, 2004

p2(very small)p

This is getting ridiculous. Following my recent post about Ed Shelton's P2P program in 15 lines of Perl there's been a P2P app done in 9 lines of Perl and now (wait for it) a full peer-2-peer application in 6 lines of Ruby with a 3 lines of comments.
Just to show everybody how nuts this has become the code is reproduced below...

# Server: ruby p2p.rb password server server-uri merge-servers
# Sample: ruby p2p.rb foobar server druby://localhost:1337 druby://foo.bar:1337
# Client: ruby p2p.rb password client server-uri download-pattern
# Sample: ruby p2p.rb foobar client druby://localhost:1337 *.rb
require'drb';F,D,C,P,M,U,*O=File,Class,Dir,*ARGV;def s(p)F.split(p[/[^|].*/])[-1
]end;def c(u);DRbObject.new((),u)end;def x(u)[P,u].hash;end;M=="client"&&c(U).f(
x(U)).each{|n|p,c=x(n),c(n);(c.f(p,O[0],0).map{|f|s f}-D["*"]).each{|f|F.open(f,
"w"){|o|o<<c.f(p,f,1)}}}||(DRb.start_service U,C.new{def f(c,a=[],t=2)c==x(U)&&(
t==0&&D[s(a)]||t==1&&F.read(s(a))||p(a))end;def y()(p(U)+p).each{|u|c(u).f(x(u),
p(U))rescue()};self;end;private;def p(x=[]);O.push(*x).uniq!;O;end}.new.y;sleep)

I think I've had more than enough of this. Pick a suitably high-level language, use single character variable names and some whacky formatting to exchange a file over a socket and call it P2P. Next someone is gonna write a java programme using SUN's JXTA that just inits a class or two, format it all on about 4 lines and say, wow it's the shortest P2P app ever... More interesting would be a P2P application written in a declarative language like Prolog or a functional language like Haskell or Hope. Haven't done much Haskell programming in a while (damn rusty and for some reason don't feel like breaking out the books) but prolog looks tempting. Expect a post. I may have to use some file IO/socket programming but it sounds like an interesting project. I'll let readers know how I get on ;-)

December 29, 2004

da vinci code

Not going to post a review of the book yet but I solved the second puzzle riddles @ dan brown's website so I'll post those for my mates so they can check their answers against mine.

  1. the mona lisa

  2. paris (louvre museum)

  3. the priory of sion (although they SHOULD accept priori de sion aswell ;-)

  4. kryptos (friend of mine told me about this. it's a sculpture in the garden of the CIA headquarters in langley, virginia)

  5. WW (look at the previous link)

  6. is there no help for the widows son (masonic phrase)

  7. masons (obviously enough)

  8. e pluribus unum which means "out of many, one" and is located on the great seal of the US(stumped me for a while until I remembered some of the masonic symbols on the dollar bill, the founding fathers could have formed their own lodge :-D)

  9. click her right eye (your left) as droit means right in french

So there you go treasure hunters. Gee, I loved that book. One of the most exciting and entertaining reads in a long time. Coincidentally (if you believe in such things) I read a book called The Golden Ratio by Mario Livio just before I read the Da Vinci Code. The result of all this was that I was well primed for the 1st few clues. Especially the crime scene sequence and the bank account number based on the fibonacci series. Still, great book.

December 30, 2004

Changing the administrator password on an NT/2k/XP box

A friend (honest) forgot their pwd recently and asked me to hack into their machine and change their admin pwd. I found the following really tasty application which does the trick.
The Offline Password and NT registry editor by Petter Nordahl-Haggen. This is a very useful utility which I've used in the past and which has proven very effective. There are bootable floppy and CD images on the site that you can use edit your windoze box's passwords, stored in the reg's SAM file. For more hints and tips check here. Merry Christmas and a happy new year to everyone...

Debunking the debunkers

It's very amusing that when you search for information about the da vinci code using google many of the hints are catholic or christian websites with information debunking the book. It's amazing how much time and effort is currently being devoted to debunking Dan's debunking of catholic and christian teachings. It's reignited a millenia old debate. In his own way Brown has probably done many churches a power of good by forcing them to examine and succinctly state their beliefs. Without wanting to go into a huge debate on this topic I'm going to make 2 salient points:


  1. History IS written by the winners

  2. All historical records are incomplete in the same way that all stories are told subjectively


It's a great pity then that many of the responses and da vinci debunks are absolute in their criticism. The authors are in possession of the absolute and correct interpretation of sacred texts, much like the gnostics they criticise. Examples of critics oversights include failure to acknowledge the potential veracity of St. Philips gospel description of Jesus and Mary Magdalene being companions and Jesus "kissing her on the mouth". And less subjectively, all criticisms that I've seen so far fail to acknowledge the undeniable fact of the dimunition of women's status in society and the clergy by christian religions. The other great pity of is that Brown himself has a powerful message of tolerance which is being missed in the righteous clamour to attack both the author and his very entertaining and thought provoking book. The spirit of The Inquistion lives on in the minds of those whose faith cannot stand query or criticism.

About December 2004

This page contains all entries posted to Ordo Ab Chao in December 2004. They are listed from oldest to newest.

November 2004 is the previous archive.

January 2005 is the next archive.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.33