Computer – Svens Gedankensplitter http://blog.sevke.net Querbeete Gedanken, Meinungen und Interessen Sun, 22 Oct 2017 15:45:43 +0000 de-DE hourly 1 https://wordpress.org/?v=4.9.1 http://blog.sevke.net/wp-content/uploads/2016/03/cropped-think-622166_960_720-150x150.jpg Computer – Svens Gedankensplitter http://blog.sevke.net 32 32 27620428 Conway’s Game of Life http://blog.sevke.net/2017/07/09/conways-game-of-life/ http://blog.sevke.net/2017/07/09/conways-game-of-life/#respond Sun, 09 Jul 2017 10:54:27 +0000 http://blog.sevke.net/?p=8669 Ich habe mal wieder Spaß beim Programmieren gehabt. Bei der Entwicklung des Send More Money Programms hatte ich in der Vergangenheit auch schon mal Spaß gehabt. Programme, die kein Mensch braucht. 🙂

Schon lange einmal wollte ich mir das Game of Life des Mathematikers John Horton Conway vornehmen. Und inzwischen habe ich eine Version in PHP geschrieben.

Worum geht es im „Game of Life“?

Beim „Game of Life“ handelt es sich um die Simulation eines zellulären Automaten. Das ist ein Raum (oder eine Fläche als zweidimensionaler Raum), in dem sich voneinander getrennte Einheiten nach definierten Regeln entwickeln. In unserem Fall nehmen wir eine Art kariertes Blatt Papier. Da sind die Zellen quasi schon vorgegeben. Jede Zelle (jedes Quadrat auf dem Karoblatt) kann tot oder lebendig sein. Mehr nicht.

Wenn man jetzt zufällig (oder wohl überlegt) eine Reihe von Zellen ins Leben ruft, so ergibt sich ein Anfangszustand unserer kleinen Welt. Man kann zum Beispiel Reiskörner auf die Kästchen legen, wo sich eine lebende Zelle befinden soll.

Foto eines Karopapiers mit Reiskörnern

(Okay, so richtig viel kann man nicht erkennen. Ich hätte die Reiskörner einfärben sollen!)

Man könnte statt der Reiskörner auch ein paar Spielsteine nehmen.

Foto eines Karopapiers mit Spielsteinen

(Schon besser.)

Diese Ursuppe an Zellen bzw. Reiskörnern entwickelt sich nun nach genau vier einfachen Regeln weiter zu einer neuen Generation. Dabei wird jede Zelle einzeln auf ihre Nachbarn hin untersucht und dann entsprechend der Regeln in einen neuen Zustand überführt. Zellen können sterben, aber es können auch neue Zellen geboren werden.

Wie lauten die Regeln?

Für jede Zelle werden die Nachbarzellen betrachtet, also insgesamt 8 Zellen (diagonal zählt mit). Auf die Nachbarn selber haben die Regeln keine Auswirkung, sie werden also nicht beeinflusst. Es geht immer um genau dieses eine Kästchen. Deswegen werden bei den Beispielen auch keine Nachbarn mit in die nächste Generation übernommen. Wie es um sie steht, entscheidet sich erst bei der Untersuchung derer Nachbarn.

Neugeburt einer Zelle

Ausgangszustand für die Geburt einer neuen ZelleEine neue Zelle wurde geboren

In einem Kästchen, in dem sich noch keine Zelle bzw. kein Reiskorn/Spielstein befindet, kann neues Leben entstehen. Dazu braucht es zwei Eltern und eine Hebamme, also genau drei Nachbarn.

Überleben der Zelle

Eine Zelle mit zwei Nachbarn überlebtDer Zustand der Zelle hat sich nicht geändert
Eine Zelle mit drei Nachbarn überlebtDer Zustand der Zelle hat sich nicht geändert

Befindet sich in einem Kästchen ein Reiskorn/Spielstein, so kann die Zelle nur dann überleben, wenn sie genau zwei oder drei Nachbarn hat. DIe drei Nachbarzellen helfen also nicht nur bei der Geburt, sondern auch beim Überleben. Das nennt man wohl Familie.

Die Zelle stirbt an Einsamkeit

Eine Zelle ohne NachbarnDie einsame Zelle ist gestorben
Eine Zelle mit einem einzigen NachbarnDIe Zelle ist gestorben, die Nachbarzelle wird nicht beeinflusst.

Wenn die Zelle gar keine oder nur einen einzigen Nachbarn hat, dann geht es der Zelle sehr schlecht und sie stirbt leider an Einsamkeit.

Die Zelle stirbt an Überbevölkerung

Diese Zelle hat rundherum überall Nachbarn.Die Zelle ist an der Überbevölkerung gestorben.
Eine Zelle mit vier Nachbarzellen.Eine Zelle mit vier Nachbarn ist gestorben.

Bei vier oder mehr Nachbarn bekommt die Zelle einen Rappel und stirbt an Überbevölkerung, Man könnte auch sagen, dass einfach nicht genug Nahrung für alle da ist.

Vom Karopapier zum PHP-Programm

Keine Frage: das kann man super mit einem Blatt Papier spielen.

Ein wenig mühsam ist es aber schon.

Und deswegen gibt es auch zahlreiche Programme und Apps, mit denen man das ganz einfach spielerisch auf dem Handy oder dem PC ausprobieren kann.

Ich habe mir mein eigenes Programm geschrieben.

Wenn ihr wollt, könnt ihr das hier ausprobieren: http://sevke.net/php/gol/gol.php.

Interessante Objekte in Conway’s Game of Life

Wenn man mit dem Programm eine Zeit lang herumgespielt hat, stellt man schnell fest, dass es ein paar interessante Objekte gibt. Mitunter bleiben Zellklumpen erhalten und entwickeln sich nicht mehr weiter.

