<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1699145198678686871</id><updated>2011-11-28T01:37:16.788+01:00</updated><category term='LRF'/><category term='mail'/><category term='JavaDay'/><category term='ricette'/><category term='poesia'/><category term='parcheggio'/><category term='silvia'/><category term='JUG'/><category term='decrypt'/><category term='PDF'/><category term='Screencast'/><category term='AJAX'/><category term='OpenOffice'/><category term='programmazione'/><category term='Parancoe'/><category term='conference'/><category term='zurigo'/><category term='Java'/><category term='NetBeans'/><category term='book'/><category term='Cagliari'/><category term='jar'/><category term='presentation'/><category term='PRS-505'/><category term='exim'/><category term='Tomcat'/><category term='software'/><category term='Linux'/><category term='devoxx'/><category term='cantucci'/><category term='DWR'/><category term='Tiles'/><category term='Spring'/><category term='LifeRay'/><category term='thinking'/><title type='text'>Benfante</title><subtitle type='html'>Pensieri e contenuti in libertà, sia legati al mio lavoro, sia...no!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-770906827281548648</id><published>2009-11-14T08:40:00.015+01:00</published><updated>2009-11-14T12:13:25.763+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='devoxx'/><title type='text'>My Devoxx 2009</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.devoxx.com"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 125px; height: 125px;" src="http://www.devoxx.com/download/attachments/1706305/Devoxx09-125x125_wit.gif" border="0" alt="Devoxx banner" /&gt;&lt;/a&gt;&lt;br /&gt;The following is my schedule for the &lt;a href="http://www.devoxx.com"&gt;Devoxx&lt;/a&gt; conference. In red the presentations I will attend. If you would like to suggest me other presentations you would like to hear about from me, send me a line and I will try to attend them.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.google.com/calendar/embed?showTitle=0&amp;amp;mode=AGENDA&amp;amp;height=600&amp;amp;wkst=1&amp;amp;bgcolor=%23FFFFFF&amp;amp;src=mr5ul3klj0m5c84tr1crj0srng%40group.calendar.google.com&amp;amp;color=%23AB8B00&amp;amp;src=9ruqf0aog585mv6b8ouae1mtm0%40group.calendar.google.com&amp;amp;color=%23A32929&amp;amp;ctz=Europe%2FBrussels&amp;amp;dates=20091115%2F20091120" style=" border-width:0 " width="570" height="600" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-770906827281548648?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/770906827281548648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=770906827281548648' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/770906827281548648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/770906827281548648'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2009/11/my-devoxx.html' title='My Devoxx 2009'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-3470283104201619188</id><published>2009-08-09T08:37:00.009+02:00</published><updated>2009-08-09T10:22:48.616+02:00</updated><title type='text'>Build or simply compile?</title><content type='html'>With &lt;a href="http://www.parancoe.org"&gt;Parancoe&lt;/a&gt; I already have a very productive environment for the development of my applications. I can have unit tests on most of the code, so I rarely need a full build and redeploy.&lt;br /&gt;&lt;br /&gt;But sometimes it would be nice (and necessary) to just code and try the result in the browser. With &lt;a href="http://www.zeroturnaround.com/javarebel/"&gt;JavaRebel&lt;/a&gt; you can do this simply compiling the new code, without the need of a full build and redeploy of your application.&lt;br /&gt;&lt;br /&gt;For example, in my current parancoe-based project, I modified a method in the the HomeController, and some code (even adding a new method) in the UserProfileBo class.&lt;br /&gt;&lt;br /&gt;Then I just recompiled the project, in &lt;span style="font-weight:bold;"&gt;3 seconds&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;NetBeans: Executing 'mvn -Dnetbeans.execution=true compiler:compile'&lt;br /&gt;NetBeans:      JAVA_HOME =/usr/lib/jvm/java-6-sun&lt;br /&gt;Scanning for projects...&lt;br /&gt;Searching repository for plugin with prefix: 'compiler'.&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;Building minimark Web Application&lt;br /&gt;   task-segment: [compiler:compile]&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;[compiler:compile]&lt;br /&gt;Compiling 2 source files to /home/lucio/MyWorks/minimark/minimark/target/classes&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;BUILD SUCCESSFUL&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;Total time: 3 seconds&lt;br /&gt;Finished at: Sun Aug 09 08:14:56 CEST 2009&lt;br /&gt;Final Memory: 18M/144M&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;When I refreshed the page in the browser, the log of my Tomcat showed:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;JavaRebel: Reloading class 'com.benfante.minimark.controllers.HomeController'.&lt;br /&gt;JavaRebel-Spring: Reconfiguring bean 'homeController' [com.benfante.minimark.controllers.HomeController]&lt;br /&gt;JavaRebel: Reloading class 'com.benfante.minimark.blo.UserProfileBo'.&lt;br /&gt;JavaRebel-Spring: Reconfiguring bean 'userProfileBo' [com.benfante.minimark.blo.UserProfileBo]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Notice the classes not only have been reloaded, but also the spring-managed &lt;span style="font-weight:bold;"&gt;annotation-configured&lt;/span&gt; beans have been reconfigured.&lt;br /&gt;&lt;br /&gt;The configuration of JavaRebel (&lt;span style="font-style:italic;"&gt;in this case&lt;/span&gt;) is very easy.&lt;br /&gt;&lt;br /&gt;In my Maven pom.xml:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;&lt;plugin&gt;&lt;br /&gt;  &lt;groupId&gt;org.zeroturnaround&lt;/groupId&gt;&lt;br /&gt;  &lt;artifactId&gt;javarebel-maven-plugin&lt;/artifactId&gt;&lt;br /&gt;  &lt;executions&gt;&lt;br /&gt;    &lt;execution&gt;&lt;br /&gt;      &lt;id&gt;generate-rebel-xml&lt;/id&gt;&lt;br /&gt;      &lt;phase&gt;process-resources&lt;/phase&gt;&lt;br /&gt;      &lt;goals&gt;&lt;br /&gt;        &lt;goal&gt;generate&lt;/goal&gt;&lt;br /&gt;      &lt;/goals&gt;&lt;br /&gt;    &lt;/execution&gt;&lt;br /&gt;  &lt;/executions&gt;&lt;br /&gt;&lt;/plugin&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The Tomcat configuration is:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;CATALINA_OPTS="-XX:PermSize=32m -XX:MaxPermSize=200m -Xmx256m -Dfile.encoding=UTF-8 -noverify -javaagent:/home/lucio/local/javarebel-2.0/javarebel.jar -Drebel.spring_plugin=true"&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-3470283104201619188?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/3470283104201619188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=3470283104201619188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/3470283104201619188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/3470283104201619188'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2009/08/build-or-simply-compile.html' title='Build or simply compile?'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-2498688792812626290</id><published>2009-05-25T08:36:00.001+02:00</published><updated>2009-05-25T08:36:19.407+02:00</updated><title type='text'>Gregorio</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/benfante/3561456805/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3652/3561456805_f5359f9759_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/benfante/3561456805/"&gt;Gregorio&lt;/a&gt;&lt;br /&gt;Inserito originariamente da &lt;a href="http://www.flickr.com/people/benfante/"&gt;Lucio Benfante&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;Un benvenuto a Gregorio, fratellino di Carlo e Silvia, che gli fanno tanti auguri e non vedono l'ora che arrivi a casa.&lt;br /&gt;&lt;br /&gt;Sì, al momento è tranquillo come appare, speriamo continui così&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-2498688792812626290?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/2498688792812626290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=2498688792812626290' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/2498688792812626290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/2498688792812626290'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2009/05/gregorio.html' title='Gregorio'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3652/3561456805_f5359f9759_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-6772985061504218534</id><published>2009-05-05T02:48:00.009+02:00</published><updated>2009-05-05T07:41:16.464+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programmazione'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Mutable authorities with Spring Security and CAS</title><content type='html'>Recently I worked on an application with the following requisite:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The logged user must select its current role among the roles for which he's authorized.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;A simple requisite, and (apparently) it's easy to implement it with &lt;a href="http://static.springsource.org/spring-security/site/index.html"&gt;Spring Security&lt;/a&gt;: write an UserDetails class in which you can select the returned authority(ies). For example:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;public class LoggedUserWithSelectableRole extends User {&lt;br /&gt;    private GrantedAuthority currentAuthority;&lt;br /&gt;&lt;br /&gt;    public LoggedUserWithSelectableRole(String username, String password,&lt;br /&gt;            boolean enabled, GrantedAuthority[] authorities) throws IllegalArgumentException {&lt;br /&gt;        super(username, password, enabled, authorities);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setCurrentAuthority(GrantedAuthority currentAuthority) {&lt;br /&gt;        this.currentAuthority = currentAuthority;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public GrantedAuthority[] getAuthorities() {&lt;br /&gt;        if (Arrays.asList(super.getAuthorities()).contains(currentAuthority)) {&lt;br /&gt;            return new GrantedAuthority[] {currentAuthority};&lt;br /&gt;        } else {&lt;br /&gt;            return new GrantedAuthority[0];&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public GrantedAuthority[] getAllAuthorities() {&lt;br /&gt;        return super.getAuthorities();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now you can select an authority for the logged user (for example, in a controller):&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;@RequestMapping&lt;br /&gt;public String selectRole(@RequestParam(value = "role") int role) {&lt;br /&gt;    LoggedUserWithSelectableRole user =&lt;br /&gt;            (LoggedUserWithSelectableRole) SecurityContextHolder.getContext().&lt;br /&gt;            getAuthentication().getPrincipal();&lt;br /&gt;    user.setCurrentAuthority(user.getAllAuthorities()[role]);&lt;br /&gt;    return "redirect:/";&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately this is not sufficient, as the authorities used by Spring Security for checking the user authorization are not (usually) stored in the principal object, but it the Authentication object.&lt;br /&gt;&lt;br /&gt;It would be nice to write something like:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;/* WARNING: The method setAuthorities  doesn't exist */&lt;br /&gt;SecurityContextHolder.getContext().getAuthentication().&lt;br /&gt;        setAuthorities(user.getAuthorities());&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But the Authentication token is mostly immutable, so the &lt;code&gt;setAuthorities&lt;/code&gt; doesn't exist. Worst, in the &lt;code&gt;AbtractAuthenticationToken&lt;/code&gt; class, the base class of most of the token implementations, the &lt;code&gt;authorities&lt;/code&gt; attribute is private, so you can't easily implement by yourself an alternative token implementation extending the original token class.&lt;br /&gt;&lt;br /&gt;In our application we are using &lt;a href="http://www.jasig.org/cas"&gt;CAS&lt;/a&gt;. The only solution I found (as far as I know...please send me a line if you see a better solution) was to extend the CasAuthenticationToken, provinding a costructor for coping an existing token (of course of the same type):&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;public class UpdatableCasAuthenticationToken extends CasAuthenticationToken {&lt;br /&gt;&lt;br /&gt;    private final int keyHash;&lt;br /&gt;&lt;br /&gt;    public UpdatableCasAuthenticationToken(CasAuthenticationToken token, GrantedAuthority[] authorities) {&lt;br /&gt;        super("BOH", token.getPrincipal(), token.getCredentials(), authorities, token.getUserDetails(), token.getAssertion());&lt;br /&gt;        this.keyHash = token.getKeyHash();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public int getKeyHash() {&lt;br /&gt;        return this.keyHash;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you can see, we also need to hide attributes and override methods not modifiable through the constructor of the base class.&lt;br /&gt;&lt;br /&gt;Now I can substitute the original token with the modified one:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;@RequestMapping&lt;br /&gt;public String selectRole(@RequestParam(value = "role") int role) {&lt;br /&gt;    LoggedUserWithSelectableRole user =&lt;br /&gt;            (LoggedUserWithSelectableRole) SecurityContextHolder.getContext().&lt;br /&gt;            getAuthentication().getPrincipal();&lt;br /&gt;    user.setCurrentAuthority(user.getAllAuthorities()[role]);&lt;br /&gt;    SecurityContextHolder.getContext().setAuthentication(&lt;br /&gt;        new UpdatableCasAuthenticationToken(&lt;br /&gt;            (CasAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(),&lt;br /&gt;            user.getAuthorities()));&lt;br /&gt;    return "redirect:/";&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As CAS ha no concerns with the user roles, I think &lt;code&gt;CasAuthenticationToken&lt;/code&gt; should provide a way for updating authorities, and maybe the &lt;code&gt;authorites&lt;/code&gt; attribute of &lt;code&gt;AbstractAuthenticationToken&lt;/code&gt; should be declared as &lt;code&gt;protected&lt;/code&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-6772985061504218534?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/6772985061504218534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=6772985061504218534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/6772985061504218534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/6772985061504218534'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2009/05/mutable-authorities-with-spring.html' title='Mutable authorities with Spring Security and CAS'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-2009369881709482344</id><published>2009-03-08T10:54:00.029+01:00</published><updated>2009-03-08T12:16:42.578+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cantucci'/><category scheme='http://www.blogger.com/atom/ns#' term='ricette'/><title type='text'>Cantucci</title><content type='html'>Oggi ho provato un nuovo "algoritmo" culinario: i cantucci. Ok, siamo un po' fuori stagione...ma non si può mica sempre aspettare Natale, no? :)&lt;br /&gt;&lt;br /&gt;La ricetta originale l'ho presa da sito &lt;a href="http://www.misya.info/index.php/2008/12/19/cantucci.htm"&gt;Misya.info&lt;/a&gt;, con gli opportuni adattamenti.&lt;br /&gt;&lt;br /&gt;Partiamo dagli ingredienti:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/benfante/3337728602/" title="Ingredienti per i cantucci di Lucio Benfante, su Flickr"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand; height: 200px;" src="http://farm4.static.flickr.com/3401/3337728602_76b1844da9.jpg" height="200" alt="Ingredienti per i cantucci" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;270g di farina "0"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;200g di zucchero&lt;/li&gt;&lt;br /&gt;&lt;li&gt;un cucchiaino abbondante di lievito in polvere&lt;/li&gt;&lt;br /&gt;&lt;li&gt;un bacello di vaniglia&lt;/li&gt;&lt;br /&gt;&lt;li&gt;due uova intere&lt;/li&gt;&lt;br /&gt;&lt;li&gt;150g di mandorle&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Sbattere le uova.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/benfante/3337731312/" title="Uova da sbattere di Lucio Benfante, su Flickr"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand; height: 175px;" src="http://farm4.static.flickr.com/3553/3337731312_e0958db9c8.jpg" height="175" alt="Uova da sbattere" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/benfante/3336904461/" title="I &amp;quot;diti&amp;quot; dei cantucci di Lucio Benfante, su Flickr"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand; height: 175px;" src="http://farm4.static.flickr.com/3405/3336904461_f7c90eb328.jpg" height="175" alt="I &amp;quot;diti&amp;quot; dei cantucci" /&gt;&lt;/a&gt;&lt;br style="clear: both;"/&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/benfante/3337736442/" title="I &amp;quot;diti&amp;quot; dei cantucci di Lucio Benfante, su Flickr"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand; height: 200px;" src="http://farm4.static.flickr.com/3607/3337736442_525b13c4b7.jpg" height="200" alt="I &amp;quot;diti&amp;quot; dei cantucci" /&gt;&lt;/a&gt;Aggiungere la farina, lo zucchero, il lievito, il contenuto del bacello di vaniglia e un pugno di mandorle.Impastare fino ad ottenere un impasto abbastanza sodo, eventualmente aggiungendo un po' di farina se dovesse risultare troppo appiccicoso.&lt;br /&gt;&lt;br /&gt;Aggiungere la scorza dell'arancia e le mandorle. Formare due "diti" su una teglia ricoperta da carta da forno.&lt;br /&gt;&lt;br style="clear: both;"/&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/benfante/3337738982/" title="Tagliare i &amp;quot;diti&amp;quot; di Lucio Benfante, su Flickr"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand; height: 200px;" src="http://farm4.static.flickr.com/3564/3337738982_43ae580296.jpg" height="200" alt="Tagliare i &amp;quot;diti&amp;quot;" /&gt;&lt;/a&gt;Cuocere in forno per circa 30 minuti a 180°C.&lt;br /&gt;&lt;br /&gt;Tagliare i diti diagonalmente per formare i cantucci.&lt;br /&gt;&lt;br /&gt;Infornare per un'altra quindicina di minuti, per far asciugare bene anche l'interno.&lt;br style="clear: both;"/&gt;Mangiare. :P&lt;br style="clear: both;"/&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/benfante/3336911817/" title="I cantucci sono pronti di Lucio Benfante, su Flickr"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand; height: 175px;" src="http://farm4.static.flickr.com/3305/3336911817_d4436a5e74.jpg" height="175" alt="I cantucci sono pronti" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/benfante/3336914009/" title="I miei cantucci di Lucio Benfante, su Flickr"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand; height: 175px;" src="http://farm4.static.flickr.com/3604/3336914009_6be9f3ccc4.jpg" height="175" alt="I miei cantucci" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-2009369881709482344?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/2009369881709482344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=2009369881709482344' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/2009369881709482344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/2009369881709482344'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2009/03/cantucci.html' title='Cantucci'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3401/3337728602_76b1844da9_t.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-343893418044179025</id><published>2009-01-03T08:43:00.017+01:00</published><updated>2009-01-03T09:52:24.063+01:00</updated><title type='text'>Tiles 2, a cheaper configuration</title><content type='html'>In &lt;a href="http://benfante.blogspot.com/2008/12/using-tiles-2-in-prancoe-project.html"&gt;a previous post&lt;/a&gt; I described how to use &lt;a href="http://tiles.apache.org/"&gt;Tiles 2&lt;/a&gt; in a &lt;a href="http://www.parancoe.org"&gt;Parancoe&lt;/a&gt;/&lt;a href="http://www.springframework.org"&gt;Spring MVC&lt;/a&gt; project. What is really irritating for me in Tiles is its configuration file, a long list of almost identical XML fragments. Moreover that configuration rarely needs to be changed, so it's in practice useless, and just a waste of time (and effort) during the development.&lt;br /&gt;&lt;br /&gt;If your application, as usually, has a main layout, and only few pages adopt a specific layout, I think there could be an easy and pleasant solution.&lt;br /&gt;&lt;br /&gt;I defined a new view class (&lt;a href="http://code.google.com/p/parancoe/source/browse/trunk/plugins/parancoe-plugin-tiles/src/main/java/org/parancoe/plugin/tiles/CheapTilesView.java"&gt;CheapTilesView&lt;/a&gt;) that can be used with an UrlBasedViewResolver:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;&amp;lt;bean id="viewResolver"&lt;br /&gt;        class="org.springframework.web.servlet.view.UrlBasedViewResolver"&amp;gt;&lt;br /&gt;    &amp;lt;property name="viewClass" value="org.parancoe.plugin.tiles.CheapTilesView"/&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now the Tiles configuration file could be simply:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE tiles-definitions PUBLIC&lt;br /&gt;       "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"&lt;br /&gt;       "http://tiles.apache.org/dtds/tiles-config_2_0.dtd"&amp;gt;&lt;br /&gt;&amp;lt;tiles-definitions&amp;gt;&lt;br /&gt;    &amp;lt;definition name="template.main" template="/WEB-INF/tiles/templates/main.jsp"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="header" value="/WEB-INF/jsp/header.jsp"/&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="menu" value="/WEB-INF/jsp/menu.jsp"/&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="footer" value="/WEB-INF/jsp/footer.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;        &lt;br /&gt;&amp;lt;/tiles-definitions&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;(compare with the configuration of the &lt;a href="http://benfante.blogspot.com/2008/12/using-tiles-2-in-prancoe-project.html"&gt;previous post&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;All the omitted definitions are automatically created at runtime using the URL. For example, if the URL is &lt;code&gt;admin/conf&lt;/code&gt; and a definition with that name doesn't already exist in your configuration file, the &lt;code&gt;CheapTilesView&lt;/code&gt; class will generate (at runtime) this for you:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;&amp;lt;definition name="admin/conf" extends="template.main"&amp;gt;&lt;br /&gt;    &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/admin/conf.jsp"/&amp;gt;&lt;br /&gt;&amp;lt;/definition&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So in you configuration file you only need to write the definitions of your (usually few) pages with a specific layout.&lt;br /&gt;&lt;br /&gt;The conventions used by the &lt;code&gt;CheapTilesView&lt;/code&gt; can be customized passing some attributes to the view resolver. The following are the default values:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;&amp;lt;bean id="viewResolver"&lt;br /&gt;        class="org.springframework.web.servlet.view.UrlBasedViewResolver"&amp;gt;&lt;br /&gt;    &amp;lt;property name="viewClass" value="org.parancoe.plugin.tiles.CheapTilesView"/&amp;gt;&lt;br /&gt;    &amp;lt;property name="attributesMap"&amp;gt;&lt;br /&gt;        &amp;lt;map&amp;gt;&lt;br /&gt;            &amp;lt;entry key="org.parancoe.plugin.tiles.CheapTilesView.DEFAULT_TEMPLATE" value="template.main"/&amp;gt;&lt;br /&gt;            &amp;lt;entry key="org.parancoe.plugin.tiles.CheapTilesView.DEFAULT_ATTRIBUTES" value="main"/&amp;gt;&lt;br /&gt;            &amp;lt;entry key="org.parancoe.plugin.tiles.CheapTilesView.DEFAULT_PREFIX" value="/WEB-INF/jsp/"/&amp;gt;&lt;br /&gt;            &amp;lt;entry key="org.parancoe.plugin.tiles.CheapTilesView.DEFAULT_SUFFIX" value=".jsp"/&amp;gt;&lt;br /&gt;        &amp;lt;/map&amp;gt;&lt;br /&gt;    &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The class is available in the &lt;a href="http://code.google.com/p/parancoe/source/browse/trunk/plugins/parancoe-plugin-tiles/src/main/java/org/parancoe/plugin/tiles/CheapTilesView.java"&gt;Parancoe svn repository&lt;/a&gt;. Very soon it will be released as a Parancoe plugin. Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-343893418044179025?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/343893418044179025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=343893418044179025' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/343893418044179025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/343893418044179025'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2009/01/tiles-2-cheaper-configuration.html' title='Tiles 2, a cheaper configuration'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-7653968830023729350</id><published>2008-12-30T08:34:00.005+01:00</published><updated>2009-01-08T11:34:50.861+01:00</updated><title type='text'>JavaDay 2009 a Roma</title><content type='html'>Il giorno 24 Gennaio 2009 parteciperò al &lt;a href="http://roma.javaday.it"&gt;JavaDay 2009 a Roma&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Se ti interessa fare due chiacchiere a proposito dei prossimi sviluppi di &lt;a href="http://www.parancoe.org"&gt;Parancoe&lt;/a&gt;, &lt;a href="http://www.scarabocio.net"&gt;Scarabocio&lt;/a&gt; o &lt;a href="http://code.google.com/p/jslideshare/"&gt;JSlideShare&lt;/a&gt;, contattami durante la &lt;a href="http://roma.javaday.it/javaday2009/programma-javaday-talk-seminari-orario.htm#benfante"&gt;mia presentazione&lt;/a&gt; sull'uso dei controller annotati in Spring 2.5, o &lt;a href="mailto:lucio@benfante.com"&gt;mandami una mail&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://roma.javaday.it/"&gt; &lt;br /&gt;&lt;img src="http://roma.javaday.it/javaday2009/images/banner/Javaday_468_60.gif" alt="Javaday Roma III Edizione" /&gt; &lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Se vi interessa fare il viaggio insieme o cenare assieme la sera antecedente al JavaDay, trovate le informazioni qui: &lt;a href="http://javadayroma.wikispaces.com/Treno"&gt;http://javadayroma.wikispaces.com/Treno&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-7653968830023729350?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/7653968830023729350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=7653968830023729350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/7653968830023729350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/7653968830023729350'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2008/12/javaday-2009-roma.html' title='JavaDay 2009 a Roma'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-7760784182106347742</id><published>2008-12-11T21:55:00.022+01:00</published><updated>2009-08-28T06:11:16.344+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Parancoe'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='Tiles'/><title type='text'>Using Tiles 2 in a Prancoe project</title><content type='html'>First of all add the Tiles dependency to your &lt;code&gt;pom.xml&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;    &amp;lt;groupId&amp;gt;org.apache.tiles&amp;lt;/groupId&amp;gt;&lt;br /&gt;    &amp;lt;artifactId&amp;gt;tiles-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;    &amp;lt;version&amp;gt;2.1.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;    &amp;lt;groupId&amp;gt;org.apache.tiles&amp;lt;/groupId&amp;gt;&lt;br /&gt;    &amp;lt;artifactId&amp;gt;tiles-jsp&amp;lt;/artifactId&amp;gt;&lt;br /&gt;    &amp;lt;version&amp;gt;2.1.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Specify the places of the Tiles configurations and the Tiles view resolver in your &lt;code&gt;parancoe-servlet.xml&lt;/code&gt; file:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;&amp;lt;bean id="tilesConfigurer"&lt;br /&gt;       class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"&amp;gt;&lt;br /&gt;    &amp;lt;property name="definitions"&amp;gt;&lt;br /&gt;        &amp;lt;list&amp;gt;&lt;br /&gt;            &amp;lt;value&amp;gt;/WEB-INF/tiles/defs/default.xml&amp;lt;/value&amp;gt;&lt;br /&gt;        &amp;lt;/list&amp;gt;&lt;br /&gt;    &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;bean id="viewResolver"&lt;br /&gt;        class="org.springframework.web.servlet.view.UrlBasedViewResolver"&amp;gt;&lt;br /&gt;    &amp;lt;property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/&amp;gt;&lt;br /&gt;    &amp;lt;!-- Default values for prefix and suffix&lt;br /&gt;      &amp;lt;property name="prefix" value="/WEB-INF/jsp/"/&amp;gt;&lt;br /&gt;      &amp;lt;property name="suffix" value=".jsp"/&amp;gt;&lt;br /&gt;    --&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Add the &lt;code&gt;/WEB-INF/tiles/defs/default.xml&lt;/code&gt; file with the definitions of your views:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE tiles-definitions PUBLIC&lt;br /&gt;       "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"&lt;br /&gt;       "http://tiles.apache.org/dtds/tiles-config_2_0.dtd"&amp;gt;&lt;br /&gt;&amp;lt;tiles-definitions&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;definition name="template.main" template="/WEB-INF/tiles/templates/main.jsp"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="header" value="/WEB-INF/jsp/header.jsp"/&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="menu" value="/WEB-INF/jsp/menu.jsp"/&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="footer" value="/WEB-INF/jsp/footer.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;&lt;br /&gt;        &lt;br /&gt;    &amp;lt;definition name="login" extends="template.main"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/login.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;definition name="admin/conf" extends="template.main"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/admin/conf.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;definition name="admin/index" extends="template.main"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/admin/index.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;definition name="admin/logs" extends="template.main"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/admin/logs.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;definition name="admin/spring" extends="template.main"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/admin/spring.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;definition name="admin/users/list" extends="template.main"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/admin/users/list.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;definition name="admin/users/edit" extends="template.main"&gt;&lt;br /&gt;        &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/admin/users/edit.jsp"/&gt;&lt;br /&gt;    &amp;lt;/definition&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;definition name="message" extends="template.main"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/message.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;definition name="genericError" extends="template.main"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/genericError.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;definition name="accessDenied" extends="template.main"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/accessDenied.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;definition name="welcome" extends="template.main"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/welcome.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;definition name="404" extends="template.main"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/404.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;definition name="500" extends="template.main"&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name="main" value="/WEB-INF/jsp/500.jsp"/&amp;gt;&lt;br /&gt;    &amp;lt;/definition&amp;gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;/tiles-definitions&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Add the template in &lt;code&gt;/WEB-INF/tiles/templates/main.jsp&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="html:nogutter"&gt;&lt;br /&gt;&amp;lt;%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %&amp;gt;&lt;br /&gt;&amp;lt;%@ include file="/WEB-INF/jsp/common.jspf" %&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br /&gt;    &amp;lt;head&amp;gt;&lt;br /&gt;        &amp;lt;%@ include file="/WEB-INF/jsp/head.jspf" %&amp;gt;&lt;br /&gt;    &amp;lt;/head&amp;gt;&lt;br /&gt;    &amp;lt;body&amp;gt;&lt;br /&gt;        &amp;lt;div id="nonFooter"&amp;gt;&lt;br /&gt;            &amp;lt;tiles:insertAttribute name="header"/&amp;gt;&lt;br /&gt;            &amp;lt;div id="content"&amp;gt;&lt;br /&gt;                &amp;lt;div id="content_main"&amp;gt;&lt;br /&gt;                    &amp;lt;tiles:insertAttribute name="main"/&amp;gt;&lt;br /&gt;                &amp;lt;/div&amp;gt;&lt;br /&gt;                &amp;lt;tiles:insertAttribute name="menu"/&amp;gt;&lt;br /&gt;            &amp;lt;/div&amp;gt;&lt;br /&gt;        &amp;lt;/div&amp;gt;&lt;br /&gt;        &amp;lt;tiles:insertAttribute name="footer"/&amp;gt;&lt;br /&gt;    &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now You can simplify your JSP pages, removing from them all the layout-related parts. For example the welcome page (&lt;code&gt;/WEB-INF/jsp/welcome.jsp&lt;/code&gt;) was:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;&amp;lt;%@ include file="common.jspf" %&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br /&gt;    &amp;lt;head&amp;gt;&lt;br /&gt;        &amp;lt;%@ include file="head.jspf" %&amp;gt;&lt;br /&gt;    &amp;lt;/head&amp;gt;&lt;br /&gt;    &amp;lt;body&amp;gt;&lt;br /&gt;        &amp;lt;div id="nonFooter"&amp;gt;            &lt;br /&gt;            &amp;lt;jsp:include page="header.jsp"/&amp;gt;&lt;br /&gt;            &amp;lt;div id="content"&amp;gt; &lt;br /&gt;                &amp;lt;div id="content_main"&amp;gt;&lt;br /&gt;                    &amp;lt;c:choose&amp;gt;&lt;br /&gt;                        &amp;lt;c:when test="${requestScope.lang eq 'it'}"&amp;gt;&lt;br /&gt;                            Questa &amp;egrave; l'applicazione template per il framework&lt;br /&gt;                            &amp;lt;a href="http://wwww.parancoe.org"&amp;gt;Parancoe&amp;lt;/a&amp;gt;.&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                            &amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                            Da questo punto di partenza puoi iniziare a costruire la&lt;br /&gt;                            tua nuova applicazione, sfruttando tutti i benefici che&lt;br /&gt;                            derivano dall'uso di Parancoe.&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                            &amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                            Per maggiori informazioni visita il sito di Parancoe:&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                            &amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                            &amp;lt;a href="http://wwww.parancoe.org"&amp;gt;http://wwww.parancoe.org&amp;lt;/a&amp;gt;.&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                        &amp;lt;/c:when&amp;gt;&lt;br /&gt;                        &amp;lt;c:otherwise&amp;gt;&lt;br /&gt;                            This is the template application of the&lt;br /&gt;                            &amp;lt;a href="http://wwww.parancoe.org"&amp;gt;Parancoe&amp;lt;/a&amp;gt; framework.&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                            &amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                            From this starting point you can build your own application,&lt;br /&gt;                            with all benefits of the using of the Parancoe Framework.&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                            &amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                            For more infos, visit the Parancoe framework Web site:&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                            &amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                            &amp;lt;a href="http://wwww.parancoe.org"&amp;gt;http://wwww.parancoe.org&amp;lt;/a&amp;gt;.&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;                        &amp;lt;/c:otherwise&amp;gt;&lt;br /&gt;                    &amp;lt;/c:choose&amp;gt;&lt;br /&gt;                &amp;lt;/div&amp;gt;&lt;br /&gt;                &amp;lt;jsp:include page="menu.jsp"/&amp;gt;&lt;br /&gt;            &amp;lt;/div&amp;gt;&lt;br /&gt;        &amp;lt;/div&amp;gt;&lt;br /&gt;        &amp;lt;jsp:include page="footer.jsp"/&amp;gt;        &lt;br /&gt;    &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now it's just:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;&amp;lt;%@ include file="/WEB-INF/jsp/common.jspf" %&amp;gt;&lt;br /&gt;&amp;lt;c:choose&amp;gt;&lt;br /&gt;    &amp;lt;c:when test="${requestScope.lang eq 'it'}"&amp;gt;&lt;br /&gt;        Questa &amp;egrave; l'applicazione template per il framework&lt;br /&gt;        &amp;lt;a href="http://wwww.parancoe.org"&amp;gt;Parancoe&amp;lt;/a&amp;gt;.&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;        &amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;        Da questo punto di partenza puoi iniziare a costruire la&lt;br /&gt;        tua nuova applicazione, sfruttando tutti i benefici che&lt;br /&gt;        derivano dall'uso di Parancoe.&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;        &amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;        Per maggiori informazioni visita il sito di Parancoe:&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;        &amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;        &amp;lt;a href="http://wwww.parancoe.org"&amp;gt;http://wwww.parancoe.org&amp;lt;/a&amp;gt;.&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;    &amp;lt;/c:when&amp;gt;&lt;br /&gt;    &amp;lt;c:otherwise&amp;gt;&lt;br /&gt;        This is the template application of the&lt;br /&gt;        &amp;lt;a href="http://wwww.parancoe.org"&amp;gt;Parancoe&amp;lt;/a&amp;gt; framework.&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;        &amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;        From this starting point you can build your own application,&lt;br /&gt;        with all benefits of the using of the Parancoe Framework.&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;        &amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;        For more infos, visit the Parancoe framework Web site:&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;        &amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;        &amp;lt;a href="http://wwww.parancoe.org"&amp;gt;http://wwww.parancoe.org&amp;lt;/a&amp;gt;.&amp;lt;br&amp;nbsp;/&amp;gt;&lt;br /&gt;    &amp;lt;/c:otherwise&amp;gt;&lt;br /&gt;&amp;lt;/c:choose&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-7760784182106347742?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/7760784182106347742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=7760784182106347742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/7760784182106347742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/7760784182106347742'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2008/12/using-tiles-2-in-prancoe-project.html' title='Using Tiles 2 in a Prancoe project'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-1855669187881742743</id><published>2008-11-13T17:10:00.018+01:00</published><updated>2008-11-26T07:43:09.797+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Parancoe'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='DWR'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><title type='text'>Building an AJAX chat with Parancoe and DWR</title><content type='html'>The AJAX integration through DWR 3 is not the main feature in Parancoe, but it's easy and funny. Let's see how simple is building a Web chat.&lt;br /&gt;&lt;br /&gt;Starting from a project generated with Maven using the Parancoe Web Archetype, you need to add the Parancoe DWR Plugin to the dependencies in your &lt;code&gt;pom.xml&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;   &amp;lt;groupId&amp;gt;org.parancoe&amp;lt;/groupId&amp;gt;&lt;br /&gt;   &amp;lt;artifactId&amp;gt;parancoe-plugin-dwr&amp;lt;/artifactId&amp;gt;&lt;br /&gt;   &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then add the &lt;code&gt;/dwr/*&lt;/code&gt; pattern to the mapping of the parancoe servlet in your &lt;code&gt;web.xml&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Now DWR is ready to be used in your application. You check it building and deploying your application, and pointing your browser to &lt;code&gt;&amp;lt;your_base_address&amp;gt;/dwr/index.html&lt;/code&gt;. You should see the DWR Test Page.&lt;br /&gt;&lt;br /&gt;Then add a class with methods (a single method in this example) that will be invoked through AJAX:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;package com.mycompany.testapp.ajax;&lt;br /&gt;&lt;br /&gt;import org.directwebremoting.Browser;&lt;br /&gt;import org.directwebremoting.annotations.RemoteMethod;&lt;br /&gt;import org.directwebremoting.annotations.RemoteProxy;&lt;br /&gt;import org.directwebremoting.ui.dwr.Util;&lt;br /&gt;import org.springframework.stereotype.Component;&lt;br /&gt;&lt;br /&gt;@Component&lt;br /&gt;@RemoteProxy(name = "chat")&lt;br /&gt;public class Chat {&lt;br /&gt;&lt;br /&gt;   @RemoteMethod&lt;br /&gt;   public void send(final String nickname, final String message) {&lt;br /&gt;       Browser.withCurrentPage(new Runnable() {&lt;br /&gt;           public void run() {&lt;br /&gt;               Util.addRows("chatLog", new String[][]{{nickname, message}});&lt;br /&gt;           }&lt;br /&gt;       });&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Simple, isn't it? ...but powerful. When invoked that method will add a row to the table with id &lt;code&gt;chatLog&lt;/code&gt;, in all browsers that are visualizing that page.&lt;br /&gt;&lt;br /&gt;Let's see the page &lt;code&gt;chat.jsp&lt;/code&gt; in which that method is invoked:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="html:nogutter"&gt;&lt;br /&gt;&amp;lt;%@ include file="WEB-INF/jsp/common.jspf" %&gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br /&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;   &amp;lt;head&amp;gt;&lt;br /&gt;       &amp;lt;%@ include file="WEB-INF/jsp/head.jspf" %&amp;gt;&lt;br /&gt;       &amp;lt;script src="${cp}/dwr/interface/chat.js" type="text/javascript"/&amp;gt;&lt;br /&gt;       &amp;lt;script src="${cp}/dwr/engine.js" type="text/javascript" /&amp;gt;&lt;br /&gt;       &amp;lt;script src="${cp}/dwr/util.js" type="text/javascript" /&amp;gt;&lt;br /&gt;       &amp;lt;title&gt;Parancoe DWR chat&amp;lt;/title&amp;gt;&lt;br /&gt;   &amp;lt;/head&amp;gt;&lt;br /&gt;   &amp;lt;body&amp;gt;&lt;br /&gt;       &amp;lt;h1&amp;gt;DWR Chat&amp;lt;/h1&amp;gt;&lt;br /&gt;      &lt;br /&gt;       &amp;lt;table id="chatLog"&amp;gt;&lt;br /&gt;           &amp;lt;thead&amp;gt;&lt;br /&gt;               &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Nickname&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Message&amp;lt;/th&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;           &amp;lt;/thead&amp;gt;&lt;br /&gt;           &amp;lt;tbody&amp;gt; &amp;lt;/tbody&amp;gt;&lt;br /&gt;       &amp;lt;/table&amp;gt;&lt;br /&gt;      &lt;br /&gt;       &amp;lt;form id="chatForm" method="post" action="/sendMessage"&amp;gt;&lt;br /&gt;           Nickname: &amp;lt;input id="nickname" type="text" /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;           Say: &amp;lt;input id="say" type="text" /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;           &amp;lt;input type="submit"&amp;gt;&lt;br /&gt;       &amp;lt;/form&amp;gt;&lt;br /&gt;              &lt;br /&gt;       &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;           function bindUI() {&lt;br /&gt;               $('chatForm').observe('submit', chatSubmit);&lt;br /&gt;           }&lt;br /&gt;  &lt;br /&gt;           function chatSubmit(event) {&lt;br /&gt;               event.stop();&lt;br /&gt;               chat.send($F('nickname'), $F('say'));&lt;br /&gt;           }&lt;br /&gt;  &lt;br /&gt;           dwr.engine.setActiveReverseAjax(true);&lt;br /&gt;           document.observe('dom:loaded', bindUI);&lt;br /&gt;       &amp;lt;/script&amp;gt;&lt;br /&gt;   &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In your &lt;code&gt;parancoe-servlet.xml&lt;/code&gt; file add the following configuration for enabling the active reverse AJAX in DWR:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml:nogutter"&gt;&lt;br /&gt;&lt;dwr:controller id="dwrController" debug="true"&gt;&lt;br /&gt;   &lt;dwr:config-param name="activeReverseAjaxEnabled" value="true"/&gt;&lt;br /&gt;&lt;/dwr:controller&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Build and deploy your application. Open multiple windows of your browser(s) to &lt;code&gt;&amp;lt;your_base_address&amp;gt;/chat.jsp&lt;/code&gt;, and start chatting:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mM6WdBCBN20/SR55p21ah0I/AAAAAAAAAS4/L871-ciksTM/s1600-h/dwrchat.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 230px;" src="http://2.bp.blogspot.com/_mM6WdBCBN20/SR55p21ah0I/AAAAAAAAAS4/L871-ciksTM/s400/dwrchat.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5268782374071207746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Have fun with Parancoe!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-1855669187881742743?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/1855669187881742743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=1855669187881742743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/1855669187881742743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/1855669187881742743'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2008/11/building-ajax-chat-with-parancoe-and.html' title='Building an AJAX chat with Parancoe and DWR'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_mM6WdBCBN20/SR55p21ah0I/AAAAAAAAAS4/L871-ciksTM/s72-c/dwrchat.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-7705359792384926422</id><published>2008-11-08T07:00:00.006+01:00</published><updated>2008-11-09T16:00:51.614+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programmazione'/><category scheme='http://www.blogger.com/atom/ns#' term='Parancoe'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Parancoe 2.0</title><content type='html'>Last week the &lt;a href="http://www.parancoe.org/team"&gt;Parancoe Team&lt;/a&gt; (me and other smart people :) ) released the version 2.0 of the &lt;a href="http://www.parancoe.org"&gt;Parancoe meta-framework&lt;/a&gt;. With this release Parancoe achieved a great level of maturity.&lt;br /&gt;&lt;br /&gt;In the next weeks, starting with this post, I will demonstrate how easy and &lt;span style="font-weight:bold;"&gt;pleasant&lt;/span&gt; is to develop applications with Parancoe.&lt;br /&gt;&lt;br /&gt;First demonstration! :) How difficult is to start a new project with Parancoe? No difficult at all. Install Maven and type the following command:&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;mvn archetype:create -DarchetypeGroupId=org.parancoe \&lt;br /&gt;    -DarchetypeArtifactId=parancoe-webarchetype \&lt;br /&gt;    -DarchetypeVersion=2.0.1 \&lt;br /&gt;    -DgroupId=com.mycompany \&lt;br /&gt;    -DartifactId=testApp \&lt;br /&gt;    -DpackageName=com.mycompany.testapp&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It will generate a new complete project ready for your next development. I repeat, &lt;span style="font-weight:bold;"&gt;complete&lt;/span&gt;, the new application is already working, you can build and deploy it on your application server and use it. You'll see a simple layout, administrative tasks, debug information in page (when deployed in development mode), user authentication and authorization, user management.&lt;br /&gt;&lt;br /&gt;With &lt;a href="http://www.netbeans.org"&gt;a good IDE&lt;/a&gt; :) the start-up task is even easier. Watch &lt;a href="http://benfante.blogspot.com/2008/03/start-new-web-project-with-parancoe-web.html"&gt;this my previous, still valid, screen-cast&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Don't miss to read the new &lt;span style="font-weight:bold;"&gt;Parancoe Reference Guide&lt;/span&gt;, both in &lt;a href="http://docs.parancoe.org/reference/html/parancoe-reference-guide.html"&gt;HTML&lt;/a&gt; and in &lt;a href="http://docs.parancoe.org/reference/pdf/parancoe-reference-guide.pdf"&gt;PDF&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-7705359792384926422?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/7705359792384926422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=7705359792384926422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/7705359792384926422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/7705359792384926422'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2008/11/parancoe-20.html' title='Parancoe 2.0'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-3862710942619135393</id><published>2008-07-21T07:27:00.028+02:00</published><updated>2008-09-08T08:05:49.197+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='decrypt'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>PDF Unencrypting</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Updated 07/29/2008:&lt;/span&gt; added the copy of the bookmarks (index) from the original document.&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;Usually, when you buy a PDF book, it's encrypted and protected by a password. No problem, I agree with authors and publishers that need to protect their work, even if this technique is a very poor protection.&lt;br /&gt;&lt;br /&gt;Unfortunately usually some portable readers, like &lt;a href="http://benfante.blogspot.com/2008/07/reading-pdfs-on-prs-505.html"&gt;my PRS-505&lt;/a&gt;, don't have encryption/password support, so you can't upload those PDFs on them.&lt;br /&gt;&lt;br /&gt;So you need to unencrypt the PDF for reading it on the device, a perfectly legal operation if you legally bought the book.&lt;br /&gt;&lt;br /&gt;The easiest way to unencrypt a PDF should be to use the &lt;a href="http://www.accesspdf.com/pdftk/"&gt;pdftk&lt;/a&gt; command line tool:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;pdftk abook.pdf input_pw your_password_here output abook_unencrypted.pdf&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Unfortunately it always emits this error:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Error: Failed to open PDF file:&lt;br /&gt; abook.pdf&lt;br /&gt; OWNER PASSWORD REQUIRED, but not given (or incorrect)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Of course the password was correct and I tried with different combinations of input/owner/user password parameters. I think it's a bug of pdftk (version 1.41).&lt;br /&gt;&lt;br /&gt;So I wrote a small Java program for unecrypting my files:&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;import com.lowagie.text.Document;&lt;br /&gt;import com.lowagie.text.DocumentException;&lt;br /&gt;import com.lowagie.text.pdf.PdfCopy;&lt;br /&gt;import com.lowagie.text.pdf.PdfImportedPage;&lt;br /&gt;import com.lowagie.text.pdf.PdfReader;&lt;br /&gt;import com.lowagie.text.pdf.SimpleBookmark;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;&lt;br /&gt;public class Unencrypt {&lt;br /&gt;  public static void main( String[] args )&lt;br /&gt;      throws IOException, DocumentException {&lt;br /&gt;    String inFile = args[0];&lt;br /&gt;    String outFile = args[1];&lt;br /&gt;    String password = args[2];&lt;br /&gt;    PdfReader pdfReader = new PdfReader(inFile, password.getBytes());&lt;br /&gt;    Document document = new Document();&lt;br /&gt;    PdfCopy copy = new PdfCopy(document, new FileOutputStream(outFile));&lt;br /&gt;    document.open();&lt;br /&gt;    for (int i = 1; i &lt;= pdfReader.getNumberOfPages(); i++) {&lt;br /&gt;      PdfImportedPage importedPage = copy.getImportedPage(pdfReader, i);&lt;br /&gt;      copy.addPage(importedPage);&lt;br /&gt;    }&lt;br /&gt;    copy.setOutlines(SimpleBookmark.getBookmark(pdfReader));&lt;br /&gt;    document.close();&lt;br /&gt;    pdfReader.close();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;For executing it, download &lt;a href="http://snipurl.com/bpdfjar"&gt;this file&lt;/a&gt;, and type:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;java -cp bpdf.jar com.benfante.bpdf.Unencrypt \&lt;br /&gt;  abook.pdf abook_unencrypted.pdf             \&lt;br /&gt;  your_password_here&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;*WARNING*:&lt;/span&gt; I'm not responsible of the use you can do of this code. It's not intended as a tool for infringing copyrights, just for reading PDFs you legally owns on devices that don't support encrypting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-3862710942619135393?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/3862710942619135393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=3862710942619135393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/3862710942619135393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/3862710942619135393'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2008/07/pdf-unencrypting.html' title='PDF Unencrypting'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-1719941861452623355</id><published>2008-07-18T12:40:00.013+02:00</published><updated>2008-08-14T08:03:30.105+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thinking'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Pattern matching</title><content type='html'>Lo so, è un oszvnrioseae baanle, ma sepsso il nstoro celvelro fiouznna mtolo mliego di qlsaauisi cotemupr. Ad emspeio, a meno che il vrosto clevlreo non aibba qlachue pomeblra, dsvtoere eesrse peatentertfme in gdaro di lrggeee qeusto tteso, anhce se le lrtetee dllee plraoe, a parte la pirma e l'ulmita, snoo sttae messe alla rnfiusa. Quetso adcace perhcè qnaduo lgeaimgo in rtlaeà non psatemiro aioetntzne alle sngiole ltrteee, ma alla porala nel suo clspemoso.&lt;br /&gt;&lt;br /&gt;Se volete giocare a ricombinare le parole di vostri testi, provate questo piccolo programmino che ho scritto:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;script src="http://java.com/js/deployJava.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script&gt;var url="http://snipurl.com/wordscrambler"; deployJava.createWebStartLaunchButton(url, "1.6");&lt;/script&gt;&lt;/div&gt;&lt;br /&gt;Scarica &lt;a href="http://snipurl.com/wordscramblersrc"&gt;questo file&lt;/a&gt; se vuoi dare un'occhiata ai sorgenti (rilasciati sotto &lt;a href="http://www.apache.org/licenses/LICENSE-2.0"&gt;Apache License, Version 2.0&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pragprog.com/titles/ahptl/pragmatic-thinking-and-learning"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 120px;" src="http://www.pragprog.com/images/covers/120x144/betas/ahptl.jpg" border="0" alt="" /&gt;&lt;/a&gt;Questa e molte altre informazioni, e alcuni suggerimenti di miglioramento delle proprie capacità di apprendimento, le potete trovare in un interessante libro che sto leggendo: &lt;a href="http://pragprog.com/titles/ahptl"&gt;"Pragmatic Thinking and Learning"&lt;/a&gt; di Andy Hunt.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update 08-14-2008:&lt;/span&gt; I just finished to read this book, of course on &lt;a href="http://benfante.blogspot.com/2008/07/reading-pdfs-on-prs-505.html"&gt;my PRS-505&lt;/a&gt;. It's a great book, a must-to-read if you need to be a continuous learner. And if you are in the IT business, of course you need to be. I'm a self-employed, mostly home-based, consultant and developer: the "Manage Focus" chapter is illuminating, and very helpful for trying to enhance the productivity of my work environment. In general the book is perfect for acquiring consciousness of your learning paths and deficiencies, with a lot of good tips for improving yourself. What I bought from the book? At present, I started writing "Morning Pages"; I already have a two monitor desktop, and as a Linux user I'm already used to virtual desktop; limiting "down" time and being conscious of it; caring of distractions; trying a better deliberate reading and acquiring of information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-1719941861452623355?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/1719941861452623355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=1719941861452623355' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/1719941861452623355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/1719941861452623355'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2008/07/pattern-matching.html' title='Pattern matching'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-3740383132447727408</id><published>2008-07-08T16:36:00.009+02:00</published><updated>2008-07-31T19:31:51.459+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF'/><category scheme='http://www.blogger.com/atom/ns#' term='LRF'/><category scheme='http://www.blogger.com/atom/ns#' term='PRS-505'/><title type='text'>Reading PDFs on a PRS-505</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Update 07/28/2008:&lt;/span&gt; maybe the conversion PDF to LRF is obsolete on the PRS-505. With &lt;a href="http://esupport.sony.com/US/perl/swu-download.pl?mdl=PRS505&amp;upd_id=3622&amp;os_id=7"&gt;this firmware update&lt;/a&gt; the PDFs are rendered much much better (but still not better than the following conversion).&lt;br /&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;br /&gt;Since some months I'm an happy user of a &lt;a href="http://www.sonystyle.com/webapp/wcs/stores/servlet/ProductDisplay?catalogId=10551&amp;amp;storeId=10151&amp;amp;langId=-1&amp;amp;productId=8198552921665245740"&gt;Sony Portable Reader System (PRS-505)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/benfante/2649132739/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://farm4.static.flickr.com/3045/2649132739_7caf0e190d.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It's a fantastic device, and actually I can comfortably read digital articles and books, instead of burning my eyes in front of a lightly monitor.&lt;br /&gt;&lt;br /&gt;I can even use it with Linux, thanks to &lt;a href="http://calibre.kovidgoyal.net/"&gt;Calibre&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The PRS-505 can natively read PDF files, but the rendering is not always appropriate, and it's very difficult to read long text without headaches. So, I usually convert them from PDF to LRF.&lt;br /&gt;&lt;br /&gt;Look at the result. On the left the original PDF. On the right the same page in the resulting LRF.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/benfante/2649965112/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://farm4.static.flickr.com/3254/2649965112_e7f826f5f4_b.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The conversion is very easy. You mainly need &lt;a href="http://www.ghostscript.com"&gt;Ghostscript&lt;/a&gt;, for embedding all fonts in the PDF, and the &lt;a href="http://www.mobileread.com/forums/showthread.php?t=13135"&gt;pdflrf&lt;/a&gt; converter.&lt;br /&gt;&lt;br /&gt;I wrote a simple script for easily run them with the correct parameters:&lt;br /&gt;&lt;pre name="code" class="ruby"&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;# pdflrf_converter.sh by Lucio Benfante&lt;br /&gt;&lt;br /&gt;gs -dSAFER -dNOPLATFONTS -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \&lt;br /&gt;    -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer          \&lt;br /&gt;    -dCompatibilityLevel=1.4 -dMaxSubsetPct=100              \&lt;br /&gt;    -dSubsetFonts=true -dEmbedAllFonts=true                  \&lt;br /&gt;    -sOutputFile=$1.embedding -f $1&lt;br /&gt;&lt;br /&gt;pdflrf -r --rotation="0" --colors=8 -i $1.embedding -o $1.lrf &lt;br /&gt;&lt;br /&gt;rm $1.embedding&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Launch it with passing your PDF file as its single parameter:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;pdflrf_converter.sh myBook.pdf&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Please let me know if it's useful for you, or if you could find a better set of parameters for gs/pdflrf.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-3740383132447727408?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/3740383132447727408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=3740383132447727408' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/3740383132447727408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/3740383132447727408'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2008/07/reading-pdfs-on-prs-505.html' title='Reading PDFs on a PRS-505'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3045/2649132739_7caf0e190d_t.jpg' height='72' width='72'/><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-5234659920950743332</id><published>2008-03-20T08:08:00.000+01:00</published><updated>2008-03-20T12:29:25.916+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Screencast'/><category scheme='http://www.blogger.com/atom/ns#' term='Parancoe'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Start a new Web project with the Parancoe Web meta-framework and NetBeans 6.1</title><content type='html'>Starting new Web project using the &lt;a href="http://www.parancoe.org/"&gt;Parancoe&lt;/a&gt; meta-framework is very easy and fast. Even more if you are using a good IDE. Watch at this screencast, in which I create a new project with Parancoe and &lt;a href="http://www.netbeans.org/"&gt;NetBeans 6.1&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object type="application/x-shockwave-flash" id="FlowPlayer" data="http://www.archive.org/flv/FlowPlayerWhite.swf" height="263" width="320"&gt;&lt;br /&gt; &lt;param name="movie" value="http://www.archive.org/flv/FlowPlayerWhite.swf"&gt;&lt;br /&gt; &lt;param name="scale" value="noScale"&gt;&lt;br /&gt; &lt;param name="wmode" value="transparent"&gt;&lt;br /&gt; &lt;param name="allowScriptAccess" value="sameDomain"&gt;&lt;br /&gt; &lt;param name="quality" value="high"&gt;&lt;br /&gt; &lt;param name="flashvars" value="config={loop: false, autoPlay:false, initialScale: 'fit', videoFile: 'http://www.archive.org/download/StartingANewWebProjectWithTheParancoeWebMeta-frameworkAndNetbeans6.1/StartAnApplicationWithParancoe.flv'}"&gt;&lt;br /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.archive.org/download/StartingANewWebProjectWithTheParancoeWebMeta-frameworkAndNetbeans6.1/StartAnApplicationWithParancoe.avi"&gt;Download&lt;/a&gt; the screen cast at the maximum resolution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-5234659920950743332?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/5234659920950743332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=5234659920950743332' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/5234659920950743332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/5234659920950743332'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2008/03/start-new-web-project-with-parancoe-web.html' title='Start a new Web project with the Parancoe Web meta-framework and NetBeans 6.1'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-4147420417304341525</id><published>2007-11-19T11:28:00.000+01:00</published><updated>2007-11-19T12:21:12.747+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><title type='text'>Next conferences</title><content type='html'>Lot of conferences I'll attend and present in this end-of-the-year.&lt;br /&gt;&lt;br /&gt;In chronological order:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;November 24, 2007: &lt;/span&gt;&lt;a href="http://www.javalab.it/javalab/index.jsp?action=goTo&amp;amp;pagina=javaday"&gt;JavaDay in Novara&lt;/a&gt;. Presentation: "Using DAOs without implementing them".&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;December 1, 2007: &lt;/span&gt;&lt;a href="http://roma.javaday.it/"&gt;JavaDay in Rome&lt;/a&gt;. Presentation: "Using DAOs without implementing them".&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;December 10-14, 2007: &lt;/span&gt;&lt;a href="http://www.javapolis.com/"&gt;JavaPolis '07&lt;/a&gt; in Antwerpen (Belgium). Two quickies: "&lt;a href="http://www.javapolis.com/confluence/display/JP07/Organize+your+events+with+JUG+Events"&gt;Organize your events with JUG Events&lt;/a&gt;" and "&lt;a href="http://www.javapolis.com/confluence/display/JP07/Remove+boilerplate+code+with+speaking+interfaces"&gt;Remove boilerplate code with speaking interfaces&lt;/a&gt;".&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;December 15, 2007:&lt;/span&gt; &lt;a href="http://www.jugevents.org/jugevents/event/show.html?id=389"&gt;JUG Padova Meeting #39&lt;/a&gt;. Presentation: "Report from JavaPolis"&lt;/li&gt;&lt;/ul&gt;I hope to meet you in at least one of them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-4147420417304341525?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/4147420417304341525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=4147420417304341525' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/4147420417304341525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/4147420417304341525'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2007/11/next-conferences.html' title='Next conferences'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-4855746741731990270</id><published>2007-10-15T06:47:00.003+02:00</published><updated>2008-08-01T04:42:04.469+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Parancoe'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaDay'/><title type='text'>JavaDay in Turin</title><content type='html'>Next Saturday I'll speak at the &lt;a href="http://javaday.jugtorino.it"&gt;JavaDay in Turin&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javaday.java2me.org/?q=it/node/2"&gt;My presentation&lt;/a&gt; will show that the following code can be a fully functional Data Access Object (DAO):&lt;br /&gt;&lt;textarea name="code" class="java:nogutter" cols="60" rows="10"&gt;&lt;br /&gt;@Dao(entity=Person.class)&lt;br /&gt;public interface PersonDao extends GenericDao&lt;Person, Long&gt; {&lt;br /&gt;  List&lt;Person&gt; findByLastName(String lastName);&lt;br /&gt;  List&lt;Person&gt; findByFirstNameAndLastName(String firstName, String lastName);&lt;br /&gt;  List&lt;Person&gt; findByBirthDate(Date birthDate);&lt;br /&gt;}&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;Note, not any other code or configuration to write, just that interface: NO code...NO bugs...more FUN! :)&lt;br /&gt;&lt;br /&gt;See you in Turin...&lt;br /&gt;&lt;br /&gt;(If you can't...look at the &lt;a href="http://www.parancoe.org"&gt;Parancoe site&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-4855746741731990270?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/4855746741731990270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=4855746741731990270' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/4855746741731990270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/4855746741731990270'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2007/10/javaday-in-turin.html' title='JavaDay in Turin'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-8882822942715106556</id><published>2007-09-03T16:55:00.002+02:00</published><updated>2008-09-08T08:12:44.439+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programmazione'/><category scheme='http://www.blogger.com/atom/ns#' term='Parancoe'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='JUG'/><title type='text'>JUG Events</title><content type='html'>Estate abbastanza produttiva...sole, mare, spiaggia, ombrellone...e sviluppo di &lt;a href="http://www.jugevents.org"&gt;JUG Events&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Cos'è &lt;a href="http://www.jugevents.org"&gt;JUG Events&lt;/a&gt;? E' soprattutto la scusa per sperimentare con &lt;a href="http://www.parancoe.org"&gt;Parancoe&lt;/a&gt;, quindi principalmente con Hibernate/JPA, Spring, Spring MVC e Maven. Ma anche con JCaptcha, JavaMail, Velocity, Plextile, e chi più ne ha, più ne metta.&lt;br /&gt;&lt;br /&gt;A parte la sperimentazione, che comunque ha portato nuove idee e sviluppo per &lt;a href="http://www.parancoe.org"&gt;Parancoe&lt;/a&gt;, l'applicazione può essere utile, quindi l'ho messa online a disposizione dei JUG che vorranno usarla:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jugevents.org"&gt;www.jugevents.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Se invece volete studiarne i sorgenti, li trovate nel &lt;a href="http://parancoe.googlecode.com/svn/trunk/examples/jugevents/"&gt;repository Subversion di Parancoe&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Aggiornamento:&lt;/span&gt; JUG Events ha ora un proprio progetto separato per lo sviluppo su Google Code. &lt;a href="http://jugevents.googlecode.com"&gt;jugevents.googlecode.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-8882822942715106556?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/8882822942715106556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=8882822942715106556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/8882822942715106556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/8882822942715106556'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2007/09/jug-events.html' title='JUG Events'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-9113972715150924399</id><published>2007-07-27T11:36:00.001+02:00</published><updated>2008-08-01T05:18:58.300+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programmazione'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Iterare il non iterabile in Java</title><content type='html'>Vi è mai capitato di avere un contenitore di oggetti, che però non sia implementato come Collection? A me purtroppo sì.&lt;br /&gt;&lt;br /&gt;Abbondanti esempi li si trova nella libreria XOM. In tale libreria, ad esempio, il metodo &lt;span style="font-family:courier new;"&gt;Element.getChildElements()&lt;/span&gt; restituisce un oggetto Elements, che non è una Collection, ma ha semplicemente i metodi &lt;span style="font-family:courier new;"&gt;get(index)&lt;/span&gt; e &lt;span style="font-family:courier new;"&gt;size()&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;L'unico modo per iterare sugli elementi in esso contenuti è scrivere qualcosa del genere:&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;for(int i=0; i &amp;lt; elements.size(); i++) {&lt;br /&gt;  Element element = elements.get(i);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Dato che non implementa l'interfaccia Iterable, ad esempio, non si può usare il comodo "enhanced for" del JDK 5 per scrivere:&lt;br /&gt;&lt;pre name="code" class="java:nogutter"&gt;&lt;br /&gt;for(Element element: elements) {&lt;br /&gt;  // etc...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Per superare tale problema ho scritto la classe Iterabletor, che aggiunge ad una qualunque classe l'interfaccia e le capacità di un Iterable. Si può quindi scrivere:&lt;br /&gt;&lt;textarea name="code" class="java:nogutter" cols="60" rows="10"&gt;&lt;br /&gt;Iterable&lt;Element&gt; iterable =&lt;br /&gt;  new Iterabletor&lt;Element&gt;(elements).getIterable();&lt;br /&gt;&lt;br /&gt;for (Element element: iterable) {&lt;br /&gt;  // etc...&lt;br /&gt;}&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;Potete scaricare tutto il codice dal &lt;a href="http://www.benfante.com/"&gt;mio sito&lt;/a&gt;, nella &lt;a href="http://www.benfante.com/bensite/sourcecode.jsf"&gt;mini-libreria Utilities&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Maggiori dettagli in &lt;a href="http://www.jugpadova.it/articles/2007/07/27/iterating-on-non-iterable-classes"&gt;questo post&lt;/a&gt; nel sito del &lt;a href="http://www.jugpadova.it/"&gt;JUG Padova&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-9113972715150924399?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/9113972715150924399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=9113972715150924399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/9113972715150924399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/9113972715150924399'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2007/07/iterare-il-non-iterabile-in-java.html' title='Iterare il non iterabile in Java'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-7606670449210350203</id><published>2007-07-26T08:38:00.000+02:00</published><updated>2007-07-27T11:59:54.857+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='exim'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><title type='text'>Exim4 relaying on mail.191.it</title><content type='html'>I'm NOT a sysman...but sometimes it happens.&lt;br /&gt;&lt;br /&gt;This post is mainly for my reminder, but I hope it could be useful to other people.&lt;br /&gt;&lt;br /&gt;The problem: I have an internal SMTP server (Exim4 on Debian) that must relay to an external smarthost (mail.191.it).&lt;br /&gt;&lt;br /&gt;Configure Exim4 as usual, for example typing:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# dpkg-reconfigure exim4-config&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For delivering mails to mail.191.it, your SMTP server have to act as SMTP AUTH client.&lt;br /&gt;&lt;br /&gt;You have to create &lt;span style="font-family:courier new;"&gt;/etc/exim4/passwd.client&lt;/span&gt; file, and put inside it your connection infos in the following format:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;target.mail.server:login:password&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Simple, isn'it? But not sufficient...&lt;br /&gt;&lt;br /&gt;mail.191.it (and, I think, many other smarthosts) doesn't support TLS encryption, so you have to enable AUTH PLAIN.&lt;br /&gt;&lt;br /&gt;Create (if you don't have yet) a &lt;span style="font-family:courier new;"&gt;/etc/exim4/conf.d/main/000_localmacros&lt;/span&gt; file, and write in it:&lt;br /&gt;&lt;br /&gt;AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS=yes&lt;br /&gt;&lt;br /&gt;Update the configuration:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# update-exim4.conf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;...and restart Exim4:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# /etc/init.d/exim4 restart&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Of course I'm using the splitted configuration schema. If you are using the non-splitted one, you need to modify the &lt;span style="font-family:courier new;"&gt;/etc/exim4/update-exim4.conf.conf&lt;/span&gt; or &lt;span style="font-family:courier new;"&gt;/etc/exim4/exim4.conf.template&lt;/span&gt; files.&lt;br /&gt;&lt;br /&gt;...remember...I'm NOT a sysman...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-7606670449210350203?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/7606670449210350203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=7606670449210350203' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/7606670449210350203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/7606670449210350203'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2007/07/exim4-relaying-on-mail191it.html' title='Exim4 relaying on mail.191.it'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-793476159477601331</id><published>2007-07-19T12:43:00.000+02:00</published><updated>2007-07-20T07:15:45.605+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Cagliari'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Spring Meeting 2007</title><content type='html'>Periodo intenso di conferenze. L'ultima a cui ho partecipato è stata a Cagliari, &lt;a href="http://www.jugsardegna.org/vqwiki/jsp/Wiki?14Luglio2007"&gt;Spring Framework Meeting 2007&lt;/a&gt;, organizzata dallo &lt;a href="http://it.groups.yahoo.com/group/SpringFramework-it/"&gt;Spring Framework Italian User Group&lt;/a&gt; in collaborazione con il &lt;a href="http://www.jugsardegna.it/"&gt;JUG Sardegna&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In quest'occasione ho presentato un seminario dal titolo &lt;a href="http://snipurl.com/sm2007"&gt;"Parancoe: usare i DAO senza implementarli"&lt;/a&gt;, in cui ho mostrato come con &lt;a href="http://www.parancoe.org/"&gt;Parancoe&lt;/a&gt;, che usa pesantemente lo &lt;a href="http://www.springframework.org/"&gt;Springframework&lt;/a&gt;, assieme ad &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;, si possa realizzare in pochissimo tempo e con pochissimo sforzo il layer di persistenza di una propria applicazione.&lt;br /&gt;&lt;br /&gt;Qui le trasparenze della mia presentazione: &lt;a href="http://snipurl.com/sm2007"&gt;http://snipurl.com/sm2007&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Al meeting, in veste di speaker, erano presenti altri due membri del &lt;a href="http://www.jugpadova.it/"&gt;JUG Padova&lt;/a&gt;: &lt;a href="http://paolodona.blogspot.com/"&gt;Paolo Donà&lt;/a&gt; ed &lt;a href="http://enricogi.blogspot.com/"&gt;Enrico Giurin&lt;/a&gt;. Il primo ha svolto una presentazione su due caratteristiche recenti di Parancoe che ha sviluppato, ispirandosi a &lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt; e &lt;a href="http://www.rubyonrails.org/"&gt;RoR&lt;/a&gt;: fixtures, per il caricamento di dati nel DB durante i test e in installazione, e plugin, per aggiungere semplicemente funzionalità alle applicazioni sviluppate con &lt;a href="http://www.parancoe.org/"&gt;Parancoe&lt;/a&gt;. Enrico invece ha descritto le funzionalità di &lt;a href="http://www.acegisecurity.org/"&gt;ACEGI&lt;/a&gt; e il modo in cui tale libreria viene usata nel Plugin Security di &lt;a href="http://www.parancoe.org/"&gt;Parancoe&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Il meeting, forse anche a causa del bel tempo che ha invogliato molti ad andare al mare, a sofferto di alcuni problemi organizzativi. Alcuni suggerimenti per gli organizzatori, per il prossimo anno:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;pensare ad una giornata meno vacanziera&lt;/li&gt;&lt;li&gt;indicare meglio la sede, in modo che riesca a trovarla anche chi non è del posto&lt;/li&gt;&lt;li&gt;distribuire ai partecipanti un volantino con il programma (orario) della giornata, e magari le descrizioni dei vari seminari&lt;/li&gt;&lt;li&gt;ridurre i tempi di pausa&lt;br /&gt;&lt;/li&gt;&lt;li&gt;se i partecipanti previsti non sono molti, com'è stato, usare un'unica sala&lt;/li&gt;&lt;li&gt;pensare ad un "cane da guardia" per i relatori, in modo che inizino puntuali e non sforino (io, ad esempio, credo di avere abbondantemente sforato...ma in realtà non lo so, dato che non c'era nessuno che controllava il tempo, nemmeno io)&lt;/li&gt;&lt;/ul&gt;Ad ogni modo, un meeting in Sardegna vale la pena anche solo per la bellezza del luogo.&lt;br /&gt;Purtroppo le &lt;a href="http://www.flickr.com/photos/benfante/tags/springmeeting2007/"&gt;mie foto&lt;/a&gt; sono pochissime e scattate con un telefonino. Decisamente meglio &lt;a href="http://picasaweb.google.com/paolo.dona/SpringMeetingCagliari"&gt;quelle di Paolo&lt;/a&gt;, oppure &lt;a href="http://www.flickr.com/photos/96509429@N00/tags/springframework2007cagliari/"&gt;le foto&lt;/a&gt; di &lt;a href="http://www.jroller.com/desmax/"&gt;Massimiliano Dessì&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Spero che l'anno prossimo venga organizzato ancora, facendo tesoro dell'esperienza di quest'anno...e di riuscire di nuovo a parteciparvi. In bocca al lupo, e W la Sardegna!&lt;br /&gt;&lt;br /&gt;PS: devo anche ringraziare Paolo che ci ha ospitato a casa sua, e la sua fantastica nonnina per i buonissimi carciofini sottolio. Un grazie anche a Massimiliano per il suo entusiasmo e per la volontà nell'organizzare questo evento.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-793476159477601331?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/793476159477601331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=793476159477601331' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/793476159477601331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/793476159477601331'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2007/07/spring-meeting-2007.html' title='Spring Meeting 2007'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-6477742021547385609</id><published>2007-07-03T11:03:00.000+02:00</published><updated>2007-07-03T11:32:02.751+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='zurigo'/><title type='text'>Jazoon '07</title><content type='html'>La settimana scorsa ho partecipato a &lt;a href="http://www.jazoon.com"&gt;Jazoon '07&lt;/a&gt;, prima edizione di una conferenza dedicata alle tecnologie Java che si svolge a Zurigo.&lt;br /&gt;&lt;br /&gt;Durante la conferenza, assieme ad altri due membri del &lt;a href="http://www.jugpadova.it"&gt;JUG Padova&lt;/a&gt;, abbiamo presentato una &lt;a href="http://jazoon.com/en/conference/presentationdetails.html?type=sid&amp;detail=1720"&gt;demo&lt;/a&gt; su &lt;a href="http://parancoe.dev.java.net"&gt;Parancoe&lt;/a&gt;, un meta-framework Web opensource con alcune caratteristiche innovative per accelerare lo sviluppo di applicazioni Web.&lt;br /&gt;&lt;br /&gt;La conferenza è stata piuttosto interessante. Potete leggerne il mio &lt;a href="http://www.jugpadova.it/articles/2007/07/03/com%C3%A8-stato-jazoon"&gt;resoconto nel sito del JUG&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-6477742021547385609?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/6477742021547385609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=6477742021547385609' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/6477742021547385609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/6477742021547385609'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2007/07/jazoon-07.html' title='Jazoon &apos;07'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-5722006297770309803</id><published>2007-03-12T18:14:00.000+01:00</published><updated>2007-03-12T19:18:53.171+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programmazione'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='jar'/><category scheme='http://www.blogger.com/atom/ns#' term='LifeRay'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><title type='text'>Tomcat "castrato"</title><content type='html'>...ovvero come perdere una giornata di lavoro credendo che fosse colpa di &lt;a href="http://www.liferay.com"&gt;LifeRay&lt;/a&gt; e invece era colpa di &lt;a href="http://tomcat.apache.org"&gt;Tomcat&lt;/a&gt;. (ma anche LifeRay ci ha messo del suo)&lt;br /&gt;&lt;br /&gt;Partiamo dalla soluzione, che è un po' più utile. Se usando Tomcat (5.5.20...ma anche 5.5.17, non ho provato gli altri) vi succede di non riuscire a usare le mail session configurate come risorse JNDI dato che facendone il lookup ricevete in risposta una bella &lt;code&gt;ClassNotFoundException: org.apache.naming.factory.MailSessionFactory&lt;/code&gt;, la colpa non è vostra, ma di quei burloni che sviluppano Tomcat che si sono dimenticati di distribuirla. Tale classe dovrebbe trovarsi in &lt;code&gt;common/lib/naming-factory.jar&lt;/code&gt;, ma viene inclusa solo se durante il build di Tomcat si è avuta l'accortezza di mettere nel classpath le &lt;a href="http://java.sun.com/products/javamail/"&gt;JavaMail&lt;/a&gt; e il &lt;a href="http://java.sun.com/products/javabeans/jaf/"&gt;JavaBeans Activation Framework&lt;/a&gt;. Non so se questo sia voluto, visto che ormai si ripete da almeno 2 versioni, certo è che è una bella scocciatura.&lt;br /&gt;&lt;br /&gt;Ho quindi dovuto ricompilare Tomcat dai sorgenti (5.5.20) per produrre un JAR contenente le factory mancanti. Dato che non è proprio semplicissimo, se volete evitarvi la fatica potete scaricarlo da qui:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://snipurl.com/nfjar"&gt;http://snipurl.com/nfjar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sostituitelo a quello presente in common/lib.&lt;br /&gt;&lt;br /&gt;Il punto di partenza del problema è stato ancora più subdolo...da qui la giornata persa. Infatti stavo cercandi di far funzionare le mail session con LifeRay, usando ovviamente Tomcat come Servlet/JSP container. Il problema segnalato da LifeRay non era la tutto sommato chiara ClassNotFoundException, bensì una incomprensibile &lt;code&gt;javax.naming.NameNotFoundException: Name mail is not bound in this Context&lt;/code&gt;. Ovviamente, controllando la console di amministrazione, il nome JNDI era definito! Il problema è che LifeRay cerca di "indovinare" il nome JNDI (che ovviamente cambia da server a server), ma facendo questo si perde (ignorandole e nascondendocele completamente) le vere cause dei problemi...quindi un'intera giornata persa cercando di configurare le risorse JNDI, quando invece bisognava "aggiustare" un JAR.&lt;br /&gt;&lt;br /&gt;Per fortuna comunque che LifeRay è opensource e ho potuto esaminarne i sorgenti per capire la vera causa di questo errore, altrimenti sarebbe stato impossibile.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-5722006297770309803?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/5722006297770309803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=5722006297770309803' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/5722006297770309803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/5722006297770309803'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2007/03/tomcat-castrato.html' title='Tomcat &quot;castrato&quot;'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-8796105455006079693</id><published>2007-02-08T06:59:00.000+01:00</published><updated>2007-02-12T07:06:15.553+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenOffice'/><title type='text'>Zappe sui piedi...</title><content type='html'>Una breve riflessione su come il mondo open-source riesca a farsi del male, promuovendo iniziative lodevoli, ma arrivando totalmente impreparati a domande assolutamente banali e prevedibili.&lt;br /&gt;&lt;br /&gt;Lo spunto mi arriva ascoltando uno stralcio di un'intervista (o semplicemente una domanda del giornalista presente, non so) durante la conferenza stampa di presentazione dell'associazione &lt;a href="http://www.plio.it"&gt;Progetto Linguistico Italiano OpenOffice.org&lt;/a&gt;. Lo stralcio è andato in onda durante la puntata del 3 Febbraio 2007 del programma 2024 su &lt;a href="http://www.radio24.it"&gt;Radio 24&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight:bold;"&gt;Enrico Pagliarini (Giornalista di &lt;a href="http://www.radio24.it"&gt;Radio 24&lt;/a&gt;):&lt;/span&gt; Naturalmente quando si parla di suite da ufficio viene subito alla mente Office, il classico Office di Microsoft. Siamo in presenza di un software che sostanzialmente è molto simile.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Davide Dozza (Presidente del &lt;a href="http://www.plio.it"&gt;PLIO&lt;/a&gt;):&lt;/span&gt; Sì, è un diretto concorrente di Microsoft Office. Tant'è che supporta in tutto e per tutto i formati di Office. E' una compatibilità molto alta, non al 100%, perché ovviamente i formati di Microsoft sono formati proprietari, e quindi sono supportati solo in termini di reverse-engineering come si dice tecnicamente. Cioè solo la possibilità di copiarne le funzionalità senza avere accesso alle specifiche vere e proprie. Per cui ci si avvicina molto alle funzionalità di Office, ma mai del tutto proprio per queste caratteristiche di chiusura dei formati.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;A questo punto gli ascoltatori cosa avranno capito? Sicuramente che [&lt;a href="http://www.openoffice.org"&gt;OpenOffice&lt;/a&gt;] "si avvicina molto alle funzionalità di Office, ma mai del tutto". Non propriamente una buona comunicazione.&lt;br /&gt;&lt;br /&gt;Perchè parlare di funzionalità in merito ai formati, quando le funzionalità si riferiscono al software? Non bastava dire che &lt;a href="http://www.openoffice.org"&gt;OpenOffice&lt;/a&gt; permette di ottenere gli stessi risultati che si ottengono con Microsoft Office, e in maniera molto simile? Naturalmente, trattandosi di software differenti, OpenOffice ha funzionalità che Office non ha, e viceversa. Se si voleva parlare dei formati, era sufficiente dire che OpenOffice è in grado di leggere (e scrivere) praticamente tutti i file prodotti da Office, con un ottimo grado di approssimazione, trattandosi di formati proprietari.&lt;br /&gt;&lt;br /&gt;Personalmente sono passato ad OpenOffice da molto tempo, ed è da molto tempo che non ho problemi di compatibilità con i formati di Office. Probabilmente sarò fortunato...ma felice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-8796105455006079693?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/8796105455006079693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=8796105455006079693' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/8796105455006079693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/8796105455006079693'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2007/02/zappe-sui-piedi.html' title='Zappe sui piedi...'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-2444551338632748522</id><published>2007-01-20T09:08:00.001+01:00</published><updated>2007-01-20T09:21:29.522+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='parcheggio'/><title type='text'>Un parcheggio economico (?)</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/benfante/362668939/" title="photo sharing"&gt;&lt;img src="http://farm1.static.flickr.com/149/362668939_7d9c9ac2f0_m.jpg" alt="Scontrino" style="border: 0px;" /&gt;&lt;/a&gt;&lt;/div&gt;Si dice sempre che i parcheggi cittadini sono costosi. Leggendo questo ticket non sembrerebbe: inizio sosta alle 17:00 del 30/12(2006), fine sosta alle 9:00 del 2/1/2007. Quasi tre giornate di sosta a solo 1,70 Euro!&lt;br /&gt;&lt;br /&gt;In realtà è solo un buon esempio del software dei parchimetri, che conosce bene le festività durante le quali non si paga.&lt;br /&gt;&lt;br /&gt;Rifacendo i conti...togliamo il 31/12 (domenica), 1/1 (capodanno) e le ore notturne (dalle 19 alle 9)...1,70 Euro per due ore di parcheggio...OK, non così economico...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-2444551338632748522?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/2444551338632748522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=2444551338632748522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/2444551338632748522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/2444551338632748522'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2007/01/un-parcheggio-economico.html' title='Un parcheggio economico (?)'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/149/362668939_7d9c9ac2f0_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1699145198678686871.post-1273041606691901787</id><published>2006-12-22T10:05:00.000+01:00</published><updated>2007-01-20T09:27:11.528+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='poesia'/><category scheme='http://www.blogger.com/atom/ns#' term='silvia'/><title type='text'>All'infante Silvia</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/benfante/218955069/" title="photo sharing"&gt;&lt;img src="http://farm1.static.flickr.com/82/218955069_7e035da73b_m.jpg" width="240" height="180" alt="Scontrino" style="border: 0px;" /&gt;&lt;/a&gt;&lt;/div&gt;Il primo post di questo blog è dedicato a mia figlia Silvia, nata lo scorso Agosto. La seguente poesia le è stata dedicata da Don Antonio Baruffa, che ovviamente ne detiene e ne conserva tutti i diritti.&lt;br /&gt;&lt;br /&gt;&lt;div style="clear: right; text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt; ALL'INFANTE SILVIA&lt;/span&gt;&lt;br /&gt;gioia dei genitori: Paola e Lucio&lt;br /&gt;e gaudio dei nonni: Maria Grazia e Ugo&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family:arial;"&gt;San Bonifacio è una cittadina ridente&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;a mezza strada tra il Bolca e Verona.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Simpatica ed allegra è la gente&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;ed una pregiata uva fa qui da padrona.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;In casa Benfante oggi si fa festa,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;perchè una piccola stella è apparsa nel firmamento.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;A mamma Paola e a papà Lucio altro non resta&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;che elevar al Ciel un sentito ringraziamento.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Sono accorsi da Borgotaro&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Maria Grazia ed Ugo, davvero raggianti.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Esser nonni per la terza volta è un dono caro,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;tanto da dimenticar che nella lor vita sono alquanto avanti.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Ora il piccolo Carlo ha Silvia, una bella sorellina,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;che un giorno sarà la sua compagna di giochi.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;La mamma con un bacio la sveglierà ogni mattina&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;e amorosamente la guarderà con i suoi dolci occhi.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Gli zii Guido e Chiara&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;ammireranno entusiasti quest'aulente fiorellino.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Sanno che la vita non le sarà amara,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;perciò le augurano un glorioso e nobil destino.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Luisa, la gran matriarca, si sente felice.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Infatti è un traguardo alquanto raro esser bisnonna.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Con un forte abbraccio i suoi cari benedice&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;e raccomanda l'infante alla Madonna.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Inoltre tutti i parenti di Borgotaro, Mestre e Bassano...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;esprimono i lor gioiosi sentimenti&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;con un sincer e caloroso battimano.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Ed anche quest'umil menestrello&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;si rallegra dell'arrivo dell'"infantolina"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;e considera queste rime un pigolio d'uccello,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;offerto con riconoscenza alla Maestà divina.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Don Antonio&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Roma, Catacombe di San Callisto, 12/08/2006.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;!--Creative Commons License--&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.5/"&gt;&lt;img alt="Creative Commons License" style="border-width: 0pt;" src="http://i.creativecommons.org/l/by-nc-nd/2.5/88x31.png" /&gt;&lt;/a&gt;&lt;br /&gt;Questo/a opera è pubblicato sotto una &lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.5/"&gt;Licenza Creative Commons&lt;/a&gt;.&lt;!--/Creative Commons License--&gt;&lt;!-- &lt;rdf:rdf xmlns="http://web.resource.org/cc/" dc="http://purl.org/dc/elements/1.1/" rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdfs="http://www.w3.org/2000/01/rdf-schema#"&gt;&lt;br /&gt; &lt;work about=""&gt;&lt;br /&gt;  &lt;license resource="http://creativecommons.org/licenses/by-nc-nd/2.5/"&gt;&lt;br /&gt; &lt;dc:type resource="http://purl.org/dc/dcmitype/Text"&gt;&lt;br /&gt; &lt;/work&gt;&lt;br /&gt; &lt;license about="http://creativecommons.org/licenses/by-nc-nd/2.5/"&gt;&lt;permits resource="http://web.resource.org/cc/Reproduction"&gt;&lt;permits resource="http://web.resource.org/cc/Distribution"&gt;&lt;requires resource="http://web.resource.org/cc/Notice"&gt;&lt;requires resource="http://web.resource.org/cc/Attribution"&gt;&lt;prohibits resource="http://web.resource.org/cc/CommercialUse"&gt;&lt;/license&gt;&lt;/rdf:RDF&gt; --&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1699145198678686871-1273041606691901787?l=benfante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benfante.blogspot.com/feeds/1273041606691901787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1699145198678686871&amp;postID=1273041606691901787' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/1273041606691901787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1699145198678686871/posts/default/1273041606691901787'/><link rel='alternate' type='text/html' href='http://benfante.blogspot.com/2006/12/allinfante-silvia.html' title='All&apos;infante Silvia'/><author><name>Lucio Benfante</name><uri>http://www.blogger.com/profile/01023259319993896626</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://farm2.static.flickr.com/1247/702849141_37924b60d0_o.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/82/218955069_7e035da73b_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
