Kopf-Fett

Heute beim Haare schneiden / rasieren (wie auch immer man das bei 5mm nennen möchte) haben wir festgestellt, daß ich auch am Kopf signifikant abgenommen habe. Der Langhaarschneider hatte teilweise gewisse Probleme meiner Schädelkontur zu folgen. Sollte mich eigentlich nicht wundern, finde ich aber trotzdem faszinierend.

Kopf.jpg

Advertisements

Rezept: Kartoffel-Gurken-Salat

Gestern zum Grillen brauchte ich noch eine bessere Sättigungsbeilage als Brot und da Kartoffeln eigentlich ein ganz gutes Kalorien-Sättigungs-Verhältnis haben habe ich mal schnell einen Kartoffelsalat improvisiert. Gefällt mir durchaus gut:

Kartoffel-Gurken-Salat (5 Portionen)

  • 1kg gewürfelte gegarte Kartoffeln
  • eine gewürfelte Salatgurke
  • 250g Magerquark
  • 250g 0,2%iger Joghurt
  • einen Schuß Balsamico
  • etwas Süßstoff
  • Pfeffer, Salz, Schnittlauch, Dill

Alles zusammenmischen (das war einfach ^^).

pro Portion ca. 210kcal, 11g Protein

Kartoffelsalat.jpg

Rezept: Brotsuppe/Brotpudding

Heute mal ein Rezept von meiner Oma, natürlich etwas optimiert. Zugegeben, es sieht aus wie frisch Erbrochenes aber es ist super schnell gemacht und soo lecker.

Brotsuppe/Brotpudding

  • 1-2l Halbfettmilch (1l für Pudding)
  • 100g trockenes / 150g frisches Graubrot
  • 200g Apfelstücke
  • 100g Rosinen
  • Zimt nach Geschmack
  • Süßstoff nach Geschmack (20ml für 1l Milch wird schön süß)

Das Brot kleinbröseln und mit Milch einweichen; pürieren. Den Rest der Milch aufkochen, Brotpampe, Apfel, Rosinen, Zimt, Süßstoff dazu. Eine Zeit lang köcheln lassen, fertig. Alternativ kaltstellen (dann wird’s aber noch dicker).

Pudding: pro 100g ca. 100kcal, 4g Protein

Suppe: pro 100g ca. 77kcal, 3,5g Protein

Brotsuppe

Alles Quark

Magerquark hat ja bekanntlich ein ziemlich gutes Protein-Kalorien- und Preis-Leistungs-Verhältnis, schmeckt aber nicht unbedingt jedem. Bei Proteinshakes ist das zu umgehen und bei Gurkensalat fällt es nicht weiter auf, es gibt aber teilweise natürlich auch noch andere Varianten und Alternativen:

  • auf Brot: ich assoziiere Quark immer mit Frühstück bei meinen Großeltern als Kind. Brot oder Brötchen mit Quark und Johannisbeergelee, mjam! Wobei das mit Sahnequark oder Frischkäse natürlich noch ein bißchen besser schmeckt, aber schon mit Magerquark ist das ziemlich großartig und vergleichsweise gnädig. Ich mische Brot/Quark/Gelee normalerweise im Verhältnis 2:3:1 (also 50g Graubrot, 75g Magerquark, 25g Gelee), macht ca. 13g Eiweiß bei ca. 220kcal. Nicht berühmt aber sättigt dafür auch nicht so schlecht. Kann man mit zuckerreduzierter Marmelade noch etwas optimieren.
  • 0,2% Frischkäse (Exquisa Fitline z.B.): immer noch 15g Protein pro 100kcal und schmeckt nicht nach Quark ^^
  • Skyr: Hab ich gestern mal probiert, könnte für meinen Geschmack deutlich süßer sein, aber dafür gibt es ja Süßstoff. Dafür je nach Variante über 10-15g Protein pro 100kcal und ohne den Quark-(Nach)Geschmack. Nicht schlecht.
  • Magermilchjoghurt: nur knapp 10g/100kcal, dafür ähnlich billig und variabel und schmeckt halt nach Joghurt ^^

Rezept: LCLF-Frucht-Joghurt-Sahnetorte

Kalorienarm backen ist naturgemäß nicht gerade trivial. Meine bisherigen Versuche mit Kokosmehl und Gluten waren bestenfalls „meh“ und die wenigen Kalorien trotzdem nicht wert.