Zusammenstellung von statischen <Objekten in Conway's Game of Life
In dem Bild seht ihr die folgenden Objekte von links oben nach rechts unten: Pond (Teich), Block, Loaf (Laib), Beehive (Bienenstock), Tub (Wanne), Snake (Schlange), Boat (Boot), Largeboat (großes Boot), Ship (Schiff), Largeship (großes Schiff), Barge (Kahn), Largebarge (großer Kahn).
(Ich habe mir diese Bezeichnungen nicht ausgedacht.)

Manche Objekte wechseln immer zwischen mehreren Zuständen hin und her, bleiben aber ansonsten stabil.

Der Blinker
[selber ausprobieren]

Anfangszustand des BlinkersOszillierender Blinker

Die Uhr
[selber ausprobieren]

Anfangszustand der ClockOszillierende Clock

Der Bipol
[selber ausprobieren]

Anfangszustand des BipolsOszillierender Bipol

Der Tripol
[selber ausprobieren]

Anfangszustand des TripolsOszillierender Tripol

Die Kröte
[selber ausprobieren]

Anfangszustand des ToadsOszillierender Toad

Das Pentadecathlon
[selber ausprobieren]

Anfangszustand des PentadecathlonsOszillierendes Pentadecathlon

Der Pulsar
[selber ausprobieren]

Anfangszustand des PulsarsOszillierender Pulsar

Das Oktagon
[selber ausprobieren]

Anfangszustand des OktagonsOszillierendes Oktagon

Der Tümmler
[selber ausprobieren]

Anfangszustand des TumblersOszillierender Tumbler

Der Pulsar ist eins meiner Lieblingsobjekte. Er besitzt im Zentrumsbereich einige statische Zellen, um die herum das Gebilde pulsiert.

Darstellung der drei Phasen des Pulsars

Die 3 Phasen des Pulsars

Und dann gibt es manchmal sogar Gleiter und Raumschiffe, die sich über den Bildschirm bewegen, ihre Form dabei ändern, dann aber wieder zur Ursprungsform zurückfinden.

Der Glider in der ersten Generation

Glider

Das LWSS in der ersten Generation

LWSS

Das MWSS in der ersten Generation

MWSS

Das HWSS in der ersten Generation

HWSS

Der Gleiter bewegt sich diagonal über das Spielfeld.

Das sieht dann in etwa so aus:

Der Glider in der Bewegung

Hier bewegt sich der Gleiter diagonal nach rechts unten … auch wenn es komisch aussieht, als würde sich das Papier nach links oben bewegen. Alles ist eben relativ. 😉

Im Gegensatz zum Gleiter bewegen sich die Raumschiffe immer senkrecht oder waagerecht. Die drei verschiedenen Raumschiffe unterscheiden sich nur in ihrer Größe. Exemplarisch hier die Bewegung des LWSS (Light Weight Space Ship):

Das LWSS in der Bewegung

Eins der interessantesten Objekte ist die Gosper Gleiter Kanone. Dieser Zellenverbund wabert immer von rechts nach links und wieder nach rechts und stößt dabei nach unten in regelmäßigen Abständen Gleiter aus, die sich nach unten rechts wegbewegen. Das Ganze läuft in einer endlosen Schleife.

Die Gleiter Kanone sieht folgendermaßen aus:
Die Glidergun in der ersten Generation
Naja, okay, unter einer „Kanone“ stellt man sich überlichweise etwas anderes vor. Die Bezeichnung müsst ihr einfach akzeptieren. Jedes Ding braucht seinen Namen.

In Aktion werden – wie gesagt – regelmäßig kleine Gleiter ausgestoßen. Das wiederholt sich immer wieder.

Animierte Darstellung der Glidergun

Hinweise zu meiner Version des Game of Life

Normalerweise werden die Zellen immer als schwarze Objekte dargestellt. Ich habe das Ganze etwas farbenfroher gestaltet:

Farbige Darstellung des Tumblers in der neunten Generation

Der Tumbler

Grün: eine Zelle wurde neu geboren
Schwarz: die Zelle hat überlebt
Grau: die Zelle ist schon ziemlich alt
Rot: die Zelle stirbt gleich an Einsamkeit

Das Programm unterstützt (zur Zeit) nur Einzelschritte, aber keine (endlose) automatische Erzeugung der Generationen. Damit möchte ich verhindern, dass einige Spaßvögel den Webserver einem Stress-Test aussetzen.

Eine ganze Menge an stabilen statischen Objekten (Block, Tub, Snake, Beehive, Pond, Loaf, Boat, Largeboat, Ship, Largeship, Barge, Largebarge) und stablien oszillierenden Objekten (Blinker, Toad, Beacon, Tripole, Clock, Oktagon, Tumbler, Pulsar, Pentadecathlon) sowie natürlich verschieden Gleiter und Raumschiffe (Glider, LWSS, MWSS, HWSS) und natürlich die berühmte GliderGun könnt ihr euch anzeigen lassen, indem ihr an den URL den Parameter „?type=…“ anhängt. Die drei Punkte müsst ihr dabei durch den Namen des Objektes (alles in Kleinbuchstaben) ersetzen.

Alle oszillierenden Objekte werden mit jeweils 2 kompletten Zyklen angezeigt. Danach könnt ihr per Einzelschritt weitermachen.

Beispiel: http://sevke.net/php/gol/gol.php?type=glidergun.

Weitere Informationen im Internet

]]>
http://blog.sevke.net/2017/07/09/conways-game-of-life/feed/ 0 8669
Das Einzig Shareware – Software Katalog http://blog.sevke.net/2015/11/02/das-einzig-shareware-software-katalog/ http://blog.sevke.net/2015/11/02/das-einzig-shareware-software-katalog/#comments Sun, 01 Nov 2015 23:13:35 +0000 http://blog.sevke.net/?p=6972 Buchcover des Software Katalogs "Das Einzig Shareware" von 1992

