BlackBerry eingerichtet

Nachdem ich mein WebOS-Device vor etwa einer Woche abgegeben habe, bin ich nun soweit und kann sagen, mein BlackBerry ist eingerichtet. Es gibt vielleicht noch eine Sache, die ich mir genauer ansehen will und einen Bug, der Rest ist durch.

Mein Setup

Zuhause werkelt ein NAS von Qnap. Auf diesem NAS liegen meine Dokumente und Mediafiles. Die Mediafiles kopiere ich einfach so rüber, im Moment wieder per SMB, ansonsten in ein gemountetes Verzeichnis. Auf meinem NAS ist noch ein Qnote, welches voll mit Daten ist und nur per Web genutzt werden kann. Diverse Dienste wie den mediaplayer habe ich deaktiviert, lediglich ein Monkeydingens läuft.

Bei meinen Dokumenten arbeite ich mit Owncloud, da Qnap keinen Sync-Client für Linux anbietet. Die Owncloud ist somit für alle Dokumente verantwortlich und zudem meine Zentrale für Kalender und Kontakte.

Mein Schleppi ist schon etwas älter. Auf ihm läuft ein Xubuntu. Die Dokumente werden, wie beschrieben, mit Owncloud gesichert – abgesehen vom Backup – und stehen mir so überall bereit. Thunderbird arbeitet via CardDav und Caldav ebenfalls mit der Owncloud zusammen und synct mir somit Kalenderdaten und Kontakte.

Mein BlackBerry greift ebenfalls auf die Owncloud als Zentrale zu. Die Kalender und Kontakte werden direkt synchronisiert. Außerdem nutze ich WebDav im meine Bilder direkt in die Cloud zu laden (wenn WiFi vorhanden) und den Android-Client um direkt in die Cloud zu gehen. Darüber hinaus nutze ich den integrierten SMB-Server um größere Datenmengen wie Mixtapes auf das Gerät zu bekommen. Alternativ kann ich hier den File-Explorer mit WebDAV Zugang nutzen, wozu ich aber die Daten erstmal in die Owncloud bekommen muss.

Dienstleister

Am liebsten würde ich auf diverse Dienstleister verzichten. Aber mein NAS kann eben nicht alles oder bietet keine Clients für Linux und BlackBerry. Und so nutze ich noch Remember the Milk und jetzt auch wieder Evernote. Diese Dienste kann ich sowohl auf dem BB als auch auf Linux nutzen. Auf der einen Seite arbeiten native Apps, auf der anderen Tasque und Everpad. Außerdem habe ich mich auf dem BB mal wieder mit der Dropbox verknüpft. Die wird nirgends gesynct und so kann ich da wenigstens reingucken. Neu hinzugekommen ist Pushbullet. Mit ihm kann ich Nachrichten von einer Maschine zur nächsten senden. Mal sehen ob mir das was nutzt.

Fehler

Das meiste läuft. Alles läuft. Außer der Sync der Kontakte. Kontakte, die mit dem BB erstellt wurden, werden bei jedem Sync neu in die Owncloud eingetragen. Somit habe ich inzwischen von drei Kontakten jeweils 20+ Einträge. Das ist lästig und einen Workarround habe ich nocht nirgends gefunden. Das Problem besteht seit 2013 (älteste Forumeinträge) aber nichts tut sich. Hier muss ich dringed was tun, sonst bin ich bald wieder bei einem Dienstleister *grr.

Außerdem wollte ich mal Dukto ausprobieren. Kackt aber ab. Da ich andere Möglichkeiten habe, muss ich das Tool nicht nutzen und so gammelt es vor sich hin.

Weitere Fehler sind mir noch nicht untergekommen. Ich bin zufrieden.

Optimierung

