find.synology.com

Der Dienst „find.synology.com“ für die Installation neuer DiskStations ist großartig. Das muss mal gesagt werden. Nix mit „CD suchen“ und „Sie brauchen einen Windows-Rechner…“ oder ähnlichem. Gut gelöst und kundenfreundlich. Dirks Probleme bezüglich mangelhafter Downloadraten kann ich nicht nachvollziehen, allerdings brauchte ich auch keine Software außer einem Browser. Hier scheint sich also in der Zwischenzeit deutlich was geändert zu haben.

Liebe Schufa,

„Wir schaffen Vertrauen“ ist der Slogan der Schufa. Soso. ABER!

Wenn ich mich also für einmalige 18,50€, was an sich schon eine Frechheit ist, registriere bekomme ich gleichzeitig 100 Tage Update-Service kostenlos, danach kostet es 10,00€ / Jahr.

Wie man das kündigen kann? Das beschreibt die Schufa ganz offen und ehrlich mit Versalien(!) in einer E-Mail: „Liebe Schufa,“ weiterlesen

E-Book-Reader, mal wieder

Ein Bekannter von mir hat sich damals einen der ersten OYOs gekauft. Nun ist es so, dass Thalia auf Adobe Digital Editions setzt, eines der etablierten DRM-Systeme beim „Schutz“ von E-Books. Um das zu Nutzen braucht man eine Adobe-ID. Das hat >2 Jahre lang gut funktioniert. Bis der OYO kaputt gegangen ist.

Er hat sich dann einen der neueren Generation gekauft. Und wollte sich da anmelden. Ging nicht. Er muss sich die Bücher, wenn er sie nochmal lesen will, nochmal kaufen. Zu einem vollen Preis. Sagt Adobe. Und irgendwann habe ich resigniert, von E-Book-Readern abzuraten. Magengeschwüre und Co. kann man sich auch mit wichtigeren Dingen holen.

Wenn dein DRM also spinnt, ist das mieser, als wenn dein Haus mit einer Bibliothek abfackelt. Die ist in der Regel ja versichert…

Das sorgt dafür, dass für mich die einzig mögliche Alternative ein Kindle wäre. Klar, da gibts auch DRM. Aber auch Calibre und das eine oder andere Plugin dafür… Das ist für mich auch keine befriedigende Lösung, das wäre dann eher so ein Notbehelf. Aber so dringend nötig habe ich das noch nicht, außer natürlich jemand möchte mir so ein Gerät schenken. Dafür würde ich es nehmen. Bücher damit kaufen momentan eher nicht. Ich mag dieses „Wir verkaufen’s vermieten’s gerade mal nen Euro unter der Papierversion“ echt nicht. Allerdings bietet Amazon auch oftmals E-Books kostenlos an, da ist nicht immer nur Schrott dabei.

Wie Grunt meinen Workflow für WordPress-Themes verbessert hat

Vorweg: Es geht hier nicht um Freie Themes, die über das WordPress-Repository laufen, sondern um kundenspezifische Themes, die nur via Datei verteilt werden. (Das macht es unter Umständen auch für Entwickler von Premium-Themes interessant).

Wie arbeite ich und womit?

Ich arbeite mittlerweile extrem gerne mit LESS und das war der Grund, warum ich Grunt überhaupt einzusetzen begonnen habe. Da ich aber ungern mit der JS-Version rumspiele, um später mein WP-Theme für „Production“ wieder umzubauen, benutzte ich in meinem letzten Projekt, bei dem das Styling umfangreicher wurde, WinLess. Allerdings nutze ich gerne und exzessiv die Möglichkeit von LESS, Dateien auszulagern und an beliebigen Orten wie bei einem php include() einzubinden. Das hat zur Folge, dass mein „Haupt“-LESS-File in der Regel ein paar Konstanten wie Farben enthält, sonst aber alles nur mit @import eingebunden wird. Direkte Folge daraus ist, dass das Haupt-Stylesheet recht selten geändert wird. Da es aber wenig Sinn ergibt, jedesmal, wenn ich eine der inkludierten Dateien gespeichert habe, in die Master-Datei zu wecheln und „Leerzeichen rein, Leerzeichen raus, speichern“ zu spielen, damit der Compiler anspringt, habe ich nach Alternativen gesucht und endlich eine gefunden: Grunt.

Die letzten 2 Projekte habe ich mit mit _s von underscores.me als Starter-Template begonnen, hier ist für die Zukunft dann wohl der erste Schritt, das mitgelieferte style.css in LESS zu verwandeln.

Welche Grunt-Tasks benutze ich?

In der Kurzform:

grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-compress');

In der Langform:

Zuerst einmal benutze ich grunt-contrib-less um LESS in CSS umzuwandeln. Hierzu habe ich zwei Versionen: „dev“ und „prod“. Die beiden Versionen unterscheiden Sich da nur minimal:

