Pipe Operator in Ansible nutzen

Ansible ist ein nettes Tools  um deklarativ Rechner über SSH zu administrieren oder aufzusetzen. Deklarativ meint, daß man Zustände definiert die Ansible herbeiführen soll. Man erklärt in Tasks welche Software auf einem Rechner installiert sein soll und Ansible führ diesen Zustand herbei.

 

Ab und an muß man diesen deklarativen Pfad leider verlassen. Im konkreten Beispiel müßen alte Datenbanken (benannt nach dem Schema YYYY-mm-dd-hh-i-s)  gelöscht werden damit das RDBMS nicht volläuft. Wichtig ist es statt command shell zu nutzen, da es sonst mit dem Pipen nicht klappt.

- name: remove old databases
  shell: mysql  --user={{ vault_mysql_server[env][tld].wp_content_user }} --password='{{ vault_mysql_server[env][tld].wp_content_password }}'  --batch --execute "show databases;" |grep wp_content|sort -hr  |tail -n+4|while read line; do mysql  --user={{ vault_mysql_server[env][tld].wp_content_user }} --password='{{ vault_mysql_server[env][tld].wp_content_password }}'  --batch --execute  "DROP DATABASE $line;" 2>/dev/null;done
  register: debugOutput

Gaming Apps, Android vs. iOS

android

Bild von JD Hancock 

Es ist die alles entscheidende Frage, wenn man sich ein Smartphone oder Tablet kauft. Für welches mobile System entscheide ich mich bloß, Android oder iOS? Wer sich ganz neu orientieren will und vielleicht bisher einfach noch kein Mobilgerät besessen hat, steht vor der Qual der Wahl. Wer hingegen vorher schon eines der zwei Systeme ausprobiert hat, bleibt meist auf derselben Seite. Die Fronten sind verhärtet, jeder lobt das in die Höhe, wovon er selber überzeugt ist. Das hilft denjenigen, die ernsthaft vor der Wahl stehen, jedoch nicht im Geringsten. Deshalb sollte man sich als zukünftiger Nutzer darüber klar werden, welcher Bereich einem am wichtigsten ist.

Wer gerne spielt und dafür jede Menge Apps herunterladen möchte auf seinem neuen Gerät, sollte doch zum Beispiel einmal versuchen, die zwei Systeme auf diese Frage hin zu überprüfen. Heute kann man ja bereits Spiele aus den unterschiedlichsten Bereichen finden und auf das Smartphone oder Tablet laden, so dass man zu jeder Zeit und von überall aus seinem Lieblingsspiel nachgehen kann. Glücksspielseiten wie Coral oder 32Red beispielsweise bieten entsprechende Apps für beide Systeme an, dann wären da noch beliebte Quizspiele oder Geschicklichkeitsvarianten. Leider hat der Nutzer im Voraus meist nicht die Gelegenheit, beide Systeme auszuprobieren und zu gucken, mit welchem es sich besser spielen lässt. Spielen Sie online bei 32Red, doch erkennen, wie es sich bei iOS oder Android spielt, werden Sie erst, wenn Sie das Gerät besitzen.

So muss man sich vor dem Kauf zumindest darüber informieren, welche Spiele denn überhaupt für welches System im Angebot sind. Online Casinos und gängige Gaming Optionen sind im Grunde fast alle für iOS sowie Android zu haben. Allerdings gibt es auch hier Ausnahmen und wenn man sich erst für ein System entschieden hat, steht man am Ende vielleicht dumm da, weil gerade dieses nicht von dem Anbieter der ersten Wahl zur Verfügung gestellt wird. Wenn es um exklusive Spiele geht, dann ist tatsächlich zu erkennen, dass der App Store für die iOS Variante mehr zu bieten hat. Im Vergleich zu Android Spielen, die fast alle auch für iOS zu haben sind, gibt es eine ganze Reihe an Möglichkeiten, die eben wirklich nur für das iPhone oder iPad angeboten werden. Das wäre möglicherweise ein Grund dafür, sich für iOS zu entscheiden.

