Cold Restart

Der ein oder andere wird es vielleicht schon gemerkt haben: hier im Blog hat sich mal wieder was an der Oberfläche geändert. Aber nicht nur da 😉

Hier lief bis grade eben ein (jetzt kann ichs ja rausposaunen) sehr altes WordPress 2.8 mitsamt allen Sicherheitsproblemen die man sich da einhandelt. Was aber viel problematischer war: das Theme war ein für WordPress 1.irgendwas angepasstes das schon seit einigen Jahren nur noch im hinterletzten Kompatiblilitätszweig lief. Und mit neueren WPs jetzt gar nicht mehr. Es musste also was neues her.
Continue reading „Cold Restart“

They did it again…

Was mich manchmal echt wundert – können sich manche Firmen eigentlich halten. Web.de ist so eine. Die einzigen Freemailer die überhaupt noch eine nennenswerte Postfachgrößenbeschränkung haben und größere Postfächer nur per Abofalle (siehe diverse Artikel in der c’t-Sparte „Vorsicht Kunde“) verkaufen haben jetzt wieder zugeschlagen.

Im Rahmen einer lustigen Aktion bieten sie grade das an:

der Speicher Ihres WEB.DE Postfachs wird ab sofort von 12 MB auf 500 MB erweitert. Das bedeutet 40 mal mehr Platz für Ihre E-Mails.

Und damit nur noch ein 4tel statt ein 160stel der Konkurrenz im eigenen Haus!
Aber darum gehts noch nicht.

Zur Aktivierung des zusätzlichen E-Mail-Speichers, benötigen Sie eine Programmerweiterung, die Sie hier kostenlos und ohne Verpflichtungen herunterladen können. Bitte klicken Sie auf „Aktivieren“, um Ihr Postfach von 12 MB auf 500 MB kostenlos zu erweitern und die nötige Programmerweiterung zu installieren.

War ja klar. Ich wusste gar nicht, dass ich Bundestrojanerzielperson bin.

Da mich das aber echt nervt, alle paar Tage das Postfach ausräumen zu müssen, also das einzig gangbare gemacht: neuen Windows-User ohne irgendwelche Rechte angelegt, mit dem ein neues Browserprofil gemacht, genau die Toobar installiert und einmal angemeldet. Danach alles entstandene gelöscht.

Und was erhalte ich 2 Sekunden Später in einer neuen Mail? Eine Werbefalle:
Web.de Werbemail 2 Web.de Werbemail 1

Ja, richtig gelesen, da steht, ich würde nur im Club 500MByte bekommen. Kurz IMAP gefragt: nein, ist nicht so, ich hab schon 680960KByte (was übrigens 650MByte sind). Der unbedarfte Nutzer denkt sich jetzt „oh hey, nur noch ein Schritt den sie vorher nicht erwähnt haben, da steht ja immer noch Kostenlos dran“.
Und schon zahlt man sich dumm und dusselig, denn wie wir gelernt haben ist das Ding nicht ohne Medien und/oder Gericht kündbar.

Gut, dass ich ein unbedarfter Nutzer bin – hoffentlich lesen das hier einige von diesen vorher.

Einmal Market „mit alles“ für’s Adam

Der Market von Android hat (neben einigem Carrier-Nerv) die an sich tolle Funktion, Software, die bestimmte Hardware als erforderlich markiert zu filtern, falls diese auf dem aktuellen Gerät nicht verügbar ist. Der Market (genau genommen der Server) prüft dann, ob diese existiert und entscheidet, ob ein Eintrag angezeigt wird oder nicht.

Ich sage „an sich toll“, weil das auch schiefgehen kann: nämlich dann, wenn das Gerät Hardware hat, die Market-App das aber nicht weiß. So ist es auf dem Notion Ink Adam mit Stock-ROM mit dem GPS – das führt dazu, dass jede Anwendung die GPS obligatorisch anfordert nicht sichtbar ist, obwohl die Hardware eigentlich verfügbar ist. Populäre Beispiele: GPS Info-Tools, Osmand, Dolphin HD und andere.

Continue reading „Einmal Market „mit alles“ für’s Adam“

Minecraft in spielbar

Seit heute gibt’s das inoffizielle 1.9-Prerelease. Und wieder mal ist Minecraft 20% langsamer geworden, jetzt bin ich bei 7fps. Nicht spielbar also.

Wie gut also, dass es Leute wie sp614x gibt, die sich mal die Mühe gemacht haben und notch’s Gefrickel etwas aufräumen. Ergebnis des ganzen ist OptiFine, ein Mod, der bei mir Wunder bewirkt hat. Noch ist der leider nicht auf 1.8 (und erst recht nicht auf 1.9) portiert, aber die Ergebnisse bei 1.7.3 sprechen für sich.

acraft-stadt
Als „Testbild“ hab ich die Aussicht von meinem Dachausgang über die Hauptstadt auf der Map von ACraft genommen. Normalerweise bekomme ich hier nur auf „Short“ eine spielbare Framerate von um die 20fps. Mit OptiFine kann ich problemlos „Far“ verwenden, denn hier bekomme ich statt 10fps glatte 25fps!

Sollte ein ähnlicher Effekt auch messbar sein, wenn der Mod auf 1.9 portiert wurde, könnte man fast sagen: Minecraft wird spielbar 🙂

Jetzt heißt es nur noch: warten auf eine neue Version. Keine Ahnung, wie schnell der Programmierer ist, aber selbst Bukkit haben ja nun 2 Wochen gebraucht. Könnte also noch eine Weile dauern…

Trust in Me!

Nehmen wir mal an, ein (Delphi-)object, welches eine Liste gleicher Objekte verwalten soll. Man könnte das einen Baum nennen.

  TValueList = array of TValue;
  TValue = object
    FList: TValueList;
    SomeOtherStuff: integer;
  end;

(Für später geborene: das ist die alte Syntax für „record mit Methoden“.)

Leider nimmt uns der Compiler das so nicht ab. Warum? Weil TValue natürlich vorher noch nicht bekannt ist. Und im Gegensatz zu Klassen kann man Records nicht vorwärtsdeklarieren. Wie also könnten wir dieses Problem lösen? Man könnte Pointer verwenden, und bei Verwendung entsprechend erzeugen. Aber freigeben? Es gibt ja keinen Destructor, also keine Option. Man könnte das gesamte Objekt in eine Klassen-Instanz verwandeln, die von IUnknown die Referenzzählung erbt. Das ist aber wesentlich mehr Aufwand als das bisherige „Deklarieren und Verwenden“.

Die Lösung hier zeigt sich in einem fiesen, aber einfachen Hack:

TValueListAlias = array of boolean;
TValue = object
  FList: TValueListAlias;
  SomeOtherStuff: integer;
end;
TValueList = array of TValue;

Dabei spielt es keine Rolle, welchen Basistypen man für das Alias verwendet. Es muss sich nur um ein dynamisches Array handeln. Jetzt kann man in jedem Zugriff auf das eigentliche TValueList casten und alles funktioniert. Dabei kann man die Hässlichkeiten wunderbar in Zugriffsmethoden verbergen.

SetLength(TValueList(FList), 42);

Das funktioniert auch, aber wenn TValue nun Felder die finialisiert werden müssen enthält, wird sich FastMM beschweren, dass eben diese nie freigegeben werden. Es stellt sich heraus, dass SetLength zwar den BaseType richtig speichert und auch in @DynArrayClear exakt diesen wieder beräumt, aber Felder im Gegensatz zu Variablen nicht damit, sondern mit FinalizeArray freigegeben werden. Und dieses richtet sich nach der Deklaration, nicht nach dem was wirklich passiert.

Hier kommt dann der eigentliche Grund für diesen Beitrag: wir sagen der RTL einfach: „Vertrau mir, das ist ein anderer Datentyp!“. Mit anderen Worten: wir patchen die Feld-Tabelle der betroffenen Klasse so, dass FinalizeArray dort ein TValueList (BaseType also TValue, nicht unser Dummy von weiter oben) sieht und dieses korrekt finalisiert.

Das ist zunächst einfacher als gedacht:

TI:= TypeInfo(TValue);
FT := Pointer(Integer(TI) + Byte(TI.Name[0]));
for I := FT.Count-1 downto 0 do begin
  if FT.Fields[I].TypeInfo^ = TypeInfo(TValueListAlias) then
    ppti:= FT.Fields[I].TypeInfo^:= TypeInfo(TValueList);
end;

Nur – das funktioniert so nicht 😉 Runtime Error 216 ist die Folge einer Exception beim Schreiben der neuen TypeInfo. Da hat nämlich mal jemand mitgedacht und die dazugehörige Seite als PAGE_EXECUTE_READ markiert. Was man zum Glück in seinem eigenen Prozess beliebig ändern kann, und so ergibt sich (mit allen Deklarationen) folgendes Meisterwerk:

procedure FixFieldTable(TheRecord, Find, Replace: PTypeInfo);
type
  TFieldInfo = packed record
    TypeInfo: PPTypeInfo;
    Offset: Cardinal;
  end;
 
  PFieldTable = ^TFieldTable;
  TFieldTable = packed record
    X: Word;
    Size: Cardinal;
    Count: Cardinal;
    Fields: array [0..0] of TFieldInfo;
  end;
var
  FT: PFieldTable;
  ppti: PPTypeInfo;
  I, old, dummy: cardinal;
begin
  FT := Pointer(Integer(TheRecord) + Byte(TheRecord.Name[0]));
  for I := FT.Count-1 downto 0 do begin
    if FT.Fields[I].TypeInfo^ = Find then begin
      ppti:= FT.Fields[I].TypeInfo;
      VirtualProtect(ppti,SizeOf(ppti), PAGE_READWRITE, old);
      try
        ppti^:= Replace;
      finally
        VirtualProtect(ppti, sizeof(ppti), old, dummy);
      end;
    end;
  end;
end;
{...}
 
  FixFieldTable(TypeInfo(TValue), TypeInfo(TValueListAlias), TypeInfo(TValueList));

Wer sich die Datenstruktur ansieht, wird feststellen dass TFieldTable ein Feld namens „Size“ enthält. Sollten wir das nicht anpassen? Die einfache Antwort ist: nein! In TValue selbst wird vom dynamischen Array nur ein Pointer auf den Anfang gespeichert, und der ist unabhängig vom genauen Aussehen des Arrays immer gleich groß: nämlich 32bit oder 4 Byte. Es ändert sich also nichts.
Außerdem praktisch: da SetLength den Array-Typ anlegt, den man ihm übergibt (und wir ja auf TValueList casten), werden auch untergeordnete Arrays als das freigegeben was in ihnen steckt.

Das funktioniert so bis mindestens BDS2006, ich kann mir aber vorstellen dass die neuen RTTI-Strukturen in XE hier einige Änderungen notwendig machen. Das müssen dann aber andere testen 😉

Oh, übrigens, wer es nicht erkannt hat: der Titel ist natürlich eine Referenz auf Disney’s Dschungelbuch.

Old package is old

Mal was aus der Sysadmin-Ecke 😉

Der Grund, warum ich auch für Server gerne Ubuntu statt Debian verwende, ist ja eigentlich die Idee, vom schnelleren Patch-Zyklus bei Ubuntu zu profitieren und nicht monatelang auf alter Software festzusitzen.

Und was passiert? Man sitzt auf jahrealter Software fest.

Verwendet wird hier ein 10.04.3 LTS Server und konkret problematisch war das Paket „smartmontools“. Das hat nämlich ein Problem: wenn die Platte (hier: die SSD) neuer ist als die DriveDB hat man schlechte Karten, was die Attribute betrifft. Und wenn es dann auch noch so alt ist, dass man diese nicht separat aktualisieren kann (das geht seit Ende 2009), dann ist man aufgeschmissen.
Genau das war hier der Fall. In den Lucid-Repos findet sich nur die Version 5.38 von 2008. Insgesamt scheint man nicht sehr Update-freudig gewesen zu sein, erst in den Repos für 11.04 findet sich eine Aktuelle Version: 5.41.

Wenn man dann dieses Paket nimmt (ja, alle Abhängigkeiten sind auf einem aktuellen lucid auch erfüllt) und manuell aktualisiert, funktioniert alles:

root@srv2:/root# wget http://mirror.netcologne.de/ubuntu//pool/main/s/smartmontools/smartmontools_5.41+svn3365-1_amd64.deb
root@srv2:/root# dpkg -i smartmontools_5.41+svn3365-1_amd64.deb

Und schon erfahre ich endlich, wie die SSD denn so damit lebt, Systemplatte zu sein. Gleich mit netten von Munin gemalten Diagrammen 😉

Silent Lucidity III: Eigenbau

Willkommen zurück zu Teil 3 meiner Klartraum-Trilogie. Wer bis hierhin noch dabei ist, wartet vermutlich genau auf diesen Teil: nämlich meine (hier jedenfalls) vielbeworbene Eigenbau-Methodensammlung.
Dazu werde ich teilweise etwas weiter ausholen müssen. Ich bitte also um Nachsicht, wenn das hier nicht so direkt eine Anleitung als vielmehr eine allgemeine Betrachtung wird.

Zunächst die grundlegende Prämisse:

Träume sind die beste Grafikengine der Welt.

Alles weitere basiert ziemlich exakt auf der Art und Weise, wie man aus einem Konglomerat aus Shadern etwas macht, das man gern spielt. Spieleentwickler haben’s also einfacher, und da das nicht die einzige Anleihe aus der Digitalwelt ist, vermutlich auch alle anderen Computer-Geeks.

Continue reading „Silent Lucidity III: Eigenbau“

Silent Lucidity II: Howto

Willkommen in Teil 2 meiner Trilogie über Klarträume. Schön, dass wir sie wieder an Bord begrüßen dürfen 😉
Wie ich bereits im ersten Teil angedroht habe, wird sich dieser Teil etwas von dem entfernen, was ich persönlich tue. Daher ist wohl auch damit zu rechnen, dass sich hier wenig Erfahrungsmaterial finden wird und dafür mehr Drittquellen. Das ist aber nicht weiter schlimm, denn obwohl ich fast nichts davon selbst nutze sind die Grundlagen doch nach wie vor essentiell.

Ich werde mich aber trotzdem etwas kürzer fassen, denn so ziemlich alle Seiten zum Thema haben den gleichen Inhalt. Da muss es ja nicht noch eine geben 😉

Continue reading „Silent Lucidity II: Howto“

Silent Lucidity I: Einführung

Dieser Blog ist ja nicht grade dafür bekannt häufig neue Einträge zu haben. Damit einher geht auch sehr… ich sage mal „reduziertes“ Feedback. Umso erstaunlicher ist es dann, wenn ein einzelner Beitrag Reaktionen aus den verschiedensten und vor allem unerwartetsten Richtungen auslöst – so geschehen mit „Inception angewendet„. Das hat mich motiviert, das Thema Klarträumen und vor allem meine doch eher unkonventionellen Ansätze mal etwas weiter auszubreiten.

Das wird in Form einer als Trilogie angelegten Reihe passieren. Im ersten (diesem!) Teil werde ich ein paar einleitende Worte zum Thema verlieren, denn nicht jeder kennt das Konzept oder, was viel häufiger ist, glaubt, dass sowas wie Lucid Dreaming (wie Klarträumen englisch heißt) wirklich existiert. Später geht es dann um diverse Techniken, sowohl die verbreiteten als auch meinen davon stark abweichenden Ansatz. Gegebenenfalls auch mehr, wenn jemand einen interessanten Aspekt anspricht. Eine fünfteilige Trilogie wäre schon etwas schönes 😉

