<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Global</title><link>http://www.wascou.org</link><description></description><language>en-GB</language><item><pubDate>Wed, 12 Nov 2008 15:36:12 GMT</pubDate><title>Project V</title><link>http://www.wascou.org/Blogs/Maxime-THOMAS/Project-V</link><description>&lt;p&gt;In my &lt;a href="/wascou/Blogs/Maxime-THOMAS/Some-points-about-what-we-think-about-CMS" target="_blank"&gt;previous post&lt;/a&gt;, I was talking about main practice on designing content tree on eZPublish and some limitations due to the current architecture of this CMS.&lt;/p&gt;&lt;p&gt;It seems that this matter of concern was shared by a lot of people, in particular at eZSystems as &lt;a href="http://walhalla.wordpress.com/" target="_self"&gt;Paul Borgermans&lt;/a&gt; has shown us during the eZDeveloper Meeting. &lt;a href="http://blog.gauthier-garnier.fr/post/eZ-developer-day-a-Paris-7-novembre-2008" target="_blank"&gt;See there&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The project V is the full reimplementation of eZPublish core to lighten it and make it more powerful and flexible. Looking back the evolution of eZPublish, a such great upgrade did not happened from the 3.x series, since 4.x was just a porting to PHP5. Thanks to new tools like a bug tracker or a testing suite, eZSystems has set a mature development system which can produce software of higher quality than before. So the difference between 3.x and 4.x is few bugs and PHP5.&lt;/p&gt;&lt;p&gt;What's next ? The Project &lt;a href="http://www.tv.com/v/show/76298/summary.html?q=v&amp;tag=search_results;title;1" target="_blank"&gt;V&lt;/a&gt; has the ambition to provide two things :&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;a very modular and flexible &lt;a href="http://en.wikipedia.org/wiki/Kernel_%28computer_science%29" target="_self"&gt;Unix-like micro kernel&lt;/a&gt;. It will allow you to access more efficiently its API and will be based on ezComponents, specifically on the &lt;a href="http://ezcomponents.org/docs/tutorials/MvcTools" target="_blank"&gt;MVCTools&lt;/a&gt; component. This particular feature might let you use other components than the ezComponents : &lt;a href="http://www.smarty.net/" target="_blank"&gt;Smarty&lt;/a&gt; for another template engine or &lt;a href="http://www.doctrine-project.org/" target="_blank"&gt;Doctrine&lt;/a&gt; / &lt;a href="http://propel.phpdb.org/trac/" target="_blank"&gt;Propel&lt;/a&gt; for the persistence layer. It meets up with functionalities of another product we know well. &lt;/li&gt;

&lt;li&gt;a bundle of RAD tools to ease and quicken the development.&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;As it will be a complete different kernel, extensions will be different. To ease this migration, the engine of the Project V will appear as soon as 4.2 : the &lt;a href="http://en.wikipedia.org/wiki/Object_request_broker" target="_blank"&gt;broker&lt;/a&gt; would bring the possibility to choose between old and new behaviour.&lt;/p&gt;&lt;p&gt;Quite exciting !&lt;/p&gt;</description></item><item><pubDate>Thu, 06 Nov 2008 13:07:07 GMT</pubDate><title>Some points about what we think about CMS</title><link>http://www.wascou.org/Blogs/Maxime-THOMAS/Some-points-about-what-we-think-about-CMS</link><description>&lt;p&gt;This post is about different things. It came from a long talk with Damien Pitard, web architect at &lt;b&gt;Prisma Presse&lt;/b&gt;, which began with the difference of concept between using content as children rather than putting it in the direct content. For example, if you have an article related to companies, you can organize differently your content :&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;You can upgrade your article to put some extra data, like a matrix attribute. There's no limit with this kind of data type : you are sure to store what you want inside the content. So the point is that all your data, related data and main data will be together. The only issue is that this kind of data type does not exist if you consider more complex data type. &lt;/li&gt;

&lt;/ul&gt;

&lt;ul&gt;

&lt;li&gt;Another point is to make your article class like a container and create a new class called company with two or three attributes. By this way, you can add as many companies under your article node and with few template codes, show them. There is no limit with the number of content or the complexity of you content. However, the main issue is that maybe the company does not have a real existence on your web site. It means that you maybe don't want to have a page with a full view of your company. This is the source of a lot of SEO related issues and bug.&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;There is also a third but not right solution : you can mix basic data types in your content to reach what you would like to have. For example, you have a content with attributes Title, Subtitle 1, Text 1, Subtitle 2, Text 2 and so on. The main issue, even if you got almost what you need, is that you might be limited by the number of attributes. What will happen if you're asked for a subtitle 32 and text 32 ?&lt;/p&gt;&lt;p&gt;As eZPublish is a great product, we just challenged it in a regular way : what we want is to fill customers need and what we have is in &lt;i&gt;eZPublish&lt;/i&gt;. We went by two phases : how we use &lt;i&gt;eZPublish&lt;/i&gt; and how we would like to change in it.&lt;/p&gt;&lt;a name="eztoc1765_0_1" id="eztoc1765_0_1"&gt;&lt;/a&gt;&lt;h3&gt;Underlying concepts&lt;/h3&gt;&lt;p&gt;The more you make technical specifications for &lt;i&gt;eZPublish&lt;/i&gt; projects, the more you find strange solutions to reach your aim. Looking back, we both made experiments with &lt;i&gt;eZPublish&lt;/i&gt; and as the versions went up, we understood some points about the main matter : the content.&lt;/p&gt;&lt;p&gt;This is how the content is typically used in &lt;i&gt;eZPublish&lt;/i&gt; :&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;To store content. We can find this kind of content at the end of the tree, the leaves. There is nothing under them and they are the representation of a page in the CMS. In &lt;i&gt;eZPublish&lt;/i&gt;, you expect to have a lot this kind but it's not exactly what happens on projects.&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="object-center"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/some-points-about-what-we-think-about-cms/organization-content/1776-1-eng-GB/Organization-Content.png" width="494" height="197"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;div class="attribute-caption" style="width: 494px"&gt;    
&lt;p&gt;This show a typical organization with content nodes (Article content type).&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;ul&gt;

&lt;li&gt;To structure the content. You can find some contents which are only set up with one attribute, a text line, to make it clickable in the back office. The main point is that it doesn't its own content. A counter example is the Folder content provided in standard by &lt;i&gt;eZSystems&lt;/i&gt; in their packages (&lt;b&gt;eZWebin&lt;/b&gt; or &lt;b&gt;eZFlow&lt;/b&gt;). This class is composed with other attributes like a &lt;i&gt;Description&lt;/i&gt; field or a date. It adds content to the website and isn't here to represent a way to categorize your content. This is what you may be tempted to do but it causes several issues.&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="object-center"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/some-points-about-what-we-think-about-cms/organization-structure/1779-1-eng-GB/Organization-Structure.png" width="494" height="197"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;div class="attribute-caption" style="width: 494px"&gt;    
&lt;p&gt;This is how is organized the content with structure content types.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;ul&gt;

&lt;li&gt;To syndicate the content. You'll use a content to be the start node of your tree to syndicate content which is under. For example, the typical homepage does not own content or is just a structure node which will put nodes back up. &lt;i&gt;eZSystems&lt;/i&gt; has provided a great interface to do this but it still remain on nodes with the &lt;i&gt;Front Page&lt;/i&gt; class. &lt;/li&gt;

&lt;/ul&gt;

