Article
0 comment

PostgreSQL: Backup a large database to disk

I really like database dumps with complete column inserts. You can read them, browse, search for some special data and even manipulate them. The most simple way to create such a readable backup is:

pg_dump --column-inserts --inserts --if-exists --clean --create -f FILENAME.sql DATABASENAME

There is one drawback: the files are large compared to the actual information stored und im- and export are rather slow. But there is a backup format that is both compressed and fast. It’s called “directory format”:

pg_dump -Fd -f DIRECTORYNAME -d DATABASENAME

This creates a directory called DIRECTORYNAME and dumps the content of DATABASENAME in a compressed format.
Getting the data back into the database is done with pg_restore:

pg_restore -C -d DATABASENAME DIRECTORYNAME

The -C option creates the database prior import.

Article
1 comment

PostgreSQL: Copy a table structure and data

Once again a short notice about some nifty PostgreSQL feature you might not be aware of. It’s quire simple to copy the structure of a table with:

CREATE TABLE table2 ( like table1 INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES );

Now you can copy data with or without some sort of filter:

INSERT INTO table2 SELECT * FROM table LIMIT 100;

Hope that helps.

Article
0 comment

PostgreSQL: Convert an hstore column to jsonb

I’m involved in a tech scouting project, where I designed a PostgreSQL database schema using an hstore column to store additional a priori unspecified data to every record in that table. For some historical reason I decided to use an hstore column instead of one of the much more versatile JSON column types.

Historical priorities change and so they did in that project. Now I wanted to use that column as JSONB. As always in SQL columns are changed with an ALTER TABLE … ALTER COLUMN statement. In this case the conversion of the content is a bit more complex, but giving PostgreSQL some hint about what we expect does the job.

First let’s create a table to play with and insert one row of data:

CREATE TABLE hstore_data (data hstore);
INSERT INTO hstore_data (data) VALUES ('key1 => "value1", key2 => "value2"');

Let’s see, if it looks OK:

SELECT * FROM hstore_data;

Yields:

                data                
------------------------------------
 "key1"=>"value1", "key2"=>"value2"
(1 row)

Fine. Next step is the magic column conversion:

ALTER TABLE hstore_data ALTER COLUMN data TYPE JSONB USING CAST(data as JSONB);

Another look:

SELECT * FROM hstore_data;

And we get:

                 data                 
--------------------------------------
 {"key1": "value1", "key2": "value2"}
(1 row)

Mission accomplished.

Article
0 comment

Learning by examination

I’m a studied chemist. This means, at least in Germany, I survived an endless number of oral exams. Most of them were boring. Some for me and most of them for the tester. But some of them were outstanding. Because of the atmosphere and the conduct of discussion by the tester. All of them were lead by older professors, none of them by one of their assistants.

What made them stand out was that the examination itself was sort of a conversation. Certainly not on eyes level but fairly unbiased. And I learned something. This means I didn’t fail a question and was reminded, that I didn’t know something but that in the course of the discussion my tester tried to control the flow of conversation in a way that I, by own thinking, learned something I unconsciously already knew but didn’t recognise.

One example: in my diploma exam in organic chemistry I was asked if I knew what was the predominant industrial chemical process scientifically examined in the first half of the 20th century in Germany. I knew many inorganic industrial processes invented by that time but didn’t realise that the main interest of Germanys chemical elite was coal liquefaction. Then I was asked if I knew what was one of the main products of direct coal liquefaction. It was toluene. Now the tester asked me about the inorganic processes I remembered: these where the Haber-Bosch process to yield ammonia gas from gaseous nitrogen and hydrogen and the Ostwald process by burning ammonia to nitrogen oxides at a platinum-rhodium catalyst, absorbing them in water to get nitric acid. Well, ok, whats that all together? From coal you get toluene, from simple nitrogen from the air you get nitric acid. tntWhat could a chemist do with that? Right: nitration of toluene to 2,4,6-trinitrotoluene, better known as TNT. So from end to end the coal liquefaction had nothing to do with preparing a liquid fuel. Instead it was a strategic process in times of war. Wow, I didn’t think that far by combining the facts I already knew …

I went out of those exams richer in knowledge and with more self-confidence. Well and usually with a good mark. What I didn’t know until recently is that this form of deep conversation on complex topics is something I really enjoy. Which has something to do with my psychological predisposition. But this is another story to be told separately.

