Skip to content

Heimathafen Wiesbaden - Coworking-Space

Heimathafen Wiesbaden: Das zukünftige Café

Immer wieder mal spreche ich mit anderen Selbständigen/Freelancern über das Konzept Coworking-Space. Die meisten äußern dann Bedauern darüber, dass es in Frankfurt, Wiesbaden oder Mainz kaum derartige Angebote gibt. Eine - unvollstänige - Übersicht bietet das Portal coworking.de für Hessen und Rheinland-Pfalz.

Dabei ist das Prinzip Coworking gar nicht mehr so neu. Schon vor fünf Jahren habe ich auf dem ersten Frankfurter Barcamp durch Johannes davon gehört. Aber so richtig durchgesetzt hat sich Coworking (hierzulande) bisher offenbar nicht. In letzter Zeit scheint es aber Bewegung zu geben. Gerade hat in Mainz das sympathisch wirkende Work & Friends eröffnet, und an der Wiesbadener "Rue" gibt es das Urbanhouse, von dem ich auch erst vor kurzem erfahren habe. Update: Ich wurde gerade auf das Nizza Loft in der Adolfsallee hingewiesen.

Anfang August soll nun ein weiterer Coworking-Space in Wiesbaden aufmachen: Der Heimathafen in der Adelheidstraße. Ich habe dem Heimathafen heute einen Besuch abgestattet und mir die Räume mal angeschaut.

"Heimathafen Wiesbaden - Coworking-Space" vollständig lesen

Barcamp Karlsruhe 2012 - Nachbericht

In einer Session beim Barcamp Karlsruhe

Am Wochenende war Barcamp in Karlsruhe in den Räumen von CAS Software bzw. im großen Zelt im Innenhof, das sich als erstaunlich brauchbar erwies. Etwa 200 Teilnehmer sorgten dafür, dass die 6 Sessionräume durchgängig ausgelastet waren. Natürlich waren unter den vielen Session auch einige dabei, die mich ganz besonders interessierten.

Sessions

Johannes Volk stellte das CMS Pimcore, das ich selbst vor einiger Zeit schon einmal getestet habe und über das ich seitdem viel Gutes gehört habe. In der Tat ist die aktuelle Version von Pimcore einen erneuten Blick wert. Ein Test dieses flexiblen Systems, das auf dem Zend Framework aufbaut, steht jetzt weit oben auf meiner Todo-Liste.

Thomas Witzenrath brachte mich dazu, noch am Sonntagabend eine eigene Owncloud zu installieren. Owncloud ist ein Dropbox-Ersatz, der komplett auf dem eigenen Server läuft. Ich hatte das schon eine Weile vor, schwankte bisher aber zwischen Owncloud und Sparkleshare. Bisher macht Owncloud einen guten Eindruck, aber vielleicht teste ich auch Sparkleshare einmal.

Unterhaltsam und auch lehrreich war das "Urherberrechtsquiz" von Astrid Christofori. Es zeigte sich wieder einmal, dass dieser Themenbereich so komplex ist, dass selbst Nutzer mit langjähriger Interneterfahrung mit ihrer Einschätzung nicht immer richtig liegen.

David Heidt hielt einen sehr inspirierende Session darüber, wie mit nginx und naxsi eine Web Application Firewall aufgebaut werden kann. Sah gar nicht so schwer aus und ist jedenfalls ein Anreiz, sich mit nginx und den weiteren Möglichkeiten auseinanderzusetzen.

Von Joachim Eckert erfuhr ich einiges über das Yii-Framework für PHP, über das ich immer wieder stolpere. Es bringt einige sehr interessante Ansätze mit, die vermutlich auch die Symfony2-Entwickler inspiriert haben. Persönlich halte ich weiterhin Symfony2 für das momentan beste PHP-Framework, aber Yii kommt schon recht nahe ran. Und angeblich soll es demnächst einen kompletten Rewrite von Yii geben.

"Barcamp Karlsruhe 2012 - Nachbericht" vollständig lesen

Histogramm-Werte auslesen mit ImageJ

Die @daehaex, die gerade an "organotypischen Co-Kulturen" forscht, fragte heute über Twitter, ob jemand das kann:

ein macro für imagej schreiben, das mir als batch aus einem ordner voller binärer tiffs von allen bildern mit bildnamen die anzahl der pixel mit der value 0 und value 255 auflistet? quasi wie die funktion "histogram" nur ohne die values 1-254.

Da ich von ihren Analysen zwar keine Ahnung habe, ihr aber trotzdem gern helfen wollte, habe ich mir flugs ImageJ aus den Ubuntu-Repositories installiert, die Dokumentation der Makro-Funktionen ergooglet und noch dieses hilfreiche PDF-Tutorial gefunden. Herausgekommen ist am Ende folgendes rudimentäre Skript, dessen Output als CSV in $Tabellenkalkulation importiert werden kann.

