Ich bleibe bei Amazon Kunde, alles andere wäre Heuchelei

Amazon wird derzeit von allen Seiten heftig wegen der Arbeitsbedingungen in den Logistikzentren kritisiert. Während alle auf Amazon rumhacken, ist mir ein Detail aufgefallen, im oben verlinkten Artikel:

Rund 90 Prozent der Zeitarbeiter bei den Mitgliedsfirmen hätten einen unbefristeten Arbeitsvertrag, betonte Stolz. Der iGZ ist einer der Arbeitgeberverbände der Branche und vertritt nach eigenen Angaben rund 2.700 mittelständische Unternehmen.

Ist das so?

Die Wirklichkeit sieht anders aus. Mehrere Millionen Menschen in Deutschland arbeiten im Niedriglohnsektor zu ähnlichen oder schlechteren Bedingungen als die Leiharbeiter bei Amazon. Ein grosser Teil dieser Menschen verdient nicht genug Geld, um zu überleben und muss mit Hartz IV aufstocken.

Ein Bekannter von mir hat neulich so einen Job angenommen: befristet für 3 Monate bei einer Zeitfirma angestellt für 7,50 Euro die Stunde brutto. Die Zeitfirma verleiht ihn an einen Callcenterbetreiber, der widerum Callcenter für irgendwelche Unternehmen betreibt. Jetzt ist er krank geworden, der Vertrag wird nicht erneuert. Raus.

So oder ähnlich sieht der Alltag vieler Menschen in Deutschland heute aus. Die Kritik an Amazon an sich ist natürlich grundsätzlich nicht falsch. Der Fehler ist, dass Amazon aber lediglich die Möglichkeiten nutzt, die es in Deutschland hat. Gäbe es diese Möglichkeiten nicht, würden sie das auch nicht tun. Zu verdanken haben wir diesen Zustand unserer Regierung (und der davor), die den Arbeitsmarkt systematisch in Richtung chinesischer Verhältnisse umgebaut haben und damit 100 Jahre gewerkschaftliche Kämpfe zunichte gemacht haben.

Die Kritik hat der Regierung zu gelten und nicht einem einzelnen Unternehmen. Ein Unternehmen ist stets bestrebt die Kosten zu senken, und dabei reizt es die gesetzlichen Möglichkeiten aus soweit es geht. Nicht nur Amazon tut das. Auch die Telekom. Oder Zalando. Oder DHS. Oder Apple. Jedoch kommt niemand dieser Möchtegern-Protestler bei Facebook auf die Idee, bei denen auch zu kündigen. Ganz zu schweigen davon, ihre Kritik an die Regierung zu richten, die diesen unerträglichen Zustand überhaupt erst zugelassen hat. Oder an die Gewerkschaften, die sich haben korrumpieren und kaufen lassen.

Dieses ganze Gezeter gegen Amazon ist nichts weiter als stinkende, ignorante Heuchelei. Wollte irgendeiner von denen tatsächlich etwas ändern, würde er seinen Abgeordneten anschreiben, anders wählen und grundsätzlich sein Konsumverhalten ändern. Und das nervt mich schon ziemlich gewaltig.

19 February 2013 | #gesellschaft

 

Arduino Adè :-)

Meine bisherigen Controllerprojekte habe ich immer mit Arduino gemacht. Ich bin damit zwar zufrieden, aber es ist doch etwas teuer. Vor allem deshalb, weil man den Arduino nachher irgendwo verbaut hat und somit nicht mehr für Experimente benutzen kann. Sehr schlecht.

So bin ich irgendwann auf AVR Controller gekommen. Eine Weile hab ich mit einem Attiny85 rumgespielt. Um den zu programmieren, hab ich mir den Diamex-USB-ISP besorgt und mir eine kleine Adapterplatine gebastelt. Das war schon ganz gut ... Aber! Ein Attiny85 macht nicht viel her, nur ein paar Pins, kein UART usw. Ich wollte also was grösseres, ein Attiny2313 musste her und ein Atmega168. Aber die haben viel mehr Pins und passen logischerweise nicht in meine Platine. Schöner Mist. Nun hätte ich mir noch eine Platine basteln können, und noch eine usw. Alles Kacke.

