May 27, 2008
filed just before lunchtime by DrScofield in: from the grid, void
technorati tags:
QR code for this entry · average time to read 1:47 minutes

similar to other virtual worlds opensim supports in-world chat (and instant messaging) so that two avatars can “talk” to one another. the code that implements that functionality is mostly contained in ChatModule, a region module.

OpenSim also supports an IRC bridge: you can tie your OpenSim grid to an IRC channel hosted by an IRC network and everything that’s being said (chatted) in any of the OpenSim regions is reported by an OpenSim IRC bot on the IRC channel — and vice versa.

until recently1 chat traffic and IRC bridging was done by one single region module, ChatModule. as we are thinking about adding an XMPP bridge that was sub-optimal and we needed to split ChatModule

…to do that i’ve basically removed the ISimChat interface through which ChatModule was being called and turned the interface into a set of events in EventManager: OpenSim basically has something that we could virtual information bus that allows region modules to register handlers for certain event types. for each event type we usually have a trigger method in EventManager which a system component can invoke and pass data into to have it distributed via the “virtual info bus” to all subscribed region modules. for the chat functionality we now have two new events:

  • ChatFromWorldEvent — which is used to distribute chat from in-world objects
  • ChatBroadcastEvent — which is used to send a broadcast chat to all logged in users

plus, of course, the corresponding TriggerOnChatFromWorld and TriggerOnChatBroadcast methods as well.

the old ChatModule now exists as ChatModule and IRCBridgeModule. the new ChatModule now only takes care of chat traffic, nothing else. IRCBridgeModule is subscribed to ChatFromWorldEvent to receive all chat traffic from in-world and is also subscribed to each user’s client object to receive all chat traffic from clients (ChatModule does this also).

using the new ChatBroadcastEvent it was now possible to implement the LSL function llOwnerSay() as normal chat instead of having instant messages pop up.

also, /me is now properly translated in both directions. typing /me sneezes in the IRC window2 causes IRC to say:

…which is then correctly rendered in OpenSim:

likewise, typing /me laughs as Dr Scofield in the secondlife™ client shows up as follows in the secondlife client:

and is correctly reported in the IRC channel:

another new thing: as you can see

IRCBridgeModule now reports more (and correct) presence information as well.


  1. roughly before subversion release 4850 or thereabouts. 

  2. i’m using pidgin for all my IRC, google talk, and sametime chats. 

all content posted on these pages is an expression of my own mind. my employer is welcome to share these opinions but then again he might not want to.
May 15, 2008
filed mid-afternoon by DrScofield in: from the grid, hacking, void
technorati tags:
QR code for this entry · average time to read 2:22 minutes

our lab “owns” an island on the LindenLab grid and we’ve created a “lab” avatar who is the estate owner. as the island is paid for by the lab, we need to have monthly account statements on file for the bean counters. so far, i had to remember to log in to the lab avatar’s account page, copy the account statement and mail it our friendly lady in accounting taking care of these things (yes, we are a small lab)…

…the only problem with that is that i tend to forget these things and our friendly accounting lady has to be rather patient and usually ends up sending reminder notes.

so, after another one of these notes and as it was becoming rather embarrassing that i kept forgetting, i decided to tackle it once and for all and write a python script to do this automatically. the very excellent mechanize python package turned out to be an invaluable tool.

here’s the script in all its glory:

it reads the avatar name, password and so forth from a configuration file:

[lindenlab]
url = http://www.secondlife.com
firstname = Foo
lastname = Bar
password = secret

[mail]
subject = %Y-%m LindenLab monthly account statement for Foo Bar
to = accounting@foo.bar.com
cc = me@foo.bar.com
from = me@foo.bar.com

adapt the config file to your taste and invoke as follows:

sl-account-statement --config config.cfg

voila!

all content posted on these pages is an expression of my own mind. my employer is welcome to share these opinions but then again he might not want to.
May 14, 2008
filed around lunchtime by DrScofield in: void
technorati tags:
QR code for this entry · average time to read 1:02 minutes

we are currently trying to figure out what the best approach for a REST “API” for regions is and would like to solicit comments :-)