dir = getDirectory("Choose Directory ");
list = getFileList(dir);
setBatchMode(true);
for (i=0; i<list.length; i++) {
    showProgress(i+1, list.length);
    filename = dir + list[i];
    open(filename);
    getHistogram(0, counts, 256);
    print('"' + getInfo("image.filename") + '",' + counts[0] + ',' + counts[255]);
    close();
}

Geht bestimmt auch eleganter, aber es funktioniert, der Wissenschaftsbetrieb kann aufrecht erhalten werden, und ich bekomme demnächst ein Bier spendiert :-D

Barcamp Karlsruhe - Vorschau

Logo Barcamp KarlsruheAm Wochenende findet zum zweiten Mal das Barcamp Karlsruhe statt. Bei der ersten Ausgabe im letzten Jahr konnte ich nicht dabei sein, aber diesmal klappt es. Nur zur Warmup-Party heute Abend hat es leider nicht gereicht. Aber macht nichts.

Jeweils über 200 Teilnehmer sind es am Samstag und am Sonntag, darunter einige bekannte und viele neue Gesichter. Wenn ich es richtig sehe, sind an beiden Tagen noch einige Plätze frei, für Kurzentschlossene ist also noch Platz.

Ich hatte ursprünglich zwei Sessions angedacht: Eine über Symfony2 und eine zum Thema Openstreetmap für Einsteiger. Aus zeitlichen Gründen habe ich allerdings nur letzteres Thema halbwegs vorbereiten können, und auch da wird einige Improvisation nötig sein, falls es genügend Interessenten gibt.

Wie auch immer, ich freue mich aufs Wochenende, denn genauso wichtig wie die Sessions sind mir ja auch die Gespräche mit anderen Teilnehmern vor, zwischen und nach den Sessions.

Symfony2 Tipps und Tricks (2)

Alle Beiträge dieser Serie sind unter dem Tag sf2tt zu finden.

Weiter geht's also mit meiner kleinen Reihe "Symfony2 Tipps und Tricks". Heutiges Thema sind Formulare und Subformulare, auch bekannt als Embedded Forms, und insbesondere deren Validierung. Lest vorher am besten auch das Cookbook-Kapitel "How to Embed a Collection of Forms"(http://symfony.com/doc/current/cookbook/form/form_collections.html), um eine noch bessere Vorstellung von den ineinander geschachtelten Formularen zu bekommen.

Die Problemstellung

Häufig dienen Formulare der Bearbeitung von Daten, die aus der Datenbank kommen. Das geht auch sehr einfach, indem man eine Entity in ein entsprechendes Formular hineingibt. Allerdings muss die Entity ja nicht zwingend über ORM einer DB-Tabelle entsprechen. Entities können auch einfache Objekt sein, die Daten enhalten. Das kann schon mal sinnvoll sein, wenn man Werte aus vielen DB-Feldern zusammenziehen und anzeigen möchte.

Wie im Handbuch beispielhaft gezeigt, wird der Formtyp CategoryType ins Formular TaskType "eingebettet". Entsprechend ist Category ein Attribut von Task. Was aber, wenn statt Category ein Array von Kategorien möglich ist? Dann reicht der vorgeschlagene Constraint @Assert\Type(type="Acme\TaskBundle\Entity\Category") nicht aus bzw. die Validierung schlägt fehl, weil ja ein Array von Category-Objekten erwartet wird.

Die Lösung

Hier kommt der Valid Constraint ins Spiel. Denn sollen alle Entities Category im Array zusammen mit Task über das Formular TaskType (und das Subformular CategoryType) validiert werden, muss gewährleistet sein, dass die Validierung auch für diese greift. Das geschieht leider nicht automatisch, sondern erst, wenn das explizit verlangt wird.

namespace Sperrobjekt\Sf2ttBundle\Entity;

use Doctrine\ORM\Mapping as ORM,
    Sperrobjekt\Sf2ttBundle\Entity\Category;

/**
 * @ORM\Table(name="task")
 * @ORM\Entity
 */

class Task
{
    /**
     * Array mit Kategorien vom Typ Category
     *
     * @var Category[]
     *
     * @Assert\Valid()
     */

    protected $categories;
    /* ... */
}

Damit wird auch das Unterformular bzw. die entsprechende Entity ganz normal validiert. Idealerweise werden Validierungsfehler noch mittels error_bubbling an das "obere" Formular durchgereicht.

Ich hoffe, das war verständlich beschrieben, und meine Lösung ist auch korrekt. Jedenfalls funktioniert es für mich damit. Ich bin aber immer für Verbesserungsvorschläge in den Kommentaren offen; schließlich gibt es auch bei Symfony2 meistens nicht nur einen Weg zum Ziel ;-)