Pulled Pork

 2,5 Kilo Schweinenacken ohne Knochen
 ca. 250 ml Ananassaft
 ca. 250 ml kräftige Gemüsebrühe
 3 EL brauner Zucker
 4 EL Senf
 3 EL Paprikapulver, edelsüß
 1,5 EL Salz
 1,5 EL Puderzucker
 1 EL Pfeffer
 1,5 EL Kreuzkümmel
 1,5 EL Knoblauchgranulat
 1,5 EL Cayennepfeffer

  1. Alle Gewürze von Paprikapulver miteinander vermischen.
  2. Fleisch mit dem Senf einreiben.
  3. Anschliessend der trockenen Gewürzmischung sorgfälltig einreiben. Je sorgfältiger desto Besser wird es nachher schmecken.
  4. Das Fleisch in einen Beutel packen Luft heraussaugen oder drücken, luftdicht verschliessen und für 24 Stunden in den Kühlschrank.

Am nächsten Tag rechtzeitig das Fleisch aus dem Kühlschrank nehmen und bevor es in den Ofen kommt die Zimmertemperatur annehmen lassen.

  1. Ofen auf 110 Grad vorheizen. Ober-/Unterhitze auf keinen Fall Umluft.
  2. Ein Auflaufform oder Bräter der unter das Rost passt mit 250 ml Annanassaft, 250 ml Orangensaft ud 250 ml Brühe und den 3 EL braunen Zucker füllen.
  3. Bräter/Auflauform in den Ofen und auf dem Gitter darüber das Fleisch legen.
  4. Jetzt heisst es warten, warten, warten.
  5. Wenn das Fleisch ein Kerntempertur von 65-70 Grad hat mit dem Sud aus dem Bräter mit einem Pinsel bestreichen. Wenn nötig ruhig Annanas und Co nachschütten.

Wichtig. Immer Ruhe bewaren. Das Fleisch wird am anfang recht schnell hoch gehen. Wird dann aber Plateaus haben in denen nichts mehr passiert. Meistens bei ca. 65 Grad. Es kommt auch vor das später auch noch mal bei ca 75-78 Grad ein zweites Plateau kommt. Die Plateaus können auch schon mal bis zu 2 Stunden dauern bis es weiter geht. Also abwarten und nicht die Temperatur hoch drehen. Das wird schon.

Wenn 20-21 Stunden rum sind kann man auch schon einmal mit der BBQ-Sosse beginnen. Wer zum Pulled Pork auch Buns haben möchte auch diese. Beides dauert 2-3 Stunden. Aber reine Arbeitszeit ist fast gar keine. Dabei heisst es auch die meiste Zeit warten, warten, warten. Wird aber auch beides genau so belohnt wie das Pulled Pork. Unverschämt lecker.

Wenn das Fleisch 95 Grad hat ist es fertig. Es kann jetzt aus dem Ofen genommen werden und auseinander gezupft werden. Es sollte jetzt aber schon von selbst auseinder fallen. Dafür nehme ich immer ein Backofenblech und lege das Fleisch drauf. Einfach mit 2 Gabeln  auseinander ziehen. Anschliessend gibt man noch etwas vom Sud und etwas von der BBQ-Sosse dazu.

Fertig ist das Pulled Pork und kann gegessen werden.

Beim schreiben dieses Artikels ist aufgefallen das vom fertigen Pulled Pork bis jetzt nur das Bild existiert wo die Schale schon fast leer war. Beim nächsten mal muss ich die hunrige Meute davon fern halten. Die fahren halt alle voll drauf ab.

DSL Graph mit Python

Da heute ja hier Graphen zum Traffic im Jahr 2016 veröffentlicht wurde hier auch gleich eines der Scripts.

Datenquelle: fb.csv


Monat;Gesendet;Empfangen;Gesamt
Jan;4124;16815;20939
Feb;1078;403;1481
Mar;1199;446;1645
Apr;2464;36476;38940
Mai;92979;615268;708247
Jun;138402;664743;803145
Jul;116406;507155;623561
Aug;35654;471810;507464
Sep;31362;428400;459762
Okt;24072;549927;573999
Nov;44095;914362;958457
Dez;57889;1141699;1199588
Gesamt:;549724;5347504;5897228