Eine schöne Einführung ins Thema bietet das WikiBook „Lucid Dreaming“, welches mir generell sehr gut gefällt. Das ist durchaus mehr als einen Blick wert, wenn man sich mit dem Thema auseinander setzen will. Trotzdem aber mal die Kurzfassung:
Wenn wir schlafen, durchlaufen wir dabei verschiedene Phasen. Dabei sinkt die Gehirnaktivität periodisch bis in den Tiefschlaf ab und steigt danach wieder an. In der flachsten Ebene davon – direkt zwischen Wachen und Schlaf – spielen sich Träume ab. Jede Nacht, bei jedem Durchlauf durch den Zyklus – ich erwähne das deswegen, weil wir uns an die wenigsten dann auch tatsächlich erinnern können; tatsächlich aber haben wir sogar mehrere Träume pro Nacht.
Normalerweise verarbeiten wir in Träumen Ereignisse und Eindrücke, die sich tagsüber angesammelt haben, ohne wirklich kontrollieren zu können, wie sich die Handlung entwickelt. Das Gehirn macht dabei etwas, was Literaten unter freier Assoziation verstehen würden. Normalerweise, denn mit ein wenig (oder auch mehr) Übung kann man eben das doch: die Handlung kontrollieren – den Film schreiben.

Genau darum geht es beim Klarträumen: (vollständige) Kontrolle des Traums, der Welt und aller Figuren. Also quasi ausgelebtem Gott-Komplex 😉 Der Namensteil „Klar“ bzw „Lucid“ bezieht sich dabei auf eine essentielle Tatsache: das Bewusstsein, zu träumen.
Hat man dieses erlangt, ist es möglich, das zu tun was fast alle als Kinder ziemlich oft gemacht haben: fliegen, interessante Orte besuchen (und erfinden) und viele weitere in der Realität nicht mögliche Aktionen.
Grund genug also, sich damit zu beschäftigen, oder?

Mein erster bewusster (pun intended) Kontakt mit Klarträumen war ein ziemlicher Zufall. Vor laaanger Zeit (ziemlich genau am 08.Juni 2007, sagt mein Miranda-Verlauf) bin ich im xkcd-Blag auf eine Artikel über Dream Typing gestolpert. Irgendwas hat mich jedenfalls dazu gebracht dem Thema mal etwas hinterherzurecherchieren, mit dem Ergebnis dass ich einmal quer durch die Wikipedia gewandert und bei Lucid Dreams gelandet bin. Irgendwann zu dieser Zeit hab ich dann auch endlich Silent Lucidity verstanden…
Jedenfalls hat das ausgereicht, um mich genug davon zu begeistern um wirklich mal Versuche dazu zu machen. Praktischerweise waren auch gerade Schulferien – ideale Vorraussetzungen also für Tests, die auch mal erfordern sinnlos lange im Bett zu bleiben.

Damals habe ich sehr viel zum Thema gelesen und bin dabei vielen Techniken begegnet, die aber alle irgendwie ähnlich waren, so dass die Versuche alle ähnlich erfolgreich waren: eine Glückstrefferquote von einem in zwei Wochen. Ich erwähne das hier deshalb, um denjenigen Lesern, die vielleicht schon Versuche hinter sich haben und wenig erfolgreich waren zu zeigen: ja, das ist völlig normal! Oder zumindest rede ich mir das gerne ein, denn die Alternative ist, dass ich irgendwas falsch gemacht habe. 😉

Im nächsten Teil folgt trotzdem eine Einführung in eben diese, denn um alles weitere verstehen zu können ist zumindest theoretisches Verständnis der diversen konventionellen Techniken doch notwendig: viele grundlegende Begriffe und Ideen leiten sich direkt aus ihnen ab. Außerdem werden wir sehen, dass nicht nur Künstler ziemliche Fans des Klarträumens sind.

Stay tuned.

Immerhin bestanden

Wenn auch nicht sonderlich gut.

Aber wenn man sich anguckt, wofür Punkte abgezogen wurden:
6 Stück für fehlende Koordinatensystem in Skizzen
4 Stück für Übernehmen der Gleichung aus Formelsammlung ohne Herleitung
2 Stück für Dämlichkeiten meinerseits (3*1=9…)
(okay und der Rest war auch gerechtfertigt)

Ob es neben dem „woher?“-Kommentar Punktabzug gab, als ich ohne Gleichgewicht für FL die einzige Längskraft direkt eingesetzt hab, war nicht so wirklich klar. Da ich das bei trivial ersichtlichen Sachen nie gemacht hab, hätte sich das bestimmt auch nochmal gelohnt.

