<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>self halt</title>
	<atom:link href="http://philemonworks.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://philemonworks.wordpress.com</link>
	<description>things i work on, puzzles i solve and don't want to remember</description>
	<lastBuildDate>Wed, 14 Sep 2011 07:21:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='philemonworks.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>self halt</title>
		<link>http://philemonworks.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://philemonworks.wordpress.com/osd.xml" title="self halt" />
	<atom:link rel='hub' href='http://philemonworks.wordpress.com/?pushpress=hub'/>
		<item>
		<title>6hoek.com, a showcase for renderSnake</title>
		<link>http://philemonworks.wordpress.com/2011/08/23/6hoek-com-showcas-rendersnake/</link>
		<comments>http://philemonworks.wordpress.com/2011/08/23/6hoek-com-showcas-rendersnake/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 20:14:48 +0000</pubDate>
		<dc:creator>Ernest Micklei</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[shop html rendersnake 6hoek bol.com]]></category>

		<guid isPermaLink="false">http://philemonworks.wordpress.com/?p=493</guid>
		<description><![CDATA[For the past month, I have been working on a new iPad Web application that recently was launched at 6hoek.com. This application provides easy access to the complete product catalog of the Dutch online webshop bol.com. Because it is targeted to owners of tablet devices such as the Apple iPad, I decided to embrace the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=493&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For the past month, I have been working on a new iPad Web application that recently was launched at <a title="6hoek" href="http://6hoek.com">6hoek.com</a>. This application provides easy access to the complete product catalog of the Dutch online webshop <a title="bol.com" href="http://www.bol.com">bol.com</a>.</p>
<p>Because it is targeted to owners of tablet devices such as the Apple iPad, I decided to embrace the upcoming <a href="http://jquerymobile.com">JQuery Mobile</a> framework (JQM), an open-source Javascript library that provides an unified UI to various mobile devices. For producing the HTML markup, I (obviously) choose <a href="http://rendersnake.org">renderSnake</a>, an open-source HTML component library that promotes writing UI components in Java instead of templates.</p>
<div id="attachment_501" class="wp-caption alignnone" style="width: 310px"><a href="http://6hoek.com"><img class="size-large wp-image-501 " title="6hoek.com on the iPad" src="http://philemonworks.files.wordpress.com/2011/08/home1.png?w=300&#038;h=230" alt="6hoek.com on the iPad" width="300" height="230" /></a><p class="wp-caption-text">6hoek.com on the iPad</p></div>
<p>Looking back at the development process with respect to these frameworks, I see that:</p>
<ul>
<li>Even though JQM is still beta, it is mature enough to start depending on it</li>
<li>Most issues with JQM were easily resolved by reading the excellent JQ forum discussions</li>
<li>Writing Java component classes instead of JSP/templates turned out to be very productive</li>
<ul>
<li>Small reusable components that encapsulate complex HTML and Javascript constructions</li>
<li>Debugging and refactoring (rename,extract) support from the IDE</li>
<li>Presentation logic in plain Java</li>
</ul>
<li>CSS is still a magic beast to tame</li>
<li>Javascript debugging (I use Google Chrome) is a big time saver</li>
</ul>
<p>Of course by creating a real application using these frameworks, one better realizes what features are missing or need to be changed. The upcoming 1.2 release of <a href="http://rendersnake.org">renderSnake</a> will include all of them.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/philemonworks.wordpress.com/493/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/philemonworks.wordpress.com/493/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/philemonworks.wordpress.com/493/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/philemonworks.wordpress.com/493/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/philemonworks.wordpress.com/493/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/philemonworks.wordpress.com/493/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/philemonworks.wordpress.com/493/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/philemonworks.wordpress.com/493/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/philemonworks.wordpress.com/493/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/philemonworks.wordpress.com/493/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/philemonworks.wordpress.com/493/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/philemonworks.wordpress.com/493/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/philemonworks.wordpress.com/493/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/philemonworks.wordpress.com/493/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=493&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://philemonworks.wordpress.com/2011/08/23/6hoek-com-showcas-rendersnake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ae4660044c0bb7b590e3de213011a458?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">emicklei</media:title>
		</media:content>

		<media:content url="http://philemonworks.files.wordpress.com/2011/08/home1.png?w=300" medium="image">
			<media:title type="html">6hoek.com on the iPad</media:title>
		</media:content>
	</item>
		<item>
		<title>Getting from HTML design to renderSnake components</title>
		<link>http://philemonworks.wordpress.com/2011/03/03/getting-from-html-design-to-rendersnake-components/</link>
		<comments>http://philemonworks.wordpress.com/2011/03/03/getting-from-html-design-to-rendersnake-components/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 21:22:33 +0000</pubDate>
		<dc:creator>Ernest Micklei</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[components]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://philemonworks.wordpress.com/?p=460</guid>
		<description><![CDATA[RenderSnake is a Java library for creating components and pages that produce HTML using only Java. Its purpose is to support the creation of Web applications that are better maintainable, allows for easier reuse, have testable UI components and produces compact HTML in an efficient way. This blog post explains how to start from a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=460&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://rendersnake.org">RenderSnake</a> is a Java library for creating components and pages that produce HTML using only Java. Its purpose is to support the creation of Web applications that are better maintainable, allows for easier reuse, have testable UI components and produces compact HTML in an efficient way. </p>
<p>This blog post explains how to start from a carefully designed rich HTML page and create new or use the components available in the library.</p>
<h3>Web development</h3>
<p>The tasks of developing web applications include implementing the application domain logic, database access for persistence and the presentation layer for user-interaction handling and page rendering. For most development teams, members have different roles in the process. Typically, web and interaction designers have the responsibility to create the page flow and construct initial versions of the HTML pages needed. These mockup pages need to be translated into a form that can be served by a web application, make them interactive and present dynamic information.</p>
<p>When using renderSnake to implement the HTML pages, you need to think about how to map the designs to components and how to integrate them with other assets such as Javascript, images and stylesheets.</p>
<p><img src="http://public.philemonworks.com.s3.amazonaws.com/design-rendersnake-impl.png" /></p>
<h3>Layout</h3>
<p>The master design of a Web application typically has a small number of layouts. Popular HTML compositions include a Heading, Menu, Search and Footer section. Each of these sections can be defined by its own Renderable component. The composition can defined by creating a subclass of RenderableWrapper. Wrappers can be used in places where you see a standard decoration of dynamic information. Examples are contacts in a list view, search results and product galleries.</p>
<h3>Unit</h3>
<p>Given the set of HTML mockup pages, the developer has to decide what functional or decoration parts will be translated into Renderable components.  Components that render too much HTML are likely to change more frequently over time. Components that are too small require more work, produce more code to maintain and therefore makes development less productive and hard to keep an overview.</p>
<p>Because all components are defined in Java, as a developer you can use all the available language features. Parameterising components translate to adding fields to components classes. Specializing components translate to using class inheritance and composition.  Decorations such as layouts translate to Wrapper subclasses. And finally,  as a Java developer you have powerful IDE tools with refactoring and debugging support. Changing your component designs is therefore much easier to do and contributes to a more agile development process.</p>
<p>Examples of renderSnake components can be <a href="http://code.google.com/p/rendersnake/source/browse/#svn%2Ftrunk%2Frendersnake-site%2Fsrc%2Fmain%2Fjava%2Forg%2Frendersnake%2Fsite%2Fcomponents">browsed</a> from the <a href="http://rendersnake.org">renderSnake</a> site itself. Use the <a href="http://rendersnake.org/translator.html">HTML Translator</a> tool to convert (parts of) your design to Java code.</p>
<h3>Static content</h3>
<p>Larger content that is not managed by some <a href="http://en.wikipedia.org/wiki/Content_management_system">CMS</a> system can be maintained by external resource files. These resources are encapsulated (and cached) by instances of StringResource that know how to render them. The separation of static content in files makes maintenance easier ; no Java skills are required for such changes. The classes StringResource and StringTemplate can be used to externalize plain text, embedded Javascript and even HTML fragments.  </p>
<h3>Javascripts</h3>
<p>With the exception of external Javascript libraries such as JQuery and Prototype, most rich Web applications require script elements that implement part of the user-interaction. These Javascript functions are dependent on the structure of the page via element identifiers and CSS classes. For those Javascript functions that cannot be part of an externally hosted resource file, you can use a StringResource to encapsulate each of them. Again, the separation of Javascripts into separate files allows for faster (you know where to look) and easier maintenance.</p>
<p>Examples of resources managed by StringResource objects can be <a href="http://code.google.com/p/rendersnake/source/browse/#svn%2Ftrunk%2Frendersnake-site%2Fsrc%2Fmain%2Fresources%2Fcontent">browsed</a> from the <a href="http://rendersnake.org">renderSnake</a> site itself.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/philemonworks.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/philemonworks.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/philemonworks.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/philemonworks.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/philemonworks.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/philemonworks.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/philemonworks.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/philemonworks.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/philemonworks.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/philemonworks.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/philemonworks.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/philemonworks.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/philemonworks.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/philemonworks.wordpress.com/460/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=460&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://philemonworks.wordpress.com/2011/03/03/getting-from-html-design-to-rendersnake-components/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ae4660044c0bb7b590e3de213011a458?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">emicklei</media:title>
		</media:content>

		<media:content url="http://public.philemonworks.com.s3.amazonaws.com/design-rendersnake-impl.png" medium="image" />
	</item>
		<item>
		<title>Using renderSnake to build the presentation layer in Spring-MVC</title>
		<link>http://philemonworks.wordpress.com/2011/02/13/using-rendersnake-to-build-the-presentation-layer-in-spring-mvc/</link>
		<comments>http://philemonworks.wordpress.com/2011/02/13/using-rendersnake-to-build-the-presentation-layer-in-spring-mvc/#comments</comments>
		<pubDate>Sun, 13 Feb 2011 18:57:58 +0000</pubDate>
		<dc:creator>Ernest Micklei</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[rendersnake]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://philemonworks.wordpress.com/?p=411</guid>
		<description><![CDATA[renderSnake is a open-source library for creating components that produce HTML using only Java. By defining Java classes for HTML components and pages you can exploit all the language features (e.g. inheritance, composition, type-checking) and IDE tooling (e.g. refactoring, unit-testing, references search, debugging,&#8230;). In addition, renderSnake is designed to produce compact HTML in an memory [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=411&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://rendersnake.org">renderSnake</a> is a open-source library for creating components that produce HTML using only Java. By defining Java classes for HTML components and pages you can exploit all the language features (e.g. inheritance, composition, type-checking) and IDE tooling (e.g. refactoring, unit-testing, references search, debugging,&#8230;). In addition, renderSnake is designed to produce compact HTML in an memory efficient way.</p>
<h4>The &#8220;V&#8221; in MVC</h4>
<p>Basically, renderSnake is responsible for the presentation layer of a Web application. It has no dependencies with an application framework but it does provide classes to integrate with other technologies such as <a href="http://www.oracle.com/technetwork/java/javaee/jsp/index.html">JavaServer Pages</a> and <a href="http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html">Spring-MVC</a>. Spring-MVC is a popular implementation of the <a href="http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller">MVC architecture</a>. This pattern isolates &#8220;domain logic&#8221; (the application logic for the user) from the user interface (input and presentation), permitting independent development, testing and maintenance of each (separation of concerns).</p>
<h4>Example</h4>
<p>Below is an example of a Spring-MVC based setup of components. ProductListController is a component that is responsible to handling incoming requests. That execution starts by retrieving the Product objects (Model) through a Product Data Access Object. Then a ProductListPage object is created and asked to render itself. Each UI component that is part of the ProductListPage is asked to do the same. The response will have the resulting HTML content.</p>
<p><a href="http://philemonworks.files.wordpress.com/2011/02/spring-mvc-rendersnake.png"><img class="size-full wp-image-412 alignnone" title="spring-mvc-rendersnake" src="http://philemonworks.files.wordpress.com/2011/02/spring-mvc-rendersnake.png" alt="Spring-MVC and renderSnake" width="600" height="417" /></a></p>
<h4>Controller</h4>
<p>The method below is part of the ProductListController and is called with a prepared HtmlCanvas object that captures the request,response and output writer. Before rendering the page using the HtmlCanvas, all required domain objects are retrieved and made available to the PageContext (Map) of the HtmlCanvas object. Now the HtmlCanvas has all the information needed to perform the rendering phase.</p>
<p><pre class="brush: java;">
@RequestMapping(&quot;/productlist.html&quot;)
@ResponseBody
public void showProductListPage(HtmlCanvas html) throws IOException {

        html.getPageContext().set(&quot;products&quot;, this.productListDao.getBestSellersProductList());
        html.render(new WebshopLayoutWrapper(new ProductListPage())));
}
</pre></p>
<h4>View</h4>
<p>Using renderSnake, the View layer is implemented by a collection of small, potentially reusable, UI component classes that are composed into Page objects that represent HTML content.</p>
<p>Class <strong>Head</strong> is an example UI component responsible for rendering the <em>head</em> section of every HTML page. It implements the <strong>Renderable</strong> interface and uses the HtmlCanvas parameter object for rendering.  The HtmlCanvas object has methods of all elements (tags) in order to write HTML content. Using the HtmlAttributesFactory, you can specify the attributes for each HTML tag. By convention, the method source has a format that uses indentation to see the nesting of tags. This is not required but improves its readability.</p>
<p><pre class="brush: java;">
import static org.rendersnake.HtmlAttributesFactory.*;

public class Head implements Renderable {

    @Override
    public void renderOn(HtmlCanvas canvas) throws IOException {//@formatter:off
       canvas
           .head()
               .meta(
                   http_equiv(&quot;Content-Type&quot;)
                   .content(&quot;text/html; charset=utf-8&quot;))
               .title().write(&quot;Welcom to the Webshop&quot;)._title()
               .link(
                   rel(&quot;stylesheet&quot;)
                   .href(&quot;../../css/main.css&quot;)
                   .type(&quot;text/css&quot;)
                   .media(&quot;all&quot;))
               .meta(
                   name(&quot;format-detection&quot;)
                   .content(&quot;telephone=no&quot;))
               .meta(
                   name(&quot;viewport&quot;)
                   .content(&quot;width=device-width, user-scalable=no&quot;))
           ._head();
    }
}
</pre></p>
<p>The class <strong>ProductUI</strong> is created and initialized with a product from the list of products. While rendering the HTML tags, it can access the attributes of the product in order to show the information on the resulting HTML page.</p>
<p><pre class="brush: java;">
public class ProductUI implements Renderable {

    public Product product;
    
    @Override
    public void renderOn(HtmlCanvas canvas) throws IOException {

        canvas
            .li()
                .div(class_(&quot;productInfo&quot;))
                    .img(src(product.image).alt(product.title))
                    .h3().write(product.title)._h3()
                    .p().write(product.author)
                        .span(class_(&quot;extraInfo&quot;)).write(product.extraInfo)._span()
                    ._p()
                ._div()
                .div(class_(&quot;orderButton&quot;))
                    .p().span(class_(&quot;price&quot;)).write(&quot;&#x20AC; &quot;,false).write(product.price)._span()._p()
                    .a(href(&quot;paypal?bookid=&quot;+product.id))
                        .img(src(&quot;../../images/bt_order.gif&quot;).alt(&quot;Order now&quot;).width(&quot;103&quot;).height(&quot;37&quot;))                        
                    ._a()
                ._div()
                .div(class_(&quot;clearer&quot;))._div()
            ._li();                    
    }
</pre></p>
<h4>Presentation and logic</h4>
<p>Using the Spring-MVC framework is it possible to build applications that clearly separate the responsibilities for handling user interaction and presenting that user with information. Using <a href="http://rendersnake.org/devguide.html#spring">available Spring extensions</a>, it is possible to integrate the renderSnake library with this framework. By collecting all information (models) in the controller handler method, presentation components can simply access the available information from the page context. </p>
<ul>
<a href="http://rendersnake.googlecode.com">renderSnake project hosting</a><br />
<a href="http://rendersnake.org">renderSnake documentation site</a> (uses renderSnake)
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/philemonworks.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/philemonworks.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/philemonworks.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/philemonworks.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/philemonworks.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/philemonworks.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/philemonworks.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/philemonworks.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/philemonworks.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/philemonworks.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/philemonworks.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/philemonworks.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/philemonworks.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/philemonworks.wordpress.com/411/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=411&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://philemonworks.wordpress.com/2011/02/13/using-rendersnake-to-build-the-presentation-layer-in-spring-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ae4660044c0bb7b590e3de213011a458?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">emicklei</media:title>
		</media:content>

		<media:content url="http://philemonworks.files.wordpress.com/2011/02/spring-mvc-rendersnake.png" medium="image">
			<media:title type="html">spring-mvc-rendersnake</media:title>
		</media:content>
	</item>
		<item>
		<title>Soek.goodies.st improved</title>
		<link>http://philemonworks.wordpress.com/2010/09/29/soek-goodies-st-improved/</link>
		<comments>http://philemonworks.wordpress.com/2010/09/29/soek-goodies-st-improved/#comments</comments>
		<pubDate>Wed, 29 Sep 2010 08:25:47 +0000</pubDate>
		<dc:creator>Ernest Micklei</dc:creator>
				<category><![CDATA[coding4fun]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[s3]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[cloudfork]]></category>
		<category><![CDATA[simpledb]]></category>
		<category><![CDATA[soek]]></category>
		<category><![CDATA[visualworks]]></category>

		<guid isPermaLink="false">http://philemonworks.wordpress.com/?p=398</guid>
		<description><![CDATA[The site soek.goodies.st gives access to the sources of open-source Smalltalk libraries and frameworks. A big advantage to developers is that they can explore Smalltalk classes without having to successfully load them into one of the Smalltalk dialect platforms. Recently, I have changed much of the Smalltalk generator and HTML/Javascript generated code. Formerly, all Smalltalk [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=398&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The site <a href="http://soek.goodies.st">soek.goodies.st</a> gives access to the sources of open-source Smalltalk libraries and frameworks. A big advantage to developers is that they can explore Smalltalk classes without having to successfully load them into one of the Smalltalk dialect platforms.  Recently, I have changed much of the Smalltalk generator and HTML/Javascript generated code.</p>
<p>Formerly, all Smalltalk source was highlighted using a client-side Javascript library. This resulted in long page loading times because it had to iterate through all DOM elements and replace the HTML content by a post-processing (using regex) result. Current version of Soek uses a highlighter written in Smalltalk that can pre-process all class source files.</p>
<p>Soek.goodies.st is now a complete static site and each project has its own stylesheet and javascript additions. This results in faster load times and better flexibility in adding new features to new exported versions of Smalltalk libraries.</p>
<p>Because the Soek project is implemented in VisualWorks, the first projects were exports of loaded bundles and packages from the Public Store. With the help of the Monticello VW package, it is now possible to add projects from any Monticello repository out there. The process of adding a new library is almost completely automated and uses <a href="http://cloudfork.googlecode.com">Cloudfork</a> for storing metadata in Amazon SimpleDB and uploading the site contributions to Amazon S3.</p>
<p>In the next weeks, I would like to update the existing projects listed at <a href="http://soek.goodies.st">soek.goodies.st</a> to newer versions. As stated on the site, I welcome suggestions to add other projects (or versions).</p>
<p>Recent additions:</p>
<ul>
<li><a href="http://soek.goodies.st.s3.amazonaws.com/HotDraw/4.5.1/index.html">HotDraw</a></li>
<li><a href="http://soek.goodies.st.s3.amazonaws.com/Cloudfork-ActiveItem/emm.52/index.html">Cloudfork ActiveItem</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/philemonworks.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/philemonworks.wordpress.com/398/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/philemonworks.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/philemonworks.wordpress.com/398/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/philemonworks.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/philemonworks.wordpress.com/398/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/philemonworks.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/philemonworks.wordpress.com/398/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/philemonworks.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/philemonworks.wordpress.com/398/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/philemonworks.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/philemonworks.wordpress.com/398/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/philemonworks.wordpress.com/398/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/philemonworks.wordpress.com/398/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=398&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://philemonworks.wordpress.com/2010/09/29/soek-goodies-st-improved/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ae4660044c0bb7b590e3de213011a458?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">emicklei</media:title>
		</media:content>
	</item>
		<item>
		<title>Melissa for VA Smalltalk</title>
		<link>http://philemonworks.wordpress.com/2010/07/29/melissa-for-va-smalltalk/</link>
		<comments>http://philemonworks.wordpress.com/2010/07/29/melissa-for-va-smalltalk/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 19:20:24 +0000</pubDate>
		<dc:creator>Ernest Micklei</dc:creator>
				<category><![CDATA[Open source]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[continous integration]]></category>
		<category><![CDATA[runtime]]></category>

		<guid isPermaLink="false">http://philemonworks.wordpress.com/?p=385</guid>
		<description><![CDATA[Melissa is a simple tool that can help in building development and runtime images in a continous integration environment. It is being used extensively to create daily builds for Smalltalk images. This post describes the steps to use Melissa for VA Smalltalk 8+. The intended way to use Melissa is to start with a clean [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=385&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Melissa is a simple tool that can help in building development and runtime images in a continous integration environment. It is being used extensively to create daily builds for Smalltalk images. This post describes the steps to use Melissa for VA Smalltalk 8+. </p>
<p>The intended way to use Melissa is to start with a clean VA image, load the Melissa config app and save it as melissa.im. In order to tell Melissa what to build, you need to start that image passing the command line parameter &#8220;-melissa buildscript.ws&#8221; like:</p>
<p><pre class="brush: plain;">

&quot;C:\Program Files\vast80\bin\abt.exe&quot; -imelissa.icx  -melissaE:\Melissa\coolest-server-headless.ws

</pre></p>
<p>The build script must contain Smalltalk code that creates the MelissaBuilder and instruct it to load components (Maps,Apps), test components (Maps,Apps) and finally produce a runtime based on your prepared PackagingInstructions. The following is a basic example that loads the latest configuration map and produces a runtime image. The build and test results are logged on a file.</p>
<p><pre class="brush: plain;">

| melissa |
melissa := MelissaBuilder new.
melissa logFile: 'c:\temp\coolest-server-headless-' , AbtTimestamp now printString , '.build.log'.
melissa loadMap: 'PHW Coolest Server Runtime'.
melissa reporter reportAll.
melissa tester runTestsInMap: 'PHW Coolest Server Test'.
melissa reduceAndDumpUsing: #PhwCoolestHeadlessPackagingInstructions asClass.
melissa exit.

</pre></p>
<p><strong>Features</strong></p>
<ul>
<li>can load (specific editions of) Apps and Configuration Maps</li>
<li>can notify developers by email about success|failure of the build (see MelissaNotifier)</li>
<li>can run Unit tests found in an App or Configuration map</li>
<li>increments a build number that can be used to initialize a class variable in the runtime image</li>
<li>the build is run in a background process so you can interrupt the build at any time</li>
<li>when holding the Shift-button when starting the Melissa image, the image will not exit when completed (this is useful to inspect the freshly loaded image)</li>
<li>do simple file distribution</li>
</ul>
<p>This is open-source software  (MIT-license) and its configuration map is available on VastGoodies.com to download.<br />
In one of the next posts, I will introduce Melissa for VisualWorks. This package is available in the Cincom Public Store.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/philemonworks.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/philemonworks.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/philemonworks.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/philemonworks.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/philemonworks.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/philemonworks.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/philemonworks.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/philemonworks.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/philemonworks.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/philemonworks.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/philemonworks.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/philemonworks.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/philemonworks.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/philemonworks.wordpress.com/385/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=385&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://philemonworks.wordpress.com/2010/07/29/melissa-for-va-smalltalk/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ae4660044c0bb7b590e3de213011a458?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">emicklei</media:title>
		</media:content>
	</item>
		<item>
		<title>Google API access from Smalltalk using JNIPort</title>
		<link>http://philemonworks.wordpress.com/2010/04/29/google-api-access-from-smalltalk-using-jniport/</link>
		<comments>http://philemonworks.wordpress.com/2010/04/29/google-api-access-from-smalltalk-using-jniport/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 05:13:13 +0000</pubDate>
		<dc:creator>Ernest Micklei</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://philemonworks.wordpress.com/?p=368</guid>
		<description><![CDATA[JNIPort for VisualWorks provides a way to use Java and its huge number of available libraries directly from Smalltalk. For example, to access the Google Spreadsheets APIs and Tools, you need to download the Java client libraries and all its dependencies. The paths to there Jars must be known to the JVM and can be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=368&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://jniport.wikispaces.com/">JNIPort</a> for VisualWorks provides a way to use Java and its huge number of available libraries directly from Smalltalk. </p>
<p>For example, to access the <a href="http://code.google.com/apis/spreadsheets/data/3.0/developers_guide_java.html#ClientLogin">Google Spreadsheets APIs and Tools</a>, you need to download the <a href="http://code.google.com/p/gdata-java-client/">Java client libraries</a> and all its dependencies. The paths to there Jars must be known to the JVM and can be set through JNIPort. For easy deployment, I put together a single jar using an <a href="http://public.philemonworks.com.s3.amazonaws.com/ant-build-gdata-with-deps.xml">Ant build script</a> such that the Runtime settings could be:</p>
<pre>
Classpath (Mac): .:JNIPort.jar:gdata-2.0-with-dependencies.jar
</pre>
<p>The example below is taken from the Google Spreadsheet documentation and is translated to the JNIPort method name conventions. This example simply lists all Spreadsheet documents available from your Google account.</p>
<p><pre class="brush: ruby;">
| serviceClass urlClass metafeedUrl feedClass feed spreadsheets howMany |
serviceClass := JVM current findClass: 'com.google.gdata.client.spreadsheet.SpreadsheetService'.
service := serviceClass new_String: 'demo'.
service setUserCredentials_String: '&lt;&lt;username&gt;&gt;' String: '&lt;&lt;password&gt;&gt;'.

urlClass := JVM current findClass: 'java.net.URL'.
metafeedUrl := urlClass new_String: 'http://spreadsheets.google.com/feeds/spreadsheets/private/full'.
feedClass := JVM current findClass: 'com.google.gdata.data.spreadsheet.SpreadsheetFeed'.
feed := service getFeed_URL: metafeedUrl Class: feedClass.
spreadsheets := feed getEntries_null.
howMany := spreadsheets size_null.
0 to: howMany - 1 do:[ :i |
	| entry |
	entry := spreadsheets get_int: i.
	Transcript cr ; show: entry getTitle_null getPlainText_null ].
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/philemonworks.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/philemonworks.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/philemonworks.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/philemonworks.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/philemonworks.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/philemonworks.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/philemonworks.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/philemonworks.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/philemonworks.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/philemonworks.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/philemonworks.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/philemonworks.wordpress.com/368/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/philemonworks.wordpress.com/368/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/philemonworks.wordpress.com/368/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=368&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://philemonworks.wordpress.com/2010/04/29/google-api-access-from-smalltalk-using-jniport/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ae4660044c0bb7b590e3de213011a458?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">emicklei</media:title>
		</media:content>
	</item>
		<item>
		<title>JQTouch library support for Seaside</title>
		<link>http://philemonworks.wordpress.com/2010/01/23/jqtouch-library-support-for-seaside/</link>
		<comments>http://philemonworks.wordpress.com/2010/01/23/jqtouch-library-support-for-seaside/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 14:32:19 +0000</pubDate>
		<dc:creator>Ernest Micklei</dc:creator>
				<category><![CDATA[coding4fun]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[jqtouch]]></category>
		<category><![CDATA[seaside]]></category>

		<guid isPermaLink="false">http://philemonworks.wordpress.com/?p=343</guid>
		<description><![CDATA[One way to build applications for the iPhone is to create a Web application that tries to look and behave like a native one. Currently, many Javascript libraries are being developed that try to accomplish just that. One of the big reasons for choosing this route is that developing such applications is so much easier [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=343&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One way to build applications for the iPhone is to create a Web application that tries to look and behave like a native one. Currently, many Javascript libraries are being developed that try to accomplish just that. One of the big reasons for choosing this route is that developing such applications is so much easier compared to the Apple-way (learn Objective-C, build and test on the local emulator and try to get it accepted by AppleStore).</p>
<p><a href="http://www.jqtouch.com">JQTouch</a> is a jQuery plugin for mobile web development, optimized for the iPhone and iPod touch. Among the other alternatives, this one has a nice design and uses the popular jQuery framework. In this post, I am reporting about my efforts to use this library from <a href="http://seaside.st/">Seaside</a> which is a component-based Web application framework for Smalltalk. It has great support for jQuery in the sense that the developer is presented with an elegant abstraction layer to do all the fancy selection and Ajax stuff.</p>
<p><strong>Single HTML<br />
</strong></p>
<p>JQTouch works with a single HTML page model in which each iPhone page is represented by its own div element. JQTouch will show the div element which has the CSS class <strong>current</strong> and hides all others. This is what the body of such a page looks like.</p>
<p><pre class="brush: xml;">
&lt;div id=&quot;home&quot; class=&quot;current&quot;&gt;
  &lt;div id=&quot;toolbar&quot;&gt;
    ....
  &lt;/div&gt;
&lt;div id=&quot;search&quot;&gt;
...
&lt;/div&gt;
&lt;div id=&quot;results&quot;&gt;
...
&lt;/div&gt;
</pre></p>
<p>Navigating from one page to another can be animated using effects such as slide, flip, cube and dissolve.</p>
<p><strong>Ajax only</strong></p>
<p>Because this single HTML page is loaded once, every interaction with the Seaside application is done using Ajax. For example, a search page typically shows a form field to enter the search pattern. Instead of a regular form submit, you have to setup the ajax request to process the form and upon success (client-side!) navigate to the results page.</p>
<p><strong>Seaside JQTouch support</strong><a href="http://seaside.st/"></a></p>
<p><a href="http://philemonworks.files.wordpress.com/2010/01/seaside_jqtouch.png"><img class="alignleft size-medium wp-image-355" title="seaside_jqtouch" src="http://philemonworks.files.wordpress.com/2010/01/seaside_jqtouch.png?w=202&#038;h=300" alt="" width="202" height="300" /></a></p>
<p>With only a few small classes, I was able to wrap the JQTouch library (by reference only) and write some methods that makes it easy to write pages and forms. I published the Seaside extensions to the Cincom Public Repository as a bundle named JQTouch. Have a look at the examples to see how it can be used. This package requires a separate download of the JQTouch library as its assets are not included in the FileLibraryReference class. For testing JQTouch applications on your development machine, you can use <a href="http://sourceforge.net/projects/iphonesimulator/">iPhoney</a> (Mac only), Safari or Chrome which all are based on the <a href="http://webkit.org/">Webkit</a> framework.</p>
<p>This package is written for VisualWorks with Seaside 3+.  With minor changes this package should be portable to previous versions (2.8) or other platforms (Pharo,VASmalltalk). Source code can also be viewed on <a title="Soek" href="http://soek.goodies.st" target="_blank">soek.goodies.st</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/philemonworks.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/philemonworks.wordpress.com/343/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/philemonworks.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/philemonworks.wordpress.com/343/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/philemonworks.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/philemonworks.wordpress.com/343/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/philemonworks.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/philemonworks.wordpress.com/343/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/philemonworks.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/philemonworks.wordpress.com/343/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/philemonworks.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/philemonworks.wordpress.com/343/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/philemonworks.wordpress.com/343/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/philemonworks.wordpress.com/343/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=343&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://philemonworks.wordpress.com/2010/01/23/jqtouch-library-support-for-seaside/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ae4660044c0bb7b590e3de213011a458?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">emicklei</media:title>
		</media:content>

		<media:content url="http://philemonworks.files.wordpress.com/2010/01/seaside_jqtouch.png?w=202" medium="image">
			<media:title type="html">seaside_jqtouch</media:title>
		</media:content>
	</item>
		<item>
		<title>soek.goodies.st &#8211; exploring open-source Smalltalk libraries</title>
		<link>http://philemonworks.wordpress.com/2009/11/13/soek-goodies-st-exploring-open-source-smalltalk-libraries/</link>
		<comments>http://philemonworks.wordpress.com/2009/11/13/soek-goodies-st-exploring-open-source-smalltalk-libraries/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 21:48:13 +0000</pubDate>
		<dc:creator>Ernest Micklei</dc:creator>
				<category><![CDATA[coding4fun]]></category>
		<category><![CDATA[s3]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[seaside]]></category>
		<category><![CDATA[soek]]></category>
		<category><![CDATA[WebVelocity]]></category>

		<guid isPermaLink="false">http://philemonworks.wordpress.com/?p=317</guid>
		<description><![CDATA[Soek is a Smalltalk application that provides a different way to navigate through documentation and source code of a Smalltalk library. Instead of the classic multi-list browser view in an image, Soek offers a flat view on all methods and classes and is build using the Seaside Web framework. I discovered this way of publishing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=317&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Soek is a Smalltalk application that provides a different way to navigate through documentation and source code of a Smalltalk library. Instead of the classic multi-list browser view in an image, Soek offers a flat view on all methods and classes and is build using the Seaside Web framework.</p>
<p><img class="alignleft" style="border:4px solid white;" title="Soek-Seaside-3a3" src="http://philemonworks.files.wordpress.com/2009/11/screen-shot-2009-11-13-at-6-33-24-pm.png?w=300&#038;h=259" alt="Soek documenting Seaside" width="300" height="259" /></p>
<p>I discovered this way of publishing a framework when I worked with Rails and did most of my searches on <a href="http://railsbrain.com">Railsbrain.com</a>. Not only I could easily find a particular class or method, it also showed me similar methods, other implementations, classes and their sources. The learning effect was great and it became my standard search tool and recommendation to others.</p>
<p>Wanting this for the Smalltalk community too, I started creating the application Soek in Cincom WebVelocity to have a similar view on libraries such as Seaside, Glorp, Cloudfork and even my own projects. I figured out how to parse the comment, declaration and body of a method, defined new <a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter" target="_blank">syntax highlighting</a> rules for Smalltalk and integrated the client-side search javascript functions from RailsBrian.com, kindly provided by Brian Chamberlain.</p>
<p>Because most libraries that I use are pretty stable, those documentation pages can very well be cached. So to make this happen, I developed a Publisher component that can generate all static pages to files creating a documentation set for each library. Next, I created a public Amazon S3 bucket to host all these documentation sets. Finally, I added a Launcher application as the front-end for this bucket to select which library documentation to explore. Available library information (name,version, s3-url,site-url) is accessed from a Amazon SimpleDB domain using Cloudfork ActiveItem.</p>
<p>The result is now available at <strong><a href="http://soek.goodies.st">soek.goodies.st</a></strong></p>
<p>The Soek application is made open-source under MIT license and published in the Cincom WebVelocity Community.</p>
<p><strong>Update 1:</strong> Current version fails to work in IE (6+). Use any of Firefox, Safari, Chrome instead for the time being.</p>
<p><strong>Update 2:</strong> Due to DNS problems goodies.st might not be reachable. You can always use the alternative <a href="http://soek.philemonworks.com">soek.philemonworks.com</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/philemonworks.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/philemonworks.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/philemonworks.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/philemonworks.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/philemonworks.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/philemonworks.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/philemonworks.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/philemonworks.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/philemonworks.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/philemonworks.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/philemonworks.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/philemonworks.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/philemonworks.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/philemonworks.wordpress.com/317/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=317&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://philemonworks.wordpress.com/2009/11/13/soek-goodies-st-exploring-open-source-smalltalk-libraries/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ae4660044c0bb7b590e3de213011a458?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">emicklei</media:title>
		</media:content>

		<media:content url="http://philemonworks.files.wordpress.com/2009/11/screen-shot-2009-11-13-at-6-33-24-pm.png?w=300" medium="image">
			<media:title type="html">Soek-Seaside-3a3</media:title>
		</media:content>
	</item>
		<item>
		<title>Making a package visible to WebVelocity</title>
		<link>http://philemonworks.wordpress.com/2009/09/12/making-a-package-visible-to-webvelocity/</link>
		<comments>http://philemonworks.wordpress.com/2009/09/12/making-a-package-visible-to-webvelocity/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 19:13:21 +0000</pubDate>
		<dc:creator>Ernest Micklei</dc:creator>
				<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[WebVelocity]]></category>

		<guid isPermaLink="false">http://philemonworks.wordpress.com/?p=305</guid>
		<description><![CDATA[If you want an existing package to register as a WebVelocity one and as a result make it visible to the browser page, you can evaluate this script: which I found when looking for the newApplication functionality in the image.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=305&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you want an existing package to register as a WebVelocity one and as a result make it visible to the browser page, you can evaluate this script:<br />
<pre class="brush: ruby;">
(Store.Registry packageNamed: 'Your-Package-Name')
	propertyAt: #application put: true;
	propertyAt: #namespace put: 'Your-Namespace';
	propertyAt: #velocityThemeName put: 'Default'.
</pre><br />
which I found when looking for the <strong>newApplication</strong> functionality in the image.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/philemonworks.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/philemonworks.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/philemonworks.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/philemonworks.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/philemonworks.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/philemonworks.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/philemonworks.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/philemonworks.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/philemonworks.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/philemonworks.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/philemonworks.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/philemonworks.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/philemonworks.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/philemonworks.wordpress.com/305/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=305&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://philemonworks.wordpress.com/2009/09/12/making-a-package-visible-to-webvelocity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ae4660044c0bb7b590e3de213011a458?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">emicklei</media:title>
		</media:content>
	</item>
		<item>
		<title>HypertextLogger for server application logs</title>
		<link>http://philemonworks.wordpress.com/2009/06/22/hypertextlogger-for-server-application-logs/</link>
		<comments>http://philemonworks.wordpress.com/2009/06/22/hypertextlogger-for-server-application-logs/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 19:53:39 +0000</pubDate>
		<dc:creator>Ernest Micklei</dc:creator>
				<category><![CDATA[Open source]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[monitoring]]></category>

		<guid isPermaLink="false">http://philemonworks.wordpress.com/?p=278</guid>
		<description><![CDATA[Logging can be very helpful in analyzing the (faulty) behavior of a server application in response to client requests. HypertextLogger is a simple component that produces HTML in response to logging instructions.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=278&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Logging can be very helpful in analyzing the (faulty) behavior of a server application in response to client requests. HypertextLogger is a simple component that produces HTML in response to logging instructions. Its main purpose it to provide a better readable log file. By choosing you favorite CSS, you can highlight what is important and leave other information unfocused (timestamps).</p>
<div id="attachment_283" class="wp-caption alignnone" style="width: 795px"><img class="size-full wp-image-283" title="hypertextlogger" src="http://philemonworks.files.wordpress.com/2009/06/hypertextlogger.png" alt="HTML log file" width="785" height="284" /><p class="wp-caption-text">HTML log file</p></div>
<p>Upon creation of the logger, it produces a new .html file to which logging events are written. Because most Browsers can deal with open-ended (i.e. not properly closed by tags) HTML files, a single page can be used to collect lots of events. And if you let e.g. Apache serve these log files, you can monitor server applications remotely.</p>
<p>Features of the HypertextLogger are:</p>
<ul>
<li>the log can be custom CSS styled  (info,warn and error levels may have different emphasis)</li>
<li>the log can have a custom pattern for each event (write your own formatBlock)</li>
<li>you can use any HTML markup (e.q. links to other resources)</li>
<li>by choosing a FileRollingPolicy you can control how many events are logged onto a single HTML file</li>
<li><strong>[update]</strong> can capture Transcript output and include it in the log
</ul>
<h3>Using the logger</h3>
<p><pre class="brush: ruby;">
| logger |
logger := HypertextLogging.HypertextLogger onFileNamed: 'myproject.log'.
logger debug: 'This is debugging info only shown if level == #debug'.
logger link: 'http://blog.doit.st' title: 'Smalltalk in the Cloud'.
</pre></p>
<h3>Logger API</h3>
<p>Some examples using the logging api. See class methods for tests.<br />
<pre class="brush: ruby;">
logger blue: 'Text in Blue'.
logger escaped: '&lt;escaped&gt;'.
logger red:[ logger strong: 'Bummer' ].  &quot;use blocks to combine the api&quot;
logger logException: aSignal. &quot;writes a stack&quot;
logger enabled: true.
logger printTimestamp.
logger printCurrentProcess.
</pre></p>
<h3>Customizing the logger</h3>
<p>You can override the CSS styles and the format of each log entry.<br />
<pre class="brush: ruby;">
logger css: aDictionary. &quot;mapping between css-class and its definition&quot;
logger formatBlock: [:logger :logLevel :content | logger print: content ]. &quot;provide your own entry formatting&quot;
</pre></p>
<h3>Setup the FileRollingPolicy</h3>
<p>Instead of producing one single big file, you can specify a policy to control log file creation.<br />
<pre class="brush: ruby;">
logger daily. &quot;every day create a new log (unless no events)&quot; 
logger maximumSize: 100000. &quot;if size reaches limit then create a new log&quot;
logger maximumEntries: 1000. &quot;limit on the number of events&quot;
logger refreshEvery: 10.  &quot;10 seconds auto refresh by the browser&quot;
</pre></p>
<p>HypertextLogger is implemented in VisualWorks Smalltalk and is available from the Cincom Public Store under MIT License.</p>
<p><strong>Update:</strong> 1.8.4: if rolling policy is set then do not overwite exising log when new logger is created.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/philemonworks.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/philemonworks.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/philemonworks.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/philemonworks.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/philemonworks.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/philemonworks.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/philemonworks.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/philemonworks.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/philemonworks.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/philemonworks.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/philemonworks.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/philemonworks.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/philemonworks.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/philemonworks.wordpress.com/278/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=philemonworks.wordpress.com&amp;blog=1360762&amp;post=278&amp;subd=philemonworks&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://philemonworks.wordpress.com/2009/06/22/hypertextlogger-for-server-application-logs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ae4660044c0bb7b590e3de213011a458?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">emicklei</media:title>
		</media:content>

		<media:content url="http://philemonworks.files.wordpress.com/2009/06/hypertextlogger.png" medium="image">
			<media:title type="html">hypertextlogger</media:title>
		</media:content>
	</item>
	</channel>
</rss>