currently the idea is to have a scheme as follows:

  • http://opensim.foobar.org:9000/admin/regions —
    • GET returns an array of (UUID, name, x location, y location, region’s REST URL)
    • POST would create a region
  • http://opensim.foobar.org:9000/admin/regions/4b787c46-1e3c-40ae-9494-2c924428f8e5/
    • GET would return detailed information about region
    • DELETE would delete region
    • PUT would update region information
  • http://opensim.foobar.org:9000/admin/regions/4b787c46-1e3c-40ae-9494-2c924428f8e5/name
    • GET would return name of region
    • PUT would update name of region
    • (similar for other region attributes if it makes sense)

current planning is to have this as an ApplicationPlugin level set of RestPlugins. an alternative would be to use region modules plus an ApplicationPlugin (for GET/POST on /admin/regions).

this applies to region (meta) data. the next question would be how to structure this for avatar information and also for stuff like inventory: something along the lines below?

  • http://opensim.foobar.org/admin/avatars
    • GET returns list of known avatars?
    • POST creates account?
  • http://opensim.foobar.org/admin/avatars/430f1da7-0e35-4c0f-985d-15046c077967/
    • GET returns detailed information about avatar?
    • PUT updates?
    • DELETE deletes?
  • http://opensim.foobar.org/admin/avatars/430f1da7-0e35-4c0f-985d-15046c077967/inventory/
    • GET returns inventory listing?
    • POST adds items to inventory?
    • DELETE deletes inventory items?
all content posted on these pages is an expression of my own mind. my employer is welcome to share these opinions but then again he might not want to.
filed in the wee hours by DrScofield in: from the grid, void
technorati tags:
QR code for this entry · average time to read 1:04 minutes

we are currently looking at adding REST support to the RemoteAdmin plugin (other stuff to follow) — the idea being that we can get information about (as well as change state of) a running OpenSim instance not only via XmlRpc but also via REST.

looking at the way we currently deal with serialization we either

  • use LLSD where mandated by secondlife (e.g., CAPS)
  • use .NET’s System.Xml.XmlSerializer
  • use XmlRpc serialization (which goes back to System.Xml)

LLSD is being used by linden lab’s and is proposed by LL/SLAWG as the serialization protocol of choice (IIUC). in my opinion it suffers from being a bit verbose and not really easy to parse.

XmlSerializer is “built in”. on the other hand it’s wordy and more complex to parse; also, it doesn’t distinguish between the number 4711 and the string “4711″ — you have to know that a certain tag contains a string (or a number).

another alternative that has been suggested is JSON. JSON is lean, and easy to use from AJAX apps as well as python scripts (and the likes). it requires an additional DLL. it does however distinguish between strings and numbers. using a library like jsonexserializer — BSD license — makes it easy to use from C#.

personally, i’ve started to like JSON because it’s lean and easy to use — but i’d like to hear from you guys what you think about this. so, give it a vote!

which serialization format to use for OpenSim REST services?

  • JSON (78%, 18 Votes)
  • LLSD (13%, 3 Votes)
  • .NET native XmlSerialize (9%, 2 Votes)
  • ASN.1 (0%, 0 Votes)

Total Voters: 23

Loading ... Loading ...

all content posted on these pages is an expression of my own mind. my employer is welcome to share these opinions but then again he might not want to.
April 29, 2008
filed in the early afternoon by DrScofield in: void
technorati tags:
QR code for this entry · average time to read 1:28 minutes

until a couple of days ago, opensim would only run in console mode: whenever you started OpenSim you would end up at a prompt inside OpenSim’s very own console — which is very convenient if you want to manage it that way. it is rather inconvenient if you want to start OpenSim as a daemon in the background (and control it via the RemoteAdminPlugin, for example).

as of OpenSim’s subversion release r4390 the basic support for running OpenSim without such a console is in the code base and all you need to do is invoke OpenSim with the -background True commandline parameter:

% mono --debug OpenSim.exe -background True

note: that’s just a single dash for -background True!

another patch is on its way that not only adds code to properly shutdown OpenSim when the admin_shutdown XmlRpc method is invoked but it also adds the shutdown.py script:1

you can either pass in the server URI and password to use via commandline parameters, or you can create .opensim-console.rc in your home directory and set default values:

