<?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>mFabrik - mobile sites, apps, HTML5 and CMS software development &#187; mobile</title>
	<atom:link href="http://blog.mfabrik.com/tag/mobile/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mfabrik.com</link>
	<description>Freedom delivered.</description>
	<lastBuildDate>Wed, 03 Aug 2011 09:47:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Testing mobile websites with Firefox Mobile for PC (Fennec desktop)</title>
		<link>http://blog.mfabrik.com/2011/07/08/testing-mobile-websites-with-firefox-mobile-for-pc-fennec-desktop/</link>
		<comments>http://blog.mfabrik.com/2011/07/08/testing-mobile-websites-with-firefox-mobile-for-pc-fennec-desktop/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 19:42:01 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[plone]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[simulator]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=1317</guid>
		<description><![CDATA[Firefox Mobile (Fennec) has also desktop builds. They are very useful for mobile web site testing as the browser is fast, has real keyboard and is only one mouse click away. Here are instructions how to run Firefox Mobile on Ubuntu Linux (tested on 32-bit Ubuntu 10.10) wget http://releases.mozilla.org/pub/mozilla.org/mobile/releases/latest/linux-i686/fennec-5.0.en-US.linux-i686.tar.bz2 tar -xjf fennec-5.0.en-US.linux-i686.tar.bz2 cd fennec ./fennec [...]]]></description>
			<content:encoded><![CDATA[<p>Firefox Mobile (Fennec) has also desktop builds. They are very useful for mobile web site testing as the browser is fast, has real keyboard and is only one mouse click away.</p>
<p>Here are instructions how to run Firefox Mobile on Ubuntu Linux (tested on 32-bit Ubuntu 10.10)</p>
<pre>wget http://releases.mozilla.org/pub/mozilla.org/mobile/releases/latest/linux-i686/fennec-5.0.en-US.linux-i686.tar.bz2
tar -xjf fennec-5.0.en-US.linux-i686.tar.bz2
cd fennec
./fennec</pre>
<p>.. and thats all you need. It works out of the box! 400x times faster than using Android emulator browser.</p>
<p>There are also <a href=" http://releases.mozilla.org/pub/mozilla.org/mobile/releases/latest/">OSX and Windows builds available</a>.</p>
<p><a href="http://blog.mfabrik.com/wp-content/uploads/2011/07/fennec.png"><img class="alignnone size-full wp-image-1318" title="fennec" src="http://blog.mfabrik.com/wp-content/uploads/2011/07/fennec.png" alt="" width="482" height="830" /></a>
<p class="signature">
<a href="http://mfabrik.com/@@zoho-contact-form"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></a> <a href="http://mfabrik.com/@@zoho-contact-form">Get developers</a> <a href="http://feeds.feedburner.com/mFabrikWebAndMobileDevelopment" rel="alternate" type="application/rss+xml"><img valign="middle" src="http://www.feedburner.com/fb/images/pub/feed-icon16x16.png" alt="" style="vertical-align:middle;border:0"/></a> <a href="http://feeds.feedburner.com/mFabrikWebAndMobileDevelopment" rel="alternate" type="application/rss+xml">Subscribe mFabrik blog in a reader</a> <a href="http://twitter.com/mfabrik"> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></a> <a href="http://twitter.com/moo9000">Follow me on Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2011/07/08/testing-mobile-websites-with-firefox-mobile-for-pc-fennec-desktop/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web and Mobile 1.0.3 released, Plone 4.1 compatible</title>
		<link>http://blog.mfabrik.com/2011/06/02/web-and-mobile-1-0-3-released-plone-4-1-compatible/</link>
		<comments>http://blog.mfabrik.com/2011/06/02/web-and-mobile-1-0-3-released-plone-4-1-compatible/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 17:39:43 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[plone]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[convergence]]></category>
		<category><![CDATA[multichannel]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=1285</guid>
		<description><![CDATA[I just released Web and Mobile 1.0.3. It has some minor compatibility fixes for Plone 4.1 (in fact there was nothing broken besides unit tests). Please update your buildout pindowns for Dexterity 1.0: extends = http://dist.plone.org/release/4.1rc2/versions.cfg http://good-py.appspot.com/release/dexterity/1.0?plone=4.1rc2 Please report all the issues in the issue tracker. &#160; &#160; Get developers  Subscribe mFabrik blog in a [...]]]></description>
			<content:encoded><![CDATA[<p>I just released <a href="http://plone.org/products/web-and-mobile">Web and Mobile 1.0.3</a>. It has some minor compatibility fixes for Plone 4.1 (in fact there was nothing broken besides unit tests).</p>
<p>Please update your buildout pindowns for Dexterity 1.0:</p>
<pre>extends =

http://dist.plone.org/release/4.1rc2/versions.cfg

http://good-py.appspot.com/release/dexterity/1.0?plone=4.1rc2</pre>
<p>Please report all the issues in <a href="http://code.google.com/p/plonegomobile/issues/list">the issue tracker</a>.</p>
<p>&nbsp;</p>
<p>&nbsp;
<p class="signature">
<a href="http://mfabrik.com/@@zoho-contact-form"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></a> <a href="http://mfabrik.com/@@zoho-contact-form">Get developers</a> <a href="http://feeds.feedburner.com/mFabrikWebAndMobileDevelopment" rel="alternate" type="application/rss+xml"><img valign="middle" src="http://www.feedburner.com/fb/images/pub/feed-icon16x16.png" alt="" style="vertical-align:middle;border:0"/></a> <a href="http://feeds.feedburner.com/mFabrikWebAndMobileDevelopment" rel="alternate" type="application/rss+xml">Subscribe mFabrik blog in a reader</a> <a href="http://twitter.com/mfabrik"> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></a> <a href="http://twitter.com/moo9000">Follow me on Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2011/06/02/web-and-mobile-1-0-3-released-plone-4-1-compatible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finding an application download link for App Store or Android Market</title>
		<link>http://blog.mfabrik.com/2011/01/28/finding-an-application-download-link-for-app-store-or-android-market/</link>
		<comments>http://blog.mfabrik.com/2011/01/28/finding-an-application-download-link-for-app-store-or-android-market/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 09:28:58 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[android market]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[application id]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[package id]]></category>
		<category><![CDATA[udid]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=922</guid>
		<description><![CDATA[For App Store, search your application in itunes.apple.com and copy-paste View in iTunes link. For Android, search for your application in Android Pit and copy-paste Android Market Link. Android Pit also provides QR code (2D barcode) for your application. Note that URL shorteners (bit.ly) do not like market:// protocol, so you might need to use [...]]]></description>
			<content:encoded><![CDATA[<p>For App Store, search your application in itunes.apple.com and copy-paste <em>View in iTunes</em> link.</p>
<p>For Android, search for your application in <a href="http://www.androidpit.com/">Android Pit</a> and copy-paste <em>Android Market Link</em>. Android Pit also provides QR code (2D barcode) for your application.</p>
<p>Note that URL shorteners (bit.ly) do not like <em>market://</em> protocol, so you might need to use alternative <em>http://market.android.com notation</em>. This, however, prompts a dialog in the device &#8220;Would you like to open this URL in a browser or in Market Place?&#8221;</p>
<p>More info</p>
<ul>
<li><a href="http://developer.android.com/guide/publishing/publishing.html#marketintent">http://developer.android.com/guide/publishing/publishing.html#marketintent</a></li>
</ul>
<p class="signature">
<a href="http://mfabrik.com/@@zoho-contact-form"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></a> <a href="http://mfabrik.com/@@zoho-contact-form">Get developers</a> <a href="http://feeds.feedburner.com/mFabrikWebAndMobileDevelopment" rel="alternate" type="application/rss+xml"><img valign="middle" src="http://www.feedburner.com/fb/images/pub/feed-icon16x16.png" alt="" style="vertical-align:middle;border:0"/></a> <a href="http://feeds.feedburner.com/mFabrikWebAndMobileDevelopment" rel="alternate" type="application/rss+xml">Subscribe mFabrik blog in a reader</a> <a href="http://twitter.com/mfabrik"> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></a> <a href="http://twitter.com/moo9000">Follow me on Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2011/01/28/finding-an-application-download-link-for-app-store-or-android-market/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vote Mr. Moo for Ploneconf2010 speaker and see how get free beers</title>
		<link>http://blog.mfabrik.com/2010/09/15/vote-mr-moo-for-ploneconf2010-speaker-and-see-how-get-free-beers/</link>
		<comments>http://blog.mfabrik.com/2010/09/15/vote-mr-moo-for-ploneconf2010-speaker-and-see-how-get-free-beers/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 17:14:32 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[plone]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[ploneconf2010]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=816</guid>
		<description><![CDATA[I am running for a speaker seat in Plone Conference 2010. As a strategy to gain this glamored position I have submitted several topics which might interest you. Vote here. ﻿Backpacking with Plone: how our team has redefined North Lapland travel industry with Plone sites. I promise to bring a genuine Lapland snowball with me [...]]]></description>
			<content:encoded><![CDATA[<p>I am running for a speaker seat in Plone Conference 2010. As a strategy to gain this glamored position I have submitted several topics which might interest you.</p>
<p><a href="http://www.ploneconf2010.org/the-event/talks">Vote here</a>.</p>
<ul>
<li><strong>﻿Backpacking with Plone:</strong> how our team has redefined North Lapland travel industry with Plone sites. I promise to bring a genuine Lapland snowball with me and toss it to the first person asking a question.</li>
<li>﻿﻿<strong>Mad about mobile:</strong> How to turn your Plone web site to a mobile site in 15 minutes (* the actual time varies on the status of PyPi and buildouting speed). If you can&#8217;t afford iPhone 4 yet, I promise the site will be 100% functional on a 40$ budget phones also.</li>
<li>﻿<strong>Culture of good documentation:</strong> Plone is hated because newcomers cannot grasp how to customize it. I belive this is an attitude problem, not with the newcomers, but with module authors. <a href="http://plone.org/documentation/manual/plone-community-developer-documentation/">This manual is now 86k words</a>. If we can make it to go up to 100k words in the conference <strong>I&#8217;ll buy a beer everyone who participates the effort</strong>.</li>
<li><strong>The world outside Plone:</strong> Why there exist 13 600 000 Joomla! sites, but 20 000 Plone sites? Why single Joomla! freelancer-entrepreneur can make 250k€ a year alone? How we could make Plone more succesfully by learning what others are doing? Our team has some cross-system experience and we want to give you the best bits what others are doing right (and Plone might be doing wrong).</li>
</ul>
<p><a href="http://www.ploneconf2010.org/the-event/talks">Vote here in the case you missed the link above</a>.</p>
<p>Ps. If I am too boring I promise I will do only PHP/Joomla! jobs in the future, so vote me now or I will forever hold my peace :&lt;﻿</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">because Plone community has had problems with the attitude</div>
<p class="signature">
<a href="http://mfabrik.com/@@zoho-contact-form"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></a> <a href="http://mfabrik.com/@@zoho-contact-form">Get developers</a> <a href="http://feeds.feedburner.com/mFabrikWebAndMobileDevelopment" rel="alternate" type="application/rss+xml"><img valign="middle" src="http://www.feedburner.com/fb/images/pub/feed-icon16x16.png" alt="" style="vertical-align:middle;border:0"/></a> <a href="http://feeds.feedburner.com/mFabrikWebAndMobileDevelopment" rel="alternate" type="application/rss+xml">Subscribe mFabrik blog in a reader</a> <a href="http://twitter.com/mfabrik"> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></a> <a href="http://twitter.com/moo9000">Follow me on Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2010/09/15/vote-mr-moo-for-ploneconf2010-speaker-and-see-how-get-free-beers/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Testing if hostname is numeric IPv4</title>
		<link>http://blog.mfabrik.com/2010/08/31/testing-if-hostname-is-numeric-ipv4/</link>
		<comments>http://blog.mfabrik.com/2010/08/31/testing-if-hostname-is-numeric-ipv4/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 14:51:44 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[hostname]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[ipv4]]></category>
		<category><![CDATA[regex]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=716</guid>
		<description><![CDATA[I had to resort this hack when testing a hybrid web/mobile site which uses site hostname based device discrimination. In production mode we can have m.yoursite.com and www.yoursite.com hostnames. However, when running the site locally, on your development computer and in LAN this does not work very well: one cannot spoof hostnames for web browsers [...]]]></description>
			<content:encoded><![CDATA[<p>I had to resort this hack when testing a hybrid web/mobile site which uses site hostname based device discrimination. In production mode we can have <em>m.yoursite.com</em> and<em> www.yoursite.com</em> hostnames. However, when running the site locally, on your development computer and in LAN this does not work very well: one cannot spoof hostnames for web browsers in devices like iPhone/iPod/other mobile phone unless you install a DNS server. And installing a DNS server for LAN is something you don&#8217;t want to do&#8230;</p>
<p>So, I figured out that I can use  hostname spoofing on desktop computers (/etc/hosts file) and I always access the site via numeric IP (IPv4 over ethernet) when testing over WLAN on mobile devices.</p>
<ul>
<li>The site is rendered in web mode when it is being accessed via textual hostname (localhost, yourpcname)</li>
<li>The site is rendered in mobile mode when it is being accessed via IPv4 numeric hostname (127.0.0.1, 196.168.200.1)</li>
</ul>
<p>And,&#8230; dadaa,&#8230; here is my magical code to test whether hostname is numeric IPv4. I couldn&#8217;t find a ready function from Python standard library</p>
<pre>import re

ipv4_regex_source = "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
ipv4_regex = re.compile(ipv4_regex_source)

def is_numeric_ipv4(str):
    """

http://answers.oreilly.com/topic/318-how-to-match-ipv4-addresses-with-regular-expressions/

    @param str: Hostname as a string.

    @return: True if the given string is numeric IPv4 address
    """
    # ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
    return ipv4_regex.match(str)</pre>
<p class="signature">
<a href="http://mfabrik.com/@@zoho-contact-form"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></a> <a href="http://mfabrik.com/@@zoho-contact-form">Get developers</a> <a href="http://feeds.feedburner.com/mFabrikWebAndMobileDevelopment" rel="alternate" type="application/rss+xml"><img valign="middle" src="http://www.feedburner.com/fb/images/pub/feed-icon16x16.png" alt="" style="vertical-align:middle;border:0"/></a> <a href="http://feeds.feedburner.com/mFabrikWebAndMobileDevelopment" rel="alternate" type="application/rss+xml">Subscribe mFabrik blog in a reader</a> <a href="http://twitter.com/mfabrik"> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></a> <a href="http://twitter.com/moo9000">Follow me on Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2010/08/31/testing-if-hostname-is-numeric-ipv4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Looking for free icons?</title>
		<link>http://blog.mfabrik.com/2010/04/17/looking-for-free-icons/</link>
		<comments>http://blog.mfabrik.com/2010/04/17/looking-for-free-icons/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 17:20:55 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[icons]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=515</guid>
		<description><![CDATA[Check out this Smashing Magazine article with 50 free icons set. Then there is 14 free mobile application icon set by Speckyboy design magazine. Ps. Please if you have any good free icon set tips share them in the comments Get developers  Subscribe mFabrik blog in a reader Follow me on Twitter]]></description>
			<content:encoded><![CDATA[<p>Check out this <a href="http://www.smashingmagazine.com/2009/12/14/50-beautiful-free-icon-sets-for-your-next-design/">Smashing Magazine article with 50 free icons set</a>.</p>
<p>Then there is <a href="http://speckyboy.com/2010/03/08/14-free-mobile-app-development-icon-sets/">14 free mobile application icon set by Speckyboy design magazine</a>.</p>
<p>Ps. Please if you have any good free icon set tips share them in the comments
<p class="signature">
<a href="http://mfabrik.com/@@zoho-contact-form"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></a> <a href="http://mfabrik.com/@@zoho-contact-form">Get developers</a> <a href="http://feeds.feedburner.com/mFabrikWebAndMobileDevelopment" rel="alternate" type="application/rss+xml"><img valign="middle" src="http://www.feedburner.com/fb/images/pub/feed-icon16x16.png" alt="" style="vertical-align:middle;border:0"/></a> <a href="http://feeds.feedburner.com/mFabrikWebAndMobileDevelopment" rel="alternate" type="application/rss+xml">Subscribe mFabrik blog in a reader</a> <a href="http://twitter.com/mfabrik"> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></a> <a href="http://twitter.com/moo9000">Follow me on Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2010/04/17/looking-for-free-icons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a mobile site and applications with Django and Python</title>
		<link>http://blog.mfabrik.com/2009/09/30/building-a-mobile-site-and-applications-with-django-and-python/</link>
		<comments>http://blog.mfabrik.com/2009/09/30/building-a-mobile-site-and-applications-with-django-and-python/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 08:46:52 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[pys60]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apex vertex]]></category>
		<category><![CDATA[augmented reality]]></category>
		<category><![CDATA[bicycling]]></category>
		<category><![CDATA[bilingual]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[browsercontrol]]></category>
		<category><![CDATA[capabilities]]></category>
		<category><![CDATA[darwin]]></category>
		<category><![CDATA[django-cms]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[gps]]></category>
		<category><![CDATA[handset]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[lbs]]></category>
		<category><![CDATA[localhost]]></category>
		<category><![CDATA[location based]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[mobile profile]]></category>
		<category><![CDATA[mod_python]]></category>
		<category><![CDATA[multichannel]]></category>
		<category><![CDATA[multilingual]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[oulu]]></category>
		<category><![CDATA[phonegap]]></category>
		<category><![CDATA[premium]]></category>
		<category><![CDATA[print]]></category>
		<category><![CDATA[publishing]]></category>
		<category><![CDATA[rtsp]]></category>
		<category><![CDATA[series 40]]></category>
		<category><![CDATA[series 60]]></category>
		<category><![CDATA[sniffing]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[symbiansigned]]></category>
		<category><![CDATA[tourism]]></category>
		<category><![CDATA[traffic statistics]]></category>
		<category><![CDATA[twinapex]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[upnorth]]></category>
		<category><![CDATA[user agent]]></category>
		<category><![CDATA[webkit]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://blog.twinapex.fi/?p=248</guid>
		<description><![CDATA[Recently we created a mobile site for an interactive bicycle tour. oulugo.mobi (you need to use mobile browser to access the site or you&#8217;ll get a redirect) is a multimedia enriched bicycle tour through the historic parts of the city of Oulu. All content is provided by OnGo. The route, which you can bicycle through is [...]]]></description>
			<content:encoded><![CDATA[<p>Recently <a href="http://www.twinapex.com">we</a> created a mobile site for an interactive bicycle tour. <a href="http://oulugo.mobi">oulugo.mobi</a> (you need to use mobile browser to access the site or you&#8217;ll get a redirect) is a multimedia enriched bicycle tour through the historic parts of <a href="http://ouka.fi/english/index.asp">the city of Oulu</a>. All content is provided by <a href="http://www.ongo.fi/en/index.htm">OnGo</a>.</p>
<p>The route, which you can bicycle through is drawn on Google Maps. There are nine  action points where the user can listen to streaming audio clips, with still images, in his/her mobile phone. This is sort of  augmented reality experience: The user sees the real world (where he/she is now bicycling) combined with the historic events (audio playback narrative). For example, at Linnansaari (a location on the route) you&#8217;ll see the actual 17th century castle ruins and the narrator tells how the castle exploded when fire, caused by a lighting, reached gunpowder warehouse&#8230; boom. The explosion caused stones fly over 400 meters.</p>
<p>Alternatively, the clips are available as podcasts from <a href="http://www.oulutourism.fi/oulugo/en_default.aspx">Oulu Tourism pages</a>. You can download them into your iPod for offline listening and use in conjuction with a paper map. This demostrates interesting mix of multichannel publishing: paper, web, mobile and podcasts.</p>
<p>The tour is bilingual in Finnish and English.</p>
<p>There exists unreleased iPhone application, based on <a href="http://phonegap.com">PhoneGap</a>, which allows the user to track his/her location real-time on the web page. We didn&#8217;t see it worth of trouble to go through Apple iPhone application review process. When location based service support comes for the browser this feature is indended to be included as the standard HTML5 feature of the service.</p>
<p>There also exists Nokia Series 60 mobile application, based on<a href="http://wiki.opensource.nokia.com/projects/PyS60"> PyS60</a> and Series 60<a href="http://www.forum.nokia.com/info/sw.nokia.com/id/47d8a7fe-768c-44e5-bc26-fcba0a05e35e/S60_Platform_Browser_Control_API_Guide_v2_0_en.pdf.html"> BrowserControl API</a>, which allows the user to track his/her location in real-time. The application provides wrapper around Series 60 WebKit control and allows Javascript to access phone native functions (GPS) over localhost socket communication. Like with Apple, we didn&#8217;t see real-time tracking feature interesting enough to go through Symbian Signed process to get our application released. Also, BrowserControl had seriousquality problems and we didn&#8217;t consider it stable enough for the end users. <a href="https://code.launchpad.net/~august-joki/pys60community/browsercontrol">Some work is available in PyS60 Community Edition repository</a>.</p>
<p>The service is hosted <a href="http://www.twinapex.com/solutions/outsourcing-hosting-and-maintenance-of-internet-and-mobile-systems">on Python specific virtual server on Twinapex services server farm</a>.</p>
<h2>Features</h2>
<ul>
<li>Premium content tailored for audio listening</li>
<li>Dubbed in English and Finnish by a professional voice actor</li>
<li>Bilingual: English/Finnish</li>
<li>Adapts for smartphones (WebKit based browsers) and low end phones (XHTML mobile profile browsers)</li>
<li>Streaming video and audio (RTSP / progressive HTTP download forv iPhone). Different audio quality is provided on depending on the handset features.</li>
<li>Screen resolution detection based on <a href="http://en.wikipedia.org/wiki/User_Agent">user agent sniffing</a>. Three different version of images are used.</li>
<li>Custom Google Maps component for mobile is used. The component adapts for different mobile phones based on sniffing. Features include zoom, show action point, show the current location, search street address name. This component can be published on a request.</li>
<li>Management interface features include video upload, video transcoding different mobile versions and editing bilingual content</li>
<li><a href="http://www.twinapex.com/products/mobile-publishing/apex-vertex/handset-database">Apex Vertex handset database is used to detect the user&#8217;s mobile phone capabilities</a></li>
<li><a href="http://www.twinapex.com/products/mobile-publishing/apex-vertex/reporting">Apex Vertex logging and traffic analytics capabilities are used for the site statistics</a></li>
</ul>
<h2>Software stack</h2>
<ul>
<li><a href="http://www.ubuntu.com">Ubuntu 8.04 Hardy Heron virtual server</a></li>
<li><a href="http://www.apache.org">Apache 2.2 / mod_python</a></li>
<li><a href="http://python.org">Python 2.5</a></li>
<li><a href="http://djangoproject.com">Django 1.0</a></li>
<li><a href="http://django-cms.org/">Django-CMS 1.0</a></li>
<li><a href="http://code.google.com/p/mobilesniffer/">mobile.sniffer Python package to provide abstraction over different handset databases</a></li>
<li><a href="http://www.twinapex.com/products/mobile-publishing/apex-vertex">Apex Vertex streaming</a> solution (RTSP based on Darwin streaming server by Apple)</li>
<li><a href="http://tinymce.moxiecode.com/">TinyMCE WYSIWYG editor</a></li>
<li><a href="http://developer.apple.com/opensource/server/streaming/index.html">Darwin streaming server</a></li>
<li><a href="http://extjs.com/">ExtJS</a> is extensively used in Apex Vertext management interface</li>
</ul>
<h2>Development effort</h2>
<p>Development time: Around 100 hours. Three different developers where involved. Used development tools: <a href="http://www.eclipse.org">Eclipse</a>, <a href="http://pydev.sourceforge.net/">PyDev</a>, <a href="http://subclipse.tigris.org/">Subclipse</a>, <a href="http://subversion.tigris.org/">Subversion</a>. There were around five meetings between the content provider and the technology provider. Few beta testing rounds using iPhone application were performed by bicycling in -10 celcius degrees weather (north and so on&#8230;). No polar bears were harmed during the creation of this mobile service.</p>
<p>The service is linked in from Oulu Tourism pages and thousands of paper brochures printed for Oulu summer season 2009.</p>
<p><strong style="font-weight: bold;">About the author Mikko Ohtamaa</strong></p>
<ul>
<li><a href="http://www.linkedin.com/in/ohtis  ">LinkedIn</a></li>
<li><a href="http://twitter.com/moo9000">Twitter</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2009/09/30/building-a-mobile-site-and-applications-with-django-and-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SEO tips: query strings, multiple languages, forms and other content management system issues</title>
		<link>http://blog.mfabrik.com/2009/08/07/seo-tips-query-strings-multiple-languages-forms-and-other-content-management-system-issues/</link>
		<comments>http://blog.mfabrik.com/2009/08/07/seo-tips-query-strings-multiple-languages-forms-and-other-content-management-system-issues/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 11:34:15 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[plone]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[content management system]]></category>
		<category><![CDATA[description]]></category>
		<category><![CDATA[disallowed]]></category>
		<category><![CDATA[dublin core]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[googlebot]]></category>
		<category><![CDATA[hidden]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[keywords]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[mediapartners]]></category>
		<category><![CDATA[meta]]></category>
		<category><![CDATA[meta tags]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[multilingual]]></category>
		<category><![CDATA[query string]]></category>
		<category><![CDATA[robots.txt]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[search engine optimizations]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[sitemap]]></category>
		<category><![CDATA[tld]]></category>
		<category><![CDATA[top level domain]]></category>
		<category><![CDATA[webmaster tools]]></category>

		<guid isPermaLink="false">http://blog.twinapex.fi/?p=254</guid>
		<description><![CDATA[This post is collection of search engine optimization tips for content management systems, especially for Plone. Do not index query strings It is often desirable to make sure that query string pages (http://yoursite/page?query_string_action=something) do not end up into the search indexes. Otherwise search bots might index pages like site&#8217;s own search engine results  (yoursite/search?SearchableText=&#8230;) lowering [...]]]></description>
			<content:encoded><![CDATA[<p>This post is collection of search engine optimization tips for content management systems, especially for Plone.</p>
<h2>Do not index query strings</h2>
<p>It is often desirable to make sure that query string pages (http://yoursite/page?query_string_action=something) do not end up into the search indexes. Otherwise search bots might index pages like site&#8217;s own search engine results  (yoursite/search?SearchableText=&#8230;) lowering the visibility of  actual content pages.</p>
<p>GoogleBot has regex support in robots.txt and can be configured to ignore any URL ? in it. See the example below.</p>
<p>Query string indexing causes the crawler crawl things like</p>
<ul>
<li>Various search results (?SearchableText)</li>
<li>Keyword lists (?Subject)</li>
<li>Language switching code (?set_language)&#8230; making set_language appear as the document in the search results</li>
</ul>
<p>Also, &#8220;almost&#8221; human readable query strings look ugly in the address bar&#8230;</p>
<h2>Top level domains and languages</h2>
<p>Using top level domain name (.fi for Finland, .uk for United Kingdoms, and so on.) to make distinction between different languages and areas is optimal solution from the SEO point of view. Search engines use TLD information to reorder the search results based on where  the search query is performed  (there is difference between google.com and google.fi results).</p>
<p>Plone doesn&#8217;t use any query strings for content pages. Making robots to ignore query strings is especially important if you are hosting multilingual site and you use top level domain name (TLD) to separate languages: if you don&#8217;t configure robots.txt to ignore ?set_language links only one of your top level domains (.com, .fi, .xxx) will get proper visibility in the search results. For example we had situation where our domain <a href="www.twinapex.fi">www.twinapex.fi</a> did not get proper visibility because Google considered <a href="www.twinapex.com">www.twinapex.com</a>?set_language=fi as the primary content source (accessing Finnish content through English site and  language switching links).</p>
<h2>Shared forms</h2>
<p>Plone has some forms (send to, login) which can appear on any content page. These must be disallowed or otherwise you might have a search result where the link goes to the form page instead of the actual content page.</p>
<h2>Hidden content and content excluded from the navigation</h2>
<p>Any content excluded from the sitemap navigation  should be put under disallowed in robots.txt. E.g. if you check &#8220;exclude from navigation&#8221; for Plone folder remember to update robots.txt also.</p>
<p>In our case, our internal image bank must not end up being indexed, though images themselves are visible on the site. Otherwise you get funny search result: if you search by person&#8217;s name the photo will be the first hit instead of biography.</p>
<h2>Sitemap protocol</h2>
<p>Crawlers use Sitemap protocol to help determining the content pages on your site (note: sitemap seems to be used for hinting only and it is not authoritative).  Since version 3.1 Plone can automatically generate sitemap.xml.gz. You still need to register sitemap.xml.gz in Google webmaster tools manually.</p>
<p>There exists a sitemap protocol extension for mobile sites.</p>
<h2>Webmaster tools</h2>
<p>Google <a href="Webmaster tools">Webmaster tools</a> enable you to monitor your site visibility in Google and do some search engine specific tasks like submitting sitemaps.</p>
<p>I do not know what kind of similar functionality other search provides have. Please share your knowledge in the blog comments regarding this.</p>
<h2>HTML &lt;head&gt; metadata</h2>
<p>Search engines mostly ignore &lt;meta&gt; tags besides title so there is no point of trying fine-tune them.</p>
<h2>Example robots.txt</h2>
<p>Here is our optimized robots.txt for <a href="http://www.twinapex.com">www.twinapex.com</a>:</p>
<pre># Normal robots.txt body is purely substring match only
# We exclude lots of general purpose forms which are available in various mount points of the site
# and internal image bank which is hidden in the navigation tree in any case
User-agent: *
Disallow: set_language
Disallow: login_form
Disallow: sendto_form
Disallow: /images

# Googlebot allows regex in its syntax
# Block all URLs including query strings (? pattern) - contentish objects expose query string only for actions or status reports which
# might confuse search results.
# This will also block ?set_language
User-Agent: Googlebot
Disallow: /*?*
Disallow: /*folder_factories$

# Allow Adsense bot on entire site
User-agent: Mediapartners-Google*
Disallow:
Allow: /*</pre>
<h2>Useful resources</h2>
<ul>
<li><a href="http://googlewebmastercentral.blogspot.com/2007/12/answering-more-popular-picks-meta-tags.html">How Google treats HTML metatags</a>. This is especially interesting considering Plone&#8217;s support for Dublin core metadata (title, description, keywords). Note: &lt;meta&gt; keywords are not indexed.</li>
<li><a href="http://plone.org/products/plone-seo">Plone SEO add-on product</a></li>
<li><a href="http://www.askapache.com/seo/seo-with-robotstxt.html">SEO with robots.txt</a></li>
<li><a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;answer=34627">Sitemaps mobile protocol</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2009/08/07/seo-tips-query-strings-multiple-languages-forms-and-other-content-management-system-issues/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>XHTML mobile profile transformer and cleaner for Python</title>
		<link>http://blog.mfabrik.com/2009/07/23/xhtml-mobile-profile-transformer-and-cleaner-for-python/</link>
		<comments>http://blog.mfabrik.com/2009/07/23/xhtml-mobile-profile-transformer-and-cleaner-for-python/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 04:06:02 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[plone]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[aggregator]]></category>
		<category><![CDATA[atom]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[lxml]]></category>
		<category><![CDATA[mobile profile]]></category>
		<category><![CDATA[mobiready]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[search engine optimizations]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[valid]]></category>
		<category><![CDATA[validator]]></category>
		<category><![CDATA[w3c]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://blog.twinapex.fi/?p=227</guid>
		<description><![CDATA[Mobile phones, and especially mobile site validators, are very picky about the validy of XHTML. It must not be any XHTML, but special mobile profile XHTML. Also, search engines like Google, will punish you in the mobile search results if your site fails to conform to mobile profile. This is especially troublesome if you display [...]]]></description>
			<content:encoded><![CDATA[<p>Mobile phones, and especially mobile site validators, are very picky about the validy of XHTML. It must not be any XHTML, but special <a href="http://en.wikipedia.org/wiki/XHTML_Mobile_Profile">mobile profile XHTML</a>. Also, search engines like Google, will punish you in the mobile search results if your site fails to conform to mobile profile.</p>
<p>This is especially troublesome if you display external content (RSS feeds, ATOM feeds) on your mobile site. Incoming HTML cannot be guaranteed to follow any specification.</p>
<p>To solve this problem, we have created <a href="http://pypi.python.org/pypi/gomobile.xhtmlmp/">gomobile.xhtmlmp Python library</a> which helps you to transform any HTML to content to valid XHTML MP. The library is piloted on <a title="Plone mobile community site" href="http://plonecommunity.mobi">plonecommunity.mobi</a> site which  uses aggregated content from varying sources. The library is based on <a href="http://codespeak.net/lxml/lxmlhtml.html#cleaning-up-html">lxml.html.Cleaner</a>. The library is part of <a href="http://pypi.python.org/pypi/gomobile.mobile/">GoMobile project</a> which aims to create world class Python mobile web development tools.</p>
<h2>Highlights</h2>
<ul>
<li> Turn any incoming HTML/XHTML to mobile profile compatible</li>
<li>Enforce ALT text on images &#8211; especially useful for external tracking images (feedburner tracker). ALT texts are required by XHTML MP.</li>
<li>Protect against Cross-Site Scripting Attacks (XSS) and other nastiness, as provided by lxml.xhtml.clean</li>
<li>Unicode compliant &#8211; eats funky characters</li>
</ul>
<p>As an example <a href="https://plonegomobile.googlecode.com/svn/trunk/gomobile/gomobile.supporter/gomobile/supporter/feedfeeder/patches.py">we integrated gomobile.xhtmlmp  to Feedfeeder Plone add-on product</a>.</p>
<p>Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2009/07/23/xhtml-mobile-profile-transformer-and-cleaner-for-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to optimize your mobile site visibility</title>
		<link>http://blog.mfabrik.com/2009/07/14/how-to-optimize-your-mobile-site-visibility/</link>
		<comments>http://blog.mfabrik.com/2009/07/14/how-to-optimize-your-mobile-site-visibility/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 07:24:22 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://blog.twinapex.fi/?p=199</guid>
		<description><![CDATA[SEOptimize has an interesting post containing lots of resources for mobile internet growth, mobile site search engine optimizations and mobile web design. Keep this under your pillow, mobile folks!]]></description>
			<content:encoded><![CDATA[<p>SEOptimize has an <a href="http://www.seoptimise.com/blog/2009/07/33-mobile-seo-mobile-analytics-resources.html">interesting post</a> containing lots of resources for mobile internet growth, mobile site search engine optimizations and mobile web design. Keep this under your pillow, mobile folks!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2009/07/14/how-to-optimize-your-mobile-site-visibility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

