<?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/"
	>

<channel>
	<title>Werx Limited &#187; framework</title>
	<atom:link href="http://werxltd.com/wp/tag/framework/feed/" rel="self" type="application/rss+xml" />
	<link>http://werxltd.com/wp</link>
	<description>We make IT work.</description>
	<lastBuildDate>Wed, 08 Sep 2010 17:00:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Simple JSON-RPC updated to 1.0.0</title>
		<link>http://werxltd.com/wp/2010/08/10/simple-json-rpc-updated-to-1-0-0/</link>
		<comments>http://werxltd.com/wp/2010/08/10/simple-json-rpc-updated-to-1-0-0/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 12:00:14 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[java rpc]]></category>
		<category><![CDATA[json-rpc]]></category>
		<category><![CDATA[rpc]]></category>
		<category><![CDATA[simple json-rpc]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=643</guid>
		<description><![CDATA[Simple JSON-RPC has been updated to 1.0.0. This new version includes a brand new event messaging system making it possible for classes to react to events generated by the Simple JSON-RPC framework. Through simple event messaging, your RPC classes are now able to react to and even interact with servlet configuration, context, request, and response [...]]]></description>
			<content:encoded><![CDATA[<p>Simple JSON-RPC has been updated to 1.0.0. This new version includes a brand new event messaging system making it possible for classes to react to events generated by the Simple JSON-RPC framework.</p>
<p>Through simple event messaging, your RPC classes are now able to react to and even interact with servlet <a href="http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/api/javax/servlet/ServletConfig.html">configuration</a>, <a href="http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/api/javax/servlet/ServletContext.html">context</a>, <a href="http://download.oracle.com/docs/cd/E17802_01/products/products/servlet/2.2/javadoc/javax/servlet/http/HttpServletRequest.html">request</a>, and <a href="http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/api/javax/servlet/http/HttpServletResponse.html">response</a> objects. To use this facility your class needs to extend the new <a href="http://werxltd.com/docs/jsonrpc/com/werxltd/jsonrpc/events/JSONRPCEventListener.html">JSONRPCEventListener</a> interface and implement the messageReceived method, accepting one argument of the <a href="http://werxltd.com/docs/jsonrpc/com/werxltd/jsonrpc/events/JSONRPCMessageEvent.html">JSONRPCMessageEvent</a> type.</p>
<p>Here is an example of how a class could implement a Simple JSON-RPC event listener:</p>
<pre class="brush:java">public void messageReceived(JSONRPCMessageEvent me) {
	switch(me.message().getCode()) {
		case JSONRPCMessage.INIT:
			config = me.message().getServletConfig();
		break;
		case JSONRPCMessage.BEFOREREQUEST:
			request = me.message().getRequest();
			session = request.getSession(true);
		break;
		case JSONRPCMessage.BEFORERESPONSE:
			response = me.message().getHttpResponse();
			response.setContentType("text/html");
		break;
		case JSONRPCMessage.AFTERRESPONSE:
			lastresponse = me.message().getRPCResponse();
		break;
	}
}</pre>
<p>This new feature should also make it easier to implement solutions that use <a href="http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-Session-Tracking.html">sessions</a>. This should also make it possible for classes to react to the output of other classes, including errors.</p>
]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2010/08/10/simple-json-rpc-updated-to-1-0-0/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>A Cascading Style Sheets (CSS) Beginner&#8217;s Tutorial</title>
		<link>http://werxltd.com/wp/2010/06/15/a-cascading-style-sheets-css-beginners-tutorial/</link>
		<comments>http://werxltd.com/wp/2010/06/15/a-cascading-style-sheets-css-beginners-tutorial/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 19:39:16 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[graphics design]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=611</guid>
		<description><![CDATA[Learning CSS can be a bit daunting if you&#8217;ve never encountered it before. Likewise, if you&#8217;ve only had limited exposure to CSS, the various ways browsers implement various aspects of the CSS standard (or make up their own) can leave you with the impression that it is all a giant hairy mess. So to help out, [...]]]></description>
			<content:encoded><![CDATA[<p>Learning CSS can be a bit daunting if you&#8217;ve never encountered it before. Likewise, if you&#8217;ve only had limited exposure to CSS, the various ways browsers implement various aspects of the CSS standard (or make up their own) can <a href="http://ajaxian.com/archives/rolling-a-coke-can-around-with-pure-css">l</a>eave you with the impression that it is all a giant hairy mess. So to help out, I&#8217;ve compiled a list of resources to make the learning curve not quite as steep for beginners and to hopefully help tame the CSS wilderness for novices.</p>
<p>First, here is a pretty good and in-depth video on HTML and CSS basics:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/GwQMnpUsj8I&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/GwQMnpUsj8I&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Next we have several handy beginner&#8217;s tutorial sites:</p>
<ul>
<li><a href="http://htmldog.com/guides/cssbeginner/">HTML Dog&#8217;s CSS Beginner</a></li>
<li><a href="http://friendlybit.com/css/beginners-guide-to-css-and-standards/">Friendly Bit&#8217;s Beginner&#8217;s Guide to CSS and Standards</a></li>
<li><a href="http://www.yourhtmlsource.com/stylesheets/introduction.html">Your HTML Sourse&#8217;s Introduction to CSS</a></li>
<li><a href="http://www.w3schools.com/css/default.asp">W3 Schools CSS Tutorial</a> (also an excellent reference site)</li>
</ul>
<p>Finally, here are a few <a href="http://en.wikipedia.org/wiki/CSS_framework">CSS frameworks</a> designed to help make CSS a lot easier by providing a standard system that takes care of much of the common ugly quirks found in CSS:</p>
<ul>
<li><a href="http://www.blueprintcss.org/">Blueprint</a></li>
<li><a href="http://960.gs/">960 Grid System</a></li>
<li><a href="http://elasticss.com/">ElastiCSS</a></li>
</ul>
<p>As a bonus, here are a few inspirational sites to help give you an idea of what CSS can do if applied properly:</p>
<ul>
<li><a href="http://www.csszengarden.com/">CSS zen garden</a></li>
<li><a href="http://ajaxian.com/archives/magnifyma-a-css-magnifying-glass">CSS Magnifying glass</a></li>
<li><a href="http://ajaxian.com/archives/rolling-a-coke-can-around-with-pure-css">3D Coke can in CSS</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2010/06/15/a-cascading-style-sheets-css-beginners-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple JSON-RPC updated to 0.9.7</title>
		<link>http://werxltd.com/wp/2010/06/01/simple-json-rpc-updated-to-0-9-7/</link>
		<comments>http://werxltd.com/wp/2010/06/01/simple-json-rpc-updated-to-0-9-7/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 12:00:19 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[json-rpc]]></category>
		<category><![CDATA[rpc]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=604</guid>
		<description><![CDATA[Simple JSON-RPC has been updated to 0.9.7. This new version includes the ability to enable using full class names rather than simple method names. This makes using multiple classes with the same public method names possible. To enable this functionality simply add an init-param to your web.xml file like: &#60;init-param&#62; &#60;param-name&#62;use_full_classname&#60;/param-name&#62; &#60;param-value&#62;true&#60;/param-value&#62; &#60;/init-param&#62; With this [...]]]></description>
			<content:encoded><![CDATA[<p>Simple JSON-RPC has been updated to 0.9.7. This new version includes the ability to enable using full class names rather than simple method names. This makes using multiple classes with the same public method names possible.</p>
<p>To enable this functionality simply add an <a href="http://www.factorypattern.com/storing-parameters-in-webxml-context-param-init-param/">init-param</a> to your <a href="http://en.wikipedia.org/wiki/WAR_(Sun_file_format)">web.xml</a> file like:</p>
<pre class="brush:xml">
&lt;init-param&gt;
	&lt;param-name&gt;use_full_classname&lt;/param-name&gt;
	&lt;param-value&gt;true&lt;/param-value&gt;
&lt;/init-param&gt;
</pre>
<p>With this feature enabled, you then call methods via their full classname + method name separated by a dot (this nomenclature is for both static as well as non-static methods, the framework handles the particulars in the back-end).</p>
<p>Special thanks to Stephan of <a href="http://www.crosspollinate.org/">Cross Pollinate</a> for suggesting this improvement!</p>
]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2010/06/01/simple-json-rpc-updated-to-0-9-7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Using Python with Hadoop</title>
		<link>http://werxltd.com/wp/2009/09/29/using-python-with-hadoop/</link>
		<comments>http://werxltd.com/wp/2009/09/29/using-python-with-hadoop/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 14:46:50 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[software development]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[hadoopstreaming]]></category>
		<category><![CDATA[hbase]]></category>
		<category><![CDATA[jython]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[python hadoop framework]]></category>
		<category><![CDATA[zohmg]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=222</guid>
		<description><![CDATA[First, some review Hadoop is a very powerful MapReduce framework based on a white paper released by Google documenting how they have successfully tackled the issue of processing large amounts of data (on the scale of petabytes in many cases) using their proprietary distributed filesystem, GFS. Hadoop is the open source version of this distributed [...]]]></description>
			<content:encoded><![CDATA[<h3>First, some review</h3>
<p><a href="http://hadoop.apache.org/">Hadoop</a> is a very powerful <a href="http://en.wikipedia.org/wiki/MapReduce">MapReduce</a> framework based on a <a href="http://news.cnet.com/8301-10784_3-9955184-7.html">white paper released by Google</a> documenting how they have successfully tackled the issue of processing large amounts of data (on the scale of petabytes in many cases) using their proprietary distributed filesystem, <a href="http://labs.google.com/papers/gfs.html">GFS</a>. Hadoop is the open source version of this distributed file system<sup><a href="http://werxltd.com/wp/2009/09/29/using-python-with-hadoop/#footnote_0_222" id="identifier_0_222" class="footnote-link footnote-identifier-link" title="Technically Hadoop is an umbrella name whereas HDFS is the technical name for the GFS alternative.">1</a></sup>, heavily <a href="http://wiki.apache.org/hadoop/PoweredBy">supported by companies like</a> Yahoo, Google, Amazon, Adobe, <a href="http://hadoop.apache.org/hive/">Facebook</a>, Hulu, <a href="http://www-03.ibm.com/press/us/en/pressrelease/22613.wss">IBM</a>, <a href="http://blog.racklabs.com/?p=66">RackSpace</a>, etc. and and has a growing number of related projects hosted by the Apache Foundation.</p>
<h3>Why we need to learn &#8220;yet another language&#8221;</h3>
<p>Yet, even with all of the buzz and hoopla many people find it difficult to setup and start writing applications capable of levreging the awesome power of an Hadoop cluster, many find the learning curve of Java and the Hadoop APIs very steep.</p>
<p>Fortunately one of the features available in Hadoop is <a href="http://wiki.apache.org/hadoop/HadoopStreaming">HadoopStreaming</a> which allows programmers to specify any program (or script) as a mapper and/or reducer. Consequently, one of the most popular scripting languages to use alongside Hadoop is <a href="http://www.python.org/">Python</a><sup><a href="http://werxltd.com/wp/2009/09/29/using-python-with-hadoop/#footnote_1_222" id="identifier_1_222" class="footnote-link footnote-identifier-link" title="If you aren&amp;#8217;t familiar with Python and want to learn, here is an excellent site for diving into the language and here is an excellent video series walking you through the basics.">2</a></sup>.</p>
<p>One of the reasons Python is well suited to this type of work is it&#8217;s ability to be <a href="http://en.wikipedia.org/wiki/Functional_programming">functional</a> provided you are careful how you write it. This makes chopping well-written Python map/reduce scripts up into distributable units much easier.</p>
<h3>There&#8217;s a framework for that</h3>
<p>While <a href="http://www.michael-noll.com/wiki/Writing_An_Hadoop_MapReduce_Program_In_Python">it is possible to write plain Python scripts</a>, the folks at last.fm have helped create an excellent <a href="http://blog.last.fm/2008/05/29/python-hadoop-flying-circus-elephant">Python framework for Hadoop called Dumbo</a> to help streamline the process of writing MapReduce jobs in Python. <a href="http://wiki.github.com/klbostee/dumbo">Dumbo</a> seems to be a fairly <a href="http://wiki.github.com/klbostee/dumbo/short-tutorial">simple framework</a> with <a href="http://github.com/klbostee/dumbo/wikis/example-programs">plenty of examples</a> you can adapt to your <a href="http://www.audioscrobbler.net/development/dumbo/">particular needs</a>.</p>
<h3>There&#8217;s a framework for that too</h3>
<p>Hadoop has many sub-projects, and one that is fairly popular is called <a href="http://hadoop.apache.org/hbase/">HBase</a> which allows a more structured, database-like, approach to storing and retrieving data. An excellent Python framework for quickly parsing data into HBase tables is <a href="http://github.com/zohmg/zohmg">Zohmg</a>. This framework allows programmers to define tables in a <a href="http://www.yaml.org/">YAML</a> <a href="http://github.com/zohmg/zohmg/blob/master/examples/television/config/dataset.yaml">configuration file</a> and corresponding mappers as <a href="http://github.com/zohmg/zohmg/blob/master/examples/television/mappers/mapper.py">simple Python scripts</a>.</p>
<h3>Bringing it back home</h3>
<p>One of the biggest drawbacks to using HadoopStreaming is that it is inherently less optimal than writing MapReduce jobs in Java since the target script or application has to be initialized, the data then has to be serialized, sent to the target application/script, processed, and then sent back (if there are any reducers). All this context switching adds overhead that wouldn&#8217;t exist if the MapReduce job were kept in the JVM where Hadoop runs.</p>
<p><a href="http://www.jython.org/">Jython</a> is a viable answer for converting existing Python applications into Java bytecode to prevent incurring as much of a performance penalty. This utility can come in handy if you decide that your &#8220;quick and dirty&#8221; Python script needs to be moved into a production environment.</p>
<ol class="footnotes"><li id="footnote_0_222" class="footnote">Technically Hadoop is an umbrella name whereas <a href="http://hadoop.apache.org/common/docs/current/hdfs_design.html">HDFS</a> is the technical name for the GFS alternative.</li><li id="footnote_1_222" class="footnote">If you aren&#8217;t familiar with Python and want to learn, <a href="http://diveintopython.org/">here is an excellent site</a> for diving into the language and here is an excellent <a href="http://www.youtube.com/watch?v=bDgD9whDfEY">video series</a> walking you through the basics.</li></ol>]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2009/09/29/using-python-with-hadoop/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
