<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>TYPO3 FLYERS</title>
	<atom:link href="http://t3flyers.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://t3flyers.wordpress.com</link>
	<description>A programmer's log</description>
	<lastBuildDate>Thu, 29 Nov 2007 09:02:00 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='t3flyers.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/d988f71f34884c656cf82e18ab202eaf?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>TYPO3 FLYERS</title>
		<link>http://t3flyers.wordpress.com</link>
	</image>
			<item>
		<title>Web GUI: New Testcase Runners For PHPUnit From Sebastian Bergmann</title>
		<link>http://t3flyers.wordpress.com/2007/11/11/web-gui-new-testcase-runners-for-phpunit-from-sebastian-bergmann/</link>
		<comments>http://t3flyers.wordpress.com/2007/11/11/web-gui-new-testcase-runners-for-phpunit-from-sebastian-bergmann/#comments</comments>
		<pubDate>Sun, 11 Nov 2007 16:12:41 +0000</pubDate>
		<dc:creator>Elmar</dc:creator>
				<category><![CDATA[cms]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[ect]]></category>
		<category><![CDATA[informatics]]></category>
		<category><![CDATA[phpunit]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[typo3]]></category>
		<category><![CDATA[bergmann]]></category>
		<category><![CDATA[cool]]></category>
		<category><![CDATA[elmar]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[runner]]></category>
		<category><![CDATA[sebastian]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[unit]]></category>
		<category><![CDATA[xunit]]></category>

		<guid isPermaLink="false">http://t3flyers.wordpress.com/2007/11/11/web-gui-new-testcase-runners-for-phpunit-from-sebastian-bergmann/</guid>
		<description><![CDATA[A few days ago I uploaded a webbased GUI for PHPUnit from Sebastian Bergmann to sourceforge. as part of the Cool project. I use it myself very intensively and it could be very useful for others as well. But oh, the download statistic is pretty bad. Time to blog about it and some other pulsating [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=32&subd=t3flyers&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A few days ago I uploaded a <a href="http://cool.sourceforge.net">webbased GUI for PHPUnit</a> from Sebastian Bergmann to sourceforge. as part of the Cool project. I use it myself very intensively and it could be very useful for others as well. But oh, the download statistic is pretty bad. Time to blog about it and some other pulsating evolutions.</p>
<p>The cool address is <a href="http://cool.sf.net">http://cool.sf.net</a>.</p>
<p>PHPUnit is the standard for unit testing with PHP. It runs pretty well on command line as well as in continous integration environments. The documentation from Sebastian Bergman is excellent and freely available. But pretty GUIs for it are still rare. </p>
<p>The address of PHPUnit: <a href="http://phpunit.de">http://phpunit.de</a></p>
<p>Robert Lemke did a first approach to bring up a GUI as a T3 extension, with some interesting concepts. But it was still a little difficult to work with it. Now <a href="http://www.daimi.au.dk/~ligaard/2007/10/18/typo3-ect-effort-extension-coordination-team/">Kasper Ligaard</a> from Denmark did a big job to improve Roberts extension and the result is very promising. </p>
<p>The extension key is <a href="http://typo3.org/extensions/repository/view/phpunit/">phpunit</a>.</p>
<p><a href="http://www.patchworking.de/">Daniel Brüßler</a> from Germany assisted by improving the PEAR installer extension, so that you can easily update PHPUnit via PEAR channel, as often as a new version has been released.</p>
<p>The extension key is <a href="http://typo3.org/extensions/repository/view/pear/">PEAR</a>.</p>
<p>Mario Rimann and Oliver Klee stepped ahead an <a href="http://blog.rimann.org/de/einzelansicht/archive/2007/october/31/introducint_unit_testing_for_the_seminar_manager/index.htm">improved the quality of the Seminar Manager extension by unit testing</a>.</p>
<p>I hope we will see more well tested TYPO3 extensions in future. </p>
<p>To have a nice GUI available also outside the world of TYPO3 I migrated the Ideas of Robert and Kasper to <a href="http://cool.sf.net">PHPUnit_CoolUI</a>. Another source inspiration is<br />
<a href="http://www.defusion.org.uk/code/phpunit2-html-runner/ ">PHPUnit2 HTML Runner</a> from Dave Spurr (UK). Unfortunately it depends on an older version of PHPUnit, so that I didn&#8217;t get it running.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/t3flyers.wordpress.com/32/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/t3flyers.wordpress.com/32/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/t3flyers.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/t3flyers.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/t3flyers.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/t3flyers.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/t3flyers.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/t3flyers.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/t3flyers.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/t3flyers.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/t3flyers.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/t3flyers.wordpress.com/32/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=32&subd=t3flyers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://t3flyers.wordpress.com/2007/11/11/web-gui-new-testcase-runners-for-phpunit-from-sebastian-bergmann/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3d5a8262ec3887a1057901668a7c348?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Elmar</media:title>
		</media:content>
	</item>
		<item>
		<title>Report: Phing &#8211; Don&#8217;t repeat yourself</title>
		<link>http://t3flyers.wordpress.com/2007/11/05/report-phing-dont-repeat-yourself/</link>
		<comments>http://t3flyers.wordpress.com/2007/11/05/report-phing-dont-repeat-yourself/#comments</comments>
		<pubDate>Mon, 05 Nov 2007 15:59:02 +0000</pubDate>
		<dc:creator>Elmar</dc:creator>
				<category><![CDATA[docutils]]></category>
		<category><![CDATA[doxygen]]></category>
		<category><![CDATA[ect]]></category>
		<category><![CDATA[lib/div]]></category>
		<category><![CDATA[phing]]></category>
		<category><![CDATA[report]]></category>
		<category><![CDATA[restructuredtext]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[typo3]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://t3flyers.wordpress.com/2007/11/05/report-phing-dont-repeat-yourself/</guid>
		<description><![CDATA[DRY,
Don&#8217;t Repeat Yourself (DRY, also known as Once and Only Once or Single Point of Truth (SPOT)) is a process philosophy aimed at reducing duplication, particularly in computing. The philosophy emphasizes that information should not be duplicated, because duplication increases the difficulty of change, may decrease clarity, and leads to opportunities for inconsistency. DRY is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=31&subd=t3flyers&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>DRY,</p>
<p>Don&#8217;t Repeat Yourself (DRY, also known as Once and Only Once or Single Point of Truth (SPOT)) is a process philosophy aimed at reducing duplication, particularly in computing. The philosophy emphasizes that information should not be duplicated, because duplication increases the difficulty of change, may decrease clarity, and leads to opportunities for inconsistency. DRY is a core principle of Andy Hunt and Dave Thomas&#8217;s book The Pragmatic Programmer. [0]</p>
<p>[0] Wikipedia: <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself/">http://en.wikipedia.org/wiki/Don%27t_repeat_yourself/</a></p>
<p><span id="more-31"></span></p>
<p>Before searching for a way to, apply Phing [1] to T3 extensions I tested it in a small independent project (<em>PHPUnit_CoolUI</em> [2]), that I could configure as I pleased. And it was indeed a pleasure. After having learned and integrated <em>Doxygen</em> [3], <em>Docutils</em> [4] and <em>Phing</em> I was able to process a full new release with one click. Editing, updating the source files, INSTALL, README, TODO, FeatureRequests, ChangeLog, etc. with version and path informations. Including a lot of this informations automatically into the manual and finally packing it all to a tarball for release. </p>
<p>DRY, this self-evident principle is not always that simple to meet and far away from beeing systematically applied within TYPO3. Just the opposit. It&#8217;s hard to publish a clean extension, that respects all coding guidelines, because you have to place the same information into different places repeatedly for each release.</p>
<p>Take the <em>changelog</em> as example. There is a <em>ChangeLog</em> file in the extension. The <em>changelog</em> information should be appended to the manual and also pasted into the upload form to TER to be displayed on typo3.org. It&#8217;s similar for the <em>TODO</em>. The current <em>version number</em> should ideally be added to all class files, that have been altered and nearly in every involved file and document. </p>
<p>Well, there are solutions. <em>CVS</em> [5] and <em>SVN</em> [6] can automatically update version markers in the sources. API generator tools can apply version informations to the generated API, that is configured in the configuration. Document generators offer markup for automatic insertion of informations like version strings. All this can simplify the maintainance of software, but you still have to manually maintain the configuration files of the different tools to set the current properties.</p>
<p>Another step is needed, to autoupdate the differnt configuration files and to run and controll the generators and tools efficiently. Nothing special, no need to reinvent the wheel. Programming of compiled languages like C or Java can&#8217;t be done efficiantly without a tool for this kind of stuff. There are different Makes [7] for C, C++ there is Ant [8] for Java. Certainly you could write simple shell scripts to reach similar targets or use a scripting language like PHP. </p>
<p>PHP doesn&#8217;t need to be compiled and the project management automatisms can be coded in PHP themself. Reasons why tools like Ant havn&#8217;t been available for PHP early. However, since a few years Phing is availble implementing conceptions of Ant for PHP. </p>
<p>Setting up a development environment with Phing may sound oversized for a little freelancer developing a small TYPO3 extension. In the moment you want to maintain a public open source product over multiple versions, with user and admin documentation, with licences, maybe with a website, such an environment becomes extremly handy. Not to speak of a bigger project team<br />
with multiple persons. </p>
<p>What system do you use? </p>
<p>Should we set up such an environment for extension development for example by enhancement of the extdev extension?</p>
<p>What tools would you recommend to include?</p>
<p>[1] Phing: <a href="http://phing.info/docs/guide/current/">http://phing.info/docs/guide/current/</a><br />
[2] PHPUnit_CoolUI: <a href="http://cool.sourceforge.net/">http://cool.sf.net</a><br />
[3] Doygen: <a href="http://www.stack.nl/~dimitri/doxygen/">http://www.stack.nl/~dimitri/doxygen/</a><br />
[4] Docutils: <a href="http://docutils.sourceforge.net/">http://docutils.sourceforge.net/</a><br />
[5] CVS: <a href="http://www.nongnu.org/cvs/">http://www.nongnu.org/cvs/</a><br />
[6] SVN: <a href="http://subversion.tigris.org/">http://subversion.tigris.org/</a><br />
[7] Make: <a href="http://www.gnu.org/software/make/manual/html_node/index.html">http://www.gnu.org/software/make/manual/html_node/index.html</a><br />
[8] Ant: <a href="http://ant.apache.org/manual/index.html">http://ant.apache.org/manual/index.html</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/t3flyers.wordpress.com/31/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/t3flyers.wordpress.com/31/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/t3flyers.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/t3flyers.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/t3flyers.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/t3flyers.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/t3flyers.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/t3flyers.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/t3flyers.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/t3flyers.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/t3flyers.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/t3flyers.wordpress.com/31/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=31&subd=t3flyers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://t3flyers.wordpress.com/2007/11/05/report-phing-dont-repeat-yourself/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3d5a8262ec3887a1057901668a7c348?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Elmar</media:title>
		</media:content>
	</item>
		<item>
		<title>Report: Resize a Logical Volume on Ubuntu Feisty upon upgrade to Gutsy Gibbon</title>
		<link>http://t3flyers.wordpress.com/2007/10/13/report-resize-a-logical-volume-on-ubuntu-feisty/</link>
		<comments>http://t3flyers.wordpress.com/2007/10/13/report-resize-a-logical-volume-on-ubuntu-feisty/#comments</comments>
		<pubDate>Sat, 13 Oct 2007 15:18:51 +0000</pubDate>
		<dc:creator>Elmar</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[lvm]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://t3flyers.wordpress.com/2007/10/13/report-resize-a-logical-volume-on-ubuntu-feisty/</guid>
		<description><![CDATA[Today I upgrade from Ubuntu 7.04 (Feisty Fawn) to the release candidate of Ubuntu 7.10 (Gutsy Gibbon). During the update the logical volume /usr comes to it&#8217;s limits. I need to add 1 GB of diskspace. It&#8217;s a reiserfs. I should be able to extend the running mounted volume.
The overall steps are 3

Backup first
Extending the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=30&subd=t3flyers&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Today I upgrade from Ubuntu 7.04 (Feisty Fawn) to the release candidate of Ubuntu 7.10 (Gutsy Gibbon). During the update the logical volume <em>/usr</em> comes to it&#8217;s limits. I need to add 1 GB of diskspace. It&#8217;s a reiserfs. I should be able to extend the running mounted volume.</p>
<p><strong>The overall steps are 3</strong></p>
<ol>
<li>Backup first</li>
<li>Extending the logical volume</li>
<li>Extending the filesystem on the volume</li>
</ol>
<p><span id="more-30"></span><br />
<strong>Extending the logical volume</strong></p>
<p>Show the current state of the logical volums.</p>
<p><em>lvdisplay</em> </p>
<p>To extend the logical volume by one GB is simple. <em>lvm help</em> leads to the required parameters.</p>
<p><em>lvresize -L +1G /dev/uvg/usr</em></p>
<p>With the -t Parameter I can run a test before.</p>
<p><em>lvresize -t -L +1G /dev/uvg/usr</em></p>
<p><strong>Extending the filesystem on the volume</strong></p>
<p>To resize the reiserfs to the full new size of the logical volume is still more simple.</p>
<p><em>resize_reiserfs /dev/uvg/usr</em></p>
<p>Displaying the success.</p>
<p><em>lvdisplay</em> </p>
<p><strong>Troubleshouting</strong></p>
<p>After extending the logical volume I can&#8217;t run the command resize_reiserfs as expected because the &#8216;/dev/uvg/usr&#8217; is not found any more. The moment of panic. Good if you have a backup. But I don&#8217;t need it. A little search in the Web brings me to a solution.</p>
<p><em>dmsetup mknodes  </em></p>
<p>This lowlevel command rebuilds the lost mappings of pathes and devices and everything runs fine again.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/t3flyers.wordpress.com/30/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/t3flyers.wordpress.com/30/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/t3flyers.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/t3flyers.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/t3flyers.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/t3flyers.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/t3flyers.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/t3flyers.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/t3flyers.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/t3flyers.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/t3flyers.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/t3flyers.wordpress.com/30/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=30&subd=t3flyers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://t3flyers.wordpress.com/2007/10/13/report-resize-a-logical-volume-on-ubuntu-feisty/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3d5a8262ec3887a1057901668a7c348?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Elmar</media:title>
		</media:content>
	</item>
		<item>
		<title>Report: Expandable Controller of Lib/Div</title>
		<link>http://t3flyers.wordpress.com/2007/09/07/report-expandable-controller-of-libdiv/</link>
		<comments>http://t3flyers.wordpress.com/2007/09/07/report-expandable-controller-of-libdiv/#comments</comments>
		<pubDate>Fri, 07 Sep 2007 08:10:37 +0000</pubDate>
		<dc:creator>Elmar</dc:creator>
				<category><![CDATA[cms]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[ect]]></category>
		<category><![CDATA[lib/div]]></category>
		<category><![CDATA[typo3]]></category>

		<guid isPermaLink="false">http://t3flyers.wordpress.com/2007/09/07/report-expandable-controller-of-libdiv/</guid>
		<description><![CDATA[yesterday I had the first opportunity to test the expandable controller
feature of lib. To remember: It&#8217;s a way to register an additional
collection of action methods to an existing controller class, either from
within the same extension or from a foreign one.

My current extension has a single plugin controller class with already many,
many actions. No I needed [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=28&subd=t3flyers&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>yesterday I had the first opportunity to test the expandable controller<br />
feature of lib. To remember: It&#8217;s a way to register an additional<br />
collection of action methods to an existing controller class, either from<br />
within the same extension or from a foreign one.</p>
<p><span id="more-28"></span></p>
<p>My current extension has a single plugin controller class with already many,<br />
many actions. No I needed to extend the functionality by another table and<br />
form. Because the main controller is already very large I decided to<br />
encapsulate the new set of actions into a separate class. First praxis test<br />
of the expandable controller.</p>
<p>It didn&#8217;t run out of the box and I started to debug. It turned out, that<br />
additional controller class needs to be included before calling it by the<br />
main controller. Well, that may sound logical, but I didn&#8217;t. There was no<br />
error message, the registered controller simply was ignored. That made<br />
debugging difficult. The smart solution would be to autoinclude the<br />
registered controllers in the main controller. I need to file a bug report.</p>
<p>I included the additional controller in ext_localconf.php. Now everything is<br />
running well. It really seems to be a very smart solution, comparing<br />
projects in the past, where a needed to overwrite large switch-case<br />
constructs in multiple layers, each time for every extension of the<br />
extension.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/t3flyers.wordpress.com/28/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/t3flyers.wordpress.com/28/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/t3flyers.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/t3flyers.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/t3flyers.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/t3flyers.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/t3flyers.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/t3flyers.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/t3flyers.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/t3flyers.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/t3flyers.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/t3flyers.wordpress.com/28/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=28&subd=t3flyers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://t3flyers.wordpress.com/2007/09/07/report-expandable-controller-of-libdiv/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3d5a8262ec3887a1057901668a7c348?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Elmar</media:title>
		</media:content>
	</item>
		<item>
		<title>Wisdom: 6 Top Secrets of Successful TYPO3 Programming</title>
		<link>http://t3flyers.wordpress.com/2007/08/20/6-top-secrets-of-successful-typo3-programming/</link>
		<comments>http://t3flyers.wordpress.com/2007/08/20/6-top-secrets-of-successful-typo3-programming/#comments</comments>
		<pubDate>Mon, 20 Aug 2007 23:21:39 +0000</pubDate>
		<dc:creator>Elmar</dc:creator>
				<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[typo3]]></category>

		<guid isPermaLink="false">http://t3flyers.wordpress.com/2007/08/20/6-top-secrets-of-successful-typo3-programming/</guid>
		<description><![CDATA[
 Clear the caches.
 Check the rights.
 Check the pathes.
 Include the static template.
 Open your eyes.
 Oops, it did work already &#8230; 

       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=27&subd=t3flyers&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><ol>
<li> Clear the caches.</li>
<li> Check the rights.</li>
<li> Check the pathes.</li>
<li> Include the static template.</li>
<li> Open your eyes.</li>
<li> Oops, it did work already &#8230; </li>
</ol>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/t3flyers.wordpress.com/27/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/t3flyers.wordpress.com/27/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/t3flyers.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/t3flyers.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/t3flyers.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/t3flyers.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/t3flyers.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/t3flyers.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/t3flyers.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/t3flyers.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/t3flyers.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/t3flyers.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=27&subd=t3flyers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://t3flyers.wordpress.com/2007/08/20/6-top-secrets-of-successful-typo3-programming/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3d5a8262ec3887a1057901668a7c348?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Elmar</media:title>
		</media:content>
	</item>
		<item>
		<title>Study: The Presentation-Abstraction-Control architecture of TYPO3</title>
		<link>http://t3flyers.wordpress.com/2007/08/06/the-presentation-abstraction-control-architecture-of-typo3/</link>
		<comments>http://t3flyers.wordpress.com/2007/08/06/the-presentation-abstraction-control-architecture-of-typo3/#comments</comments>
		<pubDate>Mon, 06 Aug 2007 01:25:18 +0000</pubDate>
		<dc:creator>Elmar</dc:creator>
				<category><![CDATA[cms]]></category>
		<category><![CDATA[designpatterns]]></category>
		<category><![CDATA[ect]]></category>
		<category><![CDATA[informatics]]></category>
		<category><![CDATA[lib/div]]></category>
		<category><![CDATA[typo3]]></category>

		<guid isPermaLink="false">http://t3flyers.wordpress.com/2007/08/06/the-presentation-abstraction-control-architecture-of-typo3/</guid>
		<description><![CDATA[Everybody is speaking about Model-View-Controller architecture (MVC). Has TYPO3 a MVC architecture? What do you think?
Many developers will answer this question with a clear YES. The data are in a database. Obviously there must be a model. TYPO3 generates webpages from this using HTML templates. So there is a view.  Bingo. But stop. First [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=26&subd=t3flyers&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Everybody is speaking about Model-View-Controller architecture (MVC). <strong>Has TYPO3 a MVC architecture?</strong> What do you think?</p>
<p>Many developers will answer this question with a clear YES. The data are in a database. Obviously there must be a model. TYPO3 generates webpages from this using HTML templates. So there is a view.  Bingo. But stop. First questions pop up now:</p>
<ul>
<li>Having a database layer, an application-server layer and a client layer (browser) makes it a <a href="http://en.wikipedia.org/wiki/Three_tier">three-tier</a> architecture. But that is not the definition of MVC.</li>
<li>What exactly is the controller?</li>
<li>Why do we speak of TS templates?</li>
<li>Does typoscript belong to the view or is it rather the controller?</li>
</ul>
<p><span id="more-26"></span></p>
<p><strong>Let&#8217;s think twice.</strong> There is the file <em>index.php</em>, setting up the environment, reading the configuration, loading libraries, connecting the database, finally starting the rendering, caching and output of the TS tree. We can call this script the outer TYPO3 framework without counting it into MVC. If we want to fit it into MVC we should probably count it to the controller. </p>
<p>Having a controller now, we could call the database the model and the whole TS tree the view. The name TS template matches. Originally there were no HTML templates. All HTML was generated by TS templates. Perfect. We could take it this way.</p>
<p><strong>But let&#8217;s think thrice.</strong> Let&#8217;s take a closer look into the TS tree. There are objects receiving request parameters. Typically that is a job of the controller. There are objects, that query the database. Typically that is part part of the model. </p>
<p>Taking TS objects into the focus we can&#8217;t state any longer, that the TS tree is the view. It&#8217;s rather a mixture of model, view and controller itself. The objects are nested. The page contains the HTML template. The template is filled with columns. The columns contain content objects. The content objects can contain extensions and each content object or extension can have functionality of model view and controller. </p>
<p>What holds this tree together? Most objects deliver a result string of HTML to their parent objects, strings that are finally composed to the HTML page. We discover an architecture that is hierarchically splitted into many MVC nodes, that recursively build the common nested output. </p>
<p>We can&#8217;t really say that each of the nodes has a clean separation of model, view and controller, but many nodes have a MVC separation. A tree of rather independent MVC nodes, that build a nested view is the definition of the <a href="http://en.wikipedia.org/wiki/Presentation-abstraction-control">Presentation-abstraction-control architecture</a>.</p>
<p>All in all we can point out two different dimensions of flexibilty in TYPO3. First there is the flexibiltiy of the MVC separation. Second there is the flexibilty of nested objects configured by TS. Breaking the MVC pattern down to such a finegrained level has a price. To exchange the whole view, means to exchange it in every little node separetly. But that is a theoretical case.</p>
<p>The more finegrained the tree, the less advantages are in the MVC design. The more finegrained the tree,  the more economic it becomes to exchange whole tree branches, instead of multiple model, view or controler parts. In practice you will exchange a whole grapical menu against a text menu, even if the model and view parts work identical and you could go by exchanging the view parts. This is probably the reason why the MVC pattern isn&#8217;t available in each leaf of the TS tree, the reason that we find some leafs of a monolithik, non MVC design, in example in form of many extensions.</p>
<p>Comming back to the original question, we now say that TYPO3 has not a MVC architecture of three parts. It is a tree of many nodes which can have a MVC design each. We discover that TYPO3 has mainly a PAC architecture. </p>
<p>Subline: TYPO3 has a mixture of different architectures. &#8220;Macro&#8221; MVC design for the HTML template. &#8220;nested micro&#8221; MVC (PAC) for almoust all TS nodes and a monolithic design in few nodes. Each architecture is used, where it matches best &#8211; or it simply depends on the taste of the developer of the given node. This mixture of architectures is one reason why TYPO3 is that mighty. It&#8217;s also one reason, why TYPO3 is that complex to understand.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/t3flyers.wordpress.com/26/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/t3flyers.wordpress.com/26/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/t3flyers.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/t3flyers.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/t3flyers.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/t3flyers.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/t3flyers.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/t3flyers.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/t3flyers.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/t3flyers.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/t3flyers.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/t3flyers.wordpress.com/26/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=26&subd=t3flyers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://t3flyers.wordpress.com/2007/08/06/the-presentation-abstraction-control-architecture-of-typo3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3d5a8262ec3887a1057901668a7c348?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Elmar</media:title>
		</media:content>
	</item>
		<item>
		<title>HOWTO: Using the typolink function</title>
		<link>http://t3flyers.wordpress.com/2007/08/01/using-the-typolink-function/</link>
		<comments>http://t3flyers.wordpress.com/2007/08/01/using-the-typolink-function/#comments</comments>
		<pubDate>Wed, 01 Aug 2007 13:38:17 +0000</pubDate>
		<dc:creator>Elmar</dc:creator>
				<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[ect]]></category>
		<category><![CDATA[lib/div]]></category>
		<category><![CDATA[tslib_pibase]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[typo3]]></category>
		<category><![CDATA[typolink]]></category>

		<guid isPermaLink="false">http://t3flyers.wordpress.com/2007/08/01/using-the-typolink-function/</guid>
		<description><![CDATA[Typolink matters
Links are the magic stuff that keep the web together.
It would be understatement to say that links characterize the web.
They simply make the web. No links, no web.
Links get even more important for a content management system like
TYPO3. They not only point from one page to the other, they even controll
the whole system with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=25&subd=t3flyers&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong>Typolink matters</strong></p>
<p>Links are the magic stuff that keep the web together.<br />
It would be understatement to say that links characterize the web.<br />
They simply make the web. No links, no web.</p>
<p>Links get even more important for a content management system like<br />
TYPO3. They not only point from one page to the other, they even controll<br />
the whole system with all the many parameters. The parameters can<br />
be visible for the user or hidden behind hash values or &#8220;pretty URLs&#8221;.</p>
<p>If this parameters are not perfectly done, the system starts to<br />
fail. Language settings get lost, frames jump out of a frameset,<br />
caching doesn&#8217;t work, the page is getting slow, XHTML becomes invalid,<br />
JavaScript breaks, and and and &#8230;</p>
<p><span id="more-25"></span></p>
<p>You couldn&#8217;t write all this parameters in all this links by hand.<br />
Even if you could, you would need to rewrite them all if an additional<br />
parameter is required. For the same reasons you can&#8217;t simply patch up<br />
a link in a PHP script. You have to use the one and only function, that<br />
automatically mananges all the parameters without flaws. This function<br />
is the famous &#8220;typolink&#8221; function for TYPO3. </p>
<p>This function is called indirectly by TS and some other functions, but<br />
for sure if you program PHP you should be able to use this function directly.</p>
<p><strong>Overview</strong></p>
<p>The typolink is a function of the class tslib_cObj. The first parameter is<br />
the linktext, the second an array with multiply configurations to controll<br />
the links behaviour. This configurations are nicely documented in the<br />
documentation <a href="http://typo3.org/documentation/document-library/references/doc_core_tsref/4.1.0/view/5/8/">TSref</a>, where they are called properties.</p>
<p>So to use typolink, you perpare the controlling array, get an instance of<br />
tslib_cObj and execute the function. </p>
<p><strong>Example:</strong></p>
<p><em>1.) Preparing the controlling array</em></p>
<p><code><br />
$configurations['useCacheHash'] = 1;   // make it a caching link<br />
$configurations['parameter'] = 123;    // target page id  or external Url, Email, etc.<br />
$configurations['section'] = 'par7';   // id for an anchor<br />
$configurations['target'] = 'blank';   // set a frameset target for internal links<br />
$configurations['extTarget'] = 'blank';   // set a frameset target for external links<br />
$configurations['ATagParams'] = 'class="exampleClass" ';   // set a class for the tag<br />
$configurations['ATagParams'] .= 'id="exampleId" ';   // set an id tor the tag<br />
[ . . . ]  // more attributs of the a  tag<br />
$configurations['additionalParams'] = 'myExtension[key1]=value1&amp;myExtension[key2]=value2';   // Extension parameters<br />
</code></p>
<p><strong>Hint</strong>: <a href="http://t3flyers.wordpress.com/2007/04/13/proper-links-and-urls-for-xhtml/">How to build proper additionalParams with Umlauts?</a></p>
<p><em>2.) Creating the object &#8230; </em></p>
<p><code>$cObject = t3lib_div::makeInstance('tslib_cObj');</code></p>
<p><strong>Hint</strong>: Consider to use a singleton, if you create multiple links.</p>
<p><em>&#8230; or just use the current cObj of the plugin</em></p>
<p><code>$cObject = $this-&gt;cObj;</code></p>
<p><em>3.) Rendering the link tag or the plain link URL:</em></p>
<p><code>$linkTag = $cObject-&gt;typolink('Example text of the link', $configurations);</code></p>
<p>or </p>
<p><code><br />
$configurations['returnLast'] = 'url';   // get it as URL<br />
$url =  htmlspecialchars($cObject-&gt;typolink(NULL, $configurations));<br />
</code></p>
<p><strong>Hint: </strong>Typolink generates the link  tag with htmlspecialchars. For the URL you have to do it yourself.</p>
<p><strong>Doing it the object orientated way</strong></p>
<p>Maybe you prefer to do it the object orientated way. You find a full working link object in the extension <a href="http://typo3.org/extensions/repository/view/lib/current/info/class.tx_lib_link.php/">&#8220;lib&#8221;</a>. You can use it directly or copy and rename it to make it part of your extension.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/t3flyers.wordpress.com/25/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/t3flyers.wordpress.com/25/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/t3flyers.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/t3flyers.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/t3flyers.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/t3flyers.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/t3flyers.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/t3flyers.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/t3flyers.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/t3flyers.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/t3flyers.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/t3flyers.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=25&subd=t3flyers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://t3flyers.wordpress.com/2007/08/01/using-the-typolink-function/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3d5a8262ec3887a1057901668a7c348?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Elmar</media:title>
		</media:content>
	</item>
		<item>
		<title>Fight the no_cache parameter II</title>
		<link>http://t3flyers.wordpress.com/2007/07/27/fight-the-no_cache-parameter-ii/</link>
		<comments>http://t3flyers.wordpress.com/2007/07/27/fight-the-no_cache-parameter-ii/#comments</comments>
		<pubDate>Fri, 27 Jul 2007 08:32:11 +0000</pubDate>
		<dc:creator>Elmar</dc:creator>
				<category><![CDATA[caching]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[kickstarter]]></category>
		<category><![CDATA[no_cache]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[typo3]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://t3flyers.wordpress.com/2007/07/27/fight-the-no_cache-parameter-ii/</guid>
		<description><![CDATA[From 1.650.000 to  2.460.000 &#8211; disaster in progress
3 monthes passed. It&#8217;s time to do the test again.

April 17. 2007 &#8212; Juli 27. 2007
2.050.000 &#8212; 2.550.000  (google.de: &#8220;no_cache=1&#8243;)
1.650.000 &#8212;  2.460.000 (google.de: inurl:&#8221;no_cache=1&#8243;)

While in april there there were 20% fewer hits when prepending &#8220;inurl:&#8221; to the search this difference is 5% today. This indicates [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=24&subd=t3flyers&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong>From 1.650.000 to  2.460.000 &#8211; disaster in progress</strong></p>
<p>3 monthes passed. It&#8217;s time to do the test again.</p>
<p><em><br />
April 17. 2007 &#8212; Juli 27. 2007<br />
2.050.000 &#8212; 2.550.000  (google.de: &#8220;no_cache=1&#8243;)<br />
1.650.000 &#8212;  2.460.000 (google.de: inurl:&#8221;no_cache=1&#8243;)<br />
</em></p>
<p>While in april there there were 20% fewer hits when prepending &#8220;inurl:&#8221; to the search this difference is 5% today. This indicates that the algorithm may have been modified. That should be considerd when looking at the results. </p>
<p>The results of both queries exploded, ca. 25% for the first search term, ca. 50% for the second. </p>
<p>Will the TYPO3 community be able to invert the trend to a growing amount of ill caching pages?</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/t3flyers.wordpress.com/24/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/t3flyers.wordpress.com/24/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/t3flyers.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/t3flyers.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/t3flyers.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/t3flyers.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/t3flyers.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/t3flyers.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/t3flyers.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/t3flyers.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/t3flyers.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/t3flyers.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=24&subd=t3flyers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://t3flyers.wordpress.com/2007/07/27/fight-the-no_cache-parameter-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3d5a8262ec3887a1057901668a7c348?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Elmar</media:title>
		</media:content>
	</item>
		<item>
		<title>Pilot: Prototype of a Typoscript Compiler that Generates a PHP Array, Build with Flex and Bison</title>
		<link>http://t3flyers.wordpress.com/2007/05/11/prototype-of-a-typoscript-compiler-that-generates-a-php-array-build-with-flex-and-bison/</link>
		<comments>http://t3flyers.wordpress.com/2007/05/11/prototype-of-a-typoscript-compiler-that-generates-a-php-array-build-with-flex-and-bison/#comments</comments>
		<pubDate>Fri, 11 May 2007 10:18:14 +0000</pubDate>
		<dc:creator>Elmar</dc:creator>
				<category><![CDATA[bison]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[informatics]]></category>
		<category><![CDATA[lex]]></category>
		<category><![CDATA[typo3]]></category>
		<category><![CDATA[typoscript]]></category>
		<category><![CDATA[yacc]]></category>

		<guid isPermaLink="false">http://t3flyers.wordpress.com/2007/05/11/prototype-of-a-typoscipt-comiler-that-generates-a-php-array-build-with-flex-and-bison/</guid>
		<description><![CDATA[Some people say, &#8220;Don&#8217;t trust a developer that didn&#8217;t write his own compiler.&#8221;. A few days ago I finished the first version of my first compiler. It compiles typoscript to a php array. 
Source and Binary for LInux


a.line.of = Typopscript

$TS['a.']['line.']['of'] = 'Typoscript';
&#160;

It is implemented using Flex and Bison the open source implementations of Lex and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=23&subd=t3flyers&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Some people say, <em>&#8220;Don&#8217;t trust a developer that didn&#8217;t write his own compiler.&#8221;</em>. A few days ago I finished the first version of my first compiler. It compiles typoscript to a php array. </p>
<p><a href="http://typo3xdev.svn.sourceforge.net/viewvc/typo3xdev/tx_tsc/trunk/">Source and Binary for LInux</a></p>
<pre>

a.line.of = Typopscript

$TS['a.']['line.']['of'] = 'Typoscript';
&nbsp;
</pre>
<p>It is implemented using Flex and Bison the open source implementations of Lex and Yacc. The result is a little C progam.  You can feed TS into the compiler from within any PHP script and get a PHP array back in return.<br />
<span id="more-23"></span></p>
<p><strong>Is that a compiler? Doesn&#8217;t a compiler build binaries not arrays?</strong></p>
<p>Well, one definition is that a compiler is a translator. It typically tokenizes the input in one language into atomic pices, checks the syntax and maybe sematics and transforms it into another language. In traditional compilers the target language is machine code. In newer compilers it is often C. In this case it&#8217;s PHP and it&#8217;s focused upon compiling an array.</p>
<p><strong>What is it good for? </strong></p>
<p>If you have discovered the advantages of TS, it&#8217;s likely that you want to use TS not only within TYPO3. In the moment I want to use it for configuration within a non-TYPO3 PHP script.</p>
<p><strong>Could it be used in TYPO3?</strong></p>
<p>Certainly it would be possible to use it within TYPO3 itself, to get a faster TS engine. Speaking error messages, even checks of semantics could be implemented. That are features of the compiler approach.</p>
<p>For now it&#8217;s only a prototype and some features are still lacking to use it as a replacement for the PHP based TS engine. It will also be a bunch of work, to build a PHP extension around, that provides exaclty the same API of the current TS engine, including the handling of conditions etc. We will see if I find the time and drive to do such an implementation.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/t3flyers.wordpress.com/23/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/t3flyers.wordpress.com/23/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/t3flyers.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/t3flyers.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/t3flyers.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/t3flyers.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/t3flyers.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/t3flyers.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/t3flyers.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/t3flyers.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/t3flyers.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/t3flyers.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=23&subd=t3flyers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://t3flyers.wordpress.com/2007/05/11/prototype-of-a-typoscript-compiler-that-generates-a-php-array-build-with-flex-and-bison/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3d5a8262ec3887a1057901668a7c348?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Elmar</media:title>
		</media:content>
	</item>
		<item>
		<title>Conception: Workflow Mechanism of a YES-NO Questionnaire</title>
		<link>http://t3flyers.wordpress.com/2007/05/07/conception-workflow-mechanism-of-a-yes-no-questionary/</link>
		<comments>http://t3flyers.wordpress.com/2007/05/07/conception-workflow-mechanism-of-a-yes-no-questionary/#comments</comments>
		<pubDate>Mon, 07 May 2007 19:08:30 +0000</pubDate>
		<dc:creator>Elmar</dc:creator>
				<category><![CDATA[conceptions]]></category>
		<category><![CDATA[designpatterns]]></category>
		<category><![CDATA[informatics]]></category>

		<guid isPermaLink="false">http://t3flyers.wordpress.com/2007/05/07/conception-workflow-mechanism-of-a-yes-no-questionary/</guid>
		<description><![CDATA[Introduction
Often people like to have a questionnaire with multipage forms, that they can setup and configure on their own. They would like to work with a simple configuration list of questions or with the assistance of a wizzard. It should be able to branch into subforms depending on the selected answers.
Motivation
I have different ideas, how [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=22&subd=t3flyers&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong>Introduction</strong></p>
<p>Often people like to have a questionnaire with multipage forms, that they can setup and configure on their own. They would like to work with a simple configuration list of questions or with the assistance of a wizzard. It should be able to branch into subforms depending on the selected answers.</p>
<p><strong>Motivation</strong></p>
<p>I have different ideas, how this could be done and want to scratch down my ideas for the first model with a very abstract concept, that I call a pure YES-NO questionary. The other ideas are based on the YES-NO concept. Just like you can build complex programs and data on top of the primitive <em><strong>0 1</strong></em> bit structure.</p>
<p><span id="more-22"></span></p>
<p><strong>Axiom </strong></p>
<p>My basic assumption is, that you can break down every controlling question (not the text collecting ones) of a questionary to plain YES-NO questions. A checkbox is a YES-NO question. Radiobuttons are  list of YES-NO questions, where only one question can result in YES. Multiselections are a list of YES-NO questions, where multiple questions can have a YES answer.</p>
<p><strong>Coins</strong></p>
<p>We bundle all questions, that are necessary to be asked, into a first form.  For every question that is answered with a YES we can branch to a subform. The subform itself is assembled in the same way from YES-NO questions, that can branch to further subforms. The result is a tree of forms that would fully be passed, if all questions would be answered with YES. If all answers turn to NO, only the initial form is to be passed.</p>
<p>So the coins of this model are:</p>
<ul>
<li>form tree</li>
<li>forms</li>
<li>YES-NO questions</li>
<li>YES-NO answers</li>
<li>pointers form answers to (sub)forms</li>
</ul>
<p><strong>Implementation</strong></p>
<p><em>How are the subforms called for each positive answers, while there are multiple questions within one form? </em></p>
<p>Multiple solutions are possible.</p>
<ul>
<li>A new window in example in form of a popup.</li>
<li>Inline inclusion based on AJAX.</li>
<li>Postprocessing after submit of the previous form controlled by a stack.</li>
</ul>
<p><em>How does the stack work?</em></p>
<p>Every positive answer would be pushed on top of the stack. As soon as the form is submitted and checked, the stack would be processed. We pop the top entry and replace it by all positive answers of the matching subform. This is done recursively until all forms are done and the stack has been reduced to zero.</p>
<p>Logically not every positive answer has to result in a new subform else the tree would grow infinitely. Positive answers can be leafs of the tree. Then the information is just gathered with all the other results.</p>
<p><em>When is the collected data stored?</em></p>
<p>Two basical concepts are possible. Either we store the data directly after submit of each form. This solution is very stable and the vistor can come back at any time to proceed a previously started  form fillout. The disadvantage is, that we collect entries into the DB from fillouts that are never finished. The alternative is to store all the data into the session and to store it only if the whole precess has been done. The disadvantage is, that all data will be lost, if the vistor pauses to long.</p>
<p><em>What happens, if the visitor steps back some forms, to change a YES to NO or vice versa?</em></p>
<p>If a previous YES is chanted to NO this cuts the complete subbranch. That can be done in several forms:</p>
<ul>
<li>The data of the subbranch is immediatly removed from the session or the database.</li>
<li>The data is kept and removed upon the final submit of the whole transaction.</li>
<li>The data is kept and stored. In  this case it&#8217;s necassary to evalute the blocking NO value for the subbranch upon usage of the collected data.</li>
</ul>
<p>For each NO, that is changed to a YES, the appropriate action needs to be executed, depending by an AJAX include or a popup or by pushing the stack. If we did a previous clearing of a branch during an alteration from YES to NO we need to cycle the branch again.</p>
<p><em>How is it all configured?</em></p>
<p>The coins are given.  Each form contains a list of questions. Each form needs an ID for the answer form relation. Each question can contain a pointer to a form ID for  the case of a positve answer. Thats it. WE can configure it in any configuration language i.e. in &#8212; surprise &#8212; TypoScript.</p>
<p><em>How is it controlled?</em></p>
<p>I suggest an implementation based on the lib/div controller.</p>
<p><em>What about a wizzard?</em></p>
<p>If we extend this basical concept a little and use the form pointer in form of a loop and add some other inputs to pick up the questions, a wizzard can be implemented with the YES-NO questionary itself.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/t3flyers.wordpress.com/22/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/t3flyers.wordpress.com/22/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/t3flyers.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/t3flyers.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/t3flyers.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/t3flyers.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/t3flyers.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/t3flyers.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/t3flyers.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/t3flyers.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/t3flyers.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/t3flyers.wordpress.com/22/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=t3flyers.wordpress.com&blog=406873&post=22&subd=t3flyers&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://t3flyers.wordpress.com/2007/05/07/conception-workflow-mechanism-of-a-yes-no-questionary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e3d5a8262ec3887a1057901668a7c348?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Elmar</media:title>
		</media:content>
	</item>
	</channel>
</rss>