Was die Anzahl der Spiele im Allgemeinen betrifft, sind beide Systeme mit über einer Million aktiven Apps auf fast demselben Stand. Von diesen sind fast 25 Prozent Spiele-Apps für jede Plattform. Was die Qualität betrifft, so muss man sich auf die Bewertungen der Spieler verlassen. iOS Nutzer vergaben hier in der Vergangenheit in den Bewertungen höhere Punktzahlen, also durchschnittlich viereinhalb Sterne von fünf möglichen. Android Nutzer hingegen haben bei den meistgespielten Apps eine Durchschnittsbewertung von vier Sternen abgegeben. Beide Systeme schneiden insofern aber enorm gut ab mit nur geringen Unterschieden. Vielleicht muss man sich also an anderen Punkten orientieren, zum Beispiel dem Sicherheitsaspekt, oder sich einfach ins kalte Wasser stürzen und sich in eine der zwei Blasen begeben. Dann gehört man bald wahrscheinlich auch zum Fanclub des einen oder anderen.

Mehrere Bildschirme mit dem Thinkpad W530

Eines der nervigsten Bastelthemen die mich jemals beschäftigt haben war die Konfiguration dieses Laptops für den Linuxbetrieb. Die Installation von Debian verlief problemlos – das Thinkpad wollte jedoch auf Gedeih und Verderb nicht mit mehreren Displays arbeiten. In dem Thinkpad arbeiten 2 Grafikkarten, eine von Intel und eine NVIDIA Optimus. Da mir das Umschalten mit Bumblebee zu umständlich war habe ich im BIOS die NVIDIA Karte als Default ausgewählt – siehe Screenshots und den proprietären NVIDIA Treiber installiert.

Diese Konfiguration läuft jedoch nur bedingt – ab und an bootet das System und manchmal leider nicht. Das Stichwort lautet waiting for /dev to be fully populated. Die Lösung ist dieses Problems ist absolut logisch und selbst für den Laien verständlich – im BIOS einfach die Virtualisierung deaktivieren und alles ist gut.

Da ich die letzten 12 Monate wenig Zeit und noch mehr Arbeit hatte begleitete mich dieses Problem wirklich sehr lange – zeitweise mußte ich sogar einen sehr bizarren KDE Klon zum Arbeiten verwenden.

Die Früchte dieser merkwürdigen Konfigurationsarbeit sehen dann so aus:

 

4 mal Slayer

 

2 Displays sind via DisplayPort angeschlossen und eines über VGA. Einen sinnvollen Verwendungszweck habe ich für soviele Displays noch nicht gefunden. Aber auf 3 Screens läßt sich wunderbar Java schreiben:)

Led Lampen mit WLAN Anbindung

Ein Thema das mich immer wieder fasziniert ist die Vernetzung von Gegenständen des Alltags. Meine Wohnzimmerlampe glänzt nicht nur durch hässliche Form sondern auch durch kaltes Licht und Quecksilber im Leuchtmittel. Deshalb ersetze ich nach und nach Kompaktleuchtstofflampen durch LED Lampen. Der Zufall brachte mich zu diesem Lampenset mit WLAN Anbindung (Affiliate) vom Hersteller LimitlessLED. Die Lampen passen in E27 Sockel, haben 6 Watt Leistung und können mit 230V ~  betrieben werden. Die Grundidee ist die Lampen via Smartphone oder auf anderen Wegen einzuschalten, die Farben zu ändern und dimmen.Neben den 3 Lampen werden eine Fernbedienung und was viel interessanter ist einem Controller mit dokumentierter API geliefert. Apps gibt es auch! Pro Fernbedienung und Controller kann man 4 Lampen steuern. Dabei kann man die Parameter Helligkeit, Farbe regeln.

2013-10-15 16.56.18

 

Impressionen

Inbetriebnahme

Lampen

Jede Lampe muß konfiguriert werden. Dabei spielt es keine Rolle, ob man sie der Fernbedienung oder in der App konfiguriert.

Lampe in Fassung drehen und binnen 2 Sekunden nach Anlegen von Spannung auf der Fernbedienung einen Kanal aktivieren – die Lampe ist nun dem entsprechenden Kanal zugewiesen. Die erfolgreiche Zuweisung  wird durch Blinken quittiert. Um die Lampe aus dem Kanal zu lösen innerhalb von 2 Sekunden nach dem Einschalten 5 mal den entsprechenden Kanal auf der Fernbedienung aktivieren.