Es gab mal eine Zeit ohne Internet. Da musste man sich seine Programme noch anders als durch einen Download beschaffen. Software war auch nicht für 0,99 Euro als App zu bekommen, sondern kostete oft noch richtig Geld. Von Open Source oder Creative Commons als Synonyme für kostenlose Software (ich bin mir bewusst, dass dies eine Vereinfachung darstellt) war auch noch nicht die Rede, wohl aber von Freeware, Shareware und Public Domain Software.

Von einer Firma in Grafing, nämlich der Computer Solutions GmbH, wurde damals ein dicker Katalog herausgegeben, der über 600 Seiten Umfang hatte. Zur Firma findet man im Internet noch Brancheneinträge, aber sie ist wohl irgendwann nach Darmstadt umgezogen. Jedenfalls existiert dort noch eine Website http://www.compsol.de/.

Parallel zum Shareware-Katalog hat die Firma in den frühen 90er Jahren monatlich die Zeitschrift Shareware Professionell herausgegeben, in der man über alle Neuigkeiten aus der Shareware-Szene informiert wurde.

In meinem IT-Bücherregal steht noch so ein Katalog (siehe Buchcover weiter oben).

Und da findet sich auf Seite 201 der folgende Eintrag:

Asuriss von Seite 201 des Shareware-Katalogs

Ich glaube, ich hatte das Programm damals in Pascal geschrieben.

„DM“ ist übrigens die Kurzform für „Deutsche Mark“. Das war das Geld, das wir in der Prä-Internet-Ära verwendet haben, also bevor wir alle auf BitCoins umgestiegen sind. 🙂

Mein Programm wurde sogar einige Male verkauft und, wie ich aus zuverlässiger Quelle (E-Mails) weiß, sogar eingesetzt. Na, dann!

]]>
http://blog.sevke.net/2015/11/02/das-einzig-shareware-software-katalog/feed/ 2 6972
PayLife Phishing E-Mail http://blog.sevke.net/2014/06/19/paylife-phishing-e-mail/ http://blog.sevke.net/2014/06/19/paylife-phishing-e-mail/#respond Thu, 19 Jun 2014 12:03:47 +0000 http://blog.sevke.net/?p=6032 Screenshot einer Phishing E-Mail

Oh Mann …

… anscheinend wird diese E-Mail nicht nur von „PayLife“, sondern auch von der „Sparkasse“ verschickt. In Anführungszeichen, weil das natürlich nicht die originalen Absender sind.

Nur der Vollständigkeit halber: Ihr klickt natürlich NICHT auf den angegebenen Link! (Falls ihr auch mal so eine E-Mail erhalten solltet.)

Im Falle meiner E-Mail wäre das aber auch egal, denn man landet hier:

Website Screenshot

]]>
http://blog.sevke.net/2014/06/19/paylife-phishing-e-mail/feed/ 0 6032
Das Internet ist krank http://blog.sevke.net/2013/12/05/das-internet-ist-krank/ http://blog.sevke.net/2013/12/05/das-internet-ist-krank/#respond Thu, 05 Dec 2013 12:52:21 +0000 http://blog.sevke.net/?p=5505 … und muss geheilt werden!

Dies kann nur durch hohe Investitionen der Internet Service Provider (=ISP) geschehen.

Deswegen muss die Netzneutraliät fallen! Mehrere ISP in Deutschland haben entsprechende Schritte bereits angekündigt, ganz vorne weg die Telekom, die dafür auch mit der Bezeichnung Drosselkom verspottet wird.

Die Gründe dafür, dass es mit dem heutigen Internet nicht wie bisher weitergehen kann, recherchiert John Wooley in einem sehr gut gemachten Video (nur englischsprachig):

]]>
http://blog.sevke.net/2013/12/05/das-internet-ist-krank/feed/ 0 5505
PIN-Codes von EC-Karten im Internet veröffentlicht http://blog.sevke.net/2013/09/04/pin-codes-von-ec-karten-im-internet-veroeffentlicht/ http://blog.sevke.net/2013/09/04/pin-codes-von-ec-karten-im-internet-veroeffentlicht/#respond Wed, 04 Sep 2013 18:30:47 +0000 http://blog.sevke.net/?p=5206 Beispiel für eine EC-KarteZuerst wollte ich es gar nicht glauben, aber es stimmt tatsächlich.

Als erstes habe ich den PIN-Code Scanner im Internet aufgerufen. Dann musste ich meine EC-Karte vor den Bildschirm halten. Das klingt ein wenig lächerlich. Wahrscheinlich reicht es auch, wenn man die Karte irgendwie in die Nähe des Computers legt, ohne dass sie sich im direkten Sichtbereich des Rechners befindet. Definitiv habe ich keinen Kartenleser verwendet. Und Bluetooth hatte ich am Notebook vorsichtshalber ausgeschaltet. WLAN war aber natürlich an. Möglicherweise hätte ich die Kamera auch noch zukleben sollen.

Anschließend hat mich das Programm vor dem Auslesen des PIN-Codes darauf hingewiesen, dass ich darauf achten solle, von niemanden beobachtet zu werden. Denn in dem Fall wäre meine PIN natürlich die längste Zeit nur mir bekannt gewesen. Der PIN-Scanner verlangte noch explizit, dass ich eine Schaltfläche anklicken sollte. Ich zögerte etwas, aber die Neugier war stärker und ich klickte den Button an. Dann zeigte mir das Programm …

… und ich staunte nicht schlecht …

… meine ganz persönliche PIN auf dem Bildschirm an.

Ehrlich gesagt hätte ich nicht geglaubt, dass das wirklich möglich ist!

Ihr könnt das gerne mal ausprobieren, vielleicht klappt das mit eurer EC-Karte genauso. Aber vielleicht lasst ihr es auch lieber, denn es kann nicht ausgeschlossen werden, dass die PINs an irgendeinen Sammelserver übertragen werden. Dazu müsste man den Programmcode analysieren.

