1. Oktober 2009

Weblin wiederbeleben mit 2 XML Dateien

Im Forum des Open Virtual World Projekts hat jemand einen Weg gepostet mit dem man Weblin wieder betreiben kann obwohl die Server abgeschaltet worden sind. Basierend auf diesen Informationen und nach meinen eigenen Tests kann ich bestätigen, dass es geht.

Es ist sogar noch einfacher und ohne Programmierkenntnisse.

Man muss nur auf einem öffentlichen Jabber Server einen Jabber Account anlegen (z.B. http://register.jabber.org). Dann auf einem Web-Space ein paar Dateien hinlegen und Weblin konfigurieren, dass es diese Dateien benutzt. Man braucht 2 XML Dateien. Dann natürlich ein Bild als Avatar und je nachdem, ob man ein animiertes Avatar will, noch ein XML mit GIF Animationen.

Schnell mal ausprobieren:

In Registry eintragen...

[HKEY_CURRENT_USER\Software\zweitgeist\Firebat\2.0.0\Config\Operation]
PlatformLoginURL=http://www.ydentiti.org/test/Planta/login.xml
Weblin neu starten ... und du bist Planta. Aber wir wollen ja nicht jeder Planta sein, deshalb...

So geht es:

Die 2 wichtigsten Dateien sind login.xml und identity.xml. Als Beispiele habe ich diese 2 Dateien gemacht und auf meinen eigenen Webserver gelegt:
http://www.ydentiti.org/test/Planta/login.xml
http://www.ydentiti.org/test/Planta/identity.xml
In login.xml steht der URL von identity.xml und man muss den JabberAccount, also Jabber Passwort ("secret"), Jabber Username ("planta") und Jabber Server ("jabber.org") eintragen.

In identity.xml ist ein Link auf das Avatarbild:
http://ydentiti.org/test/Planta/still.gif
Jetzt muss man nur noch Weblin beibringen, dass es das login.xml benutzt beim Starten. Dazu einen Registry Key setzen. Beispiel:
[HKEY_CURRENT_USER\Software\zweitgeist\Firebat\2.0.0\Config\Operation]
PlatformLoginURL=http://www.ydentiti.org/test/Planta/login.xml
Natürlich muss hier der richtige URL von deinem Web-Space stehen. Vielleicht programmiert Marmel ja ein Tool dafür :-)

Ach ja, wo bekommt man die Software her? Einfach von eine(r|m) Freund(in|) den Ordner C:\Programme\weblin kopieren. Kein Installer nötig.

Für Fortgeschrittene:

Da der PlatformLoginURL öffentlich ist, kann jeder dieses Avatar (und den Jabber Account) benutzen. Weblin fragt beim Start zwar ein Passwort. Das wird aber nicht verwendet, da bei PlatformLoginURL ein statischer URL eingetragen ist und nicht eine echte Web-Applikation, die das Passwort prüfen würde. Wenn man nicht will, dass andere das gleiche Avatar verwenden, muss man wie in dem Forum Post vorgehen und statt login.xml ein login.php programmieren, dass HTTP Basic Authentication prüft. Alternativ kann man auch das login.xml durch .htaccess schützen. Vorsicht: dabei nicht Zugriff auf die anderen Dateien verbieten. Man kann das login.xml dafür in ein anderes Verzeichnis legen und den PlatformLoginURL entsprechend setzen.

Für Fortgeschrittene:

Man kann den PlatformLoginURL auch in Firebat.sreg eintragen, wenn man mit leerer Registry startet. Registry überschreibt Einstellungen in Firebat.sreg.

Für Fortgeschrittene:

In identity2.xml ist auch ein Link auf eine Animationsdatei:
http://ydentiti.org/test/Planta/avatar.xml
die auf die GIFs mit den Animationen verweist. Dann hat der Weblin auch Aktionen und bewegt sich.