less: {
  dev: {
    options: {
      paths: ["less"]
    },
    files: {
      "style.css": "style.less"
    }
  },
  prod: {
    options: {
      paths: ["less"],
      compress: true
    },
    files: {
      "style.css": "style.less"
    }
  }
},

Die „Production“-Version wird im Gegensatz zur Development-Version komprimiert, d.h. es werden alle Kommentare und überflüssige Leerzeichen und Zeilenumbrüche werden entfernt. Die dev-Version enthält dabei Zeilenumbrüche und CSS-Kommentare mit /* Kommentar */ werden dabei nicht entfernt.

Da WordPress aber mit dem Kommentar am Anfang der style.css arbeitet, brauchen wird dort einen Kommentar.
Ich habe meinen Theme-Header z.B. in der Datei „less/wp_header.less“. Diese Datei wird in meiner style.less-Datei importiert.

Da beim Erstellen der Produktionsversion alle Kommentare entfernt werden, muss ich in diesem Fall den Header vor das erstellte style.css einfügen.

Das mache ich mit dem concat-Task:

concat: {
  prod: {
    src: ['less/wp_header.less', 'style.css'],
    dest: 'style.css'
  }
},

Hiermit hänge ich den Header vor die style.css-Datei.

Für mich der absolute Grund, Grunt zu nutzen ist der Watcher-Task:

watch: {
  styles: {
    files: '**/*.less',
    tasks: ['less:dev']
  }
}

Hier wird definiert: Wenn ich in der Konsole „grunt watch“ eingebe, wird das Verzeichnis und alle Unterdateien überwacht. Ich definiere hier, dass jede .less-Datei überwacht wird, auch in den Unterverzeichnissen. Wenn sich eine Datei ändert, wird der Task „less:dev“ ausgeführt, sprich: das LESS-File wird compiliert. Mehr brauche ich nicht, um bequem entwickeln zu können.

Vorbereitung für das Deployment von „Premium“-Themes

Wenn ich freies WordPress-Theme entwicklen würde, so wie ich es mit meinen Plugins tue, dann ist das einfachste, das Theme im WordPress-Repository einzustellen. Via SVN lade ich die Sachen hoch, den Rest erledigt WordPress. Da ich aber spezielle, kundenspezifische Themes entwickle, die nicht im Repository auftauchen sollen, muss ich das Theme per Hand ausliefern.

Wenn ich die Webseite betreue, kann ich das unter Umständen noch selbst tun, indem ich meine Entwicklungsversion, wenn Sie „fertig“ ist z.B. per FTP-Client hochlade.

Wenn ich ein Premium-Theme vertreibe, muss ich allerdings meinen Kunden ein neues ZIP-Paket bereitstellen. Das kann man per Hand machen, man kann es aber auch automatisieren:

compress: {
  zip: {
    files: {
      'dist/theme-name.zip': [
         '*.php',
         '*.css',
         'license.txt',
         'readme.txt',
         'screenshot.png',
         'font/**', 
         'img/**', 
         'inc/**',
         'js/**', 
         'languages/**', 
         'layouts/**', 
       ]
     },
     options: {
       'rootDir': 'theme-name'
     }
   }
},

Ich definiere also, welche Dateien zusammengepackt werden sollen. Das endgültige Theme kann auch automatisiert die Versionsnummer in den Dateinamen gekommen, wie man der Doku von grunt-contrib-compress entnehmen kann. Die Notation mit den zwei Sternen ist die so genannte „minimatch“ Notation und bedeutet im Fall der Verzeichnisse, dass alle Unterverzeichnise und Dateien einbezogen werden sollen.

Im Fall des oben genannten watch-Tasks sagt der Pfad aus „.less-Dateien in jedem Verzeichnis“

Welche Tasks konfiguriere ich?

grunt.registerTask('default', ['less:dev']);
grunt.registerTask('production', ['less:prod', 'concat:prod', 'compress:zip']);

Ich brauche eigentlich nur 2 Tasks: Den Standard (für mich als Entwicklungs-Umgebung) und einen für den Production-Export. Letzterer führt nacheinander(!) die Tasks: „less:prod“, „concat:prod“ und „compress:zip“ aus.

Was geht noch?

Während Grunt in erster Linie auf Frontend-Dinge spezialisiert ist, und dafür auch entsprechende Testmodule unterstützt, ist ein Test für PHP beispielsweise mit PHPUnit nicht möglich. Abhilfe schaffen kann man dabei allerdings mit grunt-shell, mit dem man dann beispielsweise PHPUnit aufrufen und das Ergebnis und den Exit Code überwachen könnte.

Serverseitig wäre hier auch eine Verknüpfung mit git-hooks oder SVN-Hooks denkbar: Code nach dem Push/Checkin testen und den Entwickler benachrichtigen.

Was ist zu beachten?

Aktuell wird Grunt auf 0.4.0 geupgraded. Momentan sind alle „contrib“-Modul mit der neuen Version 0.4 kompatibel, allerdings ein Großteil der anderen Module nicht. Unter Grunt 0.3.x sind die contrib-tasks fest eingebaut und die Task-Konfiguration funktioniert etwas anders.