Im Portugalforum wird inzwischen über den PIN-Scanner diskutiert.

]]>
http://blog.sevke.net/2013/09/04/pin-codes-von-ec-karten-im-internet-veroeffentlicht/feed/ 0 5206
Send More Money in PHP programmiert http://blog.sevke.net/2013/07/30/send-more-money-php/ http://blog.sevke.net/2013/07/30/send-more-money-php/#respond Tue, 30 Jul 2013 15:03:55 +0000 http://blog.sevke.net/?p=5125 Im Dezember 2012 ist mir das alte „Send More Money“-Problem mal wieder in die Finger geraten. Darüber habe ich dann im Artikel 6502 Assembler Programmierung geschrieben.

Schon im Dezember habe ich überlegt, wie das wohl in PHP auf einem Webserver laufen würde. Da ich im Augenblick sowieso gerade mit PHP herumexperimentiere (siehe auch Orthografie Schieber – Deutsch in der 7. Klasse Gymnasium), lag es auf der Hand, nun auch das liegengebliebene Send More Money Thema erneut aufzugreifen.

Besonders intelligent ist das Programm nicht.

Im ersten Ansatz durchlief es einfach alle Möglichkeiten für alle Buchstaben, die es gibt, also 10^8 Schleifendurchläufe = 100 Mio. Das dauerte dann schon mal schlappe xx Minuten. (Anmerkung: konnte die Laufzeit noch nicht ermitteln … es dauert Stunden!)

Da der Buchstabe M ein Übertrag aus zwei Ziffern ist, kann er maximal die Ziffer 1 darstellen. 0 ginge auch noch, aber das ist prinzipiell bei Alfametiken nicht zugelassen. Die Zahlen dürfen keine führenden Nullen aufweisen. Auf jeden Fall konnte ich die Anzahl der Schleifendurchläufe auf diese Weise von 100 Mio auf 20 Mio reduzieren, das entspricht einer Verkürzung der Laufzeit auf 1/5 der ursprünglichen Zeit. Gemessen habe ich: xx Minuten. (Anmerkung: konnte die Laufzeit noch nicht ermitteln … es dauert Stunden!)

Eine weitere Beschleunigung ergab sich aus der Tatsache, dass zumindest die letzte Stelle der Summe, also der Buchstabe Y, nicht jede beliebige Ziffer annehmen konnte, sondern immer eine Summe aus dem Buchstaben D und dem Buchstaben E darstellte. Somit musste Y nicht 10mal iteriert werden, sondern konnte schlicht und ergreifend für gegebene D und E berechnet werden. Statt 10 Schleifen nur noch eine Berechnung.

Nachdem die Lösungen gefunden waren, musste ich das Skript nur noch etwas mit CSS aufhübschen. Und hier ist das Ergebnis:

noch größer wird der Screenshot mit einem Mausklick

noch größer wird der Screenshot mit einem Mausklick

Leider kann ich euch nicht auf das Skript selber weiterleiten, weil es nur lokal bei mir auf dem XAMPP-Server läuft, aber nicht auf meinem Webserver. Da wird es nach 10 CPU Sekunden abgeschossen. 🙁

Gerne würde ich das Programm weiter beschleunigen. Vielleicht würde eine Rekursion etwas bringen. Ansonsten muss sich das wohl ein Mathematiker vorknöpfen. Es wäre mal interessant, auf welche Laufzeit man das Skript beschleunigen könnte.

Falls jemand schnellere Entwürfe hat, würde ich mich über eine Diskussion darüber sehr freuen!

Update 31.07.2013:
Ich konnte den Algorithmus durch früher greifende Ausschlüsse (letztendlich Constraints und Backtracking) weiter beschleunigen und benötige jetzt nur noch 381.170 Schleifendurchgänge. Das Skript läuft nun weniger als 1 Sekunde und ist damit auch auf dem Webserver ablauffähig: PHP-Skript SMM starten.

Ich habe es auch mal mit einem evolutionären Algorithmus probiert, aber der braucht ebenfalls sehr lange. Dadurch, dass die Chromosomen per Zufall mutiert werden, sind die Laufzeiten aber völlig unterschiedlich. Einmal war das Skript mit gerade mal 188 Generationen in 0,002 Sekunden fertig. Mal schauen, ob ich die Qualität der Mutationen noch verbessern kann.

Update 02.08.2013:
Nun habe ich mir das Thema auch noch einmal in Perl vorgenommen. Bei PHP werden Ausgaben auf dem Client (normalerweise) erst dann angezeigt, wenn das Skript komplett fertig ist. Das hat den Nachteil, dass ich während eines langlaufenden Skriptes keine hilfreichen Infos anzeigen kann. Mit Perl als Standalone-Programmiersprache kann ich grundsätzlich den Webserver und den Webbrowser weglassen und das Programm direkt in einer DOS-Box (=Kommandozeile cmd.exe) ablaufen lassen. Die Bildschirmausgaben erfolgen stets unmittelbar.

Obwohl sich PHP und Perl sehr ähnlich sehen, ist die Syntax von Perl doch deutlich anspruchsvoller.

Folgende Programm-Optimierungen konnte ich erreichen:

1. Brute Force Methode

Die stellt den Ausgangs-Algortihmus dar und ist in keiner Weise optimiert. Es werden einfach sämtliche möglichen Werte (0 bis 9) für alle Buchstaben ausprobiert. Jede dieser Möglichkeiten wird anschließend daraufhin untersucht, ob Doppelungen vorkommen. Der Buchstabe „s“ darf beispielsweise nicht durch dieselbe Ziffer ersetzt werden wie irgendeiner der anderen 7 Buchstaben. Danach wird überprüft, ob die Addition aufgeht. Es wird nicht berücksichtigt, dass „M“ eigentlich nur eine „1“ sein kann.

