Archiv für die 'Programmieren' Kategorie

Datenbank-Entwurf mit Dia

Lange Zeit hatte ich nach einem grafischen Tool zum Datenbank entwerfen gesucht. Es sollte natürlich OSS sein, unter Linux laufen und möglichst DBMS unabhängig sein. ArgoUML kam mir dazu in den Sinn, doch irgendwie bin ich damit nicht so richtig warm geworden. Irgendwann bin ich dann über parsediasql gestolpert. Dies stellt eine Weiterentwicklung von tedia2sql dar. Dieses Script, in Verbindung mit Dia als Modellierungssoftware, gibt mir doch so ziemlich die Freiheiten, die ich haben wollte. Dia sollte bei jeder halbwegs tauglichen Linux-Distribution dabei sein und eine Windows Version gibt es auf der Projekt-Homepage auch. Parsediasql ist zumindest bei der Fedora nicht per default als Paket verfügbar. Da parsediasql sowohl ein Perl-Modul, als auch ein lauffähiges Script darstellt, ist Installation denkbar einfach; entweder über das hinlänglich bekannte CPAN oder durch:

make Makefile.PL
make
sudo make install

Installiert wird das Ganze dann nach /usr/local. Diese Script arbeitet lautet Aussage auf der Projekt-Homepage auch unter Windows, vorrausgesetzt man hat Perl installiert.

Bevor wir nun aber so richtig loslegen, will ich erst einmal ein Beispiel-Schema vorstellen, welches ich natürlich mit Dia erzeugt habe:

DB-Books-Schema

DB-Books-Schema

In diesem doch ziemlich simplen Entwurf ist alles enthalten, worüber ich schreiben möchte. Doch gehen wir Schritt für Schritt das Schema durch.

Als erstes wählen wir in Dia den UML-Objektbogen aus, so das unser Werkzeug-Fenster dann folgendermaßen aussieht:

Dia-Werkzeug

Dia-Werkzeug

Hier finden wir dann auch  unsere Buttons, die wir benötigen um das oben abgebildete Modell zu erstellen. Benötigen werden wir allerdings nur 4 Buttons, nämlich Klasse, Kleines Paket, Komponente und Aggregation. Wenn ihr mit der Maus über die jeweiligen Knöpfe in Dia fahrt, seht ihr einen Tipp. Im Schema sind diese durch verschiedene Farbe dargestellt:

hellrot: Komponente

hellblau: Kleines Paket

kein Hintergrund: Tabelle

Nun nehmen wir eine Klasse und erstellen uns damit eine Tabelle, wie im Schema abgebildet. Wir klicken auf den Klasse-Button im Werkzeug-Fenster und klicken danach irgendwo in unser Diagramm-Fenster in Dia. Schon haben wir eine kleine Darstellung, in der oben Klasse steht. Nach einem Doppelklick auf diese öffnet sich ein Fenster, in dem wir die Eigenschaften dieser Klasse/Tabelle bearbeiten können.

Tab-Attribute

Tab-Attribute