Benötigte python Pakete:

  • pygal
  • cairosvg


pip install pygal
pip install cairosvg

bzw.

apt-get install -y python-cairosvg python-pygal

Script welches die Daten ausliest und die Grafik erstellt:


#!/bin/bash

OUT=for i in $(tail -n 13 fb.csv | head -n 12 | awk -F";" {'print $2'} ); do echo -n "$i "; done | sed -e 's/\ $//' | sed -e 's/\ /, /g'
IN=for i in $(tail -n 13 fb.csv | head -n 12 | awk -F";" {'print $3'} ); do echo -n "$i "; done | sed -e 's/\ $//' | sed -e 's/\ /, /g'
SUM=for i in $(tail -n 13 fb.csv | head -n 12 | awk -F";" {'print $4'} ); do echo -n "$i "; done | sed -e 's/\ $//' | sed -e 's/\ /, /g'

echo "
import pygal
bar_chart = pygal.Bar()
bar_chart.x_labels = 'Jan', 'Feb', 'Mar', 'Apr', 'Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'
bar_chart.add('Eingehend', [$IN ])
bar_chart.add('Ausgehend', [$OUT ])
bar_chart.add('Gesamt', [$SUM ])
bar_chart.render_to_file('output.svg')
" > generate.py

/usr/bin/python generate.py

Ausführbar machen und ausführen:

chmod +x generate.sh
./generate.sh

Ergebnis:

PyGal output

DSL Traffic 2017

Unser DSL-Traffik 2017

Angabe in Megabytes

DSL-Traffik

MonatGesendetEmpfangenGesamt
Jan41241681520939
Feb10784031481
Mär11994461645
Apr24643647638940
Mai92979615268708247
Jun138402664743803145
Jul116406507155623561
Aug35654471810507464
Sep31362428400459762
Okt24072549927573999
Nov44095914362958457
Dez5788911416991199588
Gesamt:54972453475045897228

Anfang des Jahres war der Traffik hauptsächlich über den anderen Anschluss und taucht hier in der Statistik nicht auf.
Im März und April war noch Renovierungszeit und es wurde weniger gestreamt. Wir haben uns nach der Arbeit eher selbst nur noch in Bett gestreamt.

Im Oktober wurde das 1. OG mit aufgeklemmt und gepatched. Daher dann ab Ende Oktober der Anstieg des Traffiks.
In den nächsten Tagen kommt noch das EG mit dazu, dann ist das Netzwerk endlich komplett.

Im 2. und 3. OG ist schon alles fertig. 2. und 3. OG haben jeweils 2 x 16 Port Switche. Beide Etagen sind mit 4 Gigabit (LAG) verbunden.
Im 2. OG ist dann noch der AccessPoint und ein Cisco 10 Port für Layer 3, der die unteren Etagen mit anbindet.
Das 1. OG ist über den Cisco Switch mit 2 Leitungen (LAG) zum dort verbauten Cisco Switch verbunden. Das gleiche wird dann bald auch noch jeweils aus dem 1. und 2. OG in das EG gemacht. So das 4 Leitungen (LAG) 4 Gigabit theoretisch im ganzen Haus können.
Wenn das gemacht ist werden alle Geräte über 2 Leitungen ins Internet gehen und die Jahresstatistik nächstes Jahr wird beide Anschlüsse beinhalten.

Aber hier jetzt erst einmal die Graphen von 2017 mit nur einem Anschluss.

Ein- und ausgehender Traffic:

Ein- und ausgehender Traffic (Summe)

Ein- und ausgehender Traffic:

Ausgehender Traffic:

Eingehender Traffic:

Danke an Dennis für den Hinweis das ein Jahr wieder rum ist.

PHP in AWS Lambda Function ausführen

