CodeLibrary - Software zur Quellcode Verwaltung

mscheitza
Hallo Leute,

ich habe selber lange nach einer Software gesucht, um Quellcode zentral zu verwalten. Mit "Quellcode" meine ich im wesentlichen folgende Dinge:

* Code-Snippets
* Wiederverwendbare Klassen, aber auch...
* Klassenbibliotheken
* Dialoge (bestehen in C# aus mehreren Dateien)
* Skripte (Batch, Shell, Perl)

Natürlich ließe sich das auch mit Subversion machen, aber ich habe da wirklich an eine Anwendung gedacht, die immer im Tray liegt und wo ich "mal eben" eine Klasse, einen Dialog oder was auch immer "herausziehen" kann.

Einer weiterer Punkt war, dass viele Entwickler gemeinsam an diesem Quellcode arbeiten können sollen. Es gibt zwar solche Anwendungen, die sind aber alle nicht kostenlos.

Meine Software heißt "CodeLibrary" und befindet sich zur Zeit in der Version 1.17.

Hier die Wesentlichen Features der Software:

Drag & Drop:
Fast alles funktioniert über Drag & Drop. Um z.B. eine Klasse zu importieren, zieht einfach die Datei in die CodeLibrary. Um eine Klasse aus der CodeLibrary zu exportieren, zieht sie aus dem Quellcode-Explorer in euer Dateisystem - beispielsweise direkt in euer Projekt.

Revisionsbrowser:
Alle Entwicklungsstände werden - ähnlich wie im SVN - vorgehalten und sind über den Revisionsbrowser einsehbar.

Verwaltung von Anhängen:
Im Gegensatz zu anderer Verwaltungssoftware für Code-Snippets bietet die CodeLibrary die Möglichkeit ganze Projekte oder Klassenbibliotheken einem Eintrag als Anhang hinzuzufügen.

Thementypen:
Jedem Eintrag kann und sollte ein Typ zugeordnet werden. Die Standardtypen sind "Klasse", "Klassenbibliothek" und "Code-Snippet". Die Thementypen können nach belieben erweitert werden.

Serverorientierte Architektur:
Die CodeLibrary basiert auf einer MySQL Datenbank. Alle Daten werden in dieser Datenbank gespeichert. Somit wird sämtlicher Quellcode zentral vorgehalten und kann von mehreren Entwicklern gepflegt bzw. eingesehen werden. Die gesamte Datenbankeinrichtung wird über den CLDB Installer vorgenommen.

Dateisystemsynchronisation:
Die CodeLibrary bietet die Möglichkeit, sich mit einem Verzeichnis zu synchronisieren. Dies ist z.B. für mobile Speichermedien sinnvoll. Habt ihr Quellcode auf eurem USB-Stick geändert, wird dieser als neue Revision in Ihre CodeLibrary übernommen und umgekehrt.

Integrierter Quellcode-Editor:
Die CodeLibrary enthält einen integrierten Quellcode-Editor, welcher alle gängigen Programmiersprachen wie z.B. C, C++, C#, Java, Perl, etc. kennt und Ihren Quellcode über Syntax Highlighting darstellt. Ihr könnt natürlich auch einen externen Editor zur Bearbeitung verwenden (Das Verhalten bei Doppelklick eines Eintrags lässt sich konfigurieren.)

Benutzerverwaltung:
In der "CodeLibrary" gibt es nur "Entwickler". Diese können direkt von authorisierten Entwicklern angelegt werden. Jeder Entwickler hat ein Profil, welches von anderen Enwicklern eingesehen werden kann. Es ist auch möglich, Entwicklern nur Leserechte zu erteilen.

Installation der Datenbank:
Die CodeLibrary basiert auf einem MySQL-Server. Dieser kann schon vorhanden sein oder nicht. Die Installation der Datenbank wird mit dem "CLDBInstaller" vorgenommen. Dort könnt ihr dann wählen, ob ihr eine vorhandene MySQL Installation benutzt oder automatisch einen MySQL-Server mitinstallieren wollt.
Bei dem aktuellen Release des CLDBInstallers wird ein MySQL Server 5.5 mitgeliefert.

 CodeLibrary Screenshots

CLDBInstaller, CodeLibrary Multi-User/Single-User/Portable:
 CodeLibrary Download Sektion

Viel Spaß damit!

Gruß

Marcel
Karill Endusa
Hallo mscheitza,

ich muss zugeben, dass ich wirklich sehr an diesem Programm interessiert bin und dass ich es gerne auch nutzen würde.

Leider bereitet mir der Punkt mit der MySQL-Datenbank noch Magenschmerzen, denn ehrlich gesagt wiederstrebt es mir, dass ich, um dieses Programm nutzen zu können, einen Datenbankserver installieren müsste.
Gäbe es unter Umständen die Möglichkeit eines Umstieges auf zum Beispiel SQLite (oder ein ähnliches "Server-unabhängiges" Datenbanksystem)?

so far
Karill
mscheitza
Hallo Karill Endusa,

wie gesagt, gedacht ist die Software eben als Mutli-User Anwendung, daher auch der MySQL-Server.

Es gäbe die Möglichkeit, die Software als Single-User Anwendung anzubieten. Dann würde ich wahrscheinlich SQLCE als DB mitliefern und die gesamte Benutzerverwaltung aus der Anwendung entfernen. Viel Aufwand ist das nicht...
Karill Endusa
Hallo mscheitza,

erst einmal danke für deine prompte Antwort und deine Bereitschaft, das Programm anzupassen.

Funktionieren sollte es zumindest noch in folgender Konstellation, wenn möglich:
- Heim-Netzwerk mit mehreren Rechnern.
- auf einem Client-PC läuft dein Programm (meinem Hauptrechner halt).
- von meinem Laptop aus würde ich gerne zugreifen können.

Aber wenn das nicht geht wäre ich voll und ganz zufrieden mit deiner Single-Client Lösung... sowas brauch ich unbedingt :)