Ergo hab ich „moralisch“ ja quasi 10 Punkte mehr, 57 statt 47. Und ich bin mit Martin Sonneborn bzw. der PARTEI gleichgezogen: so gut, dass nur noch Formfehler helfen uns loszuwerden 🙂

Thank you for your cooperation…

Ich drücke mich ja gerne vor vielem. Unter anderem Bloggen… 😉

Bei einem aber geht das ganz schlecht: Zensus. Und da die bei uns fast alles was in einem Wohnheim lebt mit genau gezielten Clusterbombs „zufällig ausgewählt“ wurde, kann man ja gleich mal was bloggenswertes draus machen und den schönen tollen Online-Prozess testen. Kurz vorneweg: das hab ich nur deswegen gemacht, weil ich nur den einfachen Bogen bekommen hab, der keine Daten enthält die nicht auch bei der DENIC und in der EntwicklerEcke abfragbar und aggregierbar wären. Sicher ist sicher.

Zunächst einmal begrüßt mich ein neuer privater Tab von Opera – you never know what’s coming next. Von dort aus also wie auf dem Formblatt aufgedruckt die Seite „zensus2011.de“ aufgerufen. Sauber strukturiert kann ich hier auswählen was ich tun will – Ergebnisse einreichen wird sehr prominent genau in der Mitte präsentiert. Hier entscheide ich mich für den violetten Bogen, denn obwohl die Farben auf dem Bildschirm doch sehr anders aussehen als das leichte Fliederlila des Papiers, ist das doch immer noch am passendsten.

Daraufhin wird mir nochmal erklärt, woran ich in meinem Browser sehe, dass ich SSL benutze. Lobenswert, aber mein Browser ist nicht dabei (ich erwähnte schon: dafür ist Opera dran). Whatever, ich weiß es ja.
Auf einer externen Domain (www.zensus2011-befragungen.de) werde ich dann von einem schmucklosen Loginfenster begrüßt, das mir die langen alphanumerischen Codes zur Authentifizierung abnimmt. Auf Anhieb ohne Vertipper, ich bin stolz auf mich.

Das folgende Formular ist exakt so aufgebaut wie das Papier, ist aber an die Verwendung von Informationstechnik angepasst: Auswahlfelder für die Nationalität sind ComboBoxen statt 3-Letter-Feldern in die man dann die ISO-CCs selber eintragen darf, wie es auf dem Papier gelöst ist; Multiple-Choice-Fragen sind ordentlich als RadioGroup gelöst und Freitextfelder gibts eh nur für den Namen. Oh, und Datumsangaben.

Jedenfalls, kann man schnell durchklicken, wenn man Fragen überspringen darf wird das direkt kenntlich gemacht.

11 Fragen später habe ich zwar keine Million gewonnen, aber das Ding fertig und bin bereit, Prüfen und Absenden zu drücken. Nochmal bekomme ich eine Zusammenfassung dessen was ich angeklickert habe und kann dieses dann bestätigen.

zensus
Und fertig.

Ich muss ja sagen: das geht ja glatt mal. Zumal ich auch nur die Fragen bekommen hab, die man durchaus ohne Datenschutzprobleme beantworten kann: nämlich nur die Stammdaten, die zwar gerne zur Identitätsprüfung genommen werden die aber sowieso jeder weiß. Da bin ich aber auch relativ gut weggekommen, das ist hier nicht der Regelfall. Eher die Ausnahme, zwei Interviews heute im Bekanntenkreis waren umfangreicher.

Und nun zur Technik… viel gibt es da nicht. Das System basiert auf IDEV, wurde aber offenbar verändert/aktualisiert, denn das „normale“ IDEV läuft mit Opera gar nicht und erwartet stattdessen einen IE 5.5.
Das JavaScript, welches die Plausibilitätsprüfung und die Fragen-Ausblendung macht ist vermutlich auch aus dieser Zeit: völlig konfus, sieht aber nicht nach einem Scrambler aus. Das hat jemand wirklich so programmiert. Es ist sehr erstaunlich, dass das Ganze funktioniert… und das tut es wie gesagt wirklich.

Immerhin: jetzt wissen SIE, dass ich damals auf’m Bürgeramt auch schon nicht gelogen hab. Toll.