Insgesamt ergeben sich 24 Lösungen mit M=0 und 1 Lösung mit M=1.

Das Programm durchläuft 100 Mio Schleifen und benötigt auf meinem alten Notebook 19:50 Minuten (=100%).

2. Berücksichtigung von Einschränkungen für M

Danach habe ich berücksichtigt, dass M entweder 0 oder 1 ist, da es sich um einen Übertrag aus der Addtion der beiden Tausenderstellen handeln kann. Bei der Addtion zweier Zahlen ist ein Übertrag>1 nicht möglich.

Entsprechend reduzierte sich die Anzahl der Schleifendurchläufe von 10*10 Mio auf 2*10 Mio = 20 Millionen.

Das Programm benötigte mit 4:04 Minuten nur noch etwa 21% der ursprünglichen Laufzeit.

3. Berechnung von Y

Für den Buchstaben Y müssen keine beliebigen Werte ausprobiert werden, denn er lässt sich immer aus den bereits zugewiesenen Buchstaben D und E errechnen. Dabei muss nur beachtet werden, dass der Buchstabe keinen Wert>9 annehmen darf.

Auf diese Weise können alle Schleifen für Y entfallen, also ein Faktor von 10, so dass 2 Mio Schleifen übrig bleiben.

Das Skript benötigte nun noch 26,42 Sekunden (2,21% des Brute-Force Algorithmus).

4. Einführung von Backtracking

Nun habe ich die Schleifen so früh wie möglich beendet, indem ich je nach Stufe der Schleifenkaskade überprüft habe, ob ein Buchstabe sich von den bereits zugewiesenen der höheren Schleifenlevel unterschied. Dadurch entfielen natürlich jedes Mal eine ganze Reihe von inneren (tiefer liegenden) Schleifen.

Insgesamt reduzierte sich die Anzahl der Schleifen nun auf 40.320.

Und entsprechend spielte die Laufzeit mit 0,49 Sekunden kaum noch eine Rolle.

5. Zahlen beginnen nicht mit Null

Anschließend habe ich die Regel implementiert, dass Zahlen nicht mit einer Null beginnen dürfen, die Buchstaben S und M also nicht gleich Null sein dürfen. Das reduzierte die Anzahl der Schleifen auf nur noch 14.760 und die Laufzeit auf 0,19 Sekunden.

Aber auch die Anzahl der Lösungen verringerte sich auf 1, nämlich auf die einzig valide.

Schlussbemerkung

Weitere logische Überlegungen habe ich nicht mehr implementiert, denn dann kann ich das Puzzle auch gleich ohne Computer lösen.

Interessant finde ich, dass ich durch ganz einfache zusätzliche Verbesserungen des Ausgangs-Algorithmus wirklich dramatische Laufzeitverbesserungen erreichen konnte. Von ursprünglich 100.000.000 Schleifendurchgängen ging es runter auf 14.760 Durchgänge. Und die Laufzeit verbesserte sich von etwa 20 Minuten auf einen kaum mehr messbaren Wert unterhalb 1 Sekunde.

Update 03.08.2013:
Ich habe mir auch noch einmal den evolutionären (=genetischen) Algorithmus vorgeknüpft und konnte ihn unter Perl verbessern. Eigentlich funktionierte der schon ganz gut, aber leider blieb er in einem lokalen Maximum hängen. Die guten Gene altern jetzt und können ebenfalls mutieren, wenn sie ein bestimmtes Alter überschritten haben. Dadurch erhalte ich zwar kurzfristig wieder schlechtere Lösungen, aber eben auch die Chance, dass das globale Maximum gefunden wird.

Nachdem das in Perl klappte, habe ich es auf PHP übertragen. Starten des evolutionären PHP-Skrips.

Üblicherweise ist es sehr schnell. Natürlich variiert die Laufzeit in Abhängigkeit von den erzeugten Generationen sehr stark. Die Mutationen werden ja zufällig erzeugt. Es wird auch nur noch die einzig valide Lösung ausgegeben. Die anderen Lösungen mit M=0 könnt ihr euch mit dem ersten Skript ansehen: Normales PHP-Skript SMM starten.

]]>
http://blog.sevke.net/2013/07/30/send-more-money-php/feed/ 0 5125
Smartphone Regeln für Eltern und Kinder http://blog.sevke.net/2013/02/28/smartphone-regeln-eltern-kinder/ http://blog.sevke.net/2013/02/28/smartphone-regeln-eltern-kinder/#respond Thu, 28 Feb 2013 13:27:03 +0000 http://blog.sevke.net/?p=4891 Natürlich haben unsere Kinder ein Handy bzw. ein Smartphone, wie man heute synonym für ein mobiles Telefon sagt. Und ja, man kann mit den Dingern auch telefonieren. Hat das schon mal jemand ausprobiert? 😉

Okay, das war etwas überspitzt formuliert, aber manchmal werde ich den Eindruck nicht los, dass Smartphones nur zum Spielen, zum SMSen und zum Downloaden da sind. Oh, ich vergaß: SMS ist mega-out, man nutzt ja WhatsApp trotz aller Sicherheitsbedenken.

Klar, WhatsApp oder Skype oder andere Instant Messenger verbrauchen nichts vom wertvollen SMS-Kontingent. Aber das ist auch alles bald kein Diskussionsthema mehr, denn immer mehr Mobilfunk-Anbieter stellen ihre Tarife auf SMS-Flat um.

Unsere Kinder sind also ständig und überall im Internet unterwegs, soviel ist Fakt und lässt sich auch kaum verhindern, höchstens unter Verlust des sozialen Status, und das auch nur bedingt. Wenn ein Teenager mit dem eigenen Smartphone keinen Zugang zum Internet hat, dann eben mit dem eines Freundes.

