mercoledì 15 settembre 2010

hacking opensimulator

Inizio stasera una serie di posting sui miei esperimenti con OpenSimulator, esperimenti che in realta` sono iniziati un annetto fa, ma che avevo sospeso perche` la piattaforma era, all'epoca, un disastro, troppo immatura persino per un vecchio hacker come me.

Per chi non lo sapesse OpensSimulator e` la versione Open Source del server per mondi virtuali tipo Second Life. Per chi non sapesse cos'e` Second Life, invece, posso solo dire che anche i dinosauri, per quanto grossi, si sono estinti, ed e` il caso di evolversi, altrimenti si rischia la stessa fine :)

Ho installato sul mio server la versione piu` recente presa da OSGrid, precisamente la 0.6.9-post-patches, e l'ho configurata come server standalone, ovvero non collegata a nessuna grid particolare. Tuttavia e` hypergrid enabled, questo significa che se aprissi le opportune porte sul mio firewall, dall'esterno sarebbe possibile collegarsi e visitare i luoghi virtuali dei miei hackeraggi. Meglio di, non con una adsl come la mia, perlomeno.

La configurazione e` stata un discreto bagno di sangue, risolta poi scaricando una distribuzione gia` preconfezionata (Diva), e riutilizzando i config files adattandoli alle mie esigenze.

OpenSimulator e` scritto in C#, quindi dovendo girare su un server linux (non penserete mica sul serio che usi windows per un server) mi sono dovuto installare anche l'ultima versione di mono. Scaricare, compilare, insomma, le solite cosa da linux geek. Di tutto questo parlero` in dettaglio (pensando di fare cosa gradita a molti) in un altro post, per il momento preferisco buttare giu` qualche impressione a caldo mentre sevizio in modo ignobile la mia isola personale, un diario di bordo del perfetto hacker sadico, insomma.

Come prima cosa, ho creato un prim con uno script che mi mostrasse in tempo reale le statistiche principali della regione (FPS, numero di prim, occupazione di RAM):


vector color1 = <0,1,0>;
vector color2 = <1,1,0>;
vector colorw = <1,0,0>;
integer color = 1;

default
{
state_entry()
{
llSay(0, "monitor running");
llSetTimerEvent( 2.0 );
}

timer()
{
string tstr = "";
list tlist = osGetRegionStats();
vector tcolor;

tstr += "Dilatn: " + llList2String(tlist,0) + "\n";
tstr += "SimFPS: " + llList2String(tlist,1) + "\n";
tstr += "PhyFPS: " + llList2String(tlist,2) + "\n";
tstr += "Prims: " + llList2String(tlist,6) + "\n";
tstr += ".\n";
tstr += "RAM: " + (string)(osGetSimulatorMemory() / 1024 / 1204) + " Mb\n";
tstr += ".\n.\n.\n";

if (color == 1) {
tcolor = color2;
color = 2;
} else {
color = 1;
if (llList2Integer(tlist,0) <> 44000) {
tcolor = colorw;
} else {
tcolor = color1;
}
}

llSetText( tstr, tcolor, 1.0 );
}
}


Quindi ho indossato il prim (lo vedete sulla mia testa) e mi sono messo a creare prim a gogo, a mille alla volta, fino a raggiungere il massimo consentito dalla regione, che e` 45000. Per la verita` i prims in regione sono 45000 + 1, ma quello che ho sulla testa non conta riguardo al numero massimo.
Non ho capito perche`, ma la finestra di info della regione (dal client, sto usando Imprudence), mi diche il numero massimo di oggetti sulla land e` 15000, il che non e` ovviamente vero. Aggiunge anche che i 30mila oggetti in piu` saranno cancellati. Non e` vero neanche questo.

Ho continuato a creare prim (altri 1000 per la precisione), e me li ha lasciati creare. A questo punto ero perplesso. Dopo un restart le cose si sono chiarite, al reload della regione sono stati ricaricati solo 45000 prim, gli altri ... puff, andati. Il fatto che li abbia potuti creare ugualmente probabilmente e` per via che sto usando il master avatar (il super admin, insomma). Che mi da` il potere di creare cose che poi pero` saranno spazzate via. Ci deve essere un messaggio profondo in questa faccenda, ma non e` il momento di pensarci, ora.

Invece, alcuni dati: con 45mila prims l'occupazione di RAM riportata e` di circa 372Mb, ma non so per quale motivo mentre li creavo ho raggiunto un massimo di 90Mb. Solo dopo un restart della regione, quando ne ha ricaricato il contenuto, l'occupazione e` schiz zata a 372Mb.

L'occupazione reale del processo, secondo quanto dice top, e` di 438 Mb, mono ci mette il suo hoverhead, ovviamente. Segnatevi questi dati di massima, se intendete sperimentare anche voi, e non volete mandare in vacca la vostra povera macchina linux per mancanza di RAM :)

