<?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-12136186</id><updated>2011-12-18T23:58:44.794-08:00</updated><category term='leopard'/><category term='OS X'/><title type='text'>jgchristopher blog</title><subtitle type='html'>Family...Life...Development</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12136186.post-6225308788620807817</id><published>2007-10-29T15:46:00.000-07:00</published><updated>2007-10-29T15:57:15.554-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='leopard'/><title type='text'>Subversion with Apache on Leopard - Extremely simple</title><content type='html'>Leopard has subversion (client/server) already installed!!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I had a subversion server running on Tiger and I wanted to do a clean install of Leopard so, I used the hotbackup.py file to backup things.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After installing Leopard, my subversion server was my first priority. To my surprise, it was extremely simple.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Subversion is included.&lt;/div&gt;&lt;div&gt;2. Move my svn backup back onto the local disk. &lt;/div&gt;&lt;div&gt;3. chmod -R www:www the directory.&lt;/div&gt;&lt;div&gt;4. edit /etc/apache2/httpd.conf adding a line withLoadModule dav_svn_module libexec/apache2/mod_dav_svn.so&lt;/div&gt;&lt;div&gt;5. add a svnlocation.conf file under /etc/apache2/other dir. something like ...&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;&lt;code&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&amp;lt;Location&amp;gt;&lt;location&gt;&lt;/location&gt;&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;DAV svn&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;SVNPath /usr/local/svn&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&amp;lt;/Location&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;6. System Preferences/Sharing/Web Sharing - checked&lt;/div&gt;&lt;div&gt;7. Safari -&gt; http://localhost/svn&lt;/div&gt;&lt;div&gt;8. Smile :) &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-6225308788620807817?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/6225308788620807817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=6225308788620807817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/6225308788620807817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/6225308788620807817'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2007/10/subversion-with-apache-on-leopard.html' title='Subversion with Apache on Leopard - Extremely simple'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-114732695098651654</id><published>2006-05-10T22:54:00.000-07:00</published><updated>2006-05-10T22:55:51.006-07:00</updated><title type='text'>Moved</title><content type='html'>For any one who cares, this blog has moved to... &lt;a href="http://www.jgchristopher.com/blog/"&gt;http://www.jgchristopher.com/blog/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-114732695098651654?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/114732695098651654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=114732695098651654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/114732695098651654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/114732695098651654'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2006/05/moved.html' title='Moved'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-113494965793332992</id><published>2005-12-18T15:24:00.000-08:00</published><updated>2005-12-18T16:43:19.730-08:00</updated><title type='text'>Symfony - Testing made easy</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;While working on a new project using &lt;a href="http://www.symfony-project.com/"&gt;symfony&lt;/a&gt;, I began to setup my test environment. Symfony makes this extremely easy as it has a &lt;a href="http://www.symfony-project.com/askeet/15"&gt;built in mechanism to run tests&lt;/a&gt; that will validate your routing among other things. The one thing that the built in symfony testing currently doesn't do , is allow for testing of form submissions. &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;No worries though, the symfony test suite allows you to build tests extending &lt;a href="http://www.lastcraft.com/web_tester_documentation.php"&gt;SimpleTest's WebTestCase&lt;/a&gt; which, has support for form submissions. I needed this functionality and while I could have easily used &lt;a href="http://www.openqa.org/selenium/"&gt;Selenium&lt;/a&gt;, I like being able to run all of my tests using one simple command `symfony test  This was extremely useful in testing my authentication routines to make sure that a valid user could login and logout.&lt;/p&gt;&lt;p&gt;Key to any test is test data. Symfony also provides an great way to &lt;a href="http://www.symfony-project.com/askeet/3"&gt;define test data with data fixtures&lt;/a&gt; (note: this can also be used to initialize a new install with necessary default data). You can then specify a batch script in the `batch/` directory and simply run it from the command line.&lt;/p&gt;&lt;p&gt;I wanted to make sure that I used controlled data for my tests, so I set up a separate test database and &lt;a href="http://www.symfony-project.com/content/book/page/model.html"&gt;configured symfony&lt;/a&gt; to use this database for my tests. I didn't want to have to create a new load script to load this data for my different databases so, I simply added the ability to specify a command line argument to set what database to populate. Now the environment can be specified like so `php load_data.php test`.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt; &amp;lt;?php&lt;br /&gt;&lt;br /&gt;$env ='dev';&lt;br /&gt;&lt;br /&gt;if( isset($argv[1]))&lt;br /&gt;{&lt;br /&gt; $env= $argv[1];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;echo "Loading data into $env data base \n";&lt;br /&gt;&lt;br /&gt;define('SF_ROOT_DIR', realpath(dirname(__FILE__).'/..'));&lt;br /&gt;define('SF_APP', 'blogs');&lt;br /&gt;define('SF_ENVIRONMENT', $env);&lt;br /&gt;define('SF_DEBUG', true);&lt;br /&gt;&lt;br /&gt;require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');&lt;br /&gt;&lt;br /&gt;$data = new sfPropelData();&lt;br /&gt;$data-&gt;loadData(SF_DATA_DIR.DIRECTORY_SEPARATOR.'fixtures');&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;Now, thanks to symfony and simpletest, I can run my Unit and Functional tests from a single command which I think is extremely convenient.&lt;p style="font-size: 10px; text-align: right;"&gt;technorati tags: &lt;a href="http://technorati.com/tag/php" rel="tag"&gt;php&lt;/a&gt;, &lt;a href="http://technorati.com/tag/%20symfony" rel="tag"&gt; symfony&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-113494965793332992?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/113494965793332992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=113494965793332992' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113494965793332992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113494965793332992'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/12/symfony-testing-made-easy.html' title='Symfony - Testing made easy'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-113346331912212843</id><published>2005-12-01T10:53:00.000-08:00</published><updated>2005-12-01T10:59:10.900-08:00</updated><title type='text'>Symfony's tutorial begins</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;center&gt;&lt;img src="http://www.symfony-project.com/images/askeet_logo.gif"/&gt;&lt;/center&gt;&lt;p class="citation"&gt;&lt;cite cite="http://www.symfony-project.com/askeet/1"&gt;&lt;a href="http://www.symfony-project.com/askeet/1"&gt;symfony PHP5 framework  symfony advent calendar day one: starting up a project&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;&lt;p class="citation"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-style: italic;"/&gt;&lt;/span&gt;Day one is out!&lt;br/&gt;&lt;cite cite="http://www.symfony-project.com/askeet/1"/&gt;&lt;/p&gt;&lt;p style="font-size:10px;text-align:right;"&gt;technorati tags: &lt;a href="http://technorati.com/tag/symfony" rel="tag"&gt;symfony&lt;/a&gt;, &lt;a href="http://technorati.com/tag/php" rel="tag"&gt;php&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-113346331912212843?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/113346331912212843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=113346331912212843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113346331912212843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113346331912212843'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/12/symfonys-tutorial-begins.html' title='Symfony&apos;s tutorial begins'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-113341567366767810</id><published>2005-11-30T21:39:00.000-08:00</published><updated>2005-11-30T21:41:13.676-08:00</updated><title type='text'>Symfony's answer...</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://feh.holsman.net/articles/2005/11/10/what-kind-of-developer-are-you"&gt;What does your framework say about you?&lt;/a&gt; &lt;br/&gt;&lt;br/&gt;&lt;p&gt;I believe a quote from someone else best answers this question...&lt;/p&gt;"Progress isn't made by early risers. It's made by lazy men trying to find easier ways to do something."&lt;br/&gt; Robert Heinlein&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style="font-size:10px;text-align:right;"&gt;technorati tags: &lt;a href="http://technorati.com/tag/symfony" rel="tag"&gt;symfony&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ php" rel="tag"&gt; php&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-113341567366767810?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/113341567366767810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=113341567366767810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113341567366767810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113341567366767810'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/11/symfonys-answer.html' title='Symfony&apos;s answer...'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-113341470151535931</id><published>2005-11-30T21:17:00.000-08:00</published><updated>2005-11-30T21:25:58.460-08:00</updated><title type='text'>Developer for Symfony</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I was very happy to learn today that I have been included as a developer for the &lt;a href="http://www.symfony-project.com"&gt;symfony framework&lt;/a&gt;. I was originally just doing some documentation but I began to get invested in the framework and started sending in some patches. &lt;br/&gt;&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Tomorrow is the big day for the Month long tutorial at &lt;a href="http://www.askeet.com"&gt;Askeet.com&lt;/a&gt;. I think it is a great idea and it will be a great way to bring new users up to speed quickly.&lt;/p&gt;&lt;p&gt;I have spent the last few months in Java land and symfony has rejuvenated my interest in Php.&lt;br/&gt;&lt;/p&gt;&lt;p style="font-size:10px;text-align:right;"&gt;technorati tags: &lt;a href="http://technorati.com/tag/php" rel="tag"&gt;php&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ web2.0" rel="tag"&gt; web2.0&lt;/a&gt;, &lt;a href="http://technorati.com/tag/symfony" rel="tag"&gt;symfony&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-113341470151535931?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/113341470151535931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=113341470151535931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113341470151535931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113341470151535931'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/11/developer-for-symfony.html' title='Developer for Symfony'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-113323702687619618</id><published>2005-11-28T19:55:00.000-08:00</published><updated>2005-11-28T20:03:46.886-08:00</updated><title type='text'>Symfony - Month long tutorial</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;The &lt;a href="http://www.symfony-project.com"&gt;Symfony project&lt;/a&gt; will be releasing a tutorial that will build a real world application to be released with an open source license upon completion.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;While the details of what the application will be have not been released, it will include AJAX functionality, along with social aspects including tagging. &lt;a href="http://www.askeet.com" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank"&gt;http://www.askeet.com&lt;/a&gt;&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Each day between Dec 1st and Christmas, a daily tutorial will be released describing the development process of the application. This is to help fast track developers with the symfony framework while producing an application that can be used as a proof of concept for server load and scalability.&lt;/p&gt;Check out &lt;big&gt;&lt;big&gt;&lt;a href="http://www.askeet.com" style="font-weight: bold; font-style: italic;"&gt;Askeet!&lt;/a&gt;&lt;/big&gt;&lt;/big&gt; on Dec 1st!&lt;br/&gt;&lt;p style="font-size:10px;text-align:right;"&gt;technorati tags: &lt;a href="http://technorati.com/tag/symfony" rel="tag"&gt;symfony&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ php" rel="tag"&gt; php&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ ajax" rel="tag"&gt; ajax&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-113323702687619618?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/113323702687619618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=113323702687619618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113323702687619618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113323702687619618'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/11/symfony-month-long-tutorial.html' title='Symfony - Month long tutorial'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-113206641954964319</id><published>2005-11-15T06:45:00.000-08:00</published><updated>2005-11-15T06:54:58.066-08:00</updated><title type='text'>Now Zend wants to play</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;blockquote cite="http://www.zend.com/collaboration/framework-overview.php"&gt;Definition&lt;br/&gt;Zend PHP Framework - (zênd p-h-p frãme'wûrk)    * A Web application framework which standardizes the way PHP applications are built. The Zend PHP Framework accelerates and improves the development and deployment of mission-critical PHP Web applications.    * Extreme Simplicity&lt;/blockquote&gt;&lt;p class="citation"&gt;&lt;cite cite="http://www.zend.com/collaboration/framework-overview.php"&gt;&lt;a href="http://www.zend.com/collaboration/framework-overview.php"&gt;PHP Collaboration Project&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;&lt;p&gt;I remember at last years &lt;span class="hm" id="misp_compose_2"&gt;ApacheCon&lt;/span&gt; in Vegas, I spoke with a &lt;span class="hm" id="misp_compose_3"&gt;Zend&lt;/span&gt;&lt;br /&gt;representative after he gave a talk on PHP5 features, I asked if &lt;span class="hm" id="misp_compose_4"&gt;Zend&lt;/span&gt;&lt;br /&gt;would be developing a web framework for &lt;span class="hm" id="misp_compose_5"&gt;PHP&lt;/span&gt;. The response I received&lt;br /&gt;was along the lines of "No. Why would we? We help to develop the&lt;br /&gt;language. Frameworks, if needed, will be provided by others."&lt;/p&gt;&lt;p&gt;I guess they changed their mind.&lt;br/&gt;&lt;/p&gt;&lt;p style="font-size:10px;text-align:right;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/php" rel="tag"&gt;php&lt;/a&gt;, &lt;a href="http://technorati.com/tag/framework" rel="tag"&gt;framework&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-113206641954964319?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/113206641954964319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=113206641954964319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113206641954964319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113206641954964319'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/11/now-zend-wants-to-play.html' title='Now Zend wants to play'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-113150636945779707</id><published>2005-11-08T19:11:00.000-08:00</published><updated>2005-11-08T19:19:29.493-08:00</updated><title type='text'>And the Symfony/Rails war begins....</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;blockquote cite="http://digg.com/programming/Nice_AJAX_Framework_for_PHP"&gt;Nice AJAX Framework for PHPjhowe submitted by jhowe 7 hours 41 minutes ago (via http://www.symfony-project.com...)Based on the best practices of web development, thoroughly tried on several active websites, symfony aims to speed up the creation and maintenance of web applications, and to replace the repetitive coding tasks by power, control and pleasure.&lt;/blockquote&gt;&lt;p class="citation"&gt;&lt;cite cite="http://digg.com/programming/Nice_AJAX_Framework_for_PHP"&gt;&lt;a href="http://digg.com/programming/Nice_AJAX_Framework_for_PHP"&gt;Nice AJAX Framework for PHP&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;&lt;p&gt;I didn't think it would take long before the &lt;a href="http://www.symfony-project.com"&gt;Symfony&lt;/a&gt;/&lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt; argument would begin. &lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;I really don't think there should be an argument. There is a language for every time and place. If you are more comfortable working with Ruby and you have an environment that supports/allows it, then go for it. If you are a Php programmer and want to make the most of your time, check out Symfony.&lt;br/&gt;&lt;/p&gt;&lt;p&gt;If you are bi-lingual then enjoy the best of both worlds!! Be aware though, Symfony is not Rails! While inspired by Rails, it doesn't mimic every aspect of it.&lt;br/&gt;&lt;/p&gt;&lt;p&gt;I really believe that this is the Php framework if you want to continue to use the request-based paradigm. If you are an event driven person then check out &lt;a href="http://www.xisc.com/"&gt;Prado&lt;/a&gt;.&lt;br/&gt;&lt;/p&gt;&lt;p style="font-size:10px;text-align:right;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/Symfony" rel="tag"&gt;Symfony&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ Rails" rel="tag"&gt; Rails&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Php" rel="tag"&gt;Php&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Ruby" rel="tag"&gt;Ruby&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-113150636945779707?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/113150636945779707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=113150636945779707' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113150636945779707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113150636945779707'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/11/and-symfonyrails-war-begins.html' title='And the Symfony/Rails war begins....'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-113081475159837323</id><published>2005-10-31T19:02:00.000-08:00</published><updated>2005-10-31T19:14:13.226-08:00</updated><title type='text'>Symfony integrates AJAX</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://flickr.com/photos/96501332@N00/58324323" title="undefined"&gt;&lt;img alt="Flickr Photo" src="http://photos30.flickr.com/58324323_91aad947b2_m.jpg"/&gt;&lt;/a&gt;&lt;a href="http://flickr.com/photos/96501332@N00/58324325" title="undefined"&gt;&lt;img alt="Flickr Photo" src="http://photos26.flickr.com/58324325_0df985a008_m.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.symfony-project.com/demo/"&gt;See Demo's&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;The Symfony project has added built AJAX support (available in the svn&lt;br /&gt;repository). Having these built in options will help developers&lt;br /&gt;integrate rich client functionality seamlessly and effortlessly,&lt;br /&gt;following the ease of development motto of Symfony.&lt;/p&gt;&lt;p style="font-size:10px;text-align:right;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/Symfony" rel="tag"&gt;Symfony&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ php" rel="tag"&gt; php&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ AJAX" rel="tag"&gt; AJAX&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-113081475159837323?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/113081475159837323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=113081475159837323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113081475159837323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113081475159837323'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/10/symfony-integrates-ajax.html' title='Symfony integrates AJAX'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-113029716654397131</id><published>2005-10-25T20:14:00.000-07:00</published><updated>2005-10-25T20:26:06.566-07:00</updated><title type='text'>Symfony - Php's answer to Rails</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://flickr.com/photos/96501332@N00/56174768" title="undefined"&gt;&lt;img alt="Flickr Photo" src="http://photos27.flickr.com/56174768_2403cbf101_m.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I began to get acquainted with &lt;a href="http://www.symfony-project.com"&gt;Symfony&lt;/a&gt; tonight and I am liking what I see so far. I really like the concept of fast, easy development that &lt;a href="http://www.rubyonrails.org/"&gt;Rails&lt;/a&gt; delivers but, there is one thing that has been holding me back from jumping in... I don't know Ruby. I am learning but, I am happy to see an alternative in a language that I am very comfortable in, Php5.&lt;br/&gt;&lt;/p&gt;&lt;p&gt;While following the tutorial on their website, I really like what they have done for the dev mode of working on the application. Symfony has a nice little info sidebar that gives you quick information about the configuration of the application.&lt;br/&gt;&lt;/p&gt;&lt;p&gt;As seen in the image, it has generated some CRUD scaffolding for a blog much like Rails. While this generated code will need to be modified, I don't see anything wrong with setting a nice start for some processes.&lt;/p&gt;&lt;p style="font-size:10px;text-align:right;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/php" rel="tag"&gt;php&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ Symfony" rel="tag"&gt; Symfony&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-113029716654397131?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/113029716654397131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=113029716654397131' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113029716654397131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113029716654397131'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/10/symfony-phps-answer-to-rails.html' title='Symfony - Php&apos;s answer to Rails'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-113008572936351066</id><published>2005-10-23T09:26:00.000-07:00</published><updated>2005-10-23T09:43:25.930-07:00</updated><title type='text'>AJAX - Why use XML?</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;blockquote cite="http://web2.wsj2.com/5_earthshattering_things_you_should_know_about_ajax_and_prob.htm"&gt;"1) Ajax and XML, A Match Made by Acronym - Ajax and XML actually aren't necessary for Ajax. No, not at all. Ajax actually prefers JSON! What the heck is JSON you ask? It's the JavaScript Object Notation. It's a much better way to transfer and parse data over lightweight HTTP services. Waaaay better than XML/HTTP, REST, or even, god forbid, SOAP. Don't even ask about WS-*. Don't believe me? Then read the docs on the eval() function in JavaScript. Good, huh?. Next test: Try to send lists of data in XML to your Ajax client and not get tired out writing the (inevitably buggy) DOM navigation code. You'll switch to JSON. Your HTTP service developers will thank you. And everyone will be happy. Well, except folks that want interoperability and performance over ease of programming. Those obviously picky folks should just stick with XML, particularly if they've already heard of it."&lt;/blockquote&gt;&lt;p class="citation"&gt;&lt;cite cite="http://web2.wsj2.com/5_earthshattering_things_you_should_know_about_ajax_and_prob.htm"&gt;&lt;a href="http://web2.wsj2.com/5_earthshattering_things_you_should_know_about_ajax_and_prob.htm"&gt;5 Earth-Shattering Things You Should Know About Ajax And Probably Don't (web2.wsj2.com)&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;&lt;p&gt;In his blog, Dion Hinchcliffe, brings up a point that I have been fighting, and probably will continue fighting, at work. Currently, a lot of our stuff is being pulled from a DB (tabular format), marshalled into XML (Castor), returned to client via XHR, and then parsed and formated for tabular display, via JS, on the client. This seems like a total waste to me. Not only are we doing an unneccesary transfer to XML, each client is left to format the data (setting decimal places, rounding data, etc...).&lt;br/&gt;&lt;/p&gt;&lt;p&gt;My point of view is to grab the data from the DB, have a common library to format the data, it is weather data, and then use a templating system, &lt;a href="http://jakarta.apache.org/velocity/index.html"&gt;Velocity&lt;/a&gt; in our case since we are dealing with Java, and return Javascript objects to the be eval()'ed on the client. No more needless XML junk in the middle.&lt;br/&gt;&lt;/p&gt;&lt;p&gt;As for &lt;a href="http://www.crockford.com/JSON/index.html"&gt;JSON&lt;/a&gt;, I haven't looked at it enough to decide its usefulness. What is different than just passing data into a templating system to build a normal JavaScript object?&lt;br/&gt;&lt;/p&gt;&lt;p style="font-size:10px;text-align:right;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/ajax" rel="tag"&gt;ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ javascript" rel="tag"&gt; javascript&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-113008572936351066?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/113008572936351066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=113008572936351066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113008572936351066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/113008572936351066'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/10/ajax-why-use-xml.html' title='AJAX - Why use XML?'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112999312145292132</id><published>2005-10-22T07:54:00.000-07:00</published><updated>2005-10-22T07:58:41.470-07:00</updated><title type='text'>Php web framework</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;blockquote cite="http://www.symfony-project.com/"&gt;symfony is an open-source PHP5 web frameworkprofessional web tools for lazy folks&lt;/blockquote&gt;&lt;p class="citation"&gt;&lt;cite cite="http://www.symfony-project.com/"&gt;&lt;a href="http://www.symfony-project.com/"&gt;symfony - open-source PHP5 web framework&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;&lt;p&gt;I am looking forward to playing with this Php5 framework I recently found. I haven't been doing much with Php and I want to shake off some of the rust. Before I got my current job, I was looking into writing a book on some of the Php frameworks that have started to show up. Now that things are slowing down, maybe I will start that project back up. &lt;br/&gt;&lt;/p&gt;&lt;p&gt;After looking at the documentation and the website, I am seeing some familiar words like, &lt;span style="font-weight: bold;"&gt;YAML&lt;/span&gt; configuration and &lt;span style="font-weight: bold;"&gt;scaffolding&lt;/span&gt;. Is this Php's answer to Rails? &lt;br/&gt;&lt;/p&gt;&lt;p style="font-size:10px;text-align:right;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/PHP" rel="tag"&gt;PHP&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ web framework" rel="tag"&gt; web framework&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112999312145292132?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112999312145292132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112999312145292132' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112999312145292132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112999312145292132'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/10/php-web-framework.html' title='Php web framework'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112977056951060853</id><published>2005-10-19T18:08:00.000-07:00</published><updated>2005-10-19T18:09:29.513-07:00</updated><title type='text'>From Flock</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I posted my last blog with Flock. So far, I am impressed! I really like the bookmarks integration with del.icio.us&lt;br/&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112977056951060853?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112977056951060853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112977056951060853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112977056951060853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112977056951060853'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/10/from-flock.html' title='From Flock'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112975270065023408</id><published>2005-10-19T08:09:00.000-07:00</published><updated>2005-11-26T08:21:46.446-08:00</updated><title type='text'>On Demand AJAX and Templates</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;On most of my recent Java projects, I have been consistent in using&lt;br /&gt;&lt;span class="hm" id="misp_compose_1"&gt;DWR&lt;/span&gt;, which is a great framework that is easy to use and quick to get&lt;br /&gt;started with. On my recent trials, I had to prepare some of our&lt;br /&gt;&lt;span class="hm" id="misp_compose_2"&gt;portlets&lt;/span&gt; to work on a Pocket PC browser (Internet Explorer).&lt;br /&gt;Considering that our &lt;span class="hm" id="misp_compose_3"&gt;portlets&lt;/span&gt; depend on AJAX, I knew I was in for a treat.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I tried to use &lt;span class="hm" id="misp_compose_4"&gt;DWR&lt;/span&gt; but, it was throwing some object errors. Given I&lt;br /&gt;was on a very, very tight schedule, I couldn't try and debug the&lt;br /&gt;situation at that time. I reverted to rolling my own &lt;span class="hm" id="misp_compose_5"&gt;XHR&lt;/span&gt; solution which&lt;br /&gt;turned out to be rather flexible.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I decided that I didn't want to deal with &lt;span class="hm" id="misp_compose_6"&gt;marshalling&lt;/span&gt;, passing, and&lt;br /&gt;parsing XML, that is why I wanted to use &lt;span class="hm" id="misp_compose_7"&gt;DWR&lt;/span&gt; in the first place,&lt;br /&gt;passing and parsing plain text would be just as bad. So what are my&lt;br /&gt;options left. I decided to pass a JavaScript object, built by a &lt;span class="hm" id="misp_compose_9"&gt;servlet&lt;/span&gt;&lt;br /&gt;on the back end, back to the client. The client simply passes the&lt;br /&gt;&lt;span class="hm" id="misp_compose_11"&gt;responseText&lt;/span&gt; to &lt;span class="hm" id="misp_compose_12"&gt;eval&lt;/span&gt;() and "&lt;span class="hm" id="misp_compose_13"&gt;Wala&lt;/span&gt;" the data is now a convenient Javascript&lt;span class="hm" id="misp_compose_15"&gt; bean&lt;br /&gt;that contains the needed data.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To get around the ugly part, creating the JavaScript object on the&lt;br /&gt;back end, I decided to create templates of my JavaScript objects using&lt;br /&gt;Velocity. This was great! &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; - Receive request&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; - Do some business logic&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; - Initialize Velocity and fill the context&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; - merge the template and pass it back in the response&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Very clean and easy to do. I am going to look into replacing my &lt;span class="hm" id="misp_compose_19"&gt;XHR&lt;/span&gt;&lt;br /&gt;&lt;span class="hm" id="misp_compose_20"&gt;js&lt;/span&gt; code and replace it with a &lt;span class="hm" id="misp_compose_21"&gt;dojo&lt;/span&gt; install that only has the IO&lt;br /&gt;functionality in it. I have been playing with it and it rocks. I like&lt;br /&gt;that you can choose to &lt;span class="hm" id="misp_compose_22"&gt;eval&lt;/span&gt; the return.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This can also be accomplished in other languages as well. I started doing the same thing with &lt;span class="hm" id="misp_compose_23"&gt;PHP&lt;/span&gt;, &lt;span class="hm" id="misp_compose_24"&gt;Dojo&lt;/span&gt;, and Smarty templates!&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112975270065023408?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112975270065023408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112975270065023408' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112975270065023408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112975270065023408'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/10/on-demand-ajax-and-templates.html' title='On Demand AJAX and Templates'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112925620597088346</id><published>2005-10-13T19:16:00.000-07:00</published><updated>2005-10-13T19:16:46.013-07:00</updated><title type='text'>remembermilk - signup</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/96501332@N00/52292609/" title="photo sharing"&gt;&lt;img src="http://static.flickr.com/32/52292609_216857ab06_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/96501332@N00/52292609/"&gt;remembermilk&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href="http://www.flickr.com/people/96501332@N00/"&gt;wimsycal&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;The signup page for "remember the milk" is great! I really like the fact that it checks if the username you are requesting is available as you type. It also marks the password fields as matching while you type. I have been thinking that this would work well as it saves some headaches when trying to signup for a site only to find out that the username is taken or the passwords don't match.&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112925620597088346?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112925620597088346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112925620597088346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112925620597088346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112925620597088346'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/10/remembermilk-signup.html' title='remembermilk - signup'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112835432650037352</id><published>2005-10-03T08:45:00.000-07:00</published><updated>2005-10-03T08:48:45.270-07:00</updated><title type='text'>The top 10 things that aren't Web 2.0 - Signal vs. Noise (by 37signals)</title><content type='html'>Web 2.0 is about collaboration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112835432650037352?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112835432650037352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112835432650037352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112835432650037352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112835432650037352'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/10/top-10-things-that-arent-web-20-signal.html' title='The top 10 things that aren&apos;t Web 2.0 - Signal vs. Noise (by 37signals)'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112829574157088868</id><published>2005-10-02T16:29:00.000-07:00</published><updated>2005-10-02T16:29:01.606-07:00</updated><title type='text'>Manage your life with Subversion</title><content type='html'>I actually did something similar to this for my wife a few weeks ago. She was constantly loosing data so I thought Subversion would be a great way to back her stuff up. Now she can simply do a commit on her backed up directories to make sure her data is safe.&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.onlamp.com/pub/a/onlamp/2005/01/06/svn_homedir.html"&gt;read more&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://digg.com/software/Manage_your_life_with_Subversion"&gt;digg story&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112829574157088868?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112829574157088868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112829574157088868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112829574157088868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112829574157088868'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/10/manage-your-life-with-subversion.html' title='Manage your life with Subversion'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112701595246326014</id><published>2005-09-17T20:52:00.000-07:00</published><updated>2005-09-17T21:01:34.780-07:00</updated><title type='text'>Cheap Dependency Injection with Struts Chain</title><content type='html'>I recently found a situation where I wanted to change some inheritance into delegation for a Struts Action class. I needed to create a base delegate class to hold the common information that my struts actions needed. Struts chains was already being used so, I simply added an interface defining a setter for the base delegate object. In an object that was monitoring via the struts chain, I check to see if the action being called implements the Delegate Interface and if it does, I call its setter with a new Delegate Object. I have to say that even though I really don't care for struts, the Struts Chain is pretty cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112701595246326014?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112701595246326014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112701595246326014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112701595246326014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112701595246326014'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/09/cheap-dependency-injection-with-struts.html' title='Cheap Dependency Injection with Struts Chain'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112640988634206330</id><published>2005-09-10T20:09:00.000-07:00</published><updated>2005-09-10T20:38:06.360-07:00</updated><title type='text'>KUbuntu configuration tidbits</title><content type='html'>KUbuntu configurations:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;KDM theme - Place the theme data where ever you like, then edit /etc/kde3/kdm/kdmrc and change the Theme line to point to your new theme&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112640988634206330?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112640988634206330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112640988634206330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112640988634206330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112640988634206330'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/09/kubuntu-configuration-tidbits.html' title='KUbuntu configuration tidbits'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112610967456423121</id><published>2005-09-07T09:12:00.000-07:00</published><updated>2005-09-07T09:14:34.566-07:00</updated><title type='text'>First Day of School</title><content type='html'>My oldest son had his first day of Kindergarten yesterday. He was extremely excited and had a good time. He already has a girl friend which only solidifies my assumptions that he was going to be a ladies man. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112610967456423121?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112610967456423121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112610967456423121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112610967456423121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112610967456423121'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/09/first-day-of-school.html' title='First Day of School'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112580047428207594</id><published>2005-09-03T19:19:00.000-07:00</published><updated>2005-09-03T19:21:14.283-07:00</updated><title type='text'>I feel useful</title><content type='html'>I feel really useful today. I actually changed the faucet in my kids bathroom. The old one was leaking and was old so, I decided to change it out for a new one. I know it isn't much but, I am usually pretty useless when it comes to stuff like that. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112580047428207594?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112580047428207594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112580047428207594' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112580047428207594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112580047428207594'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/09/i-feel-useful.html' title='I feel useful'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112571865018348660</id><published>2005-09-02T20:33:00.000-07:00</published><updated>2005-09-02T20:37:30.183-07:00</updated><title type='text'>Missing my family</title><content type='html'>My beautiful wife and kids have taken a trip to sunny (hot) California to enroll my oldest son into school so he can then return and go to school here in Nebraska. Sound odd? It is and its a long story.&lt;br /&gt;&lt;br /&gt;Anyways, tonight when I was talking to my family on the phone, my youngest son did nothing but repeat "I luv u daddy".&lt;br /&gt;&lt;br /&gt;Boy do I miss them!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112571865018348660?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112571865018348660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112571865018348660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112571865018348660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112571865018348660'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/09/missing-my-family.html' title='Missing my family'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112571834472284789</id><published>2005-09-02T20:20:00.000-07:00</published><updated>2005-09-02T20:32:24.730-07:00</updated><title type='text'>Ruby on Rails - Editing multiple rows of data on one form</title><content type='html'>I think I may have poorly chosen my first application to learn Rails or maybe not...&lt;br /&gt; &lt;br /&gt;  I am trying to set up some simple profit-loss reports for our store Natures Paws.&lt;br /&gt; &lt;br /&gt;  Working with a legacy schema with Rails has been challenging but, I still have found Rails pleasing to use. Tonight, I ran into a situation where, I wanted to be able to update multiple line items in an order and update the model with this data. Rails was able to handle this so easily once I figured out what to do. (Thanks to the &lt;span id="misp_compose_1" class="hm"&gt;params&lt;/span&gt; hash dump shown on a Ruby exception page, I was able to figure out what I was doing wrong).&lt;br /&gt; &lt;br /&gt;  So, if a view has some code, iterating through some line items (each a row in a database table), like so&lt;br /&gt; &lt;br /&gt;  &lt;code&gt;&lt;br /&gt;  &lt;% for @line in @profit_report.report_lines %&gt;&lt;br /&gt;    &lt;tr&gt;&lt;br /&gt;      &lt;th&gt;&lt;%= h @line.product_name %&gt;&lt;/th&gt;&lt;br /&gt;      &lt;td&gt;&lt;%= text_field("line[]", 'wholesale_price', :size =&gt; 4, :&lt;span id="misp_compose_2" class="hm"&gt;maxsize&lt;/span&gt; =&gt; 4, :&lt;span id="misp_compose_3" class="hm"&gt;onchange&lt;/span&gt; =&gt; '&lt;span id="misp_compose_4" class="hm"&gt;updateWholeSaleTotal&lt;/span&gt;(this.value);') %&gt;&lt;/td&gt;&lt;br /&gt;      &lt;td&gt;&lt;%= text_field("line[]", 'ourshipping_price', :size =&gt; 4, :&lt;span id="misp_compose_5" class="hm"&gt;maxsize&lt;/span&gt; =&gt; 4) %&gt;&lt;/td&gt;&lt;br /&gt;      &lt;td&gt;&lt;%= h @line.customer_price %&gt;&lt;/td&gt;&lt;br /&gt;      &lt;td&gt;&lt;%= h @line.customer_shipping_price %&gt;&lt;/td&gt;&lt;br /&gt;      &lt;td&gt;&lt;%= text_field("line[]", 'usps_price', :size =&gt; 4, :&lt;span id="misp_compose_6" class="hm"&gt;maxsize&lt;/span&gt; =&gt; 4) %&gt;&lt;/td&gt;&lt;br /&gt;      &lt;td&gt;&lt;%= h @line.commission_paid %&gt;&lt;/td&gt;&lt;br /&gt;      &lt;td&gt; &lt;/td&gt;&lt;br /&gt;    &lt;/tr&gt;&lt;br /&gt;  &lt;% end %&gt;&lt;br /&gt;  &lt;/code&gt;&lt;br /&gt; &lt;br /&gt;  Then the Controller code can then update each lines in the model like so...&lt;br /&gt; &lt;br /&gt;  &lt;code&gt;&lt;br /&gt;      @&lt;span id="misp_compose_7" class="hm"&gt;params&lt;/span&gt;[:line].each do |&lt;span id="misp_compose_8" class="hm"&gt;idx&lt;/span&gt;, line|&lt;br /&gt;        report_line = &lt;span id="misp_compose_9" class="hm"&gt;ReportLine&lt;/span&gt;.find(&lt;span id="misp_compose_10" class="hm"&gt;idx&lt;/span&gt;)&lt;br /&gt;        report_line.update_attributes(line)&lt;br /&gt;      end&lt;br /&gt;  &lt;/code&gt;&lt;br /&gt; &lt;br /&gt;  I have to say that is pretty sweet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112571834472284789?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112571834472284789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112571834472284789' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112571834472284789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112571834472284789'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/09/ruby-on-rails-editing-multiple-rows-of.html' title='Ruby on Rails - Editing multiple rows of data on one form'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112550341623848147</id><published>2005-08-31T08:32:00.000-07:00</published><updated>2005-09-07T09:12:12.950-07:00</updated><title type='text'>My only gripes with KUbuntu Linux</title><content type='html'>I recently changed my GNU/Linux distribution from &lt;span id="misp_compose_1" class="hm"&gt;Mandriva&lt;/span&gt; to &lt;span id="misp_compose_2" class="hm"&gt;KUbuntu&lt;/span&gt;. I am a &lt;span id="misp_compose_3" class="hm"&gt;KDE&lt;/span&gt; fan and was growing increasingly annoyed with how slowly &lt;span id="misp_compose_4" class="hm"&gt;Mandriva&lt;/span&gt;(Mandrake) has been updating its versions.&lt;br /&gt;&lt;br /&gt; I have been completely over joyed with &lt;span id="misp_compose_5" class="hm"&gt;KUbuntu&lt;/span&gt; since installation. It works flawlessly, and it even picks up on my thumb drive, something Mandrake has had a problem of doing in the last couple of releases.&lt;br /&gt;&lt;br /&gt; Just this last week, I have found my first couple of complaints about &lt;span id="misp_compose_7" class="hm"&gt;KUbuntu&lt;/span&gt;. These are minor points and were some what easily rectified on my end.&lt;br /&gt;&lt;br /&gt;I began to play with Ruby on Rails and, with the latest version of Rails they require the final release of Ruby 1.8.2 or higher. &lt;span id="misp_compose_8" class="hm"&gt;KUbuntu&lt;/span&gt; ships with the a version that was released just before the final so, (the latest version of) Rails didn't work out of the box. After rebuilding Ruby, and gems from scratch, I was on my way. The upcoming Breezy release will take care of this little problem.&lt;br /&gt;&lt;br /&gt;The more annoying problem, and I say annoying because I wasted a lot of time on a new project that I have become a part of, is that the &lt;span id="misp_compose_9" class="hm"&gt;MySql&lt;/span&gt; version 4.0.23 with &lt;span id="misp_compose_10" class="hm"&gt;KUbuntu&lt;/span&gt; is configured to &lt;span style="font-style: italic;"&gt;skip-&lt;span id="misp_compose_11" class="hm"&gt;innodb&lt;/span&gt; &lt;/span&gt;by default. I didn't catch this and spent some time going over unit tests that were changing values in a database, testing the values, and then rolling back all changes in the &lt;span id="misp_compose_12" class="hm"&gt;tearDown&lt;/span&gt;() method. Of course, since my &lt;span id="misp_compose_13" class="hm"&gt;MySQL&lt;/span&gt; configuration wasn't allowing &lt;span id="misp_compose_14" class="hm"&gt;innoDB&lt;/span&gt; tables, the rollbacks were not occurring and subsequent tests would fail.&lt;br /&gt;&lt;br /&gt;I finally wised up and looked at the test db creation script and noticed that data was persisting when it shouldn't have. After commenting out the offending&lt;br /&gt; skip-&lt;span id="misp_compose_15" class="hm"&gt;innodb&lt;/span&gt; line in my.&lt;span id="misp_compose_16" class="hm"&gt;cnf&lt;/span&gt; file. The unit tests magically began to work again.&lt;br /&gt;&lt;br /&gt; Not sure why &lt;span id="misp_compose_17" class="hm"&gt;Ubuntu&lt;/span&gt;/&lt;span id="misp_compose_18" class="hm"&gt;KUbuntu&lt;/span&gt; ship with &lt;span id="misp_compose_19" class="hm"&gt;innodb&lt;/span&gt; support turned off?&lt;br /&gt;&lt;br /&gt;*Update, the mysql 4.1 packages for Ubuntu/KUbuntu have innodb on by default.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112550341623848147?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112550341623848147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112550341623848147' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112550341623848147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112550341623848147'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/08/my-only-gripes-with-kubuntu-linux.html' title='My only gripes with KUbuntu Linux'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112529262440524461</id><published>2005-08-28T22:12:00.000-07:00</published><updated>2005-09-03T19:19:27.310-07:00</updated><title type='text'>Playing with Ruby on Rails</title><content type='html'>I have begun playing with Ruby on Rails. I am having a hard time mostly because I don't really know the syntax for Ruby in general so, I believe I may be trying to run before I can walk.&lt;br /&gt;&lt;br /&gt;To add to the complexity, I am working with a legacy schema (OsCommerce) so, it is slow going trying to get my model mapped out. I did start out by creating some scaffolding for a single table and working from there. So far, it seems okay but time will tell. I will voice an opinion once I have had enough time to really work with it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112529262440524461?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112529262440524461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112529262440524461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112529262440524461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112529262440524461'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/08/playing-with-ruby-on-rails.html' title='Playing with Ruby on Rails'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112510272469357330</id><published>2005-08-26T17:20:00.000-07:00</published><updated>2005-08-26T17:32:04.703-07:00</updated><title type='text'>AJAXified Natures Paws Representative Pages</title><content type='html'>My wife and I run an online pet business &lt;a href="http://www.naturespaws.com/catalog/"&gt;Natures Paws&lt;/a&gt;.&lt;br /&gt;I just finished updating the Independent Representative pages (&lt;a href="http://www.naturespaws.com/JohnChristopher/"&gt;example&lt;/a&gt;) to use some AJAX functionality. I have used AJAX techniques in my projects at work using &lt;a href="http://www.getahead.ltd.uk/dwr/"&gt;DWR&lt;/a&gt;. Our store is based upon the &lt;a href="http://www.oscommerce.com/"&gt;OsCommerce&lt;/a&gt; engine and Php so, I decided to go with &lt;a href="http://www.modernmethod.com/sajax/"&gt;SAJAX&lt;/a&gt; being that it closely resembled how DWR works.&lt;br /&gt;&lt;br /&gt;I think in the near future, I am going to refactor the site to use &lt;a href="http://dojotoolkit.org/"&gt;Dojo Toolkit&lt;/a&gt; and widgets.  Plus, it would be nice to have an all-in-one solution, from XHR to html effects in one framework.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112510272469357330?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112510272469357330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112510272469357330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112510272469357330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112510272469357330'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/08/ajaxified-natures-paws-representative.html' title='AJAXified Natures Paws Representative Pages'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-112499587926278849</id><published>2005-08-25T11:50:00.000-07:00</published><updated>2005-08-25T12:09:35.060-07:00</updated><title type='text'>PDF forms, the web, and Struts...</title><content type='html'>Have written in a while. I am going to make myself write more if not only to remind myself of things I will forget.&lt;br /&gt;&lt;br /&gt;Just finishing up some refactoring of an application that was trying to duplicate a very involved PDF form into html. The final product was then written into a PowerPoint template. It was rather nasty. I decided to keep the PDF form and just push that as the UI. Now the user will be more comfortable with editing the data considering it looks and feels more natural. Also helped to clean up the back-end data now that Fdf data is being saved rather than a rather stringy object graph.&lt;br /&gt;&lt;br /&gt;I used &lt;a href="http://www.lowagie.com/iText/"&gt;iText&lt;/a&gt; to handle the opening of, pre/re-population of form data, and streaming of PDFs to the browser. It was also the only library that would open and save our PDF templates. I tried some commercial libraries and they just wouldn't save or stream the final product. iText being open source software also makes the price more attractive.&lt;br /&gt;&lt;br /&gt;Things to note and remember about this project...&lt;br /&gt;1. You can't manipulate an iText PdfReader and then reuse it. It throws an exception complaining that the reader is being reused. You have to change, save, and reopen - even if you are just doing all of this in memory.&lt;br /&gt;2. If you are using Struts and want to send something like a PDF as the response, return a null ActionMapping.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-112499587926278849?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/112499587926278849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=112499587926278849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112499587926278849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/112499587926278849'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/08/pdf-forms-web-and-struts.html' title='PDF forms, the web, and Struts...'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-111478174391263106</id><published>2005-04-29T06:24:00.000-07:00</published><updated>2005-04-29T06:43:34.163-07:00</updated><title type='text'>Browsers and playing sound</title><content type='html'>I just finished a project that required choosen sound(.wav) files to be played when a certain event occured. This became a challenge considering I needed it to work in IE and Firefox. It seemed everytime I found a viable solution in one browser, it either wouldn't work at all, or it would destroy the look-n-feel of the application. Below are what I needed to accomplish and what code works the best across both browsers.&lt;br /&gt;&lt;br /&gt;I needed to play a sound when an event occured. In this case, the event was the arrival of a certain alert. To accomplish this, I decided to dynically add the html sound code needed using javascript and DOM manipulation. Note: if you only need to do this for internet explorer, the best solution, in my opinion, is to use the &amp;lt;img dynsrc="something.wav" /&amp;gt;. That worked flawlessly in IE.&lt;br /&gt;&lt;br /&gt;First thing to note about Firefox, you will need to have quicktime to play the .wav file. That is fine but, it will break the above mentioned code because IE will try to use quicktime to play the .wav file as well and it just simply fails. There is probably a way around this problem but, I don't have the time nor patience to deal with windows :)&lt;br /&gt;&lt;br /&gt;In the end, the best solution was to use the &amp;lt;embed &amp;gt; tag. Now trying to put this anywhere within a table in Firefox, causes a lot of space to be used, no matter what you set the width and height to. If it is outside a table, it will not use up a ton of space. Since my application is a portlet and dependent upon what ever the Portal(Jetspeed, in this case) does to layout the portlets(it uses tables:( ), I needed to add my &amp;lt;embed&amp;gt; tag outside of this. I decided to use the following trick (see code below). Is it the most elegant solution?, NO. but it works for now :)&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;   var embed = document.createElement("embed");&lt;br /&gt;   embed.setAttribute("src", "somewavefile.wav");&lt;br /&gt;&lt;br /&gt;   embed.setAttribute("width", "1%");&lt;br /&gt;   embed.setAttribute("height", "1%");&lt;br /&gt;   document.lastChild.appendChild(embed);&lt;br /&gt;   setTimeout( function() { document.lastChild.removeChild(embed); } , 30000 );&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/12136186-111478174391263106?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/111478174391263106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=111478174391263106' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111478174391263106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111478174391263106'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/04/browsers-and-playing-sound.html' title='Browsers and playing sound'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-111455245115942575</id><published>2005-04-26T14:46:00.000-07:00</published><updated>2005-04-26T14:54:11.160-07:00</updated><title type='text'>DWR and JST</title><content type='html'>Although I haven't had a chance to try out JST I think it will complement DWR perfectly. I have spent most of my time trying to build my UI, appending strings for innerHTML junk. Using a template approach to manage this will speed up development and promote richer UI's.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-111455245115942575?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/111455245115942575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=111455245115942575' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111455245115942575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111455245115942575'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/04/dwr-and-jst.html' title='DWR and JST'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-111405339907814537</id><published>2005-04-20T20:04:00.000-07:00</published><updated>2005-04-21T06:24:07.496-07:00</updated><title type='text'>I Hate Internet Explorer</title><content type='html'>Okay, I spent(wasted) an afternoon and about an hour of the night trying to pin down why my&lt;br /&gt;appendChild() stuff wasn't working as expected. Would have helped if I would of known that was the problem sooner. Try this code out in IE and Firefox and look at the difference. Be sure to fix the script tag, blogger didn't like it :)&lt;br /&gt;&lt;br /&gt;Not only do all of the entries work in Firefox, it accepts the css styles as well. IE accepts the tbody append but will not style the rows.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;style  type="text/css"&amp;gt;&lt;br /&gt;&lt;br /&gt;.system { color: #FF0000; }&lt;br /&gt;&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt;function drawTableInner(tbodyID)&lt;br /&gt;{&lt;br /&gt;   var frag = document.createDocumentFragment();&lt;br /&gt;&lt;br /&gt; var tr = document.createElement("tr");&lt;br /&gt; tr.setAttribute("class", "system");&lt;br /&gt;&lt;br /&gt; var td  = document.createElement("td");&lt;br /&gt; var td1 = document.createElement("td");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; var span = document.createElement("span");&lt;br /&gt;&lt;br /&gt; span.appendChild(document.createTextNode("Data Entered Again"));&lt;br /&gt;&lt;br /&gt; span.setAttribute("style", "color: #00FF00");&lt;br /&gt;&lt;br /&gt; td.appendChild(document.createTextNode("Data Entered") );&lt;br /&gt; td1.appendChild(span);&lt;br /&gt;&lt;br /&gt; tr.appendChild(td);&lt;br /&gt; tr.appendChild(td1);&lt;br /&gt;&lt;br /&gt; frag.appendChild(tr);&lt;br /&gt;  &lt;br /&gt;   var tbody = document.getElementById(tbodyID);&lt;br /&gt;   tbody.appendChild(frag);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function drawTableIn(tbodyID)&lt;br /&gt;{&lt;br /&gt;   var frag = document.createDocumentFragment();&lt;br /&gt;&lt;br /&gt;   var table = document.createElement("table");&lt;br /&gt;   var tr = document.createElement("tr");&lt;br /&gt;   tr.setAttribute("class", "system");&lt;br /&gt;&lt;br /&gt; var td  = document.createElement("td");&lt;br /&gt; var td1 = document.createElement("td");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; var span = document.createElement("span");&lt;br /&gt;&lt;br /&gt; span.appendChild(document.createTextNode("Data Entered Again"));&lt;br /&gt;&lt;br /&gt; span.setAttribute("style", "color: #00FF00");&lt;br /&gt;&lt;br /&gt; td.appendChild(document.createTextNode("Data Entered") );&lt;br /&gt; td1.appendChild(span);&lt;br /&gt;&lt;br /&gt; tr.appendChild(td);&lt;br /&gt; tr.appendChild(td1);&lt;br /&gt;&lt;br /&gt;   table.appendChild(tr);&lt;br /&gt;   frag.appendChild(table);&lt;br /&gt;  &lt;br /&gt;   var tbody;&lt;br /&gt;&lt;br /&gt;   if (document.all)&lt;br /&gt;   {&lt;br /&gt;tbodyID.innerHTML = "";&lt;br /&gt;tbodyID.appendChild(frag);&lt;br /&gt;   }&lt;br /&gt;   else&lt;br /&gt;   {&lt;br /&gt;     tbody = document.getElementById(tbodyID);&lt;br /&gt;   }&lt;br /&gt;   tbody.appendChild(frag);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function drawHTMLTable(tbodyID)&lt;br /&gt;{&lt;br /&gt;document.getElementById(tbodyID).innerHTML="&amp;lt;table&amp;gt;&amp;lt;tr class='system'&amp;gt;&amp;lt;td&amp;gt;This is some new data&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;thead&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;data&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/thead&amp;gt;&lt;br /&gt;&amp;lt;tbody id="tabledata" &amp;gt;&lt;br /&gt;&amp;lt;/tbody&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div id="divdata"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div id="div2data"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;drawTableInner("tabledata");&lt;br /&gt;drawHTMLTable("div2data"); &amp;lt;!-- put this below drawTableIn and watch it disappear in IE. IE SUCKS --&amp;gt;&lt;br /&gt;drawTableIn("divdata");&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&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/12136186-111405339907814537?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/111405339907814537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=111405339907814537' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111405339907814537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111405339907814537'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/04/i-hate-internet-explorer.html' title='I Hate Internet Explorer'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-111385980087940506</id><published>2005-04-18T14:21:00.000-07:00</published><updated>2005-04-18T14:30:00.883-07:00</updated><title type='text'>DWR, Weblogic, and jetspeed</title><content type='html'>I am working on getting &lt;a href="http://dwr.dev.java.net/"&gt;DWR&lt;/a&gt; setup and working for use with some portlet applications that will be running in a &lt;a href="http://portals.apache.org/jetspeed-1/"&gt;Jetspeed1&lt;/a&gt;-based portal. I have to say that I am impressed with what DWR keeps me from having to implement. I spent a little time learning what would need to be done to implement some AJAX style functionality and dwr is a time saver. It also keeps the view code a lot cleaner in my opinion.&lt;br /&gt;&lt;br /&gt;One problem I found was a simple fix in the DWR servlet class. BEA weblogic was complaining about the ContentType being set after getWriter has already been called on the response.&lt;br /&gt;&lt;br /&gt;After fixing that, I was on my way. Hopefully, using the portlet namespace to keep the javascript and div id's unique will allow for multiple portlets on the same page.&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://portals.apache.org/jetspeed-1/"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-111385980087940506?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/111385980087940506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=111385980087940506' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111385980087940506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111385980087940506'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/04/dwr-weblogic-and-jetspeed.html' title='DWR, Weblogic, and jetspeed'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-111350104897236973</id><published>2005-04-14T10:45:00.000-07:00</published><updated>2005-04-14T10:50:48.973-07:00</updated><title type='text'>Struts and the Portal Bridge</title><content type='html'>With my new job, I have been working on creating some struts portlets. Really just struts applications that can play well in the bridge environment. I just did my first Edit view and got stuck on returning to the normal view. My view was showing up just fine but, the portlet state in Jetspeed (1) was not being restored. After adding the following, everything was returned to the proper state.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;code&gt;   &lt;br /&gt;ActionResponse actionResponse = (ActionResponse)  httpServletRequest.getAttribute("javax.portlet.response);&lt;br /&gt;&lt;br /&gt;actionResponse.setPortletMode(PortletMode.VIEW);&lt;br /&gt;&lt;/code&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/12136186-111350104897236973?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/111350104897236973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=111350104897236973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111350104897236973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111350104897236973'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/04/struts-and-portal-bridge.html' title='Struts and the Portal Bridge'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-111335151469477264</id><published>2005-04-12T17:18:00.000-07:00</published><updated>2005-04-12T17:24:51.660-07:00</updated><title type='text'>New House Pictures [2]</title><content type='html'>&lt;a href="http://photos1.blogger.com/img/247/5148/1024/Viewoflandscaping1.jpg"&gt;&lt;img style="border: 1px solid rgb(170, 170, 170); margin: 2px;" src="http://photos1.blogger.com/img/247/5148/400/Viewoflandscaping1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;View from the left. &lt;a href="http://www.hello.com/" target="ext"&gt;&lt;img src="http://photos1.blogger.com/pbh.gif" alt="Posted by Hello" style="border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;" align="middle" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-111335151469477264?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/111335151469477264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=111335151469477264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111335151469477264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111335151469477264'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/04/new-house-pictures-2.html' title='New House Pictures [2]'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12136186.post-111335145671453102</id><published>2005-04-12T17:17:00.000-07:00</published><updated>2005-04-12T17:27:20.710-07:00</updated><title type='text'>New House Pictures [1]</title><content type='html'>&lt;a href="http://photos1.blogger.com/img/247/5148/1024/newhome.jpg"&gt;&lt;img style="border: 1px solid rgb(170, 170, 170); margin: 2px;" src="http://photos1.blogger.com/img/247/5148/400/newhome.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;New House. View from the street. &lt;a href="http://www.hello.com/" target="ext"&gt;&lt;img src="http://photos1.blogger.com/pbh.gif" alt="Posted by Hello" style="border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;" align="middle" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12136186-111335145671453102?l=jgchristopher.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jgchristopher.blogspot.com/feeds/111335145671453102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12136186&amp;postID=111335145671453102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111335145671453102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12136186/posts/default/111335145671453102'/><link rel='alternate' type='text/html' href='http://jgchristopher.blogspot.com/2005/04/new-house-pictures-1.html' title='New House Pictures [1]'/><author><name>jgchristopher</name><uri>http://www.blogger.com/profile/11795330970074085966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