&lt;div class="object-center"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/some-points-about-what-we-think-about-cms/organization-syndication/1782-1-eng-GB/Organization-Syndication.png" width="494" height="390"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;div class="attribute-caption" style="width: 494px"&gt;    
&lt;p&gt;This shows the organization with syndication content types.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;p&gt;What we have understood is that the main a key of a CMS is to provide a page for a content, and in eZ, as you are free to organize you content (you're not guided), you can make great mistakes.&lt;/p&gt;&lt;a name="eztoc1765_0_1" id="eztoc1765_0_1"&gt;&lt;/a&gt;&lt;h3&gt;Content rules to make your content rules&lt;/h3&gt;&lt;p&gt;Those are the rules that may have to be respected but which are not always and that contribute to provide main issues on standard features :&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;Don't use structure nodes or syndication nodes in your tree. It doesn't supply any content. Make a module instead.&lt;/li&gt;

&lt;li&gt;One content is one page. This will allow you to easily organize your tree and consolidate your content in one and indivisible content. If you decide to display your content in some complex layout, it will ease the separation between the content linked to the uri and the other kind of information. Consequences of this rule are that each content must represent only one page and that your content have to be a complete content, not scattered in few pages. There is a lot of advantages to proceed like this : 
&lt;ul&gt;

&lt;li&gt;it's easier to publish content and to set the &lt;i&gt;SEO&lt;/i&gt; rules (No duplication in pages). &lt;/li&gt;

&lt;li&gt;all part of your content can be visible in the same page : you won't have to cheat with redirection or include templates to correct this.&lt;/li&gt;

&lt;li&gt;your tree is lighter.&lt;/li&gt;

&lt;li&gt;your content is complete.&lt;/li&gt;

&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;Don't make relations between content that does not need a real representation of itself. For example, don't try to link a content that is only shown as a line in a folder override. It implies that you will have to make an override for the full view which doesn't mean anything. All types of relation are concerned : &lt;i&gt;child relation&lt;/i&gt; and &lt;i&gt;content relation&lt;/i&gt;.&lt;/li&gt;

&lt;li&gt;Use transversal categorization like a category data type or a tag data type to avoid useless tree nodes.&lt;/li&gt;

&lt;/ul&gt;
&lt;a name="eztoc1765_0_1" id="eztoc1765_0_1"&gt;&lt;/a&gt;&lt;h3&gt;Powerful but useless&lt;/h3&gt;&lt;p&gt;Finally, the most important in a CMS is to efficiently manage content. This truism shows that sometimes we forget the things which has to be perfect in the software and that is polluted by other provided features that are used in 10% of your projects. Those become useless features as long as you apply our rules :&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;The &lt;b&gt;multi positioning system&lt;/b&gt; : this &lt;a href="http://ez.no/doc/ez_publish/technical_manual/4_0/concepts_and_basics/content_management/the_content_node_tree" target="_blank"&gt;feature&lt;/a&gt; allows you to add several locations to an object. When you modify the content, the modification is affecting all the locations. However, it implies that you have a 1 to many relation between content objects and nodes. If you don't use multi positioning, you can merge the table of nodes and objects, increasing all your requests on content.&lt;/li&gt;

&lt;/ul&gt;

&lt;ul&gt;

&lt;li&gt;The &lt;b&gt;class tables&lt;/b&gt; : this features is not longer useful provided that each time you make a modification in a class you have to modify the corresponding templates. Let stop deluding ourselves here, in an eZProject, developers don't make perfect templates with all the cases and your users doesn't modify the classes. It is possible to store it elsewhere like in an XML file that will be cached. If we remove this tables, the requests on content are improved.&lt;/li&gt;

&lt;/ul&gt;

&lt;ul&gt;

&lt;li&gt;&lt;b&gt;Users and roles management&lt;/b&gt; : all users and groups are stored as &lt;a href="http://ez.no/doc/ez_publish/technical_manual/4_0/concepts_and_basics/access_control" target="_blank"&gt;content&lt;/a&gt;. Provided that all the modules use those ones, it is heavily eating up resources. As we have to manage it on line, it's better to keep the current interface but not to store it as content. &lt;/li&gt;

&lt;/ul&gt;
&lt;a name="eztoc1765_0_1" id="eztoc1765_0_1"&gt;&lt;/a&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;&lt;p&gt;CMS are evolving quickly, users are asking new features everyday, high performance and availability level is becoming a standard and the software law of evolution is wreaking havoc. It is a matter of fact that &lt;b&gt;eZPublish has a perfect conception model&lt;/b&gt; to store any content lying on a complex and full featured architecture. We are resigned : what has brought eZPublish to its CMS high rank will maybe lead it to the end. Nowadays, &lt;b&gt;this model is reaching its limits&lt;/b&gt; and new CMS are coming out with &lt;a href="http://www.silverstripe.com/" target="_blank"&gt;light interfaces and light and flexible architectures&lt;/a&gt;.&lt;/p&gt;</description></item><item><pubDate>Mon, 03 Nov 2008 14:15:10 GMT</pubDate><title>Alternate way to Kerberos NTLM auth in pure PHP</title><link>http://www.wascou.org/Blogs/Xavier-GOULEY/Alternate-way-to-Kerberos-NTLM-auth-in-pure-PHP</link><description>&lt;p&gt;Regarding to a recent post I put &lt;a href="/wascou/Blogs/Xavier-GOULEY/eZpublish-SSO-login-Handler-Apache-Kerberos-module-bypass" target="_self"&gt;here&lt;/a&gt; about Kerberos and Apache, there is a way to replace Kerberos when the Active Directory cannot be properly configured to accept Kerberos connections. You can simulate the NTLM auth process with the browser by 6 steps in PHP : &lt;/p&gt;&lt;pre&gt;function get_login() {

   /*
   step:  | type:
   -------|----------------|------------------------------------
   1      | C --&gt; S        | GET ...
   -------|----------------|------------------------------------
   2      | C &lt;-- S        | 401 Unauthorized
          |                | WWW-Authenticate: NTLM
   -------|----------------|------------------------------------
   3      | C --&gt; S        | GET ...
          |                | Authorization: NTLM
          |                | &lt;base64-encoded type-1-message&gt;
   -------|----------------|------------------------------------
   4      | C &lt;-- S        | 401 Unauthorized
          |                | WWW-Authenticate: NTLM
          |                | &lt;base64-encoded type-2-message&gt;
   -------|----------------|------------------------------------
   5      | C --&gt; S        | GET ...
          |                | Authorization: NTLM
&lt;base64-encoded type-3-message&gt;
   -------|----------------|------------------------------------
   6      | C &lt;-- S        | 200 Ok
   -------|----------------|------------------------------------
   */

   $headers = apache_request_headers();
   if($headers['Authorization'] == NULL) { // step 1
       header( "HTTP/1.1 401 Unauthorized" ); // step 2
       header( "WWW-Authenticate: NTLM" );
       exit;
   };
   if(isset($headers['Authorization'])
         &amp;&amp; substr($headers['Authorization'],0,5) == 'NTLM ') {
            // step 3 to 6
       $chaine=$headers['Authorization'];
       $chaine=substr($chaine, 5); // type1 message
       $chained64=base64_decode($chaine);
       if(ord($chained64{8}) == 1) { // step 3
           // check NTLM flag "0xb2",
          // offset 13 in type-1-message :
           if (ord($chained64[13]) != 178) {
                echo "Please use NTLM compatible browser";
                   return null;
           }
           $retAuth = "NTLMSSP";
           $retAuth .= chr(0).chr(2).chr(0).chr(0);
          $retAuth .= chr(0).chr(0).chr(0).chr(0);
           $retAuth .= chr(0).chr(40).chr(0).chr(0);
          $retAuth .= chr(0).chr(1).chr(130).chr(0);
           $retAuth .= chr(0).chr(0).chr(2).chr(2);
          $retAuth .= chr(2).chr(0).chr(0).chr(0);
           $retAuth .= chr(0).chr(0).chr(0).chr(0);
          $retAuth .= chr(0).chr(0).chr(0).chr(0).chr(0);

           $retAuth64 =base64_encode($retAuth);
           $retAuth64 = trim($retAuth64);
           header( "HTTP/1.1 401 Unauthorized" ); // step 4
           header( "WWW-Authenticate: NTLM $retAuth64" );
           exit;
       }
       else if(ord($chained64{8}) == 3) { // step 5
           $lenght_domain = (ord($chained64[31])*256 + ord($chained64[30]));
           $offset_domain = (ord($chained64[33])*256 + ord($chained64[32]));
           $domain = substr($chained64, $offset_domain, $lenght_domain);
           $lenght_login = (ord($chained64[39])*256 + ord($chained64[38]));
           $offset_login = (ord($chained64[41])*256 + ord($chained64[40]));
           $login = substr($chained64, $offset_login, $lenght_login);
           $lenght_host = (ord($chained64[47])*256 + ord($chained64[46]));
           $offset_host = (ord($chained64[49])*256 + ord($chained64[48]));
           $host = substr($chained64, $offset_host, $lenght_host);
       }

   }
   $login = preg_replace("/(.)(.)/","$1",$login);
   $domain = preg_replace("/(.)(.)/","$1",$domain);
   $login = strtolower($login);
   $domain = strtoupper($domain);
   return array($login,$domain); // step 6 : accept
}
&lt;/pre&gt;&lt;p&gt;Warning : this code must be exectuted not only for the auth process when you want to login the user, but for each HTTP request to your application (so on each page).&lt;/p&gt;&lt;p&gt;It is very important to put HTTP 1.1 protocole in HTTP headers because HTTP 1.0 does not support Keep-alive connection and so NTLM auth. For some unknown reasons, even if some Apache versions change automatically the protocole version to 1.1 in your headers, other versions don't (for example 2.2.3 can do it and 2.2.9 can't).&lt;/p&gt;&lt;p&gt;Finally, keep in mind that this code is not as secure as Kerberos Apache module, because this code will never check Active Directory permission to accept the user. This function is just to retrieve login and domain, you have to make the account check yourself.&lt;/p&gt;&lt;p&gt;Good luck !&lt;/p&gt;</description></item><item><pubDate>Mon, 03 Nov 2008 14:15:10 GMT</pubDate><title>Alternate way to Kerberos NTLM auth in pure PHP</title><link>http://www.wascou.org/Blogs/Xavier-GOULEY/eZpublish/Alternate-way-to-Kerberos-NTLM-auth-in-pure-PHP</link><description>&lt;p&gt;Regarding to a recent post I put &lt;a href="/wascou/Blogs/Xavier-GOULEY/eZpublish-SSO-login-Handler-Apache-Kerberos-module-bypass" target="_self"&gt;here&lt;/a&gt; about Kerberos and Apache, there is a way to replace Kerberos when the Active Directory cannot be properly configured to accept Kerberos connections. You can simulate the NTLM auth process with the browser by 6 steps in PHP : &lt;/p&gt;&lt;pre&gt;function get_login() {

   /*
   step:  | type:
   -------|----------------|------------------------------------
   1      | C --&gt; S        | GET ...
   -------|----------------|------------------------------------
   2      | C &lt;-- S        | 401 Unauthorized
          |                | WWW-Authenticate: NTLM
   -------|----------------|------------------------------------
   3      | C --&gt; S        | GET ...
          |                | Authorization: NTLM
          |                | &lt;base64-encoded type-1-message&gt;
   -------|----------------|------------------------------------
   4      | C &lt;-- S        | 401 Unauthorized
          |                | WWW-Authenticate: NTLM
          |                | &lt;base64-encoded type-2-message&gt;
   -------|----------------|------------------------------------
   5      | C --&gt; S        | GET ...
          |                | Authorization: NTLM
&lt;base64-encoded type-3-message&gt;
   -------|----------------|------------------------------------
   6      | C &lt;-- S        | 200 Ok
   -------|----------------|------------------------------------
   */

   $headers = apache_request_headers();
   if($headers['Authorization'] == NULL) { // step 1
       header( "HTTP/1.1 401 Unauthorized" ); // step 2
       header( "WWW-Authenticate: NTLM" );
       exit;
   };
   if(isset($headers['Authorization'])
         &amp;&amp; substr($headers['Authorization'],0,5) == 'NTLM ') {
            // step 3 to 6
       $chaine=$headers['Authorization'];
       $chaine=substr($chaine, 5); // type1 message
       $chained64=base64_decode($chaine);
       if(ord($chained64{8}) == 1) { // step 3
           // check NTLM flag "0xb2",
          // offset 13 in type-1-message :
           if (ord($chained64[13]) != 178) {
                echo "Please use NTLM compatible browser";
                   return null;
           }
           $retAuth = "NTLMSSP";
           $retAuth .= chr(0).chr(2).chr(0).chr(0);
          $retAuth .= chr(0).chr(0).chr(0).chr(0);
           $retAuth .= chr(0).chr(40).chr(0).chr(0);
          $retAuth .= chr(0).chr(1).chr(130).chr(0);
           $retAuth .= chr(0).chr(0).chr(2).chr(2);
          $retAuth .= chr(2).chr(0).chr(0).chr(0);
           $retAuth .= chr(0).chr(0).chr(0).chr(0);
          $retAuth .= chr(0).chr(0).chr(0).chr(0).chr(0);

           $retAuth64 =base64_encode($retAuth);
           $retAuth64 = trim($retAuth64);
           header( "HTTP/1.1 401 Unauthorized" ); // step 4
           header( "WWW-Authenticate: NTLM $retAuth64" );
           exit;
       }
       else if(ord($chained64{8}) == 3) { // step 5
           $lenght_domain = (ord($chained64[31])*256 + ord($chained64[30]));
           $offset_domain = (ord($chained64[33])*256 + ord($chained64[32]));
           $domain = substr($chained64, $offset_domain, $lenght_domain);
           $lenght_login = (ord($chained64[39])*256 + ord($chained64[38]));
           $offset_login = (ord($chained64[41])*256 + ord($chained64[40]));
           $login = substr($chained64, $offset_login, $lenght_login);
           $lenght_host = (ord($chained64[47])*256 + ord($chained64[46]));
           $offset_host = (ord($chained64[49])*256 + ord($chained64[48]));
           $host = substr($chained64, $offset_host, $lenght_host);
       }

   }
   $login = preg_replace("/(.)(.)/","$1",$login);
   $domain = preg_replace("/(.)(.)/","$1",$domain);
   $login = strtolower($login);
   $domain = strtoupper($domain);
   return array($login,$domain); // step 6 : accept
}
&lt;/pre&gt;&lt;p&gt;Warning : this code must be exectuted not only for the auth process when you want to login the user, but for each HTTP request to your application (so on each page).&lt;/p&gt;&lt;p&gt;It is very important to put HTTP 1.1 protocole in HTTP headers because HTTP 1.0 does not support Keep-alive connection and so NTLM auth. For some unknown reasons, even if some Apache versions change automatically the protocole version to 1.1 in your headers, other versions don't (for example 2.2.3 can do it and 2.2.9 can't).&lt;/p&gt;&lt;p&gt;Finally, keep in mind that this code is not as secure as Kerberos Apache module, because this code will never check Active Directory permission to accept the user. This function is just to retrieve login and domain, you have to make the account check yourself.&lt;/p&gt;&lt;p&gt;Good luck !&lt;/p&gt;</description></item><item><pubDate>Thu, 16 Oct 2008 14:24:33 GMT</pubDate><title>Through the lines</title><link>http://www.wascou.org/Blogs/Maxime-THOMAS/Through-the-lines</link><description>&lt;p&gt;This one has been discovered by one of my colleague, Chawalit Tangwongpiboon, while he was searching security holes in eZPublish.&lt;/p&gt;&lt;p&gt;Go on this &lt;a href="http://ez.no/customers/references" target="_self"&gt;page&lt;/a&gt;, choose a website and type at the end :&lt;/p&gt;&lt;pre&gt;/content/browse/2