Die Sache mit den Notizen beschäftigt mich. Einfache Notes lasse ich auf dem BB, ich brauche diese nicht überall. Das ich aber Evernote und RTM nutzen muss, gefällt mir nicht. Zumindest für Evernote gibt es eine Alternative: Tomboy in Verbindung mit dem Owncloud-Tool grauphel. Grauphel ist ein Tomboy-Server mit eigener Oberfläche in der OC. Von dort könnte ich meine Notizen auf meiner Schleppi und auf dem BB mit einer Android-App nutzen. Mich stört dabei das „Android“ und das die Notizen wirklich nut Text sind. Aufgabenlisten wäre klasse. Außerdem mag ich mein schwaches NAS nicht zu sehr belasten, es hat mit der Cloud schon zu kämpfen. Naja, irgendwann, wenn ich Zeit habe, werde ich es ausprobieren.

Die ToDo-Liste von RMT ist ebenfalls sowas. Ich nutze sie schon lange und es ist okay, lieber wäre mir aber ein Sync über meine Owncloud. Ich habe noch nicht nachgesehen, was es da gibt, aber ich ahne es schon: wenig und altes.

Es fehlt

Erstmal nichts. Ich werde sehen, wie sich das alles entwickelt und was ich so alles an alternativen noch haben werde. Meine zukünftigen Experimente landen dann hier 🙂

Fusioninvoice

Auf Besis des Codeigniter gab es zwei beliebte Rechnungsprogramme, BambooInvoice und Fusioninvoice. Beide sind mitlerweilen eingestellt, bzw. nach einer Überarbeitung nur noch kommerziell erhältlich. Aber… Sie waren mal frei uns sind noch immer zu finden, wobei ich pro Fusion bin, das sieht schicker aus und kann scheinbar auch mehr. Für mich wichtig: Wiederholende Rechnungen, z.B. für Abos.

„Fusioninvoice“ weiterlesen

Codeigniter und MYSQLs DATE_FORMAT()

Man, jetzt hab ichs.

$this->db->select("DATE_FORMAT(beginn, '%d.%m.%Y') AS fbeginn")

wird durch den aktiven Schutz zu einem