Also: Unsere Kinder haben ein Smartphone und sie sind damit im Internet.

Das kann teuer werden, wenn sie absichtlich oder versehentlich teure Downloads durchführen. Bei Android Smartphones ist die Gefahr noch größer als bei iPhones.

Das kann gefährlich werden, wenn sie in Chats an völlig Fremde geraten, die nicht immer nur das Beste für unsere Kinder wollen.

Bedenkt: 700 Freunde in Facebook ist eher normal als selten! Und alle nehmen teil am Leben des Teenagers.

Okay, was nun tun? Das Smartphone verbieten (so wie in bayerischen Schulen)? Nur noch Prepaid-SIM-Karten erlauben? Nein, das ist nicht wirklich zielführend.

Mein Ansatz ist Kommunikation. Ich rede mit meinen Kindern und mache auf Probleme aufmerksam. Und wenn etwas (unabsichtlich) aus dem Ruder läuft, dann wird ohne Vorwürfe darüber gesprochen (soweit möglich, wir sind ja alle nur Menschen) und das Problem wird aus der Welt geschafft.

Sehr hilfreich kann es sein, wenn man mit seinen Kindern eine Art Vertrag abschließt mit einigen Regeln zum Umgang mit dem Smartphone und zum Umgang miteinander. Dazu haben sich schon mehrere Leute Gedanken gemacht, zum Beispiel Janell Burley.

Auch mein Leib- und Magen Magazin c’t hat dies unter der Überschrift „Netzregeln“ in Ausgabe 5/2013 auf Seite 105 thematisiert.

Wie könnten nun solche Regeln aussehen?

Regeln für den Umgang mit dem Smartphone

  1. Beleidige niemanden im Chat! Benimm dich so, wie du selbst behandelt werden möchtest
  2. Schreibe oder spreche immer so, als wären deine Eltern oder die deines Freundes in der Nähe und könnten alles mithören. Wer weiß, vielleicht tun sie das tatsächlich!
  3. Sag niemanden im Internet, wie alt du bist. Deine Freunde wissen das sowieso und andere hat das nicht zu interessieren! Und wenn doch, dann sag, dass du 20 bist.
  4. Sag niemanden, wo du wohnst. Willst du dich wirklich mit deinen Freunden zu Hause bei deinen Eltern treffen? Lach nicht, könnte ja sein! Wenn ja, dann sprich vorher mit deinen Eltern darüber.
  5. Sag niemanden, den du nicht wirklich persönlich kennst, wo du gerade bist. Sonst überfällt dich möglicherweise ein vermeintlicher Freund hinter der nächsten Ecke und tut dir etwas an, was du nicht wirklich willst.
  6. Triff dich niemals alleine mit Leuten, die du nur per Chat kennst. Nimm ein paar Freunde mit oder noch besser deine Eltern.
  7. Falls jemand mit dir auf eine Weise chattet, die dir unangenehm oder beleidigend ist, sprich sofort mit deinen Eltern darüber. Sie werden dich schützen!
  8. Lade niemals eine App herunter, ohne vorher mit deinen Eltern darüber zu sprechen. Das gilt auch für kostenlose Apps! Es lauern jede Menge Fallen auf dich, die deine Telefonrechnung in die Höhe treiben können. Und wer hat schon 2000 Euro im Monat übrig für sein Smartphone?
  9. Registriere dich in keiner App und auf keiner Webseite, die von dir mehr als deine E-Mail Adresse, eine Benutzerkennung und ein Kennwort verlangt. Wenn du das doch musst, dann rede zuerst mit deinen Eltern.
  10. Veröffentliche niemals Bilder oder Videos im Internet, auf denen andere Personen zu sehen sind, ohne sie vorher um Erlaubnis gefragt zu haben.
  11. Veröffentliche niemals Bilder von dir, auf denen du teilweise nackt oder ganz nackt zu sehen bist. Niemals!
  12. Veröffentliche niemals Bilder von dir, auf denen du in einem schlechten Zustand (betrunken) zu sehen bist. Das Internet vergisst nichts. Und dein zukünftiger Chef wird sich über die Fotos nicht gerade freuen. Du bekommst den Job nicht, es denn, du willst Testtrinker werden.
  13. Gib niemals Apps, Fotos, Musik oder Videos weiter (auch nicht per Bluetooth oder Speicherkarte), von denen du nicht absolut sicher weißt, dass du das darfst. Das gilt besonders für Tauschbörsen. Du machst dich möglicherweise strafbar!
  14. Lass dich nicht verarschen: den neuesten Kinofilm bekommst du nicht gratis im Internet! Wenn doch, dann machst du dich mit größter Wahrscheinlichkeit strafbar.
  15. Über Nacht bleibt das Smartphone in einem anderen Zimmer. Du benutzt es nicht zum Spielen oder Chatten, weil du ab und zu Schlaf brauchst.
  16. Geh achtsam mit dem Smartphone um. Wenn es runterfällt und dabei kaputt geht, bekommst du kein neues. Du kannst dir selber ein neues Handy kaufen oder dir eins zum Geburtstag oder zu Weihnachten wünschen.
  17. Wenn deine Eltern ab und zu einen Blick auf dein Smartphone und auf das, was du darauf gespeichert hast, werfen wollen, dann sei froh, dass sich deine Eltern um dich sorgen und lass sie machen. Wenn sie etwas nicht verstehen, dann hast du deine große Chance: erkläre es ihnen!
  18. Wenn du von deinen Eltern angerufen wirst, geh ran. Deine Eltern rufen dich nur an, wenn es wichtig ist.

