<?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>t8d blog</title>
	<atom:link href="http://blog.t8d.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.t8d.de</link>
	<description>Was das Web bewegt</description>
	<lastBuildDate>Fri, 20 Apr 2012 18:45:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>DynamoDB data model in a nutshell &#8211; using JSON</title>
		<link>http://blog.t8d.de/2012/03/17/dynamodb-data-model-in-a-nutshell-using-json/</link>
		<comments>http://blog.t8d.de/2012/03/17/dynamodb-data-model-in-a-nutshell-using-json/#comments</comments>
		<pubDate>Sat, 17 Mar 2012 11:18:16 +0000</pubDate>
		<dc:creator>Johannes Schmidt</dc:creator>
				<category><![CDATA[amazon]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[DynamoDB]]></category>
		<category><![CDATA[NoSQL]]></category>

		<guid isPermaLink="false">http://blog.t8d.de/?p=380</guid>
		<description><![CDATA[I have created a JSON document which represents a DynamoDB database including tables, items, and attributes &#8211; and explains the DynamoDB data model basics using faked comments. See this reference resource for further reading. UPDATE From a modeling perspective it makes more sense to add another item for item_1 in table_2 &#8211; but with a [...]]]></description>
			<content:encoded><![CDATA[<p>I have created a <a href="http://blog.t8d.de/wp-content/uploads/2012/03/dynamodb_datamodel_json.txt">JSON document</a> which represents a DynamoDB database including tables, items, and attributes &#8211; and explains the DynamoDB data model basics using faked comments.</p>
<p>See this <a href="http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/DataModel.html">reference resource</a> for further reading.</p>
<p><strong>UPDATE</strong></p>
<p>From a modeling perspective it makes more sense to add another item for item_1 in table_2 &#8211; but with a different timestamp which is the range primary key attribute. See <a href="http://blog.t8d.de/wp-content/uploads/2012/03/dynamodb_datamodel2_json.txt">this updated version</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.t8d.de/2012/03/17/dynamodb-data-model-in-a-nutshell-using-json/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QuaaxTM 0.7.1 released</title>
		<link>http://blog.t8d.de/2011/11/13/quaaxtm-0-7-1-released/</link>
		<comments>http://blog.t8d.de/2011/11/13/quaaxtm-0-7-1-released/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 18:45:45 +0000</pubDate>
		<dc:creator>Johannes Schmidt</dc:creator>
				<category><![CDATA[PHPTMAPI]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Topic Maps]]></category>

		<guid isPermaLink="false">http://blog.t8d.de/?p=361</guid>
		<description><![CDATA[Following the RERO mantra I have released an update of the PHP Topic Maps engine QuaaxTM. 0.7.1 now includes the latest version of PHPTMAPI (which is 2.1). This upgrade was the only change. You can download QuaaxTM from the sourceforge pages.]]></description>
			<content:encoded><![CDATA[<p>Following the <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Release_early,_release_often">RERO</a> mantra I have released an update of the PHP Topic Maps engine <a href="http://quaaxtm.sourceforge.net/">QuaaxTM</a>. 0.7.1 now includes the latest version of <a href="http://phptmapi.sourceforge.net/">PHPTMAPI</a> (which is 2.1). This upgrade was the only <a href="http://quaaxtm.sourceforge.net/CHANGES.txt">change</a>. You can <a href="http://sourceforge.net/projects/quaaxtm/files/">download</a> QuaaxTM from the sourceforge pages.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.t8d.de/2011/11/13/quaaxtm-0-7-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crosh und Delevoper Mode in Chrome OS</title>
		<link>http://blog.t8d.de/2011/10/30/crosh-und-delevoper-mode-in-chrome-os/</link>
		<comments>http://blog.t8d.de/2011/10/30/crosh-und-delevoper-mode-in-chrome-os/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 10:13:16 +0000</pubDate>
		<dc:creator>Johannes Schmidt</dc:creator>
				<category><![CDATA[chrome os]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://blog.t8d.de/?p=357</guid>
		<description><![CDATA[In den folgenden zwei Quellen finden sich Anleitungen, wie man die reduzierte Shell crosh sowie den Delevoper-Modus startet, um eine fully featured bash zu erhalten: http://www.chromium.org/chromium-os/poking-around-your-chrome-os-device http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook Der Hardware-Switch für den Developer-Modus ist Geräte-abhängig; die Anleitung bezieht sich auf das Samsung Serie 5 Chromebook.]]></description>
			<content:encoded><![CDATA[<p>In den folgenden zwei Quellen finden sich Anleitungen, wie man die reduzierte Shell <code>crosh</code> sowie den Delevoper-Modus startet, um eine <em>fully featured</em> <code>bash</code> zu erhalten:</p>
<ul>
<li><a href="http://www.chromium.org/chromium-os/poking-around-your-chrome-os-device">http://www.chromium.org/chromium-os/poking-around-your-chrome-os-device</a></li>
<li><a href="http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook">http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook</a></li>
</ul>
<p>Der Hardware-Switch für den Developer-Modus ist Geräte-abhängig; die Anleitung bezieht sich auf das <a href="http://samsung.de/de/Privatkunden/Mobil/Notebooks/Serie5/500c21/XE500C21-H02DE/detail.aspx">Samsung Serie 5 Chromebook</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.t8d.de/2011/10/30/crosh-und-delevoper-mode-in-chrome-os/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erster Eindruck von Ubuntu 11.10 (Oneiric Ocelot)</title>
		<link>http://blog.t8d.de/2011/10/16/erster-eindruck-von-ubuntu-11-10-oneiric-ocelot/</link>
		<comments>http://blog.t8d.de/2011/10/16/erster-eindruck-von-ubuntu-11-10-oneiric-ocelot/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 17:37:03 +0000</pubDate>
		<dc:creator>Johannes Schmidt</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.t8d.de/?p=345</guid>
		<description><![CDATA[Gestern fand ich also die Zeit, auf Ubuntu 11.10 Oneiric Ocelot zu aktualisieren. Ich war besonders darauf gespannt, ob Canonical es geschafft hatte, den Ubuntu Standard-Desktop Unity weiter zu verbessern. Was mich besonders gestört hatte: Der am linken Fensterrand platzierte Launcher war in 11.04 derart mangelhaft implementiert (Funktionalitäten Ein- und Ausblenden, vertikales Scrollen), dass ich [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern fand ich also die Zeit, auf Ubuntu 11.10 <em>Oneiric Ocelot</em> zu aktualisieren. Ich war besonders darauf gespannt, ob <a href="http://www.canonical.com/">Canonical</a> es geschafft hatte, den Ubuntu Standard-Desktop <em>Unity</em> weiter zu verbessern. Was mich besonders gestört hatte: Der am linken Fensterrand platzierte <em>Launcher</em> war in 11.04 derart mangelhaft implementiert (Funktionalitäten Ein- und Ausblenden, vertikales Scrollen), dass ich bis dato weiter <a href="http://www.gnome.org/">Gnome</a> genutzt habe (&#8220;Ubuntu Classic&#8221;).</p>
<p><span id="more-345"></span>Das Upgrade lief bis kurz vor Ende reibungslos, dann meldete der Update-Manager Probleme mit dem <strong>Flash</strong> Plugin-Installer (ein Schelm, wer Böses dabei denkt). Eventuell lag es daran, dass während der Installation die Verbindung zum WLAN getrennt worden ist. Jedenfalls schloss der Installationsvorgang mit einem Fehlerreport bzgl. des Flash-Installers ab und führte den Aufräumen-Schritt nicht mehr aus. Auf das Senden eines Problemberichts musste ich aufgrund der fehlenden Verbindung zum WLAN verzichten. Ich konnte diese auch nicht mehr vor dem Neustart wiederherstellen.</p>
<p>Nach einem Reboot startete ich direkt danach wieder den Update-Manager, der mir mitteilte, dass eine vorher stattgefundene Installation nicht vollständig abgeschlossen werden konnte. Richtig &#8211; aber wenig beruhigend. Der Update-Manager installierte und entfernte dann einige Pakate erfolgreich &#8211; ein neuerliches Aufrufen zeigte einen bekannten und erfreulichen Zustand: &#8220;Es gibt keine Aktualisierungen, die installiert werden können&#8221;. Ende gut, alles gut? Ob das erwähnte Entfernen von Paketen äquivalent zum Aufräumen-Schritt des Aktualisierungsvorgangs war, bleibt jedenfalls unklar.</p>
<p>Folgende Maßnahme werde ich vor einer nächsten Aktualisierung vornehmen: Deinstallation der Pakete <code>flashplugin-installer</code> und <code>flashplugin-downloader</code></p>
<p>Der Launcher macht direkt einen wesentlich besseren Eindruck, er reagiert umgehend auf Maussteuerung (&#8220;Berühren&#8221; des linken Bildschirmrands) und verschwindet auch schnell wieder. Vertikales Scrollen funktioniert reibungslos. Das wirkt insgesamt wirklich flüssig(er) auf meiner Hardware* als noch in 11.04. Das Einblenden über die <code>Meta</code>- alias <code>Windows</code>-Taste scheint mir allerdings die effizientere Methode.</p>
<p>Die Auswahl an mitgelieferten <em>Themes</em> ist sehr reduziert, <em>Human</em> wird nicht mehr default angeboten (überhaupt noch?), Standard ist <em>Ambiance</em>. Damit kann ich mich arrangieren; es wirkt insgesamt konsistent. Völlig unsinnig, da <strong>in</strong>konsistent, ist die wechselnde Positionierung der Buttons zur Fensterkontrolle (Maximieren, Minimieren, Schließen). Im Max-Modus befinden sie sich <strong>links</strong>, im Größen-angepassten Modus <strong>rechts</strong>. Über die Unsinnigkeit des Wechsels auf die linke Seite hatte sich seinerzeit Alexander Johannesen <a href="http://shelterit.blogspot.com/2011/05/ubuntu-1104-disaster-fear-loathing-all.html">deutlich geäußert</a>.</p>
<p>Was mir fehlt, ist das einfache Erstellen von Startern und das Hinzufügen in den Launcher, also Rechtsclick auf den Desktop -&gt; Starter erstellen und per <em>Drag and Drop</em> auf den Launcher ziehen. Der Desktop heißt im übrigen auch wieder &#8220;Desktop&#8221;, nicht mehr &#8220;Arbeitsfläche&#8221;. Hoffentlich bleibt es jetzt dabei. Ebenso fehlt die Möglichkeit, Mini-Apps wie eine Temperaturanzeige Panels hinzuzufügen bzw. dort anzulegen.</p>
<h2>Hände weg vom CompizConfig Settings Manager</h2>
<p>&#8230; jedenfalls, wenn man ein ganz normaler User ist wie ich, der einfach einmal etwas ausprobiert (ja, RTFM &#8211; beim nächsten Mal). Die Veränderung von 2-3 Einstellungen zu Fenstereffekten im ansehnlichen GUI ließ den Desktop einfrieren. Das ist inakzeptabel und hat auch nichts damit zu tun, vorher Anleitungen gelesen oder nicht gelesen zu haben. Nach einem forcierten Neustart waren Launcher und Top-Panel verschwunden. <code>unity --reset</code> und <code>unity --reset-icons</code> brachten keine erfolgreiche Rekonstruktion, so dass ich zu &#8220;Ubuntu 2D&#8221; wechseln musste. Ärgerlich.</p>
<p><strong>Fazit</strong> bis dato: Unity ist besser geworden, ist aber meines Erachtens deshalb noch nicht ausgereift, weil die genannten nützlichen Features fehlen und die wechselnde Links-Rechts-Positionierung der Fensterkontrolle ein echter Usablity-Bug ist. Speziell die Individualisierungsmöglichkeit des Desktops ist heute eine klare Erwartung. Das Hin und Her zwischen &#8220;Desktop&#8221; und Arbeitsfläche&#8221; ist auch nicht gerade Ausdruck einer klaren Idee &#8211; jedenfalls im Localization-Team. Dass ich von nun an Unity verwende, ist nicht sicher. Eventuell bleibt es bei der Nutzung von Gnome (jetzt in Version 3.2). Bei allem Gemecker zu letztendlich Kleinigkeiten, die den Desktop betreffen, muss ich aber wieder betonen, dass es großartig ist, dass es Linux, Ubuntu und all die anderen Distributionen gibt. Danke dafür!</p>
<p>p.s. Wer einen ersten Eindruck vom <em>Look and Feel</em> gewinnen möchte, sollte sich einfach <a href="http://www.ubuntu.com/tour/">http://www.ubuntu.com/tour/</a> anschauen.</p>
<p>* Thinkpad T61 14&#8243;, 2GB RAM, Intel® Centrino® T8300 Duo @ 2,4GHz, Nvidia Quadro NVS 140M</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.t8d.de/2011/10/16/erster-eindruck-von-ubuntu-11-10-oneiric-ocelot/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Reflexive vs. irreflexive relations in the Topic Maps Reference Model</title>
		<link>http://blog.t8d.de/2011/10/09/reflexive-vs-irreflexive-relations-in-tmrm/</link>
		<comments>http://blog.t8d.de/2011/10/09/reflexive-vs-irreflexive-relations-in-tmrm/#comments</comments>
		<pubDate>Sun, 09 Oct 2011 21:12:35 +0000</pubDate>
		<dc:creator>Johannes Schmidt</dc:creator>
				<category><![CDATA[culture]]></category>
		<category><![CDATA[Topic Maps]]></category>

		<guid isPermaLink="false">http://blog.t8d.de/?p=338</guid>
		<description><![CDATA[Fall has come, and the Topic Maps community shows some signs of life.]]></description>
			<content:encoded><![CDATA[<p>Fall has come, and the Topic Maps community shows some <a href="http://www.infoloom.com/pipermail/topicmapmail/2011q4/009166.html">signs of life</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.t8d.de/2011/10/09/reflexive-vs-irreflexive-relations-in-tmrm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QuaaxTM 0.7.0 insights</title>
		<link>http://blog.t8d.de/2011/09/05/quaaxtm-0-7-0-insights/</link>
		<comments>http://blog.t8d.de/2011/09/05/quaaxtm-0-7-0-insights/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 20:51:41 +0000</pubDate>
		<dc:creator>Johannes Schmidt</dc:creator>
				<category><![CDATA[memcached]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[PHPTMAPI]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[TMAPI]]></category>
		<category><![CDATA[Topic Maps]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://blog.t8d.de/?p=306</guid>
		<description><![CDATA[Few days ago I have released version 0.7.0 of the PHP Topic Maps engine QuaaxTM which supports ISO/IEC 13250-2 Topic Maps Data Model. Two main aspects have been considered in this iteration: Increase of code coverage in the unit tests (quality aspect) Introduction of a memcached based MySQL result cache (performance aspect) The code coverage ratio [...]]]></description>
			<content:encoded><![CDATA[<p>Few days ago I have released version 0.7.0 of the <a href="http://quaaxtm.sourceforge.net/">PHP Topic Maps engine QuaaxTM</a> which supports <a href="http://www.isotopicmaps.org/sam/sam-model/">ISO/IEC 13250-2 Topic Maps Data Model</a>. Two main aspects have been considered in this iteration:</p>
<ol>
<li>Increase of code coverage in the unit tests (quality aspect)</li>
<li>Introduction of a <a href="http://memcached.org/">memcached</a> based MySQL result cache (performance aspect)</li>
</ol>
<p><span id="more-306"></span></p>
<p>The code coverage ratio (and IMO the lines coverage ratio is the crucial one) is a core KPI in unit testing. A perfect scenario provides 100% successful tests <em>touching</em> 100% of the lines of the tested code (assuming the tests are written seriously). The tool of choice in PHP is <a href="https://github.com/sebastianbergmann/php-code-coverage">PHP_CodeCoverage</a> maintained by <a href="http://sebastian-bergmann.de/">Sebastian Bergmann</a>. Sebastian is also the creator of <a href="https://github.com/sebastianbergmann/phpunit/">PHPUnit</a>. It&#8217;s no surprise that both tools integrate seamlessly. In order to generate an HTML code coverage report while running PHPUnit tests just pass option <code>--coverage-html</code> followed by the target location where you want to store the report files.</p>
<p>I have published the code coverage report generated while running QuaaxTM&#8217;s <code>tests/AllTests.php</code> on the project&#8217;s homepage: <a href="http://quaaxtm.sourceforge.net/report/index.html">http://quaaxtm.sourceforge.net/report/index.html</a>. The total lines coverage ratio is 97.27%, and it is 98.30% for the <code>src</code> directory where the Topic Maps constructs implementations such as <code>TopicImpl</code> or <code>TopicMapsImpl</code> are located.</p>
<p>Why the ratio is not 100%? For several reasons; the most important ones explained in the following:</p>
<ol>
<li>The <code>abstract</code> root class <code>ConstructImpl</code> for example defines a lot of <em>method stubs</em> declared as <code>protected</code>, e.g. see <a href="http://quaaxtm.sourceforge.net/report/src_phptmapi_core_ConstructImpl.class.php.html#771">ConstructImpl::_hasVariant()</a>. The actual implementation is located in <code>NameImpl::_hasVariant()</code>. Having the <code>protected</code> stubs in <code>ConstructImpl</code> allows function calls from any Topic Maps construct implementation (as all of them extend <code>ConstructImpl</code>) &#8211; but not from outside! The tradeoff is that none of those stubs is touched in the unit tests. As <code>ConstructImpl</code> is an <code>abstract</code> class only creating a mock object which extends <code>ConstructImpl</code> would allow testing those stubs. However, what&#8217;s the value of having successful <code>assertNull</code>&#8216;s here?</li>
<li><code>Private</code> constructors in helper classes <a href="http://quaaxtm.sourceforge.net/report/src_utils_CharacteristicUtils.class.php.html">CharacteristicUtils</a> and <a href="http://quaaxtm.sourceforge.net/report/src_utils_VocabularyUtils.class.php.html">VocabularyUtils</a> basically cannot be accessed.</li>
<li>Further, certain edge case exceptions are not triggered (e.g. the unsuccessful execution of a <code>START TRANSACTION</code> statement in class <code>Mysql</code>) &#8211; and it seems that PHP_CodeCoverage has still some minor bugs: E.g. I really cannot explain why the closing brace in <code><a href="http://quaaxtm.sourceforge.net/report/src_phptmapi_core_ScopedImpl.class.php.html#278">ScopedImpl::_getBindingTable()</a></code> remains untouched.</li>
</ol>
<p>The main new feature in version 0.7.0 is the memcached based QuaaxTM MySQL result cache. It&#8217;s a common server side caching practice to store MySQL result data in memcached in order to return that data from RAM for a specified period &#8211; and thus avoid database reads. If the caching period has expired data will be fetched from MySQL and stored in memcached again. In QuaaxTM <code>Mysql::_get()</code> provides this <em>storage gateway</em> (enhanced for unit tests in <code>MysqlMock::_get()</code>). Interestingly Amazon has recently annonced <em>ElastiCache</em> &#8220;<a href="http://aws.typepad.com/aws/2011/08/amazon-elasticache-distributed-in-memory-caching.html">[...] a distributed, in-memory cache that can be accessed using the popular Memcached protocol.</a>&#8220;.</p>
<p>Result caching has to meet two conditions:</p>
<p>1) The cache has to be <strong>enabled</strong>. The result cache is implemented as a (PHP)<a href="http://tmapi.org/features/">TMAPI feature</a> and therefore is simply enabled by passing the specific feature string &#8220;http://quaaxtm.sourceforge.net/features/result-cache/&#8221; &#8211; a URI &#8211; as first parameter and the Boolean <code>true</code> as second parameter in <code>TopicMapSystemFactory::setFeature()</code>. Consequently, set <code>false</code> to disable the feature.</p>
<p>2) Using the result cache has to be <strong>allowed. </strong>Just enabling the cache and &#8211; once cached &#8211; letting the <em>getters</em> return data from memcached will cause serious problems in <a href="http://www.isotopicmaps.org/sam/sam-model/#sect-merging">merging</a> procedures as some of those <em>getters</em> are also used in <code>TopicImpl::mergeIn()</code> and/or <code>TopicMapImpl::mergeIn()</code>. If data has been updated on database level since caching time this will result in corrupt Topic Maps data as the result cache won&#8217;t be updated or invalidated on database updates (static caching). In order to avoid complex and therefore error-prone status setting (<em>regular</em> vs. <em>merging</em>) I decided to introduce an internal API to establish sound caching control. Let&#8217;s have a look at the following example in <code>AssociationImpl</code> (represents an <a href="http://www.isotopicmaps.org/sam/sam-model/#sect-association">association</a>):</p>
<p><code>public function getRoles(Topic $type=null)<br />
{<br />
return $this-&gt;_getRoles($type, true);// set result cache permission to true<br />
}</code></p>
<p><code>protected function _getRoles(Topic $type=null, $resultCacheAllowed=false)<br />
{<br />
// code goes here<br />
}</code></p>
<p>The <code>public AssociationImpl::getRoles()</code> &#8211; required by <a href="http://phptmapi.sourceforge.net/">PHPTMAPI</a> &#8211; represents the external API while the <code>protected AssociationImpl::_getRoles()</code> represents the internal one. Obviously, _getRoles() is used in merging procedures or any QuaaxTM internal operations which just let parameter <code>$resultCacheAllowed</code> having the default value <code>false</code> (by &#8211; again &#8211; defining <code>_getRoles()</code> in <code>ConstructImpl</code> as <code>protected</code> method stub all extending classes can access this function).</p>
<p>Currently, the result cache is only implemented in <code>AssociationImpl::getRoles()</code>, <code>AssociationImpl::getRoleTypes()</code>, and <code>TopicMapImpl::getAssociations()</code>. Rollout is on the roadmap. However, it is not necessary to implement the result cache in all PHPTMAPI-<em>getters</em> as most of the Topic Maps constructs implementations come with a <em>property holder</em> which serves as a runtime cache. The implementation rule was that if a construct property is represented in the construct representing database table the <em>property holder</em> will be implemented. The <em>property holder</em> e.g. holds the literal values of an <a href="http://www.isotopicmaps.org/sam/sam-model/#sect-occurrence">occurrence</a> and is passed in the constructors. This means that after having constructed <code>OccurrenceImpl</code>s via <code>TopicImpl::getOccurrences() OccurrenceImpl::getValue()</code> won&#8217;t require a database read but will return the value from the <em>property holder</em>. Updates on properties have effect on both layers, database and <em>property holder</em> (dynamic caching).</p>
<p>The following cache scenario holds for associations now:</p>
<ol>
<li><code>TopicMapImpl::getAssociations()</code> will return the associations data from memcached after initial retrieval from database</li>
<li><code>AssociationImpl::getRoles()</code> will also return the <a href="http://www.isotopicmaps.org/sam/sam-model/#sect-assoc-role">association roles</a> data from memcached after initial retrieval from database</li>
<li><code>RoleImpl::getPlayer()</code> and <code>RoleImpl::getType()</code> then will fetch the needed data for constructing the respective <code>TopicImpl</code> from the <em>property holder</em></li>
</ol>
<p>A second call for <code>TopicMapImpl::getAssociations()</code> in runtime won&#8217;t even require memcached access. Initially retrieved data will also be stored in a class member and then returned from that runtime cache. The same caching feature is implemented in <code>TopicMapImpl::getTopics()</code>. Cache invalidation is available for both caches (semi-dynamic caching).</p>
<p>Both efforts, increasing the code coverage in the unit tests as well as introducing a server side caching layer using a widespread mature technology like memcached have pushed QuaaxTM another step towards becoming a serious Topic Maps engine for production environments on the <a href="https://secure.wikimedia.org/wikipedia/en/wiki/LAMP_(software_bundle)">LAMP</a> stack. Stay tuned.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.t8d.de/2011/09/05/quaaxtm-0-7-0-insights/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Eclipse Workspace wiederherstellen inklusive SVN</title>
		<link>http://blog.t8d.de/2011/06/26/eclipse-workspace-wiederherstellen-inklusive-svn/</link>
		<comments>http://blog.t8d.de/2011/06/26/eclipse-workspace-wiederherstellen-inklusive-svn/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 21:39:53 +0000</pubDate>
		<dc:creator>Johannes Schmidt</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[programmierung]]></category>

		<guid isPermaLink="false">http://blog.t8d.de/?p=297</guid>
		<description><![CDATA[Eclipse meldete mir eben nach dem Start eine Exception mit der Meldung &#8220;Keybinding conflicts occurred. They may interfere with normal accelerator operation. [...]&#8221; &#8211; und der Projekteexplorer blieb leer. Ein Albtraum. Mit folgendem Vorgehen konnte ich meinen Workspace inkl. SVN wiederherstellen: In den Metadatenordner der Projekte wechseln: cd workspace/.metadata/.plugins/ Alle Metadaten der Projekte entfernen: rm [...]]]></description>
			<content:encoded><![CDATA[<p>Eclipse meldete mir eben nach dem Start eine Exception mit der Meldung &#8220;Keybinding conflicts occurred. They may interfere with normal accelerator operation. [...]&#8221; &#8211; und der Projekteexplorer blieb leer. Ein Albtraum.</p>
<p>Mit folgendem Vorgehen konnte ich meinen Workspace inkl. SVN wiederherstellen:</p>
<ol>
<li>In den Metadatenordner der Projekte wechseln: <code>cd workspace/.metadata/.plugins/</code></li>
<li>Alle Metadaten der Projekte entfernen: <code>rm -rf org.eclipse.core.resources/</code> (via <a href="http://letsgetdugg.com/2009/04/19/recovering-a-corrupt-eclipse-workspace/">http://letsgetdugg.com/2009/04/19/recovering-a-corrupt-eclipse-workspace/</a>)</li>
<li>Projekte <strong>einzeln</strong> über <em>File -&gt; Import -&gt; Existing Projects into Workspace</em> importieren (via <a href="http://forum.ubuntuusers.de/topic/eclipse-svn-subversive-import-existing-projec/#post-2485358">http://forum.ubuntuusers.de/topic/eclipse-svn-subversive-import-existing-projec/#post-2485358</a>).</li>
</ol>
<p>Auch Projekte unter Versionskontrolle mit SVN können danach wieder einwandfrei bearbeitet und mit dem Repository synchronisiert werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.t8d.de/2011/06/26/eclipse-workspace-wiederherstellen-inklusive-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mapping the Topic Maps Data Model to Redis</title>
		<link>http://blog.t8d.de/2011/04/13/mapping-the-topic-maps-data-model-to-redis/</link>
		<comments>http://blog.t8d.de/2011/04/13/mapping-the-topic-maps-data-model-to-redis/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 20:50:36 +0000</pubDate>
		<dc:creator>Johannes Schmidt</dc:creator>
				<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[PHPTMAPI]]></category>
		<category><![CDATA[Redis]]></category>
		<category><![CDATA[TMAPI]]></category>
		<category><![CDATA[Topic Maps]]></category>

		<guid isPermaLink="false">http://blog.t8d.de/2011/04/13/mapping-the-topic-maps-data-model-to-redis/</guid>
		<description><![CDATA[I found some time to just do a mapping of the Topic Maps Data Model to Redis schema. See the public Google doc titled &#8220;Yet another mapping of the Topic Maps Data Model to Redis schema&#8221; including some words about my inspiration as well as my motivation.]]></description>
			<content:encoded><![CDATA[<p>I found some time to <em>just do</em> a mapping of the Topic Maps Data Model to Redis schema. See the public Google doc titled &#8220;<a href="https://docs.google.com/document/d/14gm0E2-ws8U6zyLo0jXpJhfu0EUBUuPLEraIEEUrqy8/edit">Yet another mapping of the Topic Maps Data Model to Redis schema</a>&#8221; including some words about my inspiration as well as my motivation.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.t8d.de/2011/04/13/mapping-the-topic-maps-data-model-to-redis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QuaaxTM 0.6.1 released</title>
		<link>http://blog.t8d.de/2011/04/01/quaaxtm-061-released/</link>
		<comments>http://blog.t8d.de/2011/04/01/quaaxtm-061-released/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 14:54:11 +0000</pubDate>
		<dc:creator>Johannes Schmidt</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[PHPTMAPI]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Topic Maps]]></category>

		<guid isPermaLink="false">http://blog.t8d.de/2011/04/01/quaaxtm-061-released/</guid>
		<description><![CDATA[I have released version 0.6.1 of the PHP Topic Maps engine QuaaxTM. See the changes log and download here.]]></description>
			<content:encoded><![CDATA[<p>I have released version 0.6.1 of the PHP Topic Maps engine <a href="http://quaaxtm.sourceforge.net/">QuaaxTM</a>. See the <a href="http://quaaxtm.sourceforge.net/CHANGES.txt">changes log</a> and download <a href="http://sourceforge.net/projects/quaaxtm/files/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.t8d.de/2011/04/01/quaaxtm-061-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QuaaxTM 0.6.0 released</title>
		<link>http://blog.t8d.de/2011/01/19/quaaxtm-060-released/</link>
		<comments>http://blog.t8d.de/2011/01/19/quaaxtm-060-released/#comments</comments>
		<pubDate>Wed, 19 Jan 2011 19:52:47 +0000</pubDate>
		<dc:creator>Johannes Schmidt</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[PHPTMAPI]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Topic Maps]]></category>

		<guid isPermaLink="false">http://blog.t8d.de/2011/01/19/quaaxtm-060-released/</guid>
		<description><![CDATA[Version 0.6.0 of the PHP Topic Maps engine QuaaxTM has been released. See the changes log for what&#8217;s new and download at sourceforge.]]></description>
			<content:encoded><![CDATA[<p>Version 0.6.0 of the PHP Topic Maps engine <a href="http://quaaxtm.sourceforge.net/">QuaaxTM</a> has been released. See the <a href="http://quaaxtm.sourceforge.net/CHANGES.txt">changes log</a> for what&#8217;s new and <a href="http://sourceforge.net/projects/quaaxtm/files/">download at sourceforge</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.t8d.de/2011/01/19/quaaxtm-060-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

