XML, Umlaute, Unicode, Projektorganisation, RPC, MPUC - Wer bietet mehr?
Freunde, 1) Es gibt ein Minipapier von mir zum Thema: XML, Umlaute und Python. http://p-nand-q.com/python/umlaute_in_xml.html Kommentare willkommen. 2) Unser Büdong-Projekt wächst und gedeiht; ich bin allerdings mit der Organisation der Quäldateien unzufrieden. Deshalb die Anfängerfrage: Wie strukturiert Ihr denn größere Pythonprojekte? - Wann ist der Einsatz von Modulen angezeigt? - Werden die Module in lib\site-packages gepackt, oder in das Projektverzeichnis? - Welches Versionskontrollesystem bietet sich (unter Windows, beim SciTE) an? - Eure Erfahrungen mit Unittests? 3) Ich möchte eine RPC-Schnittstelle zwischen Python und Native-C++ im Netzwerk haben. Sockets, klar. Es bieten sich folgende Möglichkeiten: a) standardisiertes Protokoll (z.B. XMLRPC, Seife), mit Einsatz entsprechender 3rd Party Libs in C++ und Python. (Lizenzfragen??? GPL darf ich nicht benutzen). In diesem Fall spricht Python mit C++ über Sockets. b) Eine pyd, die ein Pythonscript ausführt, welches mit besagter pyd spricht. Vorteil: Python spricht mit Python übers Netz, es gibt nur eine lokale Schnittstelle (die pyd eben) -> C++ Code minimiert, RPC-Protokoll austauschbar. 4) MPUC: isch werde frühestens 0x44aa200 Millisekunden nach Mitternacht erscheinen. _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Gerson.Kurz@t-online.de (Gerson Kurz) writes:
1) Es gibt ein Minipapier von mir zum Thema: XML, Umlaute und Python.
http://p-nand-q.com/python/umlaute_in_xml.html
Kommentare willkommen.
Ein paars gesammelte Kommentare, von oben nach unten: "Grundsätzlich gibt es zwei Möglichkeiten" Tatsächlich gibt es drei: "Umlaute können über Zeichenreferenzen (character references) angesprochen werden" "Die XML-Datei kann in UNICODE verfasst sein" Schwierig. Je nach Standpunkt ist jede XML entweder stets "in UNICODE verfasst" oder nie: - Alle XML-Dateien sind Unicode: http://www.w3.org/TR/REC-xml#charsets "Legal characters are tab, carriage return, line feed, and the legal characters of Unicode and ISO/IEC 10646." Also besteht jede XML-Datei ausschließlich aus Unicode-Zeichen - Keine Datei ist Unicode: XML liegt üblicherweise als Bytefolge in einem Encoding vor. Das kann us-ascii, iso-8859-1 oder utf-8 sein - in jedem Fall handelt es sich um eine Bytefolge, nicht um Zeichen. "Offenbar kommt die aktuelle Pythonversion (2.2.2) nicht mit dem BOM zurecht. Für Python 2.3 ist eine Lösung vorgesehen: der Einsatz eines Encodings." Wenn der Editor ein BOM mit abspeichert, braucht man in 2.3 nichts weiter zu tun. In Python 2.3 kann man auch einfach ein Unicode-Literal angeben, das man dann in den codecs.open-Stream schreibt. "Aber, leider leider, es gibt ein Problem:" In Python 2.3 sollte dieses Problem verschwunden sein: Sofern man in ein Terminal ausgibt, gelingt das in den allermeisten Fällen (Voraussetzung: Python erkennt, welchen Zeichensatz das Terminalfenster verwendet, und der Unicode-String verwendet nur Zeichen aus diesem Zeichensatz)
- Wann ist der Einsatz von Modulen angezeigt?
Ich weiß nur, wie man es *nicht* machen soll: Eine Klasse pro Datei (java-isch) halte ich für schlechten Stil.
- Werden die Module in lib\site-packages gepackt, oder in das Projektverzeichnis?
Zunächst im Projektverzeichnis. Dann gibt es ein setup.py, und das installiert alles nach lib/site-python.
- Welches Versionskontrollesystem bietet sich (unter Windows, beim SciTE) an?
Auf einer Maschine oder auf mehreren? Am einfachsten in Betrieb zu nehmen ist vermutlich CVS; auf mehreren Maschinen kommt dann noch ssh dazu.
a) standardisiertes Protokoll (z.B. XMLRPC, Seife), mit Einsatz entsprechender 3rd Party Libs in C++ und Python. (Lizenzfragen??? GPL darf ich nicht benutzen). In diesem Fall spricht Python mit C++ über Sockets.
Meine Empfehlung: CORBA. Fnorb für Python; omniORB für C++. Ciao, Martin _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Hallo Gerson, Gerson Kurz wrote:
2) Unser Büdong-Projekt wächst und gedeiht; ich bin allerdings mit der Organisation der Quäldateien unzufrieden. Deshalb die Anfängerfrage:
Wie strukturiert Ihr denn größere Pythonprojekte?
ich weiß nicht, was du unter "größer" verstehst. Wir sind derzeit an einer Web-Anwendung (Python 2.2, Webware, Apache, PostgreSQL 7), die derzeit bei ca. 30000 Zeilen ist und bei 35000 landen könnte (gezählt mit sloccount, http://www.dwheeler.com/sloccount/, daher ohne Leerzeilen, Kommentare etc.). Mit find . -name '*.py' | xargs cat | wc -l kommen wir derzeit auf knapp 40000 Zeilen.
- Wann ist der Einsatz von Modulen angezeigt?
Wenige meiner Module sind über 500 Zeilen lang. Das ist aber nur eine Faustregel; Kriterium ist für mich die Übersichtlichkeit in den einzelnen Dateien und im Gesamtprojekt. Bei kleineren Projekten neige ich dazu, zuerst mit einer einzigen Datei anzufangen (damit man es leicht mal irgendwo hinkopieren kann bzw. nicht mehrere Dateien zusammenhalten muss). Wenn ich so auf ein paar tausend Zeilen gekommen bin, und so langsam die Übersicht leidet, teile ich in Module auf. Das können dann auch gleich fünf oder so auf einmal sein. Zu dem, was Martin sagte (Klasse pro Modul): Die Anzahl der Klassen in einem Modul ist kein Kriterium für die Aufteilung. Wenn es "zusammenpasst", können da auch fünf oder zehn Klassen drin stehen oder im Extremfall nur drei kleine Funktionen. Das allermeiste ist aber objektorientiert. Meistens finde ich es zweckmäßig, in einem Modul eine Klasse und die dazugehörigen Hilfsklassen und manchmal auch Funktionen unterzubringen. Wenn irgendwie möglich, vermeide ich es, dass über Modulgrenzen hinweg auf "vertrauliche" Schnittstellen (Implementierungsdetails) zugegriffen werden muss.
- Werden die Module in lib\site-packages gepackt, oder in das Projektverzeichnis?
Wir haben ein eigenes Anwendungsverzeichnis auf dem Server, mit mehreren Paketen (Tools, Fachklassen, Servlets, Mailsystem) darunter.
- Welches Versionskontrollesystem bietet sich (unter Windows, beim SciTE) an?
Wir verwenden CVS.
- Eure Erfahrungen mit Unittests?
Klasse! :-) Wir haben Unittests für die meisten Tools und Fachklassen. (In Tests von Webseiten sind wir bisher nicht eingestiegen.) Da wir relativ viel refaktorieren bzw. während der Entwicklung der Tools und Fachklassen refaktoriert haben), helfen die Unittests ungemein, das System stabil zu halten.
3) Ich möchte eine RPC-Schnittstelle zwischen Python und Native-C++ im Netzwerk haben. Sockets, klar. Es bieten sich folgende Möglichkeiten: [...]
Kann ich nichts zu sagen. Viele Grüße Stefan _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
participants (3)
-
Gerson.Kurz@t-online.de
-
martin@v.loewis.de
-
Stefan Schwarzer