<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0">
    <channel>
        <title>handgestrickt netzwerk</title>
        <description>informations about the company handgestrickt netzwerk</description>
        <link>http://www.handgestrickt.biz/</link>
        <lastBuildDate>Tue, 14 Jul 2009 14:15:24 +0200</lastBuildDate>
        <generator>bBlog 0.7.6</generator>
        <copyright>All Rights Reserved</copyright>
        
            
            <geo:lat>51.504375</geo:lat><geo:long>7.4998</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/handgestrickt" type="application/rss+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">handgestrickt</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
                <guid isPermaLink="true">http://www.handgestrickt.biz/item/101/</guid>
                <title>addendum for AWstats, Plesk 8 and suexec</title>
                <link>http://www.handgestrickt.biz/item/101/</link>

                
                    
                <author>info@handgestrickt.biz (Stefan Jelner)</author>

                    
                
                
                <category>general</category>

                
                <pubDate>Fri, 30 Nov 2007 16:23:37 +0100</pubDate>
                <description>&lt;p&gt;in the article &amp;quot;&lt;a href="item/48/"&gt;AWstats, Plesk 8 and suexec&lt;/a&gt;&amp;quot; i showed how to set up AWstats on a Plesk 8 system without all the suexec-trouble. recently one of my servers made another trouble, because the &lt;code&gt;FollowSymLinks&lt;/code&gt; was missing. so i wrote this addendum.&lt;/p&gt; &lt;p&gt;in your &lt;code&gt;vhosts.conf&lt;/code&gt; and &lt;code&gt;vhost_ssl.conf&lt;/code&gt; the changes should be:&lt;/p&gt; &lt;p&gt;vhost.conf:&lt;/p&gt; &lt;pre&gt;&lt;code rel="Apache configuration directives" class="apache"&gt;&amp;lt;Directory /srv/www/vhosts/foo.com/httpdocs&amp;gt;&lt;br /&gt;	Options +FollowSymLinks&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;br /&gt;ScriptAlias /awstats/ &amp;quot;/srv/www/vhosts/foo.com/httpdocs/awstats/&amp;quot;&lt;br /&gt;&amp;lt;Directory &amp;quot;/srv/www/vhosts/foo.com/httpdocs/awstats/&amp;quot;&amp;gt;&lt;br /&gt;	Options none&lt;br /&gt;	AllowOverride None&lt;br /&gt;	Order allow,deny&lt;br /&gt;	Allow from all&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;vhost_ssl.conf:&lt;/p&gt; &lt;pre&gt;&lt;code rel="Apache configuration directives" class="apache"&gt;&amp;lt;Directory /srv/www/vhosts/foo.com/httpsdocs&amp;gt;&lt;br /&gt;	Options +FollowSymLinks&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;br /&gt;ScriptAlias /awstats/ &amp;quot;/srv/www/vhosts/foo.com/httpdocs/awstats/&amp;quot;&lt;br /&gt;&amp;lt;Directory &amp;quot;/srv/www/vhosts/foo.com/httpdocs/awstats/&amp;quot;&amp;gt;&lt;br /&gt;	Options none&lt;br /&gt;	AllowOverride None&lt;br /&gt;	Order allow,deny&lt;br /&gt;	Allow from all&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/handgestrickt?a=oPxr3WyItb8:hxzZb69X9Xk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/handgestrickt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            </item>

            
            <item>
                <guid isPermaLink="true">http://www.handgestrickt.biz/item/100/</guid>
                <title>button-tag in MSIE</title>
                <link>http://www.handgestrickt.biz/item/100/</link>

                
                    
                <author>info@handgestrickt.biz (Stefan Jelner)</author>

                    
                
                
                <category>general</category>

                
                <pubDate>Fri, 07 Sep 2007 15:10:47 +0200</pubDate>
                <description>&lt;p&gt;handgestrickt had to construct a very complex form. it was necessary to transfer several named actions when the user clicks a button. additionally these buttons were embedded in one form-tag.&lt;/p&gt;
