25.06.2016

Zahlensysteme umwandeln in perl

Angeregt durch eine Diskussion mit einem Kollegen vor einiger Zeit, und jetzt nochmal in einem Facebook-Kommentar, habe ich ein kleines Perl-Skript geschrieben, mit dem man Zahlen von einem Zahlensystem in ein anderes umrechnen kann.

Dabei können sowohl Ausgangs- als auch Zielsystem beliebige Basis haben, man muss beim Aufruf angeben, von wo nach wo umgewandelt werden soll. Im Moment funktioniert es nur bis Basis 16. Wer größere Werte braucht, findet leicht die eine Stelle im Code, die geändert werden muss ;). In Vorlesungsskripten steht dann üblicherweise " ... left as an exercise for the reader".

Als kleines Bonbon ist es auch möglich, nicht nur die Zahlen auszugeben, sondern alternativ auch die ASCII-Zeichen, die diesen Werten entsprechen.

Damit kann man dann lustige, leicht unverständliche Kommentare schreiben wie

> 1000010 1101001 1101110 1100001 1100101 1110010 1100011 1101111 1100100 1100101 1101001 1110011 1110100 1100110 1110101 1100101 1110010 1010111 1100101 1101001 1100011 1101000 1100101 1101001 1100101 1110010 100001
>  01001110 01101001 01111000 00100000 01100100 01100001 00101100 00100000 01001000 01100101 01111000 00100000 01101001 01110011 01110100 00100000 01100110 11000011 10111100 01110010 00100000 01000110 01100001 01110101 01101100 01100101 01101110 01111010 01100101 01110010 00100001
 >  53 65 6c 62 73 74 76 65 72 73 74 61 65 6e 64 6c 69 63 68 2c 50 72 6f 67 72 61 6d 6d 69 65 72 65 72 73 69 6e 64 66 61 75 6c 3b 2d 29

So wird es benutzt:

$ ./code.pl -i16 -o2 48 61 6c 6c 6f
# out: 1001000 1100001 1101100 1101100 1101111

$ ./code.pl -a -i16 -o2 48 61 6c 6c 6f
# asc: Hallo

$ ./code.pl -a -i2 -o16 01101000 01100001 00100000 01101000 01100001
# asc: ha ha

$ ./code.pl -i10 -o2 1 2 3 4 5
# out: 1 10 11 100 101


#!/usr/bin/perl -w

use strict 'vars';
use strict 'refs';

use Getopt::Std;

use vars qw($opt_i $opt_o $opt_a $opt_v);

my ($in,$out,$inbase,$outbase,$ok);
my $chars="0123456789abcdef";

