3d Simulator Welt

Du hast eine Idee für ein Projekt?
jhamel
User
Beiträge: 37
Registriert: Sonntag 2. Juli 2006, 16:03
Wohnort: Ostwestfalen
Kontaktdaten:

Pekh hat geschrieben:Eine Neuentwicklung kostet aber auch erheblich Zeit und wird gerade in der Anfangsphase dem Vorbild in punkto Stabilität hinterherhinken. Bzw. im Funktionsumfang. Ob es da nicht schneller ist, auf eine stabilere Umgebung zu warten oder gar daran mitzuwirken?
Hallo,
Da gibt es natürlich eine Menge Beispiele bei denen so etwas erfolgreich war und genauso viele, wo es nicht geklappt hat.
Und viele Beispiele einer erfolgreichen Koexistenz. Es kommt nur darauf an, was wir daraus machen.

Tschüss
Jürgen
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Habe gerade einen Blick in den C#-Quelltext von der opensimulator-Webseite geworfen, der mit 20 MB Größe offenbar auch die übersetzten Programme enthält. Ich rate, dass "OpenSim" das Verzeichnis ist, wo man den Quelltext findet. Der besteht aus über 1100 C#-Dateien mit über 360.000 LoC. Selbst unter der Annahme, dass in jeder Datei 30 Zeilen Copyright zu finden sind, sind das mindestens 300.000 LoC und eine gewaltige Aufgabe, das in Python umzuschreiben. Ich würde darauf tippen, dass man etwa 1/3 (weil der Quelltext einer Stichprobe zufolge wohl { } alleine in einer Zeile hat) in Python braucht. Selbst wenn man 50 LoC pro Stunde schafft, sind das 2000 Stunden Arbeit - oder etwa 1 1/2 Personenjahre. Nur um den jetzigen Zustand zu haben, der sich in dieser Zeit natürlich weiter entwickeln wird.

Bei diesem Aufwand würde ich - wenn überhaupt - versuchen, den Quelltext so weit es geht, automatisch von C# nach Python zu portieren. Selbst, wenn das Ergebnis dann stilistisch schlechter Python-Code ist. Von da kann man aber glaube ich schneller weitermachen, als wenn man's manuell portiert.

Hier ist ein Beispiel: http://paste.pocoo.org/show/160580/ - Das war natürlich per Hand. Ich habe mir nicht die Mühe gemacht, die 14 "using" in imports zu übersetzen, aber das müsste man. Statt Code, der z.B. Convert oder Hashtable benutzt umzuschreiben, würde ich lieber passende Klassen in Python bauen. Auch wenn man's in Python vielleicht auch so schreiben könnte: http://paste.pocoo.org/show/160585/

Stefan
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

oder man macht etwas komplett neues ohen etwas zu protieren..
the more they change the more they stay the same
jhamel
User
Beiträge: 37
Registriert: Sonntag 2. Juli 2006, 16:03
Wohnort: Ostwestfalen
Kontaktdaten:

sma hat geschrieben:Selbst wenn man 50 LoC pro Stunde schafft, sind das 2000 Stunden Arbeit - oder etwa 1 1/2 Personenjahre.
Ich habe mir zwischen Weihnachten und Neujahr das ganze mal angesehen. Es sieht nicht ganz so schlimm aus als ich dachte.
Ich habe mir erstmal die Datenserver angeschaut, das sind der Gridserver, userserver, Inventoryserver und der Assetserver. Diese laufen bei mir auf einen Rechner, die sims laufen auf 2 anderen Rechnern. Da der c# Quelltext wirklich umfangreich ist, habe ich mir lieber mit ngrep den netzwerkverkehr angesehen.
Dort sieht alles relativ einfach aus, also habe ich das Projekt gestartet und ein wenig programmiert.

Der umfangreichste Teil war einfach ein tool zu schreiben, das eine Postgres-Datenbank abcheckt und ggf. Tabellen und spalten anlegt oder modifiziert.
Dav1d hat geschrieben:oder man macht etwas komplett neues ohne etwas zu portieren..
Genau das ist es, was gemacht werden sollte ! Denn opensim ist ein fantastisches Projekt, aber zusehr darauf bedacht, alles möglich zu machen und möglichst elegant zu programmieren.
Als ein Beispiel, der userlogin:
der Viewer sendet eine xmlrpc anfrage, c# startet eine wirklich umfangreiche aktion, mehrere 100 Zeilen Code, ich schätze sogar über 1000 Zeilen. Dann werden die Ergebnisse zu anderen Types convertiert und zurückgesendet. Sehr elegant, sehr aufwendig.
Ich habe es in Python so gelöst:


Code: Alles auswählen

dicResult = self.getLoginData(args['first'],  args['last'], args['passwd'],  args['start'])
return dicResult

Code: Alles auswählen

def getLoginData(self, sUsername, sLastname, sPassword, sStartPosition):
        sSql = "select users.uuid as uuid, users.lastname as last_nam....
result = self.db_com.xmlrpc_executeNormalQuery(sSql)
return result[0]
Im Prinzip sehe ich es so: Es werden hauptsächlich Daten aus einer SQL-Datenbank gelesen und gepseichert, ansonsten nur noch einige Überprüfungen. Das opensim-projekt kann nur eine Untermenge an SQL Befehlen nutzen, da sie sqllite, mysql, oracle, mssql, ... usw. unterstützen. Damit wird alles sehr umfangreich und kompliziert. Wir würden hier mit ca. 10% an Code klarkommen, denn wir könnten alles auf Postgres anpassen, trigger, functions und Proceduren nutzen.

Ich habe ein wenig weiter programmiert, und die sims melden sich bei dem Python-Server erfolgreich an und der userlogin geht jetzt bis Stage 8 ( von Stage 10).

Also, ich habe das Projekt bei Berlios angemeldet und dort meine Sachen ins SVN gestellt:

http://developer.berlios.de/projects/py3dworlds/

Wie gesagt, ich finde das Projekt durchführbar und das sogar in einer akzeptablen Zeit. Vielleicht haben ja doch ein paar von euch Zeit und Lust mitzumachen.

Tschüss
Jürgen
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Ich hätte Lust, habe mich aber noch nie mit Datenbanken beschäftigt (naja ein bisschen MySQL mit PHP)

Gibts irgend eine Anlaufstelle wo man mit dir schreiben kann (IRC, ICQ..)
the more they change the more they stay the same
jhamel
User
Beiträge: 37
Registriert: Sonntag 2. Juli 2006, 16:03
Wohnort: Ostwestfalen
Kontaktdaten:

Dav1d hat geschrieben:Ich hätte Lust, habe mich aber noch nie mit Datenbanken beschäftigt (naja ein bisschen MySQL mit PHP)

Gibts irgend eine Anlaufstelle wo man mit dir schreiben kann (IRC, ICQ..)
Das ist toll :-)

mehrere Möglichkeiten:
jabber(XMPP) jhamel@cuonsim2.de
email: jhamel (at) cyrus-computer.de

oder anmelden bei berlios.de, dann kann ich dich dem Projekt hinzufügen.

Das mit der Datenbank ist nicht so ein Problem, es ist einfaches SQL bzw. ich kenne mich da einigermaßen aus.
Schwieriger ist es wohl, an die Informationen heranzukommen, ich habe 80% meiner Zeit dafür verwendet. Ich habe ins SVN auch 2 Protokolle gestellt, die den Datenverkehr aufzeigen swischen den Clients und den Servern. Ich war am Anfang etwas confus was die Werte für die Rückgabe anging, das ist wirklich ätzend !!!! So wird ein Integer Datenwert aus der Datenbank mal als int, dann als int4(bigint) oder als string zurückgesendet. Das ist natürlich nur unnötig kompliziert und sollte von uns später bereinigt werden. Ein Beispiel sieht zur Zeit so aus:
Datenbank Integer --> umwandeln String --> senden , dann im Empfänger String --> umwandeln in Integer. Nicht gerade schön !

Aber nicht wirklich schwierig, nur ätzend ))))

ok, ich freue mich auf deine Nachricht.

Tschüss
Jürgen
jhamel
User
Beiträge: 37
Registriert: Sonntag 2. Juli 2006, 16:03
Wohnort: Ostwestfalen
Kontaktdaten:

Hallo,
aus dieser Idee ist nun ein richtiges Projekt geworden, gehostet auf http://sourceforge.net/projects/py3d-worlds/. Wir sind allerdings wirklich zu wenig Entwicker ( nur 3 Stück) haben aber schon eine Menge geschafft. Heute ist es auch zum erstenmal gelungen, das ein neuer User einen Account erstellen kann und sich bei der Sim einloggen kann. Wie geplant sind wir so vorgegangen, das wir erstmal die 4 Grid-Server auf Python umschreiben, und wir haben zusätzlich einen Webserver geschrieben, der neue Accounts in der Datenbank anlegt.
Vielleicht haben ja doch noch 1 oder 2 von euch Lust, mitzumachen, ich würde mich freuen.

Tschüss
Jürgen Hamel
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Schön zu hören. Wäre nett wenn du uns hier auf den laufenden halten könntest...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten