<?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 - web and mobile development &#187; technology</title>
	<atom:link href="http://blog.mfabrik.com/category/technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mfabrik.com</link>
	<description>Freedom delivered.</description>
	<lastBuildDate>Mon, 26 Jul 2010 09:49:17 +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>.gitignore for Python developers</title>
		<link>http://blog.mfabrik.com/2010/07/23/gitignore-for-python-developers/</link>
		<comments>http://blog.mfabrik.com/2010/07/23/gitignore-for-python-developers/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 08:02:32 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[git]]></category>
		<category><![CDATA[plone]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[zope]]></category>
		<category><![CDATA[gitignore]]></category>
		<category><![CDATA[ignore]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=595</guid>
		<description><![CDATA[If you are using Git for version control for your Python egg and buildout development below are is a sample which you might want to put into your .gitignore file.
*.mo
*.egg-info
*.egg
*.EGG
*.EGG-INFO
bin
build
develop-eggs
downloads
eggs
fake-eggs
parts
dist
.installed.cfg
.mr.developer.cfg
.hg
.bzr
.svn
*.pyc
*.pyo
*.tmp*

Suggestions for new ignores are welcome.

 Read our blog   Subscribe mFabrik blog in a reader  Follow us on Twitter  Mikko Ohtamaa on LinkedIn
]]></description>
			<content:encoded><![CDATA[<p>If you are using Git for version control for your Python egg and buildout development below are is a sample which you might want to put into your .gitignore file.</p>
<pre>*.mo
*.egg-info
*.egg
*.EGG
*.EGG-INFO
bin
build
develop-eggs
downloads
eggs
fake-eggs
parts
dist
.installed.cfg
.mr.developer.cfg
.hg
.bzr
.svn
*.pyc
*.pyo
*.tmp*
</pre>
<p>Suggestions for new ignores are welcome.
<p>
<a href="http://blog.mfabrik.com"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></img></a> <a href="http://blog.mfabrik.com">Read our blog</a> <a href="http://twitter.com/mfabrik"> <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> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></img></a> <a href="http://twitter.com/mfabrik">Follow us on Twitter</a> <a href="http://www.linkedin.com/in/ohtis"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/linkedin-24.png"></img></a> <a href="http://www.linkedin.com/in/ohtis">Mikko Ohtamaa on LinkedIn</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2010/07/23/gitignore-for-python-developers/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Zoho integration for Python and Plone CMS</title>
		<link>http://blog.mfabrik.com/2010/07/18/zoho-integration-for-python-and-plone-cms/</link>
		<comments>http://blog.mfabrik.com/2010/07/18/zoho-integration-for-python-and-plone-cms/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 21:44:57 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[plone]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[zoho]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[crm]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[gpl]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[pypi]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=590</guid>
		<description><![CDATA[Zoho is a web application provider competing with Google Docs, Microsoft Office and Live.
Zoho provides a very wide set of browser based applications from text editing and spreadsheets to project management and customer relationship management (highlighted items should ring a bell for small software development companies). Especially the last one, CRM, is a very attractive [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zoho.com/">Zoho </a>is a web application provider competing with Google Docs, Microsoft Office and Live.</p>
<p>Zoho provides a very wide set of browser based applications from text editing and spreadsheets to <strong>project management and customer relationship management </strong>(highlighted items should ring a bell for small software development companies). Especially the last one, CRM, is a very attractive deal as you get a hosted complex CRM application with API services for very affordable or free price. Small organizations are not necessarily rich enough to go for Salesforce API supported edition which would be 135 € / month / user.</p>
<p>mFabrik has been working on Zoho Python bindings as we use Zoho internally.</p>
<p>Zoho API is HTTP GET/POST based.</p>
<ul>
<li><a href="http://zohocrmapi.wiki.zoho.com/Generating-API-Ticket.html">Authentication</a>, which is called a ticket in Zoho language, is HTTP POST with custom plain-text responses. The same authentication mechanism works in-browser (Javascript) and for machine-to-machine communication as far as I know</li>
<li>Most functions can be performed as HTTP POST or GET. If you need to input compex data (like CRM leads), you&#8217;ll do it as HTTP POST of custom XML payload</li>
<li>Some functions expose the output as JSON for HTTP GET, so that it can be directly consumed inside browser Javascript</li>
</ul>
<p><a title="Zoho Python API" href="http://pypi.python.org/pypi/mfabrik.zoho">mfabrik.zoho </a>is a GPL&#8217;ed Python library which provides basic facilities for Zoho API calls. Currently the feature set is very CRM weighted, though it can be easily expanded for other Zoho applications.</p>
<p><a title="CMS and Zoho integration" href="http://pypi.python.org/pypi/mfabrik.zoho">mfabrik.plonezohointegration</a> is a Plone CMS add-on product which marry Plone and Zoho together. The add-on provides a control panel where you can enter Zoho API key details for Plone. Forms for CRM lead generation are provided as standalone and as a portlet (you can see them in action on our <a href="http://mfabrik.com">web </a>and <a href="http://blog.mfabrik.com">blog</a> site).</p>
<p><a href="http://github.com/miohtama/mfabrik.zoho">The source is hosted on Github</a>, so you can easily start tailoring it for your own organization needs. I happily accept all merge requests, providing that unit tests for new features are included. If you do not feel comfortable with Python programming, but still want to integrate Zoho to your systems, please contact us for further help.
<p>
<a href="http://blog.mfabrik.com"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></img></a> <a href="http://blog.mfabrik.com">Read our blog</a> <a href="http://twitter.com/mfabrik"> <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> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></img></a> <a href="http://twitter.com/mfabrik">Follow us on Twitter</a> <a href="http://www.linkedin.com/in/ohtis"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/linkedin-24.png"></img></a> <a href="http://www.linkedin.com/in/ohtis">Mikko Ohtamaa on LinkedIn</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2010/07/18/zoho-integration-for-python-and-plone-cms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debugging Skype crash problems on Ubuntu 10.04 Lucid Lynx Linux</title>
		<link>http://blog.mfabrik.com/2010/07/16/debugging-skype-crash-problems-on-ubuntu-10-04-lucid-lynx-linux/</link>
		<comments>http://blog.mfabrik.com/2010/07/16/debugging-skype-crash-problems-on-ubuntu-10-04-lucid-lynx-linux/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 08:30:11 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[bug tracker]]></category>
		<category><![CDATA[crash]]></category>
		<category><![CDATA[log files]]></category>
		<category><![CDATA[skype]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=584</guid>
		<description><![CDATA[Symptoms: Your Skype crashes on incoming chat message or if you try to open a contact info / chat message &#8211; usually this leads to a crash on Skype start-up because there are always incoming chat messages in a queue.
Skype is not really helpful regarding how to get meaningful log information from the client, but [...]]]></description>
			<content:encoded><![CDATA[<p>Symptoms: Your Skype crashes on incoming chat message or if you try to open a contact info / chat message &#8211; usually this leads to a crash on Skype start-up because there are always incoming chat messages in a queue.</p>
<p>Skype is not really helpful regarding how to get meaningful log information from the client, <a href="http://forum.skype.com/index.php?showtopic=101297">but it is possible</a>.</p>
<p>Create a log directory</p>
<pre>mkdir ~/.Skype/Logs</pre>
<p>Run Skype from the command line and open a chat window so that it crashes</p>
<pre>moo@murskaamo:~$ skype
Aborted</pre>
<p>Now there should be log data available</p>
<pre>moo@murskaamo:~$ ls -lh ~/.Skype/Logs/
total 724K
-rw-r--r-- 1 moo moo 607K 2010-07-16 11:10 skype_20100716-1110.log
-rw-r--r-- 1 moo moo 116K 2010-07-16 11:10 skype_20100716-1110.trace.txt</pre>
<p>However, those log files are little useful for anybody except Skype developers as <a href="http://forum.skype.com/index.php?showtopic=65559">they are encrypted</a>. <a href="https://jira.skype.com/secure/Dashboard.jspa">Your only hope is to submit them to  a Skype bug tracker</a> and hope that someone answers you something meaningful. The guidelines how to create a bug report and how they are processed is little unclear &#8211; there doesn&#8217;t seem to be clear announcement from Skype whether they process  these reports or not.</p>
<p>The crashes probably are due to incompatible system library versions / bugs in them. Try downloading <a href="http://www.skype.com/intl/en-us/get-skype/on-your-computer/linux/post-download/">static Skype versions</a> which does not use system libraries.
<p>
<a href="http://blog.mfabrik.com"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></img></a> <a href="http://blog.mfabrik.com">Read our blog</a> <a href="http://twitter.com/mfabrik"> <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> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></img></a> <a href="http://twitter.com/mfabrik">Follow us on Twitter</a> <a href="http://www.linkedin.com/in/ohtis"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/linkedin-24.png"></img></a> <a href="http://www.linkedin.com/in/ohtis">Mikko Ohtamaa on LinkedIn</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2010/07/16/debugging-skype-crash-problems-on-ubuntu-10-04-lucid-lynx-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easily install all Python versions under Linux and OSX using collective.buildout.python</title>
		<link>http://blog.mfabrik.com/2010/07/16/easily-install-all-python-versions-under-linux-and-osx-using-collective-buildout-python/</link>
		<comments>http://blog.mfabrik.com/2010/07/16/easily-install-all-python-versions-under-linux-and-osx-using-collective-buildout-python/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 07:47:45 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[plone]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[buildout]]></category>
		<category><![CDATA[collective]]></category>
		<category><![CDATA[compilation]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[pil]]></category>
		<category><![CDATA[python imaging library]]></category>
		<category><![CDATA[readline]]></category>
		<category><![CDATA[virtualenv]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=576</guid>
		<description><![CDATA[Here are short instructions how to install all versions (2.4, 2.5, 2.6, 2.7 and 3.1) of Python interpreters on UNIX system. The instructions were tested on Ubuntu 10.04 Lucid Lynx Linux but should work on other systems as is. The installation is based of downloading, compiling and installing different Pythons and their libraries using buildout [...]]]></description>
			<content:encoded><![CDATA[<p>Here are short instructions how to install all versions (2.4, 2.5, 2.6, 2.7 and 3.1) of Python interpreters on UNIX system. The instructions were tested on Ubuntu 10.04 Lucid Lynx Linux but should work on other systems as is. The installation is based of downloading, compiling and installing different Pythons and their libraries using <a href="http://www.buildout.org">buildout </a>tool. <a href="http://svn.plone.org/svn/collective/buildout/python/">A buildout configuration for doing this</a> is maintained by a <a href="http://plone.org">Plone</a> community.</p>
<p>This buildout is especially useful to get Python 2.4 properly running under the latest Ubuntu 10.04 Lucid Lynx. This is because Ubuntu repositories won&#8217;t ship with Python 2.4 packages anymore.</p>
<p>The installation will also include static compilation of some very popular libraries. These are dependencies for other Python packages including, but not limited, to</p>
<ul>
<li>libjpeg</li>
<li>Python imaging library</li>
<li>readline</li>
</ul>
<h2>Prerequisites</h2>
<ul>
<li>Some Python version is installed (OS default)</li>
<li>GCC compiler is installed (sudo apt-get install build-essential)</li>
<li>Subversion tool is installed (sudo apt-get install subversion)</li>
</ul>
<h2>Running it</h2>
<pre>svn co http://svn.plone.org/svn/collective/buildout/python/
cd python
python bootstrap.py
bin/buildout</pre>
<h2>Using it</h2>
<p>All Pythons are under <a href="http://pypi.python.org/pypi/virtualenv">virtualenv</a> installations. This means that you can activate one Python configuration for your shell once easily (<em>python</em> command will run under different Python versions).</p>
<p>Activating Python 2.4</p>
<pre>source python/python-2.4/bin/activate
(python-2.4)moo@murskaamo:~/code$ python -V
Python 2.4.6</pre>
<p>Check that Python Imaging Library works</p>
<pre>python
Python 2.4.6 (#1, Jul 16 2010, 10:31:46)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt; import PIL</pre>
<p>(No exceptions raised, Python Imaging Library works well).
<p>
<a href="http://blog.mfabrik.com"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></img></a> <a href="http://blog.mfabrik.com">Read our blog</a> <a href="http://twitter.com/mfabrik"> <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> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></img></a> <a href="http://twitter.com/mfabrik">Follow us on Twitter</a> <a href="http://www.linkedin.com/in/ohtis"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/linkedin-24.png"></img></a> <a href="http://www.linkedin.com/in/ohtis">Mikko Ohtamaa on LinkedIn</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2010/07/16/easily-install-all-python-versions-under-linux-and-osx-using-collective-buildout-python/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Changing the location of Ubuntu 10.04 Lucid Lynx notification bubble to a different corner</title>
		<link>http://blog.mfabrik.com/2010/07/16/changing-the-location-of-ubuntu-10-04-lucid-lynx-notification-bubble-to-a-different-corner/</link>
		<comments>http://blog.mfabrik.com/2010/07/16/changing-the-location-of-ubuntu-10-04-lucid-lynx-notification-bubble-to-a-different-corner/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 07:22:19 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[area]]></category>
		<category><![CDATA[bubbles]]></category>
		<category><![CDATA[corner]]></category>
		<category><![CDATA[location]]></category>
		<category><![CDATA[lucid lynx]]></category>
		<category><![CDATA[notifications]]></category>
		<category><![CDATA[notify-osd]]></category>
		<category><![CDATA[ubunty]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=573</guid>
		<description><![CDATA[Ubuntu notifications, those grey bubbles for incoming instant messages and such, are in the top right corner under the system tray area by default. Many applications, like Google Chrome browser, place lots of controls there and notifications might block them. Also, you might prefer some other corner due to your personal taste. The application for [...]]]></description>
			<content:encoded><![CDATA[<p>Ubuntu notifications, those grey bubbles for incoming instant messages and such, are in the top right corner under the system tray area by default. Many applications, like Google Chrome browser, place lots of controls there and notifications might block them. Also, you might prefer some other corner due to your personal taste. The application for responsible for those bubbles is called <a href="https://wiki.ubuntu.com/NotifyOSD">notify-osd</a>.</p>
<p><a title="Customitizing notify-osd on Ubuntu 10.04" href="http://www.webupd8.org/2010/05/finally-easy-way-to-customize-notify.html">Here are instructions</a> how get a custom notification-osd which can read a config file where you can specify settings for the notifications. Though it requires you to install a custom notify-osd version, the instructions are plain and simple. For less hardcode users, <a href="http://www.webupd8.org/2010/05/new-notifyosdconfiguration-version-gui.html">there also exists a version with graphical user interface to configure notify-osd</a>.
<p>
<a href="http://blog.mfabrik.com"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></img></a> <a href="http://blog.mfabrik.com">Read our blog</a> <a href="http://twitter.com/mfabrik"> <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> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></img></a> <a href="http://twitter.com/mfabrik">Follow us on Twitter</a> <a href="http://www.linkedin.com/in/ohtis"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/linkedin-24.png"></img></a> <a href="http://www.linkedin.com/in/ohtis">Mikko Ohtamaa on LinkedIn</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2010/07/16/changing-the-location-of-ubuntu-10-04-lucid-lynx-notification-bubble-to-a-different-corner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nokia N900 direct OVI map download links &#8211; no Windows software needed</title>
		<link>http://blog.mfabrik.com/2010/06/06/nokia-n900-direct-ovi-map-download-links-no-windows-software-needed/</link>
		<comments>http://blog.mfabrik.com/2010/06/06/nokia-n900-direct-ovi-map-download-links-no-windows-software-needed/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 17:43:33 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[n900]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=569</guid>
		<description><![CDATA[Here. You can directly download files using N900 browser. Then with little shell diving you can also install them.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://handphone-solution.blogspot.com/2009/07/direct-download-for-ovi-maps-30-without.html">Here</a>. You can directly download files using N900 browser. Then with little shell diving you can also install them.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2010/06/06/nokia-n900-direct-ovi-map-download-links-no-windows-software-needed/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Automatically generating description based on body text</title>
		<link>http://blog.mfabrik.com/2010/06/04/automatically-generating-description-based-on-body-text/</link>
		<comments>http://blog.mfabrik.com/2010/06/04/automatically-generating-description-based-on-body-text/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 11:17:37 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[plone]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[description]]></category>
		<category><![CDATA[dublin core]]></category>
		<category><![CDATA[restrictedpython]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[zmi]]></category>
		<category><![CDATA[zope]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=565</guid>
		<description><![CDATA[Below is a sample script to automatically generate descriptions based on page body text. It is for Plone CMS, but should be applicable to any Python based CMS with some modifications.
The idea is that we take three first sentences and use them as a description.
Use case: People are lazy to write descriptions (descriptions as in Dublin [...]]]></description>
			<content:encoded><![CDATA[<p>Below is a sample script to automatically generate descriptions based on page body text. It is for <a href="http://plone.org">Plone</a> CMS, but should be applicable to any Python based CMS with some modifications.</p>
<p>The idea is that we take three first sentences and use them as a description.</p>
<div>Use case: People are lazy to write descriptions (descriptions as in Dublin Core metadata). You can generate some kind of description by taking the few first sentences of the text. This is not perfect, but this is way better than empty description. Also, the script comes with good comments which should be helpful for beginner Plone programmers.</div>
<div></div>
<div>Please comment if you have other simple ideas to generate descriptions.</div>
<div></div>
<div>Usage</div>
<div>
<ul>
<li>Add  Script (Python) item through Zope Management interface to any Plone folder</li>
<li>Put in the code payload below</li>
<li>Hit Test tab or type in Script URL manually &#8211; note that the operation is one shot only</li>
<li>The script iterates through all content items in that folder</li>
<li>The script will provide logging output to standard Plone log (var/log and stdout if Plone is run in the debug mode).</li>
</ul>
</div>
<p>Since Zope uses <a href="http://pypi.python.org/pypi/RestrictedPython/">RestrictedPython</a> for through-the-web created scripts, the user of this script cannot breach the server security (they cannot make Python calls they have no permission for). This sets some limitations for automating tasks like this, but we don&#8217;t hit those limitations in our use case.</p>
<pre>def create_automatic_description(content, text_field_name="text"):
    """ Creates an automatic description from HTML body by taking three first sentences. 

    Takes the body text

    @param content: Any Plone contentish item (they all have description)

    @param text_field_name: Which schema field is used to supply the body text (may very depending on the content type)
    """

    # Body is Archetype "text" field in schema by default.
    # Accessor can take the desired format as a mimetype parameter.
    # The line below should trigger conversion from text/html -&gt; text/plain automatically using portal_transforms
    field = content.Schema()[text_field_name]

    # Returns a Python method which you can call to get field's
    # for a certain content type. This is also security aware
    # and does not breach field-level security provded by Archetypes
    accessor = field.getAccessor(content)

    # body is UTF-8
    body = accessor(mimetype="text/plain")

    # Now let's take three first sentences or the whole content of body
    sentences = body.split(".")

    if len(sentences) &gt; 3:
       intro = ".".join(sentences[0:3])
       intro += "." # Don't forget closing the last sentence
    else:
       # Body text is shorter than 3 sentences
       intro = body

    content.setDescription(intro)

# context is the reference of the folder where this script is run
for id, item in context.contentItems():
     # Iterate through all content items (this ignores Zope objects like this script itself)

     # Use RestrictedPython safe logging.
     # plone_log() method is permission aware and available on any contentish object
     # so we can safely use it from through-the-web scripts
     context.plone_log("Fixing:" + id)

     # Check that the description has never been saved (None)
     # or it is empty, so we do not override a description someone has
     # set before automatically or manually
     desc = context.Description() # All Archetypes accessor method, returns UTF-8 encoded string

     if desc is None or desc.strip() == "":
          # We use the HTML of field called "text" to generate the description
          create_automatic_description(item, "text")

# This will be printed in the browser when the script completes succesfully
return "OK"</pre>
<p>
<a href="http://blog.mfabrik.com"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></img></a> <a href="http://blog.mfabrik.com">Read our blog</a> <a href="http://twitter.com/mfabrik"> <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> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></img></a> <a href="http://twitter.com/mfabrik">Follow us on Twitter</a> <a href="http://www.linkedin.com/in/ohtis"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/linkedin-24.png"></img></a> <a href="http://www.linkedin.com/in/ohtis">Mikko Ohtamaa on LinkedIn</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2010/06/04/automatically-generating-description-based-on-body-text/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to install Joomla! on your Ubuntu/Linux server with basic security</title>
		<link>http://blog.mfabrik.com/2010/05/31/how-to-install-joomla-on-your-ubuntulinux-server-with-basic-security/</link>
		<comments>http://blog.mfabrik.com/2010/05/31/how-to-install-joomla-on-your-ubuntulinux-server-with-basic-security/#comments</comments>
		<pubDate>Mon, 31 May 2010 09:13:36 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[email. chmod]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[permissions]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[sudo]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[virtualhost]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=540</guid>
		<description><![CDATA[This how to shorty explains how to set-up a Joomla! hosting on a shared hosting server you own to have basic security. This instructions apply for Debian/Ubuntu based systems, but can be generalized to any Linux based system like Fedora.
In this how to we use the following software versions


Joomla 1.5
Apache 2.2
MySQL 5.1
Ubuntu 8.04 Hardy Heron [...]]]></description>
			<content:encoded><![CDATA[<div>This how to shorty explains how to set-up a Joomla! hosting on a shared hosting server you own to have basic security. This instructions apply for Debian/Ubuntu based systems, but can be generalized to any Linux based system like Fedora.</div>
<div>In this how to we use the following software versions</div>
<div>
<ul>
<li>Joomla 1.5</li>
<li>Apache 2.2</li>
<li>MySQL 5.1</li>
<li>Ubuntu 8.04 Hardy Heron server edition</li>
</ul>
</div>
<p>The instructions may apply for other versions too.</p>
<h2>Prerequisitements</h2>
<p>What you need to have in order to use this how to</p>
<ul>
<li>Basic UNIX file permissions knowledge</li>
<li>Basic UNIX shell knowledge</li>
<li>You have a Linux server (Ubuntu / Debian) for which you have root user access and you plan to use this server to host one or several Joomla! sites</li>
<li>Apache and MySQL instaleld on your server</li>
</ul>
<h2>User setup<br />
<span style="font-weight: normal; font-size: 13px;"> </span></h2>
<h2><span style="font-weight: normal; font-size: 13px;">Set-up an UNIX user on a dedicated server for Joomla! hosting. The user can SSH in the box and write to his home folder, /tmp and /var/www site folder.</span></h2>
<p><span style="font-weight: normal; font-size: 13px;">We create a user called &#8220;user&#8221; in this instructions. Replace it with the username you desire. We also use the example site name (www).yoursite.com.</span></p>
<div>Create new UNIX user and /home/user folder.</div>
<pre>sudo adduser user # Asks for the password and created /home/user</pre>
<div>Create corresponding /var/www/user folder.</div>
<pre>sudo mkdir /var/www/user
sudo chmod -R user:user /var/www/user # Only user has writing access to this folder</pre>
<h2>Setup MySQL user account</h2>
<p>Install MySQL as per Debian/Ubuntu instructions.</p>
<p>Login as MySQL admin user (may vary depending how your MySQL is configured). Note that first you will be asked for <em>sudo</em> password, then for MySQL administrative user password.</p>
<pre>sudo mysql -u admin -p</pre>
<div>Then create a new database with the same name as new as the UNIX user. Make sure that we use UTF-8 character encoding so we avoid irritating encoding problems in the future.</div>
<pre>CREATE DATABASE user DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;</pre>
<div>Create a MySQL user with the same name as the UNIX user. Use  a random password and give it all rights for the database. Note that this password should differ from the UNIX username password as this must be stored as plain-text in Joomla PHP files. Also MySQL differs users whether they came from localhost or other IP address. Here we use localhost so that the database is connectable only from the same server as  Apache is running.</div>
<pre>GRANT ALL ON user.* TO 'user'@'localhost' identified by 'zxc123zxc';<span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;"> </span></pre>
<h2>Extract Joomla! installation files</h2>
<p><span style="font-size: x-small;"><span style="font-size: small;"><span>Enter the folder which will contain web site PHP files.</span></span></span></p>
<pre>sudo -i -u user # pose yourself as UNIX user who runs the site</pre>
<pre>cd /var/www/user</pre>
<div>Load the latest Joomla! source code to the server using wget command. Check <a href="http://www.joomla.org/download.html">the download URL from joomla.org web site</a>.</div>
<pre>wget http://joomlacode.org/gf/download/frsrelease/12350/51111/Joomla_1.5.18-Stable-Full_Package.zip</pre>
<div>Unzip it.</div>
<div>
<pre>unzip Joomla_1.5.18-Stable-Full_Package.zip</pre>
<p>Exit posing yourself as user UNIX user.</p>
<pre>exit</pre>
</div>
<h2>Set file permission</h2>
<div>In order to secure your server</div>
<div>
<ul>
<li>Configuration files and upload directory must be writable by Apache user (www-data for Ubuntu/Debian, httpd for Fedora/Red Hat)</li>
<li>Other .php files should be read-only</li>
</ul>
</div>
<p>Note that during Joomla&#8217;s browser based installation Apache&#8217;s <em>www-data</em> must have write access to folder in order to create configuration.php file. We will later remove this access right.</p>
<p>We will set Joomla! files under UNIX group group www-data so that Apache can read them. Certain files are set to be writable. This must be done as root user.</p>
<pre>sudo chown -R user:www-data /var/www/user # Make user group to www-data</pre>
<pre>sudo chmod g+wrx /var/www/user # Read only access to www-data user. Write access for installation, will be later removed.</pre>
<p>Now <em>ls -l</em> command in /var/www/user should give you something like this for fil masks:</p>
<pre>drwxr-xr-x 11 user www-data    4096 2010-05-28 10:22 plugins
-rwxr--r--  1 user www-data     304 2010-05-28 10:21 robots.txt
drwxr-xr-x  6 user www-data    4096 2010-05-28 10:22 templates</pre>
<h2>Creating Apache configuration</h2>
<div>This allows serving Joomla! by Apache and starting the browser based configuration.</div>
<div>First create Apache configuration file under <em>/etc/apache2/sites-enabled</em> as root user. We assume <em>nano</em> terminal base text editor is installed on the server.</div>
<pre>sudo nano /etc/apache2/sites-enabled/yoursite.conf</pre>
<div>Below is a sample configuration file. You may need to match your server public IP in &lt;virtualhost, so that Apache knows for which IP address sites are served. We use virtual hosting: every site on the server is identified by incoming HTTP request.</div>
<div><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">&lt;VirtualHost *&gt;</span></div>
<pre>   ServerName yoursite.com
   ServerAlias www.yoursite.com
   ServerAdmin info@yourcompany.com

   LogFormat       combined
   TransferLog     /var/log/apache2/yoursite.log

   # Make sure this virtual host if capable of executing PHP5
   Options +ExecCGI
   AddType application/x-httpd-php .php .php5

   # Point to www folder where Joomla! is extracted
   DocumentRoot /var/www/yoursite

   # Do not give illusion of safety
   # as PHP safe_mode really is a crap
   # and only causes problems
   php_admin_flag safe_mode off

   #
   # This entry will redirect traffic www.yoursite.com -&gt; yoursite.com
   # Assume mod_rewrite is installed and enabled on Apache
   # 301 is HTTP Permanent Redirect code
   RewriteEngine On
   RewriteCond %{HTTP_HOST} ^www\.yoursite\.com [NC]
   RewriteRule (.*) http://yoursite.com$1 [L,R=301]

&lt;/VirtualHost&gt;</pre>
<h2><span style="font-weight: normal;">Faking the DNS entry</span></h2>
<div>If you have not yet reserved a domain name for your site, but still want to get the virtual host working, you can add a DNS name entry into a <a href="http://en.wikipedia.org/wiki/Hosts_file">hosts</a> file on your local computer. The following assumes you are using Ubuntu desktop, but <em>hosts </em>file is available on Windows and OSX too.</div>
<pre>sudo gedit /etc/hosts</pre>
<div>Then add the lines like the example below. Do not forget to remove this from <em>hosts</em> file when the actual DNS has been set up.</div>
<pre># Force this hostname to go to your server public IP address from your local computer</pre>
<pre>123.123.123 yoursite.com www.yoursite.com</pre>
<h2>Start Joomla! browser based installation</h2>
<div>Then enter the URL of your site to the browser:</div>
<pre>http://yoursite.com</pre>
<div>Joomla! installation page should appear.</div>
<div>
<ul>
<li>Fill in MySQL database values as created before.</li>
<li>If you plan to use SSH for file transfer do not enable FTP layer (unsecure).</li>
<li>Use a random password as Joomla! administrator user and store it somewhere in safe.</li>
<li>When Joomla! browser based installation goes to the point it asks you to remove the installation directory follow the instructions below.</li>
</ul>
</div>
<h2 style="font-size: 1.5em;">Secure the configuration</h2>
<div>Now remove extra permissions from Apache&#8217;s www-data user so that in the case there is a PHP / Joomla security hole, your site files cannot get compromised.</div>
<div>Some folders must remain writable as Joomla! will upload or write files in them.</div>
<pre>sudo chmod -R g-w /var/www/user # Remote write permission
sudo rm -rf /var/www/user/installation # Remove installation directory
# Add write permission to folders which contain writable files
sudo chmod -R g+x /var/www/user/logs
sudo chmod -R g+x /var/www/user/images
sudo chmod -R g+x /var/www/user/tmp
sudo chmod -R g+x /var/www/user/images</pre>
<h2>Setting up htaccess files</h2>
<p>Joomla! comes with a sample htaccess file which has some security measurements by having RewriteRules to prevent malformed URL access.</p>
<p>To install this file do the following</p>
<pre>sudo -i
cd /var/www/user
cp htaccess.txt .htaccess
chmod user:www-data .htaccess # Set file permission to be readable by Apache and writable by the UNIX user</pre>
<p>Then we create a .htaccess file which we will place in all folders with Joomla! write access to prevent execution of PHP files in these folders. First we create htaccess.limited file which we use as a template.</p>
<pre>sudo -i
cd /var/www/user
nano htaccess.limited # Open text editor</pre>
<p>Use the following htaccess.limited content</p>
<pre># secure directory by disabling script execution
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI -Indexes</pre>
<p>And put the master template htaccess.limited  to proper places</p>
<pre>cp htaccess.limited media/.htaccess
chown -R user:www-data media/.htaccess 

cp htaccess.limited tmp/.htaccess
chown -R user:www-data tmp/.htaccess 

cp htaccess.limited logs/.htaccess
chown -R user:www-data logs/.htaccess

cp htaccess.limited images/.htaccess
chown -R user:www-data images/.htaccess</pre>
<h2>Start using the site</h2>
<div>Now go to your site with the browser again and Joomla! start page should come up.</div>
<div>Login as administration account you gave in Joomla! browser based installation.</div>
<div>Type URL <em>http://yoursite.com</em> in your browser.</div>
<h2>Setting outgoing email</h2>
<div>This is probably first thing you want to do as Joomla! administrator. You configure the SMTP server which will be used for outgoing email. The server  is usually provided by network operator who provides the internet connection for your server.</div>
<div>Login as Joomla! administrator user.</div>
<div>Go to Site  -&gt; Global Configuration -&gt; Server.</div>
<div>Choose SMTP mail mode.</div>
<div>Enter SMTP details.</div>
<h3>Test outgoing email</h3>
<div>Create a new user with an email address you control The user should receive <em>New User Details</em> email message from the site on the moment the user is created.</div>
<h2>Maintaining file permission</h2>
<div>If you modify or create any files (e.g. upload a new theme) to your server you need to set file permissions for it.</div>
<div>
<ul>
<li>UNIX  user: <em>user (</em>your site username)</li>
<li>UNIX group: <em>www-data</em></li>
</ul>
</div>
<div>To make it possible to set the group ownership with user user you first need to add it to www-data group.</div>
<div>
<pre>sudo usermod -a -G www-data user # Add user to www-data group so that it can set group permissions</pre>
</div>
<div>Then you can fix the permissions for uploaded files (templates and libraries folders assumed)</div>
<pre>sudo -i -u user # Login as your UNIX user
chgrp -R www-data templates libraries # Fix group ownership
chmod -R g+rx libraries templates # Set read access for the group</pre>
<div>This way secure file permissions are fixed after files have been changed. Alternatively, if your secure SFTP program supports setting permissions during the file upload, you can use that option</div>
<p>
<a href="http://blog.mfabrik.com"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></img></a> <a href="http://blog.mfabrik.com">Read our blog</a> <a href="http://twitter.com/mfabrik"> <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> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></img></a> <a href="http://twitter.com/mfabrik">Follow us on Twitter</a> <a href="http://www.linkedin.com/in/ohtis"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/linkedin-24.png"></img></a> <a href="http://www.linkedin.com/in/ohtis">Mikko Ohtamaa on LinkedIn</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2010/05/31/how-to-install-joomla-on-your-ubuntulinux-server-with-basic-security/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Developing and distributing QT applications for Nokia&#8230; not yet!</title>
		<link>http://blog.mfabrik.com/2010/05/04/developing-and-distributing-qt-applications-for-nokia-not-yet/</link>
		<comments>http://blog.mfabrik.com/2010/05/04/developing-and-distributing-qt-applications-for-nokia-not-yet/#comments</comments>
		<pubDate>Tue, 04 May 2010 08:37:54 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[phonegap]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[app store]]></category>
		<category><![CDATA[n8]]></category>
		<category><![CDATA[n900]]></category>
		<category><![CDATA[ovi store]]></category>
		<category><![CDATA[pr1.2]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://blog.mfabrik.com/?p=531</guid>
		<description><![CDATA[This information was posted to Phonegap Google groups also.
Next N900 release (PR1.2) will include QT 4 in the default install. It has been delayed due to various problems observed in the leaked beta.
Also, N8  will be the first device supporting Qt out of the box. It is not shipping yet.
Nokia Qt SDK should allow unified [...]]]></description>
			<content:encoded><![CDATA[<p>This information was posted to Phonegap Google groups also.</p>
<p>Next N900 release (PR1.2) will include QT 4 in the default install. It has been delayed due to various problems observed in the leaked beta.</p>
<p>Also, N8  will be the first device supporting Qt out of the box. It is not shipping yet.</p>
<p>Nokia Qt SDK should allow unified Qt apps for Symbian and Meego:</p>
<ul>
<li><a rel="nofollow" href="http://www.google.com/url?sa=D&amp;q=http://www.forum.nokia.com/Tools_Docs_and_Code/Tools/IDEs/Nokia_Qt_SDK/&amp;usg=AFQjCNFZK2PRjTP5cSrXIxO7ZwfGCVJjXg" target="_blank">http://www.forum.nokia.com/Tools_Docs_and_Code/Tools/IDEs/Nokia_Qt_SDK/</a></li>
<li><a rel="nofollow" href="http://www.google.com/url?sa=D&amp;q=http://conversations.nokia.com/2010/04/27/nokia-rolls-out-qt-sdk-for-unified-mobile-developer-experience/&amp;usg=AFQjCNHM301QWQl8F6GBUVnc_0rJdBhHog" target="_blank">http://conversations.nokia.com/2010/04/27/nokia-rolls-out-qt-sdk-for-&#8230;</a></li>
</ul>
<p>It is not yet possible to deploy Qt apps through OVI store, so targeting third party apps to Nokia Qt is kind of pointless. If you need to develop to Nokia using a web framework, don&#8217;t rely on native QT Webkit, but target to Nokia WRT  instead.</p>
<p>Nokia bought Qt in January 2008. It has taken over two years to ship the first Qt enabled mobile phone. Meanwhile, Apple has released App Store and risen to be the leading smartphone provider with its iPhone&#8230;. talk about slow development and the lack of leadership. So the hype around &#8220;QT will solve everything&#8221; is still just hype&#8230; they still don&#8217;t have nothing solid out there.
<p>
<a href="http://blog.mfabrik.com"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></img></a> <a href="http://blog.mfabrik.com">Read our blog</a> <a href="http://twitter.com/mfabrik"> <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> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></img></a> <a href="http://twitter.com/mfabrik">Follow us on Twitter</a> <a href="http://www.linkedin.com/in/ohtis"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/linkedin-24.png"></img></a> <a href="http://www.linkedin.com/in/ohtis">Mikko Ohtamaa on LinkedIn</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2010/05/04/developing-and-distributing-qt-applications-for-nokia-not-yet/feed/</wfw:commentRss>
		<slash:comments>4</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

 Read our blog   Subscribe mFabrik blog in a reader  Follow us on Twitter  Mikko [...]]]></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>
<a href="http://blog.mfabrik.com"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/mfabrik-24.png"></img></a> <a href="http://blog.mfabrik.com">Read our blog</a> <a href="http://twitter.com/mfabrik"> <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> <img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/twitter-24.png"></img></a> <a href="http://twitter.com/mfabrik">Follow us on Twitter</a> <a href="http://www.linkedin.com/in/ohtis"><img valign="middle"  src="http://blog.mfabrik.com/wp-content/uploads/linkedin-24.png"></img></a> <a href="http://www.linkedin.com/in/ohtis">Mikko Ohtamaa on LinkedIn</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>
	</channel>
</rss>