Letztens stieß ich dann auf das tolle Back-Blog Ofenkieker und hatte eine Idee, wie man mit etwas mehr Kalorien ein brauchbares Ergebnis hinbekommen kann. Das Schöne dabei ist, daß die frisch-fruchtige Creme sehr schön mit dem kühlen Geschmack des Erythrits harmoniert.

Frucht-Joghurt-Sahnetorte (16 Stücke)

Frucht-Creme:

  • 500g TK oder frisches Obst (für uns am liebsten Erdbeeren)
  • 1 Becher (500g) Joghurt 0,1%
  • 2 Becher (400ml) Schlagsahne
  • 8-14 Kappen (40-70ml) Flüssigsüßstoff, je nach Geschmack
  • 12 Blatt Gelatine
  • 2 Tütchen Sahnesteif

 

Biskuit-Boden:

  • 3 Eier
  • 150g Erythrit (idealerweise gemahlen)
  • 75ml warmes Wasser
  • 50g Mehl
  • 25g Speisestärke
  • 5g/1TL Backpulver
  • 1 Prise Salz
  • etwas Vanillearoma

 

zur Deko:

  • ggf. 250-500g Obst

 

500g aufgetautes Obst pürieren, ggf. durch ein Sieb streichen (wenn einen die Kerne stören) und zusammen mit dem Joghurt und dem Süßstoff erhitzen (nicht kochen). Die Gelatine in kaltem Wasser einweichen, etwas ausdrücken und einzeln im Joghurt auflösen. Auf Zimmertemperatur erkalten lassen. Die restlichen Früchte aufgetaut und ggf. püriert zur Seite stellen, evtl. 16 schöne Exemplare zur Dekoration gefroren lassen.

Das Erythrit zusammen mit dem warmen Wasser einige Minuten verrühren bis es sich etwas aufgelöst hat (löst sich nicht vollständig). Die Eier trennen und die Eigelbe einzeln zu dem Erythrit geben, alles zusammen mit dem Vanillearoma mehrere Minuten schaumig rühren. Die Eiweiße zusammen mit einer Priese Salz steif schlagen und mit einem Schneebesen vorsichtig unter die Eigelbmasse heben. Mehl, Stärke und Backpulver vermischen und (ggf. gesiebt) vorsichtig mit einem Schneebesen unterheben. Die Masse in eine gefettete oder mit Backpapier ausgelegte 28er Springform füllen und bei 160° Umluft ca. 25-30 Minuten backen; dann auf einem Tortengitter auskühlen lassen.

Wenn der Boden erkaltet ist die inzwischen auf Zimmertemperatur erkaltete Creme fertigmachen. Dazu die Sahne mit dem Sahnesteif schlagen und vorsichtig unter den Fruchtjoghurt heben.

Jetzt einen Boden auf eine Tortenplatte in einen Tortenring legen, die restlichen Früchte (je nach Obst püriert) darauf verstreichen und dann die Creme drauf verteilen. Optisch ist es vorteilhaft, wenn der Tortenring etwas größer ist als der Boden.

Nach einigen Stunden im Kühlschrank ist die Gelatine hart und die Torte schnittfest.

pro Stück ca. 140kcal, 4g Protein (mit 1kg Erdbeeren)


Himbeertorte.jpg

Eine einfache Web-Galerie

Es kommt immer ganz gut, wenn man Freunden und Verwandten unkompliziert ein paar Fotos zeigen kann,  z.B. nach einer Party oder um den Nachwuchs zu dokumentieren. Bisher habe ich da immer Gallery für genommen, aber da das Projekt faktisch tot und eigentlich schon seit Version 2 deutlich überdimensioniert ist muß etwas neues her. Ein Großteil der Alternativen scheint mir allerdings auch unnötig mächtig für meine bescheidenen Ansprüche und daher dachte ich mir, das mache ich lieber selbst.

Mein erster Instinkt für eine Web-Anwendung wäre php, aber eigentlich benötige ich keine Web-Anwendung dafür. Eine Galerie, die nur sporadisch aktualisiert wird, muß nicht dynamisch sein, da reicht einfaches HTML.

Man nehme: Galerie1.png

  • eine Ordnerstruktur mit
  • entsprechend benamten Bildern
  • ImageMagick
  • ein paar Zeilen Shell-Skript:
#!/bin/bash

BASE=/var/www/html
TITLE="Bilder"
PICSIZE="256"
DIVSIZE=$( expr $PICSIZE + 30 )
CLEANUP=0