Ich stelle diese Regeln zur Diskussion. Habt ihr Ergänzungen? Oder sind einige Regeln Unsinn?

]]>
http://blog.sevke.net/2013/02/28/smartphone-regeln-eltern-kinder/feed/ 0 4891
6502 Assembler Programmierung http://blog.sevke.net/2012/12/05/6502-assembler-programmierung/ http://blog.sevke.net/2012/12/05/6502-assembler-programmierung/#respond Wed, 05 Dec 2012 10:29:36 +0000 http://blog.sevke.net/?p=3862 Vor einigen Tagen kam mein Sohn im Gespräch auf das Thema Programmierung . Das ganze Gespräch will ich hier nicht wiedergeben, aber irgendwann sind wir bei dem legendären Send More Money Problem gelandet. Kennt das jemand?

Ein amerikanischer Student macht eine Weltreise. Als er gerade Europa besichtigt, geht ihm das Geld aus. Er schickt eine Postkarte nach Hause mit dem folgenden Inhalt:


 SEND
+MORE
-----
MONEY

Wenn man jeden Buchstaben durch eine Ziffer ersetzt, erhält man den Betrag, den sich der Student wünscht.

Diese Art von Symbolrätsel nennt man Alphametik. Dabei werden unterschiedliche Buchstaben durch unterschiedliche Ziffern so ersetzt, dass die mathematische Operation sinnvoll ist. Heutzutage findet man den richtigen Geldbetrag natürlich im Internet. (Schaut nicht nach 😉 Die Rechnung lautet 9567 + 1085 = 10652.)

Mein Sohn wollte wissen, wie man das Rätsel mit dem Computer lösen kann. Ende der 1980er Jahre habe ich das mal in 6502 (bzw. 6510) Assembler gelöst. Der 6502 war der Mikroprozessor, der im Apple II+ und später in modifizierter Form als 6510 im Commodore C-64 (von dem hatte ich damals 3, einer davon funktioniert auf jeden Fall heute noch) eingebaut war.

Natürlich konnte man auch diese Computer bereits in höheren Programmiersprachen programmieren. Ich entschied mich damals aus Zeitgründen für Assembler, da ich im ersten Ansatz einen ziemlich dummen Algorithmus umsetzen wollte, nämlich das stumpfsinnige Durchprobieren aller Möglichkeiten. Um die Laufzeiten möglichst niedrig zu halten, wollte ich direkt in Maschinensprache/Assembler programmieren.

Mich würde einmal interessieren, ob es da draußen in der weiten Welt noch jemanden gibt, der mal in 6502-Assembler programmiert hat und möglichweise den folgenden Code noch halbwegs versteht? Würde mich über eure Kommentare unterhalb des Artikels freuen!

Meine Lösung sieht als Hex-Dump folgendermaßen aus (per Mausklick gibt es eine größere Darstellung):

SW-Dump des Send More Money Programms

Send More Money: schwer lesbares Programm in 6510 Maschinencode

Das ist ein Originalausdruck mit Nadeln auf Rollenpapier (2 Streifen nebeneinander auf ein Blatt A4 geklebt.).

Wer genau hinsieht, entdeckt einen kleinen Rechtschreibfehler: ich habe das Problem damals immer „Sent More Money“ genannt, obwohl es natürlich „Send More Money“ heißen muss.

Ein bißchen leichter lesbar ist das Programm in Assembler-Code:

Screenschot des des Send More Money Disassemblings - Seite 1

Disassembling des Send More Money Programms – Seite 1

Screenshot des Send More Money Disassemblings - Seite 2

Disassembling des Send More Money Programms – Seite 2

Screenschot des Send More Money Disassemblings - Seite 3

Disassembling des Send More Money Programms – Seite 3

Zugegeben: besonders elegant war das Programm nicht, aber es hat alle Lösungen ausgespuckt:

Alle 25 Lösungen des Send More Money Problems als Bildschirmabschrift

Alle vom Bildschirm abgeschriebenen Lösungen des Send More Money Problems

Letztendlich korrekt ist hierbei nur die letzte Lösung, denn eine 0 als erste Ziffer ist für Alphametiken nicht zugelassen.

Natürlich zeigt auch das Disassembling oben nicht, wie ich das Programm entwickelt habe. Üblicherweise arbeitet man nicht mit festen Speicheradressen für Variablen und Unterprogramme, sondern mit Symbolen. Ein Unterprogramm hat zum Beispiel bei der Anzeige jeder neuen Lösung auf dem Bildschirm zusätzlich ein akustisches Signal ausgegeben. Das sah dann im Original so aus:

Unterprogramm in Assembler zur Ausgabe eines akustischen Signals

Unterprogramm AKUSIG in 6510 Assembler – in meiner Original-Handschrift

Aber auch das war nicht der Anfang. 🙂 Davor habe ich für jedes Unterprogramm einen Programmablaufplan entwickelt. Alles noch handgezeichnet:

Handgezeichneter Programmablaufplan des UP AKUSIG

Das kann aber jetzt dann jeder nachvollziehen, oder?

1989 habe ich das ganze Programm auch noch mal in Turbo-Pascal programmiert. Aber darauf gehe ich in diesem Artikel nicht weiter ein.

Sehr schön ist das Problem und ein progammtechnischer Ansatz in dem Artikel Von Professor Urban dargestellt.

Für alle, die nun – wie ich – wieder Lust auf 6502-Assembler bekommen haben, habe ich noch eine Buch-Empfehlung: Programmierung des 6502 von Rodnay Zaks.

Das Buch steht bei mir seit 1983 im IT-Bücherregal und ist sowohl für Einsteiger als auch für Fortgeschrittene wärmstens zu empfehlen.


Auch wenn heute kaum noch jemand direkt in Assembler programmiert, so macht es doch Spaß, sich auf diese Tiefe hinabzubegeben und kleinere Probleme damit zu lösen.