Bei der Transformation in der Cloud möchte man manchmal schnell kleine Scripts in die
Cloud bringen ohne erst Server oder Container in der Cloud zu installieren.
In vielen Fällen reichen Funktionen wie AWS-Lambda-Functions, Azure Functions oder
Google Cloud Functions.

AWS Lambda bietet dafür in Lambda folgende (Script)-Sprachen an:

  • C#
  • Java
  • python
  • nodejs

Gerade in älteren Umgebungen werden oft Perl und PHP für kleinere Webscripte,
die Applikationen zum Austausch von Informationen benutzen eingesetzt.
Klar, diese Scripte sollte man teilweise überdenken und erneuern. Das kostet zum
einen Geld, jemand muss es machen und manche sollen auch nur noch bei dem Sprung
in die Cloud helfen und dann eh das zeitliche segnen.

Daher wäre es nicht schlecht diese Tools schnell mit in die Cloud zu nehmen um
andere Software so in die Cloud zu bekommen und die Tools nicht als Spassbremse
zu haben.

nodejs und statisch kompliliertes php

Da Lambda nodejs anbietet kann man es auch dazu nötigen PHP auszuführen.
Ja, würde ich es jetzt auch lesen oder es von jemanden hören, ich würde mich
jetzt genau so schütteln.
Aber es soll ja nur den Sprung in die Cloud ermöglichen und zeigen wie man solche
Probleme umgehen kann.

PHP Binary erstellen

Um das PHP statisch als ein Binary vorliegen zu haben bietet sich Docker an.

build_php_7.sh

#!/bin/sh
PHP_VERSION_GIT_BRANCH=PHP-7.1.1
echo "Build PHP Binary from current branch '$PHP_VERSION_GIT_BRANCH' on https://github.com/php/php-src"
docker build --build-arg PHP_VERSION=$PHP_VERSION_GIT_BRANCH -t php-build -f Dockerfile.BuildPHP .
container=$(docker create php-build)
docker -D cp $container:/root/php7/usr/bin/php ./php
docker rm $container

Das stellt einen Container der PHP 7.7.1 zusammensetzt und anschliessend das
fertige Binary aus den Docker Container kopiert.

Wer eine andere Version benötigt kann die Version mit PHP_VERSION_GIT_BRANCH setzen.

PHP Script

<?php
echo "Hello world!";
var_dump($argv);
?>

index.js spawn für php

Damit der PHP Interpreter und ein Script aufgerufen werden benötigt man nur noch
etwas JavaScript:

'use strict';
var child_process = require('child_process');
exports.handler = function(event, context) {
  var strToReturn = '';
  var proc = child_process.spawn('./php', [ "index.php", JSON.stringify(event), { stdio: 'inherit' } ]);
  proc.stdout.on('data', function (data) {
    var dataStr = data.toString()
    console.log('stdout: ' + dataStr);
    strToReturn += dataStr
  });

  proc.on('close', function(code) {
    if(code !== 0) {
      return context.done(new Error("Process exited with non-zero status code"));
    }
    context.succeed(strToReturn);
  });
}

Alles einpacken und verschiffen

Jetzt nur noch ein Zip-File aws-lambda-php-example.zip erstellen mit den Dateien:

  • index.js
  • index.php
  • php

    zip aws-lambda-php-example.zip index.js index.php php

In AWS eine neue Lambda Function erstellen mit folgenden Parametern:

  • Type: nodeJS
  • RAM: 128mb
  • Timeout: 3 seconds

Den JavaScript Code nicht in den Online Editor kopieren, sondern Upload auswählen
und das komplette ZIP-File hochladen und an der Lambda Function anhängen.
Alternativ im S3 ablegen und aus dem Bucket heraus laden lassen

Benötigt man die Schnittstelle per HTTP von extern und/oder anderen Instanzen kann
man auch noch das API-Gateway von Amazon hinzuziehen.

Spassbremse umgangen

Das Script stört nicht mehr die weitere Transformation und alle anderen Softwarebrocken
können ihren Weg in die Cloud beschreiten. Die Teams, die solche Softwarestückchen
einmal in schön abliefern müssen, können dies dann noch später nachholen.
Haben aber auch erst einmal Zeit für die grösseren Cloud-Projekte.