Unter dem Reiter Klasse vergeben wir den Namen der Tabelle. In dem Bild befinden wir uns im Attribute-Bereich. Dort legen wir die Spalten und deren Eigenschaften fest. Eine Besonderheit ist hier der Eintrag mit der Raute (#) vorne weg. Dies symbolisiert den Primär-Schlüssel. Definieren können wir ihn über die Eigenschaft Sichtbarkeit; diese sollte für den Primärschlüssel bei “protected”, anstatt “public” stehen. Ansonsten tragen wir die Parameter in die Felder Name, Type, Wert ein. Wenn ihr Längenbegrenzungen verwenden woll, so wie bei varchar(21), dann tragt ihr die auch im Typ-Feld so ein. In Wert-Feld kommen die Default Werte rein, z.B. eine Spalte vom Typ timestamp hat als Wert CURRENT_TIMESTAMP. Mit Anwenden oder OK speichert ihr die Tabelle. So verfahrt ihr dann mit jeder zu erstellenden Tabelle.

Jetzt schauen wir uns mal das Kleine Paket an. Das sind die Konstrukte mit dem hellblauen Hintergrund. Diese legt man genauso an wie eine Klasse. Nach einem Doppelklick erscheint dann folgendes Fenster.

Kleines Paket

Kleines Paket

Wir benutzen dieses kleine Paket, um sogenanntes “typemapping” zu betreiben. Das ist nichts anderes, als dafür zu sorgen, das in allen von uns zu erzeugenden SQL-Scripten, die Datentypen zu den jeweiligen DBMSsen passen. Wir wollen zum Schluß jeweils ein Script für MySQL und Postgresql haben. Da beide Systeme, unter anderem, unterschiedliche Definitionen des automatisch inkrementierten Zahlenwerten haben, benötigen wir hier eine Typen-Umschreibung. Wir legen also ein kleines Paket an und öffnen dann das Eigenschaften-Fenster, wie oben beschrieben.

Hier tragen wir beim Feld Stereotyp dann folgendes ein: Datenbank-Typ:typemap, wobei Datenbank-Typ für das jeweilige vom parsediasql unterstützte DBMS steht. Dies sind zur Zeit foldende:

MySQL mit den Engines InnoDB und MyISAM, Postgresql, DB2, SQLite3 und Oracle, um nur die wichtigesten zu nennen. Eine Besonderheit ist noch beim verwenden von MySQL zu beachten! Benutzt ihr die InnoDB Engine, muß der Eintrag im Stereotyp Feld mysql-innodb lauten, ansonsten wird’s nichts mit dem Script erzeugen.

Nach dem Klick auf den OK-Button schließt sich das Fenster und ihr wählt jetzt im Dia-Werkzeug Fenster den Textbearbeitungsbutton. Danach klickt ihr dann in das kleine Paket und tragt dort eure Datentypen ein. Also, in unserem Beispiel nehmen wir den Begriff “identity”, ist ja gleichzeitig unser Primärschlüssel, und weisen ihm unter mysql-innodb dem Typ “int unsigned auto_increment” zu, und für postgres nehmen wir dementsrechend “serial”. Für die jeweiligen Fremdschlüssel MÜSSEN wir auch ein typemapping vornehmen. Postgresql kennt keine “int(10) unsigned” Datentypen! Also fügen wir dort einfach noch fkidentity hinzu und geben bei Postgresql den Type integer an, und bei InnoDB den Typ int unsigned. Das gleich muß dann natürlich für die anderen DBMS Typen ebenso erfolgen. So das war’s auch schon hierzu. Alle anderen Eigenschaften dienen lediglich der Darstellung.

Wenden wir uns jetzt der Komponente zu. Das ist das Teil mit dem hellroten Hintergrund. Auch dieses wird so erzeugt, wie die Kalsse und das Kleine Paket. Und auch hier öffnent sich, nach einem Doppelklick, ein Eigenschaften-Fenster.

Komponente

Komponente

Diese Komponente dient uns zum Befüllen der Datenbank-Tabellen mit Beispielwerten. Im Realfall kann man damit Standardwerte schon beim Anlegen der Datenbank eintragen.

Im Stereotyp-Feld tragen wir den Namen der Tabelle, gefolgt von in Klammern stehenden Spaltennamen; also ähnlich wie im SQL-Dialekt auch. Nach dem Schließen des Eigenschaften-Fensters, durch Klick auf OK, können wir wieder mit dem Textbeabeitungswerkzeug die jeweiligen Werte eintragen, äquivalent zum Kleinen Paket. Die einzutragenden Strings (nicht Integer) sollten nicht in Anführungszeichen stehen, sondern in Hochkommata, da sonst Postgresql meckert.

Zum Schluß kümmern wir uns noch um die Aggregationen. Mit Hilfe dieser erstellt parsediasql dann Fremdschlüsselbeziehungen zwischen den Tabellen her. Hier eine Eigenschaften-Fenster:

Aggregation

Aggregation

Erstellen kann man diese, indem man im Werkzeug-Fenster auf den Aggregation Button klickt und dann eine Verbindung zwischen den Tabellen herstellt, ähnlich wie eine Linie zeichnen in einem Malprogramm.

Bei der Aggregation sollten wir die in der Abbildung links dargestellte Parameter einstellen. Oben steht der Name, ich habe mir angewöhnt, für Fremdschlüssel immer mit dem Prefix “fk_” zu beginnen. Sollte man aus versehen die falsche Richtung beim Linie ziehen eingeschlagen haben, kann man es hier noch korrigieren. Den Typ ändern wir für unsere Zwecke nicht. In den Rolle-Feldern tragen wir die Spalten ein, zwischen denen die Beziehung besteht. Bei der Multiplizität kann man noch die optionalen “on delete” und “on update” Eigenschaften definieren.

So, das war’s auch schon, zumindest was den grafischen Teil betrifft. Wir speichern das Diagramm und wechseln mit der Konsole/dem Terminal in dieses Verzeichnis und rufen dort

parsediasql --ignore_type_mismatch --file diagramm.dia --db mysql-innodb > innodb.sql

auf. Den Parameter “–ignore_type_mismatch” brauchen wir, da die Spalte mit dem Typ “identity” nicht einer Spalte mit dem Type “int(10) unsinged” entspricht. Dies gilt allerdings nur, wenn wir Fremdschlüsselbeziehungen drin haben. Außer ein paar Warnungen, die geworfen werden, wird auch nichts weiter angestellt. Diese können in den SQL-Scripten gelöscht werden. Schon haben wir ein fertiges SQL-Script, welches wir dann über den MySQL-Prompt oder PHPMyAdmin verwenden können. Für Postgresql, oder allen anderen unterstützten DBs, verfahren wir äquivalent. Ich habe mir für diese Zwecke ein Makefile angelegt mit folgendem Inhalt:

all:
 parsediasql --ignore_type_mismatch --file books.dia --db mysql-innodb > books-mysql.sql
 parsediasql --ignore_type_mismatch --file books.dia --db postgres > books-pgsql.sql

Jetzt rufe ich nach jeder Änderung einfach nur make auf und gut ist.

Es gibt noch ein Tool, sql2dia, welches zumindest für Mysql, die DB sozusagen refaktoriert und als Dia Diagramm speichert. Allerdings geschieht dies OHNE die Schlüsselbeziehungen.

Das war’s! Spielt einfach ein wenig damit rum. Es gibt noch viel zu entdecken, z.B. kann man auf diese Art und Weise auch Views erzeugen. Schaut einfach mal auf dieser Webseite vorbei (english). Das was dort beschrieben steht, gilt ebenso für parsediasql.

Have fun!

Erstellt am Freitag 30. Juli 2010
Unter: Datenbanken, Programmieren, Tools | Keine Kommentare »

Netbeans Farbschema

Da ich auch im Vim immer mit einem dunklen Farbschema arbeite, dachte ich mir, es wird Zeit auch für Netbeans ein solches zu besorgen. Ich weiß, es sind schon einige Schemas bei Netbeans dabei, doch die gefallen mir alle nicht so gut. Nach einiger Suche kam ich dann auf zwei nennenswerte, jedenfalls meiner Meinung nach. Das Eine findet ihr hier, und das Andere hier. Sind beide eigentlich recht gut, basieren sie doch auf alt bekannte Themes vom gEdit oder Textmate.

Ich wollte dann aber doch noch etwas anderes, und zwar mein eigenes Schema vom Vim, soweit wie möglich, auf die Netbeans IDE übertragen. Was dabei herausgekommen ist, seht Ihr auf den folgenden Screenshots.

Syntax Highlightning Java - Poolbyte Schema

NetBeans IDE 6.9 Java - Poolbyte Schema

Syntax Highlightning PHP - Poolbyte Schema

NetBeans IDE 6.9 PHP - Poolbyte Schema

NetBeans IDE 6.9 C - Poolbyte Schema

NetBeans IDE 6.9 C - Poolbyte Schema

Was mich an den anderen Color Schemes, welche ich im Internet gefunden hatte, am meisten störte, war die Tatsache, das sie fast immer nur mit einer Sprache auch wirklich gut aussahen. Ich habe mir das original Dark Pastels Theme genommen, da es meinem Vim Scheme am nächsten kommt, und habe dann angefangen, die Details zu verändern. Herunterladen könnt ihr Euch das Schema hier: PoolByte-Theme. Installieren lässt es sich am einfachsten über Tools->Options->Fonts & Colors. Dort findet Ihr einen Import Button unten links.

Erstellt am Donnerstag 1. Juli 2010
Unter: IDE, Netbeans, Programmieren | Keine Kommentare »

GoogleCL unter Fedora 13

Ich habe mir mal die GoogleCL Tools runtergeladen und unter der Fedora 13 installiert.

Als erstes erst mal die Abhängigkeiten studiert. Okay, wir brauchen die Python-Gdata-Bibliothek. Also

sudo yum install python-gdata

aufgerufen. Die Version, die bei der Fedora 13 dabei ist (2.0.9), passt. Danach das googlecl-0.9.7.tar.gz entpackt und in dem neu entstandenen Verzeichnis beherzt

sudo python setup.py install

aufgerufen. Nach ein paar Sekunden ist auch alles schon vorbei. Jetzt haben wir die GoogleCL Tools auch schon installiert. Ein kleiner Test mit

google contacts list

zeigt uns, das unter $HOME/.googlecl/ eine config Datei erzeugt wurde. Dort könnt ihr unter [global] euren Google Usernamen eintragen: user = euerusername. Damit erspart ihr euch das jeweilige angeben des Usernamens beim Aufruf der Tools. Beim ersten Aufruf eines der angebotenen Service (contacts, picasa usw.) wird euer Browser gestartet, um eine Authentifizierung durchzuführen. Ihr findet danach unter $HOME/.googlecl/ eine Datei mit dem Access Token für genau den Service, den ihr gerade das erste Mal aufgerufen habt. Beachtet, das diese Prozedur bei jedem erstmaligen Aufruf eines Services stattfindet.

Fazit: Ich finde diese CommandLine-Tools genial. Jetzt kann ich aus Scripts heraus schnell und unproblematisch auf von mir genutzte Dienste zugreifen. Zwei Szenarien fallen mir jetzt schon ein: automatische Synchronisation meiner E-Mail Adresse aus mutt heraus und vim nutzen, um einmal am Tag mein diary zu synchronisieren. Schon jemand ein Script fertig? ;-)

