Older blog entries for follower (starting at number 22)

26 Dec 2002 (updated 26 Dec 2002 at 04:43 UTC) »
San Francisco

Well, here I am in San Francisco at Christmas.

I'm still looking for a job until March 25, 2003.

I'm also keen to meet up with tech-related people in the Bay Area. I've been to a few gatherings already and it's been good to be around people who are into similar areas of interest.

Email providers

mascot: You might want to consider FastMail, I've been really impressed with them--even paid money for a lifetime membership. Nice, no-advert web interface and IMAP access too.

Employment wanted in San Francisco area for 4 months Dec-02 to Apr-03

Ah, subtlety is a lost art... :-)

Yeah, I'm heading to the SF area (from New Zealand), and I'm really keen to find a job in the IT arena. This could well be my only opportunity to ever work in the US in my life, so it'd be cool to actually get experience within the IT arena rather than the dish washing arena. :-)

Dream job

Something involving:

  • UI
  • Python
  • Open Source tools/development
  • Embedded software

Dream employers

  • Google
  • Apple
  • Someone doing something productive & not just trying to sell more widgets to people who don't need them.

I'm also keen for any tips on improving my chances of employment.

I'd appreciate it if you could contact me here: web@rancidbacon.com

[Oh, and if anyone's concerned about the "job stealing" issue: with the student work exchange visa program I'm participating in, US students get the same opportunities in New Zealand, except they get 12 months rather than 4 months. (Must be something to do with the exchange rate. :-) )]

13 Oct 2002 (updated 13 Oct 2002 at 15:57 UTC) »
Anyone wanna fill in a form?
Wow, filling in forms is fun, wanna try? I'm filling in forms (3) to apply for a student exchange work visa to the USA. It seems that since certain "international incidents" there's now three times as many forms as normal. Although, interestingly enough, one of them you only have to fill in if you're a male aged 18-45.

Still, I'm looking forward to going. Oh, did I mention I'm heading to the USA from the end of November to mid-April. WooHo! I'm finally getting overseas again! Yay!

Oh, did I mention I'm looking for some employment while I was there? :-) More on that later...

Jabber + Python + Bots
Haven't done too much on this lately, there's an ongoing issue with the translation side of things and Unicode encoding which is a pain but haven't really looked too deeply at it yet. (Too busy filling in forms. :-) )

Oh, well, I mean apart from using my Jabber bot to post all this of course. (Which I'm currently using just because I can. Ooo, gratuitous use of technology...)

Ethereal
Okay, "cool tool|toy" award for this week definitely goes to Ethereal http://www.ethereal.com/ (in addition to the roll-over awards to Python + Jabber). I've been working on a issue at work where the firewall/proxy (MS ISA...) seems to be stopping a certain java application from functioning correctly... And, of course, I can't get access to anything near the firewall to find out what's going on so I'm using Ethereal to find out what's going back and forth in the firewalled vs. non-firewalled situations. It's possibly overkill as the application is essentially http+text based, but it's definitely helpful. I made a breakthrough on Saturday I think but I'll have to wait until tomorrow probably to see if that's the case...

Matching text strings in packets with Ethereal
The one issue I hit with ethereal was that it doesn't seem possible to search data payloads to find arbitrary text strings at arbitrary locations. Because I'm tracking http transactions mostly, this was a bit of a handicap. So, after looking to see if anyone else has written something to do this (perl psuedo-code was the only thing I found.) I decided to put a Python script together to do the job.

The script searches the uncompressed pcap file that Ethereal creates and locates the string you're looking for (if present). Then, in order to tell you the sequence number of the packet, it searches backward to find the start of the ip packet so it can locate the sequence number. I guess I could also have worked through the capture and treated it as packets all along, but this seemed... more expedient. :)

The issue is, of course, how can you locate the start of an IP packet starting at an arbitrary location within its payload? I suspect someone else has probably written a white-paper on it somewhere, but I figured that since I knew the two ip addresses involved in the transaction and they were located at a known offset within the packet header I'd use them as my markers. (The advantage being that the likely hood of finding a false positive was pretty low.)

(Of course, the other option was to look for the byte '0x06' which signifies the protocol type as TCP in the IP header, and then work back from there to the offset where you expect the IP version type (0x4 in this case) and if you find it you've probably found the header. I suspect there may be greater risk of false positives doing it that way though, plus it'd probably be slower, maybe, not that that really matters. I can probably provide this method as an option tho.)

So anyway, having located the sequence number it displays it. Then, when it's found all occurrences it prints out an Ethereal display filter which will display only those packets which contain the matched text string. A copy and paste later, and Ethereal's back to helping again...

Well, it worked for me anyway. :-)

Geeky, moi?
All up, it was a fun exercise, poking through the IP & TCP header specs and semi-reverse-engineering things. (Although that kinda came more later.) Gee, how geeky am I?

Heh, of course, I'm just waiting for the response "Oh, such and such does that, it's here: < insert site here>" or "Crappy method for finding the sequence number, you could just do: < insert one line of Python code here>". :-) But, amongst other things it showed that maybe I did learn something in my networking paper last year after all. And, it helped me find what I'm probably looking for (certain POST requests seem to be getting their responses dropped) at the time I needed to find it.