Wer aus “Gründen” nicht sofort eine komplette Software in die Cloud bringen kann
sollte sich das API-Gateway einmal genauer angucken. Path und Method lassen sich
damit sehr gut trennen. Einzelne Aufrufe lassen sich so auf die alte Software
oder die neue Software leiten. Natürlich nur, so lange so etwas mit einer Software
möglich ist und intern keine Abhängigkeiten bestehen. Ist es möglich steht einer
Migration einzelner Funktionen nichts im Wege. Rollback inklusive.

Atom Editor hinter Proxy

Da will man sich im Atom Editor mal eben das Package “script” installieren, um Code zum testen direkt im Atom auszuführen, da stellt sich der Proxy mal wieder in den Weg.


apm config set https-proxy http://proxy.example.com:3128
apm config set http-proxy http://proxy.example.com:3128

Atom wieder öffnen und Package installieren.

AWS Lambda serverless Framework und serverless-offline

nodejs, npm, serverless und serverless-offline installieren

Installation nodejs

$ sudo apt-get install curl python-software-properties
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ sudo apt-get install nodejs
$ node -v 

v8.2.1

$ npm -v 

5.3.0

Installation serverless

npm install -g serverless

serverless service erstellen

Project erstellen

# Ein neues Serverless Service/Project erstellen 
serverless create --template aws-nodejs --path my-service
# In das neue Verzeichnis wechseln
cd my-service

AWS Access-Key und Secret

export AWS_ACCESS_KEY_ID=<your-key-here>
export AWS_SECRET_ACCESS_KEY=<your-secret-key-here>
serverless deploy

oder

serverless config credentials --provider aws --key AKIAIOSFODNN7EXAMPLE --secret wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Deploy Service

serverless deploy -v

Die Logs der Function abrufen:

serverless invoke -f hello -l

Service in AWS entfernen

serverless remove

mysql RSD DB mit NodeJS in Lambda benutzen

Als erstes im Projectverzeichnis (my-project) das mysql plugin installieren

npm install mysql 

Im Code mysql hinzufügen und den restlichen mysql java-script Code:

var mysql = require('mysql');
module.exports.view = (event, context, callback) => {
  const ip = event.requestContext.identity.sourceIp;
  var connection = mysql.createConnection({
    host: 'YourRdsDB.xxxxxxx.eu-central-1.rds.amazonaws.com',
    user: 'DBUser',
    password: 'DBPass',
    database: 'DBname'
  });
  connection.connect();
  // ....
}

Serverless offline ohne AWS benutzen

Serverless-offline installieren

npm install serverless-offline --save-dev

Hinter einem Cooperate-Proxy ggf. auch noch mit Auth?

Einfach npm mit config set die Parameter für https-proxy und proxy setzen.

npm config set proxy http://"username:gehe\!m"@proxy.example.com:3128
npm config set https-proxy http://"username:gehe\!m"@proxy.example.com:3128

Sonderzeichen wie das ‘!’ hier im Beispiel müssen escaped werden. Und Benutzer und Password müssen komplett in ” gesetzt werden.

Das Verzeichnis “node_modules” sollte jetzt ungefähr so aussehen und unter anderem serverless-offline auflisten:

ls node_modules/
accept            babel-helpers   balanced-match   content               esutils            home-or-tmp  json5             mimos          os-homedir           serverless-offline  supports-color
ammo              babel-messages  boom             convert-source-map    globals            invariant    jsonpath-plus     minimatch      os-tmpdir            shot                to-fast-properties
ansi-regex        babel-register  brace-expansion  core-js               h2o2               iron         js-string-escape  minimist       path-is-absolute     slash               topo
ansi-styles       babel-runtime   call             cryptiles             hapi               isemail      js-tokens         mkdirp         peekaboo             source-map          trim-right
b64               babel-template  catbox           crypto                hapi-cors-headers  is-finite    kilt              moment         pez                  source-map-support  velocityjs
babel-code-frame  babel-traverse  catbox-memory    debug                 has-ansi           items        lodash            ms             private              statehood           vise
babel-core        babel-types     chalk            detect-indent         heavy              joi          loose-envify      nigel          regenerator-runtime  strip-ansi          wreck
babel-generator   babylon         concat-map       escape-string-regexp  hoek               jsesc        mime-db           number-is-nan  repeating            subtext

