<?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>MIH SWAT &#187; Development</title>
	<atom:link href="http://www.mihswat.com/tag/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mihswat.com</link>
	<description>Headquarters of the Strategic Worldwide Applications and Technologies Team</description>
	<lastBuildDate>Tue, 31 Jan 2012 09:59:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>12 SEO Guidelines for Web Developers</title>
		<link>http://www.mihswat.com/2011/11/24/developers-seo-guide/</link>
		<comments>http://www.mihswat.com/2011/11/24/developers-seo-guide/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 14:29:41 +0000</pubDate>
		<dc:creator>Rafiq Phillips</dc:creator>
				<category><![CDATA[SEO / SEM]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=3332</guid>
		<description><![CDATA[When it comes to achieving sustainable SEO results the work of the web developer plays a major role in a campaigns success or failure. So much so that 2 of the 3 &#8220;On Page SEO&#8221; columns in the Periodic Table &#8230; <a href="http://www.mihswat.com/2011/11/24/developers-seo-guide/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="wp-caption aligncenter" style="width: 510px"><img title="SEO for Web Developers" src="http://farm7.staticflickr.com/6073/6054738580_02aaf54172.jpg" alt="SEO for Web Devlopers" width="500" height="331" /><p class="wp-caption-text">SEO for Web Developers</p></div>
<p>When it comes to achieving <a href="http://www.mihswat.com/category/seo-sem/">sustainable SEO</a> results the work of the web developer plays a major role in a campaigns success or failure. So much so that 2 of the 3 &#8220;On Page SEO&#8221; columns in the Periodic Table of SEO Ranking Factors, HTML and Architecture, rely solely on the work of our web developers. Preventing violations like cloaking and hiding words by using the same or nearly the same text colour and body background could be blamed on developers and designers who do not know enough about what works or doesn&#8217;t when it comes to SEO. The following post highlights <del datetime="2011-11-28T08:53:40+00:00">11</del>12 SEO guidelines every web developer should know and try to adhere to.<br />
<span id="more-3332"></span></p>
<p><a href="”http://searchengineland.com/seotable/?utm_source=embed&amp;medium=mdc&amp;campaign=table”"><img class="size-full wp-image-3338" title="seo-ranking-developers" src="http://www.mihswat.com/wp-content/uploads/2011/11/seo-ranking-developers.png" alt="SEO Ranking Factors" width="520" height="430" /></a></p>
<h3>1. Product Owners should assign SEO stories to each sprint.</h3>
<p>Whether you like it or not visitors referred to your web application by search engines can be anything from one third to somewhere near 80% of all your traffic. If you are building anything that will be publicly available on the web- search engines, or rather their bots, should also be considered as a user. &#8220;How will search engines react to any change we make to our site?&#8221; should be asked when planning your <a href="http://www.mihswat.com/category/agile/">Agile</a> sprints therefore adding it as a user story will be beneficial.</p>
<h3>2. Give SEO tasks higher priority in the Product Backlog</h3>
<p><img src="http://farm6.staticflickr.com/5092/5592994934_44643f81d2.jpg" alt="SEO and the product backlog" /></p>
<p>In most cases an SEO or agency&#8217;s expertise is consulted when the powers-that-be realize they need a boost in their rankings. The great thing about search marketing is that it&#8217;s never too late to provide assistance in increasing search engine traffic. Your engagement with an SEO usually results in an audit in which many tweaks and changes are suggested. From personal experience those tasks are assigned to somewhere near the bottom of the product backlog or don&#8217;t make it to the product backlog at all.</p>
<h3>3. Page Speed &#8211; Make Your Code <del datetime="2011-11-23T15:22:30+00:00">Harder</del> Better Faster</h3>
<p><object width="480" height="360"><param name="movie" value="http://www.youtube.com/v/gAjR4_CbPpQ?version=3&amp;hl=en_US&amp;rel=0" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="480" height="360" src="http://www.youtube.com/v/gAjR4_CbPpQ?version=3&amp;hl=en_US&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Not only does the speed of you site have a positive effect on decreasing bounce rate, improving page views, and a higher conversion rate. The speed of you page is a factor in search engine algorithms too. I&#8217;d suggest reading Google&#8217;s Distinguished Engineer, <a href="http://www.mattcutts.com/blog/site-speed/">Matt Cutts&#8217; post</a>. If you need more convincing that site speed effects the bottom line read <a href="http://www.watchingwebsites.com/archives/proof-that-speeding-up-websites-improves-online-business/">Alistair Croll&#8217;s detailed article</a>. Their are various add-ons plugins available for Firefox and Chrome that can <a href="http://code.google.com/speed/tools.html">assist web developers at improving page speed</a>. Web Developers should take Daft Punk&#8217;s lyrics to heart&#8230;</p>
<blockquote><p>Work It Harder Make It Better<br />
Do It Faster, Makes Us stronger<br />
More Than Ever Hour After<br />
Our Work Is Never Over</p></blockquote>
<p>Google have also released a <a href="https://developers.google.com/pagespeed/">web-based page speed testing tool</a>. The easiest way to find out how to improve you site&#8217;s speed  is to enter the URL,  click analyze and follow the guidelines.</p>
<h3>4. The URL&#8217;s impact on SEO</h3>
<p><img src="http://farm6.staticflickr.com/5238/5849438133_ae93654c9c.jpg" alt="do special charcters hurt seo?" /></p>
<p>When it comes to SEO all URLs are not created equal. URLs should be constructed for users first, search engines second. A personal rule I like using is to keep the URL as close to the root directory as possible i.e do/no/put/folders/in/the/URL/if/it/is/not/needed. Rather use hyphens (-) as separators between words or numbers. Even though the underscore performs a similar function to the dash, works as a keyword separator in a URL, it requires an additional keystroke when typing _. There are still some people who believe people use the URL structure when browsing a website but have you ever witnessed the practice of navigation by URL structure recently? If you plan to change ensure the proper redirects are in place. This brings us to the next point&#8230;</p>
<h3>5. Getting Redirections Right for SEO</h3>
<p>You&#8217;re about to change the URL structure of your pages and would like to retain the traffic those pages are receiving via search engines. We&#8217;ve known for over a decade that links are vital when is comes to rankings in the <acronym title="Search Engine Result Pages">SERPs</acronym> and those URls you are planning to change may also may have vital links pointing to them from external sites which are sometimes impossible or time consuming to request other webmasters to update. Have no fear, the 301 redirect is here. Of all the redirect codes the 301 redirect is the most important one to know. This will alert search engines to the new location of a page(s) and pass almost all it&#8217;s link juice (ranking power). SEOmoz has a detailed guide to <a href="http://www.seomoz.org/learn-seo/redirection">redirection using an Apache Web Server</a>. When redirecting pages or folders on IIS do not forget to select &#8220;A permanent redirection for this resource&#8221;. If you require a guide to 301 redirect for PHP, ASP(.net), Coldfusion, JSP/Java, Perl or Ruby-on-Rails <a href="http://www.webconfs.com/how-to-redirect-a-webpage.php">follow these guidelines</a>.</p>
<h3>6. Duplicate Content Mitigation &amp; Parameter Handling</h3>
<p><img src="http://farm7.staticflickr.com/6085/6039754090_164aa75e98.jpg" alt="duplicate content mitgation" /></p>
<p>Duplication of content occurs on the web when various pages (URLs) contains the same or very similar content. The problem with having more than one piece of identical content on the Internet is that it&#8217;s difficult for search engines to decide which version is more relevant to a given search query. To provide the best search experience, search engines will rarely show multiple, duplicate pieces of content and thus, are forced to choose which version is most likely to be the original (or best). To assist in preventing duplicate content issues which may negatively impact your SEO efforts the <a href="http://www.google.com/support/webmasters/bin/answer.py?answer=139394">rel canonical tag was introduced</a>. The rel canonical tag is vital for ecommerce stores which allow users to toggle the order in which the products are displayed (order by price or alphabetically). In most cases the same URL with additional query parameters are created to order/sort products. The canonical tag will prevent duplicate content issues in this case. Another instance where you wouldn&#8217;t want to confuse search engines is when paginating pages with hundreds of products listed or archived content. Google advises you not to use the rel canonical tag in this case but rather another rel tag <a href="http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html">called rel prev an rel next</a>.</p>
<h3>7. Get to Know &amp; Give Robots.txt a Go</h3>
<p><img src="http://farm6.staticflickr.com/5197/5797534002_774f39a0ca.jpg" alt="robots.txt seo c3po" /></p>
<p>The Robot Exclusion Standard, also known as the Robots Exclusion Protocol or robots.txt protocol, is a convention to prevent cooperating web crawlers and other web robots from accessing all or part of a website which is otherwise publicly viewable. Beware of blocking pages that should be indexed when using robotx.txt there is also a robots meta tag. The robots.txt or tag can be your best friend when implemented correctly or worst enemy if not This site dedicated to the Robots Exclusion Standard is a great place to start learning <a href="http://www.robotstxt.org/orig.html">all you need to know</a>.</p>
<h3>8. Give Images Descriptive File Names</h3>
<p>Digital cameras and mobile phones have the naming conventions that make no sense to us or search engine spiders. Instead of uploading an image as DSC00786.jpg rename it to something descriptive that give like may-the-force-be-with-you.jpg instead, if you were displaying an image of Yoda <img src='http://www.mihswat.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>9. Do not hide content within Javascript or Flash</h3>
<p>JQuery is used almost everywhere online these days which isn&#8217;t bad as it improves the user experience in most cases where content on a page can be changed on the fly. Search Engines may not see the content you wrap within Javasrcipt or Flash even though progress has been made by them to better read and understand them. This is where the &lt;noscript&gt; tag comes into play. When using Javascript or Flash be sure to also include the content you want indexed by search engines between  &lt;noscript&gt; and &lt;/noscript&gt;. A word of warning though, be sure that the content within Flash/Javascript is identical/similar. We do not want to violate their guidelines with keyword stuffing, cloaking or excessive link manipulation within the noscript tags.</p>
<h3>10. SEO&#8217;s Future is Semantic</h3>
<p>Seen those enhanced search results with movie ratings, personal information, product prices etc.. Google calls them <a href="http://www.mihswat.com/2010/07/05/google-rich-snippets-explained/">rich snippets</a>. The only way to enhance your site&#8217;s SERPs is providing semantically marked-up data. At <a href="http://www.mihswat.com/2011/06/14/smx-advanced-2011/">SMX Advanced 2011</a> a new standard adopted by the Bing, Yahoo and Google was introduced called <a href="http://schema.org">Schema.org</a>. Utilizing schema.org may not be a major ranking factor right now but it certainly will be in the near future. The best advice I can give any developer who wants to build a web app that will perform well when it comes to search engines rankings and attracting traffic is that you have to learn and implement schema.org as soon as you can.</p>
<h3>11. Social, Social, Social</h3>
<p>Facebook, Twitter, Google+ and the thousands of other Social Media platforms your target market use helps your SEO efforts too. Don&#8217;t go out and spam the various Social Networks with messages that are not targeted/solicited. Rather provide the tools and widgets that allow users to easily share your content with their networks. Which networks you choose will depend on who your target audience is. In this article&#8217;s case of we allow you to tweet, +1 or Like on Facebook. If you&#8217;ve found any value in this article feel free to share it <img src='http://www.mihswat.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>12. How To Ensure New Content is Indexed by Search Engines Quickly</h3>
<p>Google have <a href="http://googleblog.blogspot.com/2011/11/giving-you-fresher-more-recent-search.html">recently updated their algorithm</a> to ensure their results show you fresher content. The latest update <a href="http://searchengineland.com/google-search-algorithm-change-for-freshness-to-impact-35-of-searches-99856">impacts 35% of all search queries</a>. What can you as a web developer do to ensure the content on your site gets indexed quickly? By utilizing XML sitemaps and alerting the major search engines to changes to your XML sitemap as soon as content at a new URL gets added, content at old URLs are updated (a comment is posted, or any editorial changes) or even when a URL is changed. What is an XML sitemap?</p>
<blockquote><p>Sitemaps are an easy way for webmasters to inform search engines about pages on their sites that are available for crawling. In its simplest form, a Sitemap is an XML file that lists URLs for a site along with additional metadata about each URL (when it was last updated, how often it usually changes, and how important it is, relative to other URLs in the site) so that search engines can more intelligently crawl the site.</p></blockquote>
<p>Learn more about the <a href="http://www.sitemaps.org/protocol.html">XML Sitemap Protocol</a> and study the <a href="http://wordpress.org/extend/plugins/google-sitemap-generator/">XML Sitemap WordPress plugin</a> for a better technical understanding of how to create sitemaps and alert (ping) search engines to changes to your site quickly. This should ensure your new content is indexed quickly and should ensure pages from your site is included as part of the &#8216;fresh&#8217; search results (when relevant).</p>
<p>This article was not intended to be <em>the complete list of SEO Guidelines for Web Developers</em> but the intention is for it to be the starting point on your journey to make the web applications you buiild more SEO friendly now and in the future. <strong>If you think or know of anything I may have missed feel free to comment below with your SEO tip(s). </strong></p>
<p>Images used within this article are CC by <a href="http://www.flickr.com/photos/kalexanderson/sets/72157626416953560/">Kalexanderson</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2011/11/24/developers-seo-guide/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Gap Analysis: Scrum Management Tools</title>
		<link>http://www.mihswat.com/2011/07/14/gap-analysis-scrum-management-tools/</link>
		<comments>http://www.mihswat.com/2011/07/14/gap-analysis-scrum-management-tools/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 13:46:46 +0000</pubDate>
		<dc:creator>Otavio Ferreira</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=2935</guid>
		<description><![CDATA[More by Otavio Ferreira SWAT wholeheartedly supports the statement &#8220;Individuals and interactions over processes and tools&#8221;, made famous by the Agile Manifesto. Yet, at the same time, we also acknowledge the need for global companies (such as those that make &#8230; <a href="http://www.mihswat.com/2011/07/14/gap-analysis-scrum-management-tools/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div style="width:510px" id="__ss_8547773"><iframe src="http://www.slideshare.net/slideshow/embed_code/8547773?rel=0" width="510" height="426" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"><a href="http://www.slideshare.net/otaviofff" target="_blank">More by Otavio Ferreira</a></div>
</div>
<p><span id="more-2935"></span>SWAT wholeheartedly supports the statement &#8220;Individuals and interactions over processes and tools&#8221;, made famous by the <a href="http://agilemanifesto.org/">Agile Manifesto</a>. Yet, at the same time, we also acknowledge the need for global companies (such as those that make up the Naspers/MIH group of companies) to take advantage of online tools in order to improve communication and interaction among the individuals who form a geographically distributed team.</p>
<p>As stated by <a href="http://en.wikipedia.org/wiki/Ken_Schwaber">Ken Schwaber</a>, one of the co-creators of <a href="http://www.scrum.org/">Scrum</a>, in early 2009 there were more organizations using agile processes than waterfall methodologies and, of those employing agile, 84% were using Scrum.</p>
<p>Despite the obvious need for Scrum tools, there are only a handful of online Scrum management tools available in the market, both open-source and proprietary. Some of them do not adhere to the theory of Scrum, others are not mature enough to handle the process as a whole, and other are simply not meant to do so. This has led to a misunderstanding of the agile concepts and, consequently, a less than ideal adoption of the process. Very often, the form of Scrum implemented by a given company was modified to suit the tools that had been chosen.</p>
<p>This gap analysis aims at comparing several popular Scrum management tools in a pragmatic way, with the purpose of identifying the best options available. A mathematical model has been applied to the data collected, resulting in a final ranking with scores that range from zero to ten. Charts have been generated to present how effectively the evaluated tools have addressed particular phases within the Scrum process, as well as the popularity of each tool feature taken into account by this study.</p>
<p>It is important to bear in mind that we evaluated these tools according to our own selection of criteria, which include criteria to make it suitable for distributed development. According to our criteria, a final score was derived, but there may be other criteria which will give different results.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2011/07/14/gap-analysis-scrum-management-tools/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Developer problem solving technique #1: Taking a mental break</title>
		<link>http://www.mihswat.com/2011/02/23/developer-problem-solving-technique-1-taking-a-mental-break/</link>
		<comments>http://www.mihswat.com/2011/02/23/developer-problem-solving-technique-1-taking-a-mental-break/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 13:23:59 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[solving problems]]></category>
		<category><![CDATA[techniques]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=2173</guid>
		<description><![CDATA[Developers are modern day artists whose masterpieces are not hung on walls but stretched out thin on web servers all over the world, yes that is very poetic, but I really try to look at developers as artists and puzzle &#8230; <a href="http://www.mihswat.com/2011/02/23/developer-problem-solving-technique-1-taking-a-mental-break/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Developers are modern day artists whose masterpieces are not hung on walls but stretched out thin on web servers all over the world, yes that is very poetic, but I really try to look at developers as artists and puzzle solvers. To become better developers your skill-set must include creativity and problem solving skills and of course a artistic touch.</p>
<p>Writing a piece of code is an ever evolving process and never ending, its a puzzle. Let’s think of it in modern terms, writing a code is like solving a level in <a href="http://en.wikipedia.org/wiki/Angry_Birds">Angry Birds</a>, your primary objective is to get it done and working, i.e. solve the level and go on. But it does not stop there, you often do not get it perfect on the first try, so you need to go back and do more work on it, make it perform better, use less memory, its like going back to that level in Angry Birds and trying to get a 3 star rating.<span id="more-2173"></span></p>
<p>Somewhere along this process you will run into every artist’s greatest fear, the mental block. Once you hit a problem you often get to a point that you have so exhaustively thought of why and how to solve it that it simply becomes impossible to find a solution while still looking at that code. This is where the “mental breaks” come in. A different activity, to most its the simple act of going to get coffee or water, taking a stroll outside in the fresh air, some like sports, some like games.. everyone has their escape valve.</p>
<p>I once worked with a good friend and an incredible developer and problem solver, he went simply by the name of “<a href="http://chester.blog.br/">Chester</a>”. It was really interesting to see how he worked a problem mentally and I had some of my best whiteboard coloring brain jamming sessions discussing architecture with him, but his block solving strategy was even cooler. Whenever he got stuck and brain crunching failed to find the solution he simply stopped and picked up a bucket of lego blocks. He sat there building whatever came to his mind until he came to that Eureka moment and the solution came up.</p>
<p>This strategy is something I see more and more in various development companies, like Google, Microsoft and so many others. The colorful rooms with beanbags, video games, or just plain outdoor places, little parks, sport courts and toys. Nerf guns, lego, desktop catapults, iPads with games these are just some of the examples that  are out there. All of these have the same purpose as that bucket of building blocks my friend used, get your conscious mind off the problem and let your subconscious take a whack at it.</p>
<p>While this may not work for everyone or they may not be responsible enough to handle it, I believe advanced and competent developers are a perfect match for this, why? Firstly, the developer needs to be mature and responsible, otherwise all of the above are distractions from work, not breaks to solve problems. This is very crucial, if your developer is working to have a break and not taking a break to be able to work more, you have a team with low productivity or even worse with crappy code quality. Their minds are not in it, the code is now an obstacle in their way of the “free time”. Be careful to understand your team and select the right distraction, maybe lego’s will be productive and video games disruptive, or maybe its the other way around, there is no recipe, its all about knowing who works with you.</p>
<p>I truly believe in this process and  have had some of the best professional years of my life in companies that understand the importance of this break and the flexibility of time in the office, right now we have a <a href="http://mindstorms.lego.com/">Lego NXT</a> and an iPad and they work great for me whenever I hit a wall in my code. Does it work for you? Is your company in on this? Leave your comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2011/02/23/developer-problem-solving-technique-1-taking-a-mental-break/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing NodeJS</title>
		<link>http://www.mihswat.com/2010/11/25/introducing-nodejs-2/</link>
		<comments>http://www.mihswat.com/2010/11/25/introducing-nodejs-2/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 07:57:31 +0000</pubDate>
		<dc:creator>Dani Valentin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[oscon]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=1771</guid>
		<description><![CDATA[While I was at Oscon this year, just about every session that I attended, someone mentioned NodeJS. So when I found out there was a talk about it on the last day, I went along to discover what the buzz &#8230; <a href="http://www.mihswat.com/2010/11/25/introducing-nodejs-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>While I was at Oscon this year, just about every session that I  attended, someone mentioned NodeJS. So when I found out there was a talk  about it on the last day, I went along to discover what the buzz was  all about.<span id="more-1771"></span></p>
<p>Someone described NodeJS as the &#8220;first server-side JavaScript  implementation you’d actually like to use&#8221;. According to its creator, <a href="http://twitter.com/ryah">Ryan Dahl</a>, NodeJS is a set of bindings for the <a href="http://code.google.com/p/v8/">V8</a> (open source Javascript engine used in Google Chrome). It is focused on  performance providing an evented and non-blocking environment. It is  event-loop based and its goal is to allow writing high-performance web  servers easily.</p>
<p><strong>But how does NodeJS work?</strong></p>
<p>NodeJS starts from the premise that we are not doing I/O correctly.  Today, when we do a database query, the software just waits for a  response and doesn&#8217;t do anything in the meantime. It implies that you  block the entire process or you need a threading system that involves  extra time, high use of memory or extra machinery. There is a big  difference in the time used to access cache/RAM and the time used to  access the disk or the network. We should not be treating these 2 groups  the same way.</p>
<p>Ryan Dahl proposes a new way of doing I/O: supplying a callback to  every call to the disk, network or another process. With this, your  program can do other stuff (while querying the database, for example),  and return to the event loop as soon as the query is over without extra  expenses. So we can say that with NodeJS everything runs in parallel,  except your code.</p>
<p><strong>And why are we using javascript in the back-end?</strong></p>
<p>Although most of javascript programmers never heard about event loop  in their lives, the language has all the requirements to provide an  event loop platform:</p>
<p>- closures and anonymous functions are available for making callbacks<br />
- only one callback fires at a time<br />
- I/O through DOM event callbacks &#8211; if someone clicks a button, you have a &#8220;click&#8221; callback.</p>
<p>Besides those reasons, since the release of V8, every browser vendor  is pushing the speed of their engines in a velocity that no other  programming language saw before. And, in the end, every web developer  had one time in their life programmed with javascript (that inforces the  easily part of the goal).</p>
<p><strong>So, how do I use NodeJS?</strong></p>
<p>First, you need to download it from the <a href="http://nodejs.org/#download">project page</a> and install in your computer. The V8 engine is included in the pack and  the only dependency you have is Python 2.4. It is a command-line tool,  so you run your programs by typing in the terminal: node  yourapplication.js. The &#8220;Hello World&#8221; of NodeJS looks like this:</p>
<pre class="brush: jscript; title: ;">
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8124, &quot;127.0.0.1&quot;);
console.log('Server running at http://127.0.0.1:8124/');
</pre>
<p>This program creates an HTTP Server and prints &#8220;Hello World&#8221; when a  request is done. By the way, one of the design goals of the project was  to have support for all the important protocols: DNS, HTTP and TLS.</p>
<p><strong>Where should I use NodeJS?</strong></p>
<p>It should be used when high concurrency is really important. It is  suitable for real-time, crawlers, process monitoring, file uploading and  streaming applications, just to name a few. It is still not recommended  to use it for entire websites &#8211; it is too buggy and low level for that  in the moment.</p>
<p>More information can be found here:</p>
<p>Project page: <a href="http://nodejs.org/">http://nodejs.org/</a><br />
Github: <a href="http://wiki.github.com/ry/node/">http://wiki.github.com/ry/node/</a><br />
How to Node: <a href="http://howtonode.org/">http://howtonode.org/</a><br />
Ryan&#8217;s Techtalk at Google: <a href="http://www.youtube.com/watch?v=F6k8lTrAE2g">http://www.youtube.com/watch?v=F6k8lTrAE2g</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2010/11/25/introducing-nodejs-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Planning Reviewed</title>
		<link>http://www.mihswat.com/2010/08/23/agile-planning-reviewed/</link>
		<comments>http://www.mihswat.com/2010/08/23/agile-planning-reviewed/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 08:53:22 +0000</pubDate>
		<dc:creator>Otavio Ferreira</dc:creator>
				<category><![CDATA[Project Management]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=1492</guid>
		<description><![CDATA[Agile software development methods have reached great popularity among technology-based companies around the globe, arguably due to their effectiveness at managing the project stakeholders&#8217; expectations and goals. However, this positive outcome is directly related to the team members&#8217; ability to &#8230; <a href="http://www.mihswat.com/2010/08/23/agile-planning-reviewed/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Agile software development methods have reached great popularity among technology-based companies around the globe, arguably due to their effectiveness at managing the project stakeholders&#8217; expectations and goals. However, this positive outcome is directly related to the team members&#8217; ability to carry out the planning phases. And unfortunately the minimalistic theory frequently observed in agile processes tends to result in poorly written user stories.<span id="more-1492"></span></p>
<p>Agile methods are often described as &#8220;common sense&#8221;. For this reason <a href="http://en.wikipedia.org/wiki/Ken_Schwaber">Ken Schwaber</a> refuses being titled the Co-Creator of Scrum. Several software development practitioners such as <a href="http://en.wikipedia.org/wiki/Ivar_Jacobson">Ivar Jacobson</a>, <a href="http://en.wikipedia.org/wiki/Grady_Booch">Grady Booch</a>, and <a href="http://en.wikipedia.org/wiki/James_Rumbaugh">James Rumbaugh</a> all contributed to the set of principles that today form the Scrum framework.</p>
<p>However, having <a href="http://en.wikipedia.org/wiki/Scrum_%28development%29">Scrum</a>, <a href="http://en.wikipedia.org/wiki/Extreme_programming">XP</a>, or any other method classified as common sense leaves a lot of room for interpretation by the individuals applying them. Thus, iteration planning efforts sometimes end up being superficial, not entirely committed to the system actors&#8217; real goals. As a practical consequence, user stories are found reduced to single sentences hanging on the white-board.</p>
<p>It is clear that <a href="http://www.mountaingoatsoftware.com/articles/27-advantages-of-user-stories-for-requirements">User Stories are not Use Cases or Requirement Statements</a>, as detailed by Mike Cohn, and highlighted as follows. Firstly, use cases are generally written as the result of a long analysis, whereas user stories are written as notes that will be used to initiate further analysis conversations. Secondly, requirement statements make costs visible only when all of them have been formally written in a lengthy document, whereas with user stories a complexity estimate is associated with each story immediately. Costs are then easily calculated by taking into account the velocity of the team.</p>
<p>Nonetheless, developers should not underestimate the complexity inherent in each story, and complementary theory can be found on this topic. Ron Jeffries breaks down the stories into three aspects: <a href="http://xprogramming.com/articles/expcardconversationconfirmation/">Card, Conversation, and Confirmation</a>.</p>
<p>Firstly, the card does not detail the story in depth, but successfully identifies it. Typically, team members and product owners adhere to the following template, popularized by Mike Cohn: “As an &lt;actor&gt;, I want to &lt;action&gt;, so that &lt;achievement&gt;”. Although <a href="http://blog.mountaingoatsoftware.com/advantages-of-the-as-a-user-i-want-user-story-template">advantages derived from using this template</a> have been listed, other agile evangelists have proposed enhancements. Elizabeth Keogh, for instance, came up with <a href="http://sirenian.livejournal.com/47679.html">a new user story format that better emphasizes business value</a>. One way or the other, templating has been the common approach, and teams should adopt one that will fit in smoothly within their environment.</p>
<p>Secondly, conversation is the activity that communicates the requirement from customers to developers during the product and sprint planning. At this stage, details such as dependencies and barriers are mapped out. As depicted by Jeffries, the conversation is largely verbal, but is often supplemented with documents. It is important to bear in mind that good communication is a key success factor in any software development project, and none of the artifacts produced throughout the process may substitute that.</p>
<p>Finally, stories are verified through confirmation or, more specifically, <a href="http://en.wikipedia.org/wiki/Acceptance_testing">acceptance testing</a>. All criteria taking into consideration ought to be defined during planning phases as well.</p>
<p>Although the theory presented above brings some structure to the loose perception of user stories, the writing itself remains vague. So William Wake advocates that agile practitioners should <a href="http://xp123.com/xplor/xp0308/">INVEST in good stories and SMART tasks</a>. Despite not being a particular fan of forced acronyms, I have to admit that some guideline will be welcome here.</p>
<p>Briefly, characteristics that form a good story description are the following:</p>
<ul>
<li>Independent</li>
<li>Negotiable</li>
<li>Valuable</li>
<li>Estimable</li>
<li>Small</li>
<li>Testable</li>
</ul>
<p>.<br />
Hence, a story should be independent from others, negotiable between customers and programmers, valuable to customers, estimable in terms of complexity, small for the sake of understandability, and testable on account of readiness confirmation. Further studies suggest that “Small” should be replaced with “Sized appropriately”, as the bottom of the product backlog may contain items that are not fully understandable by the team yet, also known as Epics.</p>
<p>Tasks, in their turn, should be:</p>
<ul>
<li>Specific</li>
<li>Measurable</li>
<li>Achievable</li>
<li>Relevant</li>
<li>Time-boxed</li>
</ul>
<p>.<br />
So a task needs to be specific by addressing one particular point, measurable in order to be tested against the <a href="http://www.scrumalliance.org/articles/105-what-is-definition-of-done-dod">definition of done</a>, achievable by the task owner, relevant to the story at hand, and time-boxed. This latter characteristic should not be perceived as a formal estimation in hours or days though, as it does not work. The raw material in Software Engineering is the developer&#8217;s own intellect, and nobody would be able to estimate its maturation time. The same applies to activities such as painting or novel writing. Civil Engineering, on the other hand, benefits from using raw materials that allow for accurate calculations, such as concrete and iron.</p>
<p>As a final note, during the planning, instead of defining longer iterations and allowing for bigger stories, you might be interested in giving the following set of constraints a try. SWAT has successfully built some of its software by adhering to them. Manageability goes through the roof!</p>
<ul>
<li>5-day sprints</li>
<li>5-point stories, or less</li>
<li>2-developer teams, up to 4</li>
</ul>
<p>.<br />
In conclusion, a better organized agile planning is more likely to drive the team towards the goals identified by project stakeholders. Theories and guidelines have been proposed, and I suggest bringing these concepts to the table when starting a new agile project.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2010/08/23/agile-planning-reviewed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing Apps for Mobile</title>
		<link>http://www.mihswat.com/2010/08/10/developing-apps-for-mobile/</link>
		<comments>http://www.mihswat.com/2010/08/10/developing-apps-for-mobile/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 11:08:58 +0000</pubDate>
		<dc:creator>Dani Valentin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=1561</guid>
		<description><![CDATA[One of the most fascinating presentations I attended last OSCON (you can read my review here) was entitled Building Mobile Apps with HTML, CSS and Javascript by Jonathan Stark. Jonathan is a consultant for mobile applications, a frequent conference speaker &#8230; <a href="http://www.mihswat.com/2010/08/10/developing-apps-for-mobile/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>One of the most fascinating presentations I attended last OSCON (you can read my review <a href="http://www.mihswat.com/2010/07/26/oreilly-oscon/">here</a>) was entitled  Building Mobile Apps with HTML, CSS and Javascript by <a href="www.jonathanstark.com">Jonathan Stark</a>. Jonathan is a consultant for mobile applications, a frequent conference speaker and often quoted when media speaks of trends for internet and mobile.<span id="more-1561"></span></p>
<p>As outlined in his talk, the very first question when developing for mobile is: what type of application do I want my product to have? Currently, there are three different types: Native, Web and SMS. Choosing one is based on the purpose of your project as well as the target audience.</p>
<ul>
<li><strong>Native:</strong> used when the aesthetics of the app is very important. Native is recommended when you want to access a core feature of the device, like a camera or GPS. And, because of their app stores, Native apps have the added advantages discoverability and visibility.  The disadvantage with this type of application is fragmentation, i.e. you must write a different application for each device.</li>
<li><strong>Web:</strong> used when the focus is on distribution. Web apps are available on any device enabled with Internet access and there is no need to download. Considering testing and supporting, web applications have an advantage since they do not need to go through all the bureaucracy of the app store. Updates are also up and running instantly. The main disadvantage of web apps is sand-boxing.</li>
<li><strong>SMS:</strong> rare and only used in markets where internet access on the phone is not available or prohibitively expensive. SMS apps don&#8217;t offer discoverability.</li>
</ul>
<p>Considering the above, Web applications are usually the best choice. They are cheaper to produce, more standardized and easier to distribute. According to Stark himself, &#8220;If you CAN build your app with HTML, CSS and JavaScript, then you probably should.&#8221;</p>
<p>In the second part of the talk, two interesting tools were demonstrated:</p>
<h1>jQTouch</h1>
<p><a href="http://jqtouch.com">jQTouch</a> is a jQuery plugin for mobile webkit browsers developed by David Kaneda. It Allows native animations, navigation and automatic customization of theme. Even if you will not actually using it in your application, it is a great tool for prototyping it.</p>
<p>To set jQTouch, you have to add in your page:</p>
<p><a href="http://www.mihswat.com/wp-content/uploads/2010/07/Screenshot-test.html-gedit.png"><img class="size-full wp-image-1567 alignnone" title="jQTouch" src="http://www.mihswat.com/wp-content/uploads/2010/07/Screenshot-test.html-gedit.png" alt="jQTouch" width="424" height="119" /></a></p>
<p>That means:</p>
<p>(1) adding hardcore structural design rules. This is required and you shouldn&#8217;t edit it<br />
(2) add your theme style file. There are some options in jQTouch website or you can write your own<br />
(3) initialize jQTouch after javascripts files are added. You can pass an object as a parameter with some values as icon and preloadImages</p>
<p>You can learn more from  the <a href="http://jqtouch.com">jQTouch website</a> or its <a href="http://code.google.com/p/jqtouch/">documentation</a>.</p>
<p>You can also see a quick overview in the video bellow:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/6X4K2MQsSeI&amp;hl=en_US&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/6X4K2MQsSeI&amp;hl=en_US&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h1>PhoneGap</h1>
<p><a href="http://phonegap.com">PhoneGap</a> is a framework for building cross-platform mobile apps. Using it, you can still take advantage of core features in iPhone, Android, Palm Symbian and Blackberry. It&#8217;s been recognized as a game-changer and its source code has been downloaded more than 200,000 times! Web applications can now compete with native applications when functionality is the main requirement.</p>
<p>For more information, you can visit the <a href="http://phonegap.com">PhoneGap</a> website.</p>
<p>To learn how to install it, check the video bellow:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/yuTqQyzyVvU&amp;hl=en_US&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/yuTqQyzyVvU&amp;hl=en_US&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h3>Get the Best Apps Now!</h3>
<p>We look at mobile apps from different app stores and find out the best ones for you! This is your place to find out the most useful apps for your various devices. Visit <a href="http://apps.mihswat.com">apps.mihswat.com</a> for the best Android, iOS, Chrome, Firefox, PC, Mac , Amazong and Windows Phone apps.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2010/08/10/developing-apps-for-mobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Two Approaches To Setting Up An Agile Team</title>
		<link>http://www.mihswat.com/2009/12/01/two-approaches-to-setting-up-an-agile-team/</link>
		<comments>http://www.mihswat.com/2009/12/01/two-approaches-to-setting-up-an-agile-team/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 07:41:02 +0000</pubDate>
		<dc:creator>Graeme Cumming</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[teams]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=896</guid>
		<description><![CDATA[The development team at DStv Labs, a division of DStv Online and MIH SWAT has recently been thrown together to look at some exciting projects in the New Media space. In keeping with the latest thinking around agile development frameworks, &#8230; <a href="http://www.mihswat.com/2009/12/01/two-approaches-to-setting-up-an-agile-team/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The development team at <strong>DStv Labs</strong>, a division of <a href="http://www.dstvo.com/">DStv Online</a> and <a href="http://www.mihswat.com">MIH SWAT</a> has recently been thrown together to look at some exciting projects in the New Media space. In keeping with the latest thinking around agile development frameworks, the DStv Labs team has adopted <strong><a href="http://en.wikipedia.org/wiki/Scrum_%28development%29">Scrum</a></strong> as the framework that will be used to deliver these projects.<span id="more-896"></span></p>
<p>For those not familiar with <strong>Scrum</strong>, let me summarise the key principles quickly:</p>
<p>1. A project team is setup usually consisting of between 5 and 9 resources.<br />
2. The resources within the team have the set of skills needed to develop products.<br />
3. There are defined roles within this setup, namely</p>
<ul>
<li>The <strong>Product Owner</strong>:      Manages a list of product features that require development. These      features are prioritized by the Product Owner.</li>
<li>The <strong>Scrum Master</strong>:      Ensures that the processes are followed and helps the team deliver the      product features by removing any impediments that prevent them from      delivering.</li>
<li>The <strong>Team</strong>:      Self organises around the product features and collectively work together      to deliver these product features.</li>
</ul>
<p>I&#8217;m simplifying the roles here of course &#8211; there are further responsibilities that are played by each role, but this is the essence.</p>
<p>4. The team produces working demonstrations of the product features at regular intervals (typically every two weeks).<br />
5. These working demonstrations are visible to the business, allowing the business to get a view on where the product is going and whether it needs refinement or a complete change in direction.<br />
6. The refinements or improvements are then fed back into the team, prioritised by the Product owner and driven through to demonstration once again.</p>
<p>The framework is <strong>agile</strong> in nature. Problems are quick to identify, and quick to change. Traditional project management methodologies would allow a project to proceed down a long and drawn-out development path and if the up-front analysis had not been 100% accurate, or if external factors had required a change to the project during development, this would be very difficult to accommodate. The Scrum process by contrast makes sense &#8211; it is a simple, logical way of delivering projects and caters for changing requirements.</p>
<p>That said, the question of how to setup the Scrum team and environment remains. As a new team, we are facing these questions and trying to figure out the best path to creating the esteemed &#8220;<strong>High Performance Team</strong>&#8220;. There are two schools of thought here. Let me deal with the first.<br />
As competent and experienced team members, there is a sense of &#8220;doing things right, from the start&#8221;. This includes everything from ordering the right development hardware, deciding on what software is appropriate, defining the practices and principles the team is going to follow, which languages are best suited for the projects that need to be developed, and what the collaboration environments need to look like. All good stuff, and completely necessary. The planning also includes discussion and decisions around how to test the code that is developed, how it is documented, how much of this is automated versus manual, which tools are best suited for testing, how new issues get logged and fed back into the team, and how much test coverage is considered acceptable. Again, all good stuff, and all appropriate to the work that is being done within the team. It is also a good idea to get the overall context of the project defined up front so that broad architecture decisions can be made. Where the team needs to be careful however, and we are all sometimes guilty of this, is when it comes to over-engineering a solution up-front. Chances are that this picture is changing, or will eventually change. Nothing wrong with good architecture up-front, but trying to understand too much detail too soon is probably wasted effort.</p>
<p>Lets take a look at the second school of though for a moment. The principles of Scrum and Agile development methodologies and practices suggest that the value lies in <strong>delivering small</strong>, <strong>incremental features</strong>, <strong>regularly</strong>. Mistakes and changes to project scope are inevitable and it is the ability of the team to correct these mistakes, and accept the changes in scope that makes them &#8220;High Performance Teams&#8221;. Through <strong>continuous feedback</strong> and team &#8220;retrospectives&#8221;, the gaps get filled, and the holes get plugged. The team continues to improve as a result and the delivery continues to speed up &#8211; well, from the initial stages anyway. Its a situation in which the team adapts the principles of Agile software development to suit their unique environment, the individual strengths and weaknesses and their team characters.</p>
<p>The point that I am trying to make here, is that there are two ways to try and achieve the &#8220;High Performance Team&#8221;. There is the &#8220;Lets build the 6-foot armour-plated robot with Augmented Reality vision&#8221;, or, the &#8220;Lets build the stick man and determine what he needs next&#8221; approach. There is a fine line between setting up a team that does everything right from the start, and a team that is <strong>setup to learn</strong> how to do what is right for them.</p>
<p>I was recently made aware of an agile development team based in the UK that has been together for the past 60 months. They deliver code weekly, have a number of visible metrics for how many bugs are in their system and how quickly they are resolved, what the velocity (capacity for delivery) of the team is, converted into monetary value, and a number of other &#8220;reporting&#8221; metrics. Incredibly useful information, and a sign that they are a &#8220;High Performance Team&#8221;, but I wonder how much of that was setup from the start, and how much of it &#8220;evolved&#8221; as the team progressed through their 60 months of development together?</p>
<p>To take the analogy used above, whilst it is important to have a team vision in place and to follow best practices where ever possible, I firmly believe that it is best to create the stick-man from day one, and get him running in an agreed direction, rather than spend too much time thinking and planning the 6-foot robot that potentially is only capable of taking a few steps at a time, and hopefully, in the right direction.</p>
<p>That being said, our team is in a good place. We are positioned nicely and are moving forward as a unit. Hopefully the discussions that our team have had, and the conclusions drawn here, can help you position and setup your own team.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2009/12/01/two-approaches-to-setting-up-an-agile-team/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Journey to planet Android</title>
		<link>http://www.mihswat.com/2009/09/28/my-journey-to-planet-android/</link>
		<comments>http://www.mihswat.com/2009/09/28/my-journey-to-planet-android/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 09:11:17 +0000</pubDate>
		<dc:creator>Bradley Wells</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[swat]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=838</guid>
		<description><![CDATA[Coming from a Flash Developer background I have had no experience with mobile application development. From the time I saw the first phone to run Android, the G1, I have been itching to get into Android development. So when I &#8230; <a href="http://www.mihswat.com/2009/09/28/my-journey-to-planet-android/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Coming from a Flash Developer background I have had no experience with mobile application development. From the time I saw the first phone to run Android, the G1, I have been itching to get into Android development. So when I was recently given the go-ahead to take this journey into the <a title="Android" href="http://www.android.com/" target="_blank">Android</a> world, plus a shiny new Android phone <img src='http://www.mihswat.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  , I was both excited and nervous<span id="more-838"></span> . Why nervous? Firstly, I had never developed for a mobile device before, secondly I had never written  a Java application before and lastly because I had no idea how the Android framework actually worked . But this is what we as SWAT employees love, new territory to conquer ! If you havent seen a Android device yet, see the video below of the new HTC Hero.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="295" 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/FKTDSfbcbBU&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="400" height="295" src="http://www.youtube.com/v/FKTDSfbcbBU&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Nowadays it&#8217;s almost impossible to write an article about mobile phones without mentioning the very successful<a title="iPhone" href="http://www.mihswat.com/2009/09/22/i-dont-like-the-iphone/" target="_self"> iPhone</a>. <a title="Apple" href="http://www.apple.com" target="_blank">Apple</a> had practically turned the mobile  industry upside down with its touch screen device. Some people will argue to the death about how the iPhone, or the &#8220;Jesus Phone&#8221; as some call it, is the best thing since sliced bread &#8211; and nobody can argue against how successful this device has become. But I am predicting a total onslaught of Android devices within 2 years. The Android army of phones will be everywhere you look and you will not be able to visit any cellphone store without running into at least 50 different phones running this OS. OK &#8211; maybe that is going a bit far but I think you get the message and already we are seeing signs of it. At the time of writing this article there are 16 official Android devices. How will this army of Android devices be created you ask ? Enter the Open Handset Alliance.</p>
<p>The <a title="Open Handset Alliance" href="http://en.wikipedia.org/wiki/Open_Handset_Alliance" target="_blank">Open Handset Alliance</a> was formed in 2007 and currently has 47 members. It is a consortium of technology and mobile companies all dedicated to bringing us better mobile experiences, with Android being their first project . There are some big names amongst the 47 members, including Google, Intel, Nvidia, HTC, Asus, SonyEriccson, LG, Ebay. With so many big names dedicated to Android development, it is bound to be amongst the top mobile device OS&#8217;s. You can read more about this <a title="before" href="http://www.mihswat.com/2008/10/07/why-android-will-win-or-iphone-in-the-long-run/" target="_self">argument here</a>, let me get to the Android architecture.</p>
<p>Android is a Linux based software stack. On top of the Linux kernel layer lies a layer for the system libraries such as SQLite, SSL, OpenGL, etc. This layer also houses the Android runtime, which runs the Dalvik Virtual Machine. On top of this there&#8217;s the Application Framework, housing the managers like the Activity Manager, Window Manager, etc. Then finally there is the application layer, which is the layer we are most interested in.</p>
<p><img class="alignnone size-full wp-image-844" title="system-architecture" src="http://www.mihswat.com/wp-content/uploads/2009/09/system-architecture.jpg" alt="system-architecture" width="428" height="307" /></p>
<p>Android applications can consist of different sections, namely Activities, Services, Broadcast Recievers and Content Providers. Activities form the User Interface(UI) part of the application, Services run in the background similar to RSS feed readers checking for updates. Broadcast Receivers just listen for particular system broadcasts, for example , when the battery is low. Content Providers just provide content to any asking application , for example your application asking the contact book to provide the users contacts for use within your application. We will mostly be concerned with Activities.</p>
<p>Activities were designed to be totally integrated with one another. What I mean is that Activities can call one another and pass data to one another, basically  like an event driven system, but on a system wide level. An application is thus a group of Activities passing Intents to one another. It is then possible to include , lets say, a Google Maps Activity into your application by passing a Google Maps Intent to it and waiting for a result from it. It would seem to the end user that you created a Google Maps section to your app. I think this is pretty powerful.</p>
<p>To get started with creating these applications you need the free <a title="Android SDK" href="http://developer.android.com/sdk/1.6_r1/index.html">Android SDK</a>, Apple iPhone developers need to register first($99!). Then you going to need an IDE, there is an Eclipse plugin, the <a title="Android Development Tools" href="http://dl.google.com/android/ADT-0.9.3.zip">Android Development Tools</a>(ADT) plugin that has everything including the latest stable SDK. You don&#8217;t immediately need a phone to test on as ADT comes with an Android emulator that you can debug and test with but you will eventually need a phone to properly test with. ADT is pretty awesome as it comes with many tools to tell you exactly whats happening on the phone, which threads are running,it has code completion, wizards to quickly create sub classes and much more. It took me less than 30 minutes to get a  &#8220;Hello World&#8221; application running on the Android emulator from the time I installed the ADT!</p>
<p>Since ActionScript 3 is a lot like Java I could easily jump in even though there were a few syntax differences &#8211; but after about 2 days and the help of ADT I had a basic application drawing a ball bouncing round the screen. But that was only the beginning and have rewritten sections of the game many times. Now after two weeks of lots of learning I have created the game and have it running on my phone. It is still a prototype and even though it needs weeks more spit and polish, after demonstrating the game I have gotten the thumbs up to turn it into a real game which we will be registering in the Android market.  There is still a lot to learn from this wonderful framework but the <a title="Android Groups" href="http://groups.google.com/group/android-beginners">Android groups</a> have been great help, as well as all the <a title="Android forums" href="http://www.anddev.org/" target="_blank">Android forums</a> and of course, <a title="developers guide" href="http://developer.android.com/guide/topics/graphics/2d-graphics.html">the Reference guide</a> which ships with the SDK. It has been a challenge to get to grips with this entirely new development area but it was far easier than imagined it would be. I spent about 10 times longer getting to know Flash, and that was with people available to help me.</p>
<p>What about my experience using the phone? I can honestly say I am now more connected than ever before. My email, both gmail and exchange, is pushed to the phone. My Twitter application runs in the background constantly fetching  tweets, while my Facebook application gets all my buddies&#8217; status updates to me as often as I want to see them. News and weather is updated all the time. My calendar and contacs are synchronised between my phone and my mobile. I never get lost anymore, maps are always available and my Gtalk status is always &#8220;available&#8221; and running in the background, unlike on some other phones <img src='http://www.mihswat.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Oh, and it makes phone calls as well.</p>
<p>I will follow up with another article of my findings, good and bad, this time focusing on the actual Android game development.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2009/09/28/my-journey-to-planet-android/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New features of PHP 5.3</title>
		<link>http://www.mihswat.com/2009/01/23/new-features-of-php-53/</link>
		<comments>http://www.mihswat.com/2009/01/23/new-features-of-php-53/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 08:02:36 +0000</pubDate>
		<dc:creator>Guilherme Blanco</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php 5.3]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=547</guid>
		<description><![CDATA[Almost every PHP developer is tracking the changes that will be present in the next release of the language. For those who have not been tracking the changes, or who have lost track of them &#8211; I am here to &#8230; <a href="http://www.mihswat.com/2009/01/23/new-features-of-php-53/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Almost every PHP developer is tracking the changes that will be present in the next release of the language.<br />
For those who have not been tracking the changes, or who have lost track of them &#8211; I am here to expose to you everything that PHP 5.3.0 is going to make possible.</p>
<p>The 5.3 release of PHP is the most important release ever, and adds a lot of new features &#8211; leading to a delay in its release date. We will look at the most important feature enhancements from version 5.2 to version 5.3.<br />
<span id="more-547"></span></p>
<p>Let&#8217;s first look at the enhancements from PHP 5.1.X to PHP 5.2.0:</p>
<ul>
<li> Memory optimizations</li>
<li> Filter extension</li>
<li> JSON extension</li>
<li> ZIP extension</li>
<li> File upload progress hooks</li>
<li> DateTime and DateTimeZone objects</li>
<li> A couple of others small ones</li>
</ul>
<p>While these changes were interesting, (especially the first one, which lead PHP 5 to run quicker than PHP 4), they were not very visible and  &#8220;hype&#8221; changes.<br />
Now, let&#8217;s take a look at what PHP 5.3 will offer, and let&#8217;s try to judge the extent of the upgrade.</p>
<p><strong>PCRE, Reflection and SPL functions are always enabled</strong><br />
It sounds obvious, but some libraries rely on Reflection/SPL to be able to work. One example is Doctrine ORM, which enables you to work at the OO level when using databases as storage medium.<br />
PCRE is a faster library than POSIX RegEx, which may help you to write faster code when dealing with regular expressions.<br />
Also, I am helping with the re-implementation of the spl_object_hash function,  to solve some collisions and also to improve performance.</p>
<p><strong>NOWDOC and HEREDOC syntax</strong><br />
While HEREDOC syntax has been available for quite a while, it has some interesting optimizations that will allow it to behave as fast as a normal string declaration. HEREDOC uses the same syntax as a normal string declaration with double-quotes.</p>
<p><code>$author = 'Guilherme Blanco';</code></p>
<p><code>$msg = &lt;&lt;&lt; EOT<br />
This is \x41 message from $author!<br />
EOT;</code></p>
<p><code>$msg2 = "This is A message from $author!";</code></p>
<p><code>// $msg1 === $msg2<br />
echo $msg1; // Prints: This is A message from Guilherme Blanco!</code></p>
<p>NOWDOC is a new inclusion to the language, which behaves exactly like a normal string declaration with single-quotes. This means it doesn&#8217;t convert the variables and symbol codes to their correspondent values.</p>
<p><code>$author = 'Guilherme Blanco';</code></p>
<p><code>$msg = &lt;&lt;&lt; 'EOT'<br />
This is \x41 message from $author!<br />
EOT;</code></p>
<p><code>$msg2 = "This is A message from $author!";</code></p>
<p><code>// $msg1 !== $msg2<br />
echo $msg1; // Prints: This is \x41 message from $author!</code></p>
<p><strong>?: operator</strong><br />
Quick alias for those that have to do this all the time:</p>
<p><code>// PHP &lt; 5.3.0<br />
$data = isset($var) ? $var : 'default';</code></p>
<p><code>// PHP &gt;= 5.3.0<br />
$data = isset($var) ?: 'default';</code></p>
<p><strong>__DIR__ constant and error modes E_USER_DEPRECATED, E_DEPRECATED</strong><br />
These two error modes are quite simple. They have been introduced to inform the user of stuff being scheduled for removal in future PHP versions.</p>
<p>The __DIR__ constant is a nifty feature for those who are not happy with include paths.<br />
For many years, I personally had to work around directory mismatches by checking the directory of the current file.</p>
<p>Now we&#8217;ll be able to use this new constant (which is much faster):</p>
<p><code>// PHP &lt; 5.3.0<br />
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'File.php';</code></p>
<p><code>// PHP &gt;= 5.3.0<br />
require_once __DIR__ . DIRECTORY_SEPARATOR . 'File.php';</code></p>
<p><strong>__callStatic(), __invoke() and dynamic access to static members</strong><br />
One awesome feature that PHP 5 introduced was the magic methods: __set, __get, __call were quite useful for developers who wanted to control access to their objects. But one missing feature was the ability to control static method calls. To fix that, PHP 5.3 will introduce the __callStatic magic method, which will allow it to handle static method calls, like Foo::bar();</p>
<p>With a new implementation of <a href="http://en.wikipedia.org/wiki/Closure_(computer_science)">lambdas and closures</a> that I&#8217;ll detail later, more dynamic behaviour will be required from the OO side. To make us &#8211; PHP developers &#8211; more comfortable, PHP 5.3 will introduce the possibility to call an instance of a class as a function. This support was included under the magic method __invoke(). Sounds weird, but I&#8217;ll show you a quick example:</p>
<p><code>class Foo<br />
{<br />
public function __construct()<br />
{<br />
echo "Calling from constructor...\n";<br />
}</code></p>
<p><code> public function __invoke()<br />
{<br />
echo "Calling from invoke...\n";<br />
}<br />
}</code></p>
<p><code>$foo = new Foo(); // Prints: Calling from constructor...<br />
$foo(); // Prints: Calling from invoke...</code></p>
<p>For those who do not know hebrew, the<a href="http://en.wikipedia.org/wiki/Paamayim_nekudotayim"> PAAMAYIM NEKUDOTAYIM</a> is not more difficult to be found. Now it&#8217;ll be possible to do some weird calls such as $var::staticMethod(); and it&#8217;ll work!</p>
<p><strong>Garbage Collector</strong><br />
After a lot of discussion and a Google Summer of Code project, David Wang devised a very good garbage collection mechanism that deals perfectly with cyclical references for PHP.<br />
This means that PHP will use MUCH LESS resources on the server, consuming much less memory, not throwing memory exhausted exceptions any more when importing things.</p>
<p>This extension is built-in, and as far as I have been able to determine, it cannot be disabled. The only way to prevent the Garbage Collector from collecting lost cyclical references, is by calling gc_disable. The other gc_* functions will always be available. This means that you will be able to enable/disable GC through functions gc_enable(), gc_disable(). When it becomes necessary to remove non-referenced objects, simply call gc_collect_cycles(), and PHP will perform its magic for your server.</p>
<p><strong>Late Static Binding</strong><br />
Currently, static references to the current class, like self or __CLASS__ are resolved using the class in which the function belongs, as in where it was defined:</p>
<p><code>// PHP &lt; 5.3<br />
class A<br />
{<br />
public static function who()<br />
{<br />
echo __CLASS__;<br />
}</code></p>
<p><code> public static function test()<br />
{<br />
self::who();<br />
}<br />
}</code></p>
<p><code>class B extends A<br />
{<br />
public static function who()<br />
{<br />
echo __CLASS__;<br />
}<br />
}</code></p>
<p><code>B::test(); // A</code></p>
<p>Static references to the current class like self:: or __CLASS__ are resolved using the class in which the function belongs, as in where it was defined, so when we call the test() method on class B it will call the who() method of class A.</p>
<p>LSB tries to solve that problem by introducing a keyword that references the class that was initially called at runtime. Basically, a keyword that would allow you to reference B from test() in the previous example.</p>
<p>It was decided not to introduce a new keyword but rather use &#8220;static&#8221;, which was already reserved.</p>
<p><code>// PHP &gt;= 5.3<br />
class A<br />
{<br />
public static function who()<br />
{<br />
echo __CLASS__;<br />
}</code></p>
<p><code> public static function test()<br />
{<br />
static::who();<br />
}<br />
}</code></p>
<p><code>class B extends A<br />
{<br />
public static function who()<br />
{<br />
echo __CLASS__;<br />
}<br />
}</code></p>
<p><code>B::test(); // B</code></p>
<p>Some people describe static:: as the $this-&gt; resolution for static calls, this is not true as $this-&gt; follows the rules of inheritance while static:: doesn&#8217;t.</p>
<p><strong>Namespaces</strong><br />
After months of discussions and a lot of issues that had to be fixed, the namespaces implementation has  finally been incorporated,  and is already available under alpha 3.<br />
The namespace separator doesn&#8217;t please everyone especially those that do not use english keyboard layouts. These people will suffer due to the lack of &#8220;\&#8221; char on keyboard.</p>
<p>Here is an example usage of this new feature of PHP 5.3:</p>
<p><code>// File1.php<br />
namespace Foo;</code></p>
<p><code>class Bar<br />
{<br />
public function test()<br />
{<br />
try {<br />
do_some_stuf();<br />
} catch (Exception $e) { // Refers to Foo\Exception<br />
// Special handling of Foo Exception<br />
} catch (\Exception $e) { // Refers to PHP Exception<br />
// Special handling of Exception<br />
}<br />
}<br />
}</code></p>
<p><code>// File2.php<br />
$b = new Foo\Bar();<br />
$b-&gt;test();</code></p>
<p><code>// OR...</code></p>
<p><code>use Foo\Bar as Baz;</code></p>
<p><code>$b = new Baz();<br />
$b-&gt;test();</code></p>
<p><strong>Lambdas Functions/Closures</strong><br />
This can be considered to be an important new feature of PHP, as important as namespace support.</p>
<p>From now on, it&#8217;ll be possible to do this:</p>
<p><code>$func = function ($str) { echo $str; }</code></p>
<p><code>$func('Hello World!'); // Prints: Hello World!</code></p>
<p>Certain situations arose where variables from an outer scope should be allowed internally too. That was a limitation of PHP (variable scope), but it was fixed by the usage of new syntax when defining the lambda function:</p>
<p><code>$first = "Guilherme";<br />
$second = "Blanco";</code></p>
<p><code>$func = function () use (&amp;$first, $second)<br />
{<br />
$first = "Hello";<br />
$second = "World";</code></p>
<p><code> echo $first . ' ' . $second; // Prints: Hello World<br />
};</code></p>
<p><code>$func();</code></p>
<p><code>echo $first . ' ' . $second; // Prints: Hello Blanco</code></p>
<p><strong>New SPL classes</strong><br />
A lot of work has been done,  especially by Etienne on SPL (the Standard PHP Libraries). There is a bunch of new data structures that will be available to users starting on PHP 5.3.<br />
Until now, no updated documentation has been made available, but looking at the source it is easy to figure out how to use these new structure.<br />
Here are the new data structures which will become available:</p>
<ul>
<li> SplObjectStorage (added ArrayAccess support + new features)</li>
<li>SplDoublyLinkedList</li>
<li>SplStack</li>
<li>SplQueue</li>
<li>FilesystemIterator</li>
<li>GlobIterator</li>
<li>SplHeap</li>
<li>SplMinHeap</li>
<li>SplMaxHeap</li>
<li>SplPriorityQueue</li>
<li>SplFixedArray</li>
<li>RecursiveTreeIterator</li>
<li>MultipleIterator</li>
</ul>
<p><BR/><br />
<strong>mysqlnd</strong><br />
This is a replacement library (and it&#8217;s not an extension) for libmysql, offering a lot of advantages over it the latter. While libmysql was developed primarily for C and C++, mysqlnd is optimized for PHP, taking advantage of the Zend Engine.</p>
<p>These advantages are:</p>
<ul>
<li> Tight integration with Zend Engine</li>
<li> Faster execution</li>
<li> Lower memory</li>
<li> Easier compilation of PHP,since it&#8217;s native now (libmysql was bundled with MySQL Server)</li>
<li> Usage of PHP stream API</li>
<li> Statistical Data Collection</li>
<li> Client-side (PHP userland) Query Cache</li>
<li> License compatibility</li>
<li> Easy to introduce future improvements (prepared statement cache, built-in profiling, automatic load balancing, etc)</li>
</ul>
<p><BR/><strong>Fileinfo</strong><br />
This great PECL extension is now enabled by default in PHP to replace mime_magic.<br />
It is possible to pick the right content-type of files, giving you more secure code and preventing some security issues the previous library allowed, such as uploading a PHP script as a GIF file for example.</p>
<p>Here is a piece of code that shows how to use this extension:</p>
<p><code>$fileinfo = new finfo(FILEINFO_MIME);<br />
echo $fileinfo-&gt;file('/path/to/file/to/be/checked.jpg'); // Prints: image/jpg<br />
$fileinfo-&gt;close();</code></p>
<p><strong>Phar</strong><br />
How do you share your library? How do you share all the source code?<br />
While other languages provide a nifty packaging system, PHP until now had not features to support anything like this.<br />
With PHP 5.3, phar has been included for all of us.</p>
<p>You may not be aware of this &#8211;  but I work on my spare time on the Doctrine ORM project. Let&#8217;s use Doctrine as an example.</p>
<p>First we want to pack our entire project into a single file called &#8220;doctrine.phar&#8221;.</p>
<p><code>$phar = new Phar('doctrine.phar', 0, 'doctrine.phar');<br />
$phar-&gt;buildFromDirectory('/path/to/doctrine/lib');<br />
$phar-&gt;setStub($phar-&gt;createDefaultStub('Doctrine.php', 'Doctrine.php'));</code></p>
<p>It&#8217;ll generate a &#8220;doctrine.phar&#8221; file that we can distribute to people.</p>
<p>Once you have the phar file, you would have to do the following to load the library:</p>
<p><code>include '/path/to/doctrine.phar';</code></p>
<p><strong>Improved Windows support</strong><br />
As a member of the PHP Windows team, I cannot finish this article without mentioning that some PHP developers are working extremely hard to be able to provide a lot of *NIX only features for Windows server too.<br />
Two days ago Pierre finished the link() support, which creates symbolic links (shortcuts for Windows users) through PHP. Currently there is a list of functions for which support on Windows is planned &#8211; this list can be accessed via URL: http://wiki.php.net/internals/windows/todo</p>
<p>Also, I worked on a PHP webpage at http://windows.php.net which provides customized Windows builds of PHP. It&#8217;s possible to pick a snapshot or a VC9 compiled version. </p>
<p>I hope you all enjoy it! =)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2009/01/23/new-features-of-php-53/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Crossing the divide &#8211; the move to open source</title>
		<link>http://www.mihswat.com/2009/01/13/crossing-the-divide-the-move-to-open-source/</link>
		<comments>http://www.mihswat.com/2009/01/13/crossing-the-divide-the-move-to-open-source/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 09:51:04 +0000</pubDate>
		<dc:creator>Jacques van Niekerk</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Jacques van Niekerk]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[platforms]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=306</guid>
		<description><![CDATA[Last year brought many changes to our team &#8211; and not all of these changes have been of a positive nature. Nevertheless there were positive outcomes, not the least of which has been changing our development platform of choice away &#8230; <a href="http://www.mihswat.com/2009/01/13/crossing-the-divide-the-move-to-open-source/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last year brought many changes to our team &#8211; and not all of these changes have been of a positive nature. Nevertheless there <em>were</em> positive outcomes, not the least of which has been changing our development platform of choice away from Microsoft technology.</p>
<p><span id="more-306"></span>Let me provide some background. The majority of our team members, both in South Africa and Brazil, had been Microsoft .Net developers at some point in their careers, and some had never been anything else. We used to hire people based &#8211; in part &#8211; on their expertise with Microsoft development tools.</p>
<p>As a business unit, SWAT comes into contact with a large number of organisations from around the globe that are members of the MIH group. In our interaction with these companies we were experiencing a great deal of resistance to implementing Microsoft software.</p>
<p>The reasons for this resistance were varied but often based on cost &#8211; both the cost of the software and the cost of the people who are skilled in the use of Microsoft tools. Cost was not the only consideration &#8211; the general perception out there is that the Web is built on open source software, and that open source is where the best developers want to place their efforts and build their reputations.</p>
<p>It was very clear that we had to cross the great divide if we wanted to stay relevant in the markets where the group operates.</p>
<p>Although we had never been a pure Microsoft shop &#8211; we used Flash technologies, Javascript , CSS and their kin, as well as various tools for mobile development &#8211; our core development tools were Microsoft Visual Studio, using C# with .Net and ASP.Net, and the challenge was to change our primary development platform.</p>
<p>Our greatest concern was what the reaction of the team members would be &#8211; I mentioned earlier that the majority of people in the team at that time were skilled in Microsoft technology, and we were worried that the re-skilling that would be required would present us with a very steep (and costly) learning curve. A further concern was that the changeover may cause people to leave the team, rather than lose the skills they have already acquired in Microsoft technologies.</p>
<p>Once the decision had been made to shift our focus to open source development, we had to choose a platform. The obvious choice was PHP 5.0. &#8220;Obvious&#8221; because of the wide popularity of the language within the group, the wide support for PHP and the vibrant PHP community. An additional consideration was that PHP is fairly similar to C#, in terms of syntax and in terms of being a &#8220;traditional&#8221; object oriented language. Although we considered options such as Ruby, we concluded that PHP would represents the best option for migrating to open source.</p>
<p>It has been more or less a year since we finally phased out Microsoft tools, and here&#8217;s the summary of our experience:</p>
<ul>
<li>Great programmers do not care about the language. We lost no-one because they wanted to work only on Microsoft platforms.</li>
<li>The web IS built with open source tools &#8211; and using open source tools gave us a wider audience.</li>
<li>Costs for software development tools have plummeted to virtually zero.</li>
<li>The Microsoft Visual Studio <a href="http://en.wikipedia.org/wiki/Integrated_development_environment" target="_blank">IDE</a> is one of the best (if not the best) development environments available.</li>
<li>If you are going to use open source, you must be willing to change and adapt <em>all the time</em>. Frameworks, tools and methodologies are continuously changing in the open source world &#8211; forget about well-planned migration routes for technology. Be pragmatic, and use what works. We still use Microsoft tools when our clients require it.</li>
<li>Because it is open source, it is possible to look into the code to find why things do not work as expected. Often it is very hard to find the solution, and there is hardly ever a helpdesk which you can call. But you can look if you want &#8211; the option is there.</li>
<li>Microsoft is not bad. In our experience it is simply a matter of choosing the most appropriate tool for the job, and the Microsoft tools are more suited for enterprise development. Although of course the platform CAN be used for web development.</li>
</ul>
<p>In summary &#8211; the decision to go open source was the best decision for our team, and I would encourage every team that does web development to do the same thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2009/01/13/crossing-the-divide-the-move-to-open-source/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

