<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Martok&#039;s Place</title>
	<atom:link href="http://www.martoks-place.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.martoks-place.de</link>
	<description></description>
	<lastBuildDate>Mon, 16 Jan 2012 23:57:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Nachschlag fürs Adam: Maps-API</title>
		<link>http://www.martoks-place.de/2012/01/nachschlag-adam-maps-api/</link>
		<comments>http://www.martoks-place.de/2012/01/nachschlag-adam-maps-api/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 23:57:27 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=708</guid>
		<description><![CDATA[Ich hatte mich vor einiger Zeit schonmal darüber ausgelassen, dass im Standard-ROM vom Adam ein paar Sachen fehlen. Nun, wie ich beim Installieren (oder viel mehr dem Versuch des Installierens) von Goggles (hey, ein super Barcodescanner!) festgestellt habe, fehlt noch etwas: die komplette Maps-API. Sehr ärgerlich, zumal man das so nicht gesagt bekommt &#8211; stattdessen [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte mich <a href="/2011/10/market-ni-adam/" title="Einmal Market “mit alles” für’s Adam">vor einiger Zeit</a> schonmal darüber ausgelassen, dass im Standard-ROM vom Adam ein paar Sachen fehlen.</p>
<p>Nun, wie ich beim Installieren (oder viel mehr dem Versuch des Installierens) von Goggles (hey, ein super Barcodescanner!) festgestellt habe, fehlt noch etwas: die <a href="http://code.google.com/intl/de-DE/android/add-ons/google-apis/index.html">komplette Maps-API</a>. Sehr ärgerlich, zumal man das so nicht gesagt bekommt &#8211; stattdessen erscheint das berühmte &#8220;Nicht Installiert&#8221;-Fenster und man darf sich die Fehlermeldung aus dem logcat raussuchen.</p>
<p>Weiß man das dann aber, kann man ein wenig rumgooglen und findet eine sehr schöne Anleitung <a href="http://www.callum-macdonald.com/2011/02/06/missing-com-google-android-maps/">bei Callum Macdonald</a> (Wahnsinns Lebenslauf. Mein Traum!). Der Link zu den Dateien funktioniert mittlerweile nicht mehr, aber durch den Dateinamen bekommt man die mit etwas Fleißarbeit problemlos.</p>
<p>Und, wer das mit dem Read-Write-Mounten nicht hinbekommt: die in meinem oben verlinkten Beitrag erwähnte <em>update.zip</em> lässt sich leicht anpassen um genau diese zwei Dateien da zu platzieren wo sie hingehören. Nur enthält sie diesmal tatsächlich fremdes (nämlich Googles) Eigentum, die gibts also hier nicht zum Download. Ist immerhin Deutschland <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Aber wer das tun will, weiß sowieso wie man ein Zip-Tool bedient und updates einspielt&#8230;. hoffe ich doch <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Damit funktioniert jetzt einiges mehr: wenn auch nicht im Market auffindbar, so hat sich Goggles immerhin <a href="http://www.freewarelovers.com/android/app/google-goggles">per Sideload</a> installieren lassen.</p>
<p>So <a href="http://notionink.wordpress.com/2012/01/14/here-is-the-alpha/">kurz vor ICS</a> hab ich damit fast ein fertig eingerichtetes Froyo&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2012/01/nachschlag-adam-maps-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cold Restart</title>
		<link>http://www.martoks-place.de/2011/12/cold-restart/</link>
		<comments>http://www.martoks-place.de/2011/12/cold-restart/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 03:25:05 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Umzug]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=684</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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 <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>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.<br />
<span id="more-684"></span><br />
Genau das ist in den letzten Tagen entstanden: ein neues Layout, diesmal nichts verändertes sondern komplett (aus Einzelteilen aus TwentyEleven) selbst zusammengebastelt. Im Endeffekt löst das aber das Problem nicht, sondern nur den komplizierten Teil.<br />
Durch alle Revisionen durch updaten wollte ich allerdings auch nicht, denn das hatte ich bisher schon gemacht und einiges an durcheinander in der Datenbank hinterlassen. Mal ganz davon abgesehen, dass die immer noch im Charset latin1 war &#8211; mehr als einmal ein Ärgernis. Also hilft eigentlich nur eins: eine komplette Neuinstallation. Genau das hat jetzt stattgefunden.</p>
<p>Das war der Plan:</p>
<ol>
<li>Dateien dynchronisieren: Beta->lokale Kopie</li>
<li>Dateien dynchronisieren: Live->lokale Kopie</li>
<li>Abgleichen der Uploads (das macht der Importer nämlich nicht zwingend richtig)</li>
<li>Baustellen-Seite vorschalten</li>
<li>DB-Export: Live-Schema</li>
<li>DB-Export: Beta-Schema</li>
<li>wp_ Tabellen auf Live-Schema löschen</li>
<li>Umbenennen des WordPress-Verzeichnisses auf dem Server</li>
<li>Import der Beta-Datenbank im Livesystem</li>
<li>Verschieben des Beta-Verzeichnisses ins Livesystem</li>
<li>Anpassen der Zugangsdaten in wp-config.php</li>
<li>Anpassen der Pfade im Backend</li>
<li>Baustellen-Seite wegnehmen</li>
</ol>
<p>Wider Erwarten hat das sogar fast alles funktioniert &#8211; jedenfalls bis ich mich anmelden wollte <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  An sich ging das alles, nur leider hatte jedes Formular eine falsche Zieladresse: nämlich eine vom Testsystem. Also den vorletzten Schritt direkt in der Datenbank erledigt und schon funktioniert alles.</p>
<p>Leider gibt&#8217;s das alte Besucherzählsystem (<em>Readers Count</em>) nicht mehr, und das jetzt verwendete <em>Count Per Day</em> hat ein so anderes Zählsystem, dass ich das nicht schmerzfrei übernommen kriege. Es gilt also: alles auf Anfang!</p>
<p>Anmerkungen, gefundene Fehler (und Behebungen) zum neuen Thema könnt ihr gerne mitteilen &#8211; entweder direkt oder in den Kommentaren.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/12/cold-restart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>They did it again&#8230;</title>
		<link>http://www.martoks-place.de/2011/12/they-did-it-again/</link>
		<comments>http://www.martoks-place.de/2011/12/they-did-it-again/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 21:29:32 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Heise]]></category>
		<category><![CDATA[Mailer]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=672</guid>
		<description><![CDATA[Was mich manchmal echt wundert &#8211; 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&#8217;t-Sparte &#8220;Vorsicht Kunde&#8221;) verkaufen haben jetzt wieder zugeschlagen. Im Rahmen einer lustigen Aktion bieten sie grade das an: [...]]]></description>
			<content:encoded><![CDATA[<p>Was mich manchmal echt wundert &#8211; 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&#8217;t-Sparte &#8220;Vorsicht Kunde&#8221;) verkaufen haben jetzt wieder zugeschlagen.</p>
<p>Im Rahmen einer lustigen Aktion bieten sie grade das an:</p>
<blockquote><p>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.</p></blockquote>
<p>Und damit nur noch ein 4tel statt ein 160stel der Konkurrenz im eigenen Haus!<br />
Aber darum gehts noch nicht.</p>
<blockquote><p>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 &#8220;Aktivieren&#8221;, um Ihr Postfach von 12 MB auf 500 MB kostenlos zu erweitern und die nötige Programmerweiterung zu installieren. </p></blockquote>
<p>War ja klar. Ich wusste gar nicht, dass ich Bundestrojanerzielperson bin.</p>
<p>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.</p>
<p>Und was erhalte ich 2 Sekunden Später in einer neuen Mail? Eine Werbefalle:<br />
<img src="/blog/wp-content/uploads/2011/12/wde2.png" alt="Web.de Werbemail 2" title="Web.de Werbemail 2" width="346" height="232" class="alignnone size-full wp-image-676" /> <img src="/blog/wp-content/uploads/2011/12/wde1.png" alt="Web.de Werbemail 1" title="Web.de Werbemail 1" width="262" height="214" class="alignnone size-full wp-image-673" /></p>
<p>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 &#8220;oh hey, nur noch ein Schritt den sie vorher nicht erwähnt haben, da steht ja immer noch Kostenlos dran&#8221;.<br />
Und schon zahlt man sich dumm und dusselig, denn wie wir gelernt haben ist das Ding nicht ohne Medien und/oder Gericht kündbar.</p>
<p>Gut, dass ich ein unbedarfter Nutzer bin &#8211; hoffentlich lesen das hier einige von diesen vorher.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/12/they-did-it-again/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Einmal Market &#8220;mit alles&#8221; für&#8217;s Adam</title>
		<link>http://www.martoks-place.de/2011/10/market-ni-adam/</link>
		<comments>http://www.martoks-place.de/2011/10/market-ni-adam/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 04:30:23 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Computerkram]]></category>
		<category><![CDATA[Adam]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Market]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=658</guid>
		<description><![CDATA[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 &#8220;an sich [...]]]></description>
			<content:encoded><![CDATA[<p>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) <a href="http://developer.android.com/reference/android/content/pm/PackageManager.html#getSystemAvailableFeatures%28%29">prüft dann</a>, ob diese existiert und entscheidet, ob ein Eintrag angezeigt wird oder nicht.</p>
<p>Ich sage &#8220;an sich toll&#8221;, 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 &#8211; 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.</p>
<p><span id="more-658"></span></p>
<p>Eine kurze Recherche im Root-Dateisystem ergibt einen Ordner <em>/etc/permissions</em>. Dort liegt eine Hand voll XML-Dateien welche anwesende Hardware beschreiben. In der Datei <em>handheld_core_hardware.xml</em> finden sich dann Kommentare, welche beschreiben was man für GPS tun muss: eine Datei namens <em>android.hardware.location.gps.xml</em>. Da dieser Teil des Dateisystems normalerweise nicht lesbar ist, empfiehlt es sich, Änderungen hier nur per update.zip zu machen.</p>
<p>Da ich sowas noch nie gebaut habe, verwendete ich als Basis den <a href="http://tabletroms.com/index.php/2011/05/30/news/">Root-Hack von Tabletroms</a>. Aus dieser Datei hab ich alles unwichtige entfernt und lediglich das Skript übrig gelassen, welches Dateien extrahiert.</p>
<p><strong>Disclaimer: Ich übernehme keine Haftung für eventuelle Schäden oder Garantien für die Funktionsfähigkeit.</strong></p>
<p>Herausgekommen ist diese <a href="/blog/wp-content/uploads/2011/10/update.zip">update.zip</a>. Wie üblich:</p>
<ol>
<li>Kopieren des Updates auf SD-Karte</li>
<li>Adam runterfahren</li>
<li>Mit gedrücktem Vol+-Button anschalten</li>
<li>Entsprechende SD-Karte auswählen und bestätigen</li>
</ol>
<p>Es sollte kurz ein Fortschrittsbalken durchlaufen und das &#8220;Update&#8221; ist fertig.<br />
Um zu testen, ob alles geklappt hat kann (unabhängig vom Market) diese kleine <a href="/blog/wp-content/uploads/2011/10/featuretest.apk">Testanwendung</a> verwendet werden. In dieser Liste sollte das oben erwähnte Feature vorhanden sein.</p>
<p>Danach noch den Market dazu bringen, das auch anzuerkennen. Das Problem ist nämlich, dass diese Informationen vermutlich nur beim Authentifizieren gegenüber der Market-API übertragen werden. Es muss also ein neu-authentifizieren erzwungen werden. Bei mir ging das zufällig sofort (in einem zweiten Test später nicht), was aber immer hilft, ist diese sehr lange Prozedur:</p>
<ol>
<li>Anwendungen -> Alle</li>
<li>&#8220;Market&#8221; -> Stoppen erzwingen</li>
<li>&#8220;Google Services Framework&#8221; -> Stoppen erzwingen, Daten löschen</li>
<li>(Market sollte jetzt einen Fehler werfen beim Starten)</li>
<li>Das Adam neu starten</li>
<li>WLAN aktivieren und warten&#8230; möglichst lange. 20 Minuten oder sowas, immer mal übers Display wischen, damit&#8217;s nicht ins Standby geht. In dieser Zeit den Market nicht starten.</li>
<li>Market testen.</li>
<li>GOTO #1</li>
</ol>
<p>Die destruktive Variante davon: Auch die Daten der Market-App löschen &#8211; die Chance, dass es dann funktioniert, ist größer. Nachteil: man Verliert die Info über installierte Anwendungen. Es ist aber möglich, per Titanium Backup vorher die Daten zu sichern und dann im Anschluss zurückzuspielen. Es bleiben alle (GPS-)Apps verfügbar und man hat seine alte Liste wieder.</p>
<p>Grade der zweite Teil ist etwas spekulativ&#8230; diese Schritte sind auch in einem &#8220;Market-Fix&#8221; beschrieben, der aber bei mehreren Leuten nicht funktioniert. Ich bin mir nicht mal so sicher, ob die zusätzliche XML wirklich was ändert. Auf jeden Fall gehört sie da eigentlich hin&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/10/market-ni-adam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Minecraft in spielbar</title>
		<link>http://www.martoks-place.de/2011/09/minecraft-in-spielbar/</link>
		<comments>http://www.martoks-place.de/2011/09/minecraft-in-spielbar/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 15:44:30 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Computerkram]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Minecraft]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=648</guid>
		<description><![CDATA[Seit heute gibt&#8217;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&#8217;s Gefrickel etwas aufräumen. Ergebnis des ganzen ist OptiFine, ein Mod, der bei mir Wunder bewirkt [...]]]></description>
			<content:encoded><![CDATA[<p>Seit heute gibt&#8217;s das inoffizielle 1.9-Prerelease. Und wieder mal ist Minecraft 20% langsamer geworden, jetzt bin ich bei 7fps. Nicht spielbar also.</p>
<p>Wie gut also, dass es Leute wie sp614x gibt, die sich mal die Mühe gemacht haben und notch&#8217;s Gefrickel etwas aufräumen. Ergebnis des ganzen ist <a href="http://www.minecraftforum.net/topic/249637-173-optifine-hd-g-fps-boost/">OptiFine</a>, 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.</p>
<p><a href="/blog/wp-content/uploads/2011/09/acraft-stadt.png"><img src="/blog/wp-content/uploads/2011/09/acraft-stadt-300x154.png" alt="acraft-stadt" title="Das Testbild" width="300" height="154" style="float:right" class="size-medium wp-image-651" /></a><br />
Als &#8220;Testbild&#8221; hab ich die Aussicht von meinem Dachausgang über die Hauptstadt auf der Map von <a href="http://forum.akaikee.de/index.php">ACraft</a> genommen. Normalerweise bekomme ich hier nur auf &#8220;Short&#8221; eine spielbare Framerate von um die 20fps. Mit OptiFine kann ich problemlos &#8220;Far&#8221; verwenden, denn hier bekomme ich statt 10fps glatte 25fps!</p>
<p>Sollte ein ähnlicher Effekt auch messbar sein, wenn der Mod auf 1.9 portiert wurde, könnte man fast sagen: Minecraft wird spielbar <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Jetzt heißt es nur noch: warten auf eine neue Version. Keine Ahnung, wie schnell der Programmierer ist, aber selbst Bukkit haben ja <a href="http://forums.bukkit.org/threads/recommended-build-1185.37830/">nun 2 Wochen gebraucht</a>. Könnte also noch eine Weile dauern&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/09/minecraft-in-spielbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trust in Me!</title>
		<link>http://www.martoks-place.de/2011/08/trust-me/</link>
		<comments>http://www.martoks-place.de/2011/08/trust-me/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 01:10:34 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Hack]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=630</guid>
		<description><![CDATA[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 &#8220;record mit Methoden&#8221;.) Leider nimmt uns der Compiler das so nicht ab. Warum? Weil [...]]]></description>
			<content:encoded><![CDATA[<p>Nehmen wir mal an, ein (Delphi-)<strong>object</strong>, welches eine Liste gleicher Objekte verwalten soll. Man könnte das einen Baum nennen.</p>

<div class="wp_syntax"><div class="code"><pre class="delphi" style="font-family:monospace;">  TValueList <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">array</span> <span style="color: #000000; font-weight: bold;">of</span> TValue<span style="color: #000066;">;</span>
  TValue <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">object</span>
    FList<span style="color: #000066;">:</span> TValueList<span style="color: #000066;">;</span>
    SomeOtherStuff<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">integer</span><span style="color: #000066;">;</span>
  <span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></pre></div></div>

<p>(Für später geborene: das ist die alte Syntax für &#8220;record mit Methoden&#8221;.)</p>
<p>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 &#8220;Deklarieren und Verwenden&#8221;.</p>
<p>Die Lösung hier zeigt sich in einem fiesen, aber einfachen Hack:</p>

<div class="wp_syntax"><div class="code"><pre class="delphi" style="font-family:monospace;">TValueListAlias <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">array</span> <span style="color: #000000; font-weight: bold;">of</span> <span style="color: #000066; font-weight: bold;">boolean</span><span style="color: #000066;">;</span>
TValue <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">object</span>
  FList<span style="color: #000066;">:</span> TValueListAlias<span style="color: #000066;">;</span>
  SomeOtherStuff<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">integer</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
TValueList <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">array</span> <span style="color: #000000; font-weight: bold;">of</span> TValue<span style="color: #000066;">;</span></pre></div></div>

<p>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.</p>

<div class="wp_syntax"><div class="code"><pre class="delphi" style="font-family:monospace;"><span style="color: #000066;">SetLength</span><span style="color: #000066;">&#40;</span>TValueList<span style="color: #000066;">&#40;</span>FList<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> <span style="color: #0000ff;">42</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></pre></div></div>

<p>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.</p>
<p>Hier kommt dann der eigentliche Grund für diesen Beitrag: wir sagen der RTL einfach: &#8220;Vertrau mir, das ist ein anderer Datentyp!&#8221;. 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.</p>
<p>Das ist zunächst einfacher als gedacht:</p>

<div class="wp_syntax"><div class="code"><pre class="delphi" style="font-family:monospace;">TI<span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #000066;">TypeInfo</span><span style="color: #000066;">&#40;</span>TValue<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
FT <span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #000066; font-weight: bold;">Pointer</span><span style="color: #000066;">&#40;</span><span style="color: #000066; font-weight: bold;">Integer</span><span style="color: #000066;">&#40;</span>TI<span style="color: #000066;">&#41;</span> <span style="color: #000066;">+</span> <span style="color: #000066; font-weight: bold;">Byte</span><span style="color: #000066;">&#40;</span>TI<span style="color: #000066;">.</span><span style="color: #006600;">Name</span><span style="color: #000066;">&#91;</span><span style="color: #0000ff;">0</span><span style="color: #000066;">&#93;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">for</span> I <span style="color: #000066;">:</span><span style="color: #000066;">=</span> FT<span style="color: #000066;">.</span><span style="color: #006600;">Count</span><span style="color: #000066;">-</span><span style="color: #0000ff;">1</span> <span style="color: #000000; font-weight: bold;">downto</span> <span style="color: #0000ff;">0</span> <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #000000; font-weight: bold;">begin</span>
  <span style="color: #000000; font-weight: bold;">if</span> FT<span style="color: #000066;">.</span><span style="color: #006600;">Fields</span><span style="color: #000066;">&#91;</span>I<span style="color: #000066;">&#93;</span><span style="color: #000066;">.</span><span style="color: #000066;">TypeInfo</span><span style="color: #000066;">^</span> <span style="color: #000066;">=</span> <span style="color: #000066;">TypeInfo</span><span style="color: #000066;">&#40;</span>TValueListAlias<span style="color: #000066;">&#41;</span> <span style="color: #000000; font-weight: bold;">then</span>
    ppti<span style="color: #000066;">:</span><span style="color: #000066;">=</span> FT<span style="color: #000066;">.</span><span style="color: #006600;">Fields</span><span style="color: #000066;">&#91;</span>I<span style="color: #000066;">&#93;</span><span style="color: #000066;">.</span><span style="color: #000066;">TypeInfo</span><span style="color: #000066;">^</span><span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #000066;">TypeInfo</span><span style="color: #000066;">&#40;</span>TValueList<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></pre></div></div>

<p>Nur &#8211; das funktioniert so nicht <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  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:</p>

<div class="wp_syntax"><div class="code"><pre class="delphi" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">procedure</span> FixFieldTable<span style="color: #000066;">&#40;</span>TheRecord<span style="color: #000066;">,</span> Find<span style="color: #000066;">,</span> Replace<span style="color: #000066;">:</span> PTypeInfo<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">type</span>
  TFieldInfo <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">packed</span> <span style="color: #000000; font-weight: bold;">record</span>
    <span style="color: #000066;">TypeInfo</span><span style="color: #000066;">:</span> PPTypeInfo<span style="color: #000066;">;</span>
    Offset<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Cardinal</span><span style="color: #000066;">;</span>
  <span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
&nbsp;
  PFieldTable <span style="color: #000066;">=</span> <span style="color: #000066;">^</span>TFieldTable<span style="color: #000066;">;</span>
  TFieldTable <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">packed</span> <span style="color: #000000; font-weight: bold;">record</span>
    X<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Word</span><span style="color: #000066;">;</span>
    Size<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Cardinal</span><span style="color: #000066;">;</span>
    Count<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Cardinal</span><span style="color: #000066;">;</span>
    Fields<span style="color: #000066;">:</span> <span style="color: #000000; font-weight: bold;">array</span> <span style="color: #000066;">&#91;</span><span style="color: #0000ff;">0</span><span style="color: #000066;">..</span><span style="color: #0000ff;">0</span><span style="color: #000066;">&#93;</span> <span style="color: #000000; font-weight: bold;">of</span> TFieldInfo<span style="color: #000066;">;</span>
  <span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">var</span>
  FT<span style="color: #000066;">:</span> PFieldTable<span style="color: #000066;">;</span>
  ppti<span style="color: #000066;">:</span> PPTypeInfo<span style="color: #000066;">;</span>
  I<span style="color: #000066;">,</span> old<span style="color: #000066;">,</span> dummy<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">cardinal</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">begin</span>
  FT <span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #000066; font-weight: bold;">Pointer</span><span style="color: #000066;">&#40;</span><span style="color: #000066; font-weight: bold;">Integer</span><span style="color: #000066;">&#40;</span>TheRecord<span style="color: #000066;">&#41;</span> <span style="color: #000066;">+</span> <span style="color: #000066; font-weight: bold;">Byte</span><span style="color: #000066;">&#40;</span>TheRecord<span style="color: #000066;">.</span><span style="color: #006600;">Name</span><span style="color: #000066;">&#91;</span><span style="color: #0000ff;">0</span><span style="color: #000066;">&#93;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
  <span style="color: #000000; font-weight: bold;">for</span> I <span style="color: #000066;">:</span><span style="color: #000066;">=</span> FT<span style="color: #000066;">.</span><span style="color: #006600;">Count</span><span style="color: #000066;">-</span><span style="color: #0000ff;">1</span> <span style="color: #000000; font-weight: bold;">downto</span> <span style="color: #0000ff;">0</span> <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #000000; font-weight: bold;">begin</span>
    <span style="color: #000000; font-weight: bold;">if</span> FT<span style="color: #000066;">.</span><span style="color: #006600;">Fields</span><span style="color: #000066;">&#91;</span>I<span style="color: #000066;">&#93;</span><span style="color: #000066;">.</span><span style="color: #000066;">TypeInfo</span><span style="color: #000066;">^</span> <span style="color: #000066;">=</span> Find <span style="color: #000000; font-weight: bold;">then</span> <span style="color: #000000; font-weight: bold;">begin</span>
      ppti<span style="color: #000066;">:</span><span style="color: #000066;">=</span> FT<span style="color: #000066;">.</span><span style="color: #006600;">Fields</span><span style="color: #000066;">&#91;</span>I<span style="color: #000066;">&#93;</span><span style="color: #000066;">.</span><span style="color: #000066;">TypeInfo</span><span style="color: #000066;">;</span>
      VirtualProtect<span style="color: #000066;">&#40;</span>ppti<span style="color: #000066;">,</span><span style="color: #000066;">SizeOf</span><span style="color: #000066;">&#40;</span>ppti<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> PAGE_READWRITE<span style="color: #000066;">,</span> old<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
      <span style="color: #000000; font-weight: bold;">try</span>
        ppti<span style="color: #000066;">^</span><span style="color: #000066;">:</span><span style="color: #000066;">=</span> Replace<span style="color: #000066;">;</span>
      <span style="color: #000000; font-weight: bold;">finally</span>
        VirtualProtect<span style="color: #000066;">&#40;</span>ppti<span style="color: #000066;">,</span> <span style="color: #000066;">sizeof</span><span style="color: #000066;">&#40;</span>ppti<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> old<span style="color: #000066;">,</span> dummy<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
      <span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
    <span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
  <span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
<span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span>
<span style="color: #808080; font-style: italic;">{...}</span>
&nbsp;
  FixFieldTable<span style="color: #000066;">&#40;</span><span style="color: #000066;">TypeInfo</span><span style="color: #000066;">&#40;</span>TValue<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> <span style="color: #000066;">TypeInfo</span><span style="color: #000066;">&#40;</span>TValueListAlias<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> <span style="color: #000066;">TypeInfo</span><span style="color: #000066;">&#40;</span>TValueList<span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></pre></div></div>

<p>Wer sich die Datenstruktur ansieht, wird feststellen dass TFieldTable ein Feld namens &#8220;Size&#8221; 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.<br />
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.</p>
<p>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 <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Oh, übrigens, wer es nicht erkannt hat: der Titel ist natürlich eine Referenz auf <a href="http://en.wikipedia.org/wiki/Trust_in_Me_%28The_Python%27s_Song%29">Disney&#8217;s Dschungelbuch</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/08/trust-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Old package is old</title>
		<link>http://www.martoks-place.de/2011/08/old-package-is-old/</link>
		<comments>http://www.martoks-place.de/2011/08/old-package-is-old/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 00:30:42 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Computerkram]]></category>
		<category><![CDATA[Paketverwaltung]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=624</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Mal was aus der Sysadmin-Ecke <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>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.</p>
<p>Und was passiert? Man sitzt auf jahrealter Software fest.</p>
<p>Verwendet wird hier ein 10.04.3 LTS Server und konkret problematisch war das Paket &#8220;smartmontools&#8221;. 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.<br />
Genau das war hier der Fall. In den Lucid-Repos findet sich nur die Version <a href="http://packages.ubuntu.com/lucid/smartmontools">5.38</a> 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: <a href="http://packages.ubuntu.com/oneiric/smartmontools">5.41</a>.</p>
<p>Wenn man dann dieses Paket nimmt (ja, alle Abhängigkeiten sind auf einem aktuellen lucid auch erfüllt) und manuell aktualisiert, funktioniert alles:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">root<span style="color: #000000; font-weight: bold;">@</span>srv2:<span style="color: #000000; font-weight: bold;">/</span>root<span style="color: #666666; font-style: italic;"># wget http://mirror.netcologne.de/ubuntu//pool/main/s/smartmontools/smartmontools_5.41+svn3365-1_amd64.deb</span>
root<span style="color: #000000; font-weight: bold;">@</span>srv2:<span style="color: #000000; font-weight: bold;">/</span>root<span style="color: #666666; font-style: italic;"># dpkg -i smartmontools_5.41+svn3365-1_amd64.deb</span></pre></div></div>

<p>Und schon erfahre ich endlich, wie die SSD denn so damit lebt, Systemplatte zu sein. Gleich mit netten von Munin gemalten Diagrammen <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/08/old-package-is-old/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Minus</title>
		<link>http://www.martoks-place.de/2011/08/google-minus/</link>
		<comments>http://www.martoks-place.de/2011/08/google-minus/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 19:21:29 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Politik und Philosophie]]></category>
		<category><![CDATA[Real Life]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Datenschutz]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=613</guid>
		<description><![CDATA[Das wars. Heute schlag 23:59:59 (oder nah dran) wird mein Google+-Account sein Ende finden, und ich werde mal testen ob man den so rückstandsfrei entfernen kann, wie es das Control Panel glauben lässt. Hier möchte ich ein Fazit ziehen. Was ist Google+? Laut Eigenaussage sollte Google+ mal ein soziales Netzwerk werden. Nach den&#8230; wenig erfolgreichen [...]]]></description>
			<content:encoded><![CDATA[<p>Das wars.</p>
<p>Heute schlag 23:59:59 (oder nah dran) wird mein Google+-Account sein Ende finden, und ich werde mal testen ob man den so rückstandsfrei entfernen kann, wie es das Control Panel glauben lässt.<br />
Hier möchte ich ein Fazit ziehen.</p>
<p><span id="more-613"></span></p>
<p><strong>Was ist Google+?</strong><br />
Laut Eigenaussage sollte Google+ mal ein soziales Netzwerk werden. Nach den&#8230; wenig erfolgreichen Orkut und Buzz wollte Google mal alles richtig machen.<br />
In wirklichkeit ist es Twitter ohne Zeichenbegrenzung. Dazu gibt es ein paar nette Spielereien: Huddles und Hangouts <span style="color:#777">(und seit dieser Woche Spiele-Apps wie bei der Fratzenkladde)</span>. Ersteres ist ein Multi-User-Chat mit direkter Integration von Mobilgeräten, SMS und Webclients; letzteres sind Videochats mit bis zu 10 Personen gleichzeitig. Da geht das Problem schon los: wenn ich einen Chat will, hab ich dafür Skype oder IRC. Und Videokonferenzen fällt eh aus, nicht jeder hat 100MBit.</p>
<p><strong>Plus</strong><br />
Damit bleibt nur der Twitter-Part: asynchrone Beziehungen und ein einfach benutzbarer Stream sind ziemlich praktisch und haben recht hohen Share-Faktor.</p>
<p>Außerdem lange dabei gehalten hat mich <a href="https://plus.google.com/117024231055768477646">Isotopp</a>, der seinen <a href="https://twitter.com/isotopp">Twitter-Account</a> eingestampft hat. Im Endeffekt sind er und Notch (der aber noch twittert; auf G+ gibts nur immer mal nette Screenshots vom Adventure Update) das einzige, was mich einmal am Tag reinschauen lässt.</p>
<p><strong>Minus</strong><br />
Google+ mit seinen Kreisen wäre eine unglaublich gute Plattform für Wave gewesen: Schnell mal einen Kreis zum Brainstorming auf eine gemeinsame Plattform werfen. Selbst wenns nicht mehr läuft, wäre das für Google wohl kein Akt gewesen, schnell mal eine Wave-Instanz aufzusetzen. Naja, die wollten ja nicht. (Ja, ich hatte eine Suggestion eingereicht.)</p>
<p>Dann ist das ganze furchtbar langsam. Ich mein, nicht so langsam wie das verajaxte Twitter, aber wie auch bei Hangouts merkt man, dass es für 16MBit mit maximaler Latenz in der Größenordnung von 30ms ausgelegt wurde.</p>
<p>Das größte Problem ist aber ein anderes: die Realnamens-Policy von Google. Da drüber haben nun wirklich schon alle alles gesagt haben, verlinke ich hier nur auf <a href="http://www.zeit.de/digital/datenschutz/2011-08/googleplus-name-pseudonym/komplettansicht">Kai Biermann in der Zeit</a>.</p>
<p>Um meine Meinung auf den Punkt zu bringen:</p>
<p><span style="color:#777">(fast)</span> Niemand, der meinen echten Namen kennt ist auf Google+. Von niemandem, der auf Google+ ist, will ich dass sie meinen Realname kennen (oder jedenfalls nutzt es ihnen nichts). Wer von mir etwas digitales will (Forenmember)/wollen könnte (Piraten) kennt mich unter Martok. Ich will nicht, dass mir eine Digitale Entität sagt, wie ich heiße. Ich will denen sagen, wie ich auftreten will.</p>
<p><strong>Fazit</strong><br />
G+ hat für mich weniger Nutzen als Nerv.</p>
<p>Das tu ich mir nicht an. Wenn ich Nerv will, baue ich mir ein Linux.</p>
<p>But that&#8217;s another story for another time.</p>
<p><strong>PS</strong>:<br />
Wenn jemand noch rein will, z.B. um selbst auszutreten: <a href="https://plus.google.com/_/notifications/ngemlink?path=%2F%3Fgpinv%3DT4oNBFmdWQU%3Ad_cGifzNFCA">Invite</a>. Geht vermutlich nicht mehr wenn ich weg bin <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/08/google-minus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silent Lucidity III: Eigenbau</title>
		<link>http://www.martoks-place.de/2011/06/silent-lucidity-iii-eigenbau/</link>
		<comments>http://www.martoks-place.de/2011/06/silent-lucidity-iii-eigenbau/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 17:26:49 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Politik und Philosophie]]></category>
		<category><![CDATA[Lucid Dreams]]></category>
		<category><![CDATA[lucidity]]></category>
		<category><![CDATA[Psychologie]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=591</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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.<br />
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.</p>
<p>Zunächst die grundlegende Prämisse:</p>
<blockquote><p>Träume sind die beste Grafikengine der Welt.</p></blockquote>
<p>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&#8217;s also einfacher, und da das nicht die einzige Anleihe aus der Digitalwelt ist, vermutlich auch alle anderen Computer-Geeks.</p>
<p><span id="more-591"></span></p>
<h4>make &#038;&#038; make install</h4>
<p>Bevor man aber das kann, muss man zuerst feststellen, <em>dass</em> man träumt. Wie ich bereits mehrfach angedeutet hatte, macht mir besonders hier der klassische Ansatz über Dream Recall extreme Probeme. Das war zwischenzeitlich auch der Grund, keine weiteren Versuche zu unternehmen, und erst lange Zeit später hatte ich dann die entscheidende Idee.<br />
Nehmt euch einfach mal kurz Zeit, wirklich bewusst alles wahrzunehmen, was gerade um euch herum passiert. Geräusche, Gerüche, Dinge die man sieht. Dabei auch auf das achten, was nur im <a href="http://de.wikipedia.org/wiki/Peripheres_Sehen">peripheren Bereich</a> geradeso sichtbar ist. Ihr werdet feststellen, dass das eine ganze Menge ist. Wer sich ein wenig an seine Träume erinnern kann, dem wird auffallen, dass zwar ein Großteil der Sinne funktioniert, aber dabei anders, falsch oder ungenauer funktioniert.<br />
Schritt eins ist also, die Wahrnehmung im Tagesbewusstsein zu steigern und ein Gefühl für die &#8220;Bandbreite&#8221; zu bekommen, die dabei belegt wird. <span style="color: #777777">Das kann man auch sonst brauchen: soweit ich das beurteilen kann hilft das wunderbar beim Lernen.</span> Danach kann man per einfacher <a href="http://en.wikipedia.org/wiki/Traffic_analysis">Traffic Analysis</a> jederzeit herausfinden, ob das gerade ein Traum ist oder nicht: im Traum ist die Datenmenge viel geringer, und gerade der Teil mit dem peripheren Sehen fällt vollständig weg. Vermutlich aus praktischen Gründen, dazu gleich mehr.</p>
<p>Andere Reality-Checks benutze ich fast nicht mehr, nur noch dann, wenn ich die Simulation etwas zu gut gestaltet habe und dabei bin, mich selber von der Realität dieser zu überzeugen. Merkt man aber meistens noch rechtzeitig, um passende Maßnahmen zu ergreifen. Gleichzeitig hilft es dabei, etwas zu üben, sich auf mehrere Sachen gleichzeitig zu konzentrieren. Damit meine ich <em>wirklich</em> konzentrieren, denn es ist oft notwendig, sowohl das Mantra &#8220;ich träume&#8221; als auch Teile der Handlung bewusst zu halten und vor &#8220;Korrosionseffekten&#8221; zu schützen.</p>
<h4>Simulacron</h4>
<p>Ich erwähnte weiter oben, dass sich Träume prima als tolle Grafikengine und das ganze drumrum als ein Computerspiel vorstellen lassen. Wenn man dies tut, kann man auch im Traum selbst genauso agieren, wie man dies tun würde, wenn man ein Spiel baut oder verändert.<br />
Dabei gibt es grundsätzlich 4 Dinge zu beachten:</p>
<ol>
<li><strong>Scenes</strong> nenne ich allgemein das Setting, also die Umgebung in dem die Handlung stattfindet. Dabei gibt es 2 Untertypen: nahen und fernen Hintergrund. Dabei ist der nahe weitaus einfacher zu verändern; der weite bzw. größermaßstäbliche ist schwerer zu handhaben. Aus einer Stadt einen Bauernhof machen ist schwierig. Eine Einkaufsstraße in einen Stadtpark verwandeln dagegen ist einfach, solange die Stadt da bleibt.</li>
<li><strong>Objects</strong> sind alles, mit dem man selbst oder aber die Actors interagieren. Das sind sowohl klassische &#8220;handliche&#8221; Objekte wie Äpfel, Schaufeln, aber auch Motorräder, Autos, Stadtparkbänke und vieles mehr.</li>
<li><strong>NPC</strong>s oder Non Player Characters sind allgemein alle Personen, die nicht mit dem Träumer personenidentisch sind</li>
<li><strong>Actors</strong> als eine Untergruppe der NPCs sind die wirklich interessanten: sie treffen eigene Entscheidungen, sind meist detaillierter als normale NPCs und brauchen &#8220;mehr Rechenleistung&#8221;. Außerdem haben sie KI!</li>
</ol>
<p>Jetzt kommt natürlich die spannende Frage: wie läuft das Ändern ab? Oftmals recht primitiv (und sehr ähnlich dem, was in den Standard-Anleitungen steht). Einfachste Methode ist nämlich das Visualisieren des Ist- und Soll-Zustandes, was man dann dadurch umsetzen lässt, dass man kurz wegschaut und <em>erwartet</em>, dass der Sollzustand erreicht wird. Nicht hoffen, <em>erwarten</em>. Das ist gleichzeitig auch ein schöner RealityCheck, denn dass das in der Realität funktioniert, ist sehr selten. Deswegen ist es auch schwierig, die entfernten Backdrops zu ändern: wenn sie überall gelten, wohin sieht man dann weg? Die (virtuellen) Augen schließen ist zwar eine Option, aber das braucht einiges an Training, um den Rest der Szenerie danach wieder zusammen zu bekommen.</p>
<p>Genauso kann man auch Personen beeinflussen. NPCs kann man dabei direkt &#8220;rumkommandieren&#8221; und gegebenenfalls auch einfach dahin teleportieren wo man sie braucht. Etwas komplizierter sind Actors, denn, wie gesagt, diese haben einen gewissen Teil KI. Woher kommt diese nun? Einfach: aus Erfahrungen, die wir von Persönlichkeiten haben. Das bedeutet in logischer Folge, dass unbekannte Persönlichkeiten schwierig zu simulieren sind. Aber auch eigentlich bekannte Personen sind schwierig im Traum zu halten, so man sie denn nicht sehr genau kennt. Klassisches Beispiel: Mimik. Warum wacht man wohl oft aus Klarträumen auf, wenn man eine Person genau ansieht? Meine Erklärung: das Gehirn versucht das das zu tun, was es immer tut wenn es ein Gesicht sieht: es versucht, in der Mimik zu lesen. Was bedeutet das nun, wenn das Simulationsmodell bisher nicht so detailliert war? Es wird versucht, Details zu generieren. Liegen dafür keine Daten vor, gibt es eine NullPointerException und alles fliegt uns um die Ohren.</p>
<h4>Kopfkino</h4>
<p>Eine besondere Form von Klarträumen sind bei mir Filme. Dabei ist zwar klar, dass aktuell ein Traum stattfindet, aber man entscheidet sich bewusst dagegen, einzugreifen. Aufpassen: auch wenn man glaubt, die Entscheidung war bewusst, kann es durchaus sein dass nur das Unterbewusste wieder seine Ruhe haben will und man direkt wieder in den nicht-luziden Zustand fällt.<br />
Schafft man das aber (erfordert Übung, ist aber einfacher aufrecht zu erhalten als komplette Klarträume), hat man durchaus einiges an Unterhaltungswert geschaffen, denn man kann bewusst dem zugucken was man normalerweise träumt. Dabei ist es in gewissem Maß sogar möglich, das Traum-Ich vom Ich-Ich zu trennen. Das macht es auch möglich, <em>sich selbst</em> als (Actor-)KI zu beobachten. Zuerst eine komsiche Vorstellung, aber psychologisch bestimmt interessant.</p>
<h4>Fazit</h4>
<p>Grundsätzlich stellt sich die Frage, ob das was ich hier mache (und beschreibe) überhaupt noch unter den Begriff Lucid Dreaming passt. Eine klare Definition, an der man das prüfen könnte, existiert nicht, also ist das alles Ermessensfrage. Im reinen Begriffssinn kann man das klar mit Ja beantworten, aber die Idee ist doch eine etwas andere. Von daher würde ich das ganz klar mit Jein beantworten, da es signifikante Unterschiede in der Ausführung gibt, die Idee aber die gleiche ist.<br />
Zur Schwierigkeit ist jedoch eins zu sagen: wir bewegen uns hier ungefähr dort wo die Koch-Methode zum morsen lernen steht: statt mit einfachem anzufangen und sich dann schrittweise zu verbessern erfolgt der Einstieg auf sehr hohem Niveau. Das bedeutet einerseits eine recht lange Zeit ohne &#8220;vorzeigbare&#8221; Erfolge, aber auch dass, sobald man den Bogen einmal raus hat sofort alles möglich ist. Zwar vielleicht nicht direkt perfekt, denn bestimmte Aktionen, gerade was Actors betrifft, erfordern einiges an Konzentration. Ähnliches gilt für das Ändern ohne wegsehen. Dabei ist es aber so, dass meistens ein erfolgreicher Versuch ausreicht, um es nicht mehr zu verlernen.<br />
Durchaus einen lohnende Zeitinvestition also&#8230; und es ist ja nicht so dass man während dem Schlafen etwas anderes zu tun hätte <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Damit haben wir das Ende meiner kurzen Reise in die Psychologie und etwas was ich immer gerne als Traum-Hacking bezeichne erreicht. Ich hoffe, ich konnte dem ein oder anderen einen Anstoß zu eigenen Experimenten geben, oder vielleicht von früher enttäuschte Träumer zum Neuanfang motivieren. Das war es jedenfalls von meiner Seite.</p>
<p>Martok out.</p>
<p>PS: Im ersten Teil gab es einen Link zu den Lyrics, wer bis hierhin druchgehalten hat bekommt zur Belohnung einen Youtube-Link: <a href="http://www.youtube.com/watch?v=LniY0pDQGaE">QUEENSRYCHE &#8211; SILENT LUCIDITY</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/06/silent-lucidity-iii-eigenbau/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silent Lucidity II: Howto</title>
		<link>http://www.martoks-place.de/2011/05/lucidity-ii/</link>
		<comments>http://www.martoks-place.de/2011/05/lucidity-ii/#comments</comments>
		<pubDate>Sat, 28 May 2011 21:24:24 +0000</pubDate>
		<dc:creator>Martok</dc:creator>
				<category><![CDATA[Politik und Philosophie]]></category>
		<category><![CDATA[Lucid Dreams]]></category>
		<category><![CDATA[lucidity]]></category>
		<category><![CDATA[Psychologie]]></category>

		<guid isPermaLink="false">http://www.martoks-place.de/?p=571</guid>
		<description><![CDATA[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. [...]]]></description>
			<content:encoded><![CDATA[<p>Willkommen in Teil 2 meiner Trilogie über Klarträume. Schön, dass wir sie wieder an Bord begrüßen dürfen <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Wie ich bereits <a href="/2011/05/lucidity-i/">im ersten Teil</a> 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.</p>
<p>Ich werde mich aber trotzdem etwas kürzer fassen, denn so <a href="http://www.mind-shop.de/newsdesk_info.php/newsPath/11/newsdesk_id/16">ziemlich alle</a> Seiten <a href="http://www.dreamviews.com/section/dream-recall-10/">zum Thema</a> haben den gleichen Inhalt. Da muss es ja nicht noch eine geben <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><span id="more-571"></span></p>
<h4>Träume erkennen</h4>
<p>Schritt eins ist natürlich immer der Gleiche: man muss zuerst mal wissen, dass man träumt. Verbreitet ist hier der Ansatz, bekannte Motive wiederzuerkennen. Warum das funktioniert, hatte schon Freud erkannt: wenn man normal (&#8220;unkontrolliert&#8221;) Träumt, wiederholen sich bestimmte Motive, also Handlungen, Orte, Personen oder ähnliches.<br />
Damit das funktioniert, muss man erstmal lernen sich an Träume erinnern zu können. Dazu dient ein sogenanntes Dream Journal, in dem man direkt nach dem Aufwachen jeden Traum notiert, an den man sich erinnern kann. Dadurch entwickelt sich ein Gefühl dafür, was öfter wiederkommt, und man zweifelt dann eher mal an der Realität, wenn einem eine sollte Situation begegnet.<br />
Tut man das, wird ein Reality Check verwendet, um die Entscheidung definitiv zu treffen. Auch diese sollte man auch in der definitiv realen Welt machen, um einen Automatismus zu entwickeln. Darum ging es ja auch in meinem <a href="/2011/01/inception-angewendet/">früheren Beitrag</a>. Hier gibt es verschiedene Methoden, die aber alle recht einfach sind. Eine kurze Auswahl bewährter Techniken:</p>
<ul>
<li>Lesetest: etwas lesen, kurz weggucken, nochmal lesen. Hat sich der Text geändert? (Hey, Laufschriften sind da nicht gut <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) Lässt sich gut Kombinieren mit einem Logiktest: zweimal hintereinander eine (Digital-)Uhr ablesen. Sind die Zeiten konstistent und monoton steigend?</li>
<li>Luft anhalten: kann man mit zugehalter Nase noch atmen? Wenn ja, ist die Nase simuliert.</li>
<li>Sicht: wird das Bild zu den Rändern hin unscharf? Funktioniert natürlich nur, wenn man nicht sowieso Probleme mit dem peripheren Sehen hat.</li>
<li>Spiegel: wisst ihr, wie kompliziert Spiegel sind? Nun, das Traumbewusstsein meistens nicht, daher sind die Ergebnisse eher selten realistisch.</li>
<li>Physik: halten Kartenhäuser erstaunlich gut, fallen Kreisel nicht um (Hallo Cobb!), sind instabile Systeme auf einmal stabil? Nicht wirklich gut für Leute, die <em>wissen</em> wie Mechanik funktioniert. Das weiß das Unterbewusste dann nämlich auch. Aber für normale Menschen recht zuverlässig</li>
</ul>
<p>Und natürlich noch viele mehr. Nicht gut funktioniert Schmerz (&#8220;zwick mich mal, ich glaub ich träume!&#8221;). Jedenfalls nicht im Verbund mit den Standardtechniken, wir werden dieses Thema in Teil III nochmal wiedersehen; für jetzt sei gesagt: ja, auch Schmerz wird simuliert, das ist kein Entscheidungskriterium.</p>
<p>Es gibt eine ganze Reihe von Techniken, die dafür sorgen (sollen), dass es leichter Fällt, einen halbwegs bewussten Zustand zu erreichen. Da ich das auch nur abschreiben würde, möchte ich hier direkt auf <a href="http://en.wikibooks.org/wiki/Lucid_Dreaming/Induction_Techniques#Techniques">das Wikibook</a> verweisen, dass auch eine schöne Gegenüberstellung von Vor-und Nachteilen hat.</p>
<h4>Im Traum bleiben</h4>
<p>Hat man dann erstmal einen Traum als solchen erkannt, wird das Unterbewusste permanent versuchen, wieder die Kontrolle zurückzuerlangen. Zumindest anfangs wird es dabei auch erfolgreich sein, und man wacht schlagartig auf &#8211; nur um zu realisieren, wie nah man dran war. Das ist auch deswegen so schwierig, weil man anfangs immer mit ziemlich starken Emotionen überladen wird. Einmal die recht logisch Freude darüber dass es funktioniert, aber auch ein kurzer Panikanfall. Der ist zwar weitgehend unerklärlich, aber eben da. Meine Vermutung ist ja, dass Bewusstsein und Schlafen so gar nicht zueinander passt, und irgendwas im Gehirn einen Fall von <a href="http://en.wikipedia.org/wiki/Sleep_paralysis">Sleep Paralysis</a> vermutet. Und da darf man durchaus panisch werden.</p>
<h4>Aktionen</h4>
<p>Nicht aufgepasst in der Einleitung? Alles ist möglich. Alles.<br />
Und das soll ich hier nicht alles auflisten, oder? <img src='http://www.martoks-place.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Nur ein paar Tipps: es hilft, wenn man immer was tut. Untätigkeit ist schwierig aufrecht zu erhalten, dabei fällt man meistens aus dem luziden Zustand raus. Man sollte es dabei aber vermeiden, einen bestimmten Punkt zu fixieren. Dadurch werden die Augen (also, die echten) aus dem REM-Zustand gebremst, das ist meistens mit aufwachen verbunden.</p>
<h4>In Popular Culture</h4>
<blockquote><p>If you&#8217;re writing fiction or even creating a world for a computer game, lucid dreaming can help you visualize it. You could ask your characters how they feel about something or what they think will happen.<br />
<address>http://en.wikibooks.org/wiki/Lucid_Dreaming/Introduction</address>
</blockquote>
<p>Mittlerweile ist das ganze auch in der Psychotherapie angekommen, hier verwendet man Klarträume zum Beispiel in der klassischsten Situation: <a href="http://www.innovations-report.de/html/berichte/studien/bericht-52017.html">zur Albtraumbewältigung</a>. Klassisch deswegen, weil grade Albträume ob ihrer extremen Unlogik oft sehr einfach als Träume zu entlarven sind. Hier ist auch die Verbindung, die die meisten von uns zu KTs haben: ziemlich oft hat man als Kind luzide Träume, ohne das zu merken (oder eben das Konzept zu kennenn). Erst später &#8220;verlernt&#8221; man das wieder und muss sich mühsam wieder heranarbeiten.</p>
<p>Beim nächsten mal geht es dann um das eigentliche Thema, warum ich diese Reihe angefangen habe: meine Eigenbauvariante, warum ich das machen musste und was damit für nette Sachen möglich sind.</p>
<p>Stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.martoks-place.de/2011/05/lucidity-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