Nachtrag: Seit ein paar Tagen gibt’s die aktuellen GoogleCL Tools auch als fertiges RPM in updates für Fedora 13. Also einfach

sudo yum install googlecl

aufgerufen und gut ist.

Erstellt am Freitag 25. Juni 2010
Unter: Fedora, Linux und Unix, Programmieren, Tools | Keine Kommentare »

MongoDB und Fedora 13

NoSQL ist ja zur Zeit in aller Munde. So habe ich mich mal umgeschaut, und will mich in Zukunft ein wenig mit MongoDB befassen. Und da es für MongoDB für fast alle Mainstream Programmiersprachen einen Treiber gibt, lohnt sich der Blick, aus meiner Sicht, auf jeden Fall.

Als erstes steht allerdings  erst einmal eine Installation auf meiner Fedora 13 Workstation an. Es gibt auf den Download-Seiten des Projekts fertige, generische Binaries und auch RPMs für Fedora/CentOS, jedoch für Fedora nur 11/12 und auch nur als x86_64. Also heißt die Devise: selber bauen. Da ich diese Schritte auch für Fedora Neulinge nachvollziebar halten will, fange ich wirklich ganz von Vorne an. Alles was hier beschrieben steht, außer die Installationen mit yum, wird als normaler $User ausgeführt.