or

/user/register

or

/ezinfo/about&lt;/pre&gt;&lt;p&gt;You can access all the tree of the website, or you can register yourself on the website or just access some information about versions and packages installed on this website.&lt;/p&gt;&lt;p&gt;Where does it come from ? Just from the override/site.ini where the definitions of the siteaccess rules are stored. It actually overrides your own roles and policies for the anonymous role. But by default, eZ allow anonymous user to access those modules. If you want to secure your site, the best way is to forbid access by modifying the rules :&lt;/p&gt;&lt;pre&gt;[SiteAccessRules]
 Rules[]=Access;disable
 Rules[]=Module;user/register&lt;/pre&gt;&lt;p&gt;It will disable the view for this module.&lt;/p&gt;&lt;p&gt;I have tested a lot of sites and almost all let those information and accesses out.&lt;/p&gt;&lt;p&gt;Terrific...&lt;/p&gt;</description></item><item><pubDate>Thu, 25 Sep 2008 15:03:28 GMT</pubDate><title>First feedback on Android framework</title><link>http://www.wascou.org/Blogs/Xavier-GOULEY/First-feedback-on-Android-framework</link><description>&lt;p&gt;
After few months developing a little try under Android API, &lt;b&gt;I wanted to make feedback on benefits of the Google OS&lt;/b&gt;. I want to achieve the first version of my project and then make a &lt;b&gt;constructive criticism about Android regarding to other graphical or mobile APIs, like the iPhone&lt;/b&gt;.&lt;br /&gt;&lt;/p&gt;
&lt;div class="object-right"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/shandroid/1678-1-eng-GB/shAndroid.png" width="305" height="447"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;p&gt;
Since the beginning of the year, I established a personal project to develop a small Android application, quite independent,&lt;br /&gt;
using GUI at maximum of its capacities, a database (SQLite) and a few onboard Google Maps onboard. I'll give small screenshots in a way that says enough along on the usefulness of the program, because I do not know yet exactly what I will do with my application.&lt;br /&gt;&lt;b&gt;My first impressions over development were:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;Firstly,&lt;b&gt; the ownership of the GUI as a developer is quite long&lt;/b&gt;: you cannot learn to make a good GUI in a week, it takes more time (about 2 months). But when you play well with this API, you have fun. The GUI is certainly more easy to control than the Swing one, my only point of comparison in Java.&lt;/li&gt;

&lt;li&gt;Despite this, &lt;b&gt;the GUI is not as good as the iPhone one&lt;/b&gt;: technologically, it lacks important points (difficult to achieve, I know): &lt;b&gt;the multi-touch is not supported at all and will probably never&lt;/b&gt; (or only partially, if we can hope?); &lt;b&gt;the fluidity of the scrolls with the finger is not as impressive&lt;/b&gt; as on the iPhone and at the same time it &lt;b&gt;lost ergonomism&lt;/b&gt;; the sequence of &lt;b&gt;screens and transitions between them are not automatic&lt;/b&gt;: you must integrate or develop it by yourself: it has its advantages but also disadvantages: each program will behave differently on transistions, resulting in &lt;b&gt;a loss of landmarks for the user&lt;/b&gt;; API adopted by Google is a little too oriented "1 screen means 1 Java class", which is sometimes a strong constraint to generate clear source code.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;The screen resolution of Android is variable!&lt;/b&gt; Several resolutions will be possible: this advantage allows manufacturers of phones to have screens of different size depending on the targeted markets: it is good for them. For developers, that's another story! You must design applications with screens nor too rich (to fit on small screens), nor too poor (to avoid empty large screens), or (solution that I had adopted) &lt;b&gt;set up screens for each resolution&lt;/b&gt;. This work is long, and if an application does not handle many resolutions (as I saw many applications as ADC Challenge winners...), small screen will not display everything, and therefore the application does not run properly on low resolutions, which are - I presume - being the first resolutions to emerge on the market, given the current technological possibilities.&lt;/li&gt;

&lt;li&gt;Application side, we do what we want, as long as it is possible in Java, and &lt;b&gt;if it is not too heavy to execute&lt;/b&gt; : we must not forget that Java is a language interpreted by a JVM, and it is basically heavy and power consumer. On a small phone, we have the computing power of a PC made five years ago. See how Windows Mobile is slow: it will be worse under Android, unless you have a very big phone tht cost a lot (see the dimensions of the HTC Dream / G1, the first android phone to be released, for about $300).&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Synchronization side, between Android / Desktop, is for the moment inexisting: either I missed a big detail in the framework, or it is a huge mistake made by Google: I have not found any tool in the emulator to synchronize laptop with a PC... &lt;/b&gt;If every developer must do its own synchronization program, there will be problems quickly. I intend to look at this at the end of my project to analyze the feasibility and simplicity to develop a database sync.&lt;/li&gt;

&lt;li&gt;Finally, as the framework version 0.9 was released recently, I was able to experience a transition of versions with my application. The changes in the API showed me about 550 errors in Eclipse. &lt;b&gt;Classes have disappeared, others are displaced or have become private. Many methods have been renamed (without any logical intention), and Google Maps API has changed a lot.&lt;/b&gt; I had to fully rewrite the classes of my application using MAPS. For 550 errors, 30 hours were needed to bring my application up to version 0.9 (the gain is still significant in terms of fluidity, features ...).&lt;/li&gt;