Una curiosita`, il comando "show stats" dalla console di opensim mostra un'occupazione di ram di 297Mb .. dato che dovrebbe riportare gli stessi valori della funzione usata nello script (gli altri in effetti sono uguali) non si capisce bene chi dei due abbia ragione.

Probabilmente nessuno dei due, visto che l'occupazione reale e` quella data dal sistema, che e ` quella che conta, alla fine.

Altra curiosita`: i prim sulla land sono memorizzati, nel database MySql, nelle due tabelle "prims" e "primshapes". Se li prendete su e li mettete nell'inventario, invece, finiscono nella tabella "assets". Ci sara` una ragione per cui hanno scelto di memorizzare le stesse cose in due posti differenti, invece che creare opportuni link, ma la cosa mi sfugge. Gli assets hanno un link che li collega, eventualmente, al vostro inventario. Una cosa e` certa, i prims nelle due prime tabelle sono solo quelli effettivamente sulla land, mentre gli assets non vengono mai cancellati, posso vedere che dentro ci sono le 15 o 20 versioni dello script che ho modificato piu` volte. Questa cosa non ha alcun senso, e credo funzioni allo stesso modo anche su Second Life. Il che spiega perche` questa tecnologia "non e` scalabile". Ovviamente, se ha dei flaws di progettazione di base cosi` grossolani. Spero almeno che vi sia in giro un task che permetta la pulizia del database, cosa pero` di cui dubito assai (dopo giorni di tribolazioni su questo software, sto cominciando ad entrare nella logica malata degli sviluppatori).

Durante la creazione dei prim, il motore fisico e` andato in mona, potevo passare attraverso i blocchi come se non esistessero. Dopo il restart le cose si sono sistemate, ora i prim sul terreno sono solidi come rocce. Visto anche la storia dell'occupazione iniziale di RAM piuttosto esigua, immagino che durante la creazione i prim siano stati piazzati nella scena in modo, come dire, parziale, e suppongo che ci sia un task di consolidamento che si occupa, di tanto in tanto, di rendere "reali" le cose create, task che pero` deve essere andato in mona assieme al motore fisico per la troppa roba creata (o troppa in troppo poco tempo). Anche il viewer ci mette d el suo, quando provo a sloggarmi ci mette circa un quarto d'ora per uscire. Ci metterebbe. Lo ha fatto la prima volta. Ora lo killo io prima :)

In questo momento ho creato altri 4 prim sulla land, quindi 4 oltre il limite. Nessun problema, neanche al motore fisico. Li vedete li` per terra, belli colorati. Ora faccio un restart della regione e vedo che fine fanno.

Bene, fatto. Nel senso che il comando "restart" ha ricaricato 45000 prims, e portato l'occupazione del processo a circa 600Mb. Della serie, gest iamo correttamente la reinizializzazione delle variabili, oppure e` mono (C#) che ha una garbage collection che fa cagare, o probabilmente en trambe le cose. D'altro canto un linguaggio nato in casa Microsozz non poteva essere granche`, e il fatto che sia stato scelto come base per lo sviluppo di questo progetto spiega molti dei problemi che lo affliggono. Parlo della mente contorta degli sviluppatori, non del linguaggio in se ;)

A parte gli scherzi, questo passa il convento, e comunque OpenSimulator e` uno progetto di tutto rispetto, dubito che si possa fare di meglio quando si lavora "on the edge", in un campo cosi` innovativo come questo.

Ok, evitiamo il restart. Facciamo un "quit" e facciamo ripartire l'istanza da zero, che e` meglio. Sicuramente se si ha intenzione di mettere questo mostro su un server in produzione meglio pensare ad un watchdog che appena lo vede divorare piu` ram del necessario, tak!, un colpo alla nuca e via che si riparte, meglio il crash di un'isola che il crash dell'interso sistema.

Ah ... 4 prim in piu` sono ancora li`. Anche questo e` interessante, nel senso che mi piacerebbe sapere con quale logica sono eseguiti i controlli dei limiti nel simulatore. Mi vengono in mente solo espressioni colorite e piuttosto oscene, quindi sorvoliamo.

Per ora mi fermo qui, ho hackerato abbastanza per stanotte. Vi invito a fare un giro sulle nostre isole pubbliche, qui: KUBiC HyperKUBiC, per ora sono vuote ma appena riesco a riappropriarmi della mia roba su Second Life (di questo parlero` in un altro post), si riempiranno.

Buona meta-navigazione.

venerdì 11 dicembre 2009

demenza terapeutica