1. Mit

yum install rpm-build rpmdevtools auto-buildrequires

werden die nötigen Tools, und deren Abhängigkeiten, installiert. Diese sind grundlegend für das Bauen der RPM-Pakete. Des weiteren installiert ihr mit

yum install gcc-c++ cons js-devel readline-devel boost-devel pcre-devel

alle anderen, für den Build der MongoDB RPMs, benötigten Sachen.

2. Mit einem beherzten Aufruf von rpmdev-setuptree erzeugt ihr die nötige Ordnerstruktur. Danach solltete ihr in $HOME folgendes vorfinden:

  • rpmbuild/BUILD
  • rpmbuild/RPMS
  • rpmbuild/SOURCES
  • rpmbuild/SPECS
  • rpmbuil/SRPMS

3. Ihr entpackt das runtergeladene tar.gz Archiv von MongoDB und sucht dort nach einem rpm-Ordner. In diesem befindet sich eine mongo.spec Datei. Kopiert die mongo.spec in den SPECS Ordner. Das Verzeichnis des entpackten Archivs benennt ihr nun einfach von mongodb-src-r${Version} in mongo-${Version} um und erzeugt mit diesem Ordner ein neues Archiv, welches dann z.B. mongo-1.4.2.tar.gz heißt. Dies hat mit einigen Kleinigkeiten in der spec-Datei zu tun. Ich werde hier, in den nächsten Tagen, eine überarbeitete Datei zum Download anbieten.