&lt;/ul&gt;
</description></item><item><pubDate>Thu, 25 Sep 2008 15:03:28 GMT</pubDate><title>First feedback on Android framework</title><link>http://www.wascou.org/Blogs/Xavier-GOULEY/Android/First-feedback-on-Android-framework</link><description>&lt;p&gt;
After few months developing a little try under Android API, &lt;b&gt;I wanted to make feedback on benefits of the Google OS&lt;/b&gt;. I want to achieve the first version of my project and then make a &lt;b&gt;constructive criticism about Android regarding to other graphical or mobile APIs, like the iPhone&lt;/b&gt;.&lt;br /&gt;&lt;/p&gt;
&lt;div class="object-right"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/shandroid/1678-1-eng-GB/shAndroid.png" width="305" height="447"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;p&gt;
Since the beginning of the year, I established a personal project to develop a small Android application, quite independent,&lt;br /&gt;
using GUI at maximum of its capacities, a database (SQLite) and a few onboard Google Maps onboard. I'll give small screenshots in a way that says enough along on the usefulness of the program, because I do not know yet exactly what I will do with my application.&lt;br /&gt;&lt;b&gt;My first impressions over development were:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;Firstly,&lt;b&gt; the ownership of the GUI as a developer is quite long&lt;/b&gt;: you cannot learn to make a good GUI in a week, it takes more time (about 2 months). But when you play well with this API, you have fun. The GUI is certainly more easy to control than the Swing one, my only point of comparison in Java.&lt;/li&gt;

&lt;li&gt;Despite this, &lt;b&gt;the GUI is not as good as the iPhone one&lt;/b&gt;: technologically, it lacks important points (difficult to achieve, I know): &lt;b&gt;the multi-touch is not supported at all and will probably never&lt;/b&gt; (or only partially, if we can hope?); &lt;b&gt;the fluidity of the scrolls with the finger is not as impressive&lt;/b&gt; as on the iPhone and at the same time it &lt;b&gt;lost ergonomism&lt;/b&gt;; the sequence of &lt;b&gt;screens and transitions between them are not automatic&lt;/b&gt;: you must integrate or develop it by yourself: it has its advantages but also disadvantages: each program will behave differently on transistions, resulting in &lt;b&gt;a loss of landmarks for the user&lt;/b&gt;; API adopted by Google is a little too oriented "1 screen means 1 Java class", which is sometimes a strong constraint to generate clear source code.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;The screen resolution of Android is variable!&lt;/b&gt; Several resolutions will be possible: this advantage allows manufacturers of phones to have screens of different size depending on the targeted markets: it is good for them. For developers, that's another story! You must design applications with screens nor too rich (to fit on small screens), nor too poor (to avoid empty large screens), or (solution that I had adopted) &lt;b&gt;set up screens for each resolution&lt;/b&gt;. This work is long, and if an application does not handle many resolutions (as I saw many applications as ADC Challenge winners...), small screen will not display everything, and therefore the application does not run properly on low resolutions, which are - I presume - being the first resolutions to emerge on the market, given the current technological possibilities.&lt;/li&gt;

&lt;li&gt;Application side, we do what we want, as long as it is possible in Java, and &lt;b&gt;if it is not too heavy to execute&lt;/b&gt; : we must not forget that Java is a language interpreted by a JVM, and it is basically heavy and power consumer. On a small phone, we have the computing power of a PC made five years ago. See how Windows Mobile is slow: it will be worse under Android, unless you have a very big phone tht cost a lot (see the dimensions of the HTC Dream / G1, the first android phone to be released, for about $300).&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Synchronization side, between Android / Desktop, is for the moment inexisting: either I missed a big detail in the framework, or it is a huge mistake made by Google: I have not found any tool in the emulator to synchronize laptop with a PC... &lt;/b&gt;If every developer must do its own synchronization program, there will be problems quickly. I intend to look at this at the end of my project to analyze the feasibility and simplicity to develop a database sync.&lt;/li&gt;

&lt;li&gt;Finally, as the framework version 0.9 was released recently, I was able to experience a transition of versions with my application. The changes in the API showed me about 550 errors in Eclipse. &lt;b&gt;Classes have disappeared, others are displaced or have become private. Many methods have been renamed (without any logical intention), and Google Maps API has changed a lot.&lt;/b&gt; I had to fully rewrite the classes of my application using MAPS. For 550 errors, 30 hours were needed to bring my application up to version 0.9 (the gain is still significant in terms of fluidity, features ...).&lt;/li&gt;

&lt;/ul&gt;
</description></item><item><pubDate>Thu, 04 Sep 2008 15:31:43 GMT</pubDate><title>Google Chrome</title><link>http://www.wascou.org/Blogs/Maxime-THOMAS/Google-Chrome</link><description>&lt;p&gt;Never heard about it and now Google launches a new browser !&lt;/p&gt;&lt;p&gt;So, what's new in this browser ? Some good things, actually :&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;the omnibox : it's the merge of the search box and the address box in one box where you can type what you want to search or where you want to go. All the things you will type will be parsed and sent to Google Suggestions and the possible answers are suggested under the box.&lt;/li&gt;

&lt;/ul&gt;

&lt;ul&gt;

&lt;li&gt;a task manager : it allows you to manage the different processes launched by your browser and easily kill it if you got some troubles with one of it.&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="object-center"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
            &lt;a href="/wascou/Media/Images/Google-Chrome/Google-Chrome-Task-Manager" target="_blank"&gt;        &lt;img src="/var/plain_site/storage/images/media/images/google-chrome-task-manager/1647-1-eng-GB/Google-Chrome-Task-Manager_large.png" width="300" height="143"  style="border: 0px;" alt="" title="" /&gt;
        &lt;/a&gt;    
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;ul&gt;

&lt;li&gt;a javascript tool : to debug javascript. This the first browser to implement the JavaScript V8 engine which is faster and ready to support Web 2.0 application as Flicker or Facebook.&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="object-center"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
            &lt;a href="/wascou/Media/Images/Google-Chrome/Google-Chrome-Javascript" target="_blank"&gt;        &lt;img src="/var/plain_site/storage/images/media/images/google-chrome-javascript/1641-1-eng-GB/Google-Chrome-Javascript_large.png" width="300" height="249"  style="border: 0px;" alt="" title="" /&gt;
        &lt;/a&gt;    
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;ul&gt;

&lt;li&gt;a source editor : with line numbers, coloration on search and position of the items found in the scroll bar.&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="object-center"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
            &lt;a href="/wascou/Media/Images/Google-Chrome/Google-Chrome-Source-Code" target="_blank"&gt;        &lt;img src="/var/plain_site/storage/images/media/images/google-chrome-source-code/1644-1-eng-GB/Google-Chrome-Source-Code_large.png" width="300" height="221"  style="border: 0px;" alt="" title="" /&gt;
        &lt;/a&gt;    
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;ul&gt;

&lt;li&gt;Some humour on errors ?!?&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="object-center"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
            &lt;a href="/wascou/Media/Images/Google-Chrome/Google-Chrome-Error-Message" target="_self"&gt;        &lt;img src="/var/plain_site/storage/images/media/images/google-chrome-error-message/1638-1-eng-GB/Google-Chrome-Error-Message_large.png" width="300" height="295"  style="border: 0px;" alt="" title="" /&gt;
        &lt;/a&gt;    
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;p&gt;Not a real revolution but a commercial product based on the &lt;a href="http://en.wikipedia.org/wiki/Mozilla_application_framework" target="_blank"&gt;Chrome Engine&lt;/a&gt; of the Mozilla platform and &lt;a href="http://webkit.org/" target="_self"&gt;WebKit&lt;/a&gt;, the engine of Safari which exploits all your data and sell it to &lt;a href="http://redherring.com/Home/24782" target="_blank"&gt;third partners.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Even if Google tries to impose is new product, the reaction of experts are very interesting concerning &lt;a href="http://www.clubic.com/actualite-159696-google-chrome-failles.html" target="_blank"&gt;the security and the data stored and sent&lt;/a&gt; (fr) or the &lt;a href="http://arstechnica.com/journals/linux.ars/2008/09/03/new-firefox-javascript-engine-is-faster-than-chromes-v8" target="_blank"&gt;real performance of this new browser&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In my opinion, I'm not sure that a new interface is required for Firefox and that you really need to increase the chances of being bothered by companies which would like to sell you something ? However, if you install this browser, make sure to understand that all the content may be exploited freely by Google without any &lt;a href="http://www.lexpress.fr/actualite/high-tech/google-chrome-le-nouveau-big-browser_559298.html" target="_blank"&gt;restrictions&lt;/a&gt;....&lt;/p&gt;</description></item><item><pubDate>Tue, 19 Aug 2008 12:30:41 GMT</pubDate><title>Android SDK 0.9 released yesterday</title><link>http://www.wascou.org/Blogs/Xavier-GOULEY/Android-SDK-0.9-released-yesterday</link><description>&lt;p&gt;It's a big news, Android finally opened up the Android SDK v0.9, and Eclipse plugins that comes with.&lt;/p&gt;&lt;p&gt;You can find information on the following sites :&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;&lt;a href="http://android-developers.blogspot.com/2008/08/announcing-beta-release-of-android-sdk.html" target="_blank"&gt;Android Developers Blog&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/cf5d451dfbb7823f" target="_blank"&gt;Android developers Google Groupes&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.mobile-android.fr//?p=113" target="_blank"&gt;Mobile Android (fr)&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://code.google.com/android/download.html" target="_blank"&gt;Download page on code.google.com&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;In few days, I will add a post to comment the migration of an Android application from M5 version to 0.9beta. I can say today that for a little application like mine, more than an hundred of errors appeared in my project with the new SDK (moved/removed API classes, deprecated methods, etc...)...&lt;/p&gt;&lt;p&gt;Good luck for migrations!&lt;/p&gt;</description></item><item><pubDate>Tue, 19 Aug 2008 12:30:41 GMT</pubDate><title>Android SDK 0.9 released yesterday</title><link>http://www.wascou.org/Blogs/Xavier-GOULEY/Android/Android-SDK-0.9-released-yesterday</link><description>&lt;p&gt;It's a big news, Android finally opened up the Android SDK v0.9, and Eclipse plugins that comes with.&lt;/p&gt;&lt;p&gt;You can find information on the following sites :&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;&lt;a href="http://android-developers.blogspot.com/2008/08/announcing-beta-release-of-android-sdk.html" target="_blank"&gt;Android Developers Blog&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/cf5d451dfbb7823f" target="_blank"&gt;Android developers Google Groupes&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.mobile-android.fr//?p=113" target="_blank"&gt;Mobile Android (fr)&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://code.google.com/android/download.html" target="_blank"&gt;Download page on code.google.com&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;In few days, I will add a post to comment the migration of an Android application from M5 version to 0.9beta. I can say today that for a little application like mine, more than an hundred of errors appeared in my project with the new SDK (moved/removed API classes, deprecated methods, etc...)...&lt;/p&gt;&lt;p&gt;Good luck for migrations!&lt;/p&gt;</description></item><item><pubDate>Mon, 18 Aug 2008 12:44:46 GMT</pubDate><title>Firefox 3 - eZDebug extension</title><link>http://www.wascou.org/Blogs/Maxime-THOMAS/Firefox-3-eZDebug-extension</link><description>&lt;p&gt;And I finally finished it, the new version is better, smaller, faster, stronger ?&lt;/p&gt;&lt;p&gt;&lt;a href="/wascou/Media/Images/eZDebug-1.0" target="_blank"&gt;Here&lt;/a&gt; are some screenshot of what it can do.&lt;/p&gt;&lt;p&gt;Some informations :&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;Click on the link to install the extension&lt;/li&gt;