Zufällig habe ich myAVR entdeckt und mir die universelle Platine myMultiProg MK2 und den myMultiProg MK2 bestellt.

Und was soll ich sagen? Ich bin SOWAS von happy damit! Atmega draufgesteckt, USB Kabel rein, Port rausgesucht und ins Makefile eingetragen. "make upload" - und fertig!

Seeeehr genial. Ich bin von den Socken. Und hiermit hat sich das Thema Arduino für mich im Grunde erledigt. Ich kann zukünftig direkt mit AVR arbeiten. Und auf den Komfort muss ich nicht verzichten, ino sei Dank!

Ich hab mal mein Makefile samt bisserl Beispielcode hochgeladen. Das Makefile ist für FreeBSD, den Port sucht ein Script raus (ist dabei): Blinktest-Mega8-myAVR.

19 February 2013 | #elektronik

 

Mal wieder die Endlers

Ja, die gibts auch noch :)

2013-02-05 - Endlers 2:

2013-02-05 - Endlers 1:

05 February 2013 | #aquarium

 

Quick monitoring script for commandline using google graph

So, you need to setup a graph for something you maintain, for instance response time of a webserver, memory consumption of some process or open database handles. Fast.

You could use MRTG, if you've got it already running. But either way - to add a new graph there isn't really done fast. And what if you don't have MRTG? What about GNU Plot or Google Graph? Every tool like this needs handwork to be done before being able to produce usefull output. One needs more than the other.

Enter quickmon. This is a small script I wrote for the very purpose. It doesn't have any dependencies and therefore runs out-of-the-box. You supply it one or more shell commands and it generates a google graph page and a logfile where it maintains history. It is really not possible to create monitoring graphs any faster!

And as a plus, the tool itself doesn't require internet access. It can run anywhere, inside some protected DMZ or the like. Only the browser which is used to view the output page needs internet access to fetch the google graph JS-library. That's it.

So, first of all, grab a copy of the script from here.

Now, let's take a look at some examples:

quickmon.pl -n "google mx lookup responsetime" \
            -t "google millisecs" \
            -c "host -v -t MX google.com 8.8.8.8 | grep Received | awk '{print \$7}'" \
            -l

In this example we monitor the response time of googles nameserver (when asked for its mx-record) in milliseconds. As you can see, there's one -t and one matching -c parameter. -t tells us what we are actually monitoring and -c is the shell command to be executed. In this example we're using host -v which prints the responsetime of a query in milliseconds. We fetch this value using the grep + awk after the pipe. Here's the output:

Here's another example:

quickmon.pl -n "google webserver response" \
            -t "www.google.com" \
            -c "wget -4 -q -O /dev/null www.google.com" \
            -l

Note the difference to the previous one: we didn't put some grep + awk parser stuff into our shell command. If you do that, the script measures the time it takes to execute the command itself.

This is how it looks after some time:

How about having multiple items in a graph? No problem, you can pass multiple -t and -c parameters to the script. However, be careful to have always one -t for every -c. And: order matters.

quickmon.pl -n "webserver comparision" \
            -t "www.google.com"     -c "wget -4 -q -O /dev/null www.google.com" \
            -t "www.facebook.com"   -c "wget -4 -q -O /dev/null www.facebook.com" \
            -t "www.apple.com"      -c "wget -4 -q -O /dev/null www.apple.com" \
            -l

Ok, quite a long commandline. Watch the matching -t and -c parameters. And here's the output:

One last thing: You might have noticed the -l flag. If supplied, the script runs forever and executes the given commands once every second. That's enough for some quick graphing but sometimes you might need to create graphs for longer timescales, say some days or weeks. In such cases running once per second might be overkill. And executed this way, the script doesn't survive reboots. In such cases just add a cronjob, which executes the quickmon.pl script once every 5 minutes (or whatever you like) and leave the -l parameter. Example:

*/5 * * * * cd /home/user/tmp/ && /usr/local/bin/quickmon.pl -t "title" -c "command"

Beware the chdir call: quickmon.pl uses the current directory to write its logfile and the output page (index.html).

In case you want to take a look at a live sample, here you go: it is the webserver comparision described above, run every 5 minutes by cron.

Well. While this all might sound very cool, there's still one usecase where quickmon.pl could be too complicated. Let's recall: for every painted line in the output graph you have to provide a shell command which returns its value. What if you already have a source which returns such values all at once? Given the examples above it might look like we have to provide one -c parameter per value but each command has to split the same input source differently. That's odd. To say the least.

Take a look at this command output:

$ netstat -w 1 -I bge0 -q 1 
            input         (bge0)           output
   packets  errs idrops      bytes    packets  errs      bytes colls
         9     0     0        828          8     0       9108     0

We've entered the netstat command which printed some stats about a specific network interface. Wouldn't it be good to feed quickmon directly with that output? The good news is: it's possible! Here's a quickmon call which catches some of those values - in and out bytes - to generate a graph from it:

while :; do netstat -w 1 -I bge0 -q 1 | egrep -v "(input|packets)"; done \
     | quickmon.pl -t in-bytes -t out-bytes -p -n bge0 -f 3,6

There's a lot new stuff here, let's dig into it:

  • We're calling the netstat command inside an infinite while loop, because otherwise it doesn't print to stdout but to our controlling terminal (which quickmon doesn't catch). This is freebsd specific. Behavior maybe different on other OSes.
  • The egrep filters out the headings.
  • We provide only 2 titles using -t, because we catch only field #3 and #6 (count starts from 0) by using the -f option.
  • Option -p tells quickmon to watch a file. Since we didn't specify a filename, it uses STDIN, which is actually the output of our while loop.

And this is the output of the above after a while:

Nice, isn't it?

By default quickmon splits the input using whitespace. You might alter this behavior by supplying a different field-separator using the -F option.

Update 2015-10-18:

The script is now available on Github.

The switch -l now has an optional parameter, the time in seconds to wait between loops, a float (i.e. .1 or 2.5 would be legal)
Also, in pipe mode (-p) it’s now possible to specify one title with a timestamp using format characters. So if your input file already contains a timestamp you can use that instead of generated ones.

04 February 2013 | #source

 

Krimskrams, Goggelmoggel und Muggefugg

Update 2013-05-06:

Der beste Spruch über Merkel, den ich je gelesen hab:<blockquote>Nächstes Mal: Angela Merkel (obligatorisches Foto, wo sie diese Handgeste von ihrem Heimatplaneten macht</blockquote><p>Update 2013-04-23:</p>Freiheit<p>Update 2013-04-12:</p>Schöne Geschichte über den <blink> HTML tag von dem Mann, dessen Idee das war (der ihn aber letztlich nicht berbrochen hat) :)<p>Update 2013-04-11:</p>Die Würde des Menschen ist unauffindbar.<p>Update 2013-03-23:</p>Defcon 20: Bruce Schneier answers your questions. Sehr gut. </p>

Der beste Spruch kam, als er auf die Zunehmende Übermacht der Regierungen und Konzerne angesprochen wurde:

Manchmal ist das beste, das wir tun können, langsamer zu verlieren

Update 2013-02-13:

Ein wirklich cooles Projekt: Widerstand Zwecklos:

Update 2013-02-04:

Haha, jemand hat einen Weg gefunden, der GEZ zu entkommen! Sehr schön. Obs klappt, steht allerdings auf einem anderen Blatt...

Update 2013-02-04:

Realität ist das, was nicht verschwindet, wenn man aufhört daran zu glauben.
Philip K. Dick

04 February 2013 | #geschwätz