Controller

Der Controller wird per Micro-USB Kabel mit Spannung versorgt. Ich nutze ein Ladegerät für Smartphones. Nach dem Booten sollte man ein WLAN mit der SSID milight finden. Nun kann man der Anleitung folgen oder was ich als angenehmer per Webinterface konfigurieren. Dazu ins eigene WLAN verbinden und http://192.168.0.100/home.html aufrufen – ob die IP immer die gleiche ist kann ich nicht sagen. Hier muß in den STA Interface Settings das eigene WLAN konfiguriert werden.

App

Momentan nutze ich die in der Anleitung vorgeschlagene App Es gibt auch noch eine puristischere Version mit
Anbindung an Tasker – die  ohne Anpassungen leider nicht läuft.

LED Lampen ansteuern

Beim Hersteller gibt es eine Dokumentation.  Die Beispiele sind leider ein wenig inkonsistent, da irgendwann die Portnummer von 50000 auf 8899 umgestellt wurde.

Die Lampen werden per UDP Kommandos gesteuert. Dabei werden immer 3 Byte übertragen.

Byte 1 ist das Kommando an welches immer der Suffix 0x00  0x55 angehängt werden muß.

In PHP kann mit diesen Zeilen alle Kanäle einschalten:

<?php
define("CONTROLLER_IP", "192.168.0.100");
function executeCommand( $ip, $command, $suffix1=00, $suffix2='55'){
	fwrite(fsockopen("udp://$ip", 8899), chr(hexdec($command)) . chr(hexdec($suffix1)) . chr(hexdec($suffix2)));
}
 
executeCommand(CONTROLLER_IP, 42);

Wer php5-cli installiert hat kann das Script auch auf der Kommandozeile nutzen. Für Freunde der Bash gibt es auch ein Script (geklaut bei Smileytechadventures)

#!/bin/bash 
 
if [ -z "$1" ] ; then 
    echo "You must enter a parameter: "  
    echo "  e.g. $0 allon" 
    exit 1 
fi 
 
incmd="$1" 
ipaddress="192.168.0.201" 
portnum="50000" 
 
allon="\x35\00\x55" 
alloff="\x39\00\x55" 
zone1on="\x38\00\x55" 
zone1off="\x3B\00\x55" 
zone2on="\x3D\00\x55" 
zone2off="\x33\00\x55" 
zone3on="\x37\00\x55" 
zone3off="\x3A\00\x55" 
zone4on="\x32\00\x55" 
zone4off="\x36\00\x55" 
 
eval incmd=\$$incmd 
 
echo -n -e "$incmd" >/dev/udp/"$ipaddress"/"$portnum"

Ein wenig Heimautomatisierung ist auch schnell betrieben. Dieses Skript prüft, ob die Sonne untergegangen ist und schaltet in diesem Fall alle Lampen ein.

#!/usr/bin/php
<?php define("CONTROLLER_IP", "192.168.0.100"); define("ZEIT_FUER_BETT", "23:59"); function executeCommand( $ip, $command, $suffix1=00, $suffix2='55'){ fwrite(fsockopen("udp://$ip", 8899), chr(hexdec($command)) . chr(hexdec($suffix1)) . chr(hexdec($suffix2))); } function getIp(){ return file_get_contents("http://icanhazip.com/"); } function getLatLongByIp($ip){ $geoplugin = unserialize( file_get_contents('http://www.geoplugin.net/php.gp?ip='.$ip) ); if ( is_numeric($geoplugin['geoplugin_latitude']) && is_numeric($geoplugin['geoplugin_longitude']) ) { $ret['lat']= $geoplugin['geoplugin_latitude']; $ret['lon']=$geoplugin['geoplugin_longitude']; return $ret; } } $ret= getLatLongByIp(getIp()); $dateSunset=date_sunset(time(), SUNFUNCS_RET_TIMESTAMP,$ret['lat'], $ret['lon'], 90, 1); $dateSunrise=date_sunrise(time(), SUNFUNCS_RET_TIMESTAMP, $ret['lat'], $ret['lon'], 90, 1); //Zu einer festen Uhrzeit ausschalten if(date("H:i")>= date(ZEIT_FUER_BETT)){
echo "schlafen";
	executeCommand(CONTROLLER_IP, 41);
	exit;
}  
//Nach Sonnenuntergang und vor Aufgang
if ( time() >=$dateSunset && $dateSunset >$dateSunrise){
 
	executeCommand(CONTROLLER_IP, 42);
}else {
	executeCommand(CONTROLLER_IP, 41);
}

