<?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>by Leandro Milmanda Perez &#187; General</title>
	<atom:link href="http://www.lemil.com.ar/blog/index.php/category/general/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lemil.com.ar/blog</link>
	<description>about IT, software &#38; trends.</description>
	<lastBuildDate>Tue, 02 Aug 2011 21:04:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Blog Version 2.2</title>
		<link>http://www.lemil.com.ar/blog/index.php/2011/08/blog-version-2-2/</link>
		<comments>http://www.lemil.com.ar/blog/index.php/2011/08/blog-version-2-2/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 21:03:12 +0000</pubDate>
		<dc:creator>lemil</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.lemil.com.ar/blog/?p=153</guid>
		<description><![CDATA[Just finished to republish my blog, again (for the 9th time). Despite my previous recommendation post about how to publish a blog for free, and due all the inconveniences, lost data, lots of server downtimes, this time I payed a decent hosting. Yeah, reliability is not for free, at least in hosting solutions. till next [...]]]></description>
			<content:encoded><![CDATA[<p>Just finished to republish my blog, again (for the 9th time).</p>
<p>Despite <a href="http://www.lemil.com.ar/blog/index.php/2010/11/renovando-hosting-y-email/">my previous recommendatio</a>n post about how to publish a blog for free, and due all the inconveniences, lost data, lots of server downtimes,  this time I payed a decent hosting.</p>
<p>Yeah, reliability is not for free, at least in hosting solutions.</p>
<p>till next posts pals!</p>
<p>L.-</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lemil.com.ar/blog/index.php/2011/08/blog-version-2-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arcade Gaming Basics</title>
		<link>http://www.lemil.com.ar/blog/index.php/2011/01/arcade-gaming-basics/</link>
		<comments>http://www.lemil.com.ar/blog/index.php/2011/01/arcade-gaming-basics/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 20:39:18 +0000</pubDate>
		<dc:creator>lemil</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[cvs-invaders]]></category>
		<category><![CDATA[snoop]]></category>

		<guid isPermaLink="false">http://www.lemil.com.ar/blog/?p=124</guid>
		<description><![CDATA[Howdy, mates!,  just finished a new gaming venture. This time I made a POC of a full game development process. Started from designing the concept of the game, picking the technologies and frameworks, and releasing the code (open source, off course).  This is not a tutorial, but it shows an approach to a full development [...]]]></description>
			<content:encoded><![CDATA[<p>Howdy, mates!,  just finished a new gaming venture. This time I made a POC of a full game development process. Started from designing the concept of the game, picking the technologies and frameworks, and releasing the code (open source, off course).  This is not a tutorial, but it shows an approach to a full development cycle of a game production.</p>
<h2>First, create a game concept&#8230;</h2>
<p>The game is about a dude that sends Cvs to consulting firms. Will earn point only if he sends the CV to Snoop Consulting (the place I work). If the CV reaches any other firm (logo), he will loose money.  Gets extra point if he catches any technology partners that are thrown by Snoop <img src='http://www.lemil.com.ar/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Here is a simple diagram, that sketches the concept.</p>
<p style="text-align: center;"><a href="http://www.lemil.com.ar/blog/wp-content/uploads/2011/01/IMG_0289.jpg"><img class="aligncenter size-full wp-image-125" title="IMG_0289" src="http://www.lemil.com.ar/blog/wp-content/uploads/2011/01/IMG_0289.jpg" alt="" width="416" height="312" /></a></p>
<p style="text-align: center;">
<h2>From the concept to the basics!</h2>
<p>Ok, now that we have an idea, lets deliver!</p>
<p>I&#8217;ve chosen flash as the platform, and flixel as the framework.</p>
<ul>
<li>What is flash??&#8230; shame on you if you dont know.</li>
<li>What is flixel??&#8230; is a game engine framework that easily alows you to create flash 80´s arcade-like games.  ( <a href="http://www.flixel.org">www.flixel.org</a> )</li>
</ul>
<h2>Cooking code &#8230;</h2>
<p>I used Flash Builder 4 as the IDE to create the game. To start I took a sample from <strong>flixel</strong>, to see how a game looks like. This is a very good place to start, even more, if this is your first game venture. Since my concept, was a space-invaders like game, I use that one to kick start my project.</p>
<p>Remember, to add flixel source code to your project!</p>
<p>You can check the code in my google code project, here&#8230;</p>
<p><a href="http://code.google.com/p/cvs-invaders/">http://code.google.com/p/cvs-invaders/</a></p>
<h2>&#8230;.Tada!! (the finished product)</h2>
<p>After a few hours cooking code and images (this is probably the most time-consuming part), the result is this&#8230;</p>
<p><iframe frameborder="0" src="/blog/wp-content/uploads/2011/01/SnoopInvaders-4.swf" width="580" height="440"></iframe></p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lemil.com.ar/blog/index.php/2011/01/arcade-gaming-basics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Foursquare API for Java Applications</title>
		<link>http://www.lemil.com.ar/blog/index.php/2010/11/foursquare-api-for-java-applications/</link>
		<comments>http://www.lemil.com.ar/blog/index.php/2010/11/foursquare-api-for-java-applications/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 05:05:41 +0000</pubDate>
		<dc:creator>lemil</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.lemil.com.ar/blog/?p=118</guid>
		<description><![CDATA[API for JAVA Hello!, today I am going to be presenting a new small project called foursquared-desktop-api about an API that lets you interact with FourSquare.com . This project that takes advantage the work made by the authors of  foursquared , an excelent opensouce mobile app, originally made for android. I decided to release a [...]]]></description>
			<content:encoded><![CDATA[<h1><img class="alignnone" src="http://foursquare.com/img/headerLogo.png" alt="" width="180" height="48" /> API for JAVA</h1>
<h1><span style="font-weight: normal; font-size: 13px;">Hello!, today I am going to be presenting a new small project called <a href="http://http://code.google.com/p/foursquared-desktop-api/" target="_blank">foursquared-desktop-api </a> about an API that lets you interact with <a href="http://www.foursquare.com" target="_self">FourSquare.com</a> .  This project that takes advantage the work made by the authors of  <a href="http://http://code.google.com/p/foursquared/" target="_blank">foursquared</a> , an excelent opensouce mobile app, originally made for android. I decided to release a Java version since I could not find anything like this arond.</span></h1>
<p>Some of the best features are&#8230;</p>
<ul>
<li>Complete class model of foursquare objects and messages.</li>
<li>Json parsers for all the messages.</li>
<li>Version #1 of the api is supported.</li>
<li>It identifies as a mobile app (by default)</li>
<li>Nice and clean coding.</li>
<li>Able to use both Http and Oauth.</li>
</ul>
<p>Project Summary:</p>
<ul>
<li>URL: <a href="http://code.google.com/p/foursquared-desktop-api/" target="_blank">http://code.google.com/p/foursquared-desktop-api/</a></li>
<li>JAR File : <a href="http://code.google.com/p/foursquared-desktop-api/downloads/detail?name=foursquared-desktop-api.jar&amp;can=2&amp;q=#makechanges" target="_blank">http://code.google.com/p/foursquared-desktop-api/downloads/detail?name=foursquared-desktop-api.jar&amp;can=2&amp;q=#makechanges</a></li>
</ul>
<p>That&#8217;s all folks by now! Next time I probably will be introducing some of the work I am doing with this API.</p>
<p>Thanks for reading and feel free to send me any comments. Below I pasted a short Junit (sample code) with basic usage of this api.</p>
<p>Sample Usage :</p>
<div class="java5" style="background-color: #e7e7e7;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">package</span> <span class="co2">com.lemil.forsquares.server.foursquare.api</span><span class="sy0">;</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><span class="kw2">import</span> <span class="co2">junit.framework.TestCase</span><span class="sy0">;</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><span class="kw2">import</span> <span class="co2">org.json.JSONObject</span><span class="sy0">;</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><span class="kw2">import</span> <span class="co2">com.lemil.forsquares.api.foursquare.FoursquareApi.Location</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">import</span> <span class="co2">com.lemil.forsquares.api.foursquare.types.Checkin</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">import</span> <span class="co2">com.lemil.forsquares.api.foursquare.types.CheckinResult</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">import</span> <span class="co2">com.lemil.forsquares.api.foursquare.types.Group</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">import</span> <span class="co2">com.lemil.forsquares.server.ForSquaresServiceImpl</span><span class="sy0">;</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> ForSquaresServiceTest <span class="kw2">extends</span> TestCase   <span class="br0">{</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/String.html"><span class="kw21">String</span></a> phoneNumber = <span class="st0">&#8220;phonenumber&#8221;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/String.html"><span class="kw21">String</span></a> password = <span class="st0">&#8220;passowrd&#8221;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/String.html"><span class="kw21">String</span></a> geolat = <span class="st0">&#8220;-34.488483210361125&#8243;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/String.html"><span class="kw21">String</span></a> geolong = <span class="st0">&#8220;-58.52286100387573&#8243;</span><span class="sy0">;</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1">ForSquaresServiceImpl service = <span class="kw4">null</span><span class="sy0">;</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> ForSquaresServiceTest<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1">@<a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/Override.html"><span class="kw21">Override</span></a></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">protected</span> <span class="kw3">void</span> setUp<span class="br0">(</span><span class="br0">)</span> <span class="kw2">throws</span> <a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/Exception.html"><span class="kw21">Exception</span></a> <span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">super</span>.<span class="me1">setUp</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1">service = <span class="kw2">new</span> ForSquaresServiceImpl<span class="br0">(</span>phoneNumber, password<span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1">service.<span class="me1">loadApi</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1"></li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw3">void</span> testLogin<span class="br0">(</span><span class="br0">)</span><span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">try</span> <span class="br0">{</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><span class="kw3">boolean</span> b = service.<span class="me1">isApiLoaded</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><span class="kw2">assert</span><span class="br0">(</span>b<span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span> <span class="kw2">catch</span><span class="br0">(</span><a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/Exception.html"><span class="kw21">Exception</span></a> e<span class="br0">)</span> <span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1">e.<span class="me1">printStackTrace</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">assert</span><span class="br0">(</span><span class="kw4">false</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><span class="co1">//Group&lt;Checkin&gt; getRecentCheckinsFromFriends() throws IllegalArgumentException ;</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw3">void</span> testGetRecentCheckinsFromFriends<span class="br0">(</span><span class="br0">)</span><span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">try</span> <span class="br0">{</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1">Location location = <span class="kw2">new</span> Location<span class="br0">(</span>geolat, geolong<span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/security/acl/Group.html"><span class="kw40">Group</span></a><span class="sy0">&lt;</span>Checkin<span class="sy0">&gt;</span> fc = service.<span class="me1">getRecentCheckinsFromFriends</span><span class="br0">(</span>location<span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span><span class="br0">(</span>Checkin c : fc<span class="br0">)</span> <span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1">JSONObject o  = <span class="kw2">new</span> JSONObject<span class="br0">(</span>c<span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/System.html"><span class="kw21">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">(</span>o.<span class="me1">toString</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">assert</span><span class="br0">(</span><span class="kw4">true</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span> <span class="kw2">catch</span><span class="br0">(</span><a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/Exception.html"><span class="kw21">Exception</span></a> e<span class="br0">)</span> <span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1">e.<span class="me1">printStackTrace</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">assert</span><span class="br0">(</span><span class="kw4">false</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1"></li>
<li class="li1"></li>
<li class="li1">
<div class="de1"><span class="co1">//CheckinResult checkin(String input) throws IllegalArgumentException;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw3">void</span> testCheckin<span class="br0">(</span><span class="br0">)</span><span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">try</span> <span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/String.html"><span class="kw21">String</span></a> venueId = <span class="st0">&#8220;2201505&#8243;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/String.html"><span class="kw21">String</span></a> venueName = <span class="st0">&#8220;Starbucks&#8221;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">Location location = <span class="kw2">new</span> Location<span class="br0">(</span><span class="st0">&#8220;-34.54567867050709&#8243;</span>, <span class="st0">&#8220;-58.48865747451782&#8243;</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/String.html"><span class="kw21">String</span></a> shout = <span class="kw4">null</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">boolean</span> isPrivate = <span class="kw4">true</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">boolean</span> tellFollowers = <span class="kw4">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">boolean</span> twitter = <span class="kw4">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">boolean</span> facebook = <span class="kw4">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">CheckinResult c = service.<span class="me1">checkin</span><span class="br0">(</span>venueId, venueName, location, shout, isPrivate, tellFollowers, twitter, facebook<span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">JSONObject o  = <span class="kw2">new</span> JSONObject<span class="br0">(</span>c<span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/System.html"><span class="kw21">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">(</span>o.<span class="me1">toString</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">assert</span><span class="br0">(</span><span class="kw4">true</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span> <span class="kw2">catch</span><span class="br0">(</span><a href="http://java.sun.com/j2se/1%2E5%2E0/docs/api/java/lang/Exception.html"><span class="kw21">Exception</span></a> e<span class="br0">)</span> <span class="br0">{</span></div>
</li>
<li class="li1">
<div class="de1">e.<span class="me1">printStackTrace</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">assert</span><span class="br0">(</span><span class="kw4">false</span><span class="br0">)</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">}</span></div>
</li>
<li class="li1"></li>
<li class="li1"></li>
<li class="li1"></li>
<li class="li1"></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.lemil.com.ar/blog/index.php/2010/11/foursquare-api-for-java-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nuevo Hosting + Email</title>
		<link>http://www.lemil.com.ar/blog/index.php/2010/11/renovando-hosting-y-email/</link>
		<comments>http://www.lemil.com.ar/blog/index.php/2010/11/renovando-hosting-y-email/#comments</comments>
		<pubDate>Sat, 13 Nov 2010 13:12:31 +0000</pubDate>
		<dc:creator>lemil</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[googleapps]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[zoneedit]]></category>

		<guid isPermaLink="false">http://www.lemil.com.ar/blog/?p=111</guid>
		<description><![CDATA[o&#8230; como bajar costos de hosting e email a $0, ganado en confiabilidad y servicios. Resumiendo las recomendacioes son &#8230; Email: Google Apps Standard Edition (gratis hasta 20 cuentas) DNS: Zone Edit (gratis hasta 5 cuentas) Hosting: Awadspace (Estoy probando la free edition) Cuando hace algunas semanas recibí el aviso de que en pocos días [...]]]></description>
			<content:encoded><![CDATA[<h4><em>o&#8230; como bajar costos de hosting e email a $0, ganado en confiabilidad y servicios.</em></h4>
<p><em>Resumiendo las recomendacioes son &#8230;</em></p>
<div style="padding: 3 3 3 3; background-color: #e7e7e7; border: 1 #c0c0c0 dashed;">
<p><strong>Email</strong>: Google Apps Standard Edition (gratis hasta 20 cuentas)</p>
<p><strong>DNS</strong>: Zone Edit (gratis hasta 5 cuentas)</p>
<p><strong>Hosting</strong>: Awadspace (Estoy probando la free edition)</p>
</div>
<p>Cuando hace algunas semanas recibí el aviso de que en pocos días más debería renovar el contrato por el servicio de hosting, en un principio y sin pensarlo demasiado en renovar directamente por otro año más con <a href="www.dattatec.com.ar" target="_blank">www.dattatec.com.ar</a> .  Aunque las necesidades tecnológicas del sitio actual son reducidas  un amigo comentó acerca de otros proveedores que podrían ofrecer esto de modo gratuito.</p>
<h3>Precios Dattatec</h3>
<p>Si bien el servicio de dattatec es bastante bueno, tengo sí un argumento bastante fuerte para dar de baja el servicio que es, que aumentan los precios anualmente alrededor de 25% . El primer año cotraté por cerca de 80$ (27 U$S) , el segundo a $120 (34 U$S), y este costaría cerca de $180 (45 U$S).</p>
<p>Nuestras necesidades actuales son&#8230;</p>
<ul>
<li>Hosting con 100mb de disco.</li>
<li>Acceso a una db de mysql</li>
<li>6gb transferencia mensual.</li>
<li>2o cuentas de email.</li>
<li>FTP</li>
</ul>
<h3>Servicio de Hosting</h3>
<p>Ante esto comencé a evaluar que alternativas existian en el mercado de free hosting en internet. Luego de hacer un test de velocidad y comparar features la lista de candidatos se redujo entre estos dos.</p>
<ul>
<li><a href="http://www.awadspace.com" target="_self">www.awadspace.com</a></li>
<li><a href="http://www.freehostia.com" target="_self">www.freehostia.com</a></li>
</ul>
<p>La verdad como la oferta es similar, me decidí por el primero ya que contaba con más referencias directas, aunque el segundo según comentarios parece ser tan recomendable como el primero (awardspace).</p>
<p>Una limitación menor que apareció fue la de no poder subir archivos comprimidos (zip, tars, etc), pero como no los uso no tiene demasiado impacto, y de necesitarlos podría utilizar rapidshare o alguno similar.</p>
<h3>Servicio de DNS</h3>
<p>Entre los reisgos que evalué, el que más me importaba mitigar era el de uptime del los servicios, especialmente el de email. Luego de investigar que se podía hacer al respecto, descubrí el servicio de DNSs gratuitos de <a href="http://www.zonedit.com" target="_self">www.zonedit.com</a> .</p>
<p>En resumen lo que permite hacer este servicio es manejar la asociación de un nombre de dominio (en nuestro caso lemil.com.ar) con el proveedor de hosting (a través de su IP) . Además te permite configurar a distintos proveedores por cada uno de estos servicios, algo que resultó muy util para el email y algunos otros labs que estaba trabajando.</p>
<p><strong>Servicio de Email</strong></p>
<p>En cuanto al email, adherí a la suscripción de <a href="http://http://www.google.com/apps/intl/en/group/index.html" target="_self">Google Apps Standard</a> (versióon gratuita). Este servicio provisto por Google  ofrece una versión customizada de Gmail para tu sitio, además de otras talk, docs, calendar, etc., con la confiabilidad de las de uso  masivo. Con esto logré evitar usar los pesimos web mail y pop3 ofrecidos por los hosting, sin perder ningun feature.</p>
<h3>Tiempos de Setup</h3>
<p>Todo el trabajo , incluyendo aprender a usar todas las herramientas / servicios, llevó algo así como 5hs, para el primer site y cerca de 2hs más para los sitios siguientes ( <a href="http://www.mobilestudios.com.ar">www.mobilestudios.com.ar</a> , <a href="http://www.leomilmanda.com.ar">www.leomilmanda.com.ar</a> )</p>
<p><em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lemil.com.ar/blog/index.php/2010/11/renovando-hosting-y-email/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Reviewing Google&#8217;s 03D, a 3D engine for browsers in Javascript.</title>
		<link>http://www.lemil.com.ar/blog/index.php/2009/10/review-of-googles-03d-a-3d-engine-for-browser-in-javascript/</link>
		<comments>http://www.lemil.com.ar/blog/index.php/2009/10/review-of-googles-03d-a-3d-engine-for-browser-in-javascript/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 15:14:34 +0000</pubDate>
		<dc:creator>lemil</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[03d]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://www.lemil.com.ar/blog/?p=93</guid>
		<description><![CDATA[Hi!, if you followed my latest tweets you may know that I am taking a look to this new tech from Google that was presented on this latest IO convention. This API allows you to create and manipulate 2D and 3D models using only javascript. What is also interesting is the underlying tech around 03d [...]]]></description>
			<content:encoded><![CDATA[<p>Hi!, if you followed my <a href="http://www.twitter.com/lemil">latest tweets</a> you may know that I am taking a look to this new tech from <a href="http://www.google.com">Google</a> that was presented on this latest IO convention. This API allows you to create and manipulate 2D and 3D models using only javascript. What is also interesting is the underlying tech around 03d that is able to  access openGL and Direct3D. Models can be imported from sources as <a href="http://sketchup.google.com/">SketchUp</a>, <a href="http://usa.autodesk.com/adsk/servlet/pc/index?siteID=123112&amp;id=13577897">Maya</a>, <a href="http://usa.autodesk.com/adsk/servlet/pc/index?siteID=123112&amp;id=13567410">Max</a> exporting those to <a href="http://collada.org">COLLADA</a>. More details <a href="http://code.google.com/apis/o3d/docs/techoverview.html">here</a>.</p>
<p><img class="aligncenter" title="O3D Stack" src="http://code.google.com/apis/o3d/images/O3DSoftwareStack.png" alt="" width="420" height="370" /></p>
<p>Also has a complete set of common 3D stuff like shapes, simple objects, textures, particle emiters, cameras, lights, video in 3d, etc. The API is available on their <a href="http://code.google.com/apis/o3d/">web site</a>.</p>
<p>An interesting example that came with the API,  is the trends example. Originally it show the earth with a beam (like the sun) coming out form random places over the surface. I changed that beam to a particle emitter and put a sequence of images of the profile of a location aware (fake) social network. Basically, it shows now who is where in the world (watch the video).</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="data" value="http://www.youtube.com/v/a7fqR9MDaZo&amp;hl=en&amp;fs=1&amp;" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/a7fqR9MDaZo&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/a7fqR9MDaZo&amp;hl=en&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true" data="http://www.youtube.com/v/a7fqR9MDaZo&amp;hl=en&amp;fs=1&amp;"></embed></object></p>
<p>Another great example is a GAME I&#8217;ve found, a kind of wonder boy style called <a href="http://blog.largeanimal.com/demo/">Infinite journey</a> form LargeAnimal.</p>
<p>That&#8217;s all for now, next time I will be posting more of my work. Appreciate any comment, Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lemil.com.ar/blog/index.php/2009/10/review-of-googles-03d-a-3d-engine-for-browser-in-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finite State Machine Utility en Javascript para PureMVC.</title>
		<link>http://www.lemil.com.ar/blog/index.php/2009/10/finite-state-machine-utility-en-javascript-para-puremvc/</link>
		<comments>http://www.lemil.com.ar/blog/index.php/2009/10/finite-state-machine-utility-en-javascript-para-puremvc/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 20:19:48 +0000</pubDate>
		<dc:creator>lemil</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[puremvc]]></category>
		<category><![CDATA[statemachines]]></category>

		<guid isPermaLink="false">http://www.lemil.com.ar/blog/index.php/2009/10/finite-state-machine-utility-en-javascript-para-puremvc/</guid>
		<description><![CDATA[Hello Folks!, I am working again to contribute with a sequel of my previous work about finite state machines implementation framework. This time I am working to mashup a FSM into the pureMVC framework in Javscript. I&#8217;ve used the FSM utility in AS# and I loved it since the first time, but I was kinda [...]]]></description>
			<content:encoded><![CDATA[<p>Hello Folks!, I am working again to contribute with a sequel of my previous work about finite state machines implementation framework. This time I am working to mashup a FSM into the pureMVC framework in Javscript. I&#8217;ve used the FSM utility in AS# and I loved it since the first time, but I was kinda shocked, when I realized that this utility was not available on Javascript. Since I&#8217;m a JS, PureMVC and FSM fan I am working hard to make a neat port of this, available soon to the PureMVC dev community.</p>
<p>Cheers!, and don&#8217;t be shy and write comments below!. *this time I will read them all, promise!.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lemil.com.ar/blog/index.php/2009/10/finite-state-machine-utility-en-javascript-para-puremvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java @ Google App Engine</title>
		<link>http://www.lemil.com.ar/blog/index.php/2009/04/java-google-app-engine/</link>
		<comments>http://www.lemil.com.ar/blog/index.php/2009/04/java-google-app-engine/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 01:19:34 +0000</pubDate>
		<dc:creator>lemil</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.lemil.com.ar/blog/index.php/2009/04/java-google-app-engine/</guid>
		<description><![CDATA[As I twitted last week I am testing an early version of Google&#8217;s App Engine in Java flavor. If you never got the chance to try it, or you are just curious about it, I wrote a few tutorials about how to do regular things, including: java patters, servlets, data access, etc. Use this command [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://code.google.com/appengine/images/appengine_lowres.jpg" alt="" width="142" height="109" /><img class="alignright" src="http://www.gstatic.com/codesite/ph/images/defaultlogo.png" alt="" width="48" height="48" /></p>
<p style="text-align: center;"><a href="http://code.google.com"><img class="aligncenter" title="Google Code" src="http://www.gstatic.com/codesite/ph/images/code_sm.png" alt="" width="153" height="55" /></a></p>
<p>As I twitted last week I am testing an early version of Google&#8217;s App Engine in Java flavor. If you never got the chance to try it, or you are just curious about it, I wrote a few tutorials about how to do regular things, including: java patters, servlets, data access, etc.</p>
<p>Use this command to anonymously check out the latest project source code:</p>
<div class="bubble_wrapper">
<div class="pmeta_bubble_bg">
<div class="box-inner"><tt># Non-members may check out a read-only working copy anonymously over HTTP.</tt><br />
<tt id="checkoutcmd">svn checkout <strong><em>http</em></strong>://gae-java-tutorial1.googlecode.com/svn/trunk/ gae-java-tutorial1-read-only</tt></div>
</div>
</div>
<p><strong>Example 1</strong> &#8211; Using DataStore nad JPA</p>
<p>I created a POJO calle SimplePojo and stored un DS using JPA. Below is a copy of the persistance.xml file I am using&#8230;</p>
<pre style="background-color:#f0f0f0; border-top: 1 solid #c0c0c0; border-right: 1 solid #c0c0c0; border-left: 1 solid #c0c0c0; border-bottom: 1 solid #c0c0c0; border: 1 solid #c0c0c0; padding-left: 30px;"><span style="color: #000080;">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"&gt;

    &lt;persistence-unit name="transactions-optional"&gt;
        &lt;provider&gt;org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider&lt;/provider&gt;
        &lt;class&gt;com.gae.tutorial.pojo.SimplePojo&lt;/class&gt;
        &lt;properties&gt;
            &lt;property name="datanucleus.NontransactionalRead" value="true"/&gt;
            &lt;property name="datanucleus.NontransactionalWrite" value="true"/&gt;
            &lt;property name="datanucleus.ConnectionURL" value="appengine"/&gt;
        &lt;/properties&gt;
    &lt;/persistence-unit&gt;
&lt;/persistence&gt;</span></pre>
<p>Note the the hardcoded appengie value from the connection URL. Below the Poj file&#8230;</p>
<div style=" background-color:#f0f0f0; border-top: 1 solid #c0c0c0; border-right: 1 solid #c0c0c0; border-left: 1 solid #c0c0c0; border-bottom: 1 solid #c0c0c0; border: 1 solid #c0c0c0; padding-left: 30px;">
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">import javax.jdo.annotations.Column;</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">import javax.persistence.Entity;</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">import javax.persistence.GeneratedValue;</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">import javax.persistence.GenerationType;</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">import javax.persistence.Id;</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">import javax.persistence.NamedQueries;</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">import javax.persistence.NamedQuery;</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">import javax.persistence.Table;</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">
</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">@Entity</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">@Table(name = "simple_pojo")</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">@NamedQueries( {</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">    @NamedQuery(name = "getLast", query = "SELECT p FROM SimplePojo p ORDER BY p.id DESC")</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">})</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">
</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">public class SimplePojo {</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">
    @Id</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">    @GeneratedValue(generator="generador",strategy=GenerationType.IDENTITY)</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">    @Column(name="ID")</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">    private Long id;</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">    </span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">    @Column(name="VALOR")</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">    private String valor;</span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">    </span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">    </span></pre>
<pre style="background-color:#f0f0f0;padding-left: 30px;"><span style="color: #000080;">    public Long getId() {</span></pre>
<pre style="padding-left: 30px;"><span style="color: #000080;">        return id;</span></pre>
<pre style="padding-left: 30px;"><span style="color: #000080;">    }</span></pre>
<pre style="padding-left: 30px;"><span style="color: #000080;">
    public void setId(Long id) {</span></pre>
<pre style="padding-left: 30px;"><span style="color: #000080;">        this.id = id;</span></pre>
<pre style="padding-left: 30px;"><span style="color: #000080;">    }</span></pre>
<pre style="padding-left: 30px;"><span style="color: #000080;">
    public String getValor() {</span></pre>
<pre style="padding-left: 30px;"><span style="color: #000080;">        return valor;</span></pre>
<pre style="padding-left: 30px;"><span style="color: #000080;">    }</span></pre>
<pre style="padding-left: 30px;"><span style="color: #000080;">
    public void setValor(String valor) {</span></pre>
<pre style="padding-left: 30px;"><span style="color: #000080;">        this.valor = valor;</span></pre>
<pre style="padding-left: 30px;"><span style="color: #000080;">    }</span></pre>
<pre style="padding-left: 30px;"><span style="color: #000080;">}</span></pre>
</div>
<p>To fully understand this example I recommend you to checkout the SVN source repo and open it on eclipse. One important thing is that you need to install the App Engine SDK for Java and the eclipse plugins from App Engine too.</p>
<p>Also recommend you to get an account and start uusing it.!</p>
<p>Cheers!</p>
<p>Leandro.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lemil.com.ar/blog/index.php/2009/04/java-google-app-engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fault tolerance on comodity clusters..</title>
		<link>http://www.lemil.com.ar/blog/index.php/2009/03/fault-tolerance-on-comodity-clusters/</link>
		<comments>http://www.lemil.com.ar/blog/index.php/2009/03/fault-tolerance-on-comodity-clusters/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 11:48:18 +0000</pubDate>
		<dc:creator>lemil</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[hammer]]></category>
		<category><![CDATA[parallel]]></category>

		<guid isPermaLink="false">http://www.lemil.com.ar/blog/?p=53</guid>
		<description><![CDATA[Ive been doing some research on this latelly and I found some interesting videos I want to share with you&#8230; This video demonstrates how it works on a real cluster, while disks are being disconnected. Lemil.-]]></description>
			<content:encoded><![CDATA[<p>Ive been doing some research on this latelly and I found some interesting videos I want to share with you&#8230;</p>
<p><a href="http://www.youtube.com/watch?v=xYGSiUfK-DE&amp;eurl=http%3A%2F%2Fwww.silobreaker.com%2FShowWidget.aspx%3Fcontrol%3DVideoFeed%26QF0FromDate%3D2009-02-18%26QF1FreetextSearchStrings%3Dhadoo&amp;feature=player_embedded">This video</a> demonstrates how it works on a real cluster, while disks are being disconnected.<br />
Lemil.-</p>
<p style="text-align: center;"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/MertszOktiw&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/MertszOktiw&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lemil.com.ar/blog/index.php/2009/03/fault-tolerance-on-comodity-clusters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Socialsite, an opensource social network.</title>
		<link>http://www.lemil.com.ar/blog/index.php/2009/03/socialsite-an-opensource-social-network/</link>
		<comments>http://www.lemil.com.ar/blog/index.php/2009/03/socialsite-an-opensource-social-network/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 11:15:58 +0000</pubDate>
		<dc:creator>lemil</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.lemil.com.ar/blog/?p=48</guid>
		<description><![CDATA[Hi!, today I m going to taught you about this new project called Socialsite. What&#8217;s Socialsite ( https://socialsite.dev.java.net/)? It is an open source software made by sun,  that implements 2 things, an Opensocial (www.opensocial.org) container that render your favorite OS gadgets (Google gadgets too), and also has it own social graph Db and gadgets to [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" src="https://socialsite.dev.java.net/images/use.gif" alt="" width="96" height="96" /><img class="alignnone" src="https://socialsite.dev.java.net/images/discover.gif" alt="" width="96" height="96" /><img class="alignnone" src="https://socialsite.dev.java.net/images/extend.gif" alt="" width="96" height="96" /><img class="alignnone" src="https://glassfish-theme.dev.java.net/logo.gif" alt="" width="107" height="86" /></p>
<p><span>Hi!, today I m going to taught you about this new project called <span>Socialsite</span>.</span></p>
<p>What&#8217;s Socialsite (<a title="https://socialsite.dev.java.net/" href="https://socialsite.dev.java.net/" target="_blank"><span> https://<span>socialsite</span>.<span>dev</span>.java.net/</span></a>)?</p>
<p><span>It is an open source software made by sun,  that implements 2 things, an <span>Opensocial</span> (</span><a title="www.opensocial.org" href="http://www.opensocial.org" target="_blank">www.opensocial.org</a>) container that render your favorite OS gadgets (Google gadgets too), and also has it own social graph Db and gadgets to manage invitations, relationships, messaging, groups, profiles, like any other social network.</p>
<p>What techs power Social Networks ?</p>
<p>I&#8217;ll give you <a href="https://socialsite.dev.java.net/socialsite-j1-2008.pdf" target="_blank">this link</a><span>, its a <span>pdf</span> with a lot of new techs around social networking. </span></p>
<p>What am I doing with SS ?</p>
<p>I am doing a few things&#8230;</p>
<p>- I am doing implementations of SS for the first time. This software is new, Ive been working with this since very early releases.</p>
<p><span>- Make it production ready. We are looking forward open these implementations to massive audience (2 to 5 million users around the globe).</span></p>
<p><span>- Turn it <span>Jboss</span> ready!. Since this soft came from an open source project from Sun <span>Microsystems</span>, (they did it great!),  it was built using Sun&#8217;s Stack (Java, JPA, (Derby, yes Derby &#8230; <span>MySql</span> came later), and <span>Glassfish</span>). Since the company I am working for its using <span>Jboss</span> (I am personally a kind of fan of <span>Jboss</span> stack) as it main deployment server, I could not resist to make my own implementation of SS for that platform. </span></p>
<p>- J2EE deploymet, Ejb3 ready!.</p>
<p><span>- A lot of new features. I built a few new features like notifications i18n, job manager, support for images (previously stored on <span>BLOBs</span>), Notification services, Gmail integration services, etc. Also we (the team) cleaned all the reported bugs (and new ones <img src='http://www.lemil.com.ar/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</span></p>
<p>- Cluster ready!. I made also a few tunnings and scripts that allow you to run SS in HA clusters, and setted up distribued caches, farming services, nodes, etc.</p>
<p>- Oracle 10g ready!.</p>
<p><span>- We also did a lot of stuff just for this <span>impl</span>, but those details I cannot tell. ( may be in a later post <img src='http://www.lemil.com.ar/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </span></p>
<p>I will continue posting some news about this project and related, &#8230;to keep in touch, any comments, below.</p>
<p>Cheers!</p>
<p>Lemil.-</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lemil.com.ar/blog/index.php/2009/03/socialsite-an-opensource-social-network/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>State machines for &#8216;javascript&#8217;</title>
		<link>http://www.lemil.com.ar/blog/index.php/2008/12/state-machines-for-javascript/</link>
		<comments>http://www.lemil.com.ar/blog/index.php/2008/12/state-machines-for-javascript/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 18:48:59 +0000</pubDate>
		<dc:creator>lemil</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[clousure]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[maquina]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[state machine]]></category>

		<guid isPermaLink="false">http://www.lemil.com.ar/blog/?p=23</guid>
		<description><![CDATA[Today I am presenting a (yet) small but usefull framework to use in ajax clients that I build and use &#8230;      What is Maquina? Maquina is a petri net runtime implementation for Javascript and other languages like AS3 and java (work in progress).    Why do I need a state machine ? Finite [...]]]></description>
			<content:encoded><![CDATA[<p>Today I am presenting a (yet) small but usefull framework to use in ajax clients that I build and use &#8230;</p>
<div>
<h1 style="text-align: justify; "><strong><a href="http://www.lemil.com.ar/blog/wp-content/uploads/2008/12/gears.gif"><img class="size-full wp-image-25 alignright" title="maquina gears" src="http://www.lemil.com.ar/blog/wp-content/uploads/2008/12/gears.gif" alt="maquina logo" width="48" height="48" /></a>  </p>
<p></strong> </h1>
<h3>What is Maquina?</h3>
<p class="MsoNormal">Maquina is a petri net runtime implementation for Javascript and other languages like AS3 and java (work in progress). </p>
<p class="MsoNormal"> </p>
<h3>Why do I need a state machine ?</h3>
<p class="MsoNormal">Finite state machines have long been used as an organizing principle for designing and implementing complex behavior in event-driven programs, such as network adapters and compilers. Now, programmable Web browsers have opened a new event-driven environment to a new generation of applications. Browser-based applications, popularized by Ajax, are becoming more complex. Designers and implementers can benefit from the discipline and structure that finite state machines offer. In this article, you, learn how to use a finite state machine to design complex behavior for a simple Web widget &#8212; an animated tooltip that fades into and out of view. (read more = http://www.ibm.com/developerworks/library/wa-finitemach1/ ).</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"> </p>
<h3>How it Works&#8230;</h3>
<p class="MsoNormal"><span> This plugin controls the lifecycle of an input form. To implement it, the changes described below, should be done in the existing application.</span></p>
<p class="MsoNormal"><span>  </span></p>
<p class="MsoNormal"><em><span>1 &#8211; Add Scripting libraries…</span></em></p>
<p class="MsoNormal"> </p>
<div style="background-color: #f7f7f7; border: 1px solid #c0c0c0">
<p class="MsoNormal"><span>&lt;!&#8211; Maquina Core &#8211;&gt;</span></p>
<p class="MsoNormal"><span>&lt;script type=&#8221;text/javascript&#8221; src=&#8221;../../maquina.js&#8221;&gt;&lt;/script&gt;</span></p>
<p class="MsoNormal"><span>&lt;script type=&#8221;text/javascript&#8221; src=&#8221;../../plugins/form/plugin.js&#8221;&gt;&lt;/script&gt;</span></p>
<p class="MsoNormal"><span>&lt;!&#8211; this example uses prototype lib &#8211;&gt;</span></p>
<p class="MsoNormal"><span>&lt;script type=&#8221;text/javascript&#8221; src=&#8221;http://www.prototypejs.org/assets/2008/1/25/prototype-.6.0.2.js&#8221;&gt;&lt;/script&gt;</span></p>
</div>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>(*) yes, we use prototype.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><em><span>2 &#8211; Create a form in HTML <span> </span>…</span></em></p>
<p class="MsoNormal"><span> </span></p>
<p> </p>
<div style="background-color: #f7f7f7; border: 1px solid #c0c0c0">
<p class="MsoNormal"><span>&lt;div class=&#8221;widget_form&#8221;&gt;</span></p>
<p class="MsoNormal"><span><span>            </span>&lt;div id=&#8221;form1_flash_state&#8221; &gt;&lt;/div&gt;</span></p>
<p class="MsoNormal"><span><span>            </span>&lt;form id=&#8217;form1_form&#8217; name=&#8217;form1_form&#8217; &gt;</span></p>
<p class="MsoNormal"><span><span>                        </span>&lt;h3&gt;Maquina Form Test&lt;/h3&gt;</span></p>
<p class="MsoNormal"><span><span>                        </span>&lt;div id=&#8221;form1_widget_message_top&#8221; class=&#8221;widget_message&#8221;&gt;&lt;/div&gt;</span></p>
<p class="MsoNormal"><span><span>                        </span>&lt;label for=&#8221;fullname&#8221;&gt;FullName&lt;/label&gt;</span></p>
<p class="MsoNormal"><span>                        &lt;input type=&#8221;text&#8221; name=&#8221;fullname&#8221; id=&#8221;fullname&#8221;</span></p>
<p class="MsoNormal"><span>                                    onkeyup<strong>=&#8221;maquina.plugins.form.handleFormEvent(&#8216;form1&#8242;,&#8217;change&#8217;)&#8221;</strong>/&gt;</span></p>
<p class="MsoNormal"><span><span>                        </span>&lt;br /&gt;&lt;br /&gt;</span></p>
<p class="MsoNormal"><span><span>                        </span>&lt;label for=&#8221;Description&#8221;&gt;Description&lt;/label&gt;</span></p>
<p class="MsoNormal"><span>                       &lt;input type=&#8221;text&#8221; name=&#8221;description&#8221; id=&#8221;description&#8221;</span></p>
<p class="MsoNormal"><span>                                    oneyup=&#8221;maquina.plugins.form.handleFormEvent(&#8216;form1&#8242;,&#8217;change&#8217;)&#8221;/&gt;</span></p>
<p class="MsoNormal"><span><span>                        </span>&lt;br /&gt;&lt;br /&gt;</span></p>
<p class="MsoNormal"><span><span>                        </span>&lt;label for=&#8221;Age&#8221;&gt;Age&lt;/label&gt;</span></p>
<p class="MsoNormal"><span>                       &lt;select name=&#8221;age&#8221; </span></p>
<p class="MsoNormal"><span>                                onchange=<strong>&#8220;maquina.plugins.form.handleFormEvent(&#8216;form1&#8242;,&#8217;change&#8217;)&#8221;<span> </span></strong>&gt;</span></p>
<p class="MsoNormal"><span><span>                        </span>&lt;option value=&#8221;20-30&#8243;&gt;20-30&lt;/option&gt;</span></p>
<p class="MsoNormal"><span><span>                        </span>&lt;option value=&#8221;30-40&#8243;&gt;30-40&lt;/option&gt;</span></p>
<p class="MsoNormal"><span><span>                        </span>&lt;/select&gt;</span></p>
<p class="MsoNormal"><span><span>                        </span>&lt;br /&gt;&lt;br /&gt;</span></p>
<p class="MsoNormal"><span>                        &lt;div id=&#8221;form1_widget_message_footer&#8221; class=&#8221;widget_message&#8221;&gt;&lt;/div&gt;</span></p>
<p class="MsoNormal"><span><span>                        </span>&lt;br /&gt;</span></p>
<p class="MsoNormal"><span><span>                        </span>&lt;div id=&#8221;form1_widget_button_bar&#8221; class=&#8221;widget_button_bar&#8221;&gt;&lt;/div&gt;</span></p>
<p class="MsoNormal"><span><span>            </span>&lt;/form&gt;</span></p>
<p class="MsoNormal"><span>&lt;/div&gt;</span></p>
</div>
<p> </p>
<p class="MsoNormal"><span>  </span></p>
<p class="MsoNormal"><span>(*) The tags<span>  </span>with “class=widget_message” show validation and app messages.</span></p>
<p class="MsoNormal"><span>(**) Note that there is no button bar in the form neither action property in the form tag. Everything is going to be managed by the plugin.</span></p>
<p class="MsoNormal"><span>(***) Note in bold are the triggers to the dirty state. Include this on every single input element that is going to trigger a change of state.</span></p>
<p class="MsoNormal"><span>  </span></p>
<p class="MsoNormal"><em><span>3 &#8211; Initialize the form….</span></em></p>
<p> </p>
<p class="MsoNormal"><span> </span></p>
<div style="background-color: #f7f7f7; border: 1px solid #c0c0c0">
<p class="MsoNormal"><span>&lt;script type=&#8221;text/javascript&#8221;&gt;</span></p>
<p class="MsoNormal"><span>var base_url = &#8220;http://localhost/maquina/ports/javascript/1.0/src/trunk/examples&#8221;;</span></p>
<p class="MsoNormal"><span>/* Initialize</span></p>
<p class="MsoNormal"><span><span> </span>* execute this function when ever you want to inititalize the state machine</span></p>
<p class="MsoNormal"><span><span> </span>**/</span></p>
<p class="MsoNormal"><span>function initialize()</span></p>
<p class="MsoNormal"><span>{</span></p>
<p class="MsoNormal"><span><span>            </span>try {</span></p>
<p class="MsoNormal"><span><span>                        </span><strong><span>//(Optional) Just a loggin function included in maquina</span></strong></span></p>
<p class="MsoNormal"><span><span>            </span><span>            </span>consolelog(&#8220;initialize form1&#8243;);</span></p>
<p class="MsoNormal"><span><span>                        </span><strong><span>//This is to insert the button bar in the placeholder</span></strong></span></p>
<p class="MsoNormal"><span><span>            </span><span>           </span>maquina.plugins.form.renderFormCommandBar(&#8220;form1&#8243;);</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span><span>                        </span><strong><span>//Create a context (model) that the state machine is going to use.</span></strong></span></p>
<p class="MsoNormal"><span><span>            </span><span>            </span>var context1 = [];</span></p>
<p class="MsoNormal"><span><span>            </span><span>            </span>context1["graph"] =<span>  </span>new maquina.plugins.form.graph(); <strong><span>//this is the default behaviour</span></strong></span></p>
<p class="MsoNormal"><span><span>            </span><span>            </span>context1["ajax"] = [];</span></p>
<p class="MsoNormal"><span><span>            </span><span>            </span>context1.ajax["url"] = &#8220;form_plugin_backend.php&#8221;;<span> </span><strong><span>//Put here the action url</span></strong></span></p>
<p class="MsoNormal"><span><span>    </span><span>        </span><span>            </span>maquina.createStateMachine(&#8220;form1&#8243;, context1);</span></p>
<p class="MsoNormal"><span><span>            </span><span>           </span></span></p>
<p class="MsoNormal"><span><span>            </span>} catch(e) {</span></p>
<p class="MsoNormal"><span><span>                        </span>console.error(&#8220;Error at initialize! : &#8221; + e.message);</span></p>
<p class="MsoNormal"><span><span>            </span>}</span></p>
<p class="MsoNormal"><span>}</span></p>
<p class="MsoNormal"><span>//Trigger this on page Load</span></p>
<p class="MsoNormal"><span>window.onload = function() {</span></p>
<p class="MsoNormal"><span><span>            </span>consolelog(&#8220;initialize()&#8221;);</span></p>
<p class="MsoNormal"><span><span>            </span>initialize();</span></p>
<p class="MsoNormal"><span>}</span></p>
<p class="MsoNormal"><span>&lt;/script&gt;</span></p>
</div>
<p class="MsoNormal"><em><span> </span></em></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"><em><span>4 &#8211; (Oprtional) you can use your own validation function in javascript…</span></em></p>
<p class="MsoNormal"><span> </span></p>
<div style="background-color: #f7f7f7; border: 1px solid #c0c0c0">
<p class="MsoNormal"><span>function validate_miform(context){</span></p>
<p class="MsoNormal"><span><span>    </span><span>        </span>var form = context["elements"]["form"];</span></p>
<p class="MsoNormal"><span><span>    </span><span>        </span>// You can retrieve any value stored in the context.</span></p>
<p class="MsoNormal"><span><span>    </span><span>        </span>ar projID = context["projID"];</span></p>
<p class="MsoNormal"><span><span>    </span><span>        </span>var divID = context["divID"];</span></p>
<p class="MsoNormal"><span><span>       </span></span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span><span>         </span><span>   </span>var err = new Array();</span></p>
<p class="MsoNormal"><span><span>        </span><span>    </span>err['haserrors'] = false;</span></p>
<p class="MsoNormal"><span><span>   </span><span>        </span></span></p>
<p class="MsoNormal"><span><span>        </span><span>    </span>if(ifEmpty($(&#8216;notes_0&#8242;).value))</span></p>
<p class="MsoNormal"><span><span>    </span><span>        </span>{</span></p>
<p class="MsoNormal"><span><span>           <span>    </span><span>        <span> </span>//Append your error message to the correct tag (see error model below)</span></span></span></p>
<p class="MsoNormal"><span><span>    </span><span>        <span>    </span><span>        err['top'] = &#8216;You must type a Note to Save Overall Status &#8216;;</span></span></span></p>
<p class="MsoNormal"><span><span>           </span><span><span>    </span><span>        <span> </span>err['haserrors'] = true;</span></span></span></p>
<p class="MsoNormal"><span><span>        </span><span>    </span>}</span></p>
<p class="MsoNormal"><span><span>       </span></span></p>
<p class="MsoNormal"><span><span>        </span><span>    </span>if(ifEmpty($(&#8216;status_0&#8242;).value))</span></p>
<p class="MsoNormal"><span><span>        </span><span>    </span>{</span></p>
<p class="MsoNormal"><span><span>            </span><span>            </span>err['footer'] = &#8220;You must assign an Overall Status to save Overall Status Notes&#8221;;</span></p>
<p class="MsoNormal"><span><span>            </span><span>            </span>err['haserrors'] = true;</span></p>
<p class="MsoNormal"><span><span>         </span><span>   </span>}</span></p>
<p class="MsoNormal"><span><span>            </span></span></p>
<p class="MsoNormal"><span><span>    </span><span>        </span>if (err['haserrors'] == true){<span>  </span></span></p>
<p class="MsoNormal"><span><span>           </span><span>    </span><span>        </span>err['result'] = &#8216;failure&#8217;;</span></p>
<p class="MsoNormal"><span><span>    </span><span>        </span>} else {<span> </span></span></p>
<p class="MsoNormal"><span><span>            <span>    </span><span>        err['result'] = &#8216;success&#8217;;</span></span></span></p>
<p class="MsoNormal"><span><span>    </span><span>        </span>}</span></p>
<p class="MsoNormal"><span>return err;</span></p>
<p class="MsoNormal"><span>}</span></p>
</div>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>(*) You can<span>  </span>customize also the type of message displayed on each place. By adding prefixes ( “error:” , “alert:” or nothing “” ) you can change the images associated to the error message.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><em><span>Error (Inform) model …</span></em></p>
<p class="MsoNormal"> </p>
<div class="mceTemp mceIEcenter">
<dl id="attachment_24" class="wp-caption aligncenter" style="width: 510px;">
<dt class="wp-caption-dt"><a href="http://www.lemil.com.ar/blog/wp-content/uploads/2008/12/error-model.jpg"><img class="size-full wp-image-24" title="error-model" src="http://www.lemil.com.ar/blog/wp-content/uploads/2008/12/error-model.jpg" alt="maquina-error-model" width="500" height="150" /></a></dt>
</dl>
</div>
<p> </p>
<p class="MsoNormal"><span>(**) This model should be created in the validation function. Also in this function you can choose where to display the messages.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>Important: to execute this function before submitting the data you just need to do this on step 3…</span></p>
<p class="MsoNormal"><span>  </span></p>
<div style="background-color: #f7f7f7; border: 1px solid #c0c0c0">
<p class="MsoNormal"><span>context[“validation”] = validate_miform;</span></p>
</div>
<p class="MsoNormal"><span>  </span></p>
<p class="MsoNormal"><em><span>5 &#8211; What to do at the server side… (in php)</span></em></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span> </span></p>
<div style="background-color: #f7f7f7; border: 1px solid #c0c0c0">
<p class="MsoNormal"><span>function server_side_processs_XXXXX($div,$projID)</span></p>
<p class="MsoNormal"><span>{</span></p>
<p class="MsoNormal"><span><span>  </span>[..]</span></p>
<p class="MsoNormal"><code><span>//Example - Form Submit Response</span></code></p>
<p class="MsoNormal"><code><span>$result['flag'] = 'success';</span></code></p>
<p class="MsoNormal"><code><span>$result['widget_message'] = 'Settings Succesfully saved';</span></code></p>
<p class="MsoNormal"><code><span>$result['errors']['top'] = '';</span></code></p>
<p class="MsoNormal"><code><span>$result['errors']['footer'] = 'Changes succesfully saved!';</span></code></p>
<p class="MsoNormal"><code><span>echo json_encode($result) ;</span></code></p>
<p class="MsoNormal"><span><span> </span>}</span></p>
</div>
<p class="MsoNormal"><span>  </span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>(*) You just need to build a custom message in an array with the format descripbed above. </span><code><span>'widget_message'</span></code><span> = messages are going to be displayed in the button bar. Top and footer in the divs with those names.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>The message that should be json encoded so don’t forget. ho add this (again in php)…</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span> </span></p>
<div style="background-color: #f7f7f7; border: 1px solid #c0c0c0">
<p class="MsoNormal"><code><span>header('Content-type: application/json');</span></code></p>
</div>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>(**) flags :</span></p>
<p class="MsoNormal"><span>Result: the word “success” or “failure”</span></p>
<p class="MsoNormal"><span>Message: any message to be displayed. You can embed html here.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Conclusions&#8230;</p>
<p class="MsoNormal">This is the first thing tutorial I create for this framework , I will be upgrading it and uploading new stuff about this&#8230;</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"><strong>by </strong><a href="http://www.lemil.com.ar/blog/?page_id=2" target="_self"><strong>Leandro Milmanda Perez</strong></a></p>
<p class="MsoNormal"><span> </span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.lemil.com.ar/blog/index.php/2008/12/state-machines-for-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

