Wie Organisiert ihr euren Quellcode

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Ich würde gerne wissen wie ihr euren Quellcode Organisiert. Und zwar nicht innerhalb von Projekten/Produkten sondern eben genau diese.

Bei mir sieht das derzeit so aus:
Ich habe einen Ordner für checkouts/clones an denen ich nicht mitarbeite, wie Python o.ä.
~/checkouts/

Beispiel:
~/checkouts/python-trunk/

Dann habe ich einen code Ordner, welcher für jede Sprache einen Ordner enthält:
~/code/$primary_programming_language/$name/
Beispiel
~/code/python/lanshark

Dazu kommen noch diverse um einiges chaotischere Ordner dazu:
~/code/soi
~/code/spoj
~/code/ghop
~/code/finished/legacy/Coding/
~/Coding

Sowie für Kunden Projekte:
~/Projects/$customer/

Aber irgend wie ist das weder übersichtlich, noch simpel, noch ...

Als neue Struktur strebe ich derzeit folgendes an:
~/code/products/ Für "fertige" brauchbare Dinge
~/code/projects/$customer/$start_year - $name für Projekte/Aufträge
~/code/legacy/ für alten Kram den ich nicht sortieren mag.
~/code/sandbox/ für alles andere

Gruss,
Jonas

PS:
Dabei fällt mir noch etwas anderes auf, es wird ja oft von Opensource- oder Software-Projekten gesprochen. Was mir jedoch (zumeist) falsch erscheint. Produkt scheint eher angebracht zu sein. Gibt es da ein passenderes Wort?
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Code: Alles auswählen

~/dev                       (development-root)
    client/                 (alles, was aufm Client läuft)
        app_1/ app_2/
    modules/                (selbstgeschriebene Module)
        module_1/ module_2/
    sandbox/                (Sandbox für Tests und Zeugs was keiner braucht)
        stuff1.py stuff2.py stuff3.py
    templates/              (Templates, z.B. für eine werkzeug-Applikation o.ä.)
        template_1/ template_2/
    web/                    (Webapplikationen- und -projekte)
        app_1/ app_2/
Gruß, Jonas ;)
lunar

Unterhalb von ~/devel sieht es bei mir so aus:

- ~/devel/projects für Projektcode
- ~/devel/sandbox – Tests, Benchmarkscripte, Lösungen für diverse Python-Programmieraufgaben ala pythonchallange, random stuff
- ~/devel/scripts – Kleinere Shell- und Python-Skripte
- ~/devel/snippets – Beispielcode für diverse Bibliotheken und Techniken (auch aus diesem Forum oder für dieses Forum)
- ~/devel/archiv – alte, nicht mehr fortgeführte Projekte

Skripte sortiere ich noch teilweise nach Einsatzzweck (z.B. ~/devel/scripts/win32) für Skripte, die diverse Stellschrauben eines Windows-Systems manipulieren. Möglicherweise sortiere ich die Projekte auch irgendwann noch mal nach Art des Projekts (z.B. Pakete, GUI-Anwendungen, Webanwendungen, etc.), aber noch habe ich da die Übersicht.

In ~/devel/projects liegen nicht nur eigene Projekte, sondern auch solche, an denen ich gelegentlich mitwirke. Projekte, bei denen ich nicht mitwirke, aber trotzdem gerne auf dem aktuellen Stand bin, liegen unter ~/share/src (da liegt z.B. ein Checkout vom python Trunk.)

Dann gibt es in ~/lib noch ein python2.6 Verzeichnis, welches ich für "python setup.py develop --prefix ~" nutze und in den $PYTHONPATH aufgenommen habe.
veers hat geschrieben:Dabei fällt mir noch etwas anderes auf, es wird ja oft von Opensource- oder Software-Projekten gesprochen. Was mir jedoch (zumeist) falsch erscheint. Produkt scheint eher angebracht zu sein.
Wieso?
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

lunar hat geschrieben:
veers hat geschrieben:Dabei fällt mir noch etwas anderes auf, es wird ja oft von Opensource- oder Software-Projekten gesprochen. Was mir jedoch (zumeist) falsch erscheint. Produkt scheint eher angebracht zu sein.
Wieso?
http://de.wikipedia.org/wiki/Projekt hat geschrieben:Ein Projekt ist ein einmaliger Prozess, der aus einem Satz von abgestimmten und gelenkten Tätigkeiten mit Anfangs-und Endtermin besteht und durchgeführt wird, um unter Berücksichtigung von Zwängen bezüglich Zeit, Kosten und Ressourcen ein Ziel zu erreichen, das spezifische Anforderungen erfüllt.
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
lunar

veers hat geschrieben:
lunar hat geschrieben:
veers hat geschrieben:Dabei fällt mir noch etwas anderes auf, es wird ja oft von Opensource- oder Software-Projekten gesprochen. Was mir jedoch (zumeist) falsch erscheint. Produkt scheint eher angebracht zu sein.
Wieso?
http://de.wikipedia.org/wiki/Projekt hat geschrieben:Ein Projekt ist ein einmaliger Prozess, der aus einem Satz von abgestimmten und gelenkten Tätigkeiten mit Anfangs-und Endtermin besteht und durchgeführt wird, um unter Berücksichtigung von Zwängen bezüglich Zeit, Kosten und Ressourcen ein Ziel zu erreichen, das spezifische Anforderungen erfüllt.
Und inwiefern passt diese Definition nun nicht zu Softwareprojekten?

