<?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</title>
	<atom:link href="http://www.mihswat.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mihswat.com</link>
	<description>MIH SWAT - the official blog of MIH's Strategic Worldwide Applications and Technology Team.</description>
	<lastBuildDate>Tue, 02 Mar 2010 15:15:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mircrohoo Search Gets The Thumbs Up</title>
		<link>http://www.mihswat.com/2010/03/02/mircrohoo-search-gets-the-thumbs-up/</link>
		<comments>http://www.mihswat.com/2010/03/02/mircrohoo-search-gets-the-thumbs-up/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 15:15:18 +0000</pubDate>
		<dc:creator>hocker</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=1114</guid>
		<description><![CDATA[The big news in Search last week was the final go-ahead on the integration of Microsoft and Yahoo’s Internet-search businesses.
The on-again, off-again deal by the two internet giants was signed back in July, but regulatory approval by the European Commission and the US Department of Justice only came through this week.
According to a joint statement [...]]]></description>
			<content:encoded><![CDATA[<p>The big news in Search last week was the final go-ahead on the integration of Microsoft and Yahoo’s Internet-search businesses.</p>
<p>The on-again, off-again deal by the two internet giants was signed back in July, but regulatory approval by the European Commission and the US Department of Justice only came through this week.</p>
<p>According to a joint statement made by the new <a href="http://www.searchalliance.com/home" target="_blank">Search Alliance</a>, changes will start being implemented very soon. Microsoft is to power the search technology on both Bing and Yahoo but each site will continue to operate under its own identity;</p>
<p>“Implementation of the deal is expected to begin in the coming days and will involve transitioning Yahoo!’s algorithmic and paid search platforms to Microsoft, with Yahoo! becoming the exclusive relationship sales force for both companies’ premium search advertisers globally. Once the transition is completed, the companies’ unified search marketplace will deliver improved innovation for consumers, better volume and efficiency for advertisers and better monetization opportunities for web publishers through a platform that contains a larger pool of search queries.” From Yahoo’s official <a href="http://yhoo.client.shareholder.com/press/releasedetail.cfm?ReleaseID=445608" target="_blank">press release</a>.</p>
<p>Microsoft CEO Steve Ballmer previously described the move as a way to provide &#8220;real consumer choice in a market currently dominated by a single company.&#8221; Unsurprisingly Google, which controls over two thirds of the search market in the US had tried to prevent a deal between its main search rivals. Back in 2008 when Microsoft bid almost $45bn to acquire all of Yahoo!, Google openly attacked the move as anti competitive and tried to sign its own deal with Yahoo Search Business. Google were eventually forced to pull out of that deal after the US Department of Justice questioned the antitrust implication of one company controlling what would have been an estimated 90% of the US search market.</p>
<p>Whether the new alliance will put a halt on Google’s burgeoning search market share remains to be seen. With a combined search market share less than half than that of Google, they certainly have their work cut out for them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2010/03/02/mircrohoo-search-gets-the-thumbs-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From Android to iPhone</title>
		<link>http://www.mihswat.com/2010/02/10/from-android-to-iphone/</link>
		<comments>http://www.mihswat.com/2010/02/10/from-android-to-iphone/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 10:12:28 +0000</pubDate>
		<dc:creator>bwells</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=1081</guid>
		<description><![CDATA[A few months ago i had the pleasure of getting to know the Android SDK and got to create a prototype Android game. For this reason I got to use a HTC Magic running a standard Android 1.6 or Donut as its known to the Android community. I have since rooted the phone and flashed [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago i had the pleasure of getting to know the <a title="Android" href="http://www.mihswat.com/2009/09/28/my-journey-to-planet-android/">Android SDK</a> and got to create a prototype Android game. For this reason I got to use a <a title="HTC Magic" href="http://www.htc.com/www/product/magic/overview.html">HTC Magic</a> running a standard Android 1.6 or Donut as its known to the Android community. I have since rooted the phone and flashed the ROM with several community created ROMs. I had a ROM running HTC&#8217;s Sense User Interface(UI) , which is a layer on top of the standard Android UI. Since then I got tasked with creating an iPhone application and obviously I would need to use a iPhone as development phone. At this stage it dawned on me that nowhere on the tech blogs have I read a blog post describing a Android user having to adjust to the iPhone OS.<span id="more-1081"></span></p>
<p>As the iPhone I got is the original iPhone I cannot compare the hardware as the<a title="iPhone" href="http://www.google.com/url?sa=t&amp;source=web&amp;oi=video_result&amp;ct=res&amp;cd=10&amp;ved=0CC8QtwIwCQ&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DNTiiOR7t59c&amp;ei=CPJlS9ScH5P0NfGsqPwG&amp;usg=AFQjCNF5fN2NMTirV0FsszLh59yz3xpoZg&amp;sig2=yFBnUsKr_62ynr0sx-PhUg"> iPhone 2G</a> is about a year and a half older than the HTC Magic. What I can compare is the operating system though ( OS ) as the iPhone is updated to the very latest 3,12 version.</p>
<p><strong>Mail, Calendar &amp; Contacts<br /></strong>Before you do anything on Android it asks for your gmail account. As soon as your email credentials are confirmed your gmail, contacts and calendar start to synchronise. Any changes are synchronised between the google servers and your phone. What&#8217;s best is that gmail has push email similiar to the Exchange Activesync process or the Blackberry solution. Speaking of Exchange, the ROM&#8217;s I intalled came with the Exchange mail clients, making it easy to have work emails and calendar events pushed to your phone.</p>
<p>After booting the iPhone the first thing I did was click on the mail icon on the springboard. The google account was easy to configure and the account connected first time as expected. Then I was left a bit confused as to how to add the Exchange email account. After a bit of fiddling around I found the mail settings section where I could add the exchange account. It worked first time and push notifications was set &#8220;on&#8221; as default. The iPhone email account for gmail does not support push, instead the email client periodically checks the server for any new emails.</p>
<p>Exchange calendar  and contacts are automatically synced to the iPhone calendar application. Unfortunately the same is not true for the gmail calendar and contacts.</p>
<p><strong>Browser</strong></p>
<p>The iPhone sports a mobile Safari which is super fast. The two browsers load speeds are more or less on par. Browser rendering is also about the same, where the only difference is that the Android browser has an option to reformat the layout to fit the width of the browser. Safari does not do this but it has a very good scaling feature: pinch to zoom. It uses multi-touch gestures to scale the browser. The response is quite fast, even on the older hardware, and it gives the Safari browser an advantage over the Android browser which only offers scaling by using buttons.</p>
<p><strong>User Interface</strong></p>
<p>The iPhone user interface is well thought out. I found the small animations and attention to details  very helpful. The navigation is equally well thought out, letting one know that you headed into or out of a section. The one thing that makes this user interface works well is that almost all applications use the Cocoa standard UI elements, so navigation elements are generally consistent.</p>
<p>Because Android has physical menu and back buttons at the bottom it took me some time getting used to the navigation buttons within the iPhone apps. I grew frustrated as I kept hitting the bottom physical button on the iPhone to go back and got sent to the home screen.</p>
<p>I feel that the Android physical keys are quite useful as it gives the applications a standard way to navigate in and out of sections within the application as well as between applications.</p>
<p>One thing I did find annoying was the way that the iPhone OS had you navigate between applications. Since the iPhone does not support multitasking between 3rd party applications, you can run only one applications at a time. This improves the speed of the applications themselves, but at the same time prevents you from running applications in the background. This is a big let down for me and is actually a deal breaker.</p>
<p><strong>Applications</strong></p>
<p>The Apple App store is a much richer experience than the Android App market. It has much more applications , almost a 100 000 more. Because of this large number of applications there is an equally large number of high quality applications. I found quite a few duplicates between the two application stores showing that developers are creating apps for both platforms.</p>
<p>One thing that bothered me was that I had to sign up with my credit card before I could install any applications.</p>
<p>Apple applications are well designed and in some cases have much better features than their Android counterparts. The Apple applications have at least double the number of  options that the Android version have.</p>
<p><strong>Finally</strong></p>
<p>After spending about a week with an iPhone as my main phone I feel seriously disconnected. When I want to know if I have an email I have to unlock the phone and check the home screen. It does not have an alert light telling me when I have message . Yes, it does give a vibrate and an alert sound, but sometimes I don&#8217;t hear or feel those alerts. When in an application and you get an alert you would have to quit the application to go the home screen to check what the alert was for. Android&#8217;s notification system is a lot more elegant.  Android has a top drawer that has alert icons pop up when they arrive, you can then slide down this drawer to see more information and when pressed it would send you directly to the application.</p>
<p>I enjoy the nice user interface but that does not compensate for the lack of multitasking ability, or for the poor notification system.</p>
<p>If Apple wants to keep the iPhone as one of  the top smartphone OS&#8217;s in the future it will seriously have to rethink its notification system as well as the multitasking capabilities for 3rd party applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2010/02/10/from-android-to-iphone/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Campus Party 2010</title>
		<link>http://www.mihswat.com/2010/02/04/campus-party-2010/</link>
		<comments>http://www.mihswat.com/2010/02/04/campus-party-2010/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 08:02:33 +0000</pubDate>
		<dc:creator>Dani Valentin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[campus party]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[lessig]]></category>
		<category><![CDATA[mitnick]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=1091</guid>
		<description><![CDATA[
From 25th till the 31st january, the 3rd. edition of Campus Party Brazil took place in São Paulo. The event, that is said to be the biggest one in technologic innovation, internet and eletronic entertainment, has been held since 1997 and happens in four different countries annually: Brazil, Spain, Mexico and Colombia.
In Brazil, it started [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mihswat.com/wp-content/uploads/2010/02/3220322628_b249845af2.jpg"><img class="alignnone size-full wp-image-1093" title="Campus Party" src="http://www.mihswat.com/wp-content/uploads/2010/02/3220322628_b249845af2.jpg" alt="" width="400" height="300" /></a></p>
<p>From 25th till the 31st january, the 3rd. edition of Campus Party Brazil took place in São Paulo. The event, that is said to be the biggest one in technologic innovation, internet and eletronic entertainment, has been held since 1997 and happens in four different countries annually: Brazil, Spain, Mexico and Colombia.<span id="more-1091"></span></p>
<p>In Brazil, it started in 2008, after 12 editions in Spain, and it was the second country to host it. It receives about 6000 participants every year, most of them camping in the event and participating in talks and debates that happen 24 hour a day. It is divided in 12 areas of interest, including development, robotics and security.</p>
<p>It has had speakers such as <a href="http://www.w3.org/People/Berners-Lee/">Tim Berners-Lee</a> and <a href="http://www.stevenberlinjohnson.com/">Steven Johnson</a>. This year, there were 3 big international names: <a href="http://en.wikipedia.org/wiki/Kevin_mitnick">Kevin Mitnick</a>, <a href="http://www.linkedin.com/in/scottgoodstein">Scott Goodstein</a> and <a href="http://www.lessig.org/">Lawrence Lessig</a>.</p>
<p>The first to speak was Kevin Mitnick on the second day of the event. Mitnick was a famous cracker that was arrested in 1995. At that time he was the most wanted computer criminal in the U.S. Today he has a security company, <a href="http://mitnicksecurity.com/">Mitnick Security</a>, of course. His talk, entitled The art of Deception, was mostly about social engineering and how people should learn to say no.</p>
<p> </p>
<p>The next day, it was Scott Goodstein&#8217;s turn. He was responsile for Barack Obama&#8217;s online campaign in 2008. He talked about the importance of cellphones in the campaign and defended the mobilization of small and specific groups so they can call friends and create something bigger.</p>
<p>Lawrence Lessig did the last presentation, Friday  afternoon. The Stanford Law School professor founded <a href="http://creativecommons.org/">Creative Commons</a>, an alternative license to copyright. He talked about intellectual property, how the internet changed access to culture and how current copyright law harnesses creativity.</p>
<p>Swat member, <a href="http://rafaeldohms.com.br/en/">Rafael Dohms</a> also gave a talk in the event, Awakening to PHP, an introduction to PHP.</p>
<p>Most videos of the event are available in their Youtube channel : <a href="http://www.youtube.com/campusparty">http://www.youtube.com/campusparty</a> (most of them in Portuguese).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2010/02/04/campus-party-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Users or Products?</title>
		<link>http://www.mihswat.com/2010/01/27/users-or-products/</link>
		<comments>http://www.mihswat.com/2010/01/27/users-or-products/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 13:42:49 +0000</pubDate>
		<dc:creator>Theo</dc:creator>
				<category><![CDATA[SWAT]]></category>
		<category><![CDATA[Social impact]]></category>
		<category><![CDATA[products]]></category>
		<category><![CDATA[services]]></category>
		<category><![CDATA[strategy]]></category>
		<category><![CDATA[users]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=1066</guid>
		<description><![CDATA[Coming back from a week in India, I was left with a few lasting impressions, which could be summed up in one word: ubiquity. Of people. Of noise. The organised chaos that is Delhi traffic. And energy &#8211; something that seems to have reached a frenetic level quite shocking to a laid-back Capetonian. This energy [...]]]></description>
			<content:encoded><![CDATA[<p>Coming back from a week in India, I was left with a few lasting impressions, which could be summed up in one word: ubiquity. Of people. Of noise. The organised chaos that is Delhi traffic. And energy &#8211; something that seems to have reached a frenetic level quite shocking to a laid-back Capetonian. This energy translated into some excited and stimulating debate in the classroom, which is where I found myself with 50 other <a href="http://www.naspers.com/">Naspers </a>employees at 8am sharp on the first Monday of 2010. For three days, we discussed mostly Internet and technology cases under the guidance of two HBS strategy professors, <a href="http://drfd.hbs.edu/fit/public/facultyInfo.do?facInfo=bio&amp;facEmId=banand">Bharat Anand</a> and <a href="http://drfd.hbs.edu/fit/public/facultyInfo.do?facInfo=bio&amp;facId=251462">Felix Oberholzer-Gee</a>.<span id="more-1066"></span></p>
<p>Many interesting concepts and theories were discussed, but what stayed with me was that no matter what service or product you are providing or building, the focus should always be on the user. In fact, a consumer-oriented approach is the only way to build a long term competitive advantage (barring of course government-supported <a href="http://www.mg.co.za/article/2009-10-28-competition-body-urges-penalty-for-telkom">monopolies like Telkom</a>, which is finally facing real competitive forces). This is why companies like <a href="http://www.amazon.com">Amazon</a>, who are obsessive in their <a href="http://phx.corporate-ir.net/phoenix.zhtml?p=irol-irhome&amp;c=97664">mission</a> to please consumers and make every business decision based on whether the intended results are &#8216;good&#8217; for these users, are <a href="http://seekingalpha.com/article/182533-amazon-continues-to-pull-away-from-the-competition">streaking ahead of the competition</a>.</p>
<p>Having a user-focused strategy, as opposed to a product/service-focused one, has several benefits:<!--more--></p>
<ul>
<li>More time. Focusing on technologies and trends, which change quickly and are difficult to predict, causes companies to constantly chase the next big thing, and can cause stagnation when a standard is slow to emerge and market players stay on the sidelines before investing (as could be seen with the <a href="http://www.pcworld.com/article/142584/hd_dvd_vs_bluray_disc_a_history.html">Bluray vs. HD-DVD battle</a>). Focusing on user behaviour, which changes relatively slowly and is easier to predict, allows forward-thinking companies to focus their energies on satisfying user needs. For instance, in the case of the next-gen DVD saga, companies lost track about how user behaviour was shifting to wanting video anytime and anywhere (online, mobile and TV &#8211; the so-called &#8216;three screens&#8217;) while deciding which physical format to back.</li>
<li>Network effects. Product-focused companies design a product with the aim to sell it &#8211; which is where it ends. As long as the user can be convinced to part with cash to purchase said product, the product cycle is completed. A better approach can be to build a product/service that harnesses network effects, i.e. the more users you acquire, the more benefit they derive from using your product or service. The classic example of direct network effects is an online auction service &#8211; the more buyers you have, the more sellers are attracted to the platform, which in turn attract more buyers as the number of items increase. Such networks are incredibly hard to break, which is why <a href="http://www.ebay.com/">eBay</a> in the US remains entrenched. As a bonus, indirect network effects in the form of complements can make your product even more valuable. <a href="http://www.apple.com/">Apple&#8217;s</a> iPod, with its thousands of add-ons, and the iPhone, with its hundreds of thousands of applications, are much <a href="http://www.nytimes.com/2009/12/06/technology/06apps.html?_r=2&amp;pagewanted=1&amp;partner=rss&amp;emc=rss">more desirable and valuable</a> in the eyes of consumers because of these complements.</li>
<li>Differentiation. When companies focus on product/service quality and number of features, there is a constant battle to be superior, have more, look better. This is both costly and difficult to maintain, especially when this is how your brand is defined (<a href="http://www.businessweek.com/globalbiz/blog/eyeonasia/archives/2009/09/walkman_vs_ipod.html">Sony</a> again comes to mind). As Ranjay Gulati <a href="http://blogs.bnet.com/mba/?p=1743&amp;tag=nl.e713">puts it</a>, “In a marketplace like today, customers have more choices and more information, and services start to look like each other, in what we call a sea of sameness. If you don’t have an ability to transcend beyond the features and functionality of my product versus yours, then you have a problem.” User-focused companies don&#8217;t concentrate and obsess about rivals, but rather think about users and their needs. Instead of competing on a product-by-product, segment and geographical basis, they design their products and services around user habits and requirements. In the end, it&#8217;s your users you want to be happy, not your engineers or developers.</li>
</ul>
<p>Gulati <a href="http://blogs.bnet.com/mba/?p=1743&amp;tag=nl.e713">goes further</a> to say that there are three keys to transcending the &#8217;sea of sameness&#8217; and become customer-centric:</p>
<ol>
<li><strong> </strong>Ask the right questions (i.e. &#8220;What problems are customers dealing with?” and “What are the issues happening in the life of my customers?”)</li>
<li>Make the creative leap &#8211; by asking the right questions to figure out the innovations that will best serve your customers.</li>
<li>Get your organization aligned around what customers want, rather than around product and geography.</li>
</ol>
<p>So ask yourself: is your awesome new service with its long list of kick-ass features, or the shiny product that will change consumer electronics forever, actually satisfying some basic need? Will it delight your users, make their lives better or easier?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2010/01/27/users-or-products/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing RESTful Semantic Web Services</title>
		<link>http://www.mihswat.com/2010/01/14/introducing-restful-semantic-web-services/</link>
		<comments>http://www.mihswat.com/2010/01/14/introducing-restful-semantic-web-services/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 14:22:40 +0000</pubDate>
		<dc:creator>Otavio Ferreira</dc:creator>
				<category><![CDATA[Semantic web]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[restful]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[web services]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=1052</guid>
		<description><![CDATA[Web services are key elements in the fields of distributed software engineering and code reuse. They also play a very important role on the Semantic Web by providing data to semantic software agents, as described by Tim Berners-Lee:
&#8220;The real power of the Semantic Web will be realized when people create many programs that collect Web [...]]]></description>
			<content:encoded><![CDATA[<p>Web services are key elements in the fields of distributed software engineering and code reuse. They also play a very important role on the Semantic Web by providing data to semantic software agents, as described by Tim Berners-Lee:</p>
<blockquote><p>&#8220;The real power of the Semantic Web will be realized when people create many programs that collect Web content from diverse sources, process the information and exchange the results with other programs. The effectiveness of such software agents will increase exponentially as more machine-readable Web content and <strong>automated services</strong> become available. The Semantic Web promotes this synergy: even agents that were not expressly designed to work together can transfer data among themselves when the data come with semantics.&#8221;</p>
</blockquote>
<p><span id="more-1052"></span></p>
<p>Despite the ever-growing number of available  Web services, they are rarely described formally, which keeps them from joining the third phase of the Web. Service descriptions, if any, are typically informal, written in natural language and therefore available to human consumption only. Tim Berners-Lee highlights the need for semantically described Web services as follows:</p>
<blockquote><p>&#8220;Many automated Web-based services already exist without semantics, but other programs such as agents have no way to locate one that will perform a specific function. This process, called <strong>service discovery</strong>, can happen only when there is a common language to describe a service in a way that lets other agents understand both the function offered and how to take advantage of it.&#8221;</p>
</blockquote>
<p>Considering the above vision, it is reasonable to conclude that any given service should be offered the opportunity to join the Semantic Web, regardless of the technologies and protocols it relies on. There are basically two groups of services, namely RPC and RESTful. They represent completely different approaches to implementing Web services, but Semantic Web researchers should be able to address both equally.</p>
<p>The problem is that <strong>only</strong> RPC services have been covered by authors writing about the Semantic Web. In fact, the term Web Service is frequently used as synonymous with RPC. This may be the result of the strong SOAP protocol promotion carried out by the software industry, especially large enterprises such as <a href="http://www.ibm.com/developerworks/webservices/library/ws-best1/">IBM</a> and <a href="http://www.microsoft.com/soa/">Microsoft</a>.</p>
<p>I would like to introduce a new concept: <a href="http://www.fullsemanticweb.com/blog/ontologies/restfulgrounding/">RESTful Semantic Web Services</a>. The proposed set of protocols to formally describe a RESTful SWS includes HTTP, WADL, OWL-S, and URI. The following table compares this protocol stack with the one powering RPC SWS:</p>
<table border="1">
<tbody>
<tr>
<td><strong>Group</strong></td>
<td><strong>Access</strong></td>
<td><strong>Syntax</strong></td>
<td><strong>Semantics</strong></td>
</tr>
<tr>
<td>RPC</td>
<td><a href="http://en.wikipedia.org/wiki/Simple_Object_Access_Protocol">SOAP</a></td>
<td><a href="http://www.w3.org/TR/wsdl">WSDL</a></td>
<td><a href="http://www.w3.org/Submission/OWL-S/">OWL-S</a></td>
</tr>
<tr>
<td>RESTful</td>
<td><a href="http://www.w3.org/Protocols/">HTTP</a></td>
<td><a href="http://www.w3.org/Submission/wadl/">WADL</a></td>
<td><a href="http://www.w3.org/Submission/OWL-S/">OWL-S</a></td>
</tr>
</tbody>
</table>
<p>_</p>
<p>It is important to bear in mind that both semantic and syntactic descriptions have to be provided by any given service. Only then will the service be considered to be fully described. Semantics and syntax allows software agents to automatically discover and invoke the service.</p>
<p>The OWL-S protocol had to be extended in order to allow for RESTful SWS, because its original specification covered RPC SWS only. Fortunately, OWL-S defines an abstract layer that enables software engineers to create multiple <em>grounding</em> strategies. A more detailed description of OWL-S goes beyond the scope of this blog post, but <em>grounding</em> can be seen as an approach to mapping a semantic description to a syntactic one.</p>
<p>The extension proposed is classified as Web ontology, and it&#8217;s been named <a href="http://www.fullsemanticweb.com/blog/ontologies/restfulgrounding/">RESTfulGrounding</a>. The page describing this ontology contains the full paper that introduced RESTful SWS to the academic community in 2009. It also contains the ontology description in OWL and a proof-of-concept on a Web service provided by Yahoo.</p>
<p>(Post also published at <a href="http://www.fullsemanticweb.com/blog/2009/12/19/introducing-restful-semantic-web-services/">FullSemanticWeb.com</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2010/01/14/introducing-restful-semantic-web-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Three almost sure things for 2010</title>
		<link>http://www.mihswat.com/2010/01/12/three-almost-sure-things-for-2010/</link>
		<comments>http://www.mihswat.com/2010/01/12/three-almost-sure-things-for-2010/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 14:22:20 +0000</pubDate>
		<dc:creator>Jacques van Niekerk</dc:creator>
				<category><![CDATA[SWAT]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[#mihswat]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[Apple Tablet]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[Natal]]></category>
		<category><![CDATA[prediction]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=1040</guid>
		<description><![CDATA[January brings with it the usual proliferation of lists predicting technology trends for 2010. I&#8217;ll add to the swarm by providing a short list of events which I believe will have a significant impact on the Web As We Know It in the coming year.
The first item is the release of Apple&#8217;s Tablet. The impact [...]]]></description>
			<content:encoded><![CDATA[<p>January brings with it the usual proliferation of lists predicting technology trends for 2010. I&#8217;ll add to the swarm by providing a short list of events which I believe will have a significant impact on the Web As We Know It in the coming year.<span id="more-1040"></span></p>
<p>The first item is the release of <a href="http://news.google.com/news?hl=en&amp;q=apple+tablet&amp;um=1&amp;ie=UTF-8&amp;ei=zO5FS_KnHdP-4AbavMyiCA&amp;sa=X&amp;oi=news_group&amp;ct=title&amp;resnum=1&amp;ved=0CBEQsQQwAA">Apple&#8217;s Tablet</a>. The impact of this device will be to make it abundantly clear to the consumer that the Web is to be had without the need for a typical computing device &#8211; no laptop required here. The Apple tablet will be an elitist device outside the US (as is the iPhone), but may turn out to be <strong>the poster child for convergence</strong>. As the delivery mechanisms for all content becomes IP networks, the consumer will cease to think of print, television and web content as different from each other &#8211; all will be one, as demonstrated by the Apple Tablet.<br /> <a href="http://www.engadget.com/2009/11/11/project-natal-launching-in-november-2010-priced-for-impulse-bu/"><br /> Microsoft&#8217;s Project Natal</a> will be released into the wild. Forget augmented reality. This will be the first step towards <strong>extended reality</strong>, the blurring between virtual and real. The success of <a href="http://www.imdb.com/title/tt0499549/">Avatar, the movie</a> and the increasing availability of devices with <a href="http://news.bbc.co.uk/2/hi/technology/8447432.stm">three-dimensional displays</a> will contribute to the acceptance of extended reality as an everyday reality, because the display techniques they use appear to intrude into the &#8220;real&#8221; world.  This will smooth the road towards wide adoption of extended reality as a user interface mode. (Finally &#8211; a replacement for the <a href="http://en.wikipedia.org/wiki/Mouse_%28computing%29">mouse</a>.) 2010 will be the year we start adding reality to the &#8220;real world&#8221;.</p>
<p>And finally &#8211; this year will resolve the question of how the planet&#8217;s largest social and communications platforms can evolve to have viable business models. Both <a href="http://www.twitter.com">Twitter</a> and <a href="http://www.facebook.com">Facebook</a> have massive and growing user bases, but neither have a clear plan for exploiting this user base &#8211; the sheer number of users, and the wide global distribution of these users should offer unique opportunities. I believe that 2010 will be the year that a way is found to exploit the <a href="http://en.wikipedia.org/wiki/Mega-">mega</a>-nets &#8211; paving the way for planetary connectivity, and the <a href="http://en.wikipedia.org/wiki/Giga">giga</a>-net.</p>
<p>In summary, my three (almost) sure things for the year:</p>
<ul>
<li>Convergence, convergence, convergence. The medium is changing, and <a href="http://en.wikipedia.org/wiki/The_medium_is_the_message">so shall the message</a>.</li>
<li>Extended reality starts entering the mainstream.</li>
<li>A way is found to exploit mega-sized social and communications networks commercially.</li>
</ul>
<p> </p>
<p>There are a number of other trends which I believe will have a significant impact on the web-as-we-know-it: semantic markup is becoming ever more ubiquitous without anyone really noticing; cloud computing is maturing; entirely new modes of internet usage is establishing itself in developing countries. Mobile internet usage continues to increase. Broadband penetration will continue to grow, enabling more and more users to join social and communications networks &#8211; we will see the rise of the giga-net within a very few years.</p>
<p>But I believe the three most significant  changes in the WAWKI will be triggered by the three events I listed here. Your mileage might vary &#8211; tell us about it.</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2010/01/12/three-almost-sure-things-for-2010/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Android Apps at MIH Internet</title>
		<link>http://www.mihswat.com/2009/12/23/android-apps-mih/</link>
		<comments>http://www.mihswat.com/2009/12/23/android-apps-mih/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 11:42:17 +0000</pubDate>
		<dc:creator>Rafiq Phillips</dc:creator>
				<category><![CDATA[MIH]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=1009</guid>
		<description><![CDATA[With TechCrunch&#8217;s Robin Wauters and Michael Arrington speculating about the future of ICQ and in so doing giving many users, who have never heard of Naspers before,  some insight into our mobile and online investments. This post does not comment on their speculation but instead will focus on the various Google Android applications developed [...]]]></description>
			<content:encoded><![CDATA[<p>With <a href="http://www.techcrunch.com/2009/11/21/aol-icq-naspers/">TechCrunch&#8217;s Robin Wauters</a> and <a href="http://www.techcrunch.com/2009/12/13/google-dst-make-play-for-aols-icq/">Michael Arrington</a> speculating about the future of ICQ and in so doing giving many users, who have never heard of <a href="http://www.naspers.com">Naspers</a> before,  some insight into our mobile and online investments. This post does not comment on their speculation but instead will focus on the various Google Android applications developed by the companies MIH has invested in.<br />
<span id="more-1009"></span></p>
<h3>Nimbuzz for Android.</h3>
<p><object width="480" height="295"><param name="movie" value="http://www.youtube.com/v/CydwIWqPG1Q&#038;hl=en_US&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/CydwIWqPG1Q&#038;hl=en_US&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed></object></p>
<p>Nimbuzz is a mobile instant messaging and social networking client available on most mobile phone handsets including Google Android. Skype, Windows Live Messenger (MSN), Yahoo Messenger, <strong>ICQ</strong>, AIM, studiVZ, GoogleTalk, Facebook, MySpace, Jabber and many more are supported.</p>
<h3> News24 for Android</h3>
<p><img align="right" alt="News24 Android app" src="http://20fourlabs.com/files/2009/08/4-200x300.png" title="News24 android app" width="200" height="300" /><a href="http://20fourlabs.com/2009/08/17/news24-android-application-%E2%80%93-now-available/">News24</a> is the number 1 news site in South Africa. Features of the Andoid app include:</p>
<ul>
<li>Up to the second news, sport, finance, motoring and entertainment news</li>
<li>View current and 7 day weather forecast</li>
<li>Local restaurant search</li>
<li>Customisable homescreen widget – select content and set refresh rates</li>
<li>Share content, provide feedback &#038; choose start-up view</li>
<li>Easy tabbed navigation</li>
<li>Touchscreen or TrackBall interface &#8211; with haptic feedback (vibration) option</li>
<li>Read stories in portrait or landscape mode</li>
</ul>
<p></p>
<h3>MXit for Android</h3>
<p><a href="http://www.webaddict.co.za/2009/09/22/screenshots-mxit-android-screenshots/"><img align="right" src="http://www.webaddict.co.za/wp-content/uploads/2009/09/mxit-andoid-chat.png" alt="mxit android screenshots"  width="200" height="300"/></a><br />
MXit is an Instant messaging and social networking platform for mobile phones. Founded in South Africa it now has millions of users throughout the world.</p>
<p>This list of Android applications are all available to download in the Android Market Place. As the various companies develop and release new Android applications it will be updated here.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2009/12/23/android-apps-mih/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Microsoft Web Developer Summit 2009</title>
		<link>http://www.mihswat.com/2009/12/21/microsoft-web-developer-summit-2009/</link>
		<comments>http://www.mihswat.com/2009/12/21/microsoft-web-developer-summit-2009/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 11:50:05 +0000</pubDate>
		<dc:creator>Rafael Dohms</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft Web Developer Summit]]></category>
		<category><![CDATA[MWDS]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=1018</guid>
		<description><![CDATA[This year I was honored by being invited to participate as a member of the PHP Community in Microsoft&#8217;s Web Developer Summit. I used the opportunity to represent the huge PHP community in Brazil and highlight the community&#8217;s work.
Let me give you a glimpse of what the event tries to accomplish and tell you what [...]]]></description>
			<content:encoded><![CDATA[<p>This year I was honored by being invited to participate as a member of the PHP Community in Microsoft&#8217;s Web Developer Summit. I used the opportunity to represent the huge PHP community in Brazil and highlight the community&#8217;s work.<span id="more-1018"></span></p>
<p>Let me give you a glimpse of what the event tries to accomplish and tell you what came out of it in 2009. MSWDS is all about communication. It is a yearly event that allows Microsoft to get in touch with key players in the PHP community and interact with them on various levels. This means they get to ask us questions, and we rant and ask them questions. It is a an effective way of getting Microsoft and PHP to do better business together, which in turn means getting better tools and better performing PHP applications on Microsoft platforms. Both sides get to know more about how the other operates.</p>
<p>Over 3 days Microsoft and the PHP community shared notes, discussed various products and opinions and shared quite a few beers and dinners at the Redmond Commons Campus.</p>
<p><strong>Microsoft has been very active in the PHP area</strong> and even though this is often received with skepticism by the overall community their actions are generating a lot of benefits for the PHP community specifically and Windows users in general. You cannot be right all the time, so Microsoft is still making some mistakes, but it is worth looking at some of what they shared with us. The final day of the conference was held under a non-disclosure agreement and is therefore not included here.</p>
<p>One of the highlights of the event was a project led by <a href="http://blogs.msdn.com/garretts/">Garrett Serrack</a> describing the process and plans for making PHP and associated libraries easier to compile from source on Windows &#8211; a project that could give Windows a push as a viable platform for PHP, since custom PHP compilations are a big part of PHP sites. Also very interesting were the news of WebPI and IIS. IIS is working on being a centralized dashboard for system developers and administrators and new tools like the SEO toolkit are laying down a new track for innovation. The road ahead for this is still long, but Microsoft got a lot of feedback on the kind of deploy and maintenance oriented services we developers would like to see such as imporvements to WinCache to offer more features and make it share the spotlight with <a href="http://php.net/manual/en/book.apc.php">APC</a>.</p>
<p>The WebPI project made life for PHP application users a breeze &#8211; its simplicity and the application gallery makes it very simple to install a complete web platform and get a site up and running. The same is not true for developers. Solutions were gathered to address developer needs &#8211; amongst these are multiple side-by-side versions of PHP and other applications, automated testing and closed cycle solutions that can contribute back to our applications as well as make our life deploying and testing before releases much easier on this platform.</p>
<p>During our <em><strong>airing of grievances</strong></em> many topics came up which Microsoft really needs to address. The long lead time to new projects and solutions and all the bureaucratic red tape that needs to be cut was the starting point and showed Microsoft they are the ones slowing themselves down. We also highlighted the areas of the world that need more attention from Microsoft evangelists. Recurring topics such as drivers for SQL Server and better developer tools for IE7 and IE8 came up as well.</p>
<p>One matter that generated heated arguments was the <a href="http://www.codeplex.org/"><em>Codeplex Foundation</em></a>. The discussion was triggered by ill-timed and not unplanned comments of an &#8220;<em>info-mercial like</em>&#8221; nature. Unfortunately Microsoft is still a huge corporation and parts of it still does not understand that the developer community does not want marketing pitches. The message hit home and some sessions reverted from that format, but the Codeplex idea was still not palatable tomost of the people present. The topic was later brought up in a round-table discussion and disagreements were addressed, showing that Microsoft is willing to correct some mistakes.</p>
<p>Some sessions had .NET solutions at their heart and were not very effective in communication, some were interesting enough to generate in us the desire to <em>copy</em> them, but in my opinion these were not really in their right place for the objective of this event. New technologies such as  PowerShell, Azure and Silverlight got lots of attention and showed some in the room that these could be much more useful than they thought it could be.</p>
<p>Silverlight triggered further discussion with its use in Bing Maps &#8211; the latter is now live with very striking visual effects. Microsoft&#8217;s skill for naming projects was criticised many times especially after we figured out that the &#8220;ASP.NET Ajax Toolkit&#8221; was an ajax library that had nothing to do with ASP.NET. This was dully noted by MS for future naming.</p>
<p>Microsoft also had an opportunity to listen to the main players in the PHP community about the community itself, <a href="http://benramsey.com/">Ramsey</a> went over some concepts of user groups and I talked about the new organization of user groups in Brazil (<a href="http://www.slideshare.net/rdohms/php-community-in-brazil">simple slides</a>). We also had sessions by <a href="http://blog.tabini.ca/">Marco</a> and <a href="http://caseysoftware.com/">Keith</a> on uncons and community participation, as well as a few sessions on tools and frameworks/closed apps.</p>
<p>One of the sessions explained how we can get in touch with Microsoft and gave us some insight on the internal structure and roles of all Microsoft related posts. This session was great and also opened the floor to questions from both sides.</p>
<p>The end result of the summit was very positive, even though we may only start seeing concrete results in a few months or even a year. The important message i got out of the conference is that Microsoft is working hard on matching Linux as a viable deploy platform and development platform, but more than that they are looking to go one better and innovate. Investing in professionals that develop PHP and its related libraries is also a way that Microsoft can help PHP to be even more viable on Windows. I guess it is becoming more viable and you should give it a try.</p>
<p>I look forward to some of the new tools and features of current products that were showcased in open and closed sessions &#8211; I believe Microsoft has a chance of doing great things for the PHP community.</p>
<p>For the team that organised MSWDS all I can say is that you did more then an awesome job: the hotel was great, social events were a great opportunity to get into more detailed talks about the day&#8217;s topics. The whole event went down without a glitch &#8211; thank you very much for all the hard work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2009/12/21/microsoft-web-developer-summit-2009/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[SWAT]]></category>
		<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, the DStv Labs team has adopted Scrum as the framework that will be used to [...]]]></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>How did they do that ?</title>
		<link>http://www.mihswat.com/2009/11/16/how-did-they-do-that/</link>
		<comments>http://www.mihswat.com/2009/11/16/how-did-they-do-that/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 12:16:43 +0000</pubDate>
		<dc:creator>hegrobler</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.mihswat.com/?p=913</guid>
		<description><![CDATA[
Have you ever come across a website and saw some really interesting aspects of the user interface ? Maybe it was a site design that looks like a flash site but was not? Or maybe you came across a site that had a visually appealing menu.
Coming from mostly a backend-development background I get this feeling [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-914" src="http://www.mihswat.com/wp-content/uploads/2009/10/FacebookHideSample.bmp" alt="Sample Image" width="381" height="51" /></p>
<p>Have you ever come across a website and saw some really interesting aspects of the user interface ? Maybe it was a site design that looks like a flash site but was not? Or maybe you came across a site that had a visually appealing menu.<span id="more-913"></span></p>
<p>Coming from mostly a backend-development background I get this feeling often. Last week it happened when I saw the Hide option on Facebook. I have seen it a hundred times before but on that day I found myself wondering, so I recreated the sample in my own way from scratch.</p>
<p>The following questions came to mind while looking at Facebook’s implementation:</p>
<ol>
<li>how to make the hide option, appear next to feed item that the mouse is hovering over.</li>
<li>how to make the ‘menu’ item under the hide option appear and stay there when the Hide button is clicked</li>
<li>how to remove the selected options from the list without having to refresh the whole page</li>
<li>how to send the filter option to the server without posting back the whole page</li>
</ol>
<p style="padding-top:10px">I decided that I will use styling and jQuery to complete steps 1 – 3 and use a ajax call via jQuery to post the selected filter option back to the server.</p>
<p><strong>Note</strong> that you will need some prior knowledge of jQuery selectors in order to follow the code sample. See the following urls for some background information on this:</p>
<ul>
<li><a href="http://woorkup.com/2009/10/05/jquery-lesson-series-introduction-to-selectors/">http://woorkup.com/2009/10/05/jquery-lesson-series-introduction-to-selectors/</a></li>
<li><a href="http://docs.jquery.com/Selectors">http://docs.jquery.com/Selectors</a></li>
</ul>
<p style="padding-top:10px"><strong><span style="text-decoration: underline">The following are the steps I completed to make these options work:</span></strong></p>
<h4><strong><span style="text-decoration: underline">Create the folder structure:</span></strong></h4>
<p><strong><span style="text-decoration: underline"><img class="alignnone size-full wp-image-918" src="http://www.mihswat.com/wp-content/uploads/2009/10/filestructure.bmp" alt="filestructure" /></span></strong></p>
<ol>
<li>Download the latest query plug-in (jquery.js in the screenshot) from <a href="http://jquery.com/">http://jquery.com/</a></li>
<li>Create your project with necessary files. See the screen shot for my folder structure:</li>
</ol>
<p style="padding-top:10px"><strong><span style="text-decoration: underline">Import the style sheets and javascript files:</span></strong></p>
<p>1. Place the following statements in the index.php file to reference the style sheets and javascript files</p>
<pre>&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;How did they do that: Facebook Hide&lt;/title&gt;
        &lt;link type="text/css" rel="stylesheet" href="styles/default.css" /&gt;
        &lt;script type="text/javascript" src="js/jquery.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript" src="js/jquery.feedfilter.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript" src="js/hidebutton.js"&gt;&lt;/script&gt;
    &lt;/head&gt;
&lt;body&gt;</pre>
<p style="padding-top:10px"><strong><span style="text-decoration: underline">Create the news feed items:</span></strong></p>
<ol>
<li> The sample only shows one of the news feed entries for clarity sake. Repeat item-container div for each additional item you want.</li>
<li>Note the following things when reviewing the snippet
<ol>
<li>The class name for the feed item is <span style="color: #ff00ff">item-container</span>.</li>
<li><span style="color: #ff00ff">Hide-button</span> is a child element of <span style="color: #ff00ff">item-container</span></li>
<li><span style="color: #ff00ff">Hide-menu-header</span> and <span style="color: #ff00ff">hide-button-options</span> are child elements of <span style="color: #ff00ff">hide-button</span>.</li>
<li>The <span style="color: #ff00ff">hide-menu-header</span> relates to the Hide button on the screen shot and <span style="color: #ff00ff">hide-button-options</span> relate to the menu item under that.</li>
<li>The custom <span style="color: #ff00ff">user</span> attribute on the span. This is the id (in our case a fictional id x) of the user&#8217;s events that must be filtered. This is the value that will be posted back to the server during the ajax call.</li>
</ol>
</li>
</ol>
<pre>&lt;body&gt;
    &lt;center&gt;
        &lt;div class="item-container"&gt;
            &lt;div class="left"&gt;
                &lt;div class="left"&gt;
                    &lt;a class="left" href="/profile/sampleprofile"&gt;
                        &lt;img class="profile-pic" src="images/avatar.png" width="55px" height="55px" /&gt;
                    &lt;/a&gt;
                    &lt;div style="clear:both"&gt;&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class="info"&gt;
                    &lt;p&gt;
                        &lt;strong&gt;
                            &lt;a href="/profile/sampleprofile"&gt;Bruce Banner&lt;/a&gt;
                        &lt;/strong&gt; posted on twitter
                    &lt;/p&gt;
                    &lt;div class="detail"&gt;
                        &lt;a href="#"&gt;8 hours ago&lt;/a&gt; | &lt;a href="#"&gt;comment&lt;/a&gt; | &lt;a href="#"&gt;like&lt;/a&gt;
                    &lt;/div&gt;
               &lt;/div&gt;
           &lt;/div&gt;
           &lt;div class="hide-button"&gt;
               &lt;div class="hide-menu-header"&gt;
                   &lt;input type="button" value="hide"/&gt;
               &lt;/div&gt;
               &lt;span class="hide-button-options" user="x"&gt;
                   &lt;input  type="button" value="Bruce Banner" /&gt;
               &lt;/span&gt;
          &lt;/div&gt;
      &lt;/div&gt;
...
&lt;center&gt;
&lt;body&gt;</pre>
<p><strong><span style="text-decoration: underline">Link up all the events to the appropriate elements:</span></strong></p>
<p>Add script to hidebutton.js. The $(document).ready(&#8230;) construct is used to ensure that the initialization is only run once the full DOM is loaded. Note that $(document).ready(&#8230;) will run as soon as index page is loaded because it is imported in index.php and is not wrapped by any functions.</p>
<p>The script calls three methods that in turn use jQuery selectors to find the appropriate elements by class name or id and then links events to them.</p>
<ul>
<li><span style="color: #ff00ff">initializeFeedItemHoverEvent</span><span style="font-family: monospace">: adds the </span><span style="color: #ff00ff">hover </span><span style="font-family: monospace">event to all elements that contain class </span><span style="color: #ff00ff">item-container <span style="color: #000000">(news feed entries)</span></span><span style="font-family: monospace">. There are 2 functions in this method. The first is fired when a mouse cursor is moved over the element and the second is fired when the mouse is moved away from the element</span></li>
<li><span style="color: #ff00ff">initializeHideMenuClick</span><span style="font-family: monospace">: adds a </span><span style="color: #ff00ff">click </span><span style="font-family: monospace">event to all </span><span style="color: #ff00ff">hide-menu-header</span><span style="font-family: monospace"> (hide menu button) items. It uses </span><span style="color: #ff00ff">$(&#8230;).parent</span><span style="font-family: monospace"> and </span><span style="color: #ff00ff">$(&#8230;).find</span><span style="font-family: monospace"> to find the appropriate elements relative to the current element. </span><span style="color: #ff00ff">$(this)</span><span style="font-family: monospace"> in this method relates to the hide menu button. It also uses </span><span style="color: #ff00ff">removeClass</span><span style="font-family: monospace"> and </span><span style="color: #ff00ff">addClass</span><span style="font-family: monospace"> to toggle the selected and unselected appearance of the hide menu button.</span></li>
<li><span style="color: #ff00ff">initializeHideSubMenuClick</span><span style="font-family: monospace">: Calls the </span><span style="color: #ff00ff">feedfilter</span><span style="font-family: monospace">() method (explained in the next step) on the appropriate hide button sub menu element. The feedfilter() method will use ajax to post the filter back to the server.</span></li>
</ul>
<p style="padding-top:10px">
<pre>//file: hidebutton.js
$(document).ready(function() {
    initializeFeedItemHoverEvent();
    initializeHideMenuClick();
    initializeHideSubMenuClick();
});

//Initialise the hover events over the newsfeed entries function initializeFeedItemHoverEvent(){
//Find all newsfeed items that have a class called item-container
$('.item-container').hover(function() {
        //Show the hide button when the mouse moves onto the item
        $(this).find('.hide-button').show();
    },
    function() {
        //When the mouse cursor leaves the newsfeed item,
        //hide the hide button and reset the styling to original
        var hideButton = $(this).find('.hide-button');
        hideButton.hide();
        resetStyles(hideButton);
        //Hide the submenu of the hide button
        $(this).find('.hide-button-options').hide();
    })
}

//Initialise the click on the hide menu item
function initializeHideMenuClick(){
    //Find the hide button the user clicked and toggle (show/ hide) submenu
    $('.hide-menu-header').click(function() {
        //Find parent with class 'hide-button' of the current element
        //from there find the child of the found element called 'hide-button-options'
        var element = $(this).parent('.hide-button').find('.hide-button-options');

        //Find out which class is set on the current element
        //and based on that set a different class
        if ($(this).attr('class') == 'hide-menu-header'){
            $(this).removeClass('hide-menu-header');
            $(this).addClass('hide-menu-header-selected');
            element.show();
        }
        else {
            $(this).removeClass('hide-menu-header-selected');
            $(this).addClass('hide-menu-header');
            element.hide();
        }
    })
}

//Initialise the click event on the hide sub menu
function initializeHideSubMenuClick(){
    //When the user clicks on the menu option then
    //call the feedfilter method in the  jquery.feedfilter.js file
    if ($(".hide-button-options").length &gt; 0) {
        $(".hide-button-options").feedfilter();
    }
}

//Hide the menu button and its sub menus
function resetStyles(hideButton){
    var menuHeader = hideButton.find(".hide-menu-header-selected");
    if (menuHeader != null){
        menuHeader.removeClass('hide-menu-header-selected');
        menuHeader.addClass('hide-menu-header');
    }
}</pre>
<p><span style="text-decoration: underline"><strong>Complete the server post back:</strong></span><br />
The following section describes the code that fires when a user clicks on the hide button sub menu option. It first extracts the user id that is stored in the custom <span style="color: #ff00ff">user </span>attribute and posts it back to the specified page.</p>
<p>Note the <span style="color: #ff00ff">if (response == &#8220;success&#8221;) {..}</span> section. It finds all the news feed items with a sub element that has a <span style="color: #ff00ff">user </span>attribute with the same value as the news feed item that the user chose to hide.</p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace;line-height: 18px;font-size: 12px">//jquery.feedfilter.js</span></p>
<pre>//Specifiy the feedfilter function definition
//What must happen when the user clicks the sub menu item
(function($) {
	$.fn.feedfilter = function() {

		this.click(function() {
			//Call setFeedfilter
            setFeedfilter($(this));
			return false;
		})

		function setFeedfilter(obj) {

            //Get the value of the user attribute on the current element
            //as the user clicked on the hide sub menu the current element is
            //the hide sub menu
            var user = obj.attr("user");
            var container = obj;
            var originalContent = container.html();

			$.ajax({
		    	type: "POST", //post back method
		    	url: "ajaxpostback.php", //page to post back to
		    	dataType: "json",
		    	data: {"userId": user}, //additional parameters
		    	beforeSend: function(xmlhttprequest) {
                                //change the content of the sub menu button to appear as a
                                //loading animated gif
		    		container.html('&lt;img src="\" alt="\"loading\"" /&gt;')
		    	},
		    	complete: function(xmlhttprequest, textStatus) {
                               //add any code here that should fire once the post back
                               //is completed
		    	},
		    	success: function(response) {
                               //add any code that must run once the postback is completed and
                               //successfull
		    		if (response == "success") {
                        $(".item-container .hide-button-options").each( function() {
                               var data = $(this).attr("user");
                               if (user == data)
                               {
                                   $(this).parent('div').parent('.item-container').hide();
                               }
                            }
                        );
		    		}
                    else
                    {
		    			alert(response);
		    		}
		    	},
		    	error: function(xmlhttprequest,status,error) {
		    		alert("There was a problem with filtering events.");
                    container.html(originalContent);
                    }
		    })
		}
	}
})(jQuery)</pre>
<p style="padding-top:10px"><strong><span style="text-decoration: underline">What happens on the post back page?</span></strong></p>
<p>I have not implemented the actual persisting of the filter setting but have shown how to retrieve the parameter value passed from the client side.</p>
<pre>&lt;?php
    //Persist $_POST["userId"];
    echo json_encode(array("success"));
?&gt;</pre>
<p style="padding-top:10px"><span style="text-decoration: underline"><strong>View the result</strong></span></p>
<p style="padding-top:10px">Browse to the index.php page and you should get something similar to the screenshot shown below.</p>
<p><img class="alignnone size-full wp-image-967" src="http://www.mihswat.com/wp-content/uploads/2009/10/result.bmp" alt="Code Sample Result" /></p>
<p style="padding-top:10px"><strong><span style="text-decoration: underline">What&#8217;s next?</span></strong></p>
<ul>
<li>Styling can be refined. I used some inline styles etc that can be moved to the style sheets.</li>
<li>Content is static at the moment. The news feed items would normally be generated from a data store of some sort</li>
<li>Add additional error handling</li>
<li>I used inline php and markup together to simplify the example. Best practice though, is to split your php code and markup. One approach would be to implement the Model View Controler (MVC) design pattern. A good option for this is to use the Zend Framework (<a href="http://framework.zend.com/">http://framework.zend.com/</a>). It implements the MVC pattern and has loads wrapper classes that wraps commonly used functionality to promote reuse.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mihswat.com/2009/11/16/how-did-they-do-that/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