Article
0 comment

Why “all incl” work contracts are a bad idea

It’s a constantly spreading habit of employers (at least in Germany) to offer work contracts which contain a passage saying that all overtime hours are included in the base salary. While this sounds like a good idea for employers, it eventually is not.

First there is some moral type of issue. The amount of work needed to fulfill a customer project is a entrepreneurial risk. This is why some people are employed and some are freelancing. The employed ones are offered a (somehow) fixed salary for his work time. The entrepreneur gets the surplus for taking the risk. Not paying overtime hours means to shift this entrepreneurial risk to the employee. Thats bad.

Then there is motivational issue. If I’m not paid for my time I have no interest whatsoever in a personal commitment exceeding my stipulated work time. My first project agency partner once said: “Think well, when investing your time without gain. Your work time is your only commodity. Don’t waste it without revenue.”

So think well when offering a contract to a prospective coworker: if you are interested in hiring a guy who cares for the project, then pay her/him by the hour. Don’t expect to be presented with his/her time.

(Image by http://deathtothestockphoto.com, License)

Article
0 comment

Welcome

Welcome to this (independant)  international version of my web site. Here I’m going to share some insight into my work. The explanation I like most of what I do is: I have the best job you can imagine. I can play around with new technology and find (often uncommon) solutions for problems of my customers. This is not limited (but includes) software development.

This page is still in design developmment. Nevertheless I would like to start filling the posts. So please bear with me while the design is still … minimal.

Article
2 comments

Klein und gut

Neulich rauschte ein Blogposting des kleinen Seitenstraßenverlages an mir vorbei. Darin geht es darum, daß so mancher Verlag mit den so oft romantisierten kleinen unabhängigen Buchhändlern seine Probleme hat. Und daß man bei Amazon wenigstens gleich fair (bzw. unfair) zu allen Großverlagen behandelt wird. Für keine der beiden Parteien wird eine Lanze gebrochen, beide haben ihre Vor- und Nachteile. Fand ich spannend.

Das machte mich aber auch auf ein typisches Marketing- bzw. Vertriebsproblem der kleinen Verlage aufmerksam: wenn die Buchhändler sie nicht promoten, wo findet man sie dann? Ja klar, im Internet. Marketing über die sozialen Netzwerke etc. Aber da kämpft jeder Verlag für sich alleine. Damit bleibt die Sichtbarkeit im Promillebereich. Andere Branchen haben da eine interessante Lösung. Amazon Shops, eBay und Dawanda eint ein Prinzip: hier finden sich tausende kleinere Anbieter unter einem Dach. Ich brauche keine Google-Suche, um eine bestimmte Angebotsseite zu finden. Auch wenn auf solchen Portalen “die Konkurrenz” ja mit vertreten ist, steigt die eigene Sichtbarkeit für potentielle Kunden an. Diese Portale haben natürlich auch ihre Probleme für Anbieter: die Gebühren für Einstellen und Verkauf sind teilweise exorbitant (gut, Verlage sind da ganz andere Abschläge aus der Buchhandelsbranche gewohnt) und die Plattform gehört einem Unternehmen. Das macht die Anbieter abhängig. Wenn z.B. eBay keinen Bock mehr auf professionelle Anbieter hat, sperren sie diese aus und die Anbieter sind mit einem Schlag nicht nur von ihrer potentiellen, sondern auch von der Stammkundschaft getrennt.

Auf Twitter entstand dazu folgende kurze Diskussion:

Meine Idee dazu wäre:

  • Was wäre, wenn es ein solches Portal für Kleinverlage gäbe?
  • Inhaber bzw. Betreiber sollte dabei eine Art Dachorganisation der Verlage sein, damit keine für die Verlage unfaire Gewichtsverteilung auftritt.
  • Zudem braucht es einen technischen Betreiber, der das Ganze entwickelt und für den Betrieb sorgt.
  • Über die Höhe evtl. anfallender Gebühren müßte man sich als technischer Betreiber mit dem inhaltlichen Betreiber einigen.
  • “Die Kleinverlage” ist eine sehr heterogene Gruppe. Man muß Mittel und Wege finden, den Verlagen das Einstellen der Bücher zu vereinfachen.

Klingt ja alles ganz nett, nicht wahr? Warum hat es bisher noch niemand gemacht? Vielleicht war das Kosten-Nutzen-Verhältnis nicht gut genug, vielleicht hatte jemand keine gute Verbindung zu Literatur an sich und den kleinen Verlegern (eine direkte Verbindung hab ich ja auch nicht). Wer weiß?
Nächste Frage: warum leg ich mich so ins Zeug für eine Idee, die dann offensichtlich anderen zu Gute kommt? Das ist gar nicht so einfach zu beantworten. Weil ich Literatur mag. Weil ich kleine Verlage mag. Weil ich die großen meist nicht mag. Weil der viel beschworene Zusammenbruch des Papierbuchmarktes vor allem die Großverlage mit ihren unglaublich aufwendigen Mechanismen treffen wird und die Kleinverlage vielleicht eine Möglichkeit sind, dieses Medium Buch, an dem ich so hänge, zu erhalten. Schaun wir mal, was jetzt passiert …

Nachtrag: eines ist schon passiert: der Seitenstraßenverlag hat die Reaktionen auf sein Posting mal zusammen gefaßt und im letzten Absatz werde auch ich mit meiner Idee kurz nicht-namentlich erwähnt ;)

