<?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>Karmona Pragmatic Blog &#187; Development</title>
	<atom:link href="http://blog.karmona.com/index.php/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.karmona.com</link>
	<description>Pragmatic Software Management, Internet Trends, Life and more...</description>
	<lastBuildDate>Wed, 01 Feb 2012 20:26:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The GeoSpatial Cloud</title>
		<link>http://blog.karmona.com/index.php/2010/11/01/the-geospatial-cloud/</link>
		<comments>http://blog.karmona.com/index.php/2010/11/01/the-geospatial-cloud/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 19:47:05 +0000</pubDate>
		<dc:creator>Moti Karmona &#124; מוטי קרמונה</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Disruptive Technology]]></category>
		<category><![CDATA[Geo]]></category>

		<guid isPermaLink="false">http://blog.karmona.com/?p=860</guid>
		<description><![CDATA[In continue to my geo distance post, I have decided to post something on the simplest cloud architecture (RDS) for location based services (LBS) IMHO, (to cut a long story short :) Amazon RDS is more than enough for most geo location applications. Amazon Relational Database Service (Amazon RDS) is a web service that makes [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.karmona.com/wp-content/uploads/2010/11/japanacousticlistening.gif"><img class="alignleft size-medium wp-image-863" title="Japan Acoustic Location Devices During WWII" src="http://blog.karmona.com/wp-content/uploads/2010/11/japanacousticlistening-300x225.gif" alt="" width="300" height="225" align="left" /></a>In continue to my <a title="Karmona Labs on Geo Distance" href="http://blog.karmona.com/index.php/2010/10/09/karmona-labs-on-geo-distance/">geo distance</a> post, I have decided to post something on the simplest cloud architecture (RDS) for location based services (LBS)</p>
<p><a title="The Dunning-Kruger Effect" href="http://blog.karmona.com/index.php/2008/11/15/the-dunning-kruger-effect/">IMHO</a>, (to cut a long story short :) <a title="Amazon RDS" href="http://aws.amazon.com/rds/">Amazon RDS</a> is more than <a title="The Pareto Principle" href="http://blog.karmona.com/index.php/2007/07/14/the-pareto-principle/">enough</a> for most geo location applications.</p>
<blockquote><p><em><span style="color: #888888;">Amazon Relational Database Service (Amazon RDS) is a web service that makes it easy to set up, operate, and scale a relational database in the cloud.</span></em></p>
<p><em><span style="color: #888888;"><strong>Amazon RDS gives you access to the full capabilities of a familiar MySQL database</strong>. This means the code, applications, and tools you already use today with your existing MySQL databases work seamlessly with Amazon RDS.</span></em></p></blockquote>
<p><a href="http://blog.karmona.com/wp-content/uploads/2010/11/RDS.jpg"><img class="alignleft size-full wp-image-865" title="RDS" src="http://blog.karmona.com/wp-content/uploads/2010/11/RDS.jpg" alt="" width="492" height="395" /></a></p>
<p>Two <strong>preliminary </strong>steps:<br />
* Start a small DB instance with the kind help of <a title="AWS Management Console" href="https://console.aws.amazon.com/rds">AWS management console</a> (image above)<br />
* Use the RDS instance as if it is your &#8220;<a title="MySQL Surprise" href="http://blog.karmona.com/index.php/2007/08/11/mysql-surprise/">disruptive</a>&#8221;  MySQL instance e.g. manage it using <a title="MySQL Workbench" href="http://wb.mysql.com/">MySQL Workbench</a> 5.2.29</p>
<p><strong>&#8220;Flirting&#8221; with MySQL <a title="MySQL Spatial Capabilities" href="http://dev.mysql.com/doc/refman/5.5/en/spatial-extensions.html">spatial capabilities</a></strong> (which seems to be &#8220;fully&#8221; supported by AWS RDS)</p>
<p>* Create the (MyISAM) Table with spatial index</p>
<blockquote><p><em><span style="color: #888888;">CREATE TABLE `locations` (<br />
`id` int(11) NOT NULL AUTO_INCREMENT,<br />
`lat` decimal(10,6) DEFAULT NULL,<br />
`long` decimal(10,6) DEFAULT NULL,<br />
`loc` point NOT NULL,<br />
`name` varchar(45) DEFAULT NULL,<br />
PRIMARY KEY (`id`),<br />
<strong> SPATIAL KEY</strong> `loc` (`loc`)<br />
) ENGINE=<strong>MyISAM </strong>AUTO_INCREMENT=6 DEFAULT CHARSET=utf8</span></em></p></blockquote>
<p>* Insert few values to populate your table</p>
<blockquote><p><em><span style="color: #888888;">INSERT INTO locations VALUES(1,40.748433, -73.985655,  GeomFromText(&#8216;POINT(40.748433 -73.985655)&#8217;), &#8216;<strong>The Empire State Building</strong>&#8216;);<br />
INSERT INTO locations VALUES(2, 40.689166, -74.044444,  GeomFromText(&#8216;POINT(40.689166 -74.044444)&#8217;), &#8216;The Statue of Liberty&#8217;);<br />
INSERT INTO locations VALUES(3, 40.758611, -73.979166,  GeomFromText(&#8216;POINT(40.758611 -73.979166)&#8217;), &#8216;Rockefeller Center&#8217;);<br />
INSERT INTO locations VALUES(4, 40.757266, -73.985838,  GeomFromText(&#8216;POINT(40.757266 -73.985838)&#8217;), &#8216;Times Square&#8217;);<br />
INSERT INTO locations VALUES(5, 40.7527, -73.9818,  GeomFromText(&#8216;POINT(40.7527 -73.9818)&#8217;), &#8216;New York Public Library&#8217;);</span></em></p></blockquote>
<p>* Execute a simple test drive query which returns all the locations and their distance from &#8216;The Empire State Building&#8217; + Comparing two distance calculation methods (1) MySQL euclidean calculation (2) Haversine calculation (results below)</p>
<blockquote><p><span style="color: #888888;"><em>SELECT locations.name,</em><em><br />
</em><em> astext(locations.loc),</em><em><br />
</em><em> GLength(LineStringFromWKB(LineString(locations.loc, GeomFromText(&#8216;POINT(40.748433 -73.985655)&#8217;))))*100</em><em><br />
</em><em> AS euclidean,</em><em><br />
</em><em> 6378.1 * 2 * ASIN(SQRT(</em><em><br />
</em><em> POWER(SIN(RADIANS(40.748433 &#8211; locations.lat)  / 2),2) +</em><em><br />
</em><em> COS(RADIANS(40.748433)) * COS(RADIANS(locations.lat) )</em><em><br />
</em><em> * POWER(SIN((RADIANS(-73.985655 &#8211; locations.long)) /2), 2) )) AS haversine</em><em><br />
</em><em> FROM locations</em><em><br />
</em><em> &#8212; HAVING euclidean &lt; 1</em><em><br />
</em><em>&#8211; ORDER BY euclidean ASC LIMIT 10;</em></span></p></blockquote>
<p><a href="http://blog.karmona.com/wp-content/uploads/2010/11/mysql_spatial_query.jpg"><img class="alignleft size-full wp-image-864" title="MySQL Spatial Query" src="http://blog.karmona.com/wp-content/uploads/2010/11/mysql_spatial_query.jpg" alt="" width="646" height="449" /></a></p>
<p><strong><br />
</strong></p>
<p><strong>Two Surprises/Issues</strong></p>
<p><strong>(1)</strong> <a title="SRID" href="http://en.wikipedia.org/wiki/SRID">SRID</a> (Spatial Reference Identifier) support in MySQL is a disgrace &#8211; In MySQL, the SRID value is just an integer associated with the <a title="MySQL GIS Geometry " href="http://dev.mysql.com/doc/refman/5.5/en/gis-class-geometry.html">geometry value</a>. All calculations are done assuming Euclidean (planar) geometry.</p>
<p>Possible Workarounds: (1) Euclidean calculation can be enough (2) Use <a title="Karmona Labs on Geo Distance" href="http://blog.karmona.com/index.php/2010/10/09/karmona-labs-on-geo-distance/">Haversine</a> function if you need the accuracy</p>
<p><strong>(2)</strong> <a title="Problem with Alias in MySQL" href="http://dev.mysql.com/doc/refman/5.5/en/problems-with-alias.html">MySQL &#8216;Where&#8217; clause can&#8217;t use column aliases</a> for filtering</p>
<p>Possible Workarounds: (1) Use &#8216;Having&#8217; clause (see above) (2) Use the explicit function or field and not the alias</p>
<p>*** *** *** *** *** *** *** *** *** *** *** ***</p>
<p><strong>Related/Interesting</strong> <strong>reference </strong>- <a title="Geo Distance Search with MySQL (2008)" href="http://www.mysqlconf.com/mysql2008/public/schedule/detail/347">Geo Distance Search with MySQL</a> (Presentation | 2008)</p>
<p><strong>Important note</strong>: <span style="color: #888888;"><em>To help new AWS customers get started in the cloud, AWS is introducing a new free usage tier. Beginning November 1, new AWScustomers will be able to run a free Amazon EC2 Micro Instance for a year, while also leveraging a new <a title="Free AWS" href="http://aws.amazon.com/free/">free</a> usage tier for Amazon S3, Amazon Elastic Block Store, Amazon Elastic Load Balancing, and AWSdata transfer</em></span> – Very Exciting Times!!!</p>
<p><strong>Disturbing unrelated fact</strong>: Starting in 1931, every graduate of the Japanese Naval Academy was asked: <em>&#8220;How would you carry out a surprise attack on Pearl Harbor?&#8221;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.karmona.com/index.php/2010/11/01/the-geospatial-cloud/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Run &#8220;Hello World!!!1&#8243; Servlet on EC2 using AWS Toolkit for Eclipse</title>
		<link>http://blog.karmona.com/index.php/2010/09/15/servlet-on-ec2-using-aws-toolkit-for-eclipse/</link>
		<comments>http://blog.karmona.com/index.php/2010/09/15/servlet-on-ec2-using-aws-toolkit-for-eclipse/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 15:51:19 +0000</pubDate>
		<dc:creator>Moti Karmona &#124; מוטי קרמונה</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Simplicity]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://blog.karmona.com/?p=787</guid>
		<description><![CDATA[It started like yet-another-weekend-experiment but once you start a weekend experiment you never know when or how it will end… ;) I was very curios to take AWS for a quick test drive so I lost six hours of a precious beauty sleep and compiled this blog-post-capsule for future generations. &#160; &#160; The Quest * Run [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.karmona.com/wp-content/uploads/2010/09/matrix.jpg"><img class="alignleft size-full wp-image-796" title="Matrix" src="http://blog.karmona.com/wp-content/uploads/2010/09/matrix.jpg" alt="" width="250" height="184" align="left" /></a>It started like <a title="Base64 Encode – Decode Online Widget" href="http://blog.karmona.com/index.php/2008/10/20/base64-encode-decode-online-widget/">yet</a>-<a title="Google-App-Engine Development Environment" href="http://blog.karmona.com/index.php/2008/11/21/google-app-engine-development-environment/">another</a>-weekend-experiment but once you start a weekend experiment you never know when or how it will end… ;)</p>
<p>I was very curios to take AWS for a quick test drive so I lost six hours of a precious beauty sleep and compiled this blog-post-capsule for future generations.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>The Quest</strong></p>
<p>* Run an “Hello World!!!1” Servlet on EC2 (<a title="AWS Pricing" href="http://aws.amazon.com/ec2/pricing/">less than $0.01 per hour</a>)<br />
* <a title="Developing Java Web Applications with Apache Tomcat and AWS" href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2241">Create a local development environment using Eclipse</a> + <a title="AWS Toolkit for Eclipse" href="http://aws.amazon.com/eclipse/">AWS Toolkit for Eclipse</a> (seems like a really interesting toolchain)</p>
<p><strong>Preliminary Steps</strong></p>
<div id="_mcePaste">
<ul>
<li>AWS
<ul>
<li>Sign up for an <a title="AWS" href="http://aws.amazon.com/">AWS account</a></li>
<li>Sign in to the AWS Management Console</li>
<li>Set up authentication methods (I have used key pair)</li>
<li>Define security group (make sure SSH and HTTP are open)</li>
</ul>
</li>
<li>Local development environment
<ul>
<li>Install <a title="JDK 1.6" href="http://download.java.net/jdk6/">JDK 1.6</a></li>
<li>Install Eclipse (<a title="Eclipse" href="http://www.eclipse.org/downloads/">Eclipse IDE for Java EE Developers</a>)</li>
<li>Install <a title="AWS Toolkit for Eclipse" href="http://aws.amazon.com/eclipse/">AWS Toolkit for Eclipse</a></li>
<li>Install <a title="Tomcat 6.something" href="http://tomcat.apache.org/download-60.cgi">Tomcat 6.something</a></li>
</ul>
</li>
</ul>
</div>
<p><strong>Issues with AWS Toolkit defaults</strong></p>
<div id="_mcePaste">The plan was to use <a title="Developing Java Web Applications with Apache Tomcat and AWS" href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2241">this tutorial</a> but surprisingly enough this <a title="Google Search for Issues in AWS Toolkit" href="http://www.google.com/search?q=amazon+aws+toolkit+for+eclipse+error+tomcat+6+site:developer.amazonwebservices.com">did not work out-of-the-box</a> (apparently due to Tomcat/JDK versions on the default AMI the plug-in is using but I didn&#8217;t waste time in making sure this is the issue) so I moved to plan B</div>
<p>&nbsp;</p>
<p><strong>Plan B</strong> &#8211; Create a custom EC2 AMI with Tomcat 6.something and JDK 1.6</p>
<p>* Launch an EC2 instance using Amazon&#8217;s ami-84db39ed AMI.  (basic Fedora 8 image)<br />
* Use <a title="Putty" href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">Putty</a> connect to your instance</p>
<p>&nbsp;</p>
<p><strong>* Install Java on EC2 Instance</strong></p>
<p>* <a title="JDK Download" href="http://download.java.net/jdk6/">Download JDK</a> (“Linux RPM in self-extracting JDK file”)</p>
<blockquote>
<div><em>mkdir /usr/local/java</em></div>
<div id="_mcePaste"><em>cd /usr/local/java</em></div>
<div id="_mcePaste"><em>curl http://download.java.net/jdk6/6u23/promoted/b01/binaries/jdk-6u23-ea-bin-b01-linux-i586-30_aug_2010-rpm.bin &gt; jdk1.6.0.23-rpm.bin</em></div>
</blockquote>
<div>* Install the JDK</div>
<blockquote>
<div id="_mcePaste"><em>chmod 755 jdk1.6.0.23-rpm.bin # Change the permission of the file</em></div>
<div id="_mcePaste"><em>./jdk1.6.0.23-rpm.bin #Install</em></div>
<div id="_mcePaste"><em>updatedb; locate javac | grep bin  # this step merely serves to verify the installation</em></div>
<div id="_mcePaste"><em>/usr/sbin/alternatives &#8211;install /usr/bin/java java /usr/java/jdk1.6.0_23/bin/java 100</em></div>
<div id="_mcePaste"><em>/usr/sbin/alternatives &#8211;install /usr/bin/jar jar /usr/java/jdk1.6.0_23/bin/jar 100</em></div>
<div id="_mcePaste"><em>/usr/sbin/alternatives &#8211;install /usr/bin/javac javac /usr/java/jdk1.6.0_23/bin/javac 100</em></div>
<div id="_mcePaste"><em>/usr/sbin/alternatives &#8211;config java # Change the default JVM from gcj to Sun&#8217;s version (if needed)</em></div>
</blockquote>
<p><strong>* Install Tomcat on EC2 Instance</strong></p>
<div>* Download <a title="Tomcat 6.0 Download" href="http://tomcat.apache.org/download-60.cgi">Tomcat 6.0</a></div>
<blockquote>
<div id="_mcePaste"><em>mkdir /usr/tomcat</em></div>
<div id="_mcePaste"><em>cd /usr/tomcat</em></div>
<div id="_mcePaste"><em>curl http://apache.spd.co.il//tomcat/tomcat-6/v6.0.29/bin/apache-tomcat-6.0.29.tar.gz &gt; apache-tomcat-6.0.29.tar.gz</em></div>
<div id="_mcePaste"><em>tar zxvf apache-tomcat-6.0.29.tar.gz</em></div>
</blockquote>
<div>* Start Tomcat and to verify the installation, load the root page from a web browser: http://your_instance_name:8080</div>
<blockquote>
<div id="_mcePaste"><em>cd apache-tomcat-6.0.29</em></div>
<div id="_mcePaste"><em>bin/startup.sh  # Start Tomcat</em></div>
</blockquote>
<div>* Configure Tomcat to launch automatically - Create a file &#8220;/etc/rc.d/init.d/tomcat&#8221; with the following content:</div>
<blockquote>
<div id="_mcePaste"><em>#!/bin/sh</em></div>
<div id="_mcePaste"><em># Tomcat init script for Linux.</em></div>
<div id="_mcePaste"><em>#</em></div>
<div id="_mcePaste"><em># chkconfig: 2345 96 14</em></div>
<div id="_mcePaste"><em># description: The Apache Tomcat servlet/JSP container.</em></div>
<div id="_mcePaste"><em>JAVA_HOME=/usr/java/jdk1.6.0_23</em></div>
<div id="_mcePaste"><em>CATALINA_HOME=/usr/tomcat/apache-tomcat-6.0.29</em></div>
<div id="_mcePaste"><em>export JAVA_HOME CATALINA_HOME</em></div>
<div id="_mcePaste"><em>exec $CATALINA_HOME/bin/catalina.sh $*</em></div>
</blockquote>
<div>* Set the proper permissions for your init script and enable Tomcat for auto-launch:</div>
<blockquote>
<div id="_mcePaste"><em>chmod 755 /etc/rc.d/init.d/tomcat</em></div>
<div id="_mcePaste"><em>chkconfig &#8211;level 2345 tomcat on</em></div>
</blockquote>
<div>* Tomcat should now be automatically launched whenever your server restarts.</div>
<p>&nbsp;</p>
<p><strong>Are we there yet?</strong></p>
<div>It could be but apparently the plug-in was poorly designed to use none-configurable command lines so I needed to add the following &#8220;tricks&#8221;:</div>
<div>* Set JAVA_HOME / PATH for your user - Login to your account and change your .bash_profile file</div>
<blockquote>
<div id="_mcePaste"><em>vi ~/.bash_profile</em></div>
<div id="_mcePaste"><em>export JAVA_HOME=/usr/java/jdk1.6.0_23</em></div>
<div id="_mcePaste"><em>export CATALINA_HOME=/usr/tomcat/apache-tomcat-6.0.29</em></div>
</blockquote>
<div>* Create aliases to your Tomcat and JDK installation (these location are hard-coded in the plug-in)</div>
<blockquote>
<div><em>ln -s /usr/java/jdk1.6.0_23/ /env/jdk</em></div>
<div id="_mcePaste"><em>ln -s /usr/tomcat/apache-tomcat-6.0.29/ /env/tomcat</em></div>
</blockquote>
<div>The EC2 instance is ready :)</div>
<p>&nbsp;</p>
<p><strong>What next?</strong></p>
<div>* Create EBS Image AMI from your instance (it does takes couple of minutes to complete)<br />
* Open your eclipse and start a new AWS project as described in the original <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2241">link</a><br />
* Define a new EC2 Server in Eclipse using your new AMI (reminder: the default didn’t work)<br />
* Create your “Hello World!!!1” Servlet</div>
<blockquote>
<div id="_mcePaste"><em>protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {</em></div>
<div id="_mcePaste"><em>response.getWriter().println(&#8220;Hello World!!!1&#8243;);</em></div>
<div id="_mcePaste"><em>}</em></div>
</blockquote>
<div>* Click Run… this will automatically deploy your Servlet and run it on the remote EC2 instance… Wow :)</div>
<p>&nbsp;</p>
<p>That&#8217;s it &#8211; I hope this will help, it does take approx. 1 hour so if you know some other way to make it work, please don&#8217;t be shy and comment.</p>
<p><a href="http://blog.karmona.com/wp-content/uploads/2010/09/EC2.jpg"><img class="size-full wp-image-795 alignnone" title="Eclipse AWS Toolkit " src="http://blog.karmona.com/wp-content/uploads/2010/09/EC2.jpg" alt="" width="566" height="376" /></a></p>
<p><strong>Additional references I used to make it this far:</strong></p>
<div id="_mcePaste">* <a title="Setting up Java+Tomcat on EC2" href="http://sites.google.com/site/amistrongeryet/setting-up-java-tomcat-on-ec2">Setting up Java+Tomcat on EC2</a></div>
<div id="_mcePaste">* <a title="How to install Sun's JDK in Fedora 8 " href="http://alwajdi.blogspot.com/2007/12/how-to-install-snns-jdk-in-fedora-8.html">How to install Sun&#8217;s JDK in Fedora 8</a></div>
<div id="_mcePaste">* <a title="Apache Tomcat 6.0 documentation " href="http://tomcat.apache.org/tomcat-6.0-doc/index.html">Apache Tomcat 6.0 documentation</a></div>
<div id="_mcePaste">* <a title="Managing an Amazon EC2 Instance Using PuTTY SSH " href="http://www.keywordintellect.com/amazon-web-services/managing-an-amazon-ec2-instance-using-putty-ssh/">Managing an Amazon EC2 Instance Using PuTTY SSH</a></div>
<div id="_mcePaste">* <a title="AWS Toolkit for Eclipse " href="http://aws.amazon.com/eclipse/">AWS Toolkit for Eclipse</a></div>
<div id="_mcePaste">* <a title="Developing Java Web Applications with Apache Tomcat and AWS " href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2241">Developing Java Web Applications with Apache Tomcat and AWS</a></div>
<div id="_mcePaste">* <a title="Amazon EC2 - Getting Started Guide " href="http://docs.amazonwebservices.com/AmazonEC2/gsg/2006-06-26/">Amazon EC2 &#8211; Getting Started Guide</a></div>
<p>&nbsp;</p>
<p><strong>Free VI Tip for Dummies</strong></p>
<div id="_mcePaste">80% of knowing VI is just: ESC ESC ESC, i, Type-Your-Stuff, ESC ESC ESC, :wq!</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.karmona.com/index.php/2010/09/15/servlet-on-ec2-using-aws-toolkit-for-eclipse/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>The Cone of Uncertainty in Pastel</title>
		<link>http://blog.karmona.com/index.php/2010/04/18/the-cone-of-uncertainty-in-pastel/</link>
		<comments>http://blog.karmona.com/index.php/2010/04/18/the-cone-of-uncertainty-in-pastel/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 18:49:40 +0000</pubDate>
		<dc:creator>Moti Karmona &#124; מוטי קרמונה</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Planning]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Software Management]]></category>

		<guid isPermaLink="false">http://blog.karmona.com/?p=614</guid>
		<description><![CDATA[“The further a project progressed, the more accurate the estimates for the remaining effort and time became” (Barry Boehm, &#8220;Software Engineering Economics“, 1981)   NASA also came to the same conclusion that in the beginning of the project life cycle (i.e. before gathering of requirements) estimations have in general an uncertainty of factor 4. This means that [...]]]></description>
			<content:encoded><![CDATA[<p><em><a href="http://blog.karmona.com/wp-content/uploads/2010/04/BarryBoehm.jpg"><img class="alignleft size-thumbnail wp-image-618" title="Barry Boehm" src="http://blog.karmona.com/wp-content/uploads/2010/04/BarryBoehm-150x150.jpg" alt="" width="150" height="150" align="left" /></a>“The further a project progressed, the more accurate the estimates for the remaining effort and time became”</em><br />
(<a title="Barry Boehm" href="http://en.wikipedia.org/wiki/Barry_Boehm" target="_blank">Barry Boehm</a>, &#8220;Software Engineering Economics“, 1981)<br />
<em> </em><br />
NASA also came to the same <a title="Manager's Handbook for Software Development | NASA" href="http://homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-manage.pdf" target="_blank">conclusion</a> that in the beginning of the project life cycle (i.e. before gathering of requirements) estimations have in general an uncertainty of factor 4. This means that the actual duration can be 4 times or 1/4th of the first estimations&#8230;<br />
<em> </em><br />
I felt very free to add my own interpretation of the different point-of-views with cool <strong><span style="color: #ff99cc;">p</span><span style="color: #ffcc99;">a</span><span style="color: #ccffcc;">s</span><span style="color: #99ccff;">t</span><span style="color: #cc99ff;">e</span><span style="color: #ff99cc;">l</span></strong> colors as a sneak-peak cool-<a title="Delver.com - Beta" href="http://www.delver.com" target="_blank">beta</a>-preview of my next post.</p>
<p><a href="http://blog.karmona.com/wp-content/uploads/2010/04/TheConeOfUncertainty.gif"><img class="alignleft size-full wp-image-619" title="The Cone of Uncertainty" src="http://blog.karmona.com/wp-content/uploads/2010/04/TheConeOfUncertainty.gif" alt="" width="665" height="489" /></a></p>
<p>Make sense?<br />
<em> </em></p>
<p><em> </em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.karmona.com/index.php/2010/04/18/the-cone-of-uncertainty-in-pastel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Review Movie</title>
		<link>http://blog.karmona.com/index.php/2009/12/13/code-review-movie/</link>
		<comments>http://blog.karmona.com/index.php/2009/12/13/code-review-movie/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 18:17:10 +0000</pubDate>
		<dc:creator>Moti Karmona &#124; מוטי קרמונה</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Management]]></category>

		<guid isPermaLink="false">http://blog.karmona.com/?p=585</guid>
		<description><![CDATA[I have found this &#8220;old&#8221; movie we made back in 2002 during my work at Mercury to &#8220;educate&#8221; new employees on our code review procedure. p.s. Raz Yalov was nominated for best supporting actor that year ;) Enjoy&#8230; ************************************************************************ I have also copy-pasted the presentation transcript below&#8230; The Golden Rules of Code Review Do a [...]]]></description>
			<content:encoded><![CDATA[<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="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/olCVHBPZvwM&amp;hl=en_US&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/olCVHBPZvwM&amp;hl=en_US&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>I have found this &#8220;old&#8221; movie we made back in 2002 during my work at Mercury to &#8220;educate&#8221; new employees on our code review procedure.</p>
<p>p.s. Raz Yalov was nominated for best <strong>supporting </strong>actor that year ;)</p>
<p>Enjoy&#8230;</p>
<p>************************************************************************</p>
<p>I have also copy-pasted the presentation transcript below&#8230;</p>
<ul>
<li><strong>The Golden Rules of Code Review</strong>
<ul>
<li>Do a self-review first</li>
<li>Stick to the requirements</li>
<li>If you need to explain it, document it!</li>
<li>It’s about the code &#8211; not about you!</li>
<li>Unit testing</li>
</ul>
</li>
<li><strong>Do a self-review first</strong>
<ul>
<li>Have you checked all extreme cases?</li>
<li>Is your solution KISS?</li>
<li>Is your code self-explanatory?</li>
<li>Check it as if it was written by someone else</li>
<li>Ask yourself the questions you think you are about to be asked…</li>
</ul>
</li>
<li><strong>Keep It Simple Stupid&#8230;</strong></li>
<li><strong>Stick to the requirements</strong>
<ul>
<li>Make sure all aspects of the requirements are filled</li>
<li>Make sure you have tested both trivial and extreme cases</li>
<li>Document all thoughts and limitations in the code</li>
<li>Reference the requirements documents from your code</li>
<li>I18N – make sure the code supports multilingual capability where needed</li>
</ul>
</li>
<li><strong>Documentation</strong>
<ul>
<li>Document your files and your functions</li>
<li>Give informative comments</li>
<li>Explain the logic behind your decisions</li>
<li>If you did something that is not logical or intuitive, explain why</li>
<li>If you learned historical info while learning the code, document it (be creative :)</li>
<li>Follow a standard documentation format</li>
<li>When possible, use known design patterns and document the design pattern you chose</li>
</ul>
</li>
<li><strong>Unit Testing</strong>
<ul>
<li>Make sure your unit test is part of the change</li>
<li>If you can’t automate the test, check-in a manual procedure to run it</li>
<li>Make sure all aspects of the requirements are covered by the tests</li>
<li>Document all the tests you wanted to do but couldn’t</li>
<li>Test the I18N behavior of your code</li>
</ul>
</li>
<li><strong>The Code Review Life Cycle</strong>
<ul>
<li>“Self-review” your code</li>
<li>Schedule a code review</li>
<li>Schedule enough time for both people involved</li>
<li>When possible, schedule for a time during the morning</li>
<li>Split  the review into a few sessions, if needed</li>
<li>Switch your mind to “listener” mode</li>
<li>Write down all comments</li>
<li>After the code review is done, apply the necessary fixes and schedule a second review if needed</li>
<li>Check-in your changes</li>
</ul>
</li>
<li><strong>Code Review Tips</strong>
<ul>
<li>When you program, remember the last code review</li>
<li>If you disagree with the reviewer, invite a 3rd person to review and decide</li>
<li>In special cases, invite special guests to review your code</li>
<li>When change is small/simple/intuitive, do an &#8220;e-review” by mailing your change to the reviewer(s)</li>
<li>When self-reviewing, fix mistakes on the spot&#8230; :)</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.karmona.com/index.php/2009/12/13/code-review-movie/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>High Level Design Review Check-List</title>
		<link>http://blog.karmona.com/index.php/2009/12/12/high-level-design-review-check-list/</link>
		<comments>http://blog.karmona.com/index.php/2009/12/12/high-level-design-review-check-list/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 17:07:54 +0000</pubDate>
		<dc:creator>Moti Karmona &#124; מוטי קרמונה</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.karmona.com/?p=573</guid>
		<description><![CDATA[This is my recommended check-list for high level design review. *********************************************************************** *** keep it simple and make sure it answers all the requirements *** *********************************************************************** Reverify your Requirements Functional specification, use cases and requirements are clear and publicly documented Technical Requirements Performance requirements Security requirements Resources (CPU, Memory, Storage, IO) consumptions limits Audit requirements Out of scope [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.karmona.com/wp-content/uploads/2009/12/dilbert.jpg"><img class="alignleft size-thumbnail wp-image-574" title="Dilbert in a Meeting" src="http://blog.karmona.com/wp-content/uploads/2009/12/dilbert-150x150.jpg" alt="Dilbert in a Design Review Meeting" width="150" height="150" align="left" /></a>This is my recommended check-list for high level design review.</p>
<p>***********************************************************************<br />
<strong>*** keep it simple and make sure it answers all the requirements ***</strong><br />
***********************************************************************<br />
<br/><br/></p>
<ul>
<li>Reverify your Requirements
<ul>
<li>Functional specification, use cases and requirements are clear and publicly documented</li>
<li>Technical Requirements</li>
<li>Performance requirements</li>
<li>Security requirements</li>
<li>Resources (CPU, Memory, Storage, IO) consumptions limits</li>
<li>Audit requirements</li>
<li>Out of scope &#8211; What does the component NOT do?  What NOT support?</li>
<li>Future extendibility of the component (options for future extension, generic features etc.)</li>
</ul>
</li>
<li>High Level Design
<ul>
<li>Main components involved</li>
<li>Main Data flows</li>
<li>Components and sub-systems and how they relate to the component</li>
<li>Which sub-systems does it communicate with (e.g. Relation Façade)</li>
<li>Communication mechanisms (e.g. HTTP, WCF)</li>
<li>Which subsystems it is dependent on (e.g. Database, Gigaspaces) – What are the requirements?</li>
<li>Which sub-systems depend on it (e.g. App.) – What is the expectation?</li>
</ul>
</li>
<li>Architectural Strategy
<ul>
<li>High availability and load balancing</li>
<li>Error detection, fault and recovery</li>
<li>Logging and statistics gathering</li>
<li>Capacity limitation, planning &amp; resource management:
<ul>
<li>Memory consumption and management policies</li>
<li>CPU usage management</li>
<li>IO requirements</li>
<li>Storage requirement</li>
</ul>
</li>
</ul>
</li>
<li>Technical Assumptions
<ul>
<li>Limitations</li>
<li>Compromises
<ul>
<li>What does this design compromise? (Security, high availability, capacity, performance, quality&#8230;)</li>
<li>What are the engineering tradeoffs of this design, and why was the current design chosen?</li>
</ul>
</li>
<li>Risks and weak points</li>
</ul>
</li>
<li>Operation
<ul>
<li>Backward compatibility</li>
<li>Logging and Monitoring</li>
<li>Administration issues</li>
<li>Deployment issues:
<ul>
<li>How to deploy (e.g. can it be part of the regular release package?)</li>
<li>Required downtime?</li>
<li>Deployment risks?</li>
<li>Rollback capability</li>
</ul>
</li>
</ul>
</li>
<li>Testing strategy
<ul>
<li>What to focus on (80/20)</li>
<li>Functional test plan review</li>
<li>Deployment, environments, and setups</li>
<li>Fault and recovery</li>
<li>Load and capacity planning</li>
</ul>
</li>
<li>Execution plan (phases, timeline, milestones, critical path, dependencies etc.)</li>
</ul>
<p>Please comment if you think I  forgot something&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.karmona.com/index.php/2009/12/12/high-level-design-review-check-list/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Chubby Hubby</title>
		<link>http://blog.karmona.com/index.php/2009/08/10/chubby-hubby/</link>
		<comments>http://blog.karmona.com/index.php/2009/08/10/chubby-hubby/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 05:15:41 +0000</pubDate>
		<dc:creator>Moti Karmona &#124; מוטי קרמונה</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[People]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.karmona.com/?p=556</guid>
		<description><![CDATA[Recently, I have encountered an interesting paper (2006) about Chubby &#8211; Google&#8217;s (Paxos based) distributed lock service. I was especially amazed by the observations made on the Google engineering capabilities and mindset inside a &#8220;formal&#8221; research publication. Although one can easily get into a cynical state of mind reading this paper&#8230; I feel that this &#8220;pragmatic view&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.karmona.com/wp-content/uploads/2009/08/chubby_hubby.gif"><img class="alignleft size-full wp-image-557" title="Chubby Hubby" src="http://blog.karmona.com/wp-content/uploads/2009/08/chubby_hubby.gif" alt="Chubby Hubby" width="150" height="180" align="left" /></a></p>
<p>Recently, I have encountered an <a title="The Chubby Lock Service for Loosely-Coupled Distributed Systems" href="http://labs.google.com/papers/chubby.html" class="broken_link">interesting paper</a> (2006) about Chubby &#8211; Google&#8217;s (<a title="Paxos Made Simple" href="http://research.microsoft.com/en-us/um/people/lamport/pubs/pubs.html#paxos-simple">Paxos</a> based) distributed lock service.<br />
I was especially amazed by the observations made on the Google engineering capabilities and mindset inside a &#8220;formal&#8221; research publication.</p>
<p>Although one can easily get into a cynical state of mind reading this paper&#8230; I feel that this &#8220;pragmatic view&#8221; which combines a deep architectural and algorithmic know-how with keen understanding of the social factor in software development is exactly the key to create legendary software.</p>
<p>Anyway, very well written &#8211; highly recommended reading…</p>
<p>*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***</p>
<p><em>&#8220;Our developers <span style="color: #ff0000;">sometimes do not plan for high availability in the way one would wish</span>. Often their systems start as prototypes with little load and loose availability guarantees; invariably the code has not been specially structured for use with a consensus protocol. As the service matures and gains clients, availability becomes more important; replication and primary election are then added to an existing design.&#8221;</em></p>
<p><em>&#8220;Developers are often <span style="color: #ff0000;">unable to predict how their services will be used in the future</span>, and how use will grow.  A module written by one team may be reused a year later by another team with disastrous results &#8230; <span style="color: #ff0000;">O</span><span style="color: #ff0000;">ther developers may be less aware of the cost of an RPC</span>.&#8221;</em></p>
<p><em>&#8220;<span style="color: #ff0000;">Despite attempts at education</span>, our developers regularly write loops that retry indefinitely when a file is not present, or poll a file by opening it and closing it repeatedly when one might expect they would open the file just once.&#8221;<br />
</em></p>
<p><em>&#8220;<span style="color: #ff0000;">Developers rarely consider availability. We find that our developers rarely think about failure probabilit<span style="color: #ff0000;">ies</span></span><span style="color: #ff0000;">.</span>&#8220;</em></p>
<p><em>&#8220;<span style="color: #ff0000;">Developers also fail to appreciate the difference between a service being up, and that service being available to their applications.</span>&#8220;</em></p>
<p><em>&#8220;Unfortunately, <span style="color: #ff0000;">many developers chose to crash their applications on receiving [a failover] event</span>, thus decreasing the availability of their systems substantially&#8221;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.karmona.com/index.php/2009/08/10/chubby-hubby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google-App-Engine Development Environment</title>
		<link>http://blog.karmona.com/index.php/2008/11/21/google-app-engine-development-environment/</link>
		<comments>http://blog.karmona.com/index.php/2008/11/21/google-app-engine-development-environment/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 18:36:43 +0000</pubDate>
		<dc:creator>Moti Karmona &#124; מוטי קרמונה</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.karmona.com/?p=271</guid>
		<description><![CDATA[&#8220;You can always start a weekend experiment but you can never know how it will end&#8221;  (Moti Karmona, 2008 ;) I was very curios and wanted to take the GAE for a quick test drive but the Google documentation have few inaccuracies and isn&#8217;t sufficient if it is your first Python encounter so I lost [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.karmona.com/wp-content/uploads/2008/11/google_app_engine.png"><img class="alignleft size-thumbnail wp-image-272" style="margin: 5px; float: left;" title="Google App Engine" src="http://blog.karmona.com/wp-content/uploads/2008/11/google_app_engine-150x150.png" alt="" width="150" height="150" /></a></p>
<p><em>&#8220;You can always start a weekend experiment but you can never know how it will end&#8221;  (Moti Karmona, 2008 ;)</em></p>
<p>I was very curios and wanted to take the GAE for a quick test drive but the Google documentation have few inaccuracies and isn&#8217;t sufficient if it is your first Python encounter so I lost three hours of precious beauty sleep and compiled this blog-post-capsule for future generations.</p>
<p>How to setup your <a title="GAE Development Environment" href="http://code.google.com/appengine/docs/gettingstarted/devenvironment.html">development environment</a> to work with <a title="What is Google App Engine" href="http://code.google.com/appengine/docs/whatisgoogleappengine.html">Google-App-Engine</a> </p>
<ul>
<li>Get yourself a <a title="GAE" href="http://appengine.google.com/">GAE Account</a>  </li>
<li>Install <a title="Download GAE " href="http://code.google.com/appengine/downloads.html">Google App Engine SDK</a>, <a title="Download Python" href="http://www.python.org/download/">Python</a> and <a title="Download Eclipse" href="http://www.eclipse.org/downloads/">Eclipse</a>.</li>
<li>Install the PyDev Eclipse extension
<ul>
<li>Help &#8211;&gt; Software Updates &#8211;&gt; Available Software &#8211;&gt; Add the http://pydev.sourceforge.net/updates site &#8211;&gt; Install it &#8211;&gt; Restart Eclipse</li>
<li>Configure Eclipse to use the Python interpreter by navigating to Window &#8211;&gt; Preferences &#8211;&gt; PyDev &#8211;&gt; Interpreter &#8211;&gt; Python &#8211;&gt; New and select the location of <em>python.exe</em> on your system</li>
</ul>
</li>
<li>Create your first project
<ul>
<li>File &#8211;&gt; New &#8211;&gt; PyDev project and click next &#8211;&gt; Name your project and make sure Python 2.5 is selected.  </li>
<li>Add necessary App Engine libraries to your project | Right click your Project folder &#8211;&gt; Properties &#8211;&gt; PyDev – PythonPath (see image below)
<ul>
<li><em>C:\Program Files\Google\google_appengine</em></li>
<li><em>C:\Program Files\Google\google_appengine\lib\django</em></li>
<li><em>C:\Program Files\Google\google_appengine\lib\webob</em></li>
<li><em>C:\Program Files\Google\google_appengine\lib\yaml\lib</em></li>
</ul>
</li>
</ul>
</li>
</ul>
<p><a href="http://blog.karmona.com/wp-content/uploads/2008/11/add_gae_sdk_to_eclipse.jpg"><img class="alignnone size-full wp-image-273" title="Add GAE SDK to Eclipse" src="http://blog.karmona.com/wp-content/uploads/2008/11/add_gae_sdk_to_eclipse.jpg" alt="" width="500" height="364" /></a></p>
<ul>
<li>Create your project files (e.g. <a title="GAE HelloWorld" href="http://code.google.com/appengine/docs/gettingstarted/helloworld.html">GAE examples</a>)
<ul>
<li>app.yaml  </li>
</ul>
<ul>
<li>Your first python file </li>
</ul>
</li>
<li>Test your Local application
<ul>
<li>Update your Run configuration (see image below)
<ul>
<li>Change the Main Module field to <em>C:\Program Files\Google\google appengine\dev_appserver.py</em></li>
<li>On the Arguments tab, type in <em>&#8220;${project_loc}/src&#8221;</em> </li>
<li>Name this configuration and click apply and click run.</li>
</ul>
</li>
<li>Open http://localhost:8080 with your browser and enojoy your stupid app :)</li>
</ul>
</li>
</ul>
<p><a href="http://blog.karmona.com/wp-content/uploads/2008/11/gae_eclipse_run_configuration.jpg"><img class="alignnone size-full wp-image-274" title="GAE Eclipse Run Configuration" src="http://blog.karmona.com/wp-content/uploads/2008/11/gae_eclipse_run_configuration.jpg" alt="" width="500" height="313" /></a></p>
<ul>
<li><a title="Uploading your code to GAE" href="http://code.google.com/appengine/docs/gettingstarted/uploading.html">Upload your code to Google App Engine </a>
<ul>
<li>Open a command prompt and navigate to your application directory.</li>
<li>Type <em>appcfg.py &#8211;email=yourgmailaccount@gmail.com update src\ </em></li>
<li>To publish code within Eclipse, open Run &#8211;&gt; Run configurations and make a copy of your previous run configuration.  Change the Main Module to <em>appcfg.py</em>, and change the argument tab to <em>&#8211;email=yourgmailaccount@gmail.com update &#8221;${project_loc}/src&#8221;</em></li>
<li>Your code is now live! Test it by going to http://yourapp.appspot.com</li>
</ul>
</li>
</ul>
<p>Enjoy :)</p>
<p> </p>
<p> </p>
<p>P.S. More about the framework in future posts.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.karmona.com/index.php/2008/11/21/google-app-engine-development-environment/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Wasting Time on Blog Performance</title>
		<link>http://blog.karmona.com/index.php/2008/11/02/wasting-time-on-blog-performance/</link>
		<comments>http://blog.karmona.com/index.php/2008/11/02/wasting-time-on-blog-performance/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 18:53:19 +0000</pubDate>
		<dc:creator>Moti Karmona &#124; מוטי קרמונה</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.karmona.com/?p=241</guid>
		<description><![CDATA[Last weekend I was wasting time on my Blog performance and all I got is 10 sec. and this lousy post. Quick profiling with FireBug and YSlow FireFox extensions have done great wonders with my amazingly slow, not-really-that-interesting, hosted (webhost4life) WordPress blog. Main action items: I have removed the sitemeter performance penalty widget I have [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.karmona.com/wp-content/uploads/2008/11/usain_bolt_gold_puma_spikes.jpg"><img class="alignleft size-thumbnail wp-image-242" style="float: left;" title="Usain Bolt | Gold Puma Shoes" src="http://blog.karmona.com/wp-content/uploads/2008/11/usain_bolt_gold_puma_spikes-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>Last weekend I was wasting time on my Blog performance and all I got is 10 sec. and this lousy post.</p>
<p>Quick profiling with <a title="FireBug" href="http://getfirebug.com/">FireBug</a> and <a title="YSlow" href="http://developer.yahoo.com/yslow/">YSlow</a> FireFox extensions have done great wonders with my amazingly slow, not-really-that-interesting, hosted (<a title="WebHost4Life" href="http://webhost4life.com/">webhost4life</a>) WordPress blog.</p>
<p>Main action items:</p>
<ul>
<li>I have removed the <a title="SiteMeter" href="http://www.sitemeter.com/">sitemeter</a> <a title="Sitemeter Spyware Saga Continues" href="http://ericodom.blogivists.com/2007/04/09/sitemeter-spyware-saga-continues/">performance</a> penalty <a title="Things you should know before using Sitemeter" href="http://michaelsync.net/2007/04/11/things-you-should-know-before-using-sitemeter">widget</a></li>
<li>I have installed the <a title="WP SuperCache Plug-in" href="http://wordpress.org/extend/plugins/wp-super-cache/">WordPress Super Cache</a> Plug-in which wasn&#8217;t that simple with my webhost4life hosting limitations.</li>
<li>I have removed couple of images and reduce the blog top image size from 80k to 5k (!!!)</li>
</ul>
<p>Results:</p>
<ul>
<li>Main blog page returns after ~1 sec.</li>
<li>I am still getting a lousy grade with the YSlow tests (62) but it seems like the <a title="YSlow Blog Post Announcement" href="http://developer.yahoo.net/blog/archives/2008/06/new_yslow_with.html">YSlow blog post announcement</a> have failed too… (57 :)</li>
<li>Post pages are still slow (~2-4 sec.) but I know what I have <a title="Yahoo - Best Practices for Speeding Up Your Web Site" href="http://developer.yahoo.com/performance/rules.html">to do</a> the next time more than 1 million readers will complain…</li>
</ul>
<p>Have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.karmona.com/index.php/2008/11/02/wasting-time-on-blog-performance/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Yahoo Open Strategy</title>
		<link>http://blog.karmona.com/index.php/2008/10/28/yahoo-open-strategy/</link>
		<comments>http://blog.karmona.com/index.php/2008/10/28/yahoo-open-strategy/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 23:54:59 +0000</pubDate>
		<dc:creator>Moti Karmona &#124; מוטי קרמונה</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Disruptive Technology]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.karmona.com/?p=235</guid>
		<description><![CDATA[Yahoo have released the Y!OS (Yahoo Open Strategy) 1.0 platform. This is a cool set of simple APIs that can give you access to everything you ever wanted in Y! but was afraid to ask for&#8230; Yahoo! Social Platform (YSP) // The Yahoo Social Platform is a set of RESTful APIs for Profiles, Connections, Updates, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.karmona.com/wp-content/uploads/2008/10/yos_diagram.jpg"><img class="alignleft size-thumbnail wp-image-236" style="float: left;" title="Y!OS" src="http://blog.karmona.com/wp-content/uploads/2008/10/yos_diagram-150x150.jpg" alt="" width="150" height="150" /></a>Yahoo have <a title="Y!OS 1.0 Launch" href="http://developer.yahoo.net/blog/archives/2008/10/yos_10_launch.html">released</a> the <a title="Y!OS Introduction" href="http://developer.yahoo.com/yos/intro/index.html">Y!OS</a> (Yahoo Open Strategy) 1.0 platform.</p>
<p>This is a cool set of simple APIs that can give you access to everything you ever wanted in Y! but was afraid to ask for&#8230;</p>
<p><strong>Yahoo! Social Platform</strong> (<a title="YSP | Y! Social Platform" href="http://developer.yahoo.com/social/">YSP</a>)<br />
<span style="color: #008000;">// The Yahoo Social Platform is a set of RESTful APIs for Profiles, Connections, Updates, Contacts and Status.</span></p>
<p><strong>Yahoo! Query Language</strong> (<a title="YQL | Y! Query Language" href="http://developer.yahoo.com/yql/docs/">YQL</a>)<br />
<span style="color: #008000;">// The Yahoo Query Language is a web service that functions much like SQL (see example below)</span></p>
<p><strong>OAuth Authentication</strong><br />
<span style="color: #008000;">// OAuth is the authentication and authorization standard Yahoo has decided to use when giving third parties access to Yahoo user data.</span></p>
<p><strong>Yahoo! Applications Platform </strong>(<a title="YAP | Y! Application Platform" href="http://developer.yahoo.com/yap/guide/">YAP</a>)<br />
<span style="color: #008000;">// Currently very limited and in a restricted sandbox.</span></p>
<p>________________________________</p>
<p><strong>Example: How to use YQL APIs to access MyBlogLog profiles?</strong></p>
<p>Simply ask for all the community members of MyBlogLog community with this YQL:</p>
<p><em>select * from mybloglog.members.find where community_id in (select id from mybloglog.community.find where name=&#8221;Karmona Pragmatic Blog&#8221;) </em></p>
<p>And once you have the IDs you can ask for my personal profile by:</p>
<p><em>select * from mybloglog.member where member_id =&#8221;2008070609482910&#8243; </em><span style="color: #008000;"></span><br />
<a title="YQL Console" href="http://developer.yahoo.com/yql/console/"></a></p>
<p>Well… together with the existing <a title="Y! BOSS API" href="http://developer.yahoo.com/search/boss/">BOSS API,</a> this set of APIs is a powerful enablers to the Y! development network and I am sure some cool stuff are going to emerge from this innovative move…</p>
<p>Amazing!!!</p>
<p>________________________________</p>
<p>* You can have more YQL experiments using the <a title="YQL Console" href="http://developer.yahoo.com/yql/console/">YQL Console</a></p>
<p>** <a title="BOSS HACK Day | 2008" href="http://developer.yahoo.net/blog/archives/2008/10/boss_hack_day_h.html">Boss Hack Day</a> is coming to Tel-Aviv | November 6, 2008 @ Feature (!!!)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.karmona.com/index.php/2008/10/28/yahoo-open-strategy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Base64 Encode &#8211; Decode Online Widget</title>
		<link>http://blog.karmona.com/index.php/2008/10/20/base64-encode-decode-online-widget/</link>
		<comments>http://blog.karmona.com/index.php/2008/10/20/base64-encode-decode-online-widget/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 23:21:59 +0000</pubDate>
		<dc:creator>Moti Karmona &#124; מוטי קרמונה</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Delver]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://blog.karmona.com/?p=221</guid>
		<description><![CDATA[I am very &#8220;proud&#8221; to introduce the ultimate geek widget: Base 64 Encode / Decode Online Widget Q. Where can I see this dark magic? A. Here&#8230; :) Q. How can I add this cool Base64 widget to my blog? A. Simply copy-paste this little script: ___________________________________________ &#60;script type=&#8221;text/javascript&#8221; src=&#8221;http://blog.karmona.com/base64widget.js&#8221; &#62;&#60;/script&#62; ___________________________________________ Q. Does this [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.karmona.com/wp-content/uploads/2008/10/milton-office-space.jpg"><img class="alignleft size-thumbnail wp-image-222" style="float: left;" title="Milton | Office Space" src="http://blog.karmona.com/wp-content/uploads/2008/10/milton-office-space-150x150.jpg" alt="" width="150" height="150" /></a>I am very &#8220;proud&#8221; to introduce the ultimate geek widget: <strong><a title="Base 64 | Wikipedia" href="http://en.wikipedia.org/wiki/Base64">Base 64</a> Encode / Decode Online Widget</strong></p>
<p><strong>Q.</strong> Where can I see this dark magic?</p>
<p><strong>A.</strong> Here&#8230; :)</p>
<p><script type="text/javascript" src="http://blog.karmona.com/base64widget.js" ></script></p>
<p><strong>Q.</strong> How can I add this cool Base64 widget to my blog?</p>
<p><strong>A.</strong> Simply copy-paste this little script:<br />
___________________________________________</p>
<p><span style="color: #000080;"><em>&lt;script type=&#8221;text/javascript&#8221; src=&#8221;http://blog.karmona.com/base64widget.js&#8221; &gt;&lt;/script&gt;</em></span></p>
<p>___________________________________________</p>
<p><strong>Q.</strong> Does this blog widget support ALL blog platforms?</p>
<p><strong>A.</strong> Sure&#8230; (including dasBlog :)</p>
<p>Please contact me if you have any issues / questions / suggestions,</p>
<p>Have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.karmona.com/index.php/2008/10/20/base64-encode-decode-online-widget/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

