<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"
>

<channel>
	<title>xyzzy xyzzy...</title>
	<atom:link href="http://xyzzyxyzzy.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://xyzzyxyzzy.net</link>
	<description>...you are in a grid of twisty, little links, all alike. there's a teleport gate here.</description>
	<pubDate>Tue, 08 Jul 2008 08:54:06 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>tunafish, tune a mono</title>
		<link>http://xyzzyxyzzy.net/2008/06/30/tunafish-tune-a-mono/</link>
		<comments>http://xyzzyxyzzy.net/2008/06/30/tunafish-tune-a-mono/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 18:13:42 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[hacking]]></category>

		<category><![CDATA[build]]></category>

		<category><![CDATA[mono]]></category>

		<category><![CDATA[opensim]]></category>

		<category><![CDATA[tunafish]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=121</guid>
		<description><![CDATA[daTwitch and nebadon, both infamous opensim developers did an interesting experiment over the weekend: they patched mono and rebuild it with the --with-large-heap configuration option and then load tested OpenSim &#8212; result: you get way more bang for your buck!

so, i&#8217;ve updated the mono-build script to include that patch and also use the large heap [...]]]></description>
			<content:encoded><![CDATA[<p>daTwitch and nebadon, both infamous <a href="http://opensimulator.org/wiki/Development_Team">opensim developers</a> did an <a href="http://osgrid.blogspot.com/2008/06/news-you-can-use.html">interesting experiment over the weekend:</a> they patched mono and rebuild it with the <code>--with-large-heap</code> configuration option and then load tested OpenSim &#8212; result: <strong>you get way more bang for your buck!</strong></p>

<p>so, i&#8217;ve updated the <a href="http://xyzzyxyzzy.net/wp-content/uploads/2008/06/mono-build.sh">mono-build script</a> to include that patch and also use the large heap configuration option. admittedly, they did use mono from <a href="http://www.mono-project.com/AnonSVN">its SVN trunk</a>, so i&#8217;m not sure how much the script will help, but, have a go and let me know how it works out.</p>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/06/30/tunafish-tune-a-mono/feed/</wfw:commentRss>
		</item>
		<item>
		<title>splitting opensim&#8217;s chat module</title>
		<link>http://xyzzyxyzzy.net/2008/05/27/splitting-opensims-chat-module/</link>
		<comments>http://xyzzyxyzzy.net/2008/05/27/splitting-opensims-chat-module/#comments</comments>
		<pubDate>Tue, 27 May 2008 09:34:15 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[void]]></category>

		<category><![CDATA[chat]]></category>

		<category><![CDATA[irc]]></category>

		<category><![CDATA[opensim]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=112</guid>
		<description><![CDATA[similar to other virtual worlds opensim supports in-world chat (and instant messaging) so that two avatars can &#8220;talk&#8221; 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 [...]]]></description>
			<content:encoded><![CDATA[<p>similar to other virtual worlds opensim supports in-world chat (and instant messaging) so that two avatars can &#8220;talk&#8221; to one another. the code that implements that functionality is mostly contained in <code>ChatModule</code>, a <a href="http://opensimulator.org/wiki/RegionModules">region module</a>.</p>

<p>OpenSim also supports an IRC bridge: you can tie your OpenSim grid to an <a href="http://en.wikipedia.org/wiki/IRC">IRC channel</a> hosted by an IRC network and everything that&#8217;s being said (chatted) in any of the OpenSim regions is reported by an OpenSim IRC bot on the IRC channel &#8212; and vice versa.</p>

<p>until recently<sup id="fnref:747ba952bf98566e9e079543ec61660e1"><a href="#fn:747ba952bf98566e9e079543ec61660e1" rel="footnote">1</a></sup> chat traffic and IRC bridging was done by one single region module, <code>ChatModule</code>. as we are thinking about adding an <a href="http://en.wikipedia.org/wiki/Xmpp">XMPP</a> bridge that was sub-optimal and we needed to split <code>ChatModule</code>&#8230;</p>

<p>&#8230;to do that i&#8217;ve basically removed the <code>ISimChat</code> interface through which <code>ChatModule</code> was being called and turned the interface into a set of events in <code>EventManager</code>: 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 <em>trigger</em> method in <code>EventManager</code> which a system component can invoke and pass data into to have it distributed via the &#8220;virtual info bus&#8221; to all subscribed region modules. for the chat functionality we now have two new events:</p>

<ul>
<li><code>ChatFromWorldEvent</code> &#8212; which is used to distribute chat from in-world objects</li>
<li><code>ChatBroadcastEvent</code> &#8212; which is used to send a broadcast chat to all logged in users</li>
</ul>

<p>plus, of course, the corresponding <code>TriggerOnChatFromWorld</code> and <code>TriggerOnChatBroadcast</code> methods as well.</p>

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

<p>using the new <code>ChatBroadcastEvent</code> it was now possible to implement the LSL function <a href="http://wiki.secondlife.com/wiki/LlOwnerSay"><code>llOwnerSay()</code></a> as normal chat instead of having instant messages pop up.</p>

<p>also, <code>/me</code> is now properly translated in both directions. typing <code>/me sneezes</code> in the IRC window<sup id="fnref:747ba952bf98566e9e079543ec61660e2"><a href="#fn:747ba952bf98566e9e079543ec61660e2" rel="footnote">2</a></sup> causes IRC to say:</p>

<p><img src="http://xyzzyxyzzy.net/wp-content/uploads/2008/05/irc-me1.jpg" alt="" title="irc-pigdin" width="500" height="182" class="alignnone size-full wp-image-114" /></p>

<p>&#8230;which is then correctly rendered in OpenSim:</p>

<p><img src="http://xyzzyxyzzy.net/wp-content/uploads/2008/05/irc-me.jpg" alt="" title="IRC-2-OpenSim" width="276" height="170" class="alignnone size-full wp-image-113" /></p>

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

<p><img src="http://xyzzyxyzzy.net/wp-content/uploads/2008/05/irc-me2.jpg" alt="" title="opensim-irc" width="247" height="132" class="alignnone size-full wp-image-115" /></p>

<p>and is correctly reported in the IRC channel:</p>

<p><img src="http://xyzzyxyzzy.net/wp-content/uploads/2008/05/irc-me3.jpg" alt="" title="irc-me3" width="487" height="96" class="alignnone size-full wp-image-116" /></p>

<p>another new thing: as you can see</p>

<p><img src="http://xyzzyxyzzy.net/wp-content/uploads/2008/05/irc-me-presence.jpg" alt="" title="irc-me-presence" width="500" height="182" class="alignnone size-full wp-image-117" /></p>

<p><code>IRCBridgeModule</code> now reports more (and correct) presence information as well.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:747ba952bf98566e9e079543ec61660e1">
<p>roughly before subversion release 4850 or thereabouts.&#160;<a href="#fnref:747ba952bf98566e9e079543ec61660e1" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:747ba952bf98566e9e079543ec61660e2">
<p>i&#8217;m using <a href="http://www.pidgin.im/">pidgin</a> for all my IRC, google talk, and sametime chats.&#160;<a href="#fnref:747ba952bf98566e9e079543ec61660e2" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/05/27/splitting-opensims-chat-module/feed/</wfw:commentRss>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>we have buttons!</title>
		<link>http://xyzzyxyzzy.net/2008/05/18/we-have-buttons/</link>
		<comments>http://xyzzyxyzzy.net/2008/05/18/we-have-buttons/#comments</comments>
		<pubDate>Sun, 18 May 2008 18:44:19 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[hacking]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[buttons]]></category>

		<category><![CDATA[country walking]]></category>

		<category><![CDATA[epson 1260]]></category>

		<category><![CDATA[lake district]]></category>

		<category><![CDATA[scanner]]></category>

		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=107</guid>
		<description><![CDATA[since time immemorial (well, almost) i own a private epson 1260 scanner. a couple of weeks ago i &#8212; foolishly, as it turns out now &#8212; offered to my in-laws to copy all lake district articles out of our country walking collections. foolishly, because i realized that country walking must have their offices on one [...]]]></description>
			<content:encoded><![CDATA[<p>since time immemorial (well, almost) i own a private epson 1260 scanner. a couple of weeks ago i &#8212; foolishly, as it turns out now &#8212; offered to my in-laws to copy all <a href="http://en.wikipedia.org/wiki/Lake_District">lake district</a> articles out of our <em><a href="http://www.livefortheoutdoors.com/">country walking</a></em> collections. foolishly, because i realized that country walking must have their offices on one of those lonesome, remote fells: there are lots and lots and lots and lots of lake district articles and routes in <em>country walking</em>.</p>

<p>i started off with the <code>gscan2pdf</code> tool &#8212; really slow to start up, at that speed summer would be over before i had everything scanned in and converted to PDF. not good.</p>

<p>next try: <code>kooka</code>, KDE 3.5&#8217;s own scan tool &#8212; faster, but non-intuitive, you apparently have to rename and save each individual file. winter time before i&#8217;d be done.</p>

<p>i noticed, once again, that the epson 1260 does have a <em>scan</em> button (and a <em>print</em> and a <em>mail</em> and a <em>web</em> button) &#8212; if only that were working under linux. last time i checked for a tool (gazillion years ago), there was nothing, zilch, nix available to utilize that button. googling for plustek and scan button (the scan chipset inside the epson 1260 is a plustek chipset) this time <strong>did</strong> turn up something: <code>scanbuttond</code>! and even better: it&#8217;s available as a ubuntu package in hardy heron:</p>

<pre><code>% apt-get install scanbuttond
</code></pre>

<p>installed the beast. following the instructions on the <a href="http://gentoo-wiki.com/Scanner_buttons_and_one-touch_scanning#sample_scripts">gentoo wiki</a> gave me a working one-button-scan process! i modified the scan script slightly to deposit the fresh scan in my <code>$HOME/tmp/scans/</code> directory.</p>

<p>converting a bunch of JPG images into a single PDF is also quite easy: you imagemagick&#8217;s <code>convert</code> command:<sup id="fnref:1d1f6b46c63342fd6888d838add91b5e1"><a href="#fn:1d1f6b46c63342fd6888d838add91b5e1" rel="footnote">1</a></sup></p>

<pre><code>% convert *.jpeg allinone.pdf
</code></pre>

<p>voila!</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:1d1f6b46c63342fd6888d838add91b5e1">
<p>if you haven&#8217;t installed that yet, it&#8217;s a simple</p>

<pre><code>% apt-get install imagemagick
</code></pre>

<p>away.&#160;<a href="#fnref:1d1f6b46c63342fd6888d838add91b5e1" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/05/18/we-have-buttons/feed/</wfw:commentRss>
		</item>
		<item>
		<title>automatically downloading LindenLab™ account statements</title>
		<link>http://xyzzyxyzzy.net/2008/05/15/automatically-downloading-lindenlab%e2%84%a2-account-statements/</link>
		<comments>http://xyzzyxyzzy.net/2008/05/15/automatically-downloading-lindenlab%e2%84%a2-account-statements/#comments</comments>
		<pubDate>Thu, 15 May 2008 13:14:22 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[hacking]]></category>

		<category><![CDATA[void]]></category>

		<category><![CDATA[account statements]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[secondlife]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=106</guid>
		<description><![CDATA[our lab &#8220;owns&#8221; an island on the LindenLab grid and we&#8217;ve created a &#8220;lab&#8221; 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&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zurich.ibm.com/csc/process/virtualuniverses.html">our lab</a> &#8220;owns&#8221; an island on the LindenLab grid and we&#8217;ve created a &#8220;lab&#8221; 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&#8217;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)&#8230;</p>

<p>&#8230;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.</p>

<p>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 <a href="http://wwwsearch.sourceforge.net/mechanize/"><code>mechanize</code> python package</a> turned out to be an invaluable tool.</p>

<p>here&#8217;s the script in all its glory:</p>

<textarea name="code" class="python:showcolumns" cols="60" rows="10">
#!/usr/bin/python
# -*- encoding: utf-8 -*-

import re
import smtplib
import time

from email.mime.text import MIMEText
from mechanize import Browser
from optparse import OptionParser
from ConfigParser import ConfigParser

class Ooops(Exception):
    def __init__(self, msg):
        self.value = msg

    def __str__(self):
        return msg

if __name__ == &#8216;__main__&#8217;:

    try:
        parser = OptionParser()
        parser.add_option(&#8217;-c&#8217;, &#8216;&#8211;config&#8217;, dest = &#8216;config&#8217;, 
                          help = &#8216;path to configuration file&#8217;, metavar = &#8216;CONFIG-FILE&#8217;)
        (options, args) = parser.parse_args()

        if not options.config:
            parser.error(&#8217;&#8211;config option mandatory&#8217;)

        config = ConfigParser()
        config.readfp(open(options.config))

        slURL = config.get(&#8217;lindenlab&#8217;, &#8216;url&#8217;)
        slAvatarFirstname = config.get(&#8217;lindenlab&#8217;, &#8216;firstname&#8217;)
        slAvatarLastname = config.get(&#8217;lindenlab&#8217;, &#8216;lastname&#8217;)
        slAvatarPassword = config.get(&#8217;lindenlab&#8217;, &#8216;password&#8217;)

        browser = Browser()

        # open http://www.secondlife.com/ and select the &#8220;resident login&#8221; link
        browser.open(slURL)
        browser.follow_link(text_regex = r&#8217;Resident\s*Login&#8217;, nr = 0)

        # fill out the login form
        browser.select_form(nr = 0)
        browser['form[username]&#8216;] = slAvatarFirstname
        browser['form[lastname]&#8216;] = slAvatarLastname
        browser['form[password]&#8216;] = slAvatarPassword
        browser.submit()

        # page title should read: &#8220;Second Life | Your Account: WayLate Binder&#8221;
        rePageTitle = re.compile(r&#8217;Second\s+Life\s+\|\s+Your Account:&#8217;)
        match = rePageTitle.match(browser.title())
        if not match: raise Ooops(&#8217;not on account page&#8217;)

        # select account history link and retrieve the statement
        statement_page = browser.follow_link(text_regex = r&#8217;Account\s+History&#8217;, nr = 0)
        statement = statement_page.get_data()

        reURL = re.compile(r&#8217;^(?P<host>https?://[^/]+)&#8217;)
        match = reURL.match(browser.geturl())
        if not match: raise Ooops(&#8217;no host URL&#8217;)
        url = match.groups(&#8217;host&#8217;)

        reHref = re.compile(r&#8217;href\s*=\s*&#8221;/&#8217;)
        statement = reHref.sub(&#8217;href=&#8221;%s/&#8217; % url, statement)

        browser.close()

        msgSubject = config.get(&#8217;mail&#8217;, &#8217;subject&#8217;)
        msgSubject = time.strftime(msgSubject)
        
        msgTo = config.get(&#8217;mail&#8217;, &#8216;to&#8217;)
        msgFrom = config.get(&#8217;mail&#8217;, &#8216;from&#8217;)
        msgCc = config.get(&#8217;mail&#8217;, &#8216;cc&#8217;)

        msgEnvTo = msgTo.split(&#8217;,')
        if msgCc: 
            msgEnvTo += msgCc.split(&#8217;,')

        msg = MIMEText(statement, &#8216;html&#8217;, &#8216;UTF-8&#8242;)
        msg['Subject'] = msgSubject
        msg['To'] = msgTo
        msg['Cc'] = msgCc
        msg['From'] = msgFrom

        smtp = smtplib.SMTP(&#8217;localhost&#8217;)
        smtp.sendmail(msgFrom, msgEnvTo, msg.as_string())
        smtp.close()
    
    except Ooops, e:
        print &#8216;oops: failed to retrieve account statement: %s&#8217; % e.value

</textarea>

<p>it reads the avatar name, password and so forth from a configuration file:</p>

<pre>
[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
</pre>

<p>adapt the config file to your taste and invoke as follows:</p>

<pre><code>sl-account-statement --config config.cfg
</code></pre>

<p>voila!</p>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/05/15/automatically-downloading-lindenlab%e2%84%a2-account-statements/feed/</wfw:commentRss>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>RESTful regions</title>
		<link>http://xyzzyxyzzy.net/2008/05/14/restful-regions/</link>
		<comments>http://xyzzyxyzzy.net/2008/05/14/restful-regions/#comments</comments>
		<pubDate>Wed, 14 May 2008 11:49:01 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[void]]></category>

		<category><![CDATA[opensim]]></category>

		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=105</guid>
		<description><![CDATA[we are currently trying to figure out what the best approach for a REST 
&#8220;API&#8221; 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 &#8212;


GET returns an array of (UUID, name, x location, y location, region&#8217;s REST URL)
POST would create a region

http://opensim.foobar.org:9000/admin/regions/4b787c46-1e3c-40ae-9494-2c924428f8e5/


GET would [...]]]></description>
			<content:encoded><![CDATA[<p>we are currently trying to figure out what the best approach for a REST 
&#8220;API&#8221; for regions is and would like to solicit comments  <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<p>currently the idea is to have a scheme as follows:</p>

<ul>
<li>http://opensim.foobar.org:9000/admin/regions &#8212;

<ul>
<li>GET returns an array of (UUID, name, x location, y location, region&#8217;s REST URL)</li>
<li>POST would create a region</li>
</ul></li>
<li>http://opensim.foobar.org:9000/admin/regions/4b787c46-1e3c-40ae-9494-2c924428f8e5/

<ul>
<li>GET would return detailed information about region</li>
<li>DELETE would delete region</li>
<li>PUT would update region information</li>
</ul></li>
<li>http://opensim.foobar.org:9000/admin/regions/4b787c46-1e3c-40ae-9494-2c924428f8e5/name

<ul>
<li>GET would return name of region</li>
<li>PUT would update name of region</li>
<li>(similar for other region attributes if it makes sense)</li>
</ul></li>
</ul>

<p>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).</p>

<p>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?</p>

<ul>
<li>http://opensim.foobar.org/admin/avatars

<ul>
<li>GET returns list of known avatars?</li>
<li>POST creates account?</li>
</ul></li>
<li>http://opensim.foobar.org/admin/avatars/430f1da7-0e35-4c0f-985d-15046c077967/

<ul>
<li>GET returns detailed information about avatar?</li>
<li>PUT updates?</li>
<li>DELETE deletes?</li>
</ul></li>
<li>http://opensim.foobar.org/admin/avatars/430f1da7-0e35-4c0f-985d-15046c077967/inventory/

<ul>
<li>GET returns inventory listing?</li>
<li>POST adds items to inventory?</li>
<li>DELETE deletes inventory items?</li>
</ul></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/05/14/restful-regions/feed/</wfw:commentRss>
		<georss:point featurename="[47.131074826701266, 8.747992515563965]">47.131074826701266 8.747992515563965</georss:point>
	</item>
		<item>
		<title>which serialization format for OpenSim REST services?</title>
		<link>http://xyzzyxyzzy.net/2008/05/14/serialization-format-for-opensim-rest-services/</link>
		<comments>http://xyzzyxyzzy.net/2008/05/14/serialization-format-for-opensim-rest-services/#comments</comments>
		<pubDate>Tue, 13 May 2008 22:04:19 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[void]]></category>

		<category><![CDATA[.NET]]></category>

		<category><![CDATA[AJAX]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[JSON]]></category>

		<category><![CDATA[LLSD]]></category>

		<category><![CDATA[opensim]]></category>

		<category><![CDATA[serialization]]></category>

		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=104</guid>
		<description><![CDATA[we are currently looking at adding REST support to the RemoteAdmin 
plugin (other stuff to follow) &#8212; 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 [...]]]></description>
			<content:encoded><![CDATA[<p>we are currently looking at adding <a href="http://en.wikipedia.org/wiki/REST">REST</a> support to the RemoteAdmin 
plugin (other stuff to follow) &#8212; 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.</p>

<p>looking at the way we currently deal with serialization we either</p>

<ul>
<li>use LLSD where mandated by secondlife (e.g., CAPS)</li>
<li>use .NET&#8217;s <code>System.Xml.XmlSerializer</code></li>
<li>use XmlRpc serialization (which goes back to System.Xml)</li>
</ul>

<p>LLSD is being used by linden lab&#8217;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.</p>

<p>XmlSerializer is &#8220;built in&#8221;. on the other hand it&#8217;s wordy and more 
complex to parse; also, it doesn&#8217;t distinguish between the number 4711 
and the string &#8220;4711&#8243; &#8212; you have to know that a certain tag contains a 
string (or a number).</p>

<p>another alternative that has been suggested is <a href="http://www.json.org/">JSON</a>. 
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 
<a href="http://code.google.com/p/jsonexserializer/">jsonexserializer</a> &#8212; BSD 
license &#8212; makes it easy to use from C#.</p>

<p>personally, i&#8217;ve started to like JSON because it&#8217;s lean and easy to use 
&#8212; but i&#8217;d like to hear from you guys what you think about this. so, give it a vote!</p>

<p>Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.</p>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/05/14/serialization-format-for-opensim-rest-services/feed/</wfw:commentRss>
		<georss:point featurename="[47.131074826701266, 8.747992515563965]">47.131074826701266 8.747992515563965</georss:point>
	</item>
		<item>
		<title>updated mono build script for hardy heron and mono 1.9.1</title>
		<link>http://xyzzyxyzzy.net/2008/05/08/updated-mono-build-script-for-hardy-heron-and-mono-191/</link>
		<comments>http://xyzzyxyzzy.net/2008/05/08/updated-mono-build-script-for-hardy-heron-and-mono-191/#comments</comments>
		<pubDate>Thu, 08 May 2008 12:23:55 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[hacking]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[libsecondlife]]></category>

		<category><![CDATA[mono]]></category>

		<category><![CDATA[opensim]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=103</guid>
		<description><![CDATA[mucking around with trying to get mono to run on hardy heron (and my custom compiled kernel1) i ended up with a mutilated mono installation. just following my previous recipe didn&#8217;t work out too well for the mono document browser&#8230;duh&#8230;:-(

so, i took sean&#8217;s shell script and gave that a spin. that worked mostly &#8212; i [...]]]></description>
			<content:encoded><![CDATA[<p>mucking around with <a href="http://xyzzyxyzzy.net/2008/04/30/going-from-gutsy-gibbon-to-hardy-heronor-muawhaha-mono-is-hosed/">trying to get mono to run on hardy heron</a> (and my custom compiled kernel<sup id="fnref:40037605fac8377182036a7b6b8e70721"><a href="#fn:40037605fac8377182036a7b6b8e70721" rel="footnote">1</a></sup>) i ended up with a mutilated mono installation. just following my <a href="http://xyzzyxyzzy.net/2008/03/27/installing-mono-19/">previous recipe</a> didn&#8217;t work out too well for the mono document browser&#8230;duh&#8230;:-(</p>

<p>so, i took <a href="http://dague.net/2008/03/29/mono-19-install-script/">sean&#8217;s shell script</a> and gave that a spin. that worked mostly &#8212; i had to adapt it to mono 1.9.1 for the mono-doc stuff and also install additional mono packages. here&#8217;s the revised edition (click <a href="http://xyzzyxyzzy.net/wp-content/uploads/2008/05/mono-build.sh">here</a> for a downloadable version):</p>

<pre>
#!/bin/sh

BUILDDIR=/usr/src/local/mono/1.9.1

# This is needed to pick up our built mono for commands
export PATH=/usr/local/bin:$PATH 

apt-get install -y build-essential bison gawk
apt-get install -y libglib2.0-dev
apt-get install -y libpng12-dev libx11-dev libfontconfig1-dev
apt-get install -y libfreetype6-dev libjpeg62-dev libtiff4-dev
apt-get install -y libungif4-dev libexif-dev libcairo2-dev
apt-get install -y libpango1.0-dev libgtk2.0-dev libglade2-dev
apt-get install -y libgnome2-dev libgnomecanvas2-dev libgnomeui-dev
apt-get install -y libgnomeprint2.2-dev libgnomeprintui2.2-dev
apt-get install -y libpanel-applet2-dev libgtksourceview-dev
apt-get install -y libgtkhtml3.14-dev
apt-get install -y intltool

apt-get remove 'mono-*' libgdiplus

mkdir -p $BUILDDIR
cd $BUILDDIR

wget -c http://go-mono.com/sources/libgdiplus/libgdiplus-1.9.tar.bz2
tar xvf libgdiplus-1.9.tar.bz2
cd libgdiplus-1.9
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://go-mono.com/sources/mono/mono-1.9.1.tar.bz2
tar xvf mono-1.9.1.tar.bz2
cd mono-1.9.1
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://switch.dl.sourceforge.net/sourceforge/nant/nant-0.86-beta1-src.tar.gz
tar xvf nant-0.86-beta1-src.tar.gz
cd nant-0.86-beta1
make 
make install
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/gtk-sharp212/gtk-sharp-2.12.0.tar.bz2
tar xvf gtk-sharp-2.12.0.tar.bz2
cd gtk-sharp-2.12.0
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/gecko-sharp2/gecko-sharp-2.0-0.13.tar.bz2
tar xvf gecko-sharp-2.0-0.13.tar.bz2
cd gecko-sharp-2.0-0.13
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://go-mono.com/sources/gnome-sharp2/gnome-sharp-2.16.1.tar.gz
tar xvf gnome-sharp-2.16.1.tar.gz
cd gnome-sharp-2.16.1
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://go-mono.com/sources/gtksourceview-sharp2/gtksourceview-sharp-2.0-0.12.tar.bz2
tar xvf gtksourceview-sharp-2.0-0.12.tar.bz2
cd gtksourceview-sharp-2.0-0.12
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/gnome-desktop-sharp2/gnome-desktop-sharp-2.20.1.tar.bz2
tar xvf gnome-desktop-sharp-2.20.1.tar.bz2
cd gnome-desktop-sharp-2.20.1
./configure --prefix=/usr/local
make
make install
cd ..

cd mono-1.9.1
wget  -c http://go-mono.com/sources/monodoc/monodoc-1.9.zip
unzip monodoc-1.9.zip
cd monodoc-1.9
./configure --prefix=/usr/local
make
make install
cd ../..

wget -c http://go-mono.com/sources/mono-tools/mono-tools-1.9.tar.bz2
tar xvf mono-tools-1.9.tar.bz2
cd mono-tools-1.9
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/mono-debugger/mono-debugger-0.60.tar.bz2
tar xvf mono-debugger-0.60.tar.bz2
cd mono-debugger-0.60
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/heap-buddy/heap-buddy-0.2.tar.gz
tar xvf heap-buddy-0.2.tar.gz
cd heap-buddy-0.2
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/mono-addins/mono-addins-0.3.1.tar.bz2
tar xvf mono-addins-0.3.1.tar.bz2
cd mono-addins-0.3.1
./configure --prefix=/usr/local
make
make install
cd ..

wget -c http://ftp.novell.com/pub/mono/sources/monodevelop/monodevelop-1.0.tar.bz2
tar xvf monodevelop-1.0.tar.bz2
cd monodevelop-1.0
./configure --prefix=/usr/local
make
make install
cd ..
</pre>

<p><strong>note: you might want to adapt the setting of <code>BUILDDIR</code>!</strong></p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:40037605fac8377182036a7b6b8e70721">
<p>yes, i&#8217;m not using the ubuntu supplied kernel as</p>

<ol>
<li>the suspend&#8211;resume stuff is just not working on my thinkpad X60(s), and</li>
<li>the iwl3945 WLAN driver just doesn&#8217;t grok our companies IEEE80211X setup <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </li>
</ol>

<p><a href="#fnref:40037605fac8377182036a7b6b8e70721" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/05/08/updated-mono-build-script-for-hardy-heron-and-mono-191/feed/</wfw:commentRss>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>fixing absurdly high wordpress CPU loads&#8230;</title>
		<link>http://xyzzyxyzzy.net/2008/05/02/fixing-absurdly-high-wordpress-cpu-loads/</link>
		<comments>http://xyzzyxyzzy.net/2008/05/02/fixing-absurdly-high-wordpress-cpu-loads/#comments</comments>
		<pubDate>Fri, 02 May 2008 17:32:36 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[hacking]]></category>

		<category><![CDATA[apache]]></category>

		<category><![CDATA[CPU load]]></category>

		<category><![CDATA[wordpress 2.5]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=102</guid>
		<description><![CDATA[ever since i switched to wordpress 2.5 (and 2.5.1) i was experiencing absurdly high CPU loads whenever i posted a new blog entry or changed a page &#8212; culminating in loads of 124+ yesterday, effectively bringing our server to a standstill!  not good. not good at all.

a ps ax &#124; grep apache2 &#124; wc [...]]]></description>
			<content:encoded><![CDATA[<p>ever since i switched to wordpress 2.5 (and 2.5.1) i was experiencing absurdly high CPU loads whenever i posted a new blog entry or changed a page &#8212; culminating in loads of <strong>124+</strong> yesterday, effectively bringing our server to a standstill! <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> not good. not good at all.</p>

<p>a <code>ps ax | grep apache2 | wc -l</code> revealed a rocking <strong>104</strong> apache2 processes running! yikes! all with about 21MB of memory usage (at least), no wonder the poor box was thrashing for dear life&#8230;</p>

<p>looking at what ubuntu had installed i found that (a) we had <code>apache-prefork</code> running  and (b) switching to <code>apache-worker</code><sup id="fnref:787de9e8e5d37c74922c6ecb1042ff151"><a href="#fn:787de9e8e5d37c74922c6ecb1042ff151" rel="footnote">1</a></sup> would remove <code>mod_php5</code> &#8212; which we need to have all the PHP scripts running (including this blog). hmmm.</p>

<p>some googling later it transpired that switching to thread-based apache was the right thing to do and also, that the fast CGI module <code>mod_fcgid</code> would be the solution to the disappearing php5 apache module.</p>

<p>here&#8217;s what i did: first install threaded apache</p>

<pre><code>% apt-get install apache2-mpm-worker
</code></pre>

<p>then, install the fcgid module</p>

<pre><code>% apt-get install libapache2-mod-fcgid
</code></pre>

<p>then, modify <code>/etc/apache2/mods-available/fcgid.conf</code> to read as follows:</p>

<pre><code>&lt;IfModule mod_fcgid.c&gt;
    AddHandler    fcgid-script .php
    FCGIWrapper   /usr/local/sbin/php-fcgi .php

    SocketPath    /var/lib/apache2/fcgid/sock
    SharememPath  /var/lib/apache2/fcgid/shm
    IPCConnectTimeout 60
&lt;/IfModule&gt;
</code></pre>

<p>create <code>/usr/local/sbin/php-fcgi .php</code> with the following content:</p>

<pre><code>#!/bin/sh
PHPRC="/etc/php5/apache2"
export PHPRC
PHP_FCGI_CHILDREN=1
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /usr/bin/php5-cgi
</code></pre>

<p>now, all that&#8217;s left to do, is ensure that for each virtual host you have <code>ExecCGI</code> enabled:</p>

<pre><code>&lt;Directory /var/www/xyzzyxyzzy.net/&gt;
        Options ExecCGI Indexes FollowSymLinks MultiViews
        AllowOverride All

        Order allow,deny
        Allow from all
&lt;/Directory&gt;
</code></pre>

<p>restart your apache and we are back in business &#8212; on my box the load is now back in sane regions: instead of 124+ we are back at 0.52 for posting a blog entry (at most)!</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:787de9e8e5d37c74922c6ecb1042ff151">
<p>the thread based apache.&#160;<a href="#fnref:787de9e8e5d37c74922c6ecb1042ff151" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/05/02/fixing-absurdly-high-wordpress-cpu-loads/feed/</wfw:commentRss>
		<georss:point featurename="[49.592996386465515, 11.018568277359009]">49.592996386465515 11.018568277359009</georss:point>
	</item>
		<item>
		<title>installing libgpod from SVN on ubuntu hardy heron</title>
		<link>http://xyzzyxyzzy.net/2008/05/02/installing-libgpod-from-svn-on-ubuntu-hardy-heron/</link>
		<comments>http://xyzzyxyzzy.net/2008/05/02/installing-libgpod-from-svn-on-ubuntu-hardy-heron/#comments</comments>
		<pubDate>Fri, 02 May 2008 12:22:03 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[hacking]]></category>

		<category><![CDATA[amarok]]></category>

		<category><![CDATA[hardy heron]]></category>

		<category><![CDATA[ipod]]></category>

		<category><![CDATA[libgpod]]></category>

		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=101</guid>
		<description><![CDATA[having bitten the bullet and upgraded from feisty fawn to hardy heron i had to reinstall my amorok from svn to get proper support for artwork again&#8230;which requires an installation of libgpod from svn&#8230;which on hardy heron requires gdk-pixbuf&#8230;

&#8230;just installing libgdk-pixbuf2 and libgdk-pixbuf-dev didn&#8217;t satisfy libgpod&#8217;s configure script though. what did the trick was

% apt-get [...]]]></description>
			<content:encoded><![CDATA[<p>having bitten the bullet and <a href="http://www.ubuntu.com/getubuntu/upgrading">upgraded from feisty fawn to hardy heron</a> i had to reinstall my amorok from svn to get proper support for artwork again&#8230;which requires an installation of <a href="http://sourceforge.net/svn/?group_id=67873">libgpod from svn</a>&#8230;which on hardy heron requires gdk-pixbuf&#8230;</p>

<p>&#8230;just installing <code>libgdk-pixbuf2</code> and <code>libgdk-pixbuf-dev</code> didn&#8217;t satisfy libgpod&#8217;s <code>configure</code> script though. what did the trick was</p>

<pre><code>% apt-get install libgtk2.0-dev
</code></pre>

<p>compiling amarok now&#8230;</p>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/05/02/installing-libgpod-from-svn-on-ubuntu-hardy-heron/feed/</wfw:commentRss>
		<georss:point featurename="[49.592996386465515, 11.018568277359009]">49.592996386465515 11.018568277359009</georss:point>
	</item>
		<item>
		<title>going from gutsy gibbon to hardy heron&#8230;or: muawhaha, mono is hosed&#8230;</title>
		<link>http://xyzzyxyzzy.net/2008/04/30/going-from-gutsy-gibbon-to-hardy-heronor-muawhaha-mono-is-hosed/</link>
		<comments>http://xyzzyxyzzy.net/2008/04/30/going-from-gutsy-gibbon-to-hardy-heronor-muawhaha-mono-is-hosed/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 21:03:38 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
		
		<category><![CDATA[from the grid]]></category>

		<category><![CDATA[hacking]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[libsecondlife]]></category>

		<category><![CDATA[mono]]></category>

		<category><![CDATA[opensim]]></category>

		<category><![CDATA[ubuntu hardy heron]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=100</guid>
		<description><![CDATA[just thought i&#8217;d let you participate in today&#8217;s adventure: triggered by ansgar commenting on ubuntu offering him to upgrade to ubuntu 8.04 &#8220;hardy heron&#8221; i though, &#8220;hmm, good idea, let&#8217;s do a quick update&#8221;&#8230;

&#8230;well, a couple of hours later i seemed to be back in business, hardy heron was installed on &#8220;my&#8221; x60 and i [...]]]></description>
			<content:encoded><![CDATA[<p>just thought i&#8217;d let you participate in today&#8217;s adventure: triggered by ansgar commenting on ubuntu offering him to upgrade to ubuntu 8.04 &#8220;hardy heron&#8221; i though, &#8220;hmm, good idea, let&#8217;s do a quick update&#8221;&#8230;</p>

<p>&#8230;well, a couple of hours later i seemed to be back in business, hardy heron was installed on &#8220;my&#8221; x60 and i was just about do another OpenSim build &#8212; when i noticed that <code>nant</code> was <em>seg faulting!</em> now, wait a moment, it clearly was not supposed to do that. ok, can happen, what with new libs and all that. so, let&#8217;s walk on over to <code>/usr/local/src/mono/nant-0.86b</code> and do a re-install. should be easy, peasy&#8230;</p>

<p>&#8230;except it wasn&#8217;t: mono&#8217;s compiler <code>mcs</code> kept seg faulting as well! hmmm.</p>

<p>ok. let&#8217;s reinstall mono. following <a href="http://xyzzyxyzzy.net/2008/03/27/installing-mono-19/">my own script</a> i started the re-install &#8212; which crashed as well after about 5min of mucking around.</p>

<p>panic stations!</p>

<p>googling around it transpired that this would happen when running hardy heron with a custom compiled kernel of pre-2.6.24 vintage &#8212; which i was <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>

<p>i&#8217;m happy to report that with 2.6.25 mono is running again <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2008/04/30/going-from-gutsy-gibbon-to-hardy-heronor-muawhaha-mono-is-hosed/feed/</wfw:commentRss>
		<georss:point featurename="[49.592996386465515, 11.018568277359009]">49.592996386465515 11.018568277359009</georss:point>
	</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.762 seconds -->