&lt;p&gt;according to the HTML-specs you can use the following construct:&lt;/p&gt;
&lt;pre&gt;&lt;code class="html" rel="HTML markup"&gt;&amp;lt;form action=&amp;quot;foo.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;batch[]&amp;quot; value=&amp;quot;1&amp;quot; /&amp;gt; value 1&amp;lt;br /&amp;gt;&lt;br /&gt;    &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;batch[]&amp;quot; value=&amp;quot;2&amp;quot; /&amp;gt; value 2&amp;lt;br /&amp;gt;&lt;br /&gt;    &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;batch[]&amp;quot; value=&amp;quot;3&amp;quot; /&amp;gt; value 3&amp;lt;br /&amp;gt;&lt;br /&gt;    &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;batch[]&amp;quot; value=&amp;quot;4&amp;quot; /&amp;gt; value 4&amp;lt;br /&amp;gt;&lt;br /&gt;    ...&lt;br /&gt;    &amp;lt;button type=&amp;quot;submit&amp;quot; name=&amp;quot;action&amp;quot; value=&amp;quot;edit&amp;quot;&amp;gt;Edit&amp;lt;/button&amp;gt;&lt;br /&gt;    &amp;lt;button type=&amp;quot;submit&amp;quot; name=&amp;quot;action&amp;quot; value=&amp;quot;copy&amp;quot;&amp;gt;Copy&amp;lt;/button&amp;gt;&lt;br /&gt;    &amp;lt;button type=&amp;quot;submit&amp;quot; name=&amp;quot;action&amp;quot; value=&amp;quot;delete&amp;quot;&amp;gt;Delete&amp;lt;/button&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;in all standard compliant browsers, the name-value-pair gets transfered as expected. all &lt;a target="_blank" href="http://www.microsoft.com/windows/products/winfamily/ie/"&gt;Internet Explorers&lt;/a&gt; do the following: they pass all buttons at once, with the name as key and the inner HTML of the button-tags as the value.&lt;/p&gt;
&lt;p&gt;you can start to fiddle with JavaScript now. a lot of solutions delete all button-tags and take the value of the clicked element as the value of a hidden form field. beside the fact, that this does not work without javascript, it has an ugly side: when you click a button, for a short moment, all the buttons on the page disappear. ugly!&lt;/p&gt;
&lt;p&gt;my solution is very simple, yet powerful. and beside this, you can pass an unlimited amount of values by one button click. the trick: we put all the name-value-pairs into the name-attribute, beginning with a question-mark, so it looks like a usual query-string. we do not use button-tags at all, but input-tags of the type &amp;quot;submit&amp;quot; and &amp;quot;image&amp;quot;.&lt;/p&gt;
&lt;p&gt;example:&lt;/p&gt;
&lt;pre&gt;&lt;code class="html" rel="HTML markup"&gt;&amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;?action=edit&amp;amp;foo1=bar1&amp;amp;foo2=bar2&amp;amp;foo3=bar3&amp;quot; value=&amp;quot;Edit&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;?action=copy&amp;amp;foo1=bar1&amp;amp;foo2=bar2&amp;amp;foo3=bar3&amp;quot; value=&amp;quot;Copy&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;image&amp;quot; name=&amp;quot;?action=delete&amp;amp;foo1=bar1&amp;amp;foo2=bar2&amp;amp;foo3=bar3&amp;quot; alt=&amp;quot;Delete&amp;quot; src=&amp;quot;delete.jpg&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;on the server-side, we have to find those entries and reorganize our request:&lt;/p&gt;
&lt;pre&gt;&lt;code class="php" rel="PHP source code"&gt;&amp;lt;?php&lt;br /&gt;class foo {&lt;br /&gt;    function button_limitations() {&lt;br /&gt;        global $_GET,$_POST;&lt;br /&gt;        $this-&amp;gt;_button_limitations($_GET);&lt;br /&gt;        $this-&amp;gt;_button_limitations($_POST);&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    function _button_limitations(&amp;amp;$var) {&lt;br /&gt;        foreach($var as $key=&amp;gt;$value) {&lt;br /&gt;            $key = stripslashes($key);&lt;br /&gt;            if(substr($key,0,1) == '?') {&lt;br /&gt;                unset($var[$key]);&lt;br /&gt;                if( //type=&amp;quot;image&amp;quot; coordinates&lt;br /&gt;                    substr($key,-2) == '_x' ||&lt;br /&gt;                    substr($key,-2) == '_y'&lt;br /&gt;                ) $key = substr($key,0,-2);&lt;br /&gt;                $key_value_pairs = explode('&amp;amp;',substr(stripslashes($key),1));&lt;br /&gt;                for($a=0,$b=count($key_value_pairs);$a&amp;lt;$b;$a++) {&lt;br /&gt;                    list($key2,$value2) = explode('=',$key_value_pairs[$a]);&lt;br /&gt;                    $var[$key2] = $value2;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/handgestrickt?a=WSpvEONlKww:CyaFDwjhTI0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/handgestrickt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            </item>

            
            <item>
                <guid isPermaLink="true">http://www.handgestrickt.biz/item/99/</guid>
                <title>image nosave with mooTools 1.11</title>
                <link>http://www.handgestrickt.biz/item/99/</link>

                
                    
                <author>info@handgestrickt.biz (Stefan Jelner)</author>

                    
                
                
                <category>general</category>

                
                <pubDate>Tue, 28 Aug 2007 12:49:53 +0200</pubDate>
                <description>&lt;p&gt;a lot of photographers use &lt;a href="http://www.adobe.com/products/flash/" target="_blank"&gt;FLASH&lt;/a&gt; for another good reason: it is impossible to save the images contained in the &lt;a href="http://www.adobe.com/products/flash/" target="_blank"&gt;FLASH&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;as an alternative, handgestrickt had the idea to place a completely transparent layer over every image with the rel-attribute of &amp;quot;nosave&amp;quot; or a nosave-attribute set to &amp;quot;nosave&amp;quot;. this works in every modern browser, with one limitation in &lt;a href="http://www.opera.com/" target="_blank"&gt;Opera&lt;/a&gt;: the images have to have a width and height. otherwise &lt;a href="http://www.opera.com/" target="_blank"&gt;Opera&lt;/a&gt; (or &lt;a href="http://mootools.net/" target="_blank"&gt;mooTools&lt;/a&gt;) cannot measure the width and height of the image.&lt;/p&gt; &lt;p&gt;requires: &lt;a href="http://mootools.net/" target="_blank"&gt;mooTools&lt;/a&gt; 1.11 (Window.DomReady, Element.Dimensions)&lt;/p&gt; &lt;p&gt;here is the code:&lt;/p&gt; &lt;pre&gt;&lt;code class="javascript" rel="JavaScript source code"&gt;var nosave = new Class({&lt;br /&gt;    initialize: function() {&lt;br /&gt;        window.addEvent('domready',this.prepare.bindAsEventListener(this));&lt;br /&gt;        return true;&lt;br /&gt;    },&lt;br /&gt;&lt;br /&gt;    prepare: function() {&lt;br /&gt;        var imgs = $$('img');&lt;br /&gt;        for(var a=0;a&amp;lt;imgs.length;a++) {&lt;br /&gt;            if(&lt;br /&gt;                imgs[a].getProperty('nosave') ||&lt;br /&gt;                (imgs[a].getProperty('rel') &amp;amp;&amp;amp; imgs[a].getProperty('rel').match(/(?:^|;)nosave(?:$|;)/i))&lt;br /&gt;            ) {&lt;br /&gt;                imgs[a].setProperty('nosave','nosave');&lt;br /&gt;                var coords = imgs[a].getCoordinates();&lt;br /&gt;                var overlay = new Element('div',{});&lt;br /&gt;                var zindex = 1;&lt;br /&gt;                if($type(imgs[a].style.zIndex)) zindex = (imgs[a].style.zIndex+1);&lt;br /&gt;                overlay.setStyles({&lt;br /&gt;                    'position': 'absolute',&lt;br /&gt;                    'background-color': '#FF0000',&lt;br /&gt;                    'top': coords.top+'px',&lt;br /&gt;                    'left': coords.left+'px',&lt;br /&gt;                    'width': coords.width+'px',&lt;br /&gt;                    'height': coords.height+'px',&lt;br /&gt;                    'z-index': zindex&lt;br /&gt;                });&lt;br /&gt;                var parent = imgs[a];&lt;br /&gt;                while($type(parent.getParent())) {&lt;br /&gt;                    parent = parent.getParent();&lt;br /&gt;                    if(parent.tagName == 'A') {&lt;br /&gt;                        overlay.setStyle('cursor','pointer');&lt;br /&gt;                        eval('overlay.addEvent(&amp;quot;click&amp;quot;,function(e) { if(!new Event(e).rightClick) { window.location.href = &amp;quot;'+parent.href+'&amp;quot;; }; });');&lt;br /&gt;                        break;&lt;br /&gt;                    };&lt;br /&gt;                };&lt;br /&gt;                try { overlay.style.opacity = 0; } catch(ex) { };&lt;br /&gt;                try { overlay.style['moz-opacity'] = 0; } catch(ex) { };&lt;br /&gt;                try { overlay.style.filter = 'alpha(opacity:0)'; } catch(ex) { };&lt;br /&gt;                overlay.injectBefore(imgs[a]);&lt;br /&gt;            };&lt;br /&gt;        };&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;});&lt;/code&gt;&lt;/pre&gt;to initialize it, add the following lines to your HTML-page: &lt;pre&gt;&lt;code class="html" rel="HTML markup"&gt;&amp;lt;script language=&amp;quot;JavaScript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;    var my_nosave = new nosave();&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;examples:&lt;/p&gt; &lt;pre&gt;&lt;code class="html" rel="HTML markup"&gt;&amp;lt;img src=&amp;quot;foo.jpg&amp;quot; rel=&amp;quot;nosave&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;img src=&amp;quot;foo2.jpg nosave=&amp;quot;nosave&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;for the &amp;quot;smartasses&amp;quot;: handgestrickt is totally aware of the fact, that deactivating Javascript, looking into the browser cache or making screenshots cannot prevent the images from being saved. but for 90% of the internet users, this should be a good barrier. by the way: you can also make screenshots of &lt;a href="http://www.adobe.com/products/flash/" target="_blank"&gt;FLASH&lt;/a&gt;-movies...&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/handgestrickt?a=LnQH7NIQ4Cg:de4vLkwcCMo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/handgestrickt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            </item>

            
            <item>
                <guid isPermaLink="true">http://www.handgestrickt.biz/item/98/</guid>
                <title>smarty modifier for FLASH Videos</title>
                <link>http://www.handgestrickt.biz/item/98/</link>

                
                    
                <author>info@handgestrickt.biz (Stefan Jelner)</author>

                    
                
                
                <category>general</category>

                
                <pubDate>Fri, 24 Aug 2007 13:35:48 +0200</pubDate>
                <description>&lt;p&gt;a handgestrickt customer uses the &amp;quot;&lt;a href="http://www.dvdvideosoft.com/guides/dvd/free-SWF-FLV-video-converter-convert-video-to-SWF-FLV.htm" target="_blank"&gt;Free Video to Flash Converter&lt;/a&gt;&amp;quot; for converting his videos to FLV-format. this program also provides a &lt;a href="http://www.adobe.com/products/flash/" target="_blank"&gt;FLASH&lt;/a&gt;-file with a very basic player, called player.swf.&lt;/p&gt; &lt;p&gt;this modifier is designed to take a link to an FLV-file and convert it to an HTML-snippet including a &lt;a href="http://www.adobe.com/products/flash/" target="_blank"&gt;FLASH&lt;/a&gt;-plugin, with the player.swf, the link as the file-argument and the link-text as the player-title. this modifier is highly configurable.&lt;/p&gt; &lt;p&gt;basically this modifier can also be used for other &lt;a href="http://www.adobe.com/products/flash/" target="_blank"&gt;FLASH&lt;/a&gt;-Video-players. only tiny modifications have to be made.&lt;/p&gt; &lt;p&gt;the code:&lt;/p&gt; &lt;pre&gt;&lt;code rel="PHP source code" class="php"&gt;&amp;lt;?php&lt;br /&gt;function identify_modifier_flvlink2flash () {&lt;br /&gt;	return array (&lt;br /&gt;		'name' =&amp;gt; 'flvlink2flash',&lt;br /&gt;		'type' =&amp;gt; 'smarty_modifier',&lt;br /&gt;		'nicename' =&amp;gt; 'FLV-Link to FLASH',&lt;br /&gt;		'description' =&amp;gt; 'Converts a Link to an FLV-Video to a fully FLASH.',&lt;br /&gt;		'authors' =&amp;gt; 'Stefan Jelner &amp;lt;info@handgestrickt.biz&amp;gt;',&lt;br /&gt;		'licence' =&amp;gt; 'GPL',&lt;br /&gt;		'help' =&amp;gt; ''&lt;br /&gt;	);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function smarty_modifier_flvlink2flash ($string,$params) {&lt;br /&gt;	$temp = explode(',',trim($params));&lt;br /&gt;	$params = array();&lt;br /&gt;	foreach($temp as $value) {&lt;br /&gt;		$temp2 = explode('=',trim($value));&lt;br /&gt;		$params[trim($temp2[0])] = trim($temp2[1]);&lt;br /&gt;	}&lt;br /&gt;	//default values&lt;br /&gt;	$defaults = array(&lt;br /&gt;		'width' =&amp;gt; '320',&lt;br /&gt;		'height' =&amp;gt; '200',&lt;br /&gt;		'noembed_img' =&amp;gt; 'http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif',&lt;br /&gt;		'noembed_url' =&amp;gt; 'http://www.adobe.com/go/getflashplayer',&lt;br /&gt;		'allowScriptAccess' =&amp;gt; 'sameDomain',&lt;br /&gt;		'classid' =&amp;gt; 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000',&lt;br /&gt;		'codebase' =&amp;gt; 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',&lt;br /&gt;		'type' =&amp;gt; 'application/x-shockwave-flash',&lt;br /&gt;		'pluginspage' =&amp;gt; 'http://www.adobe.com/go/getflashplayer',&lt;br /&gt;		'quality' =&amp;gt; 'high',&lt;br /&gt;		'wmode' =&amp;gt; 'transparent',&lt;br /&gt;		'menu' =&amp;gt; 'false',&lt;br /&gt;		'scale' =&amp;gt; 'exactfit',&lt;br /&gt;		'player_url' =&amp;gt; 'player.swf',&lt;br /&gt;		'player_size' =&amp;gt; 'false',&lt;br /&gt;		'player_aplay' =&amp;gt; 'false',&lt;br /&gt;		'player_autorev' =&amp;gt; 'false'&lt;br /&gt;	);&lt;br /&gt;	//merge parameters with default values&lt;br /&gt;	$params = array_merge($defaults,$params);&lt;br /&gt;	//create FLASH-plugin-template&lt;br /&gt;	$template = sprintf(&lt;br /&gt;		'&amp;lt;!--[if !IE]&amp;gt;--&amp;gt;'.&lt;br /&gt;		'&amp;lt;embed src=&amp;quot;%14$s?file=%%1\\\\$s&amp;amp;size=%15$s&amp;amp;aplay=%16$s&amp;amp;autorev=%17$s&amp;amp;title=%%2\\\\$s&amp;quot; allowScriptAccess=&amp;quot;%5$s&amp;quot; '.&lt;br /&gt;		'type=&amp;quot;%8$s&amp;quot; pluginspage=&amp;quot;%9$s&amp;quot; quality=&amp;quot;%10$s&amp;quot; width=&amp;quot;%1$s&amp;quot; height=&amp;quot;%2$s&amp;quot; wmode=&amp;quot;%11$s&amp;quot; menu=&amp;quot;%12$s&amp;quot; /&amp;gt;'.&lt;br /&gt;		'&amp;lt;noembed&amp;gt;&amp;lt;a href=&amp;quot;%4$s&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;%3$s&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/noembed&amp;gt;'.&lt;br /&gt;		'&amp;lt;!--&amp;lt;![endif]--&amp;gt;'.&lt;br /&gt;		'&amp;lt;!--[if IE]&amp;gt;'.&lt;br /&gt;		'&amp;lt;object classid=&amp;quot;%6$s&amp;quot; codebase=&amp;quot;%7$s&amp;quot; width=&amp;quot;%1$s&amp;quot; height=&amp;quot;%2$s&amp;quot;&amp;gt;'.&lt;br /&gt;		'&amp;lt;param name=&amp;quot;allowScriptAccess&amp;quot; value=&amp;quot;%5$s&amp;quot; /&amp;gt;'.&lt;br /&gt;		'&amp;lt;param name=&amp;quot;movie&amp;quot; value=&amp;quot;%14$s?file=%%1\\\\$s&amp;amp;size=%15$s&amp;amp;aplay=%16$s&amp;amp;autorev=%17$s&amp;amp;title=%%2\\\\$s&amp;quot; /&amp;gt;'.&lt;br /&gt;		'&amp;lt;param name=&amp;quot;wmode&amp;quot; value=&amp;quot;%11$s&amp;quot; /&amp;gt;'.&lt;br /&gt;		'&amp;lt;param name=&amp;quot;scale&amp;quot; value=&amp;quot;%13$s&amp;quot; /&amp;gt;'.&lt;br /&gt;		'&amp;lt;param name=&amp;quot;quality&amp;quot; value=&amp;quot;%10$s&amp;quot; /&amp;gt;'.&lt;br /&gt;		'&amp;lt;param name=&amp;quot;menu&amp;quot; value=&amp;quot;%12$s&amp;quot; /&amp;gt;'.&lt;br /&gt;		'&amp;lt;a href=&amp;quot;%4$s&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;%3$s&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;'.&lt;br /&gt;		'&amp;lt;/object&amp;gt;'.&lt;br /&gt;		'&amp;lt;![endif]--&amp;gt;',&lt;br /&gt;		$params['width'],&lt;br /&gt;		$params['height'],&lt;br /&gt;		$params['noembed_img'],&lt;br /&gt;		$params['noembed_url'],&lt;br /&gt;		$params['allowScriptAccess'],&lt;br /&gt;		$params['classid'],&lt;br /&gt;		$params['codebase'],&lt;br /&gt;		$params['type'],&lt;br /&gt;		$params['pluginspage'],&lt;br /&gt;		$params['quality'],&lt;br /&gt;		$params['wmode'],&lt;br /&gt;		$params['menu'],&lt;br /&gt;		$params['scale'],&lt;br /&gt;		$params['player_url'],&lt;br /&gt;		$params['player_size'],&lt;br /&gt;		$params['player_aplay'],&lt;br /&gt;		$params['player_autorev']&lt;br /&gt;	);&lt;br /&gt;	//find and replace link to FLV-files&lt;br /&gt;	$string = preg_replace('/&amp;lt;a[^&amp;gt;]+href=([\\\\&amp;quot;\\\\\\'])([^\\\\&amp;quot;\\\\\\']+\\\\.flv)\\\\1[^&amp;gt;]*&amp;gt;([^&amp;lt;]*)&amp;lt;\\\\/a&amp;gt;/sie',&amp;quot;sprintf('$template','\$2','\$3')&amp;quot;,$string);&lt;br /&gt;	return $string;&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;usage:&lt;/p&gt; &lt;p&gt;because smarty does not provide the ability to pass named arguments to modifiers, we have to do it with a string. the syntax is:&lt;/p&gt; &lt;pre&gt;&lt;code rel="smarty markup" class="smarty"&gt;&amp;quot;key1=value1,key2=value2,....,keyn=valuen&amp;quot;&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;example:&lt;/p&gt; &lt;pre&gt;{$foo|flvlink2flash:&amp;quot;width=450,height=338&amp;quot;}&lt;br /&gt;{$foo|flvlink2flash:&amp;quot;width=450,height=338,menu=true&amp;quot;}&lt;/pre&gt; &lt;p&gt;parameters:&lt;/p&gt; &lt;ul&gt;     &lt;li&gt;width&lt;/li&gt;     &lt;li&gt;height&lt;/li&gt;     &lt;li&gt;noembed_img&lt;/li&gt;     &lt;li&gt;noembed_url&lt;/li&gt;     &lt;li&gt;allowScriptAccess&lt;/li&gt;     &lt;li&gt;classid&lt;/li&gt;     &lt;li&gt;codebase&lt;/li&gt;     &lt;li&gt;type&lt;/li&gt;     &lt;li&gt;pluginspage&lt;/li&gt;     &lt;li&gt;quality&lt;/li&gt;     &lt;li&gt;wmode&lt;/li&gt;     &lt;li&gt;menu&lt;/li&gt;     &lt;li&gt;scale&lt;/li&gt;     &lt;li&gt;player_url&lt;/li&gt;     &lt;li&gt;player_size&lt;/li&gt;     &lt;li&gt;player_aplay&lt;/li&gt;     &lt;li&gt;player_autorev&lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/handgestrickt?a=wU4jdV-ZsGk:aUinPs82Yr8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/handgestrickt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            </item>

            
            <item>
                <guid isPermaLink="true">http://www.handgestrickt.biz/item/97/</guid>
                <title>unobtrusive scrolltext with mooTools</title>
                <link>http://www.handgestrickt.biz/item/97/</link>

                
                    
                <author>info@handgestrickt.biz (Stefan Jelner)</author>

                    
                
                
                <category>general</category>

                
                <pubDate>Fri, 24 Aug 2007 11:34:52 +0200</pubDate>
                <description>&lt;p&gt;recently handgestrickt is really crazy for &lt;a target="_blank" href="http://mootools.net"&gt;mooTools&lt;/a&gt;. we developed a whole bunch of unobtrusive scripts, we will publish in the future.&lt;/p&gt;
&lt;p&gt;yesterday we had a quite simple task: we needed a scrolltext. unlike the 5 million DHTML solutions out there, where you have to fiddle your scrolltext into the JavaScript code, we wanted a scrolltext that changes any normal element with the classname &amp;quot;scroller&amp;quot; and a CSS-overflow to a scrolltext.&lt;/p&gt;
&lt;p&gt;in &lt;a target="_blank" href="http://mootools.net"&gt;mooTools&lt;/a&gt; this is very easy. we did the same trick as in old C64-days. first we measured the whole width of the scroller plus the width of the element. then we copied the same text at the end of the scrolltext, to make it look infinite. when the scrolltext reached the point, where it starts over, we just reseted it to zero.&lt;/p&gt;
&lt;p&gt;following &lt;a target="_blank" href="http://mootools.net"&gt;mooTools&lt;/a&gt; dependencies: &lt;a target="_blank" href="http://mootools.net"&gt;mooTools&lt;/a&gt; 1.11 (Fx.Scroll, Fx.Transitions, Window.DomReady, Element.Selectors)&lt;/p&gt;
&lt;p&gt;tested in: &lt;a href="http://www.microsoft.com/windows/products/winfamily/ie/" target="_blank"&gt;Internet Explorer&lt;/a&gt; 6.1 and 7, &lt;a href="http://www.mozilla.com" target="_blank"&gt;Firefox&lt;/a&gt; 1.5 and 2.0.0.6, &lt;a href="http://www.opera.com" target="_blank"&gt;Opera&lt;/a&gt; 9.01, &lt;a href="http://www.apple.com/safari/" target="_blank"&gt;Safari&lt;/a&gt; 3.0.3, &lt;a href="http://www.konqueror.org/" target="_blank"&gt;Konqueror&lt;/a&gt; 3.4, &lt;a href="http://galeon.sourceforge.net/" target="_blank"&gt;Galeon&lt;/a&gt; 1.3, &lt;a href="http://www.mozilla.org/" target="_blank"&gt;Mozilla&lt;/a&gt; 1.7.5, &lt;a href="http://www.gnome.org/projects/epiphany/" target="_blank"&gt;Epiphany&lt;/a&gt; 1.6. so in the modern browsers it can be assumed to work well.&lt;/p&gt;
&lt;p&gt;usage: just give any element a classname &amp;quot;scroller&amp;quot; and a CSS-overflow and it scrolls! on line 20 you can change the speed (150 looks good).&lt;/p&gt;
&lt;p&gt;here is the final code:&lt;/p&gt;
&lt;pre&gt;&lt;code rel="JavaScript source code" class="javascript"&gt;var unobtrusive_scroller = new Class({&lt;br /&gt;	initialize: function() {&lt;br /&gt;		window.addEvent('domready',this.prepare.bindAsEventListener(this));&lt;br /&gt;	},&lt;br /&gt;&lt;br /&gt;	prepare: function() {&lt;br /&gt;		var scroller = $$('body')[0].getElementsByClassName('scroller');&lt;br /&gt;		for(a=0;a&amp;lt;scroller.length;a++) {&lt;br /&gt;			var old_length = scroller[a].innerHTML.length;&lt;br /&gt;			scroller[a].innerHTML += ' ';&lt;br /&gt;			var old_size = scroller[a].getSize();&lt;br /&gt;			scroller[a].innerHTML += scroller[a].innerHTML;&lt;br /&gt;			this.scroll(scroller[a],old_length,old_size.scrollSize.x);&lt;br /&gt;		};&lt;br /&gt;	},&lt;br /&gt;&lt;br /&gt;	scroll: function(el,chars,x) {&lt;br /&gt;		new Fx.Scroll(el,{&lt;br /&gt;				'transition':Fx.Transitions.linear,&lt;br /&gt;				'duration':(chars*150),&lt;br /&gt;				'wheelStops':false,&lt;br /&gt;				'onComplete': function() {&lt;br /&gt;					var _this = this.options._this;&lt;br /&gt;					var el = this.options._el;&lt;br /&gt;					var chars = this.options._chars;&lt;br /&gt;					var x = this.options._x;&lt;br /&gt;					el.scrollTo(0,0);&lt;br /&gt;					_this.scroll(el,chars,x);&lt;br /&gt;				},&lt;br /&gt;				'_this': this,&lt;br /&gt;				'_el': el,&lt;br /&gt;				'_chars': chars,&lt;br /&gt;				'_x': x&lt;br /&gt;		}).scrollTo(x,0);&lt;br /&gt;	}&lt;br /&gt;});&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;to initialize it, add the following lines to your HTML-page&lt;/p&gt;
&lt;pre&gt;&lt;code rel="HTML markup" class="html"&gt;&amp;lt;script language=&amp;quot;JavaScript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;	var my_scroller = new unobtrusive_scroller();&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/handgestrickt?a=sw3XsAhcLaA:HFTsloOKN7c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/handgestrickt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            </item>

            
            <item>
                <guid isPermaLink="true">http://www.handgestrickt.biz/item/96/</guid>
                <title>PHP 4 and 5 and UTF-8 BOM issues</title>
                <link>http://www.handgestrickt.biz/item/96/</link>

                
                    
                <author>info@handgestrickt.biz (Stefan Jelner)</author>

                    
                
                
                <category>general</category>

                
                <pubDate>Thu, 26 Jul 2007 11:52:09 +0200</pubDate>
                <description>&lt;p&gt;handgestrickts favourite source-code-editor is &lt;a target="_blank" href="http://www.ultraedit.com/"&gt;Ultraedit 32&lt;/a&gt;. this editor, like many other modern editors, has a good feature to mark files as &lt;a target="_blank" href="http://en.wikipedia.org/wiki/UTF-8"&gt;UTF-8&lt;/a&gt; encoded. this mark is called &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Byte-order_mark"&gt;BOM (byte order mark)&lt;/a&gt; and is a 2-4 bytes mark in the beginning of a file, that indicates which &lt;a target="_blank" href="http://www.unicode.org/"&gt;Unicode&lt;/a&gt;-type is used. what a brilliant idea.&lt;/p&gt;
&lt;p&gt;unfortunately &lt;a target="_blank" href="http://www.php.net"&gt;PHP&lt;/a&gt; 4 and 5 send these marks as output to the browser. so if later you use a &lt;a target="_blank" href="http://www.php.net/session_start"&gt;&lt;code&gt;session_start()&lt;/code&gt;&lt;/a&gt;- or &lt;a target="_blank" href="http://www.php.net/header"&gt;&lt;code&gt;header()&lt;/code&gt;&lt;/a&gt;-function somewhere, you end up with the error message &amp;quot;&lt;code&gt;headers already sent in ...&lt;/code&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;after searching the web, we found the solution: &lt;a target="_blank" href="http://www.php.net"&gt;PHP&lt;/a&gt; 5.2.0 introduces the configure-switch &lt;code&gt;--enable-zend-multibyte&lt;/code&gt;. this switch enables &lt;a target="_blank" href="http://www.php.net"&gt;PHP&lt;/a&gt; to recognize the &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Byte-order_mark"&gt;BOM&lt;/a&gt; as what it is. unfortunately you have to recompile&amp;nbsp;&lt;a target="_blank" href="http://www.php.net"&gt;PHP&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;for people using &lt;a target="_blank" href="http://www.php.net"&gt;PHP&lt;/a&gt; on windows or others hosting on a shared public webserver, there are other workarounds: the first line in your &lt;a target="_blank" href="http://www.php.net"&gt;PHP&lt;/a&gt; code should be a comment with a &lt;a target="_blank" href="http://www.unicode.org/"&gt;Unicode&lt;/a&gt;-character inside, like german &amp;quot;Umlaute&amp;quot;, for example. then you save this file as &lt;a target="_blank" href="http://en.wikipedia.org/wiki/UTF-8"&gt;UTF-8&lt;/a&gt; without &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Byte-order_mark"&gt;BOM&lt;/a&gt;. the editor should now recognize the special character as &lt;a target="_blank" href="http://en.wikipedia.org/wiki/UTF-8"&gt;UTF-8&lt;/a&gt; encoded and switch to the right encoding.&lt;/p&gt;
&lt;p&gt;good news for the future: &lt;a target="_blank" href="http://www.php.net"&gt;PHP&lt;/a&gt; 6 will have a widespread &lt;a target="_blank" href="http://www.unicode.org/"&gt;Unicode&lt;/a&gt;-support also enabling this feature by default.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/handgestrickt?a=9bymjqx0sLo:B05tN_pHp_A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/handgestrickt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            </item>

            
            <item>
                <guid isPermaLink="true">http://www.handgestrickt.biz/item/95/</guid>
                <title>relaunch of mp3.de</title>
                <link>http://www.handgestrickt.biz/item/95/</link>

                
                    
                <author>info@handgestrickt.biz (Stefan Jelner)</author>

                    
                
                
                <category>jobs</category>

                
                <pubDate>Mon, 23 Jul 2007 21:11:40 +0200</pubDate>
                <description>&lt;p&gt;for the cologne agency &lt;a href="http://www.tigavision.de" target="_blank"&gt;tigavision GmbH&lt;/a&gt;, handgestrickt is making the AJAX-functionalities for the relaunch of the german well-known music-platform &lt;a href="http://www.mp3.de" target="_blank"&gt;mp3.de&lt;/a&gt;. todays topic was the common search-input functionality, to suggest possible values based upon some characters the user typed in. one interesting task was the &amp;quot;loose&amp;quot; or tolerant phonetic search for entries. this is done by the &lt;a href="http://www.mysql.com" target="_blank"&gt;MySQL&lt;/a&gt; and &lt;a href="http://www.php.net" target="_blank"&gt;PHP&lt;/a&gt;-function &lt;a href="http://en.wikipedia.org/wiki/Soundex" target="_blank"&gt;soundex&lt;/a&gt;. this function calculates some phonetic key for every word, that can be matched against nearly matching words. for performance we splitted the result of &lt;a href="http://en.wikipedia.org/wiki/Soundex" target="_blank"&gt;soundex&lt;/a&gt; into varchar and bigint pieces and stored them in the database with indexes. the result was a lightining fast phonetically tolerant suggestion algorithm.&lt;/p&gt;
&lt;p&gt;as a developing enviroment we used a Windows 2000 with a &lt;a href="http://www.apachefriends.org/de/xampp.html" target="_blank"&gt;XAMPP&lt;/a&gt;-installation. &lt;a href="http://www.apache.org" target="_blank"&gt;Apache&lt;/a&gt;, &lt;a href="http://www.mysql.com" target="_blank"&gt;MySQL&lt;/a&gt;, &lt;a href="http://www.php.net" target="_blank"&gt;PHP5&lt;/a&gt; is installed in minutes. unbelievable! for versioning we use &lt;a href="http://tortoisesvn.tigris.org/" target="_blank"&gt;TortoiseSVN&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/handgestrickt?a=4qPQXeQWFik:mZWjQLOW47E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/handgestrickt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            </item>

            
            <item>
                <guid isPermaLink="true">http://www.handgestrickt.biz/item/94/</guid>
                <title>newbie-Ruby</title>
                <link>http://www.handgestrickt.biz/item/94/</link>

                
                    
                <author>info@handgestrickt.biz (Stefan Jelner)</author>

                    
                
                
                <category>general</category>

                
                <pubDate>Sat, 21 Jul 2007 17:02:24 +0200</pubDate>
                <description>&lt;p&gt;just for fun and to provide a very new service to our customers, handgestrickt learned &lt;a href="http://www.ruby-lang.org" target="_blank"&gt;Ruby&lt;/a&gt; recently. the syntax is simple, highly structured, clearly readable, yet powerful. for people who are used to read cryptic &lt;a href="http://www.perl.com" target="_blank"&gt;Perl&lt;/a&gt;-scripts, &lt;a href="http://www.ruby-lang.org" target="_blank"&gt;Ruby&lt;/a&gt; is a real delight.&lt;/p&gt;
&lt;p&gt;in the next weeks we will have a look at &lt;a href="http://www.rubyonrails.org" target="_blank"&gt;Ruby On Rails&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;inspite of using the &lt;a href="http://www.apache.org" target="_blank"&gt;Apache&lt;/a&gt; mod_ruby to make our &lt;a href="http://www.ruby-lang.org" target="_blank"&gt;Ruby&lt;/a&gt;-scripts running on the webserver, we just run them as CGI-scripts by adding the following to the &lt;a href="http://www.apache.org" target="_blank"&gt;Apache&lt;/a&gt;-configuration:&lt;/p&gt;
&lt;pre&gt;&lt;code class="apache" rel="Apache directives"&gt;&amp;lt;IfModule mod_mime.c&amp;gt;&lt;br /&gt;    AddHandler cgi-script .cgi .rb&lt;br /&gt;&amp;lt;/IfModule&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;we do not want to hide our first efforts. the following script reads out the current folder and outputs it to the browser. you can click on a file or folder to open it.&lt;/p&gt;
&lt;pre&gt;&lt;code rel="Ruby Source Code" class="ruby"&gt;#!/usr/bin/ruby&lt;br /&gt;&lt;br /&gt;class Folderview&lt;br /&gt;	#requiring and including necessary modules&lt;br /&gt;	require &amp;quot;erb&amp;quot;&lt;br /&gt;	include ERB::Util&lt;br /&gt;	require &amp;quot;cgi&amp;quot;&lt;br /&gt;&lt;br /&gt;	#constructor&lt;br /&gt;	def initialize(folder = nil)&lt;br /&gt;		#default values&lt;br /&gt;		@folders = []&lt;br /&gt;		@files = []&lt;br /&gt;		@folder = &amp;quot;./&amp;quot;&lt;br /&gt;		@cgi_folder = &amp;quot;&amp;quot;&lt;br /&gt;		#if a folder is passed&lt;br /&gt;		if !folder.nil?&lt;br /&gt;			@folder = add_slash(folder)&lt;br /&gt;		end&lt;br /&gt;		#add the current cgi-values&lt;br /&gt;		@cgi = CGI.new&lt;br /&gt;  		if @cgi.has_key?(&amp;quot;folder&amp;quot;)&lt;br /&gt;  			@folder += add_slash(@cgi[&amp;quot;folder&amp;quot;])&lt;br /&gt;  			@cgi_folder = add_slash(@cgi[&amp;quot;folder&amp;quot;])&lt;br /&gt;  		end&lt;br /&gt;		#read the folder data&lt;br /&gt;  		read_data&lt;br /&gt;	end&lt;br /&gt;&lt;br /&gt;	#reads the folder data and pushes it into the related arrays&lt;br /&gt;	def read_data&lt;br /&gt;		folder = Dir.new(@folder)&lt;br /&gt;			while data = folder.read&lt;br /&gt;				if data !~ /^\./&lt;br /&gt;					if File.directory?(@folder+data)&lt;br /&gt;						@folders.push(data)&lt;br /&gt;					elsif File.file?(@folder+data)&lt;br /&gt;						@files.push(data)&lt;br /&gt;					end&lt;br /&gt;				end&lt;br /&gt;			end&lt;br /&gt;   		folder.close&lt;br /&gt;	end&lt;br /&gt;&lt;br /&gt;	#output the whole HTML-tree in &amp;lt;pre&amp;gt;-tags&lt;br /&gt;	def output_html&lt;br /&gt;		puts &amp;quot;Content-Type: text/html\n\n&amp;quot;&lt;br /&gt;		puts &amp;quot;&amp;lt;pre&amp;gt;\n&amp;quot;&lt;br /&gt;		output_folders&lt;br /&gt;		output_files&lt;br /&gt;		puts &amp;quot;&amp;lt;/pre&amp;gt;\n&amp;quot;&lt;br /&gt;	end&lt;br /&gt;&lt;br /&gt;	#outputs the folders one by one&lt;br /&gt;	def output_folders&lt;br /&gt;		@folders.each do |folder|&lt;br /&gt;			puts &amp;quot;&amp;lt;a href=\&amp;quot;#{ENV[&amp;quot;SCRIPT_NAME&amp;quot;]}?folder=#{url_encode(@cgi_folder+folder)}\&amp;quot;&amp;gt;#{html_escape(folder)}&amp;lt;/a&amp;gt;\n&amp;quot;;&lt;br /&gt;		end&lt;br /&gt;	end&lt;br /&gt;&lt;br /&gt;	#outputs the files one by one&lt;br /&gt;	def output_files&lt;br /&gt;		@files.each do |file|&lt;br /&gt;			puts &amp;quot;&amp;lt;a href=\&amp;quot;#{@folder}#{url_encode(file)}\&amp;quot;&amp;gt;#{html_escape(file)}&amp;lt;/a&amp;gt;\n&amp;quot;;&lt;br /&gt;		end&lt;br /&gt;	end&lt;br /&gt;&lt;br /&gt;	#adds a slash to folder names if necessary&lt;br /&gt;	def add_slash(folder)&lt;br /&gt;		if folder !~ /\/$/&lt;br /&gt;			folder += &amp;quot;/&amp;quot;&lt;br /&gt;		end&lt;br /&gt;		return folder&lt;br /&gt;	end&lt;br /&gt;&lt;br /&gt;	#access rules&lt;br /&gt;	public :initialize, :output_html&lt;br /&gt;	private :add_slash, :read_data, :output_folders, :output_files&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;view = Folderview.new&lt;br /&gt;view.output_html&lt;br /&gt;exit&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/handgestrickt?a=pMp3nFX4X6o:ucmRdvYMVa8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/handgestrickt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            </item>

            
            <item>
                <guid isPermaLink="true">http://www.handgestrickt.biz/item/93/</guid>
                <title>kochlip.de, typo3 and first typoscript</title>
                <link>http://www.handgestrickt.biz/item/93/</link>

                
                    
                <author>info@handgestrickt.biz (Stefan Jelner)</author>

                    
                
                
                <category>jobs</category>

                
                <pubDate>Sat, 21 Jul 2007 16:48:51 +0200</pubDate>
                <description>&lt;p&gt;handgestrickt is very proud of the first complex &lt;a href="http://www.typo3.net/tsref/" target="_blank"&gt;typoscript&lt;/a&gt; using &lt;a href="http://typo3.org/documentation/document-library/extension-manuals/automaketemplate/current/" target="_blank"&gt;automaketemplate&lt;/a&gt;, a barrier-free complex tree-menu called &lt;a href="http://typo3.org/documentation/document-library/extension-manuals/cron_accessiblemenus/current/" target="_blank"&gt;cron_accessiblemenus&lt;/a&gt; and the HTTPS-enforcer &lt;a href="http://typo3.org/documentation/document-library/extension-manuals/https_enforcer/current/" target="_blank"&gt;https_enforcer&lt;/a&gt;. this template is still very simple, but already providing a lot of great functionality. i wrote it for my customer&lt;a href="http://www.kochclip.de" target="_blank"&gt; kochclip.de&lt;/a&gt;. the designer is using dreamweaver and the HTML-templates are made, using the barrier-free-features of it plus the JavaScript-spryMenu. this &lt;a href="http://www.typo3.net/tsref/" target="_blank"&gt;typoscript&lt;/a&gt; is using all the naming conventions of dreamweaver. and it works well! in the next weeks, i want to have a look at &lt;a href="http://typo3.org/documentation/document-library/extension-manuals/templavoila/current/" target="_blank"&gt;templavoila&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.typo3.net/tsref/" target="_blank"&gt;typoscript&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typoscript" rel="Typoscript Source Code"&gt;config {&lt;br /&gt;	locale_all = de_DE&lt;br /&gt;	language = de&lt;br /&gt;	htmlTag_langKey = de&lt;br /&gt;	doctype = xhtml_strict&lt;br /&gt;	metaCharset = iso-8859-1&lt;br /&gt;	xhtml_cleaning = all&lt;br /&gt;	simulateStaticDocuments = 1&lt;br /&gt;	simulateStaticDocuments_addTitle = 1&lt;br /&gt;	noPageTitle = 2&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;meta {&lt;br /&gt;	keywords.field = keywords&lt;br /&gt;	description.field = description&lt;br /&gt;	language = de&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;plugin.tx_automaketemplate_pi1 {&lt;br /&gt;	content = FILE&lt;br /&gt;	content.file = fileadmin/templates/h131f.html&lt;br /&gt;	elements {&lt;br /&gt;		HEAD.all = 1&lt;br /&gt;		HEAD.all.subpartMarker = DOCUMENT_HEADER&lt;br /&gt;		HEAD.rmTagSections = title&lt;br /&gt;		HEAD.rmSingleTags = meta&lt;br /&gt;		BODY.all = 1&lt;br /&gt;		BODY.all.subpartMarker = DOCUMENT_BODY&lt;br /&gt;		DIV.all = 1&lt;br /&gt;	}&lt;br /&gt;	relPathPrefix = fileadmin/templates/&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;temp.head_menu = HMENU&lt;br /&gt;temp.head_menu {&lt;br /&gt;	entryLevel = 1&lt;br /&gt;	special = directory&lt;br /&gt;	special.value = 35&lt;br /&gt;	1 = TMENU&lt;br /&gt;	1 {&lt;br /&gt;		IProcFunc = user_cronaccessiblemenus-&amp;gt;makeAccessible&lt;br /&gt;		IProcFunc.accessKeys = 1&lt;br /&gt;		IProcFunc.dfn = 1&lt;br /&gt;		IProcFunc.dfn.inATag = 1&lt;br /&gt;		IProcFunc.appendWrap = &amp;lt;span class=accesskey&amp;gt;&amp;amp;nbsp;(ALT-|).&amp;lt;/span&amp;gt;&lt;br /&gt;		IProcFunc.dfn.start = 1&lt;br /&gt;		IProcFunc.dfn.stdWrap.noTrimWrap = || |&lt;br /&gt;		IProcFunc.dfn.menuSet = mainmenu&lt;br /&gt;		wrap = &amp;lt;ul id=&amp;quot;MenuBar1&amp;quot; class=&amp;quot;MenuBarHorizontal&amp;quot;&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;		expAll = 1&lt;br /&gt;		NO {&lt;br /&gt;			ATagTitle.field = title&lt;br /&gt;			ATagParams.insertData = 1&lt;br /&gt;			ATagParams = tabindex = {register:count_MENUOBJ}&lt;br /&gt;			wrapItemAndSub = &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;		}&lt;br /&gt;		IFSUB=1&lt;br /&gt;    		IFSUB{&lt;br /&gt;      			ATagTitle.field = title&lt;br /&gt;			ATagParams.insertData = 1&lt;br /&gt;			ATagParams = tabindex = {register:count_MENUOBJ} class = MenuBarItemSubmenu&lt;br /&gt;			wrapItemAndSub = &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;    		}&lt;br /&gt;	}&lt;br /&gt;	2 &amp;lt; .1&lt;br /&gt;	2.wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;&lt;br /&gt;	3 &amp;lt; .2&lt;br /&gt;	4 &amp;lt; .2&lt;br /&gt;	5 &amp;lt; .2&lt;br /&gt;	6 &amp;lt; .2&lt;br /&gt;	7 &amp;lt; .2&lt;br /&gt;	8 &amp;lt; .2&lt;br /&gt;	9 &amp;lt; .2&lt;br /&gt;	10 &amp;lt; .2&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;temp.foot_menu = HMENU&lt;br /&gt;temp.foot_menu {&lt;br /&gt;	entryLevel = 1&lt;br /&gt;	special = directory&lt;br /&gt;	special.value = 36&lt;br /&gt;	1 = TMENU&lt;br /&gt;	1 {&lt;br /&gt;		IProcFunc = user_cronaccessiblemenus-&amp;gt;makeAccessible&lt;br /&gt;		IProcFunc.accessKeys = 1&lt;br /&gt;		IProcFunc.dfn = 1&lt;br /&gt;		IProcFunc.dfn.inATag = 1&lt;br /&gt;		IProcFunc.appendWrap = &amp;lt;span class=accesskey&amp;gt;&amp;amp;nbsp;(ALT-|).&amp;lt;/span&amp;gt;&lt;br /&gt;		IProcFunc.dfn.start = 1&lt;br /&gt;		IProcFunc.dfn.stdWrap.noTrimWrap = || |&lt;br /&gt;		IProcFunc.dfn.menuSet = mainmenu&lt;br /&gt;		wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;		expAll = 1&lt;br /&gt;		NO {&lt;br /&gt;			ATagTitle.field = title&lt;br /&gt;			ATagParams.insertData = 1&lt;br /&gt;			ATagParams = tabindex = {register:count_MENUOBJ}&lt;br /&gt;			wrapItemAndSub = &amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	2 &amp;lt; .1&lt;br /&gt;	3 &amp;lt; .2&lt;br /&gt;	4 &amp;lt; .2&lt;br /&gt;	5 &amp;lt; .2&lt;br /&gt;	6 &amp;lt; .2&lt;br /&gt;	7 &amp;lt; .2&lt;br /&gt;	8 &amp;lt; .2&lt;br /&gt;	9 &amp;lt; .2&lt;br /&gt;	10 &amp;lt; .2&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;temp.content_normal = CONTENT&lt;br /&gt;temp.content_normal {&lt;br /&gt;	table = tt_content&lt;br /&gt;	select {&lt;br /&gt;		pidInList = this&lt;br /&gt;		orderBy = sorting&lt;br /&gt;		where = colPos = 0&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;temp.content_left = CONTENT&lt;br /&gt;temp.content_left {&lt;br /&gt;	table = tt_content&lt;br /&gt;	select {&lt;br /&gt;		pidInList = this&lt;br /&gt;		orderBy = sorting&lt;br /&gt;		where = colPos = 1&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;temp.content_right = CONTENT&lt;br /&gt;temp.content_right {&lt;br /&gt;	table = tt_content&lt;br /&gt;	select {&lt;br /&gt;		pidInList = this&lt;br /&gt;		orderBy = sorting&lt;br /&gt;		where = colPos = 2&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;temp.headTemplate = TEMPLATE&lt;br /&gt;temp.headTemplate {&lt;br /&gt;	template =&amp;lt; plugin.tx_automaketemplate_pi1&lt;br /&gt;	workOnSubpart = DOCUMENT_HEADER&lt;br /&gt;}&lt;br /&gt;temp.bodyTemplate = TEMPLATE&lt;br /&gt;temp.bodyTemplate {&lt;br /&gt;	template =&amp;lt; plugin.tx_automaketemplate_pi1&lt;br /&gt;	workOnSubpart = DOCUMENT_BODY&lt;br /&gt;	subparts.navigation &amp;lt; temp.head_menu&lt;br /&gt;	subparts.mainContent &amp;lt; temp.content_normal&lt;br /&gt;	subparts.sidebar1 &amp;lt; temp.content_left&lt;br /&gt;	subparts.sidebar2 &amp;lt; temp.content_right&lt;br /&gt;	subparts.footer &amp;lt; temp.foot_menu&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;page = PAGE&lt;br /&gt;page {&lt;br /&gt;	typeNum = 0&lt;br /&gt;	10 &amp;lt; plugin.tx_httpsenforcer_pi1&lt;br /&gt;	20 &amp;lt; temp.bodyTemplate&lt;br /&gt;	headerData {&lt;br /&gt;		10  &amp;lt; temp.headTemplate&lt;br /&gt;		20 = TEXT&lt;br /&gt;		20.insertData=1&lt;br /&gt;		20.wrap = &amp;lt;title&amp;gt;|&amp;lt;/title&amp;gt;&lt;br /&gt;		20.value = {leveltitle:0} - {field:title}&lt;br /&gt;		30 = TEXT&lt;br /&gt;		30.value = &amp;lt;script language=&amp;quot;JavaScript&amp;quot; type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;fileadmin/templates/js/frame_hijacking.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;	}&lt;br /&gt;	includeCSS {&lt;br /&gt;		 file1 = fileadmin/templates/css/kochclip_admin.css&lt;br /&gt;		 file1.title = styles provided by the system administrator and typoscript writer&lt;br /&gt;		 file1.media = screen&lt;br /&gt;	}&lt;br /&gt;	bodyTagAdd = class = thrColFixHdr&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/handgestrickt?a=oUW6-eI2SxM:Zt2JAhyVfFM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/handgestrickt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            </item>

            
            <item>
                <guid isPermaLink="true">http://www.handgestrickt.biz/item/92/</guid>
                <title>musikfabrik and litebox-bugfix</title>
                <link>http://www.handgestrickt.biz/item/92/</link>

                
                    
                <author>info@handgestrickt.biz (Stefan Jelner)</author>

                    
                
                
                <category>jobs</category>

                
                <pubDate>Sat, 21 Jul 2007 16:35:16 +0200</pubDate>
                <description>&lt;p&gt;handgestrickt finished the customer &lt;a href="http://www.musikfabrik.org" target="_blank"&gt;musikfabrik&lt;/a&gt;. the website was created with &lt;a href="http://www.contenido.de" target="_blank"&gt;Contenido&lt;/a&gt;. we integrated a FLASH-slideshow and a &lt;a href="http://www.doknowevil.net/litebox/" target="_blank"&gt;litebox&lt;/a&gt;-module. &lt;a href="http://www.doknowevil.net/litebox/" target="_blank"&gt;litebox&lt;/a&gt; had a bug in &lt;a href="http://www.microsoft.com/windows/products/winfamily/ie/" target="_blank"&gt;Internet Explorer 7&lt;/a&gt; that had to be fixed. when the image pops up, the screen is blurred out. unfortunately in &lt;a href="http://www.microsoft.com/windows/products/winfamily/ie/" target="_blank"&gt;Internet Explorer 7&lt;/a&gt; the screen is only blurred out partly. if you scroll down, the page is not blurred. i fixed this bug, including an algorithm, that tries all properties to find the document-height. in the end it takes the highest value. the real hard work was moving the customer from one server to another. because &lt;a href="http://www.contenido.de" target="_blank"&gt;Contenido&lt;/a&gt; is lacking of a client-export-feature, i had to write a script that does this. all the foreign-keys had to be retrieved an reconnected. additionally some keys were hardcoded into templates. all of the templates had to be rewritten with search and replace. finally this thing is running cleanly on a new server.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.doknowevil.net/litebox/" target="_blank"&gt;litebox&lt;/a&gt; bugfix:&lt;/p&gt; &lt;pre&gt;&lt;code rel="JavaScript Source Code" class="javascript"&gt;function getPageSize(){&lt;br /&gt;	var windowWidth, windowHeight;&lt;br /&gt;	if (self.innerHeight) {	// all except Explorer&lt;br /&gt;		windowWidth = self.innerWidth;&lt;br /&gt;		windowHeight = self.innerHeight;&lt;br /&gt;	} else if (document.documentElement &amp;amp;&amp;amp; document.documentElement.clientHeight) { // Explorer 6 Strict Mode&lt;br /&gt;		windowWidth = document.documentElement.clientWidth;&lt;br /&gt;		windowHeight = document.documentElement.clientHeight;&lt;br /&gt;	} else if (document.body) { // other Explorers&lt;br /&gt;		windowWidth = document.body.clientWidth;&lt;br /&gt;		windowHeight = document.body.clientHeight;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	var pageWidth = 0;&lt;br /&gt;	if(document.body.clientWidth &amp;amp;&amp;amp; pageWidth &amp;lt; document.body.clientWidth) pageWidth = document.body.clientWidth;&lt;br /&gt;	if(document.body.scrollWidth &amp;amp;&amp;amp; pageWidth &amp;lt; document.body.scrollWidth) pageWidth = document.body.scrollWidth;&lt;br /&gt;	if(document.documentElement.scrollWidth &amp;amp;&amp;amp; pageWidth &amp;lt; document.documentElement.scrollWidth) pageWidth = document.documentElement.scrollWidth;&lt;br /&gt;	if(document.documentElement.clientWidth &amp;amp;&amp;amp; pageWidth &amp;lt; document.documentElement.clientWidth) pageWidth = document.documentElement.clientWidth;&lt;br /&gt;	if(document.documentElement.offsetWidth &amp;amp;&amp;amp; pageWidth &amp;lt; document.documentElement.offsetWidth) pageWidth = document.documentElement.offsetWidth;&lt;br /&gt;	if(document.body.offsetWidth &amp;amp;&amp;amp; pageWidth &amp;lt; document.body.offsetWidth) pageWidth = document.body.offsetWidth;&lt;br /&gt;	if(window.innerWidth &amp;amp;&amp;amp; pageWidth &amp;lt; window.innerWidth) pageWidth = window.innerWidth;&lt;br /&gt;&lt;br /&gt;	var pageHeight = 0;&lt;br /&gt;	if(document.body.clientHeight &amp;amp;&amp;amp; pageHeight &amp;lt; document.body.clientHeight) pageHeight = document.body.clientHeight;&lt;br /&gt;	if(document.body.scrollHeight &amp;amp;&amp;amp; pageHeight &amp;lt; document.body.scrollHeight) pageHeight = document.body.scrollHeight;&lt;br /&gt;	if(document.documentElement.scrollHeight &amp;amp;&amp;amp; pageHeight &amp;lt; document.documentElement.scrollHeight) pageHeight = document.documentElement.scrollHeight;&lt;br /&gt;	if(document.documentElement.clientHeight &amp;amp;&amp;amp; pageHeight &amp;lt; document.documentElement.clientHeight) pageHeight = document.documentElement.clientHeight;&lt;br /&gt;	if(document.documentElement.offsetHeight &amp;amp;&amp;amp; pageHeight &amp;lt; document.documentElement.offsetHeight) pageHeight = document.documentElement.offsetHeight;&lt;br /&gt;	if(document.body.offsetHeight &amp;amp;&amp;amp; pageHeight &amp;lt; document.body.offsetHeight) pageHeight = document.body.offsetHeight;&lt;br /&gt;	if(window.innerHeight &amp;amp;&amp;amp; pageHeight &amp;lt; window.innerHeight) pageHeight = window.innerHeight;&lt;br /&gt;&lt;br /&gt;	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);&lt;br /&gt;	return arrayPageSize;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/handgestrickt?a=6fTO4d5Xykw:aVrzvSDWSsM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/handgestrickt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            </item>

            
    </channel>
</rss>