makeHTML() {
        cd "$1"
        [ $CLEANUP -gt 0 ] && {
                echo "cleaning up $(pwd)"
                rm *.png *.html 2>/dev/null
        }
        cat > index.html << EOF
<HTML>
        <HEAD>
                <TITLE>$TITLE</TITLE>
                <META http-equiv="Content-Type" content="text/html; charset=utf-8"/>
                <STYLE>
                        body {background-color:#eeeeff; }
                        .thumb { display:inline-block;width:${PICSIZE}px;height:${DIVSIZE}px;margin:20px; }
                        .caption { width:${PICSIZE}px;height:40px;vertical-align:bottom;text-align:center; }
                        img { box-shadow:10px 10px 10px grey; }
                </STYLE>
        </HEAD>
        <BODY>
EOF
        [ "$(pwd)" == "$BASE" ] || echo "<A href=..> <== </A><BR>" >> index.html
        echo "<DIV style=\"width:100%;text-align:center\"><H2>$TITLE</H2></DIV>" >> index.html
        [ "$(pwd)" == "$BASE" ] || echo "<DIV style=\"width:100%;text-align:center\"><H4>$1</H4></DIV>" >> index.html
        echo "<DIV style=\"text-align:center;\">" >> index.html

        for DIRITEM in *
        do
                SUFFIX=$(echo "$DIRITEM" | awk -F "." '{print $NF}')
                suffix=$(echo "$SUFFIX" | tr '[:upper:]' '[:lower:]')
                if [ -d "$DIRITEM" ]
                then
                        ( makeHTML "$DIRITEM" )
                        echo "<DIV class=thumb><A HREF=\"$DIRITEM\"><DIV><IMG src=\"$DIRITEM/folder.png\"></DIV></A><BR><DIV class=caption> $DIRITEM </DIV></DIV>" >> index.html
                elif [ $suffix == "jpg" ]
                then
                        FILENAME=$(basename "$DIRITEM" .$SUFFIX)
                        convert "$DIRITEM" -thumbnail ${PICSIZE}x${PICSIZE}^ -gravity center -extent ${PICSIZE}x${PICSIZE} "${FILENAME}.png"
                        [ -f folder.png ] || cp "${FILENAME}.png" folder.png
                        echo "<DIV class=thumb><A HREF=\"$DIRITEM\"><DIV><IMG src=\"${FILENAME}.png\"></DIV></A><BR><DIV class=caption>${FILENAME}</DIV></DIV>" >> index.html
                fi
        done
        [ "$(pwd)" == "$BASE" ] || [ -f folder.png ] || cp */folder.png . 2>/dev/null
        echo "</DIV></BODY></HTML>" >> index.html
        cd ..
}

makeHTML $BASE

Damit erhält man eine einfache kleine Galerie:

Galerie2.png

Das ganze kann man lokal laufen lassen und per FTP hochladen oder für maximale Faulheit alle paar Minuten per cronjob direkt auf dem Server. Wenn man den Bilder-Ordner dann noch irgendwie lokal synchronisiert (rsync, btsync, Dropbox…) reicht es neue Bilder in einen lokalen Ordner einzusortieren und wenige Minuten später ist die Galerie aktualisiert.

Virtualisierung mit KVM und WebVirtMgr (Teil 1) – update

Nicht ohne Grund haben sich in der modernen IT virtuelle Systeme für die meisten Serversysteme durchgesetzt. Aber auch für den ambitionierteren Privatanwender bietet es einige Vorteile. Für mich war insbesonders die fehlende Wechselwirkung zwischen den Systemen, wenn man pro Anwendung eine VM benutzt, und die einfache Portierbarkeit ausschlaggebend.

Eine gewisse Problematik, wenn man einen Rootserver eines typischen Hosters benutzt, ist daß der Großteil der verbreiteten Virtualisierungslösungen nicht trivial zu installieren sind. Normalerweise werden eine handvoll Linuxversionen in Standardausführung angeboten, die Installation von XenServer oder VMware erfordert hingegen oft einige Klimmzüge, z.B. per aufpreispflichtiger Remote-Konsole.

Nach etwas rumprobieren fiel meine Wahl also auf KVM, da es bei jedem aktuellen Linux bereits dabei ist, so daß ein Standard-Debian (oder eine andere Distribution, ich bevorzuge eben Debian) ausreicht. Um bei der Administration nicht nur auf der Kommandozeile rumzuhacken kombiniere ich das mit WebVirtMgr, eine WebGUI für libvirt.

UPDATE: leicht aktualisierte Version, außerdem benutze ich inzwischen Ubuntu-Server (16.04LTS) statt Debian, da ich ZFS verwenden möchte.

Im Folgenden gehe ich von einem frisch installiertem Ubuntu-Server und dem User root aus. Ein Großteil der Anleitung stammt von hier.

Teil 1: Installation WebVirtMgr

Benötigte Pakete installieren:

  • apt-get install -y libvirt-bin libvirt-daemon libvirt-daemon-system libvirt0 policykit-1 bridge-utils apache2-utils git python-pip python-libvirt python-libxml2 novnc supervisor apache2 qemu qemu-kvm

WebVirtMgr installieren:

  • cd /var/www
  • git clone git://github.com/retspen/webvirtmgr.git
  • cd webvirtmgr
  • pip install -r requirements.txt 
  • ./manage.py syncdb
  • ./manage.py collectstatic
  • nach Aufforderung einen User für das Webinterface erstellen

apache konfigurieren:

Da WebVirtMr normalerweise nur auf localhost erreichbar ist verwenden wir apache2 als Reverse Proxy

  • Datei /etc/apache/sites-available/000-default.conf editieren
<VirtualHost *:80>
  ServerAdmin mail@adres.se
  ServerName serverna.me

  ProxyPreserveHost On
  ProxyPass        "/" "http://127.0.0.1:8000/"
  ProxyPassReverse "/" "http://127.0.0.1:8000/"

  <Location />
    AuthType  Basic
    AuthName  "Nisch mit den Schuhn!"
    AuthUserFile  /etc/apache2/authfiles/htpasswd-virt
    Require   valid-user
  </Location>
</VirtualHost>

Weil sicher ist sicher richten wir einen zusätzlichen Passwortschutz ein (der Location-Block oben):

  • htpasswd -c /etc/apache2/authfiles/htpasswd-virt BENUTZERNAME

Sofern man verschlüsselt darauf zugreifen will (empfehlenswert!) analog mit der Datei /etc/apache2/sites-available/default-ssl.conf verfahren

zu guter Letzt die notwendigen Module aktivieren und den Dienst restarten:

a2enmod proxy

a2enmod proxy_http

a2enmod proxy_html

a2enmod ssl

a2enmod remoteip

service apache2 restart

Supervisor einrichten:

  • chown -R www-data /var/www/webvirtmgr
  • /etc/supervisor/conf.d/webvirtmgr.conf anlegen:
[program:webvirtmgr]
command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr.log
redirect_stderr=true
user=www-data

[program:webvirtmgr-console]
command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-console
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=www-data
  • service supervisor stop
  • service supervisor start

Jetzt sollte WebVirtMgr auf Port 80 und 443 (also standard http/s) laufen und mit den eingerichteten Benutzerdaten zugänglich sein. Blöderweise reicht das noch nicht um die lokalen VMs zu managen, da man sich noch mit libvirt verbinden muß. Theoretisch funktioniert das lokal einfach per Socket, praktisch fehlt da noch ein authentication agent. Da ich nach 3 Sekunden googlen keine Lösung dafür gefunden habe  löse ich das Problem mit bekannten Mitteln: SSH.

lokale passwortlose ssh-Anmeldung einrichten:

  • adduser webvirtmgr
  • chown www-data /var/www
  • su - www-data -s /bin/bash
  • ssh-keygen -t rsa -b 2048 -N “” -f ~/.ssh/id_rsa
  • ssh-copy-id webvirtmgr@127.0.0.1

zum Testen einmal „ssh webwirtmgr@127.0.0.1“ als www-data ausführen, sollte ohne Passwortabfrage funktionieren. Stolperfalle: damit der User webvirtmgr auch die VMs verwalten darf muß er Mitglied der passenden Gruppe (libvirtd) sein.

(Update: scheint nicht mehr notwendig zu sein) Managementrechte einrichten:

Siehe auch hier (vermutlich verbirgt sich da auch die Lösung für den lokalen Socket).

  • Datei /etc/polkit-1/localauthority/50-local.d/org.libvirt.unix.manage.pkla anlegen:
Identity=unix-user:webvirtmgr
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes

fertig:

Im WebVirtMgr unter Add Connection -> SSH Connection noch mit IP 127.0.0.1 und User webvirtmgr eine neue Verbindung anlegen und jetzt sollte man in der Lage sein die lokalen VMs und die zugehörige Infrastruktur zu administrieren.

Ausblick

Im 2. Teil beschreibe ich einige Tücken bei der Netzwerkkonfiuration und etwas zur Migration.