&lt;li&gt;To use it, you can click on the small icon on the bottom right corner, make CTRL+SHIFT+E combination or open the related sidebar in Firefox. Then just press Scan when you are on a page with debug inside.&lt;/li&gt;

&lt;li&gt;Due to the differences between Firefox 2 and 3, it won't be updated fore Firefox 2. (And also because I'm lazy).&lt;/li&gt;

&lt;li&gt;If there's no debug on the page, nothing happens.&lt;/li&gt;

&lt;li&gt;If you got some trouble, you can mail me or just leave a message here.&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;You can download it on the official extension page on &lt;a href="https://addons.mozilla.org/fr/firefox/addon/8534" target="_blank"&gt;addons.mozilla.org&lt;/a&gt;. Please for this extension and leave a comment so it can be supported by the Mozilla Foundation.&lt;/p&gt;&lt;p&gt;Or you can download it &lt;a href="/wascou/Media/Files/eZDebug-1.0" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;To install it, just click on it, Firefox will install it.&lt;/p&gt;</description></item><item><pubDate>Wed, 13 Aug 2008 15:07:24 GMT</pubDate><title>eZpublish SSO login Handler - Apache Kerberos module bypass</title><link>http://www.wascou.org/Blogs/Xavier-GOULEY/eZpublish-SSO-login-Handler-Apache-Kerberos-module-bypass</link><description>&lt;p&gt;This week I had to make an eZpublish web site with an SSO authentication under eZpublish (NTLM). An SSO login handler is required. This login handler is executed by PHP and so is preceded by Apache authentication, with Kerberos Apache module.&lt;/p&gt;&lt;p&gt;The first problem comes when you want to let Kerberos authenticate the user (to give user data to PHP) or bypass authentication module if Kerberos cannot identify the user, to let eZpublish authenticate the user itself, with a classical form or another login handler : this parameter is not possible under Apache Auth modules, with a classical configuration like this:&lt;/p&gt;&lt;pre&gt;&lt;Directory /var/www/ezpublish&gt;
    AuthType Kerberos
    KrbAuthRealms WASCOU.ORG
    KrbServiceName HTTP
    Krb5Keytab /root/wascou.keytab
    KrbMethodNegotiate on
    KrbMethodK5Passwd off
    Require valid-user
    Options All
&lt;/Directory&gt;
&lt;/pre&gt;&lt;p&gt;The "Require valid-user" line will disallow site access until the user is not authenticated under Apache Kerberos module. This is the problem for users that need to be logged in with the classical form on eZpublish. Unfortunately there is no instruction to tell Kerberos to let a bypass in failure case (like with Basic or Digest modules, the same): Apache will give a HTTP 401 error, which is quite logical.&lt;/p&gt;&lt;p&gt;I suppose you know that eZpublish can call the user/login module from any URL that brings to a protected content: according to the user rights, a login form could be shown, and before this, a SSO login can be called. So there no way to indicate clearly to apache when eZpublish needs to login the user (to activate Kerberos authentication): telling "/user/login" URL is the only login URL is a mistake.&lt;/p&gt;&lt;p&gt;So, the solution is to play with well built Apache and PHP redirections, that the user cannot see, to call Kerberos module only when eZpublish needs it. Firstly, we will replace the above configuration with the following one, contained in a Location section, much more appropriated in our case :&lt;/p&gt;&lt;pre&gt;&lt;Location /ntlm/auth&gt;
    AuthType Kerberos
    KrbAuthRealms WASCOU.ORG
    KrbServiceName HTTP
    Krb5Keytab /root/wascou.keytab
    KrbMethodNegotiate on
    KrbMethodK5Passwd off
    Require valid-user
    Options All
    ErrorDocument 401 /user/login
&lt;/Location&gt;
&lt;/pre&gt;&lt;p&gt;Notice that the "/ntlm/auth" URL could bring us to an eZpublish module: this module must exist (you have to create it), but the PHP script behind this will never been executed and could remain empty (Apache and eZpublish will make redirections before this execution, see next step). Also notice the "ErrorDocument 401 /user/login" line, that will redirect the user if Kerberos cannot authenticate the user (and only for the "/ntlm/auth" URL!).&lt;/p&gt;&lt;p&gt;The big tip is here: if Kerberos cannot authenticate the user, it must redirect to an eZpublish page. The "/user/login" is an arbitrary choice, because the SSO login handler will make redirections before the execution of the user/login script (see next step).&lt;/p&gt;&lt;p&gt;Now, you have to make your SSO login handler, playing with all needed redirections, to manage correctly all possible bounds.&lt;/p&gt;&lt;p&gt;The following SSO login handler is a complete example:&lt;/p&gt;&lt;pre&gt;function handleSSOLogin() {
  $ip = $_SERVER["REMOTE_ADDR"];
  $net = $ini-&gt;variable( 'NTLMSettings', 'net' );
  $mask = $ini-&gt;variable( 'NTLMSettings', 'mask' );

  // tip: (net &amp; mask) == (ip &amp; mask) : ok!
  if ((ip2long($net)&amp;ip2long($mask))==(ip2long($ip)&amp;ip2long($mask))) {

    // 2nd case : /ntlm/auth redirected to first URL, to auth under PHP.
    if ($_SESSION['ntlm_success']=="success") {
      if ( array_key_exists( 'REMOTE_USER', $_SESSION )
             &amp;&amp; array_key_exists( 'AUTH_TYPE', $_SESSION ) ) {
        $remoteUser = $_SESSION['REMOTE_USER'];
        $authType = $_SESSION['AUTH_TYPE'];

        eZDebug::writeDebug('#25# user:'.$remoteUser,'');

        $loginParts = explode( '@', $remoteUser );
        $loginName = $loginParts[0];

        // main call of YOUR User handler in NTLM mode
        $user = LOGINCLASS::loginUser($loginName);

        if ( is_object( $user ) ) {
          return $user;
        } else {
          eZDebug::writeDebug('#36# Unable to fetch user','');
          unset($_SESSION['REMOTE_USER']);
          unset($_SESSION['AUTH_TYPE']);
        }
      } else {
        eZDebug::writeDebug('#39# No sso auth performed','');
        unset($_SESSION['REMOTE_USER']);
        unset($_SESSION['AUTH_TYPE']);
      }
      $_SESSION['ntlm_success'] = "failed";
      return false;
    }

    // first case : sso_handler redirection to /ntlm/auth.
    if ($_SERVER['SCRIPT_URL'] == '/ntlm/auth') {
      eZDebug::writeDebug('#47# IP on domain, Kerberos OK.','');
      if (!$_SESSION['ntlm_url']) {
        echo 'Cookies or/and Sessions are not activated.&lt;br/&gt;';
        eZExecution::cleanExit();
      }
      $ntlm_url = $_SESSION['ntlm_url'];
      unset($_SESSION['ntlm_url']);
      $_SESSION['ntlm_success'] = "success";
      $_SESSION['REMOTE_USER'] = $_SERVER['REMOTE_USER'];
      $_SESSION['AUTH_TYPE'] = $_SERVER['AUTH_TYPE'];
      eZHTTPTool::redirect($ntlm_url);
      eZExecution::cleanExit();
    } else if ($_SESSION['ntlm_success'] != "failed") {
      eZDebug::writeDebug('#59# IP on domain, checking NTLM.','');
      $_SESSION['ntlm_url']=$_SERVER['SCRIPT_URL'];
      eZHTTPTool::redirect('/ntlm/auth');
      eZExecution::cleanExit();
    } else {
      eZDebug::writeDebug('#64# IP on domain, Kerberos failed.','');
    }

  } else eZDebug::writeDebug('#67# IP not on domain, Stop.','');

  return false;
}
&lt;/pre&gt;&lt;p&gt;This script will process like this:&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;First, a test is executed to ensure we are on the right domain (by mask and IP)&lt;/li&gt;

&lt;li&gt;Then a redirection is done to /ntlm/auth ; we store the original URL typed in the SESSION&lt;/li&gt;