PlugIn in der serverless.yml hinzufügen

plugins:
  - serverless-offline

Überprüfen ob das PlugIn verfügbar ist

serverless

Die Ausgabe sollte unter commands jetzt zusätzlich “offline” und “offline-start” auflisten

...
logs .......................... Output the logs of a deployed function
metrics ....................... Show metrics for a specific function
offline ....................... Simulates API Gateway to call your lambda functions offline.
offline start ................. Simulates API Gateway to call your lambda functions offline using backward compatible initialization.
package ....................... Packages a Serverless service
remove ........................ Remove Serverless service and all resources
...

In der letzten Zeile werden alle verfügbaren PlugIns aufgelistet und “Offline” sollte dort auch aufgelistet werden.

Plugins
AwsCommon, AwsCompileAlexaSkillEvents, AwsCompileApigEvents, AwsCompileCloudWatchEventEvents, AwsCompileCloudWatchLogEvents, AwsCompileCognitoUserPoolEvents, AwsCompileFunctions, AwsCompileIoTEvents, AwsCompileS3Events, AwsCompileSNSEvents, AwsCompileScheduledEvents, AwsCompileStreamEvents, AwsConfigCredentials, AwsDeploy, AwsDeployFunction, AwsDeployList, AwsInfo, AwsInvoke, AwsInvokeLocal, AwsLogs, AwsMetrics, AwsPackage, AwsProvider, AwsRemove, AwsRollback, AwsRollbackFunction, Config, Create, Deploy, Emit, Info, Install, Invoke, Login, Logout, Logs, Metrics, Offline, Package, Platform, Remove, Rollback, Run, SlStats

Projekt offline starten

serverless offline start or sls offline start.

serverless offline start
Serverless: Starting Offline: dev/us-east-1.

Serverless: Routes for hello:
Serverless: (none)

Serverless: Offline listening on http://localhost:3000

Service testen

Dabei an den Proxy denken und den Parameter --noproxy setzen:

curl --noproxy "127.0.0.1, localhost" http://localhost:3000

Parameter von serverless-offline

serverless offline --help 
--prefix                -p  Adds a prefix to every path, to send your requests to http://localhost:3000/[prefix]/[your_path] instead. E.g. -p dev
--location              -l  The root location of the handlers' files. Defaults to the current directory
--host                  -o  Host name to listen on. Default: localhost
--port                  -P  Port to listen on. Default: 3000
--stage                 -s  The stage used to populate your templates. Default: the first stage found in your project.
--region                -r  The region used to populate your templates. Default: the first region for the first stage found.
--noTimeout             -t  Disables the timeout feature.
--noEnvironment             Turns off loading of your environment variables from serverless.yml. Allows the usage of tools such as PM2 or docker-compose.
--resourceRoutes            Turns on loading of your HTTP proxy settings from serverless.yml.
--dontPrintOutput           Turns off logging of your lambda outputs in the terminal.
--httpsProtocol         -H  To enable HTTPS, specify directory (relative to your cwd, typically your project dir) for both cert.pem and key.pem files.
--skipCacheInvalidation -c  Tells the plugin to skip require cache invalidation. A script reloading tool like Nodemon might then be needed.
--corsAllowOrigin           Used as default Access-Control-Allow-Origin header value for responses. Delimit multiple values with commas. Default: '*'
--corsAllowHeaders          Used as default Access-Control-Allow-Headers header value for responses. Delimit multiple values with commas. Default: 'accept,content-type,x-api-key'
--corsDisallowCredentials   When provided, the default Access-Control-Allow-Credentials header value will be passed as 'false'. Default: true
--exec "<script>"           When provided, a shell script is executed when the server starts up, and the server will shut domn after handling this command.