so far
Karill
busecon
Hallo mscheitza,

vielen Dank für diesen beitrag und herzlich Glückwunsch zu Deinem Gedanken und zur Umsetzung. Leider ist das Thema Sourcecode-Verwaltung bei mir eher nicht existent als wirklich gelebt. Andererseits ist bei einzigelnen Entwicklern oft der Gedanke da das solches nicht wirklich erforderlich ist. Mit Dokumentationen ist es ähnlich.

Das bringt mich auf einen Gedanken, den ich eben beisteuern möchte:
hast Du einmal überlegt zu Klassen und auch Libraries die Möglichkeit einer separaten Dokumentation einzufügen? Oder habem ich das in Deinen Ausführungen überlesen?

Gruß, Karl

PS:
Hast Du eine Vorstellung wann eine 'SingleSuer'-Version verfügbar sein könnte?
tom-essen
Hallo!

Mal eine Frage:
Warum hast du nicht einfach die deiner Meindung nach fehlenden Funktionen für SVN nachgerüstet? Es gibt mittlerweile freie .NET-Komponenten, um auf SVN zuzugreifen.

Dann müsste das Rad nicht nochmal neu erfunden werden.
mscheitza
Zitat:
hast Du einmal überlegt zu Klassen und auch Libraries die Möglichkeit einer separaten Dokumentation einzufügen?

In der CodeLibrary sind im Endeffekt alles "Eintäge". Ein Eintrag hat immer ein Inhalt und kann einen Anhang haben. Soviel erstmal zur Grundstruktur.

Bei einer Klassenbibliothek ist der Inhalt standardmäßig einfach eine *.info Datei, die einen beliebige Beschreibung, Beispiele oder was auch immer zur der Klassenbibliothek enthält. Die eigentlichen Quellen befinden sich dann im Anhang.

Klickt man dann auf den Eintrag, sieht man auf einen Blick, wie man die Lib verwendet, so war zumindest die Idee.

Eine seperate Dokumentation von Einträgen ist nicht implementiert, ist aber mal für das nächste Release vorgemerkt ;-)

Zitat:
Hast Du eine Vorstellung wann eine 'SingleSuer'-Version verfügbar sein könnte?

Ich denke spätestens Ende dieser Woche.
FZelle
Bevor du irgendwie weitermachst solltest du evtl mal unsere Artikel durchsehen.
 [Artikel] Ressourcen schonen - Datenbanken richtig öffnen und schließen
 [Artikelserie] SQL: Parameter von Befehlen
 [Tutorial] Konfigurationsmodell im .NET Framework

Kommen mir da als erstes in den sinn.
Alf Ator
Hallo mscheitza,

intressantes Projekt hast du da. Ich fände es schön, wenn es eine portable Version geben würde. Dass würde natürlich auch ein ""Server-unabhängiges" Datenbanksystem" mit einschließen.

Meinst du sowas wäre machbar? Würde mich freuen.

Gruß, Alf
mscheitza
Hallo Alf,

auch das ist machbar. Ich versuche das mal diese Woche umszusetzen.

Zitat:
Bevor du irgendwie weitermachst solltest du evtl mal unsere Artikel durchsehen.

Hatte ich gerade übersehen, werde ich mir mal anschauen, Danke.

Eine Frage noch...

Ist dieser Beitrag aufgrund von Fehlern entstanden?

Gruß