sub from {
    my $v=0;
    if ($inbase==1) {
        $v=ord($_[0]);
    }
    else {
        print "# c: " if ($opt_v);
        for my $c (split(//,$_[0])) {
            print ".$c" if ($opt_v);
            my $t=index($chars,lc($c));
            $v=($v*$inbase)+$t;
        }
        print " ($v)\n" if ($opt_v);
    }
    return $v;
}

sub to {
    my $c="";
    if ($outbase==1) {
        $c=chr($_[0]);
        print ".$c" if ($opt_v);
    }
    else {
        my $v=$_[0];
        while ($v>0) {
            my $t=$v%$outbase;
            $c=substr($chars,$t,1).$c;
            $v=int($v/$outbase);
            print ".$v%$t" if ($opt_v);
        }
        print " ($c)\n" if ($opt_v);
        $c=" ".$c;
    }
    return $c;
}

getopts("avi:o:");
$ok=0;
my $asc="";

if ($opt_i) { $inbase =$opt_i; $ok|=1; }
if ($opt_o) { $outbase=$opt_o; $ok|=2; }
if ($ok!=3) {
    print STDERR "# unknown base!\n";
    exit(1);
}

if ($#ARGV>=0) { $in=join(" ",@ARGV); }
else { $in=<>; }

print "# from: $inbase\n"  if ($opt_v);
print "# to  : $outbase\n" if ($opt_v);

if ($inbase==1) {
    $in=join(" ",split(//,$in));
}
foreach my $word (split(/\s+/,$in)) {
    my ($c,$a);

    print "# w: $word\n" if ($opt_v);
    $c=from($word);
    print "# c: $c\n" if ($opt_v);
    $a=to($c);
    $asc.=chr($c);
    $out.=$a;
}

print "# out:$out\n" unless ($opt_a);
print "# asc: $asc\n" if ($opt_a);

23.06.2016

X-Men: Apocalypse - Kino

Tja, nach Captain America 3 nun die nächste Comic-Verfilmung von Marvel.

Der neue X-Men-Film hat mich ziemlich ratlos zurückgelassen. Einzelne Schauspieler fand ich herausragend (weiter unten mehr). Kurze Zusammenfassung: der  Supermutant En Sabah Nur erwacht nach Jahrtausenden wieder und will die Erde in Schutt und Asche legen, um auf den Trümmern ein Mutantenimperium zu errichten ("survival of the strongest", nicht wie bei Darwin "... the fittest").

In Summe fand ich den Film technisch ok, aber inhaltlich mäßig.

Generell muss ich ja sagen, dass ich es sehr merkwürdig finde, wenn die Comicfiguren an verschiedene Vermarktungsfirmen vermietet werden und damit verschiedene, vollkommen getrennte Welten entstehen. In den Comics existieren alle Figuren nebeneinander (gut, es gibt die Alternativwelt-Comics und bei DC sowas wie Erde-2, Erde-3, Erde-616 ...), und gelegentlich gibt es auch mal Crossover, bei denen sich die Figuren gegenseitig besuchen. Langsam scheint sich hier die Situation zu entspannen, was man neulich daran sah, dass Spiderman in Cap 3 auftauchen "durfte", obwohl er bislang von Sony vermarktet wurde. Mal schauen, ob das noch weiter geht ... Die Comic-Universen sind ja bislang strikt getrennt, es gibt X-Men, Avengers, Spiderman, Die Fantastischen 4 und das DC-Universum (Superman, Batman, Green Lantern, Wonder Woman, Flash, ...) ist ja davon ebenfalls streng getrennt.

Erik "Magneto" Lehnsherr ist ein toller Charakter und Michael Fassbender spielt ihn sehr vielschichtig. Nach den Geschehnissen mit der Zeitreise in "Days of future past" (von der außer Wolverine und Xavier niemand weiß, weil ja eben die Vergangenheit geändert wurde) hat er sich zurückgezogen und verzichtet auf den Einsatz seiner Kräfte. Ausgerechnet beim Versuch, einen Arbeitskollegen im Stahlwerk zu retten, offenbart er sich und die Angst der "normalen" Menschen führt zu einer persönlichen Tragödie, durch die er zu einem Gefolgsmann von En Sabah Nur wird, der ihm Rache bietet und seine Kräfte weiter verstärkt.

Mystique taucht wieder auf - sie arbeitet im Untergrund und zeigt sich getarnt, aber nicht in ihrer normalen, blauen Gestalt. Sie sammelt weltweit Mutanten, die in üblen Situationen stecken, z.B. Kurt "Nightcrawler" Wagner bei einem inszenierten Schaukampf, und hilft ihnen bei der Flucht mittels einer Art Mutanten-Untergrundbewegung. Ansonsten hat sie von ein paar Action-Szenen im Kampf gegen En Sabah Nur abgesehen keine hervorstechenden Eigenschaften im Film.

Natürlich gibt es Verbündete auf beiden Seiten und auch neue Figuren, die man aus den Comics kennt, tauchen auf. Die Figur "Angel" aus den ersten drei Filmen wird - ähnlich wie Wolverine - metallisch "gehärtet" und ist einer der vier Reiter der Apokalypse, genau wie Psylocke, Storm und Magneto. In der neuen Zeitlinie ist Angel ein flach gezeichneter gnadenloser Kämpfer ohne Hintergrund.

Mal sehen ... welche Mutanten sind mir aufgefallen ... Große Rollen spielen Hank "Beast" McCoy, Scott "Cyclops" Summers (nicht verwandt mit Buffy ;-) ), und Quicksilver taucht als Magnetos Sohn wieder auf, allerdings nicht Wanda "Scarlet Witch" Maximoff, was ich als Gesamtsituation etwas verwirrend finde, weil sie als Geschwisterpaar bei "Captain America" sind, aber dort wiederum nicht als Magnetos Kinder. Die Szene, in der Quicksilver das gesamte Haus evakuiert, während die Explosion sich im Zeitlupentempo ausbreitet, ist noch genialer gemacht als Eriks Befreiung im vorherigen Film.

Quicksilver verzichtet bei der Konfrontation darauf, sich als Eriks Sohn zu offenbaren - er will sich vermutlich noch über seine Beziehung zu ihm klar werden, nachdem er die gnadenlose Seite seines Vaters kennenlernt, der rücksichtslos alles zerstört, um neue Bauten für seinen Meister zu errichten. In den Credits taucht übrigens auch der "Pizza dog" auf, ein häßlicher Mops, dem der größte Teil seiner Pizza geklaut wird.

Auch wenn er eine der Hauptpersonen ist, hat für mich Xavier keine besonders große Rolle gespielt. Immerhin wissen wir jetzt, warum er eine Glatze hat - es ist nicht das Testosteron, sondern der abgebrochene Versuch von En Sabah Nur, den Körper zu übernehmen. Er hat Cerebro bedient und übermittelt Nurs Botschaft an die Menschheit, aber überzeugend war der Charakter in diesem Film nicht.

Wolverine taucht auf - Stryker hat ihn auch in dieser neuen Zeitlinie zum Adamantium-gestählten Kämpfer gemacht und ihn einer Gehirnwäsche unterzogen, durch die er sich an nichts erinnert. Jean Grey befreit ihn und kann ihm einen Teil seiner Erinnerung zurückgeben, bevor er aus Strykers Geheimlabor flieht. Wie wir aus dem Ende von "Days of future past" wissen, wird er in dieser Zeitlinie später zum X-Team stoßen und Lehrer an der "School for gifted youngsters". Vermutlich sehen wir einen Teil seiner Odyssee bis dahin im nächsten Wolverine-Film.

Die gesamte Situation von der Entführung der X-Küken, ihre Befreiung und die Rückkehr wirken allerdings etwas gekünstelt in den Film gebastelt, um die Überleitung zu den nächsten Filmen herzustellen. Mich würde mal interessieren, was passiert, wenn Adamantium und Vibranium aufeinander treffen würden. Caps Schild hat ja beträchtliche Kratzer von Black Panthers Krallen bekommen ...

Erst gegen Ende, als sich En Sabah Nur in seiner Hybris auch gegen Mutanten wendet, vereinen sich alle zum Team X und bekämpfen ihn gemeinsam, sogar Magneto und Storm wechseln die Seiten; Psylocke verdrückt sich unauffällig und vermeidet, eine Seite zu wählen. Diese Wende im Film war absolut nachvollziehbar geschildert - im Detail hat mich allerdings gewundert, wie sich Jean Greys Kräfte manifestieren, nachdem sie "on the go" gelernt hat, sie zu entfesseln. Ich hatte eher erwartet, dass sie sich geistig mit Xavier verbindet, um En Sabah Nur zu bekämpfen. Stattdessen wird er durch einen körperlichen Angriff besiegt.

Was mich vollkommen ratlos zurücklässt, ist die Tatsache, dass der Film die Menschen vollkommen passiv darstellt - man sieht nur gelegentlich Schnitte, dass die Militärs weltweit ratlos durcheinander reden. An keiner Stelle wird darauf eingegangen, dass En Sabah Nur mit Magnetos Hilfe mehrere Großstädte vollständig zerstört und aus dem Rohmaterial seinen Pyramidenpalast errichtet.

Die Motivation von En Sabah Nur besteht auch nur daraus, alles kaputt zu machen und zu sehen, wer überlebt. Das ist mir viel zu flach. Hingegen ist der Charakter von Erik vielschichtig: als Kind im KZ, das zuschauen muss, wie die Mutter erschossen wird, später als Jäger der nach Südamerika geflüchteten Nazis, als Ehemann und Vater einer Tochter, und als durchaus zum Nachdenken fähiger Mutant, der darauf verzichtet, zu töten und mit Xavier hofft, dass sich Menschen und Mutanten zusammen raufen. Der Wendepunkt, sich Apocalypse anzuschließen, war psychologisch raffiniert gewählt: dies findet in Auschwitz statt, direkt bei dem metallenen Tor, durch das Erik damals von seiner Mutter getrennt wurde und zum ersten Mal seine Kräfte erwachten. Hier gibt es eine elegante Blende zwischen den "alten" und "neuen" X-Men-Filmen.

Dieser Plan, die Welt vollständig zu zerstören, ist auch mein hauptsächlicher Kritikpunkt: unglaublich tolle CGI-Computergrafik mit viel Bumms, die aber am Ende vollständig ausblendet, dass dabei vermutlich Millionen von Menschen umgekommen sind - Kairo wird vollständig zerstört und auch andere Städte haben schwer zu leiden. Es gibt nirgends eine Reflexion darüber, wie sich Mutanten und Menschen zukünftig verhalten und obwohl es eindeutig einen Bösewicht gab, haben schätzungsweise alle "normalen" Menschen jetzt erstmal Angst vor den ausgeflippten Mutanten. Auch aus der Situation, dass alle Atomwaffen abgefeuert werden und harmlos im Weltall verpuffen, entwickelt sich wenig außer der resignierten Bemerkung am Schluss, dass die Menschheit schon wieder beginnt, aufzurüsten.

In Avengers 2 war die finale Situation hauptsächlich dadurch charakterisiert, dass die Avengers die Bevölkerung der Stadt retten und quasi nebenbei gegen Ultron kämpfen. Die Superhelden kümmern und sorgen sich um die "normalen" Menschen. Dieser Teil der Menschheit wird im X-Men-Film total ausgeblendet, abgesehen von ein paar kurzen Dialogen, dass die Menschen seit "Washington" von den Mutanten wissen.

Die Folgen der Zerstörung des Atomwaffenarsenals werden nicht mal thematisiert. Gut, es muss nicht *das* Topos sein wie bei Cap 3, dass die Superhelden formal reglementiert werden, aber es ist so eine gravierende Folge des Kampfes gegen den Bösewicht, dass das Fehlen dieses Sachverhalts massiv auffällt. Ein Randthema ist auch Stryker, der daran arbeitet, Mutanten für Forschungszwecke zu mißbrauchen, um Superkämpfer zu basteln, die - auf wessen Befehl auch immer - dann aktiv werden. Da die letzten Filme sich zeitlich in den 60ern (First Class), 70ern (Days of future past) und 80ern (Apocalypse) einordnen, hat mir auch gefehlt, ob es als Folge des Kalten Kriegs auch ein "sowjetisches" Mutantenteam gibt. Es würde mich wundern, wenn Stryker der einzige Militär ist, der das Potential der Mutanten erkannt hat. Sogar in der Perry-Rhodan-Serie war es naheliegend, dass ein Bösewicht (der "Overhead") ein Anti-Team von Mutanten aufbaut und versucht, nach der Macht zu greifen.

Unlogisch fand ich auch, dass En Sabah Nur seine Langlebigkeit dem Wechsel des Körpers verdankt und dabei Mutantenfähigkeiten ansammelt. Für den Wechsel bevorzugt er wiederum Mutanten und übernimmt mit dem Transfer auch ihre Kräfte. Das bedeutet also, dass die Fähigkeiten eine Eigenschaft des Körpers sind. En Sabah Nur "sammelt" aber diese Fähigkeiten und behält auch die alten, wenn er den Körper verlässt. Aber hey, es ist ein Comic ;)

Der Marvel-übliche Nachspann zeigt die Aufräumarbeiten in Strykers Basis und einen Mitarbeiter von "Essex Corp", der eine Blutprobe aus einem Safe entnimmt und zu anderen Proben in einen Koffer packt. Das lässt auf das Auftreten von Mr. Sinister in den nächsten Filmen schließen, möglicherweise werden mit diesen Blutproben Gen-Experimente durchgeführt und ein Wolverine-Klon erzeugt. Angeblich soll Wolverine 3 der letzte Film mit Hugh Jackman werden - schade, ich mag den Schauspieler sehr gern, und er füllt diese Rolle perfekt aus.

Auch die beiden vorherigen Wolverine-Filme haben mir sehr gut gefallen, in denen - in der früheren Zeitlinie - seine Kindheit, seine Behandlung mit Adamantium, sein Gedächtnisverlust und die obligatorische Liebesgeschichte erzählt wurden. Auch die Geschichte in Japan fand ich ok, obwohl mir nicht klar war, wie der Verlust seiner metallenen Krallen in die weitere Serienlogik passt. Aber das hat sich ja mit der Zeitreise und der Veränderung der Vergangenheit erledigt.

17.06.2016

Flash-Update auf Version 22

Mir fehlen langsam die Worte, wie die Versionsnummern inflationär in Höhen klettern. Google hat es mit Chrome vorgemacht, aus irgendwelchen Gründen macht es Mozilla mit Firefox und Thunderbird nach, und jetzt beschleunigt Adobe die Nummerierung des Flashplayers genauso.

Und weil mir die neuen Worte fehlen, nehme ich immer den alten Blogartikel, nur die Versionsnummern und die Links ändern sich ;)

Einen Hinweis muss ich aber nun doch noch einbauen: ab Ende Januar 2016 gibt  es keine freien Downloads der Installationsdateien mehr. Genaue Modalitäten sind noch nicht bekannt, Adobe hat nur bekannt gegeben, dass die Downloadlinks über die "distribution3.html"-Seite nicht mehr zur Verfügung stehen werden und man eine Adobe-ID und eine Business-Lizenz benötige.

Grade erst Version 16 (siehe meinen älteren Blogartikel von November 2015) und 17 (hier) und 18 (hier im Blog) und 19 (hier im Blog) und 20 (hier im Blog) und 21 (hier im Blog), jetzt schon 22 (mittlerweile zählt wohl auch ein Major release nicht mehr zu den besonders erwähnenswerten Ereignissen bei Adobe?). Wer sich selbst auf dem Laufenden halten will, kann das Blog des Security-Teams bei Adobe lesen oder als RSS abonnieren.

Wie üblich in ihrem freundlichen Service-Blog die passende Automation zum Herunterladen und Installieren. Falls ein Proxy verwendet wird, das "rem" bzw. "#" entfernen und eigene Proxy-Adresse eintragen.

Das Tool wget wird bei Windows noch benötigt wie hier beschrieben. Bei Linux sollte es schon vorhanden sein, da es von vielen anderen Programmen intern verwendet wird.

Für Windows wie üblich beide Varianten, ActiveX und Netscape Plugin (Achtung übrigens, Firefox wird demnächst das NPAPI komplett abschaffen - mal sehen, was Adobe und Flash dann machen).
@echo off

rem set http_proxy=http://192.168.100.100:3128/
set VNP=
22.0.0.209
set VAX=
22.0.0.209
set V=22
set H=fpdownload.macromedia.com
set P=/get/flashplayer/current/licensing/win
set AX=install_flash_player_%V%_active_x.exe
set NP=install_flash_player_%V%_plugin.exe

wget http://%H%%P%/%AX% -O flash-%VAX%_ax.exe
.\flash-%VAX%_ax -install
wget http://%H%%P%/%NP% -O flash-%VNP%_np.exe
.\flash-%VNP%_np -install

Für Linux 64 bit rpm (als root ausführen oder "sudo rpm" schreiben) gibt es nach wie vor "nur" Version 11, aber zur Abwechslung haben sich der Downloadlink und der Dateiname für .rpm geändert. Für .tar.gz-Format ist immer noch der erste Downloadlink gültig, deshalb belasse ich beide im Skript.
#!/bin/sh

# http_proxy=http://192.168.100.100:3128/

VL=11.2.202.632
H=fpdownload.macromedia.com

PL1=/get/flashplayer/current/licensing/linux
PL2=/get/flashplayer/pdc/${VL}


DL() { wget -N "$1/$2"; mv "$2" "$3"; }

echo Linux 64 bit rpm ...
DL http://${H}${PL2} \
   flash-plugin-${VL}-release.x86_64.rpm \
  
flash-${VL}.x86_64.rpm
rpm -F --force
flash-${VL}.x86_64.rpm
[20160617: Security-Bulletin von Adobe]
[20160713: Security Bulletin von Adobe]