&lt;li&gt;When /ntlm/auth is called, apache Kerberos module will try to authenticate user&lt;/li&gt;

&lt;li&gt;if failed, an Apache redirection (by "ErrorDocument 401" param) is done to /user/login
&lt;ul&gt;

&lt;li&gt;in this case, our SSO login handler will redirect to the original URL typed by the user, with a failed state for authentication (stored in the session)&lt;/li&gt;

&lt;li&gt;the next login handler will try an authentication with a form...&lt;/li&gt;

&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;if succeeded, our SSO login handler will store user login (given by Kerberos under $_SESSION['REMOTE_USER']) and will redirect to the original URL typed by the user,
&lt;ul&gt;

&lt;li&gt;on this new URL, our SSO login handler will authenticate the given user in the database (you have to implement "LOGINCLASS::loginUser($loginName);" line by yourself)&lt;/li&gt;

&lt;li&gt;in case of success, login process is terminated, the $user is returned.&lt;/li&gt;

&lt;li&gt;in case of failure, false is returned to let next login handler try an authentication with a form...&lt;/li&gt;

&lt;/ul&gt;
&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;If you have any question, comment this post!&lt;/p&gt;&lt;p&gt;Good luck!&lt;/p&gt;</description></item><item><pubDate>Wed, 13 Aug 2008 15:07:24 GMT</pubDate><title>eZpublish SSO login Handler - Apache Kerberos module bypass</title><link>http://www.wascou.org/Blogs/Xavier-GOULEY/eZpublish/eZpublish-SSO-login-Handler-Apache-Kerberos-module-bypass</link><description>&lt;p&gt;This week I had to make an eZpublish web site with an SSO authentication under eZpublish (NTLM). An SSO login handler is required. This login handler is executed by PHP and so is preceded by Apache authentication, with Kerberos Apache module.&lt;/p&gt;&lt;p&gt;The first problem comes when you want to let Kerberos authenticate the user (to give user data to PHP) or bypass authentication module if Kerberos cannot identify the user, to let eZpublish authenticate the user itself, with a classical form or another login handler : this parameter is not possible under Apache Auth modules, with a classical configuration like this:&lt;/p&gt;&lt;pre&gt;&lt;Directory /var/www/ezpublish&gt;
    AuthType Kerberos
    KrbAuthRealms WASCOU.ORG
    KrbServiceName HTTP
    Krb5Keytab /root/wascou.keytab
    KrbMethodNegotiate on
    KrbMethodK5Passwd off
    Require valid-user
    Options All
&lt;/Directory&gt;
&lt;/pre&gt;&lt;p&gt;The "Require valid-user" line will disallow site access until the user is not authenticated under Apache Kerberos module. This is the problem for users that need to be logged in with the classical form on eZpublish. Unfortunately there is no instruction to tell Kerberos to let a bypass in failure case (like with Basic or Digest modules, the same): Apache will give a HTTP 401 error, which is quite logical.&lt;/p&gt;&lt;p&gt;I suppose you know that eZpublish can call the user/login module from any URL that brings to a protected content: according to the user rights, a login form could be shown, and before this, a SSO login can be called. So there no way to indicate clearly to apache when eZpublish needs to login the user (to activate Kerberos authentication): telling "/user/login" URL is the only login URL is a mistake.&lt;/p&gt;&lt;p&gt;So, the solution is to play with well built Apache and PHP redirections, that the user cannot see, to call Kerberos module only when eZpublish needs it. Firstly, we will replace the above configuration with the following one, contained in a Location section, much more appropriated in our case :&lt;/p&gt;&lt;pre&gt;&lt;Location /ntlm/auth&gt;
    AuthType Kerberos
    KrbAuthRealms WASCOU.ORG
    KrbServiceName HTTP
    Krb5Keytab /root/wascou.keytab
    KrbMethodNegotiate on
    KrbMethodK5Passwd off
    Require valid-user
    Options All
    ErrorDocument 401 /user/login
&lt;/Location&gt;
&lt;/pre&gt;&lt;p&gt;Notice that the "/ntlm/auth" URL could bring us to an eZpublish module: this module must exist (you have to create it), but the PHP script behind this will never been executed and could remain empty (Apache and eZpublish will make redirections before this execution, see next step). Also notice the "ErrorDocument 401 /user/login" line, that will redirect the user if Kerberos cannot authenticate the user (and only for the "/ntlm/auth" URL!).&lt;/p&gt;&lt;p&gt;The big tip is here: if Kerberos cannot authenticate the user, it must redirect to an eZpublish page. The "/user/login" is an arbitrary choice, because the SSO login handler will make redirections before the execution of the user/login script (see next step).&lt;/p&gt;&lt;p&gt;Now, you have to make your SSO login handler, playing with all needed redirections, to manage correctly all possible bounds.&lt;/p&gt;&lt;p&gt;The following SSO login handler is a complete example:&lt;/p&gt;&lt;pre&gt;function handleSSOLogin() {
  $ip = $_SERVER["REMOTE_ADDR"];
  $net = $ini-&gt;variable( 'NTLMSettings', 'net' );
  $mask = $ini-&gt;variable( 'NTLMSettings', 'mask' );

  // tip: (net &amp; mask) == (ip &amp; mask) : ok!
  if ((ip2long($net)&amp;ip2long($mask))==(ip2long($ip)&amp;ip2long($mask))) {

    // 2nd case : /ntlm/auth redirected to first URL, to auth under PHP.
    if ($_SESSION['ntlm_success']=="success") {
      if ( array_key_exists( 'REMOTE_USER', $_SESSION )
             &amp;&amp; array_key_exists( 'AUTH_TYPE', $_SESSION ) ) {
        $remoteUser = $_SESSION['REMOTE_USER'];
        $authType = $_SESSION['AUTH_TYPE'];

        eZDebug::writeDebug('#25# user:'.$remoteUser,'');

        $loginParts = explode( '@', $remoteUser );
        $loginName = $loginParts[0];

        // main call of YOUR User handler in NTLM mode
        $user = LOGINCLASS::loginUser($loginName);

        if ( is_object( $user ) ) {
          return $user;
        } else {
          eZDebug::writeDebug('#36# Unable to fetch user','');
          unset($_SESSION['REMOTE_USER']);
          unset($_SESSION['AUTH_TYPE']);
        }
      } else {
        eZDebug::writeDebug('#39# No sso auth performed','');
        unset($_SESSION['REMOTE_USER']);
        unset($_SESSION['AUTH_TYPE']);
      }
      $_SESSION['ntlm_success'] = "failed";
      return false;
    }

    // first case : sso_handler redirection to /ntlm/auth.
    if ($_SERVER['SCRIPT_URL'] == '/ntlm/auth') {
      eZDebug::writeDebug('#47# IP on domain, Kerberos OK.','');
      if (!$_SESSION['ntlm_url']) {
        echo 'Cookies or/and Sessions are not activated.&lt;br/&gt;';
        eZExecution::cleanExit();
      }
      $ntlm_url = $_SESSION['ntlm_url'];
      unset($_SESSION['ntlm_url']);
      $_SESSION['ntlm_success'] = "success";
      $_SESSION['REMOTE_USER'] = $_SERVER['REMOTE_USER'];
      $_SESSION['AUTH_TYPE'] = $_SERVER['AUTH_TYPE'];
      eZHTTPTool::redirect($ntlm_url);
      eZExecution::cleanExit();
    } else if ($_SESSION['ntlm_success'] != "failed") {
      eZDebug::writeDebug('#59# IP on domain, checking NTLM.','');
      $_SESSION['ntlm_url']=$_SERVER['SCRIPT_URL'];
      eZHTTPTool::redirect('/ntlm/auth');
      eZExecution::cleanExit();
    } else {
      eZDebug::writeDebug('#64# IP on domain, Kerberos failed.','');
    }

  } else eZDebug::writeDebug('#67# IP not on domain, Stop.','');

  return false;
}
&lt;/pre&gt;&lt;p&gt;This script will process like this:&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;First, a test is executed to ensure we are on the right domain (by mask and IP)&lt;/li&gt;

&lt;li&gt;Then a redirection is done to /ntlm/auth ; we store the original URL typed in the SESSION&lt;/li&gt;

&lt;li&gt;When /ntlm/auth is called, apache Kerberos module will try to authenticate user&lt;/li&gt;

&lt;li&gt;if failed, an Apache redirection (by "ErrorDocument 401" param) is done to /user/login
&lt;ul&gt;

&lt;li&gt;in this case, our SSO login handler will redirect to the original URL typed by the user, with a failed state for authentication (stored in the session)&lt;/li&gt;

&lt;li&gt;the next login handler will try an authentication with a form...&lt;/li&gt;

&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;if succeeded, our SSO login handler will store user login (given by Kerberos under $_SESSION['REMOTE_USER']) and will redirect to the original URL typed by the user,
&lt;ul&gt;

&lt;li&gt;on this new URL, our SSO login handler will authenticate the given user in the database (you have to implement "LOGINCLASS::loginUser($loginName);" line by yourself)&lt;/li&gt;

&lt;li&gt;in case of success, login process is terminated, the $user is returned.&lt;/li&gt;

&lt;li&gt;in case of failure, false is returned to let next login handler try an authentication with a form...&lt;/li&gt;