Das kleine Skript fühlt sich auf kleinen Linuxrechnern im eigenen Netzwerk sehr wohl und sollte per Cronjob alle 1 Minuten angestoßen werden.

*/1 *    * * *   /home/pi/sunrise.php

Inzwischen habe ich die Lampen seit einer Woche in Betrieb und viel Spaß damit. Die Lichtausbeute ist ausreichend, der Stromverbrauch in Ordnung. Der Preis ist mit 99 EUR schon sehr happig, aber es macht auch sehr sehr viel Spaß Skripte für die Lampen zu schreiben.

Servus Planet!

Hallo zusammen,

ich war vor langer Zeit schonmal mit der Prämisse „Unerklärliches am Rande“ und dem Slogan „Worte des Parteivorsitzenden“ auf dem Planeten unterwegs (Domain schmiddi.co.cc). Wer das noch kennt kann nun im Feedreader auf weiter klicken weil sich nicht viel geändert hat.

Den Vergesslichen und auch Neuen Planetenkonsumenten sei gesagt, daß es sich hier alles um Linux dreht, nette Programme, Bash, wie ich meine Hardware damit zum laufen bringe,  ein wenig Skripten und ab und an Hardware ohne x86 CPU aber mit Linux :).

An Rechnern betreibe ich momentan ein Thinkpad W530 mit Ubuntu, eine kleine Debian Workstation, Raspberry Pi, Pogo Plug sowie diverse Android Telefone + Tablets und meinen heißgeliebten Ebookreader.

In diesem Sinne: auf fröhliches Bloggen!

Sql: Order by Switch/Case

Ziemlich coole Geschichte um die Ordnung von Datenbankabfragen in Mysql zu ordnen:

 

SELECT name from showcase

order by
case name
when ‚bla‘ then 1
when ‚blub‘ then 2
when ‚blabla‘ then 3
when ‚blubblub‘ then 4
when ‚blablablabla‘ then 5
when ‚blubblubblubblub‘ then 6
when ‚blablablablablabla then 7
else 99
end;

Shopgate App im Test

Vorab. Dieser Produkttest wurde von mir gegen eine Vergütung (20€ in Form eines  Buchgutscheins) verfasst. Ich betreibe also keine Schleichwerbung. Ich versuche so (un)sachlich und unparteiisch wie gewohnt zu berichten.

 

Mit der  Shopgate App hat man Zugriff auf 220 Shops die zusammen ca. 6,2 Millionen Artikeln anbieten. Vorab muß ich sagen, daß die App noch relativ frisch ist und man das auch an manchen Stellen merkt. Bei der Installation gibts von ir schon einen Rüffel, die Zugriffsbeschränkungen von Android wurden nicht korrekt gesetzt. Der App wird der Zugriff auf die Telefonfunktion erlaubt. Der Startbildschirm wirkt aufgeräumt, man kann auch ohne Anmeldung im Store stöbern und man ist wirklich binnen 30 Sekunden registriert. Wenn Google irgendwann mal eine Art Autoform Fill für Android implementiert wäre die Registrierung noch schneller erledigt.

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Die App lebt natürlich von den Shops über die man kaufen kann. Es gibt ein sehr breites Angebot von Babywalz über AllesRahmen.de bis zu Caseking  und Online Apotheken und Campingzubehör kann man in den unterschiedlichsten Läden einkaufen. Eine separate Registrierung für den jeweiligen Shop ist natürlich nicht erforderlich. Sehr praktisch ist die Scanfunktion, die abgesehen von einem Absturz stabil auf meinem Desire lief. Nicht so gut gefiel mir die Suchfunktion  vor allem im Bookstore von Libri wurden mir als erste Treffer nur englischsprachige Bücher, oder Endlosschleifen an Treffern dargestellt. Das ist aber denke ich auch dem frühen Entwicklungsstand der App gestundet.