Article
0 comment

Starting with Grails and Neo4J

Since Stefan Armbruster is a bit short of time to update the documentation of the Neo4J plugin for Grails I thought I start a short series of postings describing my progress in using Neo4J as a graph database for a Grails based application. I will use the REST API of Neo4J and not the embedded version.
Like always it starts with additions to grails-app/conf/BuildConfig.groovy. First we need to add the Neo4J maven repository to the repositories section:
[pyg l=”groovy”]repositories {
// …
mavenRepo ‘http://m2.neo4j.org/content/repositories/releases/’
} [/pyg]
Then I set my versions:

[pyg]neo4jVersion=”2.0.3″
neo4jRestVersion=”1.9″[/pyg]

 
Now we need to declare the dependencies:
[pyg]dependencies {
//…
compile “org.neo4j:neo4j-community:$neo4jVersion”
compile group:”org.neo4j”, name:”neo4j-graphviz”, version: neo4jVersion
runtime group:”org.neo4j”, name:”neo4j-shell”, version: neo4jVersion
runtime “org.neo4j:neo4j-rest-graphdb:$neo4jRestVersion”
}[/pyg]

En bloc that looks like this (caveat: this code block also installs the angularjs plugin!):

[pyg]grails.project.dependency.resolver = “maven” // or ivy
grails.project.dependency.resolution = {
// inherit Grails’ default dependencies
inherits(“global”) {
}
log “error”
checksums true
legacyResolve false

repositories {
    inherits true // Whether to inherit repository definitions from plugins

    grailsPlugins()
    grailsHome()
    mavenLocal()
    grailsCentral()
    mavenCentral()
    // uncomment these (or add new ones) to enable
    // remote dependency resolution from public Maven repositories
    //mavenRepo "http://repository.codehaus.org"
    //mavenRepo "http://download.java.net/maven/2/"
    //mavenRepo "http://repository.jboss.com/maven2/"
    mavenRepo 'http://m2.neo4j.org/content/repositories/releases/'
}

neo4jVersion="2.0.3"
neo4jRestVersion="1.9"

dependencies {
    // runtime 'mysql:mysql-connector-java:5.1.29'
    // runtime 'org.postgresql:postgresql:9.3-1101-jdbc41'
    test "org.grails:grails-datastore-test-support:1.0.2-grails-2.4"

    compile "org.neo4j:neo4j-community:$neo4jVersion"
    compile group:"org.neo4j", name:"neo4j-graphviz", version: neo4jVersion
    runtime group:"org.neo4j", name:"neo4j-shell", version: neo4jVersion
    runtime "org.neo4j:neo4j-rest-graphdb:$neo4jRestVersion"
}

plugins {
    // plugins for the build system only
    build ":tomcat:7.0.55"

    // plugins for the compile step
    compile ":scaffolding:2.1.2"
    compile ':cache:1.1.8'
    compile ":asset-pipeline:1.9.9"

    compile ":angularjs:1.0.0"

    // plugins needed at runtime but not for compilation
    runtime ":hibernate4:4.3.6.1" // or ":hibernate:3.6.10.18"
    runtime ":database-migration:1.4.0"
    runtime ":jquery:1.11.1"

}

}[/pyg]

This will get you started with the integration itself. In the next posting I will show, how to access data in the Neo4j database from a controller.