&lt;/ul&gt;
&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;If you have any question, comment this post!&lt;/p&gt;&lt;p&gt;Good luck!&lt;/p&gt;</description></item><item><pubDate>Mon, 11 Aug 2008 15:37:25 GMT</pubDate><title>Ciao 3.x</title><link>http://www.wascou.org/Blogs/Maxime-THOMAS/Ciao-3.x</link><description>&lt;a name="eztoc1446_0_1" id="eztoc1446_0_1"&gt;&lt;/a&gt;&lt;h3&gt;It's done. We loved it, they stop it. Bye bye &lt;a href="http://ez.no/developer/news/ez_publish_4_0_1rc2_3_10_1rc2_released" target="_blank"&gt;eZPublish 3.x series&lt;/a&gt;...&lt;/h3&gt;&lt;p&gt;Yes, a bit sad but how good for developpers ! There were some features that eZSystems improved in the 3.x and which made this great software a more evolutive and scalable software for everyone. Here are the features I remember the most :&lt;/p&gt;&lt;a name="eztoc1446_0_1_1" id="eztoc1446_0_1_1"&gt;&lt;/a&gt;&lt;h4&gt;3.6&lt;/h4&gt;
&lt;ul&gt;

&lt;li&gt;LDAP handler : connect eZPublish on a LDAP directory and to automatically create users in the eZ subtree.&lt;/li&gt;

&lt;li&gt;Reverse features : get the objects which are relating the current object.&lt;/li&gt;

&lt;li&gt;Remove subtree : useful to delete entire subtree.&lt;/li&gt;

&lt;/ul&gt;
&lt;a name="eztoc1446_0_1_2" id="eztoc1446_0_1_2"&gt;&lt;/a&gt;&lt;h4&gt;3.7&lt;/h4&gt;
&lt;ul&gt;

&lt;li&gt;Siteaccess settings in the extensions : you can put siteaccess settings in the extension. It allows you to design reusable extensions, overriding standards.&lt;/li&gt;

&lt;li&gt;Developpement Mode : in dev mode it's not necessary to clear cache at each time...&lt;/li&gt;

&lt;/ul&gt;
&lt;a name="eztoc1446_0_1_3" id="eztoc1446_0_1_3"&gt;&lt;/a&gt;&lt;h4&gt;3.8&lt;/h4&gt;
&lt;ul&gt;

&lt;li&gt;Internationalisation : it is possible to translate any content in any language without having a content reference translated in a given language.&lt;/li&gt;

&lt;li&gt;Clustering : you can put several instance of eZ on several hosts to share the load.&lt;/li&gt;

&lt;li&gt;Group approval for workflows.&lt;/li&gt;

&lt;li&gt;Serialization for all datatypes.&lt;/li&gt;

&lt;li&gt;eZInfo() function for extensions.&lt;/li&gt;

&lt;/ul&gt;
&lt;a name="eztoc1446_0_1_4" id="eztoc1446_0_1_4"&gt;&lt;/a&gt;&lt;h4&gt;3.9&lt;/h4&gt;
&lt;ul&gt;

&lt;li&gt;Auto upload for files in Online Editor.&lt;/li&gt;

&lt;li&gt;Diff.&lt;/li&gt;

&lt;/ul&gt;
&lt;a name="eztoc1446_0_1" id="eztoc1446_0_1"&gt;&lt;/a&gt;&lt;h3&gt;And now ?&lt;/h3&gt;&lt;p&gt;Some upcoming goodies for us ! Version 3.10.1 and 4.0.1 will be updated and 4.1 is announced for Q3. It seems that eZ gets behind...&lt;/p&gt;&lt;p&gt;No ?&lt;/p&gt;</description></item><item><pubDate>Thu, 03 Jul 2008 05:40:12 GMT</pubDate><title>eZDebug for Firefox3</title><link>http://www.wascou.org/Blogs/Maxime-THOMAS/eZDebug-for-Firefox3</link><description>&lt;p&gt;After a fruitful conversation with Nicolas Pastorino, he said me that he was waiting the new version of eZDebug. I was focusing on other extension so I completely forgot that. So, I've started the development of the version 1.0 fore Firefox3, in six monthes dev tools have evolved (happily for me) and it will be easier to test and develop. I will make the following arrangements :&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;It won't be in a new window but in the sidebar or in a new tab (like the magic CTRL+MAJ+C).&lt;/li&gt;

&lt;li&gt;It won't be necessary to hack the kernel --&gt; So it can be used for any eZ instance.&lt;/li&gt;

&lt;li&gt;It will be possible to filter by category or by typing something.&lt;/li&gt;

&lt;li&gt;A clear "debug button" will allow to hide the debug in the internet page.&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;If you got some remarks or suggestions on this, just leave a comment.&lt;/p&gt;</description></item><item><pubDate>Sat, 28 Jun 2008 15:54:30 GMT</pubDate><title>The Norvegian Chronicles</title><link>http://www.wascou.org/Blogs/Maxime-THOMAS/The-Norvegian-Chronicles</link><description>
&lt;div class="object-right"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/norvegian-chronicles/badge/1274-1-eng-GB/Badge_medium.jpg" width="135" height="200"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;div class="attribute-caption" style="width: 135px"&gt;    
&lt;p&gt;My badge at the eZConference&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;p&gt;Few weeks ago, I participipated to the eZConference &amp; Open Nordic 2008 in Skien in Norway. There's some things you must now about Norway :&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;It's difficult to get there, even by plane, or car or camel...&lt;/li&gt;

&lt;li&gt;It's absurdly expensive (150€ to do 40km in cab)&lt;/li&gt;

&lt;li&gt;There's no night&lt;/li&gt;

&lt;li&gt;Most of Norvegian is speaking english, hopefully !&lt;/li&gt;

&lt;li&gt;They eat caviar for breakfast&lt;/li&gt;

&lt;li&gt;Salmon is absurdly cheap&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;By the way, as you can imagine, Norway is a big country with few persons in it. So there's a lot of space and they are very concerned by the quality of their life : cities are clean and services are perfect.&lt;/p&gt;&lt;a name="eztoc1362_0_1" id="eztoc1362_0_1"&gt;&lt;/a&gt;&lt;h3&gt;Open Nordic 2008&lt;/h3&gt;&lt;p&gt;The conference stood in the Skien Ibsenhuset, a very large conference hall, where both conferences, eZConference and Open Nordic, happened. &lt;/p&gt;&lt;p&gt;The main subject on eZ were :&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;Multiple file upload in 4.1 : it has been made in complement of the webdav feature which does not work on all platforms (Did I say Windows ???).&lt;/li&gt;

&lt;li&gt;OE 5 : integrating Tiny MCE, this WYSIWG editor rocks ! After having worked with HTMLArea, FCKEditor and the former OE, it seems to be the more powerfull and intuitive work ever done. At least, it is a very visible work.&lt;/li&gt;

&lt;li&gt;Support for OpenOffice.org and Microsoft Office document import and export in eZ via a nested toolbar in the editor : you can open content directly on an eZ instance via a Java connector and modify it as you want. When you save it, it will send the data to the eZ instance and update your website. Very powerfull and I guess very similar to the &lt;a href="http://office.microsoft.com/en-us/sharepointserver/HA102486841033.aspx" target="_blank"&gt;Sharepoint feature.&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Site factory and CSS Editor : two features which are made to ease the deployment and configuration of eZ websites. The first is a console tool allowing to deploy in one command an entire site with a specified configuration (it uses &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target="_blank"&gt;REST&lt;/a&gt;). The second one is a kind of webmaster gadget in full java which will allow people to modify their design in few clicks : you activate a design mode on your frontend and then you can select each element of the page and then change some defined css values, like background-color or what you want.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://ezcomponents.org/" target="_blank"&gt;ezComponents &lt;/a&gt;integration : eZGuys are close to completely lighten the kernel libs by integrating the eZComponents. The most important change will happen when the integration of the &lt;a href="http://ezcomponents.org/docs/tutorials/Template" target="_blank"&gt;ezcTemplate&lt;/a&gt; will be effective. It's a big step for the eZCommunity because we will have to deal with a strict template engine (at last !).&lt;/li&gt;

&lt;li&gt;And some new components like &lt;a href="http://ezcomponents.org/docs/tutorials/Document" target="_blank"&gt;Document&lt;/a&gt; and &lt;a href="http://ezcomponents.org/docs/tutorials/Search" target="_blank"&gt;Search&lt;/a&gt;.&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;By the way, it was a great time, sharing our knowledge and drinking beers at the at the pub...&lt;/p&gt;
&lt;div class="object-center"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/norvegian-chronicles/nicolas-pastorino-from-ezsystems/1280-1-eng-GB/Nicolas-Pastorino-from-eZSystems_large.jpg" width="300" height="225"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;div class="attribute-caption" style="width: 300px"&gt;    
&lt;p&gt;Nicolas Pastorino from eZSystems&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="object-center"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/norvegian-chronicles/baard-farstad-and-damien-pobel/1277-2-eng-GB/Baard-Farstad-and-Damien-Pobel_large.jpg" width="300" height="225"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;div class="attribute-caption" style="width: 300px"&gt;    
&lt;p&gt;Bård Farstad and Damien Pobel&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;a name="eztoc1362_0_1" id="eztoc1362_0_1"&gt;&lt;/a&gt;&lt;h3&gt;Oslo&lt;/h3&gt;&lt;p&gt;And then I travelled a bit to reach &lt;a href="http://en.wikipedia.org/wiki/Oslo" target="_blank"&gt;Oslo&lt;/a&gt;... Country, sea and half-light :&lt;/p&gt;
&lt;div class="object-center"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/norvegian-chronicles/countryside/1283-1-eng-GB/Countryside_large.jpg" width="300" height="225"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;div class="attribute-caption" style="width: 300px"&gt;    
&lt;p&gt;Countryside&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="object-center"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/norvegian-chronicles/seaside/1286-1-eng-GB/Seaside_large.jpg" width="300" height="225"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;div class="attribute-caption" style="width: 300px"&gt;    
&lt;p&gt;Seaside&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="object-center"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/norvegian-chronicles/opera/1289-1-eng-GB/Opera_large.jpg" width="300" height="225"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;div class="attribute-caption" style="width: 300px"&gt;    
&lt;p&gt;Opera&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="object-center"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/norvegian-chronicles/at-night/1292-1-eng-GB/At-night_large.jpg" width="300" height="225"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;div class="attribute-caption" style="width: 300px"&gt;    
&lt;p&gt;At night&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;a name="eztoc1362_0_1" id="eztoc1362_0_1"&gt;&lt;/a&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;&lt;p&gt;It was a great trip, lot of emotions, lot of exchanges between people from different countries, and one pledge : next year I will be there, Monseigneur.&lt;/p&gt;&lt;p&gt;:-D&lt;/p&gt;</description></item><item><pubDate>Tue, 17 Jun 2008 06:45:48 GMT</pubDate><title>D-2</title><link>http://www.wascou.org/Blogs/Maxime-THOMAS/D-2</link><description>&lt;p&gt;Exciting ! Only two days before &lt;a href="http://conference.ez.no/" target="_blank"&gt;eZConf&lt;/a&gt; and the &lt;a href="http://ez.no/company/ez_conference_awards" target="_blank"&gt;eZAwards&lt;/a&gt; !&lt;/p&gt;&lt;p&gt;So a year is gone since last time I trampled the Norvegian floor and I'm ready to go there again. Why ? Simply for the best :&lt;/p&gt;
&lt;ol&gt;