Oh, yes, my intention is to throw the short script on my site, but since I wrote it on my employer's time I'm going to check with them that they don't mind. (Don't see why they would, small price to pay in exchange for being able to use Ethereal...)

Wow...
That was kinda long, wasn't it. You don't really notice when you're sending it one message at a time... :-)

User info updated
I've also updated my Advogato user info to include my PjBot and NoteTaker projects. (Oh, and I just compiled what I think is my first ever C++ program...)

And, of course, hello to ressu. I think his random url for today is http://www.google.com :)

@20021014

11 Oct 2002 (updated 11 Oct 2002 at 18:51 UTC) »

So, sensibly, after telling people to let me know if they were interested in my Python/Jabber code I neglected to remember that I list no contact details here at advogato. So, I'm working on correcting that.

Now, I've updated my advogato info page to feature a link to my site at www.rancidbacon.com and from there you can get an email address for me. Ah, modern technology...

Hopefully by the time anybody clicks the 'employme' link the new sub-domain will have propagated...

An additional development

Well, if this works correctly I should be able to mention http://www.rancidbacon.com/ again.

This time
It should look right. Ooo, bad, presentation instead of structure... I'm sure some at http://www.w3c.org/ would be less than impressed.

Sweet, the http://employme.rancidbacon.com/ sub-domian does work now.

Nicely formatted
Now, if I surround words with '*' characters they will get emboldened. Additionally, two consecutive back-slash characters force a line break. And any url-looking things will get turned into an href. The conversion's not perfect but it adds a bit of variety...

@20021012

9 Oct 2002 (updated 9 Oct 2002 at 15:00 UTC) »

Anyway, as you may have guessed I've been playing with Jabber lately. Probably too much actually... But with the help of jabberpy the Python jabber library I've been having *heaps* of fun. Got a first version of a bot running within a few hours of trying thanks to the example test client included with the library.

I tried a whole bunch of ideas, pretty much just jammed 'em all in so it ended up being a bit of a mess. Since then I've been refactoring it to use a plugin based system which is going pretty well...

Of course, what I think is *the* coolest part is I was working on automatic chat translation, between languages. It's pretty cool. Works quite well. You let the bot know what language you speak e.g. "I speak German" and then it translates everything you say from then on into English in the chatroom. Optionally it also translates the room's chat in English to your language via a private chat... If you have your user info set up correctly it also detects your language choice automatically.

The bot uses translation service plugins to do the translation, so far I've got a couple for babelfish and google.

So anyway my current little toy is a plugin which allows me to write to my Advogato blog via the bot. It uses Advogato's XML-RPC interface (very nice by the way, easy as to use, and the short documentation tells you pretty much everything you need to know) to do its work. The idea being that I'm more likely to update my diary if I do it via chat--maybe... :-)

So anyway, all of this is coming to you via the bot--one message per paragraph. It starts a new diary entry for each day automatically. The only downside is that I had to enable it to detect the local date of the postings, which I couldn't work out how to do via RPC (short of updating and checking the date which seemed messy) so that's why there's a date stamp at the end of each entry...

So, to all those (Jabber, jabberpy, python, google/altavista, Advogato, etc) that have made this possible so far thanks for the fun! :)

If anyone's interested in the code let me know, it's still somewhat messy, but it's better than it was. Planning to put it up somewhere later...

(It's also kinda handy that Gabber my Jabber client has automatic message spell checking...)

It's lots of fun, and the machine translation stuff has a lot of potential I reckon. And, rather conveniently, 'cos it's all XML related I might even be learning something to help me with my Software Engineering exam next month...

And a special shout out to vapor, just for reading. :)

@20021010

9 Oct 2002 (updated 9 Oct 2002 at 14:29 UTC) »

Ah, live testing ain't it grand...

Why, yes, it is!

Indeed, yes-siree bob...

This is coming to you live from my Jabber bot, in real time, as < b>it < /b> happens!

Okay, so it's not perfect... Have to work on inline html, if it's necessary. Should probably look at processing standard markers like '*' etc and auto link URLs, names too maybe...

@20021009

9 Oct 2002 (updated 9 Oct 2002 at 11:56 UTC) »

Hmmm, I've just realised it would be kinda useful if the Advogato XML-RPC server gave you a way to retrieve the current time as far as it knows...

jfleck:
Anyone here know anything about street sign research?
About the only thing I know is some research was done to compare signs IN ALL CAPS with signs in Mixed Case, and the latter were significantly better. I've got no citation for you though.
2 Oct 2002 (updated 2 Oct 2002 at 19:56 UTC) »

Hmm, as I was searching with Google for the xml rpc interface for Advogato I noticed a company advertising for employees who had paid money for... "Advogato". I don't know how consistent it is but it's certainly curious... [Hey this is cool, I'm using XMLRPC, a 5 minute turn around is pretty good :-) ]

raph:
The book is beautifully written, with gripping narrative at times, and fully human, real characters. Heather is reading it now, and I am sure we will discuss it deeply.
Maybe I'm being particularly sappy but that just strikes me as really beautiful.

13 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!