<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DEYMSHk-fSp7ImA9WxBRF0g.&quot;"><id>tag:blogger.com,1999:blog-3504073133976639188</id><updated>2010-01-06T06:36:29.755+01:00</updated><title>Rofl's Compressions</title><subtitle type="html">These are compressed experiences from my mind. Sometimes  they may be humorous sometimes serious.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://rofl.jobiroxa.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://rofl.jobiroxa.com/" /><author><name>Rolf Strijdhorst</name><uri>http://www.blogger.com/profile/07626013407256435126</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/rolfstjobiroxa" /><feedburner:info uri="rolfstjobiroxa" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DUcNQH08fCp7ImA9WxJbEEQ.&quot;"><id>tag:blogger.com,1999:blog-3504073133976639188.post-4834657336103995941</id><published>2009-07-20T15:38:00.000+02:00</published><updated>2009-07-20T15:38:11.374+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-20T15:38:11.374+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse" /><title>Eclipse Templates</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Templates are a usefull thing when working with code as we know.&lt;br /&gt;
A simple template is a simple thing to do but using an import is a different beast.&lt;br /&gt;
&lt;br /&gt;
so here is a example to make sure that the import is also included in the java file.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='brush: plain'&gt;/** Tapestry render phase method. Called before component body is rendered.*/
@BeforeRenderBody
public void beforeRenderBody(){
${cursor}
}
${:import(org.apache.tapestry5.annotations.BeforeRenderBody)}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3504073133976639188-4834657336103995941?l=rofl.jobiroxa.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://rofl.jobiroxa.com/feeds/4834657336103995941/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3504073133976639188&amp;postID=4834657336103995941" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/4834657336103995941?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/4834657336103995941?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/rolfstjobiroxa/~3/rqJZVK8hjlM/eclipse-templates.html" title="Eclipse Templates" /><author><name>Rolf Strijdhorst</name><uri>http://www.blogger.com/profile/07626013407256435126</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01314905096045635405" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://rofl.jobiroxa.com/2009/07/eclipse-templates.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcCR344eSp7ImA9WxJbEEQ.&quot;"><id>tag:blogger.com,1999:blog-3504073133976639188.post-8527296844023126165</id><published>2009-05-21T22:53:00.008+02:00</published><updated>2009-07-20T15:37:46.031+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-20T15:37:46.031+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="jta" /><category scheme="http://www.blogger.com/atom/ns#" term="atomikos" /><title>JTA</title><content type="html">&lt;p&gt;Most applications using ORM tooling have need of a transaction management system.&lt;br /&gt;
One of these transaction managers is Atomikos. Atomikos provides several products. One transaction essentials is an opensource variant.&lt;br /&gt;
However you cannot get it via a maven repository. You'll have to register for a download link.&lt;br /&gt;
Transaction essentials is easy embeddable within a jetty container or even within a spring context.&lt;p&gt;&lt;p&gt;First here's how to implement transaction essentials within a jetty container configured with maven.&lt;/p&gt;&lt;p&gt;Lets start with the jetty configuration within a maven pom file:&lt;/p&gt;&lt;pre name="code" class="brush: xml"&gt;&amp;lt;!-- Run the application using "mvn jetty:run" --&gt;
            &amp;lt;plugin&gt;
                &amp;lt;groupId&gt;org.mortbay.jetty&amp;lt;/groupId&gt;
                &amp;lt;artifactId&gt;maven-jetty-plugin&amp;lt;/artifactId&gt;
                &amp;lt;version&gt;6.1.15&amp;lt;/version&gt;
                &amp;lt;configuration&gt;
                    &amp;lt;!-- Log to the console. --&gt;
                    &amp;lt;requestLog implementation="org.mortbay.jetty.NCSARequestLog"&gt;
                        &amp;lt;!--
                        This doesn't do anything for Jetty, but is a workaround for a
                        Maven bug that prevents the requestLog from being set.
                        --&gt;
                        &amp;lt;append&gt;true&amp;lt;/append&gt;
                    &amp;lt;/requestLog&gt;
                   
                    &amp;lt;scanIntervalSeconds&gt;0&amp;lt;/scanIntervalSeconds&gt;
                    &amp;lt;webAppConfig&gt;
                      &amp;lt;contextPath&gt;/rbudisplay&amp;lt;/contextPath&gt;
                      &amp;lt;tempDirectory&gt;${project.build.directory}/work&amp;lt;/tempDirectory&gt;
                    &amp;lt;/webAppConfig&gt;
                    &amp;lt;jettyConfig&gt;src/etc/jetty/tx-jetty.xml&amp;lt;/jettyConfig&gt;
                    &amp;lt;jettyEnvXml&gt;src/etc/jetty/jetty-env.xml&amp;lt;/jettyEnvXml&gt;
                &amp;lt;/configuration&gt;
                &amp;lt;dependencies&gt;
                    &amp;lt;dependency&gt;
                        &amp;lt;groupId&gt;javax.transaction&amp;lt;/groupId&gt;
                        &amp;lt;artifactId&gt;jta&amp;lt;/artifactId&gt;
                        &amp;lt;version&gt;1.1&amp;lt;/version&gt;
                    &amp;lt;/dependency&gt;
                    &amp;lt;dependency&gt;
                        &amp;lt;groupId&gt;com.atomikos&amp;lt;/groupId&gt;
                        &amp;lt;artifactId&gt;atomikos-util&amp;lt;/artifactId&gt;
                        &amp;lt;version&gt;3.5.4&amp;lt;/version&gt;
                    &amp;lt;/dependency&gt;
                    &amp;lt;dependency&gt;
                        &amp;lt;groupId&gt;com.atomikos&amp;lt;/groupId&gt;
                        &amp;lt;artifactId&gt;transactions&amp;lt;/artifactId&gt;
                        &amp;lt;version&gt;3.5.4&amp;lt;/version&gt;
                    &amp;lt;/dependency&gt;
                    &amp;lt;dependency&gt;
                        &amp;lt;groupId&gt;com.atomikos&amp;lt;/groupId&gt;
                        &amp;lt;artifactId&gt;transactions-api&amp;lt;/artifactId&gt;
                        &amp;lt;version&gt;3.5.4&amp;lt;/version&gt;
                    &amp;lt;/dependency&gt;
                    &amp;lt;dependency&gt;
                        &amp;lt;groupId&gt;com.atomikos&amp;lt;/groupId&gt;
                        &amp;lt;artifactId&gt;transactions-jta&amp;lt;/artifactId&gt;
                        &amp;lt;version&gt;3.5.4&amp;lt;/version&gt;
                    &amp;lt;/dependency&gt;
                    &amp;lt;dependency&gt;
                        &amp;lt;groupId&gt;com.atomikos&amp;lt;/groupId&gt;
                        &amp;lt;artifactId&gt;transactions-hibernate3&amp;lt;/artifactId&gt;
                        &amp;lt;version&gt;3.5.4&amp;lt;/version&gt;
                    &amp;lt;/dependency&gt;
                    &amp;lt;dependency&gt;
                        &amp;lt;groupId&gt;postgresql&amp;lt;/groupId&gt;
                        &amp;lt;artifactId&gt;postgresql&amp;lt;/artifactId&gt;
                        &amp;lt;version&gt;8.3-603.jdbc4&amp;lt;/version&gt;
                    &amp;lt;/dependency&gt;
                    &amp;lt;dependency&gt;
                        &amp;lt;groupId&gt;log4j&amp;lt;/groupId&gt;
                        &amp;lt;artifactId&gt;log4j&amp;lt;/artifactId&gt;
                        &amp;lt;version&gt;1.2.14&amp;lt;/version&gt;
                    &amp;lt;/dependency&gt;
                &amp;lt;/dependencies&gt;
            &amp;lt;/plugin&gt;
&lt;/pre&gt;&lt;p&gt;The jettyConfig tx-jetty contains the configuration for the atomikos usertransactionmanager and will be applied before other setting set in the maven pom:&lt;/p&gt;&lt;pre name="code" class="brush: xml"&gt;&amp;lt;Call class="java.lang.System" name="setProperty"&gt;
      &amp;lt;Arg&gt;com.atomikos.icatch.file&amp;lt;/Arg&gt;
      &amp;lt;Arg&gt;src/etc/jetty/jta.properties&amp;lt;/Arg&gt;
   &amp;lt;/Call&gt;

   &amp;lt;!-- Atomikos --&gt;
   &amp;lt;New id="tx" class="org.mortbay.jetty.plus.naming.Transaction"&gt;
      &amp;lt;Arg&gt;
         &amp;lt;New class="com.atomikos.icatch.jta.UserTransactionImp" /&gt;
      &amp;lt;/Arg&gt;
   &amp;lt;/New&gt;
&lt;/pre&gt;&lt;p&gt;The jetty-env contains the configuration for a specif webapplication in jetty and consists in part of the datasources for the webapp:&lt;/p&gt;&lt;pre name="code" class="brush: xml"&gt;&amp;lt;Set name="configurationClasses"&gt;
    &amp;lt;Array type="java.lang.String"&gt;
      &amp;lt;Item&gt;org.mortbay.jetty.webapp.WebInfConfiguration&amp;lt;/Item&gt;
      &amp;lt;Item&gt;org.mortbay.jetty.plus.webapp.EnvConfiguration&amp;lt;/Item&gt;
      &amp;lt;Item&gt;org.mortbay.jetty.annotations.Configuration&amp;lt;/Item&gt;
      &amp;lt;Item&gt;org.mortbay.jetty.webapp.JettyWebXmlConfiguration&amp;lt;/Item&gt;
      &amp;lt;Item&gt;org.mortbay.jetty.webapp.TagLibConfiguration&amp;lt;/Item&gt;
    &amp;lt;/Array&gt;
  &amp;lt;/Set&gt;
 
  &amp;lt;!-- Add a mapping from name in web.xml to the environment --&gt;
  &amp;lt;New id="map1" class="org.mortbay.jetty.plus.naming.Link"&gt;
    &amp;lt;Arg&gt;&amp;lt;Ref id='rbudisplay'/&gt;&amp;lt;/Arg&gt;
    &amp;lt;Arg&gt;jdbc/rbuconverter&amp;lt;/Arg&gt; &amp;lt;!-- name in web.xml --&gt;
    &amp;lt;Arg&gt;jdbc/rbu&amp;lt;/Arg&gt;  &amp;lt;!-- name in environment --&gt;
  &amp;lt;/New&gt;
 
  &amp;lt;New id="rbuconverter" class="org.mortbay.jetty.plus.naming.Resource"&gt;
     &amp;lt;Arg&gt;&amp;lt;Ref id="rbudisplay"/&gt;&amp;lt;/Arg&gt;
     &amp;lt;Arg&gt;jdbc/rbu&amp;lt;/Arg&gt;
     &amp;lt;Arg&gt;
      &amp;lt;New class="com.atomikos.jdbc.AtomikosDataSourceBean"&gt;
       &amp;lt;Set name="minPoolSize"&gt;2&amp;lt;/Set&gt;
       &amp;lt;Set name="maxPoolSize"&gt;50&amp;lt;/Set&gt;
       &amp;lt;Set name="xaDataSourceClassName"&gt;org.postgresql.xa.PGXADataSource&amp;lt;/Set&gt;
       &amp;lt;Set name="UniqueResourceName"&gt;rbuconverter&amp;lt;/Set&gt;
       &amp;lt;Get name="xaProperties"&gt;
         &amp;lt;Call name="setProperty"&gt;
            &amp;lt;Arg&gt;databaseName&amp;lt;/Arg&gt;
            &amp;lt;Arg&gt;rbuconverter&amp;lt;/Arg&gt;
         &amp;lt;/Call&gt;
         &amp;lt;Call name="setProperty"&gt;
           &amp;lt;Arg&gt;serverName&amp;lt;/Arg&gt;
           &amp;lt;Arg&gt;localhost&amp;lt;/Arg&gt;
         &amp;lt;/Call&gt;
         &amp;lt;Call name="setProperty"&gt;
            &amp;lt;Arg&gt;portNumber&amp;lt;/Arg&gt;
            &amp;lt;Arg&gt;5432&amp;lt;/Arg&gt;
         &amp;lt;/Call&gt;
         &amp;lt;Call name="setProperty"&gt;
           &amp;lt;Arg&gt;user&amp;lt;/Arg&gt;
           &amp;lt;Arg&gt;postgres&amp;lt;/Arg&gt;
         &amp;lt;/Call&gt;
         &amp;lt;Call name="setProperty"&gt;
           &amp;lt;Arg&gt;password&amp;lt;/Arg&gt;
           &amp;lt;Arg&gt;BlahBlah&amp;lt;/Arg&gt;
         &amp;lt;/Call&gt;
       &amp;lt;/Get&gt;
      &amp;lt;/New&gt;
     &amp;lt;/Arg&gt;
   &amp;lt;/New&gt;