Article
0 comment

Neuer Wein in alten Schläuchen

Heute morgen las ich in der Frankfurter Sonntagszeitung vom letzten Wochenende (ja, ich komme nie dazu, eine Sonntagszeitung wirklich durchzulesen, das mach ich den Rest der Woche) ein Interview mit Thomas Vollmoeller, dem Vorstandsvorsitzenden von Xing. Darin wies er eindringlich darauf hin, wie sehr sich die Arbeitswelt geändert habe und noch ändere. Stellenbewerber hätten heute ganz andere Möglichkeiten als früher. Das erfordere auch von Firmen- oder Personalchefs ein anderes Daseinsmodell. Er zitierte hier den so oft strapazierten, aber ausnahmsweise mal angebrachten Begriff des Paradigmenwechsels.

Der Chef 2.0 soll Mitarbeitern morgens einen Grund zum Aufstehen und zur Arbeit gehen geben. Man müsse eine gemeinsame Aufgabe und Auffassung von dem, was man da tue entwickeln. Ihr seht schon, ich vermeide bewußt – so wie Vollmoeller – den Begriff ‘Vision’. Allerdings könne ein Mitarbeiter nur dort einem Firmenchef oder Vorgesetzter vertrauen, wo dies auf Gegenseitigkeit beruhe. An der Stelle schweiften meine Gedanken etwas ab, weil ich schon den Eindruck habe, daß sich da in den Chefetagen etwas bewegt hat. Ich bin bzw. war ja auch mal Chef und hatte eigene Mitarbeiter. Und habe ähnlich darüber gedacht wie er. Und ich habe aus vielen Firmen, in denen ich als Berater tätig war den Eindruck, daß das mit der Gegenseitigkeit noch nicht so recht funktioniert.

Ich kenne sehr viele Mitarbeiter, vorwiegend in IT Firmen, weil ich dort meist tätig war, die sich zwar über mangelndes Entgegenkommen ihres Chefs beschweren, aber selbst noch das “Wir gegen Die” Szenario im Kopf haben. Ich meine diese klassische Sicht von Gewerkschaften auf Firmen als das Böse schlechthin, daß dem Mitarbeiter die Lebenskraft aussaugt und dem man mit Blut und Schweiß einen Obulus abtrotzt. Ich weiß, daß ich hier maß- und hemmungslos übertreibe. Ich wollte das Bild möglichst bunt malen ;)

Natürlich kann man sich jetzt fragen, wie sehr die defensive Einstellung der Mitarbeiter auf Enttäuschungen mit dem Unternehmen beruhen. Und man sollte nicht aus dem Auge lassen, daß Firma und Mitarbeiter natürlich nicht alte Freunde sind, denen man blind vertrauen kann. Ich denke, ein Stück weit sind schon bestehende Arbeitsverträge das Problem. In neuen Verträgen kann man flexible Modelle aushandeln und dann eben auch deren Spielregeln festlegen. Alte klassische Arbeitsverträge als Grundlage flexibler Mitarbeiter zu sehen, die ein Stück weit für ihre Firma unternehmerisch denken, ist wohl etwas schwierig.

Und wenn man die neuen Arbeitsplatzregeln des Gesetzgebers liest, stellt man fest, daß die zwar dem Schutz der Mitarbeiter dienen sollen, aber eben auch exakt Null Flexibilität enthalten. Da sollen Arbeitszeiten immer und auf jeden Fall erfaßt werden. Das ist gut, weil es viele Menschen gibt, die ohne eine solche Kontrolle (wie effektiv die ist, sei mal dahin gestellt) von ihren Unternehmen oder sogar sich selbst, regelrecht ausgebeutet werden. Firmen wie Best Buy in den USA, die das “ROWE” (result oriented work environment) Prinzip eingeführt haben, sucht man trotz guter Debattenbeiträge wie den des geschätzten Autors Markus Albers leider in Deutschland meist immer noch vergeblich.

Ich kenne allerdings Unternehmen, die eine, man möchte sagen typisch deutsche, Mittelweglösung gefunden haben: dort gibt es eine Arbeitszeiterfassung. Aber da tragen die Mitarbeiter selbst ihre Zeiten ein. Ob die Werte richtig sind, kontrolliert im Normalfall niemand. Ich gehe mal davon aus, daß jemand, der täglich 8h einträgt, aber nie im Haus ist, schon auffallen würde. Die Zeiten, die da nachher in Summe heraus kommen pro Monat, interessieren weitestgehend auch niemanden. Problematisch wird das an der Stelle nur, wenn diese Stundenkontingente als Basis für die Abrechnung von Kundenprojekten benutzt werden. Das funktioniert an der Stelle nur, wenn der Kunde dem Unternehmen als Dienstleister ein gewisses Vertrauen entgegen bringt.