Marcel
mscheitza
Ok, ich muss mich bzgl. der Single-Client Varianten nochmal korrigieren.

Nur hatte ich vorher noch nie versucht derart komplexe SQL-Queries zu in SQL Sprachen zu übersetzen, denen es an allem fehlt. Sämtliche Skripte und Queries könnten und müssten demnach abgeändert werden, was insgesamt sehr, sehr viele sind.

Bei SQLLite sieht es nicht anders aus: Auch dort gibt es kein Boolean, weiter habe ich nicht geschaut.
mscheitza
Hallo Leute,

wie versprochen ist nun Ende der Woche der Single-User Client und damit auch die Portable Version fertig geworden.

Die beiden Versionen findet ihr in Form eines neuen Releases V1.18 in der Download-Sektion:  CodeLibrary Download-Sektion

Hinweis:
Falls ihr die Runtime für SQL Compact nicht installiert habt, könnt ihr euch diese hier herunteraden:

 Microsoft Download Center: Microsoft SQL Server Compact 3.5 Service Pack 1

Ich versuche mal für das nächste Release eine Art Dokumentation für die einzelnen Snippets, Klassen, etc. zu implementieren, den Quellcode-Editor komplett in den CodeLibrary Dialog zu integrieren und die o.g. Runtime mit in das Setup zu integrieren.

Weitere Verbesserungsvorschläge, sowie Berichte über gefundene Fehler sind Willkommen.

Viel Spaß!

/EDIT:

Zitat:
Funktionieren sollte es zumindest noch in folgender Konstellation, wenn möglich:
- Heim-Netzwerk mit mehreren Rechnern.

Dafür ist doch die CodeLibrary gedacht. Du kannst auf deinem "Server" mit dem CLDBInstaller den MySQL Server inkl. CodeLibrary Datenbank aufsetzen und dann von allen anderen Rechner im Netzwerk darauf zugreifen.

Gruß

Marcel
Karill Endusa
Hallo mscheitza,

danke für die Umsetzung einer Single-User und einer portablen Version, ich werde mir beide mal ansehen (und freue mich jetzt schon darauf).

Zitat von mscheitza:
Zitat:
Funktionieren sollte es zumindest noch in folgender Konstellation, wenn möglich:
- Heim-Netzwerk mit mehreren Rechnern.

Dafür ist doch die CodeLibrary gedacht. Du kannst auf deinem "Server" mit dem CLDBInstaller den MySQL Server inkl. CodeLibrary Datenbank aufsetzen und dann von allen anderen Rechner im Netzwerk darauf zugreifen.

Entschuldige bitte den Denkfehler meinerseits. Das Problem, welches hier besteht ist, dass ich keinen wirklichen Server habe. Mal ist nur ein PC an, mal nur der Andere, mal beide zusammen.
Aber ich denke, mein Problem lässt sich am besten mit der portablen Version lösen... besonders, da einer der Rechner mein Laptop ist, den ich ja auch mit in die Schule nehme.

so far
Karill Endusa
mscheitza
Hallo Leute,

ich habe mir gedacht, langsam wäre es vielleicht mal wieder an der Zeit die CodeLibrary zu updaten.

Nur habe ich noch irgendwie zu wenige Ideen/Bugfixes/Vorschläge, um daraus ein neues Release zu erstellen.

Folgende Dinge sind geplant:

Features:
  • Anbindung an doxygen, automatische Erzeugung der Dokumentation für eine Klasse oder eine Klassenbibliothek
  • Automatische Updates
  • Direktes Hinzufügen eines Kommentars beim Anlegen von Einträgen
Bugfixes:
  • Automatische Wiederherstellung der Verbindung zum MySQL Server, auch wenn diese zwischenzeitig abgebrochen ist (nur interessant bei Multi-User)
  • Einbinden der SQL CE Runtime in die Anwendung (nur interessant bei Single-User & Portable)
Habt ihr vielleicht noch irgendwelche Verbesserungsvorschläge oder Ideen?

Gruß

Marcel
FZelle
Statt neuer Features wäre es sinnvoll mal darüber nachzudenken das Projekt als Lernprojekt für richtige Herangehensweisen zu benutzen.

Wenn man sich den Code anschaut ist da noch viel Platz für Verbesserung.
mscheitza
Ok,

dann nenn mir ein paar Punkte, von denen du meinst, dass diese im Quellcode verbessert werden könnten bzw. sollten, am besten per PN.

Reichen auch Links zu Artikeln, die sich darauf beziehen bzw. die ich mir deiner Meinung nach mal anschauen sollte.

/EDIT:
Besonders würden mich auch die Stellen im Code interessieren, die zu einem Fehlverhalten in der Anwendung führen könnten.

Gruß

Marcel