Die App bietet sehr viele Gutscheine für verschiedene Stores an, bei denen man absolute oder relative Rabbatte für Webstores einlösen kann.

Warenkorb und Abwicklung des Bestellvorgangs sind wie die gesamte App sehr leicht zu bedienen. Den Status seiner Bestellungen kann man direkt einsehen. Abweichende Lieferadressen sind auch kein Problem.

Ich hatte Freitags bestellt und Montags wurde das Buch geliefert – mehr kann man nicht verlange.

Fazit

Bis jetzt habe ich nur die Shopgate und Amazon App auf meinem Handy getestet. Beide Apps glänzen durch leichte Bedienung. Beim Stöbern hat das onlineshopping Monopol Amazon noch die Nase vorn, aber dies ist bestimmt nicht die letzte Version der App. Das Angebot ist durch die große Anzahl von Shops recht breit gefächert und die große Anzahl an Gutscheinen macht das Einkaufen auch interessant.

Bei meiner nächsten online Order werde ich auf jeden Fall auf Shopgate zurückgreifen.

 

Zum Ausprobieren der App habe ich noch einen Gutschein für Euch erhalten.

Entweder schmiddi-11 eintippen oder den QR Code scannen (gültig bis zum 30.09.11).

 

 

 

 

 

 

 

 

Hier kann man die App im Android Market laden:

 

Schneller zu validem Html mit Ubuntu und Eclipse

Tree on Monument Hill
Attribution-NonCommercial-NoDerivs License by zachstern

Valides Html ist wichtig – keine Frage. Leider ist der Weg dorthin oft beschwerlich, vor allem, wenn man wie ich eher selten damit arbeitet. Für größere PHP Sachen verwende ich Eclipse für „PHP Menschen“.  Wenn nun irgendwas mit meinem Html nicht stimmt, bekomme ich meist so ein kleines Ausrufezeichen, jedoch nicht immer.

phpnwe7CH

Deswegen bemühe (bemühte) ich häuft den Validator der W3C Seite, der endgültige Gewissheit über das Markup verschafft. Da ich meist lokal arbeite und auch nicht  Dyndns oder ähnliches verwenden möchte, hat sich das „Debuggen“ mit dem Validator immer in eine Copy & Paste Orgie verwandelt. Ein wenig Lesen auf der W3C Seite brachte mir diese schöne Erkenntnis:

All software developed at W3C is Open Source / Free software. Which means that you can download and use them for free, if you like. It also means that you are welcome to participate in making them better, cooler, more useful for you and everyone.

Juhu. Schnell stand fest, daß es da auch ein Ubuntu Paket namens w3c-markup-validator im Repository gibt. Nach der Installtion muß man  in der Datei /etc/w3c/validator.conf noch die Option Allow Private IPs auf yes setzen. Den Validator erreicht man unter http://localhost/w3c-markup-validator. Sehr schön.

Um den Validator bequem mit Eclipse zu nutzen, werden noch 5 Minuten Rumklicken benötigt. Mir reicht es, wenn ich per Mausklick die aktuelle Seite validieren kann. Dazu konfiguriere ich unter Run->External Tools->External Tools Configuration den Browseraufruf. Zu beachten wäre hierbei, daß der absolute Pfad zum Programm angegeben werden muß. (Ich verwende Chrome. Firefox findet man unter /usr/bin/firefox)

Hier der Screenshot des Fensters mit meinen Einstellungen:

phpo16zCr

Im Reiter common sollte man noch das Häckchen bei  „Allocate Console“ rausnehmen und „Launch in Background“ setzen.

Nun kann man bequem per Mausklick validieren:

phpjls8gg

Zum Ende bleibt nur noch zu fragen, wie Ihr euren HTML Krams validiert. Meine Lösung ist zwar relativ einfach, aber simpler gehts – finde ich –  immer 🙂