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

<channel>
	<title>my 2 cents &#187; eGroupWare</title>
	<atom:link href="http://corneliusweiss.de/category/things-about-egroupware/feed/" rel="self" type="application/rss+xml" />
	<link>http://corneliusweiss.de</link>
	<description>Exciting brainjunk of Cornelius Weiss</description>
	<lastBuildDate>Sat, 24 Apr 2010 19:01:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>HTML 5 Multi + Drag and Drop File Uploads with ExtJS</title>
		<link>http://corneliusweiss.de/2010/03/04/html-5-multi-drag-and-drop-file-uploads-with-extjs/</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[Javascript]]></category>
		<category><![CDATA[eGroupWare]]></category>
		<category><![CDATA[extJS]]></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 desktop [...]]]></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>2</slash:comments>
		</item>
		<item>
		<title>Data Transport with JSON-RPC via Ext.Direct and Zend Framework Part 3</title>
		<link>http://corneliusweiss.de/2009/09/18/data-transport-with-json-rpc-via-ext-direct-and-zend-framework-part-3/</link>
		<comments>http://corneliusweiss.de/2009/09/18/data-transport-with-json-rpc-via-ext-direct-and-zend-framework-part-3/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 08:30:10 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[eGroupWare]]></category>
		<category><![CDATA[extJS]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=217</guid>
		<description><![CDATA[Now, with the results from Part 1 and Part 2, let&#8217;s take a deeper look into the Ext.Direct Providers to see how they work and what to do.
Prepareing a JSON Service Map Description
To use the Ext.direct framework we need to register a provider. For a remoting provider we need a service mapping description.
Ext.Direct.addProvider(Ext.apply(Ext.app.JSONRPC_API, {

  [...]]]></description>
			<content:encoded><![CDATA[<p>Now, with the results from <a href="http://corneliusweiss.de/2009/08/17/data-transport-with-json-rpc-via-ext-direct-and-zend-framework-part-1/">Part 1</a> and <a href="http://corneliusweiss.de/2009/09/04/data-transport-with-json-rpc-via-ext-direct-and-zend-framework-part-2/">Part 2</a>, let&#8217;s take a deeper look into the Ext.Direct Providers to see how they work and what to do.</p>
<h3>Prepareing a JSON Service Map Description</h3>
<p>To use the Ext.direct framework we need to register a provider. For a remoting provider we need a <em>service mapping description</em>.</p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">Ext.Direct.addProvider(Ext.apply(Ext.app.JSONRPC_API, {</span></p>
<p><code></p>
<pre>    'type'     : 'zfprovider',
    'url'      : Ext.app.JSONRPC_API.target
}));</pre>
<p></code></p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">Ext.app.JSONRPC_API <span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">holds the service mapping description which in the <a href="http://www.tine20.org/">Tine 2.0</a> case we deliver it with our registry data, but you can also fetch it e.g. by a javascript include as suggested in the “<a href="http://www.extjs.com/products/extjs/direct.php">EXT.DIRECT REMOTING SPECIFICATION</a>”.</span></span></p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;"><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">&lt;script src=&#8221;index.php?method=Tinebase.getServiceMap&#8221; type=&#8221;text/javascript&#8221;&gt;&lt;/script&gt;</span></span></span></p>
<p>The Service Map could be generated like this:</p>
<p><code></p>
<pre>$server = new Zend_Json_Server();

// set all classes you want to expose
$server-&gt;setClass('MyModule_Service_Json', 'MyModul');

$server-&gt;setTarget('index.php')
    -&gt;setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);

$smdArray = $server-&gt;getServiceMap()-&gt;toArray();
// save some bytes
unset($smdArray['methods']);

echo "Ext.app.JSONRPC_API = " . Zend_Json::encode($smdArray);</pre>
<p></code></p>
<h3>Ext.ux.direct.ZendFrameworkProvider</h3>
<p>To Enable Ext.Direct to understand the <a href="http://groups.google.com/group/json-schema/web/service-mapping-description-proposal">JSON-SMD</a> data and also communicate using the <a href="http://groups.google.com/group/json-rpc/web/json-rpc-1-2-proposal">JSON-RPC</a> protocol we create an own provider:</p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">Ext.ux.direct.ZendFrameworkProvider = Ext.extend(Ext.direct.RemotingProvider, {</span></p>
<p><code></p>
<pre>...</pre>
<p></code></p>
<p>At first we need to parse the JSON-SMD and to create the stubs. This is done by overwriting the initAPI method:</p>
<p><code> </code></p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"> // private</span></p>
<p><code></p>
<pre>    initAPI : function() {
        for (var method in this.services){
            var mparts = method.split('.');
            var cls = this.namespace[mparts[0]] || (this.namespace[mparts[0]] = {});
            cls[mparts[1]] = this.createMethod(mparts[0], Ext.apply(this.services[method], {
                name: mparts[1],
                len: this.services[method].parameters.length
            }));
        }
    },</pre>
<p></code><br />
All we do is to transform the JSON-SMD definition data in to a from the original createMethod method can understand to create the stubs.</p>
<p>It&#8217;s important to understand, that the createMethod creates stubs which do only trigger further processing of the provider and do _NOT_ contain all the code to do requests and protocol processing.</p>
<p>Once a stub is called, it applies the doCall function of our provider. In order to support named parameters we inspect the call and transform a named parameter call into a positional parameter call. This is needed, cause the ZendFrameworks Zend_Json_Server is itself not able to understand named parameter calls witch by the way are indeed part of the JSON-RPC specification.</p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"> // private</span></p>
<p><code></p>
<pre>    doCall : function(c, m, args) {
        // support named parameters
        if (args[args.length-1].paramsAsHash) {
            var o = args.shift();
            for (var i = 0; i &lt; m.parameters.length; i++) {
                args.splice(i,0, o[m.parameters[i].name]);
            }
        }

        return Ext.ux.direct.ZendFrameworkProvider.superclass.doCall.call(this, c, m, args);
    },</pre>
<p></code></p>
<p>After the parameters a prepared, the provider assembles the request according to the protocol definitions. This is done in the getCallData method.</p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"> // private</span></p>
<p><code></p>
<pre>    getCallData: function(t){
        return {
            jsonrpc: '2.0',
            method: t.action + '.' + t.method,
            params: t.data,
            id: t.tid
        };
    },</pre>
<p></code><br />
This protocol encapsulation only deals with single transaction calls. The processing for batched calls is done elsewhere. Luckily The both protocols use the same simple outer array for batched calls, so that we don&#8217;t need to touch it.</p>
<p>Finally the response needs to be decoded according to the protocol and the callback function needs to get called using the decoded data. This is done in the onData method:</p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"> // private</span></p>
<p><code></p>
<pre>    onData: function(opt, success, xhr) {
        var rpcresponse = Ext.decode(xhr.responseText);
        xhr.responseText = {
            type: rpcresponse.result ? 'rpc' : 'exception',
            result: rpcresponse.result,
            tid: rpcresponse.id
        };

        return Ext.ux.direct.ZendFrameworkProvider.superclass.onData.apply(this, arguments);
    }</pre>
<p></code></p>
<p>And voila, thats it. This is our custom provider to enable Ext.Direct to use and talk pure standard JSON-PRC/JSON-SMD.</p>
<p>Finally let&#8217;s register the provider for lazy invocation</p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">Ext.Direct.PROVIDERS['zfprovider'] = Ext.ux.direct.ZendFrameworkProvider;</span></p>
<h3>Server Side Batched Requests</h3>
<p>As noted in Part 2, the biggest problem with the Zend_Json_Server is the fact that it&#8217;s not capable to handle batched requests yet. To overcome this in a simple way, you can monitor the first character of an JSON request in your dispatcher and dispatch multiple request if it&#8217;s a &#8216;[&#8216;. Of course this is far away from optimum, but it&#8217;s a start point till we have the feature in the Zend_Json_Server.</p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2009/09/18/data-transport-with-json-rpc-via-ext-direct-and-zend-framework-part-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Data Transport with JSON-RPC via Ext.Direct and Zend Framework Part 2</title>
		<link>http://corneliusweiss.de/2009/09/04/data-transport-with-json-rpc-via-ext-direct-and-zend-framework-part-2/</link>
		<comments>http://corneliusweiss.de/2009/09/04/data-transport-with-json-rpc-via-ext-direct-and-zend-framework-part-2/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 17:36:27 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[eGroupWare]]></category>
		<category><![CDATA[extJS]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=210</guid>
		<description><![CDATA[As promised in my previous post, I&#8217;ll introduce Ext.Direct and discuss how it fits with the new JSON-RPC standards and especially with the Zend_Json_Server component.
Ext.direct is a namespace and a bit of a buzzword in the ExtJS 3.0 release. In short, the Ext.direct stuff introduces high level communication features.
The key component of these new features [...]]]></description>
			<content:encoded><![CDATA[<p>As promised in <a href="http://corneliusweiss.de/2009/08/17/data-transport-with-json-rpc-via-ext-direct-and-zend-framework-part-1/">my previous post</a>, I&#8217;ll introduce <a href="http://www.extjs.com/deploy/dev/docs/output/Ext.Direct.html">Ext.Direct</a> and discuss how it fits with the new JSON-RPC standards and especially with the <a href="http://framework.zend.com/manual/en/zend.json.server.html">Zend_Json_Server</a> component.</p>
<p>Ext.direct is a namespace and a bit of a buzzword in the ExtJS 3.0 release. In short, the Ext.direct stuff introduces high level communication features.</p>
<p>The key component of these new features is the &#8220;<a href="http://www.extjs.com/products/extjs/direct.php">EXT.DIRECT REMOTING SPECIFICATION</a>&#8221; which covers the aspects &#8216;<a href="http://en.wikipedia.org/wiki/Remote_Procedure_Call">remote procedure call</a>&#8216; and &#8217;service description&#8217;. <code>Ext.Direct</code> implements this specifications within the ExtJS framework as service consumer and for multiple server side stacks as service provider.</p>
<p>Besides having a well defined and documented communication and transport layer Ext.direct also has the advantage, that other ExtJs classes dealing with data can work on the stubs, created based on the &#8217;service map descriptions&#8217;. The <code>Ext.tree.TreeLoader</code> can be configured with a directFn to fetch it&#8217;s data. More over the <code>Ext.data.DirectStore</code> can be configured with a complete set of direct functions for CRUD actions.</p>
<p>An other cool thing about the javascript implementation of the <code>Ext.direct.RemotingProvider</code> is, that is queues request of the direct stubs for a configurable time span. After this span, it sends one batched request to the server.</p>
<p>However, its important to note, that the &#8220;EXT.DIRECT REMOTING SPECIFICATION&#8221; is different form the <a href="http://groups.google.com/group/json-rpc/web/json-rpc-1-2-proposal">JSON-RPC</a>/<a href="http://groups.google.com/group/json-schema/web/service-mapping-description-proposal">JSON-SMD</a> specifications introduced in part 1.</p>
<p>While digging in the specs I found some pros and cons for the &#8220;EXT.DIRECT REMOTING SPECIFICATION&#8221; compared to the JSON-RPC standardization:</p>
<ul>
<li>+ It covers form posts which are needed for special actions like file upload</li>
<li>+ It covers events send by the server</li>
<li>- It lacks of function parameter description</li>
<li>- It does not support named function parameters</li>
<li>- It does not support optional parameters</li>
<li>- It is not compatible to the JSON-RPC standardization efforts</li>
</ul>
<p>The last point is IMHO the strongest point why not to use this specification. While the rest of the javascript/webservice addicted world tries to find a common standard, ExtJs goes its own way. There are already a number of implementations for the JSON-RPC and JSON-SMD out there, and more and more will follow. I also expect to see service consumers written in PHP which ease writing server-server web-services using the same API.</p>
<p>For that reasons I choose to take the standard Zend_Json_Server implementation and to write a <code>Ext.ux.direct.ZendFrameworkProvider</code> we can use in <a href="http://www.tine20.org">Tine 2.0</a> and other Zend Framework based projects.</p>
<p>It&#8217;s only fair to note, the the Zend_Json_Server also has several issues which needs to be improved. Most notably:</p>
<ul>
<li>- It does not support batched requests</li>
<li>- It does not support named parameters</li>
</ul>
<p>After all this theory I&#8217;ll cover the actual implementation of the Ext.ux.direct.ZendFrameworkProvider in part 3.</p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2009/09/04/data-transport-with-json-rpc-via-ext-direct-and-zend-framework-part-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Data Transport with JSON-RPC via Ext.Direct and Zend Framework  Part 1</title>
		<link>http://corneliusweiss.de/2009/08/17/data-transport-with-json-rpc-via-ext-direct-and-zend-framework-part-1/</link>
		<comments>http://corneliusweiss.de/2009/08/17/data-transport-with-json-rpc-via-ext-direct-and-zend-framework-part-1/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 14:04:42 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[eGroupWare]]></category>
		<category><![CDATA[extJS]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=193</guid>
		<description><![CDATA[By writing this post, I noticed that it&#8217;s quite some stuff, so I broke it up in parts. This part is about the new specifications which help to standardize JSON protocols/apis.
When we started to implement Tine 2.0 about 2 years ago, we got quite some confused request why we chose JSON over SOAP as our [...]]]></description>
			<content:encoded><![CDATA[<p>By writing this post, I noticed that it&#8217;s quite some stuff, so I broke it up in parts. This part is about the new specifications which help to standardize JSON protocols/apis.</p>
<p>When we started to implement <a href="http://www.tine20.org/">Tine 2.0</a> about 2 years ago, we got quite some confused request why we chose <a href="http://en.wikipedia.org/wiki/JSON">JSON</a> over <a href="http://en.wikipedia.org/wiki/SOAP">SOAP</a> as our data transport between the server and the client. Technically the answer is very easy. JSON protocols only need a fraction of the bandwidths and even more important JSON has a significant better performance on client side, cause no XML parsing is needed.</p>
<p>On the other hand, two years ago SOAP was a mature protocol but JSON only an data encapsulation and no real standards did exist, so that we where forced to implement a custom protocol.</p>
<p>Fortunately this has changed in the last two years. There are three cool standardization efforts in the JSON community I&#8217;d like to introduce.</p>
<ol>
<li><a href="http://groups.google.com/group/json-rpc/web/json-rpc-1-2-proposal" target="_blank">JSON-RPC:</a> It&#8217;s a lightweight remote procedure call (RPC) protocol. The clients request consist only of a single JSON data telegram and does not use HTTP parameters:<br />
<code>
<pre>--&gt; {
    "jsonrpc":"2.0",
    "method":"Tinebase.login",
    "params": {
        "username":"tine20admin",
        "password":"lars"
    },
    "id":2
}</pre>
<p></code><br />
<code>
<pre>&lt;-- {
"id":"2",
"jsonrpc":"2.0",
"result":{
    "success":true,
    "account": {
        "accountId":"0e7d07cb453b15f520021e0a433956b234a7c0bd",
        "accountDisplayName":"Admin Account, Tine 2.0",
        "accountLastName":"Admin Account",
        "accountFirstName":"Tine 2.0",
        "accountFullName":"Tine 2.0 Admin Account",
        "contact_id":"1"
    },
    "jsonKey":"85160b59b4421bbe2f350c5b3888a2efdbfcb949",
    "welcomeMessage":"Welcome to Tine 2.0!"
}}</pre>
<p></code></p>
<p>Multi batch calls are also possible. The client only has to send an array of request objects. Unfortunately the Protocol does not handle &#8220;Form-Posts&#8221; which are necessary for some special actions like  file-uploads.</p>
<p>But nevertheless libraries are starting to implement the spec and this is the most important thing about it!</li>
<li><a href="http://groups.google.com/group/json-schema/web/service-mapping-description-proposal" target="_blank">JSON SMD</a>: It&#8217;s a JSON representation for describing a web service. The server &#8216;exposes&#8217; it&#8217;s services to the client.<br />
<code>
<pre>{
"transport":"POST",
"envelope":"JSON-RPC-2.0",
"contentType":"application/json",
"SMDVersion":"2.0",
"target":"index.php",
"services": {
    "Tinebase.login":{
        "envelope":"JSON-RPC-2.0",
        "transport":"POST",
        "parameters":[{
            "type":"string",
            "name":"username",
            "optional":false
        }, {
            "type":"string",
            "name":"password",
            "optional":false}
        ],
"returns":"array"}}}</pre>
<p></code></p>
<p>The client can use this descriptions to automatically create the stubs for calling the services which already encapsulates all the proxy and transport and protocol overhead. With this, instead of creating an AJAX request per hand you only have to call the method:</p>
<p><code>Tinebase.login('tine20admin', 'lars', cb);</code></p>
<p>where <code>cb</code> is a callback function, cause we do our requests asynchronous.</li>
<li><a href="http://json-schema.org/" target="_blank">JSON Schema</a>: Quoting their website: &#8220;JSON Schema is a specification for a JSON-based format for defining the structure of JSON data.&#8221;<br /> Of course the idea is pretty old in the world of web-services, but it&#8217;s the first approach to bring this to the new area of javascript based RIA&#8217;s which use JSON for the reasons stated above.With this we not only expose the services to the client, but more over also the data types. The benefit is clearly that we don&#8217;t need to maintain the data models client side and also the client side data validation could be made client side automatically.</li>
</ol>
<p><a href="http://corneliusweiss.de/2009/09/04/data-transport-with-json-rpc-via-ext-direct-and-zend-framework-part-2/">In Part 2</a> I&#8217;ll introduce Ext.Direct and go into the details how to apply this new standards within the Ext.Direct framework.</p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2009/08/17/data-transport-with-json-rpc-via-ext-direct-and-zend-framework-part-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Event Calendar Views made with ExtJS core library</title>
		<link>http://corneliusweiss.de/2009/05/26/event-calendar-views-made-with-extjs-core-library/</link>
		<comments>http://corneliusweiss.de/2009/05/26/event-calendar-views-made-with-extjs-core-library/#comments</comments>
		<pubDate>Tue, 26 May 2009 12:01:49 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[eGroupWare]]></category>
		<category><![CDATA[extJS]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=175</guid>
		<description><![CDATA[The last few weeks I worked on the calendar views for the upcoming Tine 2.0 release. For sure, the new calendar also will be made with the great UI technologies like all ExtJS widgets. Unfortunately, there was no Calendar widget out there, so I had to get my hands dirty and code my own one.
At [...]]]></description>
			<content:encoded><![CDATA[<p>The last few weeks I worked on the calendar views for the upcoming <a href="http://www.tine20.org/">Tine 2.0</a> release. For sure, the new calendar also will be made with the great UI technologies like all <a href="http://www.extjs.com/">ExtJS</a> widgets. Unfortunately, there was no Calendar widget out there, so I had to get my hands dirty and code my own one.</p>
<p>At the moment I have Day, Week and Monthview working. The Day and Week view supports direct creation of Events using dblclick or a mousedown/mousemove combination. All views support drag and drop of events. For fast switching of views, you can click the jumppads (dayheaders/weeknumer).</p>
<p>I made a litte MemoryProxy as Backend for the demo bellow, so you can change views and move around in time. The whole demo is Javascript only. The Calendar views are designed like normal ExtJS widgets and should be highly reusable. If you want to join development for them, please drop me a note.</p>
<p><iframe src="http://corneliusweiss.de/wp-content/uploads/2009/05/caldemo/" width="730px" height="540px" style="position: relative; left: -60px; border: 0;" ></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2009/05/26/event-calendar-views-made-with-extjs-core-library/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>First Impression of the new Tine 2.0 Calendar</title>
		<link>http://corneliusweiss.de/2009/04/27/first-impression-of-the-new-tine-20-calendar/</link>
		<comments>http://corneliusweiss.de/2009/04/27/first-impression-of-the-new-tine-20-calendar/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 15:38:47 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[eGroupWare]]></category>
		<category><![CDATA[extJS]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=173</guid>
		<description><![CDATA[Just a litte update for all of you, waiting for the new calendar:

nelius$ phpunit --verbose Calendar_AllTests AllTests.php
PHPUnit 3.2.19 by Sebastian Bergmann.
Tine 2.0 Calendar All Tests
Calendar_RruleTests
............
Calendar_Backend_SqlTests
.......
Calendar_Controller_EventTests
..................
Time: 24 seconds

 
OK (37 tests)

Most of hard work behind the scenes (aka backend) is finished. Implementing the recuring rules to behave correctly for participants in different timezones was quite a challenge, [...]]]></description>
			<content:encoded><![CDATA[<p>Just a litte update for all of you, waiting for the new calendar:<br />
<code><br />
nelius$ phpunit --verbose Calendar_AllTests AllTests.php<br />
PHPUnit 3.2.19 by Sebastian Bergmann.</code></p>
<p><code>Tine 2.0 Calendar All Tests<br />
Calendar_RruleTests<br />
............</code></p>
<p><code>Calendar_Backend_SqlTests<br />
.......</p>
<p>Calendar_Controller_EventTests<br />
..................</p>
<p>Time: 24 seconds</p>
<p></code></p>
<p> </p>
<p><code>OK (37 tests)<br />
</code></p>
<p>Most of hard work behind the scenes (aka backend) is finished. Implementing the recuring rules to behave correctly for participants in different timezones was quite a challenge, but I&#8217;m quite hopeful that with our implementation we won&#8217;t have the moving events after &#8216;Day light saving&#8217; boundaries like we had in the other project.</p>
<p>This week I&#8217;ll start to implement the interfaces based on ExtJS. Anne already gave some great impact on the calendar organization schema. Please do support her survey coming up in the next days.</p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2009/04/27/first-impression-of-the-new-tine-20-calendar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New Language Statistics Viewer</title>
		<link>http://corneliusweiss.de/2009/04/06/new-language-statistics-viewer/</link>
		<comments>http://corneliusweiss.de/2009/04/06/new-language-statistics-viewer/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 12:24:05 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[eGroupWare]]></category>
		<category><![CDATA[extJS]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=170</guid>
		<description><![CDATA[Today I updated the languate statistics viewer for Tine 2.0. You now can select the versision to see the statistics for.

After the campaign for new translators, we got new translators for Spanish(en), French(fr), Dutch(nl), Portuguese(pt) and  Traditional Chinese(zh_TW). At the moment, they are working on the translations for our current stable release (Lara). If the translations are finished, we&#8217;ll add them [...]]]></description>
			<content:encoded><![CDATA[<p>Today I updated the <a href="http://www.tine20.org/langStats/">languate statistics viewer</a> for <a href="http://www.tine20.org/">Tine 2.0</a>. You now can select the versision to see the statistics for.</p>
<p><a href="http://corneliusweiss.de/wp-content/uploads/2009/04/langstats.jpg"><img class="alignnone size-medium wp-image-169" title="langstats" src="http://corneliusweiss.de/wp-content/uploads/2009/04/langstats-300x245.jpg" alt="langstats" width="300" height="245" /></a></p>
<p>After the <a href="http://www.tine20.org/home/contribute/translate-tine/">campaign</a> for new translators, we got new translators for Spanish(en), French(fr), Dutch(nl), Portuguese(pt) and  Traditional Chinese(zh_TW). At the moment, they are working on the translations for our current stable release (<a href="http://www.tine20.org/download/">Lara</a>). If the translations are finished, we&#8217;ll add them to our next service release for that version.</p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2009/04/06/new-language-statistics-viewer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Progress on a Shiny Tine 2.0 Setup</title>
		<link>http://corneliusweiss.de/2009/03/02/progress-on-a-shiny-tine-20-setup/</link>
		<comments>http://corneliusweiss.de/2009/03/02/progress-on-a-shiny-tine-20-setup/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 11:10:28 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[eGroupWare]]></category>
		<category><![CDATA[extJS]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=159</guid>
		<description><![CDATA[As the Tine 2.0 community keeps growing, also the need for a setup GUI is growing. One the one hand we need to support the &#8216;non computer freak admins&#8217; which are installing Tine 2.0 and on the other hand we need tools for the growing developers community to install/uninstall their own applications or to only [...]]]></description>
			<content:encoded><![CDATA[<p>As the Tine 2.0 community keeps growing, also the need for a setup GUI is growing. One the one hand we need to support the &#8216;non computer freak admins&#8217; which are installing Tine 2.0 and on the other hand we need tools for the growing developers community to install/uninstall their own applications or to only particularly upgrade the system.</p>
<p>So here a little snapshot of current development progress, feel free to leaf you comments.</p>
<div id="attachment_161" class="wp-caption alignnone" style="width: 310px"><a href="http://corneliusweiss.de/wp-content/uploads/2009/03/missingconfcheckfailed.jpg"><img class="size-medium wp-image-161" title="Missing Config, Check Failed" src="http://corneliusweiss.de/wp-content/uploads/2009/03/missingconfcheckfailed-300x213.jpg" alt="The installation requirements are not met. It's not possible to continue setup. Maybe we also need some kind of alert &quot;Your server is not capable to run Tine 2.0. Sorry!&quot;" width="300" height="213" /></a><p class="wp-caption-text">The installation requirements are not met. It&#39;s not possible to continue setup. Maybe we also need some kind of alert &quot;Your server is not capable to run Tine 2.0. Sorry!&quot;</p></div>
<div id="attachment_162" class="wp-caption alignnone" style="width: 310px"><a href="http://corneliusweiss.de/wp-content/uploads/2009/03/missing_config.jpg"><img class="size-medium wp-image-162" title="Missing Config" src="http://corneliusweiss.de/wp-content/uploads/2009/03/missing_config-300x213.jpg" alt="Setup checks are passed, but no config file is found. Here we need a little form to support creation of a config.inc.php file." width="300" height="213" /></a><p class="wp-caption-text">Setup checks are passed, but no config file is found. Here we need a little form to support creation of a config.inc.php file.</p></div>
<div id="attachment_163" class="wp-caption alignnone" style="width: 310px"><a href="http://corneliusweiss.de/wp-content/uploads/2009/03/config-login.jpg"><img class="size-medium wp-image-163" title="config-login" src="http://corneliusweiss.de/wp-content/uploads/2009/03/config-login-300x213.jpg" alt="If a config file is present, you need to login into setup (credentials from config.inc.php)" width="300" height="213" /></a><p class="wp-caption-text">If a config file is present, you need to login into setup (credentials from config.inc.php)</p></div>
<div id="attachment_164" class="wp-caption alignnone" style="width: 310px"><a href="http://corneliusweiss.de/wp-content/uploads/2009/03/config-dbfailed.jpg"><img class="size-medium wp-image-164" title="config-dbfailed" src="http://corneliusweiss.de/wp-content/uploads/2009/03/config-dbfailed-300x213.jpg" alt="You have a config file and successfully logged in, but something is not working with your config, e.g. SQL or LDAP is down." width="300" height="213" /></a><p class="wp-caption-text">You have a config file and successfully logged in, but something is not working with your config, e.g. SQL or LDAP is down.</p></div>
<div id="attachment_160" class="wp-caption alignnone" style="width: 310px"><a href="http://corneliusweiss.de/wp-content/uploads/2009/03/appmgr.jpg"><img class="size-medium wp-image-160 " title="Application Manager" src="http://corneliusweiss.de/wp-content/uploads/2009/03/appmgr-300x213.jpg" alt="Application Manager" width="300" height="213" /></a><p class="wp-caption-text">If all requirements are met, you are ready to run the application manager. This is the place to install / uninstall and upgrade your applications</p></div>
<p> </p>
<p><strong>Whats the scope of the setup?</strong></p>
<p>In the setup all things needed to run Tine 2.0 itself should be configured. This is the main database connection on the one hand, and the authentication and account drivers on the other hand. Things like email, voip, langs etc could be configured directly from the admin section in Tine.</p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2009/03/02/progress-on-a-shiny-tine-20-setup/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>working with grids</title>
		<link>http://corneliusweiss.de/2009/02/03/working-with-grids/</link>
		<comments>http://corneliusweiss.de/2009/02/03/working-with-grids/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 23:15:23 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[eGroupWare]]></category>
		<category><![CDATA[extJS]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=147</guid>
		<description><![CDATA[The last weeks while implementing the timetracker for Tine 2.0 we also developed new concepts for working with the grid view. Here is a little series of screenshots to demonstrate the cool workflow and userinterface we come up with.
To avoid double billed timesheets, it would have been a good idea to filter for non cleared [...]]]></description>
			<content:encoded><![CDATA[<p>The last weeks while implementing the timetracker for Tine 2.0 we also developed new concepts for working with the grid view. Here is a little series of screenshots to demonstrate the cool workflow and userinterface we come up with.</p>
<div id="attachment_148" class="wp-caption alignnone" style="width: 160px"><a href="http://corneliusweiss.de/wp-content/uploads/2009/02/filter01.jpg"><img class="size-thumbnail wp-image-148 " title="filter01" src="http://corneliusweiss.de/wp-content/uploads/2009/02/filter01-150x150.jpg" alt="filter01" width="150" height="150" /></a><p class="wp-caption-text">Filter all timesheets from last month whoose timeaccount-numbers start with a certain string.</p></div>
<div id="attachment_149" class="wp-caption alignnone" style="width: 160px"><a href="http://corneliusweiss.de/wp-content/uploads/2009/02/filter02.jpg"><img class="size-thumbnail wp-image-149  " title="filter02" src="http://corneliusweiss.de/wp-content/uploads/2009/02/filter02-150x150.jpg" alt="filter02" width="150" height="150" /></a><p class="wp-caption-text">Select some Timesheets and mark them as billable too.</p></div>
<div id="attachment_150" class="wp-caption alignnone" style="width: 160px"><a href="http://corneliusweiss.de/wp-content/uploads/2009/02/filter03.jpg"><img class="size-thumbnail wp-image-150 " title="filter03" src="http://corneliusweiss.de/wp-content/uploads/2009/02/filter03-150x150.jpg" alt="filter03" width="150" height="150" /></a><p class="wp-caption-text">Add a filter to only find billable timesheets and select all 259 Timesheets which got found.</p></div>
<div id="attachment_150" class="wp-caption alignnone" style="width: 160px"><a href="http://corneliusweiss.de/wp-content/uploads/2009/02/filter03.jpg"><img class="size-thumbnail wp-image-150 " title="filter03" src="http://corneliusweiss.de/wp-content/uploads/2009/02/filter03-150x150.jpg" alt="filter03" width="150" height="150" /></a><p class="wp-caption-text">Now we export all selected timesheets as ODS to write our bill in Open Office</p></div>
<div id="attachment_152" class="wp-caption alignnone" style="width: 160px"><a href="http://corneliusweiss.de/wp-content/uploads/2009/02/filter05.jpg"><img class="size-thumbnail wp-image-152 " title="filter05" src="http://corneliusweiss.de/wp-content/uploads/2009/02/filter05-150x150.jpg" alt="filter05" width="150" height="150" /></a><p class="wp-caption-text">Finaly we again use mass update to mark all timesheets, found by our filter, as cleared and add in which bill we cleared them.</p></div>
<p>To avoid double billed timesheets, it would have been a good idea to filter for non cleared timesheets too <img src='http://corneliusweiss.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2009/02/03/working-with-grids/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ExtJs Window Handling with Ext.ux.PopupWindow</title>
		<link>http://corneliusweiss.de/2008/11/03/extjs-window-handling-with-extuxpopupwindow/</link>
		<comments>http://corneliusweiss.de/2008/11/03/extjs-window-handling-with-extuxpopupwindow/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 19:36:41 +0000</pubDate>
		<dc:creator>Cornelius Weiss</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[eGroupWare]]></category>
		<category><![CDATA[extJS]]></category>
		<category><![CDATA[tine 2.0]]></category>

		<guid isPermaLink="false">http://corneliusweiss.de/?p=131</guid>
		<description><![CDATA[In ExtJs application windows are created using the Ext.Window. These windows are some kind of a layer above the mainscreen having an nice looking chrome. The Ext.WindowManager keeps track about all windows and brings method to manage the windows. However, as these windows areÂ no real browser windows (aka popups), they have some limitations.

Ext.Window&#8217;s have aÂ differentÂ styleÂ than [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://extjs.com">ExtJs</a> application windows are created using the Ext.Window. These windows are some kind of a layer above the mainscreen having an nice looking chrome. The Ext.WindowManager keeps track about all windows and brings method to manage the windows. However, as these windows areÂ no real browser windows (aka popups), they have some limitations.</p>
<ul>
<li>Ext.Window&#8217;s have aÂ differentÂ styleÂ than the native operating system windows. This may confuse users,Â especiallyÂ those, notÂ familiarÂ with the technical background in web apps.</li>
<li>Ext.Window&#8217;s can&#8217;t be dragged out of the browsers viewport. Users with large or multiple screens will feel limited with those windows.</li>
<li>Users don&#8217;t want to have an extra window manager inside the normal operating systems window manager. Just look back to the ugly star-office approach, which we all hated.</li>
</ul>
<div>As a consequence we decided to use native windows in <a href="http://www.tine20.org">Tine 2.0</a>. However, dealing with native windows in a Javacript application turned out to be a non trivial thing. A new browser window brings a new javascipt context and we needed to find a way to bring our content into the new context. Also we needed to find a way how windows canÂ communicate. The opener.location = opener.location from the good old Web 1.0 times obviously is notÂ adequateÂ any more <img src='http://corneliusweiss.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .Â Thinking about offline functionalityÂ broughtÂ even more complexity to the system. When the Browser is offline, you need to create windows without any help of a server.</div>
<div>Solving this problem was one of the major goals in our current javascriptÂ re-factoringÂ period. Finlay we came up with three user extensions to the ExtJS library.</div>
<div>
<ol>
<li><strong>Ext.ux.PopupWindow</strong> which goes almost parallel to the Ext.Window</li>
<li><strong>Ext.ux.PopupWindowGroup</strong> which goes almost parallel to the Ext.WindowGroup</li>
<li><strong>Ext.ux.WindowFactory</strong> which is capable to factor Ext.Windows, Ext.ux.PopupWindows and Ext.air.NativeWindows</li>
</ol>
<div>You can find the code in the Tine 2.0 svn repository.Â At the moment we have the following hard coded in our javascript bootstrap:</div>
<div><code>Tine.WindowFactory = new Ext.ux.WindowFactory({<br />
Â Â  Â windowType: 'Browser'<br />
});</code></div>
<div>If you change this to:<br />
<code>Tine.WindowFactory = new Ext.ux.WindowFactory({<br />
windowType: 'Ext'<br />
});</code></div>
<div>
<p>you&#8217;ll have a version of Tine with Ext.Windows.</p>
<p><a href="http://corneliusweiss.de/wp-content/uploads/2008/11/window-browser.jpg"><img class="alignnone size-thumbnail wp-image-134" title="window-browser" src="http://corneliusweiss.de/wp-content/uploads/2008/11/window-browser-150x150.jpg" alt="" width="150" height="150" />Â Â  Â Â </a><a href="http://corneliusweiss.de/wp-content/uploads/2008/11/window-ext.jpg"><img class="alignnone size-thumbnail wp-image-135" title="window-ext" src="http://corneliusweiss.de/wp-content/uploads/2008/11/window-ext-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>The Air part is not tested yet, as IÂ struggleÂ with the hard coded &#8216;eval&#8217; functions in the extjs code which break the security model of Adobe Air.</p>
<p>I&#8217;m not shure if we make use of Ext.Window in Tine. It may be a helpful config option for users with old browsers like IE6 which has an very slow javascript engine. When ourÂ re-factoringÂ period has finished, we will even be able to create the windows offline.</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://corneliusweiss.de/2008/11/03/extjs-window-handling-with-extuxpopupwindow/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