[opensim]
server = http://127.0.0.1:9000/
password = secret

then all you need to do to shutdown your OpenSim server is: invoke shutdown.py


  1. to be found in share/python/console/shutdown.py

all content posted on these pages is an expression of my own mind. my employer is welcome to share these opinions but then again he might not want to.
March 1, 2008
filed just before lunchtime by DrScofield in: void
QR code for this entry · average time to read 0:50 minutes

while working on a lengthy LaTeX text in my favourite editor, emacs, i noticed that once i turn on flyspell-mode (spell check as you type), that transient-mark-mode (highlight marked regions) would become borked :-( not good.

investigating the issue, it transpired that the flyspell.el and ispell.el files installed as part of the ubuntu 7.10 dictionaries-common package are a bit out of date: that problem has been fixed back in 2005. funnily enough the emacs-snapshot package brings along its own ispell and flyspell emacs lisp files that are more recent — and don’t have the problem fixed.

so, to sort this out i diverted the dictionaries-common versions like so:

% dpkg-divert --rename --local \
        --divert /usr/share/emacs/site-lisp/dictionaries-common/flyspell.el-borked \
        --add /usr/share/emacs/site-lisp/dictionaries-common/flyspell.el
Adding `local diversion of /usr/share/emacs/site-lisp/dictionaries-common/flyspell.el to /usr/share/emacs/site-lisp/dictionaries-common/flyspell.el-borked'
% dpkg-divert --rename --local \
        --divert /usr/share/emacs/site-lisp/dictionaries-common/ispell.el-borked \
        --add /usr/share/emacs/site-lisp/dictionaries-common/ispell.el
Adding `local diversion of /usr/share/emacs/site-lisp/dictionaries-common/ispell.el to /usr/share/emacs/site-lisp/dictionaries-common/ispell.el-borked'

this not only renames flyspell.el to flyspell.el-borked (and ispell.el to ispell.el-borked) but also does this in case there’s an update of the dictionaries-common package.

all content posted on these pages is an expression of my own mind. my employer is welcome to share these opinions but then again he might not want to.
February 13, 2008
filed mid-morning by DrScofield in: hacking, linux, void
technorati tags:
QR code for this entry · average time to read 1:23 minutes

as you hopefully have not noticed (well, there was some downtime, but not more than usually afflicted by cablecom) i switched xyzzyxyzzy.net from gentoo to running ubuntu server 7.10 on monday.1 along with that came a reorganization of the web server directory layout — and i took the chance to clean up. pretty much everything is running again (and thx to having that complete backup of the mysql databases all blogs and photo blogs are back as well :-) — with the exception of the QR code stuff, which was not really generating QR codes for new posts anymore.

this had me baffled as all the path names and what have you were looking ok, permission were fine, the works. still no QR codes and the test image wouldn’t work either…i did manage to get it working, here’s a brief overview2 of what i did:

# install command line php5 so that we can poke at the php code manually, so to speak
% sudo apt-get install php5-cli

# qrcode lib lives in /usr/local/share/qrcode/qrcode_php0.50beta10
% cd /usr/local/share/qrcode/qrcode_php0.50beta10

# let's try invoking the sample.php via php5
% php5 sample.php
[...lots of error messages...]

those error messages revealed that i had forgotten to adjust QRCODE_DATA_PATH — for some strange reason, wp-qrcode doesn’t get that across from the wordpress configuration — fixing that path fixed the problem. sweat :-)

define ("QRCODE_DATA_PATH","/usr/local/share/qrcode/qrcode_php0.50beta10/qrcode_data");

  1. the state of gentoo currently is a sorry one. updating gentoo packages was — over the past year or so — increasingly becoming an adventure in circular dependencies, seemingly irresolvable cross-dependencies, dependencies on non-stable packages by stable ones, the whole monty of sys admin nightmare. i lost the lust for playing gentoo detective i’ve to admit, there are just too many things i’d rather do…sorry, gentoo folks. 

  2. yep, treating xyzzyxyzzy.net as a kind of brain extension here ;-) 

all content posted on these pages is an expression of my own mind. my employer is welcome to share these opinions but then again he might not want to.
December 31, 2007
filed mid-afternoon by DrScofield in: research, thinking..., void
QR code for this entry · average time to read 1:11 minutes