Notwendig ist mindestens:
<config xmlns="http://schema.bluehands.de/character-config" version="1.0">
<sequence group="idle" name="idle1" probability="1000" type="status" in="standard" out="standard">
<animation src="still.gif" />
</sequence>
<sequence group="moveleft" name="moveleft1" probability="1000" type="basic" in="moveleft" out="moveleft">
<animation dx="-100" src="left.gif" />
</sequence>
<sequence group="moveright" name="moveright1" probability="1000" type="basic" in="moveright" out="moveright">
<animation dx="100" src="right.gif" />
</sequence>
</config>
Zum Start am Besten dieses kopieren und nur eigene GIFs verwenden. Das XML und die GIFs werden im Client gecached. Wenn man was ändert und die Änderung sehen will, dann Client Cache löschen (C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\zweitgeist\cache).

Format in Kürze:
  • <config> hat mehrere <sequence>
  • <sequence> hat ein <animation>
  • <sequence> hat Attribut "group". Das ist die Aktion, laufen, stehen, schlafen, winken. Es kann mehrer mit gleicher "group" geben, dann sucht Weblin eine der <sequence>s zufällig aus gesteuert durch die relative Häufigkeit ("probability").
  • <sequence> hat Attribut "name". Muss nur eindeutig sei, aber beliebig.
  • <sequence> hat Attribut "probability": Relative Häufigkeit der <sequence> innerhalb einer "group"
  • <sequence> hat Attribut "type" mit Werten "status", "basic", "emote". "emote" tauchen als Aktionen im Avatar-Menu auf.
  • <sequence> Attribute "in", "out" kann man mal ignorieren
  • <animation> hat nur das Attribut "src". GIF URL absolut oder relative zu der XML Datei (mit oder ohne http://...)

_happy_reviving()

PS:
Liebe Dunkle Seite der Macht: Das sind alles öffentliche Informationen, bzw welche, die schon vor 2006 bekannt waren. Keine Chance Ärger zu machen. Weblin ist einfach so gut programmiert, dass sowas geht. Vielen Dank auch an das Programmierteam, dass es trotz neuem Accountwizard so geblieben ist.

25. September 2009

Google Sidewiki

Google launched its new Sidewiki feature. Sidewiki opens an annotation sidebar on every Web page. Sidewiki is a Google Toolbar feature. You can leave notes (annotations) on every Web page and see notes of other people. The annotations appear is a sidebar. This is not the browser sidebar, but an extension driven page element. The feature looks quite advanced. It has rating system integrated, crowd driven spam identification, you can choose to see only annotations in your language. While posting an annotation you can send the same text also to your blogs.

Sidewiki is not real virtual presence, as you do not see the people who are on the page at the same time. Sidewiki is also not a new concept. Annotations have been here before, as early as 1999. But Sidewiki is important for virtual presence, because it shows, that a major player is moving closer. A big advantage of annotations compared to virtual presence is that annotations persist. Chats on a Web page are transient. They are gone after you leave. Annotations stay (for some time). You can leave your mark in the world. That's what people want. They want to create something that persists.

Important for virtual presence is, that Google invests in the notion, that Web pages are places. They are not just an anchor for places, like in Lively. The plain Web page identified by it's URL is a place where things happen.

_happy_wikking()

The usual weblin annotation: when a "great manager" told investors, that virtual goods would not work as a business model, he proposed "annotations". What a disaster would that have been to get Google as a direct competitor. Oh right, the decision was correct, because nobody could have known. I heared that before. Being right because of not knowing seems to be a constant.

24. September 2009

TwiX - Jabber Twitter Gateway Version 0.4.8

I was spamming my twitter account accidentally. Actually it was my Jabber/Twitter gateway, which got an XMPP error message from a broken jabber server and tweeted the error, then sent me a confirmation, got another error message and tweeted it again. Infinite loop!

The main problem is, that the error message looks very much like a good message. That's a Jabber "feature". A good message looks like:

<message from="JID" to="JID">
<body>...Started</body>
</message>
If that produces an error, then comes back:
<message from="JID">to="JID"type="error">
<body>...Started</body>
  <error code="500" type="wait">
  <internal-server-error xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" />
  </error>
</message>
...which looks very much like the original message, if you do not check for the type="error" bit and just forward the body to the twitter API.

Fixed.

TwiX has now been updated to version 0.4.8. Get it here.

_happy_looping()

16. September 2009

ejabberd crash solved by raising number of network connections

I was bothered by ejabberd crashes. Suddenly it started to crash quicky. The crash dumps said something like:

eheap_alloc: Cannot allocate 747325720 bytes of memory (of type "heap")
and:
eheap_alloc: Cannot allocate 934157120 bytes of memory (of type "old_heap").
I tried the installer, tried compiling erlang and ejabberd from source. I usually run ejabber in a virtual server. I tried on the native host. Nothing helped. We had a similar problem before with a memory bug related to mnesia tables where a server with 5000 clients reaches 3 GB in 5 days and crashes. That case was solved by upgrading the erlang runtime from R12B-3 to R12B-5.

But in this case it needed only 5 minutes and 1000 users to suck up the entire system memory. This was different. The number of about 1000 client connections was the constant of all crashes. @zeank suspected that the problem is the limit of open file descriptors, 1024 by default. The open file descriptor limit means also the max number of TCP (client) connections. Setting this to a higer value, e.g. 32.000 solves the problem.

In practice: insert into ejabberdctl
after:
ERL_MAX_PORTS=32000
the line:
ulimit -n $ERL_MAX_PORTS
_happy_ejabbering()

2. September 2009

Twitter Microtagging = Personal Tags

It is time for structure in Twitter. I will now start microtagging my tweets so that followers can filter and read only what they are interested in.

Hashtags are currently used for several purposes:

  1. Global tagging: is done in the spirit of tag-clouds to support global search for topics. example: "Official hashtag for Barcamp Bangkok 3 is #barcampbkk3".
  2. Comment tagging: is a very recent development. People started to add single word comments which support or augment the original tweet in form of hashtags. Example: "Got my iPhone today #happy". Nobody would search for #happy. Its just a funny (and completely valid) mis-use of tagging.
  3. Data tagging: to use Twitter as a data channel for later evaluation. Example: "My current #weight 72.2 kg" with the convention that after #weight follow a number and a unit. Example: "I am now at Los Angeles Airport #geoloc 33.94 -118.40" with the convention that after #geoloc follow longitude and latitude. Rarely used though and probably yet underrated.
  4. Follower phishing: is done by adding as many hashtags as possible to the tweet in the hope to attract attention of followers, specifically auto-followers which are triggered by certain keywords. Example: I once was followed within seconds by @timmendorf when I twittered #helgoland (both are beach holiday resorts).
Hashtags are the community driven Twitter way to give a litte bit of structure. But this is not enough. What we need is a way to filter relevant information from streams. I am tweeting different parts of my life. I tweet about my work, about various projects, about my lunch, about the kids, about fun stuff I find. But, there are followers who are not interested in my kids. My familiy is not interested in technical tweets. Parts of it is always spam for some of my followers. They have no way to filter only the interesting tweets. There should be a way for me to tag my tweets with my own personal tags, so that followers or their client software can select what they read. This is Microtagging: short personal tags.

I will now start to add short tags to my tweets which indicate a kind of "sub-channel" inside my tweet stream. You (or your software) will be able to ignore #dev tweets if you are not interested in my development work. You may ignore #kids tweets if you do not want to know when we are having ice cream in the local zoo. Microtags are personal tags. Everyone can define her own. They are not globally defined. Microtags have only meaning inside a single Twitter account. There might be standards later. Until then read my microtags at microtags.org to learn what they mean.

I will start with:
#life What I do, eat, where I walk and other spam
#me About me, but not the trivial #life stuff
#chat Chats via twitter, which you'd probably ignore if your r not @'d
#fun Fun stuff I find and want to share
#pol Politics (I am trying to avoid this)
#fam Family matters and events
#me About me, but not the mundane #life stuff
#blog New blog posts announced on twitter
#web The Web, Internet including social media, social networks and Twitter
#vw About virtual worlds
#soc Society, including rants about how bad/good the world is
#sci Science, if any
#kids Not yet
#dev Software development and tools
#tec Technical stuff except software development
#ovw That's the project I am currently working on most of the time
#vg My series of Virtual Goods Articles (see http://blog.wolfspelz.de/2009/10/virtual-goods-ticker.html)

A twitter client could have multiple input fields, so that I do not have to choose the microtag for each tweet. A twitter client could automatically fetch the microtags of a new follower from microtags.org and show you a list to select from. My list is at http://microtags.org/tags/?http://twitter.com/wolfspelz. Your twitter client could also fetch my microtags from time to time and offer new choices if they change.

I'd rather make these tags metadata for the tweet and not as part of the text. But since there is not metadata in microblogging, there will now be microtags in the text. Clients can strip them anyway.

_happy_microtagging()

See also: http://www.microsyntax.org but I can't wait anymore.

17. August 2009

HTML Video Tag

They did it again. 15 years after the img-tag, they invented a video-tag. I know, that native video makes the world better. I am totally pro-video. But to call the tag "video" is just plain wrong.

In HTTP, the server tells the content type of data. The client has no say. But if you call a tag "img" (or "video") then the browser expects a certain (subset) of content types. Ever tried to return an HTML from the URL of an img-tag: broken image. Even though it was valid HTML. Why doesn't the browser show an embedded HTML fragment instead? Why does it insist on an image? The browser requests a resource by URL to fill some screen space. If the server returns HTML, the client could show the HTML. This would have eliminated the need for frame and iframe.

One embed-tag would have been enough instead of img, iframe, and video. An embed-tag would simply tell: "here comes some screen space that is to be filled with the src-URL". And nobody would care if the content type is an image or PDF or video or HTML.

On the other hand, it's not really that bad.
Not really worth a rant.
Thanks for the native video, guys.
It's cool.
Especially combined with (the much too long ignored) SVG.

:-) It's not like embedded native video hasn't been postulated 13 years ago. I asked them at RTMW 96 (last century), if they would just add a video codec to the browser and a simple request/response. But back then, people wanted to make it complicated with RTSP, multimedia frameworks and such. In the meantime we had never-really-working-MPEG-plugins, a Microsoft video player disaster, a Flash workaround, because Macromedia just could not stand it anymore. Finally, the browser guys made it as simple as requested in 1996.