Article
5 comments

Blogparade: Struktur im Chaos – Wie ordnet ihr eure Notizen?

Einleitung

Heute würde ich auch mal gerne so ein Blogparadendings starten. Ich habe nachweislich hust ein Organisationsproblem, das ich gerne systematisch angehen würde. Dazu habe ich gestern das folgende Posting geschrieben.  Rebekka meinte dann, wenn ich gern Feedback hätte, wäre eine Blogparade vielleicht spannend. Dann versuchen wir das mal. Ich würde also gerne von euch wissen, wie ihr das so alles meistert. Aber lest erst mal selbst …

Wie ich auf das Thema kam

Ich habe gerade noch mit Nadine auf Twitter darüber diskutiert, wie man Notizen, Ideen, Termine etc. am besten niederschreibt. Das Thema kam auf, weil sie darauf hin wies, daß man jetzt Oxford Organiserbooks im Abo beziehen könne.

Was ist mein Problem?

Ich muß gestehen: ich besitze 2 Filofaxe, etwa 10 Moleskins und andere Notizbücker, u.a. auch von Leuchtturm 1917 und Herlitz und eine Mappe von Exacompta. Mit dem Meetingbook von Exacompta bin ich bisher am besten zurecht gekommen, die Notizbücher werden sehr schnell „mißachtet“.
Das liegt daran, daß ich mich mit so vielen Themen gleichzeitig beschäftige. Wenn ich dann etwas zu Thema 1 notiere, aber noch nocht fertig bin, dann aber ein zweites Thema habe, weiß ich nicht, wieviel Platz ich in gebundenen Büchern lassen soll. Oder ob überhaupt. Oder ob ich dafür ein neues Notizbuch anfangen soll.

Wir kommen der Sache näher …

Ich denke, mein Problem ist auch weniger das Medium, auf dem ich Notizen hinterlasse, als mehr das System. Ha! System. Ich habe für fast nichts ein System. Nicht für Ablagen, nicht für Notizen und nicht für wichtige Papiere. Das macht das Leben manchmal etwas anstrengend. Vielleicht sollte ich mal ein Requirement-Profil erstellen, wie beim Bau von Software, weil damit kenne ich mich aus. Also los:

Die Anforderungen

Fassen wir zusammen:
– Ich möchte alles mögliche in einem Medium/Buch/Block/Notizheft aufschreiben
– Ich möchte das auf Papier tun. Ich habe auch einen Evernote Pro Account. Die digitale Erfassung von Ideen geht mir aber nicht spontan genug. Evernote ist mein Archiv …
– Ich möchte Entwürfe für Artikel/Postings, Meeting-Notizen, Projektideen etc. in einem Heft oder Buch haben. Mehrere Notizbücher durch die Gegend zu schleppen ist mir zu schwer.

Was bisher nicht funktioniert hat

Evernote ist mein Archiv, wie ich schon sagte. Für spontane Schreibanfälle ist es mir zu kompliziert, erst eine App aufzumachen und dann los zu schreiben. Zumal ich Entwürfe immer direkt ausformuliere, das wäre auf dem Handy zu viel Text und einen Laptop habe ich nicht immer dabei.
Einfache Notizbücher fange ich immer mit Begeisterung an und mache dann nicht mehr weiter, weil ich, wie gesagt, ein Problem mit dem Themenwechsel habe.

Was passiert jetzt?

Ich werde so ein Oxford International Organiserbook testen und darüber berichten, ob und wie ich es verwende. Mich würde aber auch interessieren, wie ihr eure Notizen organisiert. Schreibt mir einen Kommentar oder macht doch auch ein Posting ;)

Und da Rebekka die schöne Idee hatte, nominiere ich sie. Auch würde mich interessieren, wie Uschi sich organisiert. Vielleicht mag sie ja auch etwas dazu schreiben. Natürlich darf auch jeder andere dazu schreiben, ich werde alles (ja ALLES!) hier verlinken.