<?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>The Selfish Bit</title>
	<atom:link href="http://www.barrysoft.it/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.barrysoft.it/blog</link>
	<description>A blog about my developments (with no constriction of meaning)</description>
	<lastBuildDate>Wed, 18 Aug 2010 10:58:19 +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>Building Symbian Qt 4.6.3 in GnuPoc 1.16 using OpenC/C++ 1.7.5</title>
		<link>http://www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html</link>
		<comments>http://www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html#comments</comments>
		<pubDate>Sun, 15 Aug 2010 16:50:39 +0000</pubDate>
		<dc:creator>Daniele Rapagnani</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[symbian gnupoc qt linux]]></category>

		<guid isPermaLink="false">http://www.barrysoft.it/blog/?p=184</guid>
		<description><![CDATA[How to build Symbian Qt 4.6.3 in GnuPoc 1.16 using OpenC/C++ 1.7.5 under Linux


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I hate when I can&#8217;t do things. I really do, and one of the things I never managed to do is setting up a working Symbian development environment on Linux. I tried with GnuPoc several times without much of a result, so when I stumbled upon the news that Qt was ported to Symbian I really thought that things were going to get brighter. They weren&#8217;t. Well, kind of.</p>
<p>GnuPoc 1.16 was released some days ago adding support for the Qt SDK so I thought I had to give it another try.<br />
To build the Qt SDK we also need OpenC/C++, the latest version of GnuPoc supports version 1.6 of OpenC/C++ and, with my luck, version 1.7.5 of OpenC/C++ was released some days later making the previous 1.6 disappear from the face of the internet. Let&#8217;s see what we can do!</p>
<p>Before going any further you must have a working toolchain for your SDK, read the <strong>README </strong>file in gnupoc-package-1.16/tools if you don&#8217;t know how to do it. When you are set feel free to proceed!</p>
<p>Download <em>OpenC/C++ SDK Plug-In 1.7.5</em>: <a title="Open C/C++ 1.7.5" href="http://www.forum.nokia.com/info/sw.nokia.com/id/91d89929-fb8c-4d66-bea0-227e42df9053/Open_C_SDK_Plug-In.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.forum.nokia.com/info/sw.nokia.com/id/91d89929-fb8c-4d66-bea0-227e42df9053/Open_C_SDK_Plug-In.html?referer=');">s60_open_c_cpp_plug_in_v1_7_en.zip</a></p>
<p>If we try to build the current version using the old script (<strong>install_openc_16_s60</strong> in gnupoc-package-1.16/sdks) we get:</p>
<p><code>./install_openc_16_s60 ../../qt-symbian/s60_open_c_cpp_plug_in_v1_7_en.zip ../../symbian-sdks/s60_31<br />
Archive:  ../../qt-symbian/s60_open_c_cpp_plug_in_v1_7_en.zip<br />
inflating: openc_temp/s60_open_c_cpp_plug_in_v1_7_en/data1.cab<br />
inflating: openc_temp/s60_open_c_cpp_plug_in_v1_7_en/data1.hdr<br />
inflating: openc_temp/s60_open_c_cpp_plug_in_v1_7_en/data2.cab<br />
inflating: openc_temp/s60_open_c_cpp_plug_in_v1_7_en/ISSetup.dll<br />
inflating: openc_temp/s60_open_c_cpp_plug_in_v1_7_en/layout.bin<br />
inflating: openc_temp/s60_open_c_cpp_plug_in_v1_7_en/Nokia_EULA.txt<br />
inflating: openc_temp/s60_open_c_cpp_plug_in_v1_7_en/NOKIA_lgpl.txt<br />
inflating: openc_temp/s60_open_c_cpp_plug_in_v1_7_en/README.txt<br />
inflating: openc_temp/s60_open_c_cpp_plug_in_v1_7_en/setup.exe<br />
inflating: openc_temp/s60_open_c_cpp_plug_in_v1_7_en/setup.ini<br />
inflating: openc_temp/s60_open_c_cpp_plug_in_v1_7_en/setup.inx<br />
inflating: openc_temp/s60_open_c_cpp_plug_in_v1_7_en/setup.isn<br />
inflating: openc_temp/s60_open_c_cpp_plug_in_v1_7_en/_Setup.dll<br />
Failed to open openc_temp/Installer/data1.cab as an InstallShield Cabinet File<br />
Removing temporary files...</code></p>
<p>As you can see the script is trying to unshield the <strong>data1.cab</strong> but it is looking for it in the wrong place, that is:</p>
<p style="padding-left: 30px;"><strong>openc_temp/Installer/data1.cab</strong></p>
<p>instead of:</p>
<p style="padding-left: 30px;"><strong>openc_temp/s60_open_c_cpp_plug_in_v1_7_en/data1.cab</strong></p>
<p>so we need to correct this by editing lines 25,31,37,45 of <strong>install_openc_16_s60</strong> replacing:</p>
<pre class="brush: bash;">$TEMP/Installer/data1.cab</pre>
<p>with:</p>
<pre class="brush: bash;">$TEMP/s60_open_c_cpp_plug_in_v1_7_en/data1.cab</pre>
<p>Now the script should successfully extract the needed files from the installer, but this is not enough, in fact it dies again with:</p>
<p><code>openc_temp/opencepoc32_3.1/epoc32: No such file or directory</code></p>
<p>Why? Well the script creates a temporary directory that is removed upon completion (or error) where all the files are extracted and is looking for the directory  <strong>openc_temp/opencepoc32_3.1/epoc32</strong> but the real directory is located at <strong>openc_temp/opencepoc32_3.1/EPOC32</strong>. I think the script tries to rename all files to lowercase by calling the <em>lowercase</em> perl script on the path, but for some strange reason it isn&#8217;t doing the job right so we need to resort to the oldest of hacks: manual editing!<br />
To do so we need to prevent the script from deleting the temporary directory when it fails so that we can correct the directory name and re-execute the installer script. To achieve this simply comment out line 17 of <strong>install_openc_16_s60</strong><em>:</em></p>
<p>from:</p>
<pre class="brush: bash;">trap &quot;echo Removing temporary files...; rm -rf $TEMP&quot; EXIT</pre>
<p>to:</p>
<pre class="brush: bash;">#trap &quot;echo Removing temporary files...; rm -rf $TEMP&quot; EXIT</pre>
<p>When you have done this execute the script and when it dies manually browse to the location specified and rename the <strong>EPOC32</strong><em> </em>directory to <strong>epoc32</strong> and re-execute the script (if it asks if you want to replace existing files select [N]one).</p>
<p>The error should popup 2 or 3 times for different paths and you should repeat the same steps every time.</p>
<p>This should be enough to get OpenC/C++ 1.7.5 installed in your GnuPoc environment!</p>
<p>Now download<em> Qt libraries 4.6.3 for Symbian (210 MB)</em>: <a title="Qt libraries 4.6.3 for Symbian (210 MB)" href="http://get.qt.nokia.com/qt/source/qt-symbian-opensource-4.6.3.exe" onclick="pageTracker._trackPageview('/outgoing/get.qt.nokia.com/qt/source/qt-symbian-opensource-4.6.3.exe?referer=');">qt-symbian-opensource-4.6.3.exe</a></p>
<p>Next you simply need to follow the instructions in<strong> READEME.qt</strong> (found in gnupoc-package-1.16/sdks) by running:</p>
<p><code>./install_qt qt-symbian-opensource-4.6.3.exe -qt ~/symbian-sdks/qt_4.6.3 -sdk ~/symbian-sdks/s60_31</code></p>
<p>For me it all went ok except that the script failed near the end (line 92:1) with a syntax error (maybe some issues with my sh version?) so I had to manually run:</p>
<p><code>../tools/compile_qt_cross_tools ~/symbian-sdks/qt_4.6.3</code></p>
<p>This are quick and dirty hacks indeed, but they seem to work at the moment.<br />
Let&#8217;s hope for a GnuPoc bugfix soon!</p>
<p>I really don&#8217;t understand why Nokia doesn&#8217;t provide an official SDK  for linux. I know there are porting costs, but isn&#8217;t it always the case? I think this is even more absurd now that they released a Qt SDK for linux without an official toolchain! Do they seriously think that the remote compiler service can be a practical solution?<br />
Once again, even if I appreciate the small steps toward the linux community, I&#8217;m left with the old impression that Nokia&#8217;s way of supporting development for their platform is messy and that it suffers from severe lack of organization.<br />
I think they don&#8217;t understand (unlike Apple) that the success of their platform is heavily linked to the applications supporting it. They can do all the Ovi Store they want but without a proper set of development tools it will always be populated only by huge company developed apps (read Skype or Opera Mini), and I don&#8217;t know you, but I don&#8217;t think this is the real purpose of an app store.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html&amp;title=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC%2FC%2B%2B+1.7.5" rel="nofollow" class="external" title="Share this on del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_//www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html_amp_title=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC_2FC_2B_2B+1.7.5&amp;referer=');">Share this on del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html&amp;title=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC%2FC%2B%2B+1.7.5" rel="nofollow" class="external" title="Digg this!" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_//www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html_amp_title=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC_2FC_2B_2B+1.7.5&amp;referer=');">Digg this!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html&amp;title=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC%2FC%2B%2B+1.7.5&amp;desc=How%20to%20build%20Symbian%20Qt%204.6.3%20in%20GnuPoc%201.16%20using%20OpenC%2FC%2B%2B%201.7.5%20under%20Linux" rel="nofollow" class="external" title="Post this on Diigo" onclick="pageTracker._trackPageview('/outgoing/www.diigo.com/post?url=http_//www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html_amp_title=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC_2FC_2B_2B+1.7.5_amp_desc=How_20to_20build_20Symbian_20Qt_204.6.3_20in_20GnuPoc_201.16_20using_20OpenC_2FC_2B_2B_201.7.5_20under_20Linux&amp;referer=');">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz" onclick="pageTracker._trackPageview('/outgoing/www.google.com/buzz/post?url=http_//www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html_amp_imageurl=&amp;referer=');">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html&amp;bm_description=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC%2FC%2B%2B+1.7.5&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Add this to Mister Wong" onclick="pageTracker._trackPageview('/outgoing/www.mister-wong.com/addurl/?bm_url=http_//www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html_amp_bm_description=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC_2FC_2B_2B+1.7.5_amp_plugin=sexybookmarks&amp;referer=');">Add this to Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html&amp;title=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC%2FC%2B%2B+1.7.5" rel="nofollow" class="external" title="Share this on Mixx" onclick="pageTracker._trackPageview('/outgoing/www.mixx.com/submit?page_url=http_//www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html_amp_title=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC_2FC_2B_2B+1.7.5&amp;referer=');">Share this on Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html&amp;title=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC%2FC%2B%2B+1.7.5" rel="nofollow" class="external" title="Share this on Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_//www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html_amp_title=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC_2FC_2B_2B+1.7.5&amp;referer=');">Share this on Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html&amp;title=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC%2FC%2B%2B+1.7.5" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_//www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html_amp_title=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC_2FC_2B_2B+1.7.5&amp;referer=');">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html" rel="nofollow" class="external" title="Share this on Technorati" onclick="pageTracker._trackPageview('/outgoing/technorati.com/faves?add=http_//www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html&amp;referer=');">Share this on Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC%2FC%2B%2B+1.7.5+-+http://b2l.me/ahhrwz&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Building+Symbian+Qt+4.6.3+in+GnuPoc+1.16+using+OpenC_2FC_2B_2B+1.7.5+-+http_//b2l.me/ahhrwz_amp_source=shareaholic&amp;referer=');">Tweet This!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>



<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.barrysoft.it/blog/building-symbian-qt-463-gnupoc-116-opencc-175.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Using the internal PIC&#8217;s AUSART to send MIDI data</title>
		<link>http://www.barrysoft.it/blog/midi-with-pic-ausart.html</link>
		<comments>http://www.barrysoft.it/blog/midi-with-pic-ausart.html#comments</comments>
		<pubDate>Tue, 29 Jun 2010 23:32:31 +0000</pubDate>
		<dc:creator>Daniele Rapagnani</dc:creator>
				<category><![CDATA[Digital Electronics]]></category>

		<guid isPermaLink="false">http://www.barrysoft.it/blog/?p=145</guid>
		<description><![CDATA[Introduction
I&#8217;ve recently introduced myself to the world of microcontrollers (μC for short, if you feel cool enough),  I&#8217;ve always found the world of digital electronics quite fascinating, being very fond of the DIY way of thinking, but I only recently decided to get my hands dirt with it and bought some PICs from Microchip [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<h4>Introduction</h4>
<p>I&#8217;ve recently introduced myself to the world of microcontrollers (μC for short, if you feel cool enough),  I&#8217;ve always found the world of digital electronics quite fascinating, being very fond of the DIY way of thinking, but I only recently decided to get my hands dirt with it and bought some PICs from <a href="http://www.microchip.com/" onclick="pageTracker._trackPageview('/outgoing/www.microchip.com/?referer=');">Microchip</a> and a PICKit 3 Debug Express. As a musician, the microcontrollers&#8217; world opened quite a number of interesting possibilities. If you consider my undying need for a good MIDI controller and add to that the enjoyment I get from embarking myself in projects way out of my league, the result is obvious: build a MIDI controller!</p>
<h4>The internal AUSART</h4>
<p>The purpose of this article is to explain how to use the PIC&#8217;s internal UART to send MIDI messages to a MIDI enabled device. Almost every recent PIC microcontroller has an internal AUSART (Addressable Universal  Synchronous  Asynchronous Receiver  Transmitter) that makes the task of implementing the MIDI protocol quite trivial. Without getting into details (saving me the embarrassment of explicitly saying I don&#8217;t know them), an USART is a device that converts streams of serial data to parallel data (or vice versa) using either an asynchronous or synchronous communication. In case of an asynchronous communication, the two communicating devices must agree beforehand on the  transmission speed and start and stop bits are required to mark any data transfer. The start bit must be a <em>space</em> (logical zero, low) and the stop bit a <em>mark</em> (logical one, high). In the attempt to preserve data integrity a parity bit can be sent before the stop bit. If the parity bit is present, the two devices must agree on the format before they start exchanging data: the parity bit can be set whether if the number of logical ones in the data&#8217;s bits is even or if it is odd. The communication speed is expressed in <em>baud</em>, that is a synonymous for symbols per second. In our case 1 <em>symbol = </em>1 <em>bit</em>, so <em>1 baud =  1 bit/s</em>. The data is sent from the least-significant bit to the most-significant one.</p>
<h4>The MIDI protocol (a.k.a The Real Stuff)</h4>
<p>By now, if you really read through this point without skipping (in which case, shame on you!), you&#8217;ll start to wonder what all this have to do with our MIDI controller, and the need to turn some knobs is probably starting to get uncontrollable, so hear this: the MIDI protocol exchanges data using serial communication, each packet is made of a start bit (a space) followed by eight data bits, least-significant bit first, and finally by a stop bit (a mark). The data transfer and reception happens asynchronously at 31250 baud, rings any bell?</p>
<p>All we have to do now is understand how to configure and use the internal AUSART of our PIC (in my case a 16F88) in the way I just described.</p>
<p>Reading the data sheet for the PIC16F88 (chapter 11.2.1  AUSART ASYNCHRONOUS TRANSMITTER), the steps for setting up the AUSART for asynchronous transmission are listed:</p>
<ol>
<li>Setup 	the Baud Rate Generator (BRG)</li>
<li>Setup 	the asynchronous serial port by clearing bit SYNC and setting SPEN</li>
<li>Set 	bit TXIE to enable interrupts</li>
<li>Set 	bit TX9 for 9-bit transmission (generally used for the 	aforementioned parity check)</li>
<li>Set 	bit TXEN (that will set TXIF also) to enable the transmission</li>
<li>If 	TX9 is enabled, load the 9<sup>th</sup> bit in TX9D</li>
<li>Load 	the 8-bit data in the TXREG register (this action starts the 	transmission)</li>
<li>Ensure 	the GIE and PEIE bits are set in the INTCON register if interrupts 	are used</li>
</ol>
<p>This should all be pretty clear if you have some experience in developing on the PIC microcontroller. What remains to be further explained is the first step where a Baud Rate Generator is mentioned: the AUSART has an internal 8-bit timer that takes care of sending our data at the speed we need. To configure this timer we need to act upon the SPBRG register and the BRGH bit, but because of the 8-bit limitation of the BRG timer, and of the high values of the most common baud rates, setting up the BRG is not as straightforward as you may think. The data sheet informs us that the baud rate that will be used to transmit data is calculated using the following formula (Table 11-1):</p>
<p style="text-align: center;"><a href="http://www.codecogs.com/eqnedit.php?latex=\mathbf{Baud Rate} = \frac{FOSC}{C \cdot (SPBRG@plus;1)}" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.codecogs.com/eqnedit.php?latex=_mathbf_Baud_Rate_=_frac_FOSC_C_cdot_SPBRG_plus_1&amp;referer=');"><img class="aligncenter" style="margin-top: 20px; margin-bottom: 20px;" title="\mathbf{Baud Rate} = \frac{FOSC}{C \cdot (SPBRG+1)}" src="http://latex.codecogs.com/gif.latex?%5Cmathbf{Baud Rate} = %5Cfrac{FOSC}{C %5Ccdot (SPBRG+1)}" alt="" width="259" height="43" /></a></p>
<p style="text-align: left;">Where:</p>
<ul>
<li><strong>FOSC</strong> is the speed of the PIC&#8217;s oscillator</li>
<li><strong>SPBRG</strong> is the value of the 8-bit (0 – 255) register</li>
<li><strong>C</strong> is a constant and its value is defined by the following table:</li>
</ul>
<table cellspacing="0" cellpadding="10" width="100%">
<col width="54"></col>
<tbody>
<tr valign="top">
<td style="background-color: #cccccc;" width="79%"><strong>Condition</strong></td>
<td style="background-color: #cccccc;"><strong>Value of C</strong></td>
</tr>
<tr valign="top">
<td style="border: 1px solid #cccccc; padding: 5px;" width="79%">Synchronous transmission with the BRGH bit not set</td>
<td style="border: 1px solid #cccccc; padding: 5px;" width="21%">4</td>
</tr>
<tr valign="top">
<td style="border: 1px solid #cccccc; padding: 5px;" width="79%">Asynchronous transmission with the BRGH bit not set</td>
<td style="border: 1px solid #cccccc; padding: 5px;" width="21%">64</td>
</tr>
<tr valign="top">
<td style="border: 1px solid #cccccc; padding: 5px;" width="79%">Asynchronous transmission with the BRGH bit <span style="text-decoration: underline;">set</span></td>
<td style="border: 1px solid #cccccc; padding: 5px;" width="21%">16</td>
</tr>
</tbody>
</table>
<p>So, doing some math (probably wrong!), if we know what&#8217;s the baud rate we want, we can calculate our SPBRG value using the following:</p>
<p style="text-align: left;"><a href="http://www.codecogs.com/eqnedit.php?latex=\mathbf {SPBRG} = \frac {FOSC} {C \cdot Baud Rate} - 1" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.codecogs.com/eqnedit.php?latex=_mathbf_SPBRG_=_frac_FOSC_C_cdot_Baud_Rate_-_1&amp;referer=');"><img class="aligncenter" style="margin-top: 20px; margin-bottom: 20px;" title="\mathbf {SPBRG} = \frac {FOSC} {C \cdot Baud Rate} - 1" src="http://latex.codecogs.com/gif.latex?%5Cmathbf {SPBRG} = %5Cfrac {FOSC} {C %5Ccdot Baud Rate} - 1" alt="" width="239" height="39" /></a><br />
The MIDI protocol operates at 31250 baud so, assuming that we are using the internal oscillator set at 4Mhz and that we are not using an high baud rate (BRGH = 0), the SPBRG value we need would be:</p>
<p style="text-align: center;"><a href="http://www.codecogs.com/eqnedit.php?latex=\mathbf {SPBRG} = \frac {4000000 Hz} {64 \cdot 31250 baud} - 1 = \frac {4000000 Hz} {2000000 baud} - 1 = 1 \frac {Hz} {baud}" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.codecogs.com/eqnedit.php?latex=_mathbf_SPBRG_=_frac_4000000_Hz_64_cdot_31250_baud_-_1_=_frac_4000000_Hz_2000000_baud_-_1_=_1_frac_Hz_baud&amp;referer=');"><img class="aligncenter" style="margin-top: 20px; margin-bottom: 20px;" title="\mathbf {SPBRG} = \frac {4000000 Hz} {64 \cdot 31250 baud} - 1 = \frac {4000000 Hz} {2000000 baud} - 1 = 1 \frac {Hz} {baud}" src="http://latex.codecogs.com/gif.latex?%5Cmathbf {SPBRG} = %5Cfrac {4000000 Hz} {64 %5Ccdot 31250 baud} - 1 = %5Cfrac {4000000 Hz} {2000000 baud} - 1 = 1 %5Cfrac {Hz} {baud}" alt="" width="472" height="40" /></a></p>
<p>So let&#8217;s recap:</p>
<table cellspacing="0" cellpadding="4" width="100%">
<col width="192"></col>
<col width="64"></col>
<tbody>
<tr valign="top">
<td style="background-color: #cccccc;" width="75%"><strong>MIDI specs</strong></td>
<td style="background-color: #cccccc;" width="25%"><strong>AUSART config.</strong></td>
</tr>
<tr valign="top">
<td style="border: 1px solid #cccccc; padding: 5px;" width="75%">To send MIDI data 			we need to set the transmission speed to 31250 baud</td>
<td style="border: 1px solid #cccccc; padding: 5px;" width="25%">SPBRG = 1<br />
(at 4Mhz)<br />
BRGH = 0</td>
</tr>
<tr valign="top">
<td style="border: 1px solid #cccccc; padding: 5px;" width="75%">We need to setup asynchronous connection</td>
<td style="border: 1px solid #cccccc; padding: 5px;" width="25%">SYNC = 0</td>
</tr>
<tr valign="top">
<td style="border: 1px solid #cccccc; padding: 5px;" width="75%">We need to enable serial output</td>
<td style="border: 1px solid #cccccc; padding: 5px;" width="25%">SPEN = 1</td>
</tr>
<tr valign="top">
<td style="border: 1px solid #cccccc; padding: 5px;" width="75%">MIDI doesn&#8217;t use parity so we want 8-bit data</td>
<td style="border: 1px solid #cccccc; padding: 5px;" width="25%">TX9 = 0</td>
</tr>
<tr valign="top">
<td style="border: 1px solid #cccccc; padding: 5px;" width="75%">We need to enable the AUSART out to start the 			transmission</td>
<td style="border: 1px solid #cccccc; padding: 5px;" width="25%">TXEN = 1</td>
</tr>
</tbody>
</table>
<p>This is all we need to get the internal AUSART to send MIDI data, just put the MIDI byte to send in the TXREG and busy wait (or if you want, use interrupts) for TXIF to clear and you are done!</p>
<p>TXIF will be set if the AUSART is busy sending data and can&#8217;t accept new data in the output buffer so you have to wait until it clears to proceed.</p>
<h4>MIDI messages overview</h4>
<p>If you don&#8217;t know how MIDI messages works I&#8217;ll give a brief explanation: most MIDI messages are composed of three bytes, the first byte is called the <em>Status Byte</em> and it is used to specify the kind of action you want to be performed. The Status Byte is OR-ed with the channel you want the message to be received on, so for each status byte you really have one nibble (4 bits) for the actual “action code” and the other nibble for the channel, leading to 16 (0xF) functions and 16 (0xF) channels (as you&#8217;ll probably already know!). The meaning of the following one or two bytes depends on the value of the most significant 4 bits of the Status Byte (what I called action code).</p>
<p>For example to send a Note On message for note C4 on channel 6 with a velocity of 80 you would send:</p>
<ul>
<li><strong>Status 	Byte</strong> = 0&#215;90 (Note On) OR 	0&#215;6 (Channel) = 0&#215;96</li>
<li><strong>Byte 	1</strong> = 0&#215;3C (60 is middle C 	or C4)</li>
<li><strong>Byte 	2</strong> = 0&#215;50 (80, the 	velocity)</li>
</ul>
<p>You can take a look at the following websites for further informations on the available MIDI messages:</p>
<ul>
<li><a href="http://www.opl4.nl/aboutmidi.html" onclick="pageTracker._trackPageview('/outgoing/www.opl4.nl/aboutmidi.html?referer=');">http://www.opl4.nl/aboutmidi.html</a></li>
<li><a href="http://www.midi.org/techspecs/midimessages.php" onclick="pageTracker._trackPageview('/outgoing/www.midi.org/techspecs/midimessages.php?referer=');">http://www.midi.org/techspecs/midimessages.php</a></li>
<li><a href="http://www.oktopus.hu/imgs/MANAGED/Hangtechnikai_tudastar/The_MIDI_Specification.pdf" onclick="pageTracker._trackPageview('/outgoing/www.oktopus.hu/imgs/MANAGED/Hangtechnikai_tudastar/The_MIDI_Specification.pdf?referer=');">http://www.oktopus.hu/imgs/MANAGED/Hangtechnikai_tudastar/The_MIDI_Specification.pdf</a></li>
</ul>
<p>Or, if you don&#8217;t really know what to do with your money and/or you have an unusual fetish for printed documents, you can buy (yeah! BUY!) the official specification document from <a href="http://www.midi.org/store/docsales.php" onclick="pageTracker._trackPageview('/outgoing/www.midi.org/store/docsales.php?referer=');">http://www.midi.org/store/docsales.php</a> for only 60$ (or if you are here in Italy 88$)</p>
<p>If you have come so far, it is now time to test your hard work! To do so you should connect the 5<sup>th</sup> pin of your female 5-pin DIN connector to the Tx pin of your PIC (on my PIC16F88 it is RB5, consult the Pin Diagram section of the data sheet for you PIC to find out what&#8217;s the correspondence with Tx for your model) and the 4<sup>th</sup> pin on your +5v power source, both through 220 Ohm load resistors, and you are set to go!</p>
<h4>What to do next, now that you are cool</h4>
<p>Once you are able to send MIDI data with your microcontroller, the next step can be connecting a switch and mapping it to a specific MIDI message, or using the internal ADC converter of your PIC (if you are in luck, it has one) to send the value of a trimmer (or pot) using MIDI&#8217;s Controller Change messages.</p>
<h4>Source code and Links</h4>
<p>Anyone interested can download the little library I made to send basic MIDI messages with my PIC16F88 (but should work for others too) which I&#8217;m releasing under GPL. It was written for the CC5x compiler, if you don&#8217;t have it,  you can get a student version <a href="http://www.bknd.com/cc5x/download.shtml" onclick="pageTracker._trackPageview('/outgoing/www.bknd.com/cc5x/download.shtml?referer=');">here</a> that has no limitations on the size of the compiled code (only on the optimization level), it also directly outputs compiled code to ASM (MPASM), so if you don&#8217;t want to use the CC5x compiler, but you like my library (what? Why?), you can simply compile it to ASM and use it with your favorite one.</p>
<a class="downloadlink" href="http://www.barrysoft.it/blog/wp-content/plugins/download-monitor/download.php?id=8" title="Version0.1 downloaded 34 times" >PIC Simple MIDI Library for CC5x (34)</a>
<p>Well, this is it! Thanks for reading and if you are getting into DIY MIDI controllers check out this nice websites:</p>
<ul>
<li><a href="http://www.audiomulch.com/midipic/" onclick="pageTracker._trackPageview('/outgoing/www.audiomulch.com/midipic/?referer=');">http://www.audiomulch.com/midipic/</a>Has 	lots of informations on how to use a Basic Stamp or PIC to 	send/receive MIDI data and interface different type of hardware to 	the microcontroller.</li>
<li><a href="http://www.ucapps.de/" onclick="pageTracker._trackPageview('/outgoing/www.ucapps.de/?referer=');">http://www.ucapps.de/</a><br />
A 	fantastic, huge, project  to build your MIDI controller/sequencer 	with a modular approach. It is also the home of the MIOS 	operating system for different type of microcontrollers, a robust  	operating system developed to be used on hardware MIDI applications.</li>
</ul>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.barrysoft.it/blog/midi-with-pic-ausart.html/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.barrysoft.it/blog/midi-with-pic-ausart.html&amp;title=Using+the+internal+PIC%27s+AUSART+to+send+MIDI+data" rel="nofollow" class="external" title="Share this on del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_//www.barrysoft.it/blog/midi-with-pic-ausart.html_amp_title=Using+the+internal+PIC_27s+AUSART+to+send+MIDI+data&amp;referer=');">Share this on del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.barrysoft.it/blog/midi-with-pic-ausart.html&amp;title=Using+the+internal+PIC%27s+AUSART+to+send+MIDI+data" rel="nofollow" class="external" title="Digg this!" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_//www.barrysoft.it/blog/midi-with-pic-ausart.html_amp_title=Using+the+internal+PIC_27s+AUSART+to+send+MIDI+data&amp;referer=');">Digg this!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.barrysoft.it/blog/midi-with-pic-ausart.html&amp;title=Using+the+internal+PIC%27s+AUSART+to+send+MIDI+data&amp;desc=Introduction%0D%0AI%27ve%20recently%20introduced%20myself%20to%20the%20world%20of%20microcontrollers%20%28%CE%BCC%20for%20short%2C%20if%20you%20feel%20cool%20enough%29%2C%20%20I%27ve%20always%20found%20the%20world%20of%20digital%20electronics%20quite%20fascinating%2C%20being%20very%20fond%20of%20the%20DIY%20way%20of%20thinking%2C%20but%20I%20only%20recently%20decided%20to%20get%20my%20hands%20dirt%20with%20it%20and%20bou" rel="nofollow" class="external" title="Post this on Diigo" onclick="pageTracker._trackPageview('/outgoing/www.diigo.com/post?url=http_//www.barrysoft.it/blog/midi-with-pic-ausart.html_amp_title=Using+the+internal+PIC_27s+AUSART+to+send+MIDI+data_amp_desc=Introduction_0D_0AI_27ve_20recently_20introduced_20myself_20to_20the_20world_20of_20microcontrollers_20_28_CE_BCC_20for_20short_2C_20if_20you_20feel_20cool_20enough_29_2C_20_20I_27ve_20always_20found_20the_20world_20of_20digital_20electronics_20quite_20fascinating_2C_20being_20very_20fond_20of_20the_20DIY_20way_20of_20thinking_2C_20but_20I_20only_20recently_20decided_20to_20get_20my_20hands_20dirt_20with_20it_20and_20bou&amp;referer=');">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.barrysoft.it/blog/midi-with-pic-ausart.html&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz" onclick="pageTracker._trackPageview('/outgoing/www.google.com/buzz/post?url=http_//www.barrysoft.it/blog/midi-with-pic-ausart.html_amp_imageurl=&amp;referer=');">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.barrysoft.it/blog/midi-with-pic-ausart.html&amp;bm_description=Using+the+internal+PIC%27s+AUSART+to+send+MIDI+data&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Add this to Mister Wong" onclick="pageTracker._trackPageview('/outgoing/www.mister-wong.com/addurl/?bm_url=http_//www.barrysoft.it/blog/midi-with-pic-ausart.html_amp_bm_description=Using+the+internal+PIC_27s+AUSART+to+send+MIDI+data_amp_plugin=sexybookmarks&amp;referer=');">Add this to Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.barrysoft.it/blog/midi-with-pic-ausart.html&amp;title=Using+the+internal+PIC%27s+AUSART+to+send+MIDI+data" rel="nofollow" class="external" title="Share this on Mixx" onclick="pageTracker._trackPageview('/outgoing/www.mixx.com/submit?page_url=http_//www.barrysoft.it/blog/midi-with-pic-ausart.html_amp_title=Using+the+internal+PIC_27s+AUSART+to+send+MIDI+data&amp;referer=');">Share this on Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.barrysoft.it/blog/midi-with-pic-ausart.html&amp;title=Using+the+internal+PIC%27s+AUSART+to+send+MIDI+data" rel="nofollow" class="external" title="Share this on Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_//www.barrysoft.it/blog/midi-with-pic-ausart.html_amp_title=Using+the+internal+PIC_27s+AUSART+to+send+MIDI+data&amp;referer=');">Share this on Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.barrysoft.it/blog/midi-with-pic-ausart.html&amp;title=Using+the+internal+PIC%27s+AUSART+to+send+MIDI+data" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_//www.barrysoft.it/blog/midi-with-pic-ausart.html_amp_title=Using+the+internal+PIC_27s+AUSART+to+send+MIDI+data&amp;referer=');">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.barrysoft.it/blog/midi-with-pic-ausart.html" rel="nofollow" class="external" title="Share this on Technorati" onclick="pageTracker._trackPageview('/outgoing/technorati.com/faves?add=http_//www.barrysoft.it/blog/midi-with-pic-ausart.html&amp;referer=');">Share this on Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Using+the+internal+PIC%27s+AUSART+to+send+MIDI+data+-+http://b2l.me/7nsbc&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Using+the+internal+PIC_27s+AUSART+to+send+MIDI+data+-+http_//b2l.me/7nsbc_amp_source=shareaholic&amp;referer=');">Tweet This!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>



<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.barrysoft.it/blog/midi-with-pic-ausart.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A shell script to automate the workspace setup process</title>
		<link>http://www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html</link>
		<comments>http://www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html#comments</comments>
		<pubDate>Fri, 25 Jun 2010 02:59:00 +0000</pubDate>
		<dc:creator>Daniele Rapagnani</dc:creator>
				<category><![CDATA[Code Snippets]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.barrysoft.it/blog/?p=122</guid>
		<description><![CDATA[Automatize the process of creating a clean environment for you project, including version control with SVN, project and issue management with Trac and Apache.


No related posts.]]></description>
			<content:encoded><![CDATA[<p>I usually hate doing repetitive tasks, but I know by now that this is a way of thinking that can easly lead to infinite recursion, as the definition of &#8220;repetitive task&#8221; can be very vague sometimes. Despite that, I do love wasting my time when there are pressing things to do!</p>
<p>This bash script attempts to setup a clean environment for your new project doing the following things:</p>
<ol>
<li>SVN repository setup in <em>/var/svn/repos</em> (by default)</li>
<li>Trac environment setup <em>/var/www/trac</em> (by default)</li>
<li>Setup of a password-protected virtual host in Apache linked to location /trac</li>
</ol>
<p>It uses zenity to graphically interact with the user (so GNOME only, sorry!). Every step in the setup process, except for the SVN repository setup, can be skipped at runtime and default paths can be changed by editing the script source.</p>
<p>I&#8217;m releasing this script under the MIT license, before downloading keep in mind that I made this for my personal use and so I haven&#8217;t tested it with other configurations except for mine, so don&#8217;t blame me if it blows up your environment!<br />
If it did not, I&#8217;m glad it spared you some work!</p>
<p>To run open your favourite terminal application and <code>chmod +x</code> the script file, than type:</p>
<p style="padding-left: 30px;">
<pre class="brush: bash;">./setwspace.sh</pre>
<p><em>Download: </em><br />
<a class="downloadlink" href="http://www.barrysoft.it/blog/wp-content/plugins/download-monitor/download.php?id=7" title="Version0.1 downloaded 23 times" >Set Workspace Script (23)</a></p>
<div id="attachment_131" class="wp-caption alignnone" style="width: 160px"><a href="http://www.barrysoft.it/blog/wp-content/uploads/2010/06/Screenshot-Set-Workspace.png"><img class="size-thumbnail wp-image-131" title="Screenshot-Set Workspace" src="http://www.barrysoft.it/blog/wp-content/uploads/2010/06/Screenshot-Set-Workspace-150x126.png" alt="A Screenshot from the script" width="150" height="126" /></a><p class="wp-caption-text">The script in action</p></div>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html&amp;title=A+shell+script+to+automate+the+workspace+setup+process" rel="nofollow" class="external" title="Share this on del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_//www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html_amp_title=A+shell+script+to+automate+the+workspace+setup+process&amp;referer=');">Share this on del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html&amp;title=A+shell+script+to+automate+the+workspace+setup+process" rel="nofollow" class="external" title="Digg this!" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_//www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html_amp_title=A+shell+script+to+automate+the+workspace+setup+process&amp;referer=');">Digg this!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html&amp;title=A+shell+script+to+automate+the+workspace+setup+process&amp;desc=Automatize%20the%20process%20of%20creating%20a%20clean%20environment%20for%20you%20project%2C%20including%20version%20control%20with%20SVN%2C%20project%20and%20issue%20management%20with%20Trac%20and%20Apache." rel="nofollow" class="external" title="Post this on Diigo" onclick="pageTracker._trackPageview('/outgoing/www.diigo.com/post?url=http_//www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html_amp_title=A+shell+script+to+automate+the+workspace+setup+process_amp_desc=Automatize_20the_20process_20of_20creating_20a_20clean_20environment_20for_20you_20project_2C_20including_20version_20control_20with_20SVN_2C_20project_20and_20issue_20management_20with_20Trac_20and_20Apache.&amp;referer=');">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz" onclick="pageTracker._trackPageview('/outgoing/www.google.com/buzz/post?url=http_//www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html_amp_imageurl=&amp;referer=');">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html&amp;bm_description=A+shell+script+to+automate+the+workspace+setup+process&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Add this to Mister Wong" onclick="pageTracker._trackPageview('/outgoing/www.mister-wong.com/addurl/?bm_url=http_//www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html_amp_bm_description=A+shell+script+to+automate+the+workspace+setup+process_amp_plugin=sexybookmarks&amp;referer=');">Add this to Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html&amp;title=A+shell+script+to+automate+the+workspace+setup+process" rel="nofollow" class="external" title="Share this on Mixx" onclick="pageTracker._trackPageview('/outgoing/www.mixx.com/submit?page_url=http_//www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html_amp_title=A+shell+script+to+automate+the+workspace+setup+process&amp;referer=');">Share this on Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html&amp;title=A+shell+script+to+automate+the+workspace+setup+process" rel="nofollow" class="external" title="Share this on Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_//www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html_amp_title=A+shell+script+to+automate+the+workspace+setup+process&amp;referer=');">Share this on Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html&amp;title=A+shell+script+to+automate+the+workspace+setup+process" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_//www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html_amp_title=A+shell+script+to+automate+the+workspace+setup+process&amp;referer=');">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html" rel="nofollow" class="external" title="Share this on Technorati" onclick="pageTracker._trackPageview('/outgoing/technorati.com/faves?add=http_//www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html&amp;referer=');">Share this on Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=A+shell+script+to+automate+the+workspace+setup+process+-+http://b2l.me/6fezf&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=A+shell+script+to+automate+the+workspace+setup+process+-+http_//b2l.me/6fezf_amp_source=shareaholic&amp;referer=');">Tweet This!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>



<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.barrysoft.it/blog/shell-script-automate-workspace-setup-process.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welcome!</title>
		<link>http://www.barrysoft.it/blog/welcome.html</link>
		<comments>http://www.barrysoft.it/blog/welcome.html#comments</comments>
		<pubDate>Sat, 12 Jun 2010 03:27:25 +0000</pubDate>
		<dc:creator>Daniele Rapagnani</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.barrysoft.it/blog/?p=71</guid>
		<description><![CDATA[Hi and welcome to my blog!
The BarrySoft website needed a big restyling, so I took the chance to add my personal noise to the information world with this blog, that I hope will allow me to share with you some of my works as well as keeping me motivated to carry on those that are [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>Hi and welcome to my blog!</p>
<p>The BarrySoft website needed a big restyling, so I took the chance to add my personal noise to the information world with this blog, that I hope will allow me to share with you some of my works as well as keeping me motivated to carry on those that are not yet finished.</p>
<p>I also think, that exchanging opinions is one of the greatest use of the internet, so don&#8217;t hesitate to <a href="contacts">contact</a> me if you feel to!</p>
<p>While you are here I may suggest you to:</p>
<ul>
<li>Take a look at my <strong><a href="ports">Ports</a></strong>, including my Marathon AlephOne port for the PSP</li>
<li>Check out the little applications I made in the<strong> <a href="software">Software</a></strong> page</li>
</ul>
<p>Enjoy your stay in this memetic-underdog blog!</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.barrysoft.it/blog/welcome.html/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.barrysoft.it/blog/welcome.html&amp;title=Welcome%21" rel="nofollow" class="external" title="Share this on del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_//www.barrysoft.it/blog/welcome.html_amp_title=Welcome_21&amp;referer=');">Share this on del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.barrysoft.it/blog/welcome.html&amp;title=Welcome%21" rel="nofollow" class="external" title="Digg this!" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_//www.barrysoft.it/blog/welcome.html_amp_title=Welcome_21&amp;referer=');">Digg this!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.barrysoft.it/blog/welcome.html&amp;title=Welcome%21&amp;desc=Hi%20and%20welcome%20to%20my%20blog%21%0D%0A%0D%0AThe%20BarrySoft%20website%20needed%20a%20big%20restyling%2C%20so%20I%20took%20the%20chance%20to%20add%20my%20personal%20noise%20to%20the%20information%20world%20with%20this%20blog%2C%20that%20I%20hope%20will%20allow%20me%20to%20share%20with%20you%20some%20of%20my%20works%20as%20well%20as%20keeping%20me%20motivated%20to%20carry%20on%20those%20that%20are%20not%20yet%20finished." rel="nofollow" class="external" title="Post this on Diigo" onclick="pageTracker._trackPageview('/outgoing/www.diigo.com/post?url=http_//www.barrysoft.it/blog/welcome.html_amp_title=Welcome_21_amp_desc=Hi_20and_20welcome_20to_20my_20blog_21_0D_0A_0D_0AThe_20BarrySoft_20website_20needed_20a_20big_20restyling_2C_20so_20I_20took_20the_20chance_20to_20add_20my_20personal_20noise_20to_20the_20information_20world_20with_20this_20blog_2C_20that_20I_20hope_20will_20allow_20me_20to_20share_20with_20you_20some_20of_20my_20works_20as_20well_20as_20keeping_20me_20motivated_20to_20carry_20on_20those_20that_20are_20not_20yet_20finished.&amp;referer=');">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.barrysoft.it/blog/welcome.html&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz" onclick="pageTracker._trackPageview('/outgoing/www.google.com/buzz/post?url=http_//www.barrysoft.it/blog/welcome.html_amp_imageurl=&amp;referer=');">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.barrysoft.it/blog/welcome.html&amp;bm_description=Welcome%21&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Add this to Mister Wong" onclick="pageTracker._trackPageview('/outgoing/www.mister-wong.com/addurl/?bm_url=http_//www.barrysoft.it/blog/welcome.html_amp_bm_description=Welcome_21_amp_plugin=sexybookmarks&amp;referer=');">Add this to Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.barrysoft.it/blog/welcome.html&amp;title=Welcome%21" rel="nofollow" class="external" title="Share this on Mixx" onclick="pageTracker._trackPageview('/outgoing/www.mixx.com/submit?page_url=http_//www.barrysoft.it/blog/welcome.html_amp_title=Welcome_21&amp;referer=');">Share this on Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.barrysoft.it/blog/welcome.html&amp;title=Welcome%21" rel="nofollow" class="external" title="Share this on Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_//www.barrysoft.it/blog/welcome.html_amp_title=Welcome_21&amp;referer=');">Share this on Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.barrysoft.it/blog/welcome.html&amp;title=Welcome%21" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_//www.barrysoft.it/blog/welcome.html_amp_title=Welcome_21&amp;referer=');">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.barrysoft.it/blog/welcome.html" rel="nofollow" class="external" title="Share this on Technorati" onclick="pageTracker._trackPageview('/outgoing/technorati.com/faves?add=http_//www.barrysoft.it/blog/welcome.html&amp;referer=');">Share this on Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Welcome%21+-+http://b2l.me/237tv&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Welcome_21+-+http_//b2l.me/237tv_amp_source=shareaholic&amp;referer=');">Tweet This!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>



<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.barrysoft.it/blog/welcome.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