4. Dieses Archiv kopiert ihr nun in den SOURCES Ordner der zuvor erzeugten rmpbuild Umgebung.

5. Wechlselt in den rpmbuild Ordner und gebt jetzt einfach rpmbuild -ba –clean SPECS/mongo.spec ein. Sollte alles richtig installiert sein, beginnt jetzt der übliche configure, make und build Prozess. Es dauert eine Weile, je nachdem wieviel Leistung euer Rechner bietet.

6. Ist der Build-Prozess abgeschlossen, solltet ihr in RPMS/$(eure Architecktur) 4 rpm-Dateien vorfinden, die alle mongo-irgendwas.rpm heißen. Von diesen 4 benötigen wir nur den mongo-server und das mongo Paket. Diese beiden installieren wir nun mit

yum localinstall --nogpgcheck paket1 paket2

Wer an MongoDB selbst entwickeln möchte, oder aber z.B. eine Schnittstelle zu PHP braucht, der sollte auch das devel-Paket installieren.

7. Zum Schluß geben wir als root/sudo noch schnell service mongod start ein und können dann im Browser unsere Vertrauens, unter http://localhost:28017, unsere Installation bewundern.

So, das war’s für’s erste. Jetzt habt ihr unter Fedora 13 eine funktionierende MongoDB Installation am Laufen. Wenn ihr mit PHP entwickelt, reicht nun ein

pecl install mongo

, vorrausgesetzt ihr habt das devel-Paket von MongoDB installiert. Für Java gibt es auch passende JDBC-Treiber auf den Projektseiten.

Erstellt am Donnerstag 10. Juni 2010
Unter: Datenbanken, Fedora, Linux und Unix, MongoDB, Programmieren | 4 Kommentare »

Netbeans 6.9RC1 und Git – Update

Ich habe mir den RC1 der Netbeans 6.9 IDE installiert, um ein wenig damit zu testen. Über den Fehler beim Zend Provider registrieren hatte ich mich schon früher ausgelassen. Ob der Fehler noch existiert, kann ich im Moment nicht sagen, da ich meine bestehende zf.ini verwende. Doch nun zum Thema!

Beim importieren der Einstellungen der 6.8er Version gab es einige Warnhinweise bezüglich einiger Plugins, einige waren sogar komplett inkompatibel. Unter anderem halt auch das nbgit Plugin. Auf der Webseite nachgeschaut, und richtig, es ist eigentlich mal für die Version 6.7 erstellt worden und seit dem ist da nicht mehr viel passiert. In Netbeans hingegen hat es die Eine oder Anderen API Veränderung gegeben.  Die letzten angebotetenen Downloads des Plugins stammen vom August 2009.

Jetzt kommt der große Vorteil bei OS-Software. Im Wiki nachgesehen und beherzt ein

git clone git://github.com/myabc/nbgit.git

eingegeben. Danach Netbeans 6.9RC1 gestartet, das Projekt geöffnet und per Rechtsklick [Update] erst ein “Clean and Build” [/Update] und dann ein  ”Create NBM” ausgeführt. Das Ganze ist somit gegen die aktuell API von Netbeans und meine Java 6 Installation kompiliert. Danach hatte ich im build-Ordner des Projektes eine nette kleine org-nbgit.nbm Datei. Diese dann, wie üblich, über Tools/Plugins/Downloaded installiert, Netbeans neu gestartet und alles ist schick. Das Plugin ist dadurch zwar immer noch als experimentell zu betrachten, jedoch jetzt aus der Netbeans 6.9 heraus ;-)

Nachtrag: Diese Methode bedeutet allerdings, das dieses Modul auch explizit gegen die API der verwendeten Netbeans Version kompiliert wurde. Nehmt ihr dann z.B. die RC2 von Netbeans 6.9, dann müßt ihr das Module neu bauen, da es ansonsten zu Fehlermeldungen beim Installieren kommt.