_happy_embedding()

9. August 2009

The Fake Transition

Weblin does NOT transition to club cooee. Rather, club cooee uses the email addresses to advertise its own product. While both are avatar services, weblin is a layered virtual world on the web and cooee is not. We all know that there are many different avatar services. Cooee is NOT a functional replacement for weblin. RocketOn is the only system that could be called a similar service. Cooee is just another avatar system that desparately needs registered users. The general terms of weblin explicitly forbid the use of user data for this purpose.

But the management of cooee, the weblin liquidator Jörn Weitzmann, and the ex-CEO Jan Andresen conspired against the weblin founders to shut down weblin, primarily to make this fake "transition" press release possible. The founders tried to keep the service alive and the user data safe. We put up the general terms in the way we did to prevent this. We notified the liquidator several times. We are very sad, that the email addresses are used unlawfully for advertisements. This is an expression of a mind set that does not respect the written law, but only court orders. In other words: they hope to get away with it, because nobody sues. And even if someone sues, then they can handle a minor fine for a major press release.

Cooee and Jan Andresen outbid the founders in a blind bidding process by a very narrow margin, that raises suspicions on its own. Weblin could have survived. The founders offered to pay for operating and maintenance cost. It is now being terminated in order to shuffle users to cooee. The intention of cooee is understandable, only the means are unlawful. But what Jan Andresen and the offical liquidator gain from the termination is more dubious. For sure, the users are not gaining anything from the termination of weblin when the other option was a continuation.

There will be a real functional successor to weblin later this year. A layered virtual world on the web. It is being developed under the name Open Virtual World (currently: http://openvirtualworld.blogspot.com/). The blog has descriptions, feature lists, and a time line.

_happy_restarting()

Note: the irony in all this is, that I opposed the collection of email addresses. Weblin did not need them for the technical operation and the marketing department profited only marginally. But Jan Andresen as marketing manager nonetheless insisted on it. Now we know the real purpose of all this email collection business.