<?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: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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>my 2 cents</title>
	
	<link>http://corneliusweiss.de</link>
	<description>Exciting brainjunk of Cornelius Weiss</description>
	<lastBuildDate>Mon, 16 Apr 2012 13:43:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2-alpha</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/corneliusweiss" /><feedburner:info uri="corneliusweiss" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Tine 2.0 Translations moved to Transifex</title>
		<link>http://feedproxy.google.com/~r/corneliusweiss/~3/DohSlg7Eyrc/</link>
		<comments>http://corneliusweiss.de/2012/04/16/tine20translations-moved-to-transifex/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 13:43:33 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[eGroupWare]]></category>
		<category><![CDATA[extJS]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=309</guid>
		<description><![CDATA[Translations for Tine 2.0 are now managed by Transifex, a free online service for open source projects. After a short testing phase, we decided, that it has a lot of advantaged over Launchpad: Using and configuring is mostly intuitive. Managing translation groups does not depend on the service. The tx command line client eases translation [...]]]></description>
			<content:encoded><![CDATA[<p>Translations for <a href="http://www.tine20.org/">Tine 2.0</a> are now managed by <a href="https://www.transifex.net/">Transifex</a>, a free online service for open source projects. After a short testing phase, we decided, that it has a lot of advantaged over <a href="https://launchpad.net/tine20">Launchpad</a>:</p>
<ul>
<li>Using and configuring is mostly intuitive.</li>
<li>Managing translation groups does not depend on the service.</li>
<li>The tx command line client eases translation management a lot.</li>
</ul>
<p>I assembled some <a href="http://www.tine20.org/wiki/index.php/Contributors/Howtos/Translations">documentation in our wiki</a>. Translating for Tine 2.0 is really easy now. If you are familiar with a unix console, also have a look at the <a href="http://help.transifex.com/features/client/">command line tools</a>, its really handy and powerful. As we have the .tx configuration in our repo now, you can just start the tine20 directory of your git clone with tx push / tx pull -l &lt;your lang&gt;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2012/04/16/tine20translations-moved-to-transifex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corneliusweiss.de/2012/04/16/tine20translations-moved-to-transifex/</feedburner:origLink></item>
		<item>
		<title>Impressions from the CLT 2012</title>
		<link>http://feedproxy.google.com/~r/corneliusweiss/~3/ST2AXebEQ0g/</link>
		<comments>http://corneliusweiss.de/2012/03/21/impressions-from-the-clt-2012/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 16:11:36 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[eGroupWare]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=302</guid>
		<description><![CDATA[Superb organisation! Congrats to the whole Team of the &#8220;Chemnitzer Linux Tage&#8221;. CLT is definitely on the road of becoming _THE_ german Linux community event. Tine 2.0 will be there again next year!]]></description>
			<content:encoded><![CDATA[<p><iframe width="420" height="315" src="http://www.youtube.com/embed/iuPfsNMVzOg" frameborder="0" allowfullscreen></iframe></p>
<p>Superb organisation! Congrats to the whole Team of the &#8220;Chemnitzer Linux Tage&#8221;. CLT is definitely on the road of becoming _THE_ german Linux community event. Tine 2.0 will be there again next year!</p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2012/03/21/impressions-from-the-clt-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corneliusweiss.de/2012/03/21/impressions-from-the-clt-2012/</feedburner:origLink></item>
		<item>
		<title>Tine 2.0 moved to GIT</title>
		<link>http://feedproxy.google.com/~r/corneliusweiss/~3/vIBA9jsLM1Q/</link>
		<comments>http://corneliusweiss.de/2011/03/26/tine-2-0-moved-to-git/#comments</comments>
		<pubDate>Sat, 26 Mar 2011 10:25:07 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=292</guid>
		<description><![CDATA[The Tine 2.0 Project changes its Sourcecode-Management-System from Subversion to GIT. The main reasons for this change are the fast and reliable branching and merging capabilities of GIT. With this, the project hopes to reach an even higher level of development productivity. As all Contents from the old Subversion got migrated into the new GIT [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.tine20.org/">Tine 2.0 Project</a> changes its Sourcecode-Management-System from <a href="http://subversion.tigris.org/">Subversion</a> to <a href="http://git-scm.com/">GIT</a>.</p>
<p>The main reasons for this change are the fast and reliable branching and merging capabilities of GIT. With this, the project hopes to reach an even higher level of development productivity.</p>
<p>As all Contents from the old Subversion got migrated into the <a href="http://git.tine20.org/git/tine20/">new GIT repository</a> the Subversion service got switched off.</p>
<p><strong>Anonymous Access</strong><br />
Anonymous cloning the sources could be done with:<br />
<code>
<pre>git clone http://git.tine20.org/git/tine20</pre>
<p></code></p>
<p>Switch go the stable branch with<br />
<code>
<pre>git checkout -b 2011-01 origin/2011-01</pre>
<p></code></p>
<p>Updates could be retrieved with<br />
<code>
<pre>git pull</pre>
<p></code></p>
<p><strong>Contributors Access</strong><br />
As a contributor please make sure to familiarize yourself with GIT and read one of the dozens of introductions out in the net.</p>
<p>Contributors need to check out per https:<br />
<code>
<pre>git clone https://git.tine20.org/git/tine20</pre>
<p></code></p>
<p>Usersames and passwords got migrated from the old subversion service</p>
<p>Depending on your Operating system / tools you might need to add a
<pre>~/.netrc</pre>
<p> with the following content:<br />
<code>
<pre>
machine git.tine20.org
login MYCONTRIBUTORSLOGINNAME
password MYCONTRIBUTORSPASSWORD
</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2011/03/26/tine-2-0-moved-to-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corneliusweiss.de/2011/03/26/tine-2-0-moved-to-git/</feedburner:origLink></item>
		<item>
		<title>New Features in Calendar for Tine 2.0 Neele (2011-01)</title>
		<link>http://feedproxy.google.com/~r/corneliusweiss/~3/m-RM9aAvyT4/</link>
		<comments>http://corneliusweiss.de/2011/01/21/new-features-in-calendar-for-tine-2-0-neele-2011-01/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 10:48:50 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[extJS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[tine 2.0]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=286</guid>
		<description><![CDATA[I just assembled a small video, describing the new feature which came in Tine 2.0Version Neele: Printing Color definition Fast responses to invitations Quick tip symbols Out of view hints]]></description>
			<content:encoded><![CDATA[<p>I just assembled a small video, describing the new feature which came in <a href="http://www.tine20.org/">Tine 2.0</a>Version Neele:</p>
<ul>
<li>Printing</li>
<li>Color definition</li>
<li>Fast responses to invitations</li>
<li>Quick tip symbols</li>
<li>Out of view hints</li>
</ul>
<p><iframe title="YouTube video player" class="youtube-player" type="text/html" width="650" height="395" src="http://www.youtube.com/embed/rN-VbjmP4hE" frameborder="0" allowFullScreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2011/01/21/new-features-in-calendar-for-tine-2-0-neele-2011-01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corneliusweiss.de/2011/01/21/new-features-in-calendar-for-tine-2-0-neele-2011-01/</feedburner:origLink></item>
		<item>
		<title>How to Speed up the Slow Zend_Date Class</title>
		<link>http://feedproxy.google.com/~r/corneliusweiss/~3/UQ4F9xbW_Lw/</link>
		<comments>http://corneliusweiss.de/2010/11/09/how-to-speed-up-the-slow-zend_date-class/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 14:29:21 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[tine 2.0]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=270</guid>
		<description><![CDATA[Is Zend_Date slow? Well, it&#8217;s always easy to state that something is slow, so let me be a bit more precise: If you need to do a lot of complex date/time operations in you applications, Zend_Date might turn out to be the major bottleneck. If you just need localization for some date&#8217;s Zend_Date presumably won&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<h4>Is Zend_Date slow?</h4>
<p>Well, it&#8217;s always easy to state that something is slow, so let me be a bit more precise: If you need to do a lot of complex date/time operations in you applications, <a href="http://framework.zend.com/manual/en/zend.date.html">Zend_Date</a> might turn out to be the major bottleneck. If you just need localization for some date&#8217;s Zend_Date presumably won&#8217;t be your problem.</p>
<p>In the Calendar app of <a href="http://www.tine20.org/">Tine 2.0</a> it turned out, that Zend_Date consumes 66% of the time of a Month view Request in a realistic szenario.</p>
<p>Just bashing Zend_Date would be to easy, as it has a remarkable feature set. Most notably in my view:<br />
- solves the year 2038 problem on 32 bit systems<br />
- full timezone support<br />
- full localization support<br />
- full support for ISO 8601 date string identifiers</p>
<p>As Date/Time is a really complex topic, here my full acknowledgement for this feature set at a time when PHP couldn&#8217;t help on all this.</p>
<p>On the other hand you don&#8217;t always need all the nice features it has, but you might want to use Zend_Date as generic date/time abstraction all over your applications. In this case Zend_Date is slow and has a lot of potential for improvements.</p>
<h4>Patching Zend_Date</h4>
<h5>Zend_Date::__construct($date, $format, $locale)</h5>
<p>Zend_Dates could be created from a date string in an arbitrary format and locale. This is great if you need to parse custom date strings.</p>
<p>When dealing with Zend_Date in backend operations, you normally only use very few date/time representation formats. e.g. &#8216;yyyy-MM-dd HH:mm:ss&#8217; which is the mysql date/time format.</p>
<p>For this kind of input Zend_Date has no optimization. An easy performance patch for this problem could be:</p>
<p><code> </code></p>
<p><code></p>
<pre>if ($format === 'yyyy-MM-dd HH:mm:ss') {
    $matches = array();
    preg_match("/^(\d{4})-(\d{2})-(\d{2})[T ]{1}(\d{2}):(\d{2}):(\d{2})/", $_ISO, $matches);

    if (count($matches) == 7) {
        list($match, $year, $month, $day, $hour, $minute, $second) = $matches;
        // NOTE: PHP5 timestamp support is 32 bit and ends on 2038-01-19 03:14:07
        if ($year &lt; 2038) {
           $date = mktime($hour, $minute, $second, $month, $day, $year);
           $format = Zend_Date::TIMESTAMP
       }
    }
}</pre>
<p></code></p>
<h5>Zend_Date::get($part, $locale)</h5>
<p>When converting Zend_Dates to strings, the same as above applies. Here an easy patch could be:<br />
<code> </code></p>
<p><code></p>
<pre>if (! $part) {
    $part = self::TIMESTAMP;
}

if (array_key_exists($part, self::$_dateMap)) {
    $dt = new DateTime('@' . $this-&gt;getUnixTimestamp());
    $dt-&gt;setTimezone(new DateTimeZone($this-&gt;getTimezone()));

    $s = $dt-&gt;format(self::$_dateMap[$part]);
    switch($part) {
        case 'm':
            $s = (int) preg_replace('/^0/', '', $s);
            break;
        }
    return $s;
}</pre>
<p></code></p>
<p>with this dateMap<br />
<code> </code></p>
<p><code></p>
<pre>private static $_dateMap = array(
    'yyyy-MM-dd HH:mm:ss' =&gt; 'Y-m-d H:i:s',
    'MM' =&gt; 'm',
    'm'  =&gt; 'i', // spechial handling required!
    'M'  =&gt; 'n',
    'd'  =&gt; 'j',
    'h'  =&gt; 'g',
    'H'  =&gt; 'G',
    'HH' =&gt; 'H',
    's'  =&gt; 's',
    'I'  =&gt; 'I',
    'z'  =&gt; 'T',
    'U'  =&gt; 'U',
    'eee' =&gt; 'N',
    'D'  =&gt; 'z',
    'e'  =&gt; 'w',
    'X'  =&gt; 'Z'
);</pre>
<p></code></p>
<h5>Zend_Date_DateObject::setTimezone($zone)</h5>
<p>As ZF requires PHP 5.2.4 and above, we can use native PHP functions to improve setTimezone:<br />
<code> </code></p>
<p><code></p>
<pre>public function setTimezone($zone = null)
{
    try {
        $dtz = new DateTimeZone($zone);
        $this-&gt;_offset   = $dtz-&gt;getOffset(new DateTime('1970-02-01 00:00:00'));
        $this-&gt;_timezone = $zone;
    } catch (Exception $e) {
        require_once 'Zend/Date/Exception.php';
        throw new Zend_Date_Exception("timezone ($zone) is not a known timezone", $zone);
    }
    if (($zone == 'UTC') or ($zone == 'GMT')) {
        $this-&gt;_dst = false;
    } else {
        $this-&gt;_dst = true;
    }
    return $this;
}</pre>
<p></code></p>
<p>This are just 3 very easy patches, but for a Tine 2.0 Calendar month view request it saves 41% of the request time!</p>
<h4>Avoiding Zend_Date</h4>
<p><a href="http://derickrethans.nl/">Derick Rethans</a> contributed a great <a href="http://php.net/DateTime">DateTime</a> class to PHP which is in included beginning with version 5.2 which got even more improved in version 5.3. This class solves the year 2038 problem, has full timezone support.<br />
<a href="http://corneliusweiss.de/wp-content/uploads/2010/11/DateTime.jpg"><img class="alignleft size-medium wp-image-272" title="DateTime" src="http://corneliusweiss.de/wp-content/uploads/2010/11/DateTime-300x181.jpg" alt="" width="300" height="181" /></a><br />
So my first idea was to write a new Zend_Date class which requires PHP version &gt;= 5.3 to be used as a drop in replacement. Unfortunately it turned out, that the design of Zend_Date is not compatible with the DateTime, or to be more precise, the new class would also be slow due to two base restrictions in Zend_Date:<br />
- ISO representation for date string identifiers<br />
- Zend_Date also represents date intervals which have a separate class in PHP.</p>
<p>At the end I implemented on own wrapper class around DateTime which supports some old Zend_Date signatures, so that we don&#8217;t had to edit all our code. Zend_Date is only used when Server side locale handling is needed, like in exports.</p>
<p>Switching from Zend_Date to native DateTime brought us a speed up of 66% in a calendar month view request.</p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2010/11/09/how-to-speed-up-the-slow-zend_date-class/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://corneliusweiss.de/2010/11/09/how-to-speed-up-the-slow-zend_date-class/</feedburner:origLink></item>
		<item>
		<title>How To Pronouce Tine 2.0</title>
		<link>http://feedproxy.google.com/~r/corneliusweiss/~3/2O4G1szdDSE/</link>
		<comments>http://corneliusweiss.de/2010/04/24/how-to-pronouce-tine-2-0/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 18:26:43 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=246</guid>
		<description><![CDATA[As it&#8217;s becomeing a FAQ, here a small note, how to procounce &#8220;Tine 2.0&#8220;: function bgplay(surl) { document.getElementById("bgplay").innerHTML= ""; } Tine two dot oh For those of you who are curious what Tine 2.0 stands for, please find my post from 2007/12 If you still need some more input for the next nerd party, you [...]]]></description>
			<content:encoded><![CDATA[<p>As it&#8217;s becomeing a FAQ, here a small note, how to procounce &#8220;<a href="http://www.tine20.org">Tine 2.0</a>&#8220;:<br />
<a href="http://corneliusweiss.de/wp-content/uploads/2010/04/tine-pronouce.gif"><img class="size-full wp-image-253 alignnone" title="tine-pronouce" src="http://corneliusweiss.de/wp-content/uploads/2010/04/tine-pronouce.gif" alt="" width="230" height="25" /></a><br />
<a href="http://www.leo.org/dict/audio_en/tine.mp3"></a></p>
<p><script>function bgplay(surl) {
  document.getElementById("bgplay").innerHTML=
    "<embed src='"+surl+"' hidden=true autostart=true loop=false>";
}</script></p>
<p><a href="http://www.leo.org/dict/audio_en/tine.mp3" onclick="bgplay('http://www.leo.org/dict/audio_en/tine.mp3'); return false;">Tine</a> <a href="http://www.leo.org/dict/audio_en/two.mp3" onclick="bgplay('http://www.leo.org/dict/audio_en/two.mp3'); return false;">two</a> <a href="http://www.leo.org/dict/audio_en/dot.mp3" onclick="bgplay('http://www.leo.org/dict/audio_en/dot.mp3'); return false;">dot</a> <a href="http://www.leo.org/dict/audio_en/oh.mp3" onclick="bgplay('http://www.leo.org/dict/audio_en/oh.mp3'); return false;">oh</a></p>
<p>For those of you who are curious what Tine 2.0 stands for, please find <a href="http://corneliusweiss.de/2007/12/12/some-thoughts-on-the-name-tine-20/">my post from 2007/12</a></p>
<p>If you still need some more input for the next nerd party, <a href="http://www.tine20.org/wiki/index.php/Releases">you can find the meaning of our version names here.</a></p>
<p><span id="bgplay" height=0"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2010/04/24/how-to-pronouce-tine-2-0/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://www.leo.org/dict/audio_en/tine.mp3" length="9113" type="audio/mpeg" />
<enclosure url="http://www.leo.org/dict/audio_en/dot.mp3" length="6605" type="audio/mpeg" />
<enclosure url="http://www.leo.org/dict/audio_en/oh.mp3" length="7650" type="audio/mpeg" />
<enclosure url="http://www.leo.org/dict/audio_en/two.mp3" length="7441" type="audio/mpeg" />
		<feedburner:origLink>http://corneliusweiss.de/2010/04/24/how-to-pronouce-tine-2-0/</feedburner:origLink></item>
		<item>
		<title>Impressions from the CLT 2010</title>
		<link>http://feedproxy.google.com/~r/corneliusweiss/~3/9f4VFF-uKQU/</link>
		<comments>http://corneliusweiss.de/2010/03/16/impressions-from-the-clt-2010/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 22:27:54 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=243</guid>
		<description><![CDATA[Superb organisation! Congrats to the whole Team of the &#8220;Chemnitzer Linux Tage&#8221;. CLT is definitely on the road of becoming _THE_ german Linux community event. Tine 2.0 will be there again next year!]]></description>
			<content:encoded><![CDATA[<p><object style="height: 344px; width: 425px"><param name="movie" value="http://www.youtube.com/v/EC5jjlG63mw"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="http://www.youtube.com/v/EC5jjlG63mw" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></object></p>
<p>Superb organisation! Congrats to the whole Team of the &#8220;Chemnitzer Linux Tage&#8221;. CLT is definitely on the road of becoming _THE_ german Linux community event. Tine 2.0 will be there again next year!</p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2010/03/16/impressions-from-the-clt-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corneliusweiss.de/2010/03/16/impressions-from-the-clt-2010/</feedburner:origLink></item>
		<item>
		<title>HTML 5 Multi + Drag and Drop File Uploads with ExtJS</title>
		<link>http://feedproxy.google.com/~r/corneliusweiss/~3/0Ja4r67u6Ic/</link>
		<comments>http://corneliusweiss.de/2010/03/04/html-5-multi-drag-and-drop-file-uploads-with-extjs/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 19:47:31 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[eGroupWare]]></category>
		<category><![CDATA[extJS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=238</guid>
		<description><![CDATA[In anticipation of the new Tine 2.0 version Mialena which is scheduled for March 2010 I&#8217;d like to show you a sneak preview about the new file upload features. Tine 2.0 is now able to upload multiple files at once. Additionally Files can be uploaded from directly out of the operating systems file manager or [...]]]></description>
			<content:encoded><![CDATA[<p>In anticipation of the new Tine 2.0 version Mialena which is scheduled for March 2010 I&#8217;d like to show you a sneak preview about the new file upload features.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/LZvhZDEABgo&#038;hl=de_DE&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/LZvhZDEABgo&#038;hl=de_DE&#038;fs=1" type="application/x-shockwave-flash" width="425" height="344" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Tine 2.0 is now able to upload multiple files at once. Additionally Files can be uploaded from directly out of the operating systems file manager or desktop using drag &amp; drop.</p>
<p>Being an open source project, it&#8217;s extremely important for us to chose freely available standard technologies. Therefore it has to to be emphasized, that these new features run in FF, Chrome and Safari without any additional plugins.</p>
<p>The ExtJS wrappers for File Browsing are wrapped into<br />
<a href="http://svn.tine20.org/svn/trunk/tine20/Tinebase/js/ux/file/BrowsePlugin.js">Ext.ux.file.BrowsePlugin</a></p>
<p>HTML 5 File uploading for ExtJS is wrapped into<br />
<a href="http://svn.tine20.org/svn/trunk/tine20/Tinebase/js/ux/file/Uploader.js">Ext.ux.file.Uploader</a></p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2010/03/04/html-5-multi-drag-and-drop-file-uploads-with-extjs/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://corneliusweiss.de/2010/03/04/html-5-multi-drag-and-drop-file-uploads-with-extjs/</feedburner:origLink></item>
		<item>
		<title>Ext JS 3.0 Cookbook Review</title>
		<link>http://feedproxy.google.com/~r/corneliusweiss/~3/TdrUhlE-31Q/</link>
		<comments>http://corneliusweiss.de/2010/01/20/ext-js-3-0-cookbook-review/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 09:45:09 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[bookreview]]></category>
		<category><![CDATA[extJS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=233</guid>
		<description><![CDATA[After seeing quite a few reviews of the &#8216;Ext JS 3.0 Cookbook&#8216; on the Ext JS related blogs, I was curious to hold a copy of the book in my hands. As you can guess from the title, the book contains recipes for solving GUI designs with Ext JS 3.0. In total the book comes [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.packtpub.com/ext-js-3-0-cookbook?utm_source=corneliusweiss.de&amp;utm_medium=link&amp;utm_content=blog&amp;utm_campaign=mdb_001538"><img class="alignleft" src="https://www.packtpub.com/images/100x123/1847198708.png" alt="" width="100" height="123" /></a> After seeing quite a few reviews of the &#8216;<a href="http://www.packtpub.com/ext-js-3-0-cookbook?utm_source=corneliusweiss.de&amp;utm_medium=link&amp;utm_content=blog&amp;utm_campaign=mdb_001538">Ext JS 3.0 Cookbook</a>&#8216; on the Ext JS related blogs, I was curious to hold a copy of the book in my hands.</p>
<p>As you can guess from the title, the book contains recipes for solving GUI designs with Ext JS 3.0. In total the book comes with 109 recipes divided into 10 chapters.</p>
<p>Chapter 1 gives a short introduction of the Ext JS way of DOM manipulation and other basic things. Together with Chapter 10, which is about design patterns in Ext JS this are the Chapters I like most in the book, cause they help to understand the whole Ext JS picture and present content you won&#8217;t find easily in the internet.</p>
<p>The 8 Chapters in between contain receipts as you expect from a cookbook. People familiar with the examples provided in the Ext JS SDK will have sawn about 70% of the receipts presented in the book. In Contrast to the examples in the SDK the printed recipes come with a lot of explanation suitable for beginners with Ext JS and non Javascript geeks. The recipes which are not part of the Ext JS SDK are of high quality and fill the gap where beginners might miss examples.</p>
<p>Chapter 2 tries to give an introduction into the Ext JS layout engine. I use the word &#8220;try&#8221; as I would expect that the receipts are not enough to explain a beginner the insights needed to understand and create complex layouts. Moreover this chapter misses to explain the new vbox and hbox layouts introduced in Ext JS 3.0. In my view, this layouts are the most important additions to the Ext JS layout engine in the new version.</p>
<p>Each recipe contains the additional sections &#8220;How it works&#8221; and &#8220;There is more&#8221;. Both of this sections are helpful for people who don&#8217;t just want to cook, but want to gain more insights of the Ext JS framework.</p>
<p>While a recipes book always has newbies and beginners as target audience, this book is not for beginners only. The explanations often stress points which are of importance for experienced users of the Ext JS framework. Moreover the Author frequently gives hints which are of importance for big web applications.</p>
<p>With the precise explanations and the elegance of his own receipts the author proves himself to have an excellent skill level in providing Ext JS based solutions. The examples provided in this book are not just working somehow, they are assembled within the spirit and design constrains of the Ext JS framework itself.</p>
<p>Additionally, it is notable that the version number in the books title reflects the actual state of the contents. In a number of receipts the solution is done using new features which where introduced in the 3.0 version of Ext JS.</p>
<p>In a big online book store, I would rate this book with 4 of 5 stars.</p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2010/01/20/ext-js-3-0-cookbook-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://corneliusweiss.de/2010/01/20/ext-js-3-0-cookbook-review/</feedburner:origLink></item>
		<item>
		<title>Cross Site AJAX Window Name Proxy for extjs/ext-core</title>
		<link>http://feedproxy.google.com/~r/corneliusweiss/~3/1YPsJC47rmc/</link>
		<comments>http://corneliusweiss.de/2009/12/09/cross-site-ajax-window-name-proxy-for-extjsext-core/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 08:56:44 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[extJS]]></category>
		<category><![CDATA[Internet security]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=222</guid>
		<description><![CDATA[Cross site communication in the browser using the XHTTPRequest Object is prohibited by the Same Domain Policy. With HTML 5 this restriction is relaxed within the so called workers. As of now, normally the browser can only communicate with the domain the document being displayed comes from. As always, most restrictions can be circumvented somehow. [...]]]></description>
			<content:encoded><![CDATA[<p>Cross site communication in the browser using the <a href="http://en.wikipedia.org/wiki/XMLHttpRequest">XHTTPRequest</a> Object is prohibited by the <a href="http://en.wikipedia.org/wiki/Same_origin_policy">Same Domain Policy</a>. With <a href="http://dev.w3.org/html5/spec/Overview.html">HTML 5</a> this restriction is relaxed within the so called <a href="http://www.whatwg.org/specs/web-workers/current-work/">workers</a>.</p>
<p>As of now, normally the browser can only communicate with the domain the document being displayed comes from. As always, most restrictions can be circumvented somehow. Quite a while now, the de facto standard approach for cross-site communication in the wild is <a href="http://en.wikipedia.org/wiki/JSON#JSONP">JSONP</a>.</p>
<p>In short: A javascript located at the foreign domain is inserted in background. Via the GET url parameters the data of the request is send. The script returned by the foreign server contains code which gets directly executed at include time of this script, e.g: callback({jsondata});</p>
<p>It is widely accepted that JSONP should be rated highly insecure for multiple reasons:<br />
- Including a script of a foreign domain is a build in XSS attack.<br />
- All parameters send to the foreign domain are part of the standard access logs of the foreign web servers.<br />
- &#8230;</p>
<p>A new idea for secure cross site communication <a href="http://www.sitepen.com/blog/2008/07/22/windowname-transport/">has come up</a> a year ago utilizes the fact, that the name property of browser windows/frames remains unchanged when a window/frame loads a new document even from a foreign domain. With this, it is possible to create a transport by inserting a hidden iframe which switches its document between the origin- and foreign domain.</p>
<p>This approach has the major advantage, that the data returned by the foreign domain is encoded as a string and could be evaluated in a safely. Moreover the request could be done via POST&#8217;s which solves EOI issues with server logs.</p>
<p>While I was aware of this new technique, I never had the need to do cross site request from the browser. In general my approach is to proxy data from foreign domains via the server as this gives a better control. However for a <a href="http://www.tine20.org/">Tine 2.0</a> related customer project I had the requirement to do cross site request from a website to a <a href="http://www.tine20.org/">Tine 2.0</a> installation directly from the browser.</p>
<p>Unfortunately I didn&#8217;t find any <a href="http://www.extjs.com/products/extjs/">extjs</a>/<a href="http://www.extjs.com/products/extcore/">ext-core</a> implementation of the window.name technique. Moreover I realized, that the implementation of other libraries always POST their request using form submits. But doing all request via form Submits would require an additional API for <a href="http://www.tine20.org/">Tine 2.0</a> as the standard JSON API talks <a href="http://groups.google.com/group/json-rpc/web/json-rpc-1-2-proposal">JSONRPC</a>.</p>
<p>So what I needed was a XHTTPRequest/AJAX solution to be able to utilize the standard Tine 2.0 API&#8217;s. For this I created a windowNameConnection Proxy which based on ext-core does AJAX requests to the foreign domain. This sequence diagram visualizes it&#8217;s simple workings:<br />
<a href="http://corneliusweiss.de/wp-content/uploads/2009/12/windowNameConnectionDiagramm.png"><img src="http://corneliusweiss.de/wp-content/uploads/2009/12/windowNameConnectionDiagramm-300x156.png" alt="windowNameConnectionDiagramm" title="windowNameConnectionDiagramm" width="300" height="156" class="aligncenter size-medium wp-image-227" /></a></p>
<p>You can find the latest version of the implementation <a href="http://svn.tine20.org/svn/trunk/tine20/Tinebase/js/ux/data/">here</a>. The usage of this connection class is straight forward as it works like a normal extjs connection:</p>
<pre><code>
var connection = new Ext.ux.data.windowNameConnection({
    // this url is autodetected if windowNameConnection is loaded
    // from the foreign domain
    proxyUrl: https://foreign.domain/windowNameConnection.html
});

connection.request({
    url: https://foregin.domain/apiurl,
    header: {...}
    params: {...},
    success: someSuccessCb
});
</code></pre>
<p>Of course the ability to do AJAX requests is purchased by a minor performance loss compared to form posts. BUT: The windowNameProxy should only be seen as a fallback for Browsers which are not capable of the HTML5 workers. Users of these old browsers are obviously not keen on enhanced performance. Otherwise they would use an up to date browser.</p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2009/12/09/cross-site-ajax-window-name-proxy-for-extjsext-core/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://corneliusweiss.de/2009/12/09/cross-site-ajax-window-name-proxy-for-extjsext-core/</feedburner:origLink></item>
	</channel>
</rss>