Erstellt am Donnerstag 27. Mai 2010
Unter: IDE, Netbeans, Programmieren | 2 Kommentare »

Zend Framework 1.9 erschienen

Das Zend Framework ist gestern in der Version 1.9.0 erschienen. Unter der Haube hat sich eine Menge getan, am wichtigsten finde ich allerdings den Support von PHP 5.2 UND 5.3! Ich habe es noch nicht ausprobiert, aber es soll ohne Probleme unter beiden PHP Versionen funktionieren. Einige wichtige Erweiterungen haben Zend_Pdf und Zend_Db_Table erfahren. Nicht zu vergessen, die Menge an gefixten Bugs und anderer Kleinigkeiten.

Erstellt am Samstag 1. August 2009
Unter: PHP, Programmieren, Zend Framework | Keine Kommentare »

Emacs 23 erschienen

Ich arbeite zur Zeit zwar mit dem Vim, habe aber damals, als ich Linux für mich entdeckte, den Emacs benutzt und geliebt. Irgendwann wurde mir das Ding dann doch zu sehr Dinosaurier, nicht mehr zeitgemäße GUI (Lucid), Font-Rendering war auch nicht der Brüller, usw.; es paßte einfach nicht mehr auf meinen schönen Ubuntu/Debian Desktop. ;-) So kam ich dann zum Vim mit nativem GTK-Tookit für die GUI; passt ja auch besser zu Gnome. Die Tastatur-Bedienung war kein großes Problem, da die vom Emacs auch nicht unbedingt so intuitiv ist. Ich meine, CUA ist bei beiden nicht der default Zustand.

So nu issa da, der Emacs 23.1, seit gestern nämlich! Hat native GTK-Unterstützung, kann UTF-8, rendert Schriften mit Fontconfig und Xft, und hat noch ein paar Modes spendiert bekommen. Nachlesen kann man das Ganze in der NEWS Datei.

Da ich nun mal zu der Sorte “extrem ungeduldiger Mensch” gehöre, habe ich mir die Sourcen mal eben rundergeladen. Bis bei Ubuntu die fertigen Pakete auftauchen, wird es wohl noch ne Weile dauern. Also den alten Emacs Kram aus dem System gepurged und ./configure –prefix=/usr/local && make und dann noch sudo make install. Fertig! Kein rumgemecker und gezicke. Achso, vor dem build-Lauf habe ich sicherheitshalber noch sudo apt-get build-dep emacs aufgerufen, um die vielleicht noch fehlenden Abhängigkeiten auf die Platte zu bekommen.

So nun an die Arbeit und die noch fehlenden modes installiert. Dazu unter ~/.emacs.d noch ein Verzeichnis erstellt (elisp). Hier die Dateien reinkopiert (php-mode.el, inf-ruby.el, snippet.el, find-recursive.el, das rails-mode Geraffel ). Dann wie üblich mit require ‘XXXXX-mode in der ~/.emacs die Modes geladen und schon hats nicht mehr getan wie es soll. Es kam immer ne nette Meldung im Emacs:

Warning (initialization): An error occurred while loading `/home/guenti/.emacs':
 
error: `c-lang-defconst' must be used in a file
 
To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.

Was nun? Also Google angeworfen und folgenden Hinweis gefunden. Also statt require dann (autoload ‘php-mode …) genommen und alles ist sowas von Schick!

Was mir in der kurzen Zeit auch noch positiv aufviel, ist die vorhandene Unterstützung von git. Da ich alle meine Projekte seit kurzem mit git verwalte, freut mich dies um so mehr.

Aussehen tut der neue Emacs jetzt so:

Emacs 23.1

Emacs 23.1

So nun will ich das Teil aber mal weiter ausprobieren. So wie ich greade gesehen habe, ist Speedbar jetzt auch per default dabei, super. Wer ne Alternative zu den manchmal doch etwas gigantisch wirkenden IDEs sucht, hat mit dem neuen Emacs vielleicht ne gute Wahl getroffen. Auch so, CUA kann man per Mausklick aktiviren ;-)

Erstellt am Donnerstag 30. Juli 2009
Unter: Linux und Unix, Programmieren, Tools | Keine Kommentare »

Rss Feed Tweeter button Facebook button Linkedin button Delicious button Digg button Flickr button