bene bene ... ho volutamente lasciato a mantecare questo mio blog, perche` mi sono accorto che aveva preso una piega troppo polemica

va bene la denuncia, vanno bene gli sfoghi quando ci si scontra con la spazzatura che ci circonda, ma la polemica, in se, e` sterile, e porta via un sacco di tempo .. che e` prezioso, non siamo qui in eterno (per fortuna) e dovremmo usarlo meglio che possiamo

quindi a parte le 1000 mila attivita` in cui mi perdo quotidianamente, di recente ho calcato la mano su quella che definisco "demenza terapeutica": grazie alla ghiotta occasione della sentenza della Corte di Strasburgo sul crocefisso nelle aulee scolastiche, e per salvaguardare i miei neuroni dalla marea di merda che e` venuta a galla rimestando nel pozzo nero, ho trovato un branco di stupendi cazzeggiatori che riescono a combattere, con la loro ironia e intelligenza, l'isteria che ci salta addosso ogni 3x2

fatevi un giro su questo gruppo in feisbuk: Difendiamo le radici cristiane! NO ALLE CIFRE ARABE NELLA SCUOLA! II, iscrivetevi e partecipate, oppure se siete invasati, fate come gli altri invasati che non si rendono conto dell'intento ironico del gruppo, e insultateci, polemizzate e non mancate di segnalarlo, il primo gruppo (notate il II nel titolo) gia` e` stato bannato per "istigazione alla violenza" (??), se dovesse accadere di nuovo, risorgera` com'e` giusto che sia :)

riprendero` a scrivere su questo blog appena mi saro` ripulito dalla spazzatura mentale accumulata negli ultimi tempi, vi saluto per il momento con la famosa frase "sara` una risata che vi seppellira`"

(ma anche come dice il mio amico Sacha, "ricordati che devi morire" ... mi tocco gli zebedei e chiudo la trasmissione)

mercoledì 10 giugno 2009

appennino



quando la pianura e` immersa nella nebbia, o coperta dalle nuvole, da Marola si ammira questo splendido mare di panna montata ...

martedì 27 gennaio 2009

from Fidonet, 2001

= LOCALE Exception #13 (2:332/529) ==== LOCALE_332.529 =
Msg : 1483 of 1500 Scn
From : *************** 18 Jan 01 20:24:51
To : All 19 Jan 01 03:51:06
Subj : compagnie aeree
===============================================
@User-Agent: ProNews/2 V1.51.ib102
From: ****************

Air-UNIX:
Tutti si portano da casa un pezzo dell'aereo quando arrivano all'aeroporto. Nei pressi della pista di decollo, mettono insieme l'aereo pezzo per pezzo, generalmente litigando su che tipo di aereo dovrebbero costruire.

DOS-One:
Tutti spingono l'aereo in modo che prenda il volo. Dopo di che saltano a bordo tutti, planano a bassa quota fino a quando 'aereo tocca di nuovo terra. A questo punto scendono e ricominciano a spingere, etc etc...

Mac Airlines:
Tutto il personale si assomiglia fisicamente in modo sospetto e si comporta nello stesso, identico modo. Appena chiedete loro una informazione, vi viene gentilmente risposto che non avete bisogno di sapere, che in realta voi non volete sapere, che tutto vi sara` fatto senza che dobbiate intervenire, e quindi di chiudere quella maledetta bocca...

Windows Air:
Il terminale e` arredato in modo confortevole e divertente, pieno di colori brillanti. Siete serviti da hostess carine e gentili, il vostro bagaglio viene etichettato e mandato nel vano cargo
dell'aereo in pochi minuti. Il decollo avviene in orario e in modo piacevole. Dopo 10 minuti di
volo, l'aereo esplode senza alcun avvertimento.

Windows-NT Air:
Lo stesso servizio di Windows Air, solo che il biglietto costa di piu`, la flotta e` composta da aerei molto piu` grossi e coinvolge nell'esplosione tutti gli altri aerei in transito nel raggio di 40 miglia nautiche.

Linux Travel Co.:
Gli impiegati scontenti di tutte le altre compagnie decidono di fondare la loro societa`. Si comprano i loro aerei, assemblano i check-in e si pavimentano le piste d'atterraggio da soli. Richiedono un piccolo prezzo per il costo del biglietto, che puo` essere evitato se il cliente se lo scarica e lo stampa da se`. Quando mettete i piedi sull'aereo vi viene dato un sedile, 4 bulloni,
un cacciavite e uno copia del Sedile-HOWTO.html ... Una volta seduti, il viaggio e` confortevole, il pasto e` gustoso e l'aereo atterra senza alcun problema. Di conseguenza tentate di dire ai vostri amici del magnifico viaggio, ma tutto quello che riescono a dire e` "cosa hai dovuto fare con quel sedile???"

--

--- SoupGate-OS/2 v1.05
* Origin: Exception #13 <059-907626/7> (2:332/529.668)

giovedì 22 gennaio 2009