while looking at the 24C3 hack list of the currently ongoing 24C3 hack conf, i found this howto detailing the procedure to create fake fingerprints — all you need are:

  • glass with fingerprint of the person you want to impersonate
  • screw-top of a bottle (like the one from a coke bottle)
  • super-glue
  • wood glue (PVA)
  • skin friendly glue (theatrical glue)
  • digital camera
  • PC
  • laser printer
  • foil

the process itself is rather easy — and, together with german TV station WDR, they demonstrated that you can use that method to fool the fingerprint recognition system used by the European super-market chain EDEKA…

EDEKA seemed non-fazed:

Edeka Südwest teilt uns auf Anfrage schriftlich mit, man sehe „keinen Handlungsbedarf“. Die bestehenden Sicherheitsvorkehrungen seien, „wie unsere Erfahrungen gezeigt haben, vollkommen ausreichend“.[^1]

…and they went on to state that the system they used was being used by the US government and other governments worldwide.

wow. good security relies either on something only i know, or something only i have, or something only i am. the emphasis is on only, your fingerprints? they are all over the place…and that place…and that place over there as well, yep.

the scary thing is, fingerprints are being used (as secondary biometrics) for the new biometric EU passports!

all content posted on these pages is an expression of my own mind. my employer is welcome to share these opinions but then again he might not want to.
December 20, 2007
filed mid-afternoon by DrScofield in: void, weirdology
technorati tags:
QR code for this entry · average time to read 2:05 minutes

while reading through the newsletter from ship of fools this morning — current chance of rapture is at 70.7% you’ll be, no doubt, interested to learn — i had to take a look at the 12 days of kitschmas section and came not only across the thongs of praise (available at cafepress.com in case you are really really interested) but also across the intriguing jerusalem compass:

An amazing, attractive, compass that appears to defy nature as it spins… and stops in the direction of our prayers and dreams… Jerusalem! No computer chips, no circuitry, this non-electric, patent-pending device, appears to defy the laws of nature to point directly toward Jerusalem from any place you are in the world. [jewishsoftware.com]

interesting…fraud or real? the review at jewishsoftware.com mentions the term magnetic polarity recalibrator, googling for that really doesn’t turn up any further information — but, a search for MPR yields among other results a link to the failedmessiah blog containing the name of the inventor, moshe ashin. using the family name as search input on the google patent search page brings back a link to US patent 7134213:[^1]

A magic compass that gives the illusion it defies the laws of nature, providing usage as an aid for locating the direction of prayer as well as a novel promotional device for companies, [...]

taking a closer look at US patent 7134213, it quickly transpires that this is after all just a normal compass needle to which a fake compass needle has been attached and a fake compass disc is hiding the real compass needle from the fake one. the fake needle can be rotated relative to the real one, giving the illusion that this compass is not pointing north–south but instead to jerusalem. and, yes,

…when travelling from one country to another, the compass needs to be re-set or re-calibrated…

which will only work “kind of” if you are sufficiently far away from jerusalem, get too close and the margin of error becomes too large and you end up facing away from jerusalem — but, as observed on the failedmessiah blog, that’s also not a problem, as

the earth is round (I think most charedim accept it) so in any direction it will point to Jerusalem as well as to Mecca and the Church of Nativity

lol. interesting what you can patent these days :-)

all content posted on these pages is an expression of my own mind. my employer is welcome to share these opinions but then again he might not want to.
October 1, 2007
filed around lunchtime by DrScofield in: void
QR code for this entry · average time to read 0:28 minutes

xyzzyxyzzy.net is running the latest wordpress release (2.3) which has a completely revamped tag system — breaking, unfortunately christine davis’s ultimate tag warrior plugin that i had been using on my wordpress blog(s) so far. while checking her blog for updates i noticed a trackback to the gormful — if you can’t fix it, don’t break it blog, mentioning that gormful had created a technorati tag display plugin to re-create the ultimate tag warrior behavior.

so, download, install, activate…and xyzzyxyzzy.net has technorati tag display again :-)

all content posted on these pages is an expression of my own mind. my employer is welcome to share these opinions but then again he might not want to.