&lt;li&gt;The bigger CMS conference in the world&lt;/li&gt;

&lt;li&gt;The eZAward after party&lt;/li&gt;

&lt;li&gt;Salmon&lt;/li&gt;

&lt;li&gt;Grenland&lt;/li&gt;

&lt;/ol&gt;
&lt;p&gt;As a &lt;a href="http://ez.no/company/news/the_nominees_for_the_ez_awards_2008" target="_blank"&gt;nominee&lt;/a&gt;, I would like to wish a good luck to everybody.&lt;/p&gt;&lt;p&gt;However, I've got bad news for everyone, it won't be a pleasure like last year. It seems that we will have &lt;a href="http://fr.weather.yahoo.com/NOXX/NOXX0034/index_c.html" target="_blank"&gt;bad weather&lt;/a&gt; suring the conf but it will be better just after.&lt;/p&gt;&lt;p&gt;And now, a little trick in order to make accept &lt;a href="http://sites.yellow.co.nz/site/ezflownailsystems/" target="_blank"&gt;eZFlow&lt;/a&gt; by women.&lt;/p&gt;&lt;p&gt;See you in Skien !&lt;/p&gt;</description></item><item><pubDate>Tue, 20 May 2008 06:23:17 GMT</pubDate><title>Little survey : Who's coming ?</title><link>http://www.wascou.org/Blogs/Maxime-THOMAS/Little-survey-Who-s-coming</link><description>&lt;p&gt;Hey buddy,&lt;/p&gt;&lt;p&gt;Are you coming to the &lt;a href="http://conference.ez.no/eng" target="_blank"&gt;eZ Conference&lt;/a&gt; this year ?&lt;/p&gt;&lt;p&gt;If yes please leave me a comment !&lt;/p&gt;</description></item><item><pubDate>Mon, 19 May 2008 11:13:27 GMT</pubDate><title>First Android Developper Challenge over</title><link>http://www.wascou.org/Blogs/Xavier-GOULEY/First-Android-Developper-Challenge-over</link><description>&lt;p&gt;
About two weeks ago, the first ADC is over, and winners are published.&lt;br /&gt;This post will comment few winner applications, positive and negative points on them.&lt;/p&gt;
&lt;div class="object-right"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/android-2/874-1-eng-GB/Android-2.png" width="230" height="427"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;p&gt;Firstly, I saw in a recent RSS feed that ADC judges are mainly from the Handset Alliance. I think this is quite unfair for some kind of application. Judges are from constructors like HTC, NVidia, Samsung, Telefonica, Motorola, T-mobile *, ASUS, etc... and for a lot of them, they are mobile contructors. By this way, many applications are designed to be winners because of the marketing concept that constructors like to use for selling a mobile. For example, many winners are social networks. I understand that this kind of application will be very used by majority of people (if they have enough money to stay connected to the Internet everytime they use their mobile...), but other applications, that could be really usefull but that are not a very good subject for marketing could be disadvantaged.&lt;/p&gt;&lt;p&gt;A second point that I want to highlight is that in a lot of these winner applications, the user interface is made for a very high resolution. Think that first mobiles using Android won't have such a resolution. In this case, the winner application won't work correctly on many of these phones...&lt;/p&gt;&lt;p&gt;Yet, I was impressed by some of these applications. For example a biometric application called BioWallet that scan eyes for iris based authentication (yes, you will need a very good camera on your mobile now...), or the ability to scan 1D and 2D barcodes.&lt;/p&gt;&lt;p&gt;The past month, I tried the Android SDK, and I enjoyed the easy way to make efficient user interfaces.&lt;/p&gt;&lt;p&gt;The next post I will put on this blog will be about first steps in Android SDK.&lt;/p&gt;&lt;p&gt;The following links talks about the 50 winners of the ADC. See them and imagine what Android will be in few months:&lt;/p&gt;&lt;p&gt;
&lt;a href="http://www.frandroid.com/369/116-juges-et-46-descriptions-dapplication-pour-landroid-developper-challenge/" target="_blank"&gt;http://www.frandroid.com/369/116-juges-et-46-descriptions-dapplic...&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://code.google.com/android/images/adc1r1_deck.pdf" target="_blank"&gt;http://code.google.com/android/images/adc1r1_deck.pdf&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://android-developers.blogspot.com/2008/05/android-developer-challenge-judges-and.html" target="_blank"&gt;http://android-developers.blogspot.com/2008/05/android-developer-cha...&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.anddev.org/viewtopic.php?p=7911#7911" target="_blank"&gt;http://www.anddev.org/viewtopic.php?p=7911#7911&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.mobile-android.fr/?p=74" target="_blank"&gt;http://www.mobile-android.fr/?p=74&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.netvibes.com/xaviergouley#Android" target="_blank"&gt;http://www.netvibes.com/xaviergouley#Android&lt;/a&gt;&lt;/p&gt;</description></item><item><pubDate>Mon, 19 May 2008 11:13:27 GMT</pubDate><title>First Android Developper Challenge over</title><link>http://www.wascou.org/Blogs/Xavier-GOULEY/Android/First-Android-Developper-Challenge-over</link><description>&lt;p&gt;
About two weeks ago, the first ADC is over, and winners are published.&lt;br /&gt;This post will comment few winner applications, positive and negative points on them.&lt;/p&gt;
&lt;div class="object-right"&gt;&lt;div class="content-view-embeddedmedia"&gt;
&lt;div class="class-image"&gt;

&lt;div class="attribute-image"&gt;
&lt;p&gt;      

    
        
    
                    &lt;img src="/var/plain_site/storage/images/media/images/android-2/874-1-eng-GB/Android-2.png" width="230" height="427"  style="border: 0px;" alt="" title="" /&gt;
            
    
    
      &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;p&gt;Firstly, I saw in a recent RSS feed that ADC judges are mainly from the Handset Alliance. I think this is quite unfair for some kind of application. Judges are from constructors like HTC, NVidia, Samsung, Telefonica, Motorola, T-mobile *, ASUS, etc... and for a lot of them, they are mobile contructors. By this way, many applications are designed to be winners because of the marketing concept that constructors like to use for selling a mobile. For example, many winners are social networks. I understand that this kind of application will be very used by majority of people (if they have enough money to stay connected to the Internet everytime they use their mobile...), but other applications, that could be really usefull but that are not a very good subject for marketing could be disadvantaged.&lt;/p&gt;&lt;p&gt;A second point that I want to highlight is that in a lot of these winner applications, the user interface is made for a very high resolution. Think that first mobiles using Android won't have such a resolution. In this case, the winner application won't work correctly on many of these phones...&lt;/p&gt;&lt;p&gt;Yet, I was impressed by some of these applications. For example a biometric application called BioWallet that scan eyes for iris based authentication (yes, you will need a very good camera on your mobile now...), or the ability to scan 1D and 2D barcodes.&lt;/p&gt;&lt;p&gt;The past month, I tried the Android SDK, and I enjoyed the easy way to make efficient user interfaces.&lt;/p&gt;&lt;p&gt;The next post I will put on this blog will be about first steps in Android SDK.&lt;/p&gt;&lt;p&gt;The following links talks about the 50 winners of the ADC. See them and imagine what Android will be in few months:&lt;/p&gt;&lt;p&gt;
&lt;a href="http://www.frandroid.com/369/116-juges-et-46-descriptions-dapplication-pour-landroid-developper-challenge/" target="_blank"&gt;http://www.frandroid.com/369/116-juges-et-46-descriptions-dapplic...&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://code.google.com/android/images/adc1r1_deck.pdf" target="_blank"&gt;http://code.google.com/android/images/adc1r1_deck.pdf&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://android-developers.blogspot.com/2008/05/android-developer-challenge-judges-and.html" target="_blank"&gt;http://android-developers.blogspot.com/2008/05/android-developer-cha...&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.anddev.org/viewtopic.php?p=7911#7911" target="_blank"&gt;http://www.anddev.org/viewtopic.php?p=7911#7911&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.mobile-android.fr/?p=74" target="_blank"&gt;http://www.mobile-android.fr/?p=74&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.netvibes.com/xaviergouley#Android" target="_blank"&gt;http://www.netvibes.com/xaviergouley#Android&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>