&lt;/pre&gt;&lt;p&gt;The first part sets up the jetty plus environment for jndi.&lt;br /&gt;
The second part sets up the reference for the jetty-env configuration and to bind the datasource to jndi so the web.xml can make a refernce to the configured datasource.&lt;br /&gt;
The third part sets up the datasource itself. Here an XADataSource is configured for PostgreSQL Note that the com.atomikos.jdbc.AtomikosDataSourceBean is the prefered DataSource since Atomikos 3.4.x.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;The web.xml needs to have these lines in place for the above configured datasource:&lt;/p&gt;&lt;pre name="code" class="brush: xml"&gt;&amp;lt;resource-ref&gt;
      &amp;lt;res-ref-name&gt;jdbc/rbuconverter&amp;lt;/res-ref-name&gt;
      &amp;lt;res-type&gt;javax.sql.DataSource&amp;lt;/res-type&gt;
      &amp;lt;res-auth&gt;Container&amp;lt;/res-auth&gt;
   &amp;lt;/resource-ref&gt;
&lt;/pre&gt;&lt;p&gt;It is also possible to configure Atomikos transaction Essentials completely in a spring context. In this case do not use the jettyConfig and jettyEnvXml in the pom file and omit the resource-ref within the web.xml:&lt;br /&gt;
I have a tx-context.xml:&lt;/p&gt;&lt;pre name="code" class="brush: xml"&gt;&amp;lt;bean class="com.atomikos.jdbc.AtomikosDataSourceBean" destroy-method="close" id="dataSource" init-method="init"&gt;
        &amp;lt;property name="uniqueResourceName" value="rbudatasource"/&gt;
        &amp;lt;property name="xaDataSourceClassName" value="org.postgresql.xa.PGXADataSource"/&gt;
        &amp;lt;property name="xaProperties"&gt;
              &amp;lt;props&gt;
              &amp;lt;prop key="databaseName"&gt;rbuconverter&amp;lt;/prop&gt;
              &amp;lt;prop key="serverName"&gt;localhost&amp;lt;/prop&gt;
              &amp;lt;prop key="portNumber"&gt;5432&amp;lt;/prop&gt;
              &amp;lt;prop key="user"&gt;postgres&amp;lt;/prop&gt;
              &amp;lt;prop key="password"&gt;BlahBlah&amp;lt;/prop&gt;
              &amp;lt;/props&gt;
        &amp;lt;/property&gt;
        &amp;lt;property name="minPoolSize" value="5"&gt;
        &amp;lt;property name="maxPoolSize" value="50"&gt;
    &amp;lt;/bean&gt;

    &amp;lt;bean class="com.atomikos.icatch.config.UserTransactionServiceImp" destroy-method="shutdownForce" id="userTransactionService"&gt;
        &amp;lt;constructor-arg&gt;
             &amp;lt;props&gt;
                &amp;lt;prop key="com.atomikos.icatch.service"&gt;
                    com.atomikos.icatch.standalone.UserTransactionServiceFactory
                &amp;lt;/prop&gt;
                &amp;lt;prop key="com.atomikos.icatch.output_dir"&gt;/tmp&amp;lt;/prop&gt;
                &amp;lt;prop key="com.atomikos.icatch.output_dir"&gt;/tmp&amp;lt;/prop&gt;
            &amp;lt;/props&gt;
        &amp;lt;/constructor-arg&gt;
   &amp;lt;/bean&gt;           
 
   &amp;lt;!-- Construct Atomikos UserTransactionManager, needed to configure Spring --&gt;
   &amp;lt;bean id="AtomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close" depends-on="userTransactionService"&gt;
      &amp;lt;!-- when close is called, should we force transactions to terminate or not? --&gt;
      &amp;lt;property name="forceShutdown" value="false" /&gt;
      &amp;lt;property name="transactionTimeout" value="300"/&gt;
   &amp;lt;/bean&gt;

   &amp;lt;!-- Also use Atomikos UserTransactionImp, needed to configure Spring --&gt;
   &amp;lt;bean id="AtomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" /&gt;

   &amp;lt;!-- Configure the Spring framework to use JTA transactions from Atomikos --&gt;
   &amp;lt;bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" depends-on="userTransactionService"&gt;
      &amp;lt;property name="transactionManager" ref="AtomikosTransactionManager" /&gt;
      &amp;lt;property name="userTransaction" ref="AtomikosUserTransaction" /&gt;
   &amp;lt;/bean&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3504073133976639188-8527296844023126165?l=rofl.jobiroxa.com' alt='' /&gt;&lt;/div&gt;</content><link rel="related" href="https://sites.google.com/a/jobiroxa.com/rolf-knowledgde-crunching/java-1/jta" title="JTA" /><link rel="replies" type="application/atom+xml" href="http://rofl.jobiroxa.com/feeds/8527296844023126165/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3504073133976639188&amp;postID=8527296844023126165" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/8527296844023126165?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/8527296844023126165?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/rolfstjobiroxa/~3/lU62dTEhQ_U/jta.html" title="JTA" /><author><name>Rolf Strijdhorst</name><uri>http://www.blogger.com/profile/07626013407256435126</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01314905096045635405" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://rofl.jobiroxa.com/2009/05/jta.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQGSXk4eSp7ImA9WxVbGEU.&quot;"><id>tag:blogger.com,1999:blog-3504073133976639188.post-9061012552510836088</id><published>2009-04-04T23:10:00.005+02:00</published><updated>2009-04-04T23:25:28.731+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-04T23:25:28.731+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tapestry" /><title>Tapestry activation passivation</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Tapestry 5 can make use of the client to make information set to a page from another page available to the client.&lt;br /&gt;