Parameter in der serverless.yml setzen

Beispiel:

custom:
  serverless-offline:
    httpsProtocol: "dev-certs"
    port: 4000
    prefix: "dev"
    stage: "dev"

Serverless Computing. What?

René Büst erklärt in seinem Artikel was “Serverless Infrastruktur” bzw. “Serverless Computing” ist.

Im Prinzip ist es nichts Besonderes, wenn Cloud-Anbieter ständig eine neue Sau durchs Dorf treiben. Die aktuelle Sau hört auf den Namen “Serverless Infrastructure” oder auch “Serverless Computing”. Das Außergewöhnliche daran ist jedoch, dass sie einige Verwirrung stiftet. Ist nun das Ende der Server angebrochen? Bei weitem nicht – viel mehr verschiebt sich innerhalb des Cloud-Stacks mal wieder etwas weiter nach oben.

Textcraft Pocket aktuell kostenlos

Lesen, schreiben, korrigieren, recherchieren und teilen!
Textkraft Pocket für iPhone und Apple Watch ist eine professionelle Schreib-App und komfortabler Dokumenten-Reader.

Das Besondere an Textkraft ist, dass du alle Dokumente für dein Projekt in einer App hast, Seite an Seite, ohne Ladezeit zugriffsbereit. Mit einer Wischgeste oder der Dokumentenübersicht wechselst du vor und zurück durch Texte, Notizen, Office-Dokumente, PDF-Dateien und andere Vorlagen, die du für deine Textarbeit benötigst.

Erweiterte Offline-Wörterbücher mit Synonymen und viele integrierte Online-Nachschlagewerke helfen dir bei Rechtschreibung, Sprache, Ausdruck, Grammatik, Definition und Übersetzung. Präzise Cursornavigation, schnelle Textauswahl und viele zusätzliche Tastaturfunktionen optimieren das Schreiben.

textcraft_pocket_screen
textcraft_pocket_screen

Git: Version Control for Everyone eBook

Heute gibt es bei packtpub.com “Git: Version Control for Everyone” kostenlos zum herunterladen.

Controlling different versions of files is an efficient process with Git, and this book makes it a snap to learn too! A practical tutorial, it hard-wires the lessons through hands-on exercises throughout the course.

  • A complete beginner’s workflow for version control of common documents and content
  • Examples used are from non-techie, day to day computing activities we all engage in
  • Learn through multiple modes – readers learn theory to understand the concept and reinforce it by practical tutorials.
  • Ideal for users on Windows, Linux, and Mac OS X

Mastodon: social.pretzlaff.co

Auf social.pretzlaff.co läuft seit ein paar Tagen eine Mastodon Instanz. Mein User ist dort: rpr. Registration ist dort aktiviert.
Alternativ kann man sich auch einen Account auf einer der vielen anderen Mastodon Instanzen anlegen. Die Kommunikation funktioniert ja schließlich zwischen den Instanzen und ist ja auch der Sinn von Mastodon und dem dezentralem Aufbau.

Quelle: Wikipedia

Mastodon ist ein verteilter Mikrobloggingdienst, der 2016 von Eugen Rochko entwickelt wurde; einem deutschen Programmierer aus Jena. Im Gegensatz zu großen Plattformen wie Twitter ist Mastodon als dezentrales Netzwerk konzipiert. Benutzer können einer beliebigen Instanz beitreten oder selbst eine eigene betreiben. Mastodon ist kompatibel zu GNU Social sowie allen OStatus-Diensten.

Das Projekt ist Freie Software und steht mit seinem Quelltext unter der GNU Affero General Public License zur Verfügung. Entwicklung und Betrieb der Instanz mastodon.social werden durch Spenden finanziert.

Auf Mastodon können angemeldete Nutzer telegrammartige Kurznachrichten verbreiten. Diese Nachrichten werden „Toots“ oder übersetzt „Tröts“ genannt. Mastodon erlaubt pro Post (Toot) 500 Zeichen.

Betrieben von WordPress | Theme: Baskerville 2 von Anders Noren.

Nach oben ↑