Peinlich

Eigentlich ist es echt peinlich, wenn nicht armselig, dass man in Deutschland nicht ohne Gefahr für sein eigen Hab und Gut einen Proxy für Anonymisierungsdienste betreiben kann.

grunt – die Lösung für mein Problem

Holla. Das grunt.js bietet mit den Modulen grunt-contrib-watch und grunt-contrib-less genau das, was ich immer gesucht habe für WordPress-Projekte.

/*global module:false*/
module.exports = function(grunt) {

    // Initialisiert Grunt mit den folgenden Projekteinstellungen
    grunt.initConfig({
		less: {
			development: {
				options: {
					paths: ["less"]
				},
				files: {
					"style.css": "style.less"
				}
			},
			production: {
				options: {
					paths: ["less"],
					compress: true
				},
				files: {
					"style.css": "style.less"
				}
			}
		},
		/*
			Watch less files
		*/
		watch: {
			styles: {
				files: '*.less',
				tasks: ['less:development']
			}
		}

    });

	grunt.loadNpmTasks('grunt-contrib-less');
	grunt.loadNpmTasks('grunt-contrib-watch');

    // Default task, der ausgeführt wird, wenn man Grunt
    // ohne weitere Parameter aufruft.
    grunt.registerTask('default', 'less:development');

};

Gist bei Github

 

Inspiriert dazu wurde ich durch einen Artikel bei den Webkrauts. Fertig ist mein Gruntfile allerdings noch nicht. Da muss noch ein bisschen Feinarbeit getan werden.

Linux als Spieleplattform

Ich finde es durchaus reizvoll, Linux als Plattform für große Produktionen von Spielen zu betrachten. Das würde nämlich endlich mal etwas Druck auf Hardwarehersteller erzeugen, die dann hoffentlich mal vernünftige Treiber die Linux bereitstellen müssten.

Spiele und Sex sind immer die richtigen und wichtigen Zugpferde, wenn es um die Einführung von neuen Technologien geht. Und Spiele sind da doch wirklich eine bessere Wahl wie als mit „unter Linux laufen die Pornos flüssiger“ zu „werben“.

Und Valve hat ja bei der Steam-Portierung schon festgestellt, das manche Dinge unter Linux schneller gehen…

Vielleicht wird dann ja 2013 das Jahr des Linux-Desktops. #scnr

Alles auf Anfang: Mein Jahresrückblick

Es gibt Momente im Leben, die man nicht mehr missen möchte. Diese Momente haben meistens auch die Eigenschaft, das eigene Leben komplett zu verändern und auf den Kopf zu stellen. Davon gab es dieses Jahr einige für mich.

Im Februar 2012 stand ich strahlend vor dem Standesamt, mit einer wunderschönen Frau und Braut, um uns herum Familie, Freunde, Bekannte und jede Menge Luftballons.  Vom Rest der Hochzeit bekamen wir als Brautpaar nicht wirklich viel mit und noch weniger zu essen. Irgendwann war’s dann auch vorbei, mit der Feier.

Drei Monate später: Ich sitze im Krankenhaus in Gelnhausen, in einem bullig warmen Raum, mit einem Bündel Handtuch, in dem ein kleines, wunderschönes Gesicht zu sehen ist. Ich habe gelacht, ich habe Rotz und Wasser geheult – vor Glück. Ich konnte es nicht fassen, dieses kleine zerbrechliche Wesen, zu klein, zu leicht, war ein kompletter Mensch. Mit Augen, Ohren, Nase, Mund, Arme, Beine, eben alles was ein Mensch so haben kann, nur in winzig: Kleine Finger, ein kleiner Mund, süße Ohren. Und kleine Füße.

Dieser Augenblick war der schönste Augenblick in meinem Leben. Führerschein, die erste Arbeit, die eigene Wohnung, das Motorrad, Heirat, alles großartige Dinge und Momente, wert gelebt zu werden; wert, Sie zu erinnern. Aber das alles ist nichts, absolut gar nichts gegen das Gefühl, das eigene Kind im Arm zu haben.

 

Damit beginnt etwas komplett neues. Alles auf Anfang.

Wohlfühldinge für den Desktop

Da ich ja schon mal schrieb, dass das Grid-Plugin von Compiz und sein Nicht-Vorhandensein in anderen Desktop-Environments ein Grund dafür sei, dass ich eher weniger umstiegslustig sei, habe ich mittlerweile eine passende Lösung gefunden, die auf jeden Fall unter KDE4 und Gnome3 funktioniert. Unter Gnome3 habe ich sie selbst laufen, unter KDE4 hat sie mein Kollege getestet. Dort auch sogar mit 2 Bildschirmen. Da ich nur einen habe, sei das mal egal.

Wer sich aber für so eine Grid-Lösung á la Winsplit Revolution interessiert, darf sich bei Stephan Sokolow bedanken, der das wunderbare Python-Skript „Quicktile“ geschrieben hat.