(Vielleicht, mein Sohn, ist das ja auch für dich ein Anreiz!)

]]>
http://blog.sevke.net/2012/12/05/6502-assembler-programmierung/feed/ 0 3862
Facebook schaltet Gesichtserkennung ab http://blog.sevke.net/2012/09/21/facebook-schaltet-gesichtserkennung-ab/ http://blog.sevke.net/2012/09/21/facebook-schaltet-gesichtserkennung-ab/#respond Fri, 21 Sep 2012 18:30:56 +0000 http://blog.sevke.net/?p=5685 Screenshot: Facebook Gesichtserkennung nicht verfügbar

Die von mir im Artikel Facebook erkennt Gesichter thematisierte automatische Gesichtserkennung in Facebook wird nun doch abgeschaltet.

Wahrscheinlich war der Druck, insbesondere durch den irischen Datenschutzbeauftragten, zu groß. Die Abschaltung betrifft nicht nur irische Accounts, sondern alle in der EU.

Natürlich hat Facebook weiterhin ein Interesse an der automatischen Gesichtserkennung. So bleibt abzuwarten, wann diese Funktion erneut eingeführt und welche Möglichkeiten der Facebook-Nutzer haben wird, die Funktion zu beeinflussen.

Der Prüfbericht der irischen Datenschutzbehörde kann als Facebook Ireland Audit Review Report heruntergeladen werden.

]]>
http://blog.sevke.net/2012/09/21/facebook-schaltet-gesichtserkennung-ab/feed/ 0 5685
Immer mehr iPads in Schulen http://blog.sevke.net/2012/06/03/ipad-in-schulen/ http://blog.sevke.net/2012/06/03/ipad-in-schulen/#respond Sun, 03 Jun 2012 15:21:45 +0000 http://blog.sevke.net/?p=3248 Während sich in den Erdinger Schulen in Sachen iPad nichts tut, entscheiden sich immer häufiger Schulen zumindest für Pilotprojekte, um die Vor- und Nachteile von iPads in Schulen auszuloten.

In Südtirol wird der Einsatz von iPads an 6 Schulen von der Landesregierung finanziert.

Quelle: ORF.at

Auch in Deutschland nimmt der Zug iPad immer mehr an Fahrt auf, zum Beispiel in der Waldschule Hatten, Niedersachsen. Die Schule nimmt als eine von 18 Schulen an einem landesweiten Tablet Projekt des Kultusministeriums teil. Das Online Magazin Digitales Lernen hat dazu am 18.05.2012 den interessanten Artikel iPad-Klasse sorgt für Begeisterung veröffentlicht.

“ … dass mobiles Lernen schlicht und ergreifend zeitgemäß und schülerbezogen ist.“, so wird dort Andreas Hofmann, Lehrer an der Waldschule Hatten und medienpädagogischer Berater für digitales Lernen beim Niedersächsischen Landesinstitut für schulische Qualitätsentwicklung (NLQ), zitiert. Dem kann ich nur zustimmen.

Weiter werden in dem Artikel auch kurz die Vorteile angesprochen, die der Einsatz von iPads anstelle von Notebooks (Laptops) oder Desktop PCs bietet. In erster Linie sind das der extrem niedrige Aufwand für die Erstinbetriebnahme der Geräte und die darauf folgendenen administrativen Aufgaben wie Virenschutz, Backup und sogar der Umgang mit Hardware-Defekten.

Eine weitere Schule in einem weiteren Bundesland, nämlich Hamburg, arbeitet mit iPads: Paducation am Kurt-Körber-Gymnasium. 70 Oberstufen-Schüler erhielten dort je ein eigenes iPad, das sie bis zum Abitur behalten dürfen. Die Schule hat sich für das 1to1-Modell enstschieden, das mich persönlich noch nicht überzeugt hat. Einige eigene Gedanken dazu habe ich in meinem Blog in dem Artikel Erste iPad Schule in Bayern veröffentlicht. Auf einer eigenen Projekt-Website werden die Erfahrungen des Projektes dokumentiert.

Zu dieser Schule gibt es von dem niedersächsischen Lehrer Tim Krumkühler einen Blog-Artikel mit dem Titel „Tablet-Computer im Unterricht: Ein Tag im KKG“ (http://unterricht-mit-medien.de/2012/05/30/tablet-computer-im-unterricht-ein-tag-im-kkg/) (Anmerkung 26.07.2016: die Domäne existiert leider nicht mehr.). Besonders interessant ist hier eine Liste mit Erfahrungen, die am Kurt-Körber-Gymnasium mit iPads gemacht wurden.

Sehr interessant finde ich auch das Interview mit dem Schulleiter des KKG Hamburg, in dem er Stellung zu folgenden Fragen bezieht:

  • Sind iPads eine Bereicherung für den Unterricht?
  • Warum sollten digitale Medien im Unterricht genutzt werden?
  • Wie kann die Austattung mit Medien an den Schulen finaziert werden?
  • Wo steht Deutschland im internationalen Vergeleich?

Dass iPads nicht Gymnasien vorbehalten sein müssen, beweist das iPad-Projekt der Hauptschule Barßel (Niedersachsen). Die 15 iPads sind erst im Mai 2012 angeschafft worden, so dass Erfahrungen mit den Geräten noch nicht vorliegen. Auch diese Schule begleitet ihr iPad-Projekt mit einem Blog.

Es tut sich also etwas in unserem Lande. Überall werden in den Schulen kleine und große iPad-Projekte gestartet. Manchmal sind es Initiativen von Lehrern oder Eltern, in einigen Bundesländern steht das Kultusministerium voll hinter dieser Entwicklung.

Mit einem großen Seufzer bleibt mir nur die Hoffnung, dass auch in unserem Bundesland Bayern, das sich ja gerne seines besonders hochwertigen Schulsystem rühmt, moderne Technologien wie Tablets Einzug halten … damit unsere Kinder optimal auf die moderne Welt und deren Anforderungen vorbereitet werden.

]]>
http://blog.sevke.net/2012/06/03/ipad-in-schulen/feed/ 0 3248