DATE_FORMAT(beginn, `'$d`.`$m`.`$Y'`)`

und damit zu einem falschen Statement.

Den Schutz kann man deaktivieren. Die Select-Methode hat dazu einen zweiten Parameter:

$this->db->select("DATE_FORMAT(beginn, '%d.%m.%Y') AS fbeginn", FALSE)

Thats it 🙂

Aptana Studio 3 vs. PhpStorm

Nachdem bei uns in der Firma viel mit PhpStorm gearbeitet wird, habe ich mir auch einmal das Programm angesehen. Der Testzeitraum ist noch nicht zu Ende, aber ich kann ein erstes Fazit bilden.Ich werde die 99 Euro nicht ausgeben. Dazu bietet es einfach keinerlei Vorteile, die den Preis rechtfertigen würden. Noch schlimmer, es hat keine Vorteile im Vergleich zu Aptana, welches als angepasste Eclipse-IDE einfach extrem anpassungsfähig ist.

Was ich gerne nutze ist der Split-View. In Aptana kann ich den bequem einrichten, indem ich den Tab dort hin ziehe, wo ich das View gerne geöffnet hätte. Aptana regelt das von alleine und ist dabei sehr dynamisch. PhpStorm hingegen benötigt mindestens zwei Klicks bis ich den Split-View geöffnet habe und die nun doppelte Datei schließen kann. Es bietet zudem nur zwei Splits, einen Split im Split kann es nicht.

Bereits installiert ist ein MySQL-Editor. Den fand ich klasse und alleine deswegen hätte ich am Ende das Geld ausgegeben. Es ist einfach bequem aus dem Edior heraus in die DB zu schauen, wenn gerade der Name der Spalte einem nicht einfallen will. Aber… Eclipse bietet mehrere Plugins. Quantum ist bei mir gerade im Test.

Und dann habe ich so meine Probleme mit dem FTP-Upload mit copy&paste. Beispielsweise lade ich mir ein Theme für Bootstrap herunter. Ich entpacke es lokal und kopiere es per Strg-C und Strg-V in den Ordner meines Projekts. Es wird hochgeladen und fertig. PhpStorm macht das auch, wird aber zwischen der 5ten und 10ten Datei so träge, dass es schon mal eine Stunde dauert, bis die 30 Dateien hochgeladen sind.

Dafür gibt es bei Aptana keinen Option, mit der man Dateien sicher entfernt. Das war praktisch, wenngleich nicht immer korrekt bis das es gar nicht anschlägt, wenn die Datei über umwege aufgerufen wird, wie CI das in der Regel macht. Und das automatische erstellen der PHPDoc ist nicht integriert, da werde ich mal suchen.Für die, die mit Aptana/Eclipse PHP entwickeln wollen, werde ich mal die praktischen Erweiterungen auflisten…

Abhängige Selects mit JS

Mal wieder muss ich gaaanz tief in die JS-Trickkiste greifen 🙂 Ich benötigt abhängige Select-Boxen. Das heißt, die Auswahl der ersten Box beeinflusst die Möglichkeiten in der zweiten. Was kommt einen da am ehesten in den Sinn: JS.

Ohne jQuery

http://www.malleus.de/FAQ/createDependentSelectOptions3.html

Einfach und übersichtlich. Zumindest bei den kleinen Datenmengen. Leider passt das nicht zu meinem CMS-Konzept. Der Controller übergibt die Daten an ein HTML-Element, sie werden bei diesem Beispiel aber schon im Header benötigt.

Mit jQuery

http://www.appelsiini.net/projects/chained

Weil ich sowieso jQuery ständig mit mir herum schleppe, habe ich auch hier mal gesucht und eigentlich nur umstädndliche Lösungen erwartet. Das hier aber ist mindestens so sauber wie das oben. Und es passt zu meinem Code 🙂

Das ganze basiert auf Klassen und kann bei Bedarf auch per AJAX seine abhängigen Daten laden und das abhängige Select erstellen. Passt.

Komma als Dezimaltrenner in Codeigniter

Wenn man eine Formulareingabe per „decimal“ auf seinen Inhalt prüft, landet man bei einer Eingabe wie „5,99“ bei einem Fehler, dass das Feld dezimal sein muss.

Auch wenn man als Sprache bereits german nutzt, wird dieses Problem nicht behoben. Es hilft nur eines, die Validierung muss ungebaut werden:

http://stackoverflow.com/questions/8953923/with-codeigniter-how-can-i-accept-euro-currency-in-form-validation

dompdf und Papierausrichtung

So, nach ein wenig dompdf kann ich sagen: easy. Man kann aber die Ausrichtung oder Größen der Seiten innerhalb des Dokuments nicht ändern. Ein mal festgelegt bleibt es beispielsweise bei A4 und Portrait. Allerdings gibt es zwei Entwickler, die das ganze gefixt haben.

https://groups.google.com/forum/#!msg/dompdf/NvTKQkBPxVc/aEK_2NSk3LUJ

1. ykdompdf

Einen ersten Fix gibt es mit ykdompdf.

http://www.mediafire.com/download/g9lkzx3gl170nyb/ykdompdf.php

Wie es anzuwenden ist, ist im Dokument selbst erklärt. ykdompdf.php ist im Grunde überfüssig (siehe Schritt 2) aber die Codeänderungen an dompdf sind zu erledigen. Eigentlich ganz easy, nur ein Update von dompdf würde alles wieder zerstören.

2. dompdf_pages

Bei mir hat Schritt 1 nicht gereicht, es lief nicht rund. Außerdem sind im selben Beitrag oben ein paar Fehler genannt, die in einem weiteren Patch erledigt werden. Achtung: die im Forum angebotene Datei reicht nicht, deshalb hier entlang:

https://github.com/craigfrancis/dompdf/tree/page-merge/pages

dompdf_pages ersetzt ykdompdf.

Allerdings ist da noch eine class.pdf.php.diff. Ohne diese Änderungen werden geänderte Seiten nicht ausgegeben. Das war vermutlich auch mein Problem, so aber habe ich nun den Fix vom Patch und überhaupt alles zusammen 🙂

Man kann das ganze auch fertig bekommen, allerdings mit der dompdf-Version 0.6.0 statt 0.9.irgendwas+

https://github.com/craigfrancis/dompdf/tree/page-merge

Weiteres

Codeigniter

Das kleine How-To in den kommentaren verwendet load_html_file(). Das klappt nur, wenn auch wirklich eine HTML-Datei übergeben wird. Ich verwende dompdf mit Codeigniter und dort klappts nur mit einem load_html()

        $html1 = $this->load->view('/abrechnung/pdf/anschreiben', $data, TRUE);
        $ykdom->set_paper('a4','portrait');
        $ykdom->load_html($html1);
        $ykdom->render();

CSS-Formatierung

Wenn plötzlich eine leere Seite erscheint, dann ist da ein Seitenumbruch im CSS zu viel. Für hübsche Layouts gibts zumindest ein paar wenige Layoutoptionen im CSS.

http://www.css4you.de/printproperty.html

PDFs mit dompdf und Codeigniter

Ich war etwas auf der Suche ehe ich mich für dompdf entschieden habe. Warum? Es scheint am häufigsten benutzt zu werden und sollte somit noch ne Weile aktuell bleiben. Ich werde es ja sehen.

Außerdem ist es sehr sehr einfach. Man kann mit dompdf schlicht ein html-Dokument übergeben und dompdf macht daraus ein PDF, welches abgelegt wird oder direkt heruntergeladen werden kann.

Nun verwende ich für mein aktuelles Projekt Codeigniter. Ich war auf der Suche, wie man das nun bequem integrieren kann und habe nach etwas probieren mich für einen sehr simplen weg entschieden. Man könnte dompdf sicher in eine Library packen oder vielleicht als Driver bezeichnen und entsprechend verwenden, es gibt aber auch den Folder third_party und der hats mit angetan 🙂

Download dompdf

Das ganze gibt es hier (https://github.com/dompdf/dompdf) und kommt in den /application/third_party/ Ordner von Codeigniter. Ich habe das Verzeichnis noch von dompdf-master/ auf dompdf/ umbenannt.

Download font-lib-php

Mir warf dompdf beim ersten Versuch einen Fehler:

Warning: require_once(/var/www/dompdf-master/lib/php-font-lib/classes/font.cls.php): failed to open stream: No such file or directory in /var/www/dompdf-master/dompdf_config.inc.php on line 335
Fatal error: require_once(): Failed opening required ‚/var/www/dompdf-master/lib/php-font-lib/classes/font.cls.php‘ (include_path=‘.:/usr/share/php:/usr/share/pear‘) in /var/www/dompdf-master/dompdf_config.inc.php on line 335

Auslöser ist das fehlende font-lib-php. Also herunterladen (https://github.com/PhenX/php-font-lib). Im Ordner /application/third/party/dompdf/lib/php-font-lib den Ordner classes/ erstellen und den Inhalt von src/FontLib reinkopieren.

Includen

Wie gesagt, ich habe es mir einfach gemacht. Ich include einfach dompdf in der Methode, in der ich es brauche.

class Abrechnung extends CI_Controller {

    public function pdf()
    {
        
        require_once APPPATH.'third_party/dompdf/dompdf_config.inc.php';
        
        $data = '';
        
        $dompdf = new DOMPDF();
        $html = $this->load->view('abrechnung/pdf', $data, TRUE);
        $dompdf->set_paper('a4','portrait');
        $dompdf->load_html($html);
        $dompdf->render();
        $dompdf->stream("name.pdf");

    }
    
}

Das war es im Grunde schon. In diesem Code fülle ich das PDF noch mit einer HTML-Datei. Die Formatierung sieht noch etwas verunglückt aus, aber der Code wird ausgeführt und mein HTML angezeigt. Hübschmachen kommt jetzt 🙂

Beim herumexperimentieren hatte ich den Fehler

Fatal error: Uncaught exception ‘DOMPDF_Exception’ with message ‘An input file is required (i.e. input_file _GET variable).

Das passiert, wenn man anstelle der config-datei dompdf.php includiert. Also besser nicht machen 😉

 

Quellen

https://kyokasuigetsu25.wordpress.com/2011/02/09/how-to-use-dompdf/
http://stackoverflow.com/questions/17999091/how-do-i-get-dompdf-to-display-my-codeigniter-view-correctly
http://stackoverflow.com/questions/15028250/dompdf-fails-to-load