For instance Page Origin places a message during a submit onto Page Next and using the mechanism of passivation and activation&lt;br /&gt;
the client will act as the middle man to make this information available to the client itself.&lt;br /&gt;
Tapestry will issue an HTTP 302 redirect after the post and thus the passivation of Page Next so the client recieves some information and will ask tapestry for that information to be acted upon.&lt;br /&gt;
&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://lh5.ggpht.com/_koY-_i9pygA/SdfHo4iiG9I/AAAAAAAAADU/gpDWbaN0kEU/s800/passivate0.jpg" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;Here you see that the value of 'Howdy' is submitted and using a redirect is send to the server again to be used in its activation event.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3504073133976639188-9061012552510836088?l=rofl.jobiroxa.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://rofl.jobiroxa.com/feeds/9061012552510836088/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3504073133976639188&amp;postID=9061012552510836088" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/9061012552510836088?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/9061012552510836088?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/rolfstjobiroxa/~3/GK-JzjzVuTc/tapestry-activation.html" title="Tapestry activation passivation" /><author><name>Rolf Strijdhorst</name><uri>http://www.blogger.com/profile/07626013407256435126</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01314905096045635405" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_koY-_i9pygA/SdfHo4iiG9I/AAAAAAAAADU/gpDWbaN0kEU/s72-c/passivate0.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://rofl.jobiroxa.com/2009/04/tapestry-activation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMBRX05fip7ImA9WxJUFEs.&quot;"><id>tag:blogger.com,1999:blog-3504073133976639188.post-2330577323342272967</id><published>2009-02-02T12:13:00.079+01:00</published><updated>2009-07-13T08:44:14.326+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-13T08:44:14.326+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="trac" /><category scheme="http://www.blogger.com/atom/ns#" term="lighttpd" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><title>Apache2 VirtualHost and trac behind a lighttpd proxy</title><content type="html">Note to self:&lt;br /&gt;
setup of trac for Apache2&lt;br /&gt;
&lt;p&gt;follow this instructions on this site: &lt;a href="http://robertbasic.com/blog/trac-on-ubuntu"&gt;Robert Basic: Trac on Ubuntu&lt;/a&gt;. &lt;br /&gt;
Although I use mercurial as scm.&lt;br /&gt;
make sure that the line containing VirtualHost points to port 81 or another port except port 80.&lt;br /&gt;
&lt;pre name="code" class="brush: xml"&gt;&amp;lt;VirtualHost *:81&amp;gt;&lt;/pre&gt;and make sure apache listens to this port by changing /etc/apache2/ports.conf&lt;br /&gt;
&lt;pre name="code" class="bash"&gt;NameVirtualHost *:81
Listen 81
&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;Now install lighttpd:&lt;br /&gt;
&lt;pre name="code" class="brush: bash"&gt;sudo apt-get install lighttpd&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;edit /etc/lighttpd/conf-available/10-proxy&lt;br /&gt;
&lt;pre name="code" class="brush: php"&gt;$HTTP["host"] == "localhost" {
proxy.debug = 1
proxy.server     = ( "/trac" =&gt;
                     ( 
                       ( "host" =&gt; "127.0.0.1",
                         "port" =&gt; 81,
                       )
                     )
                    )
}
&lt;/pre&gt;and symlink:&lt;br /&gt;
&lt;pre name="code" class="brush: bash"&gt;sudo ln -s /etc/lighttpd/conf-available/10-proxy /etc/lighttpd/conf-enabled/10-proxy&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;
and start lighttpd&lt;br /&gt;
&lt;pre name="code" class="brush: bash"&gt;sudo /etc/init.d/lighttpd restart
&lt;/pre&gt;et voilà&lt;br /&gt;
the trac instance works both under localhost/trac as well as localhost:81/trac&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3504073133976639188-2330577323342272967?l=rofl.jobiroxa.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://rofl.jobiroxa.com/feeds/2330577323342272967/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3504073133976639188&amp;postID=2330577323342272967" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/2330577323342272967?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/2330577323342272967?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/rolfstjobiroxa/~3/C3Rk7IgkEbc/apache2-virtualhost-and-trac-behind.html" title="Apache2 VirtualHost and trac behind a lighttpd proxy" /><author><name>Rolf Strijdhorst</name><uri>http://www.blogger.com/profile/07626013407256435126</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01314905096045635405" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://rofl.jobiroxa.com/2009/02/apache2-virtualhost-and-trac-behind.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUICSXs6eCp7ImA9WxJUFEs.&quot;"><id>tag:blogger.com,1999:blog-3504073133976639188.post-3751637277675123641</id><published>2009-01-05T11:53:00.011+01:00</published><updated>2009-07-13T08:46:08.510+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-13T08:46:08.510+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>Setting up my python development environment</title><content type="html">Note to self:&lt;br /&gt;
my setup for a python development environment&lt;br /&gt;
sketch so far:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
use &lt;a href="http://www.doughellmann.com/projects/virtualenvwrapper/" linkindex="7"&gt;virtualenv wrapper&lt;/a&gt; changed mkvirtualenv function to to virtualenvwrapper_bashrc&lt;br /&gt;
&lt;pre name="code" class="brush: bash"&gt;function mkvirtualenv () {
    verify_workon_home
    (cd &amp;quot;$WORKON_HOME&amp;quot;; virtualenv $*)
    if [ ! -f $WORKON_HOME/$1/bin/postactivate ]
    then
        workon &amp;quot;${@:-1}&amp;quot;
        easy_install ipython
        easy_install pysmell
        wget http://www.eletztrick.de/software/mkvimproject/releases/0.4.2.3/mkvimproject-0.4.2.3.tar.gz
        easy_install mkvimproject-0.4.2.3.tar.gz
        rm mkvimproject-0.4.2.3.tar.gz
        deactivate
        touch $WORKON_HOME/$1/bin/postactivate
        postactivate=&amp;quot;$WORKON_HOME/$1/bin/postactivate&amp;quot;
        echo &amp;quot;cd $WORKON_HOME/$1&amp;quot; &amp;gt;&amp;gt; $postactivate 
        echo &amp;quot;export PYTHONPATH=$WORKON_HOME/$1/scr:$PYTHONPATH&amp;quot; &amp;gt;&amp;gt; $postactivate    
        echo &amp;quot;if [ ! -d $WORKON_HOME/$1/src ]&amp;quot; &amp;gt;&amp;gt; $postactivate
        echo &amp;quot;then&amp;quot; &amp;gt;&amp;gt; $postactivate
        echo &amp;quot;    mkdir -p $WORKON_HOME/$1/src&amp;quot; &amp;gt;&amp;gt; $postactivate
        echo &amp;quot;fi&amp;quot; &amp;gt;&amp;gt; $postactivate
        echo &amp;quot;if [ ! -f $WORKON_HOME/$1/$1.vpj ]&amp;quot; &amp;gt;&amp;gt; $postactivate
        echo &amp;quot;then&amp;quot; &amp;gt;&amp;gt; $postactivate
        echo &amp;quot;    mkvimproject -o $1.vpj -s python&amp;quot; &amp;gt;&amp;gt; $postactivate
        echo &amp;quot;fi&amp;quot; &amp;gt;&amp;gt; $postactivate
        echo &amp;quot;if [ ! -f $WORKON_HOME/$1/PYSMELLTAGS ]&amp;quot; &amp;gt;&amp;gt; $postactivate
        echo &amp;quot;then&amp;quot; &amp;gt;&amp;gt; $postactivate
        echo &amp;quot;    pysmell src;&amp;quot; &amp;gt;&amp;gt; $postactivate
        echo &amp;quot;  cd lib/python2.5;&amp;quot; &amp;gt;&amp;gt; $postactivate;
        echo &amp;quot;  pysmell . -x site-packages -o ../../PYSMELLTAGS.stdlib;&amp;quot; &amp;gt;&amp;gt; $postactivate
        echo &amp;quot;  cd ../..;&amp;quot; &amp;gt;&amp;gt; $postactivate 
        echo &amp;quot;fi&amp;quot; &amp;gt;&amp;gt; $postactivate
        echo &amp;quot;pproject -U&amp;quot; &amp;gt;&amp;gt; $postactivate
    fi
    workon &amp;quot;${@:-1}&amp;quot;
}
&lt;/pre&gt;&lt;br /&gt;
then create a new virtual env with mkvirtualenv projectName --no-site-packages&lt;br /&gt;
this will setup the environment for vim and allow for the use of pysmell omnicompletion&lt;br /&gt;
and allows a ipython shell within the environment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3504073133976639188-3751637277675123641?l=rofl.jobiroxa.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://rofl.jobiroxa.com/feeds/3751637277675123641/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3504073133976639188&amp;postID=3751637277675123641" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/3751637277675123641?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/3751637277675123641?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/rolfstjobiroxa/~3/8pOUXOp1WUs/setting-up-my-python-developement.html" title="Setting up my python development environment" /><author><name>Rolf Strijdhorst</name><uri>http://www.blogger.com/profile/07626013407256435126</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01314905096045635405" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://rofl.jobiroxa.com/2009/01/setting-up-my-python-developement.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08HQX08fip7ImA9WxZUFkg.&quot;"><id>tag:blogger.com,1999:blog-3504073133976639188.post-8672695437524683252</id><published>2008-04-08T11:52:00.006+02:00</published><updated>2008-04-08T13:57:10.376+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-08T13:57:10.376+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="django" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Google app engine</title><content type="html">On april 7 google released the google app engine.&lt;br /&gt;This is great news.&lt;br /&gt;&lt;p&gt;An application environment that can host with the scalability of google itself.&lt;br /&gt;And whats even better currently the engine is implemented in &lt;a href="http://www.python.org/"&gt;python&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Python is a dynamic language a la ruby.  And created by a Dutchman ;-)&lt;br /&gt;It's fully object-oriented. and it is fun to work with.&lt;br /&gt;here is a video on how to develop with the google app engine&lt;br /&gt;&lt;br /&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-0030749460387626604 visible ontop" href="http://www.youtube.com/v/bfgO-LXGpTM&amp;amp;hl=en"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-0030749460387626604 visible ontop" href="http://www.youtube.com/v/bfgO-LXGpTM&amp;amp;hl=en"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-0030749460387626604 visible ontop" href="http://www.youtube.com/v/bfgO-LXGpTM&amp;amp;hl=en"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-0030749460387626604 visible ontop" href="http://www.youtube.com/v/bfgO-LXGpTM&amp;amp;hl=en"&gt;&lt;/a&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/bfgO-LXGpTM&amp;amp;hl=en"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/bfgO-LXGpTM&amp;amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;As you can see the development process is way faster than the development process of lets say &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is a video of the introduction of app:&lt;br /&gt;&lt;br /&gt;&lt;a style="left: 0px ! important; top: 15px ! important;" title="Click here to block this object with Adblock Plus" class="abp-objtab-0030749460387626604 visible ontop" href="http://www.youtube.com/v/3Ztr-HhWX1c"&gt;&lt;/a&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/3Ztr-HhWX1c"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/3Ztr-HhWX1c" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I already have an account and will experiment with in the near future.&lt;br /&gt;BTW This is a real cool way to start working with &lt;a href="http://www.djangoproject.com"&gt;Django&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3504073133976639188-8672695437524683252?l=rofl.jobiroxa.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://rofl.jobiroxa.com/feeds/8672695437524683252/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3504073133976639188&amp;postID=8672695437524683252" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/8672695437524683252?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/8672695437524683252?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/rolfstjobiroxa/~3/wGOH-xkVknw/google-app-engine.html" title="Google app engine" /><author><name>Rolf Strijdhorst</name><uri>http://www.blogger.com/profile/07626013407256435126</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01314905096045635405" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://rofl.jobiroxa.com/2008/04/google-app-engine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEGQ30_cSp7ImA9WxZQFko.&quot;"><id>tag:blogger.com,1999:blog-3504073133976639188.post-8209472902107117627</id><published>2008-02-19T20:57:00.008+01:00</published><updated>2008-02-22T11:03:42.349+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-22T11:03:42.349+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GTD" /><title>Getting Things Done</title><content type="html">Today I went to attend a course in task management or better yet on how to order the way to handle input.&lt;br /&gt;The mechanism that was offered on how to manage the information input, was by using the system Getting Things Done by David Allen (GTD). All in all a very practical way.&lt;br /&gt;The course offered a few steps to follow, to get to a realistic task management system in order.&lt;br /&gt;&lt;br /&gt;I attended this course by advice from a colleague of mine so I didn't really know what to expect (I can often follow his advice blindly). But during the morning I found out that most of the things I learned how to use, I already had noticed somewhere else reading the site &lt;a href="http://www.lifehacker.com/"&gt;Lifehacker.com&lt;/a&gt;&lt;br /&gt;and the book by the same name and some of these things I already used but not in a way most practical.&lt;br /&gt;&lt;br /&gt;The promise they made is: when you practice their methods in ordering your electronic and conventional input like they suggested you will get a clear head free from nagging voices from your subconscious.&lt;br /&gt;&lt;br /&gt;There was also demo of a tool they used in  their  documentation writing or email writing and adding items to your outlook or opening websites called fingertips &lt;a href="http://www.getfingertips.com/"&gt;http://www.getfingertips.com/ &lt;/a&gt;&lt;br /&gt;This tool makes use of something that java developers using Intellij may know as live templates and eclipse users may know as templates the difference is that this tool can be used within every windows application.&lt;br /&gt;&lt;br /&gt;I'll keep you posted on my experiences&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3504073133976639188-8209472902107117627?l=rofl.jobiroxa.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://rofl.jobiroxa.com/feeds/8209472902107117627/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3504073133976639188&amp;postID=8209472902107117627" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/8209472902107117627?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3504073133976639188/posts/default/8209472902107117627?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/rolfstjobiroxa/~3/P-M-KqltU88/getting-things-done.html" title="Getting Things Done" /><author><name>rolfst</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://rofl.jobiroxa.com/2008/02/getting-things-done.html</feedburner:origLink></entry></feed>