Ein Opensource-Projekt wie beispielsweise KDE hat ja auch ein Anfangstermin (1998), ist einmalig (es gibt kein anderes KDE-Projekt, jede Desktopumgebung für Linux ist einmalig), wird gelenkt (KDE e.V.), und muss Zwänge hinsichtlich Zeit, Kosten und Ressourcen berücksichtigen (unfertiges KDE 4.0 Release). Auch ein ein solches Projekt Ziele, sowohl eher genereller Natur (eine Desktop-Umgebung für Linux zu erstellen) als auch ganz konkreter, unmittelbarer Natur (KDE 4.2 Feature Plan). Lediglich hinsichtlich des Enddatums ist diese Definition nicht direkt anwendbar, aber da kann man ja den Release Schedule des Projekts heranziehen.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Aber dann ist ja jedes Release ein Projekt, nicht?
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

veers hat geschrieben:Aber dann ist ja jedes Release ein Projekt, nicht?
Wieso? Endtermin ist erreicht wenn ein Projekt gestorben ist. Abgesehen davon denke ich nicht dass man die Definition da so genau nehmen muss, tut ja sonst auch keiner.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

@lunar: Die Aufteilung erscheint mir sinnvoll, plus 'modules' plus 'templates' für meine Zwecke ;)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

veers hat geschrieben:Ich würde gerne wissen wie ihr euren Quellcode Organisiert.
Hallo Jonas!

Ich miste laufend aus und verschiebe nicht mehr benötigte Ordner ins Archiv. Trotzdem glaube ich, dass ich doch mal wieder etwas ausmisten sollte... ;-)

http://halvar.at/krimskrams3/dev_tree.txt

Es sind halt verschiedene Programmiersprachen im Spiel. Einfach so die Ordner umbenennen und verschieben geht auch nicht. Dann müsste man die Programme umschreiben.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Ich habe mein Zeugs in einer recht flachen eher ungeordneten Verzeichnis"hierarchie". Ordnung kommt da erst durch ein lokales Wiki rein, wo die Verzeichnisse verlinkt sind.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich bin Chaot und habe daher einfach zwei Ordner Work und Privat, in denen sich Ordner für verschiedene Projekte ohne weitere Unterteilung finden. Wenn ich etwas wiederfinden muss, benutze ich Spotlight, die Mac-Desktop-Suche.

Stefan
lunar

Dauerbaustelle hat geschrieben:@lunar: Die Aufteilung erscheint mir sinnvoll, plus 'modules' plus 'templates' für meine Zwecke ;)
Naja, "modules" sind ja auch "Projekte". Insofern sehe ich keinen Sinn, in der obersten Ebene nochmal zu unterteilen. Höchstens unterhalb von "projects", aber das tue ich erst, wenn ich da die Übersicht verliere.

Allerdings ist das mit den Vorlagen eine gute Idee, dass könnte ich mir auch mal anlegen. Allerdings wäre das für mich eher sinnvoll bei GUI-Anwendungen, da pylons mit paste script schon Vorlagen bietet.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

DasIch hat geschrieben:
veers hat geschrieben:Aber dann ist ja jedes Release ein Projekt, nicht?
Wieso? Endtermin ist erreicht wenn ein Projekt gestorben ist. Abgesehen davon denke ich nicht dass man die Definition da so genau nehmen muss, tut ja sonst auch keiner.
Dieser Zeitpunkt ist jedoch normalerweise nicht definiert, und somit kein Termin ;)

~/Templates hab ich übrigens auch:
veers@vault:~$ ls ~/Templates/
cgi.py latex_article man pygtk python xhtml11
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
lunar

veers hat geschrieben:
DasIch hat geschrieben:
veers hat geschrieben:Aber dann ist ja jedes Release ein Projekt, nicht?
Wieso? Endtermin ist erreicht wenn ein Projekt gestorben ist. Abgesehen davon denke ich nicht dass man die Definition da so genau nehmen muss, tut ja sonst auch keiner.
Dieser Zeitpunkt ist jedoch normalerweise nicht definiert, und somit kein Termin ;)
Ist das jetzt nicht ein kleines bisschen übertrieben? ;)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

BlackJack hat geschrieben:Ich habe mein Zeugs in einer recht flachen eher ungeordneten Verzeichnis"hierarchie". Ordnung kommt da erst durch ein lokales Wiki rein, wo die Verzeichnisse verlinkt sind.
Kann ich mir noch nicht so richtig vorstellen: Wie machst du es, wenn neue Projekte/Ordner etc. hinkommen? Musst du dann quasi eine "doppelte Buchführung" machen und manuell einen neuen Ordner anlegen und es im Wiki notieren? - Da du das vermutlich nicht tust: Wo/wie ist das automatisiert?
BlackJack

Doch ich mache das manuell. Unglaublich aber wahr. Das Wiki ist auch viel zu unregelmässig, als das die eigentliche Einordung dort automatisiert erfolgen könnte.

Man könnte natürlich ein Skript schreiben, dass das "Projektverzeichnis" abgrast und Wikiseiten für Unterverzeichnisse erstellt. Das würde sich aber nur wirklich lohnen, wenn es davon regelmässig mehrere geben würde.

Eigentlich tritt auch eher der umgekehrte Fall ein: Aus einer Projektbeschreibung und Notizen im Wiki wird ein Projekt im Dateissystem. Das ist aber auch immer nur eins nach dem anderen.
Antworten