<?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>Rasila Garage</title>
	<atom:link href="http://rasilagarage.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://rasilagarage.com</link>
	<description>Tuomas Rasila's blog about software and entrepreneurship</description>
	<lastBuildDate>Thu, 24 Mar 2011 17:22:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>The iPad friendliest Hotel in the world found</title>
		<link>http://rasilagarage.com/2011/03/the-ipad-friendliest-hotel-in-the-world-found/</link>
		<comments>http://rasilagarage.com/2011/03/the-ipad-friendliest-hotel-in-the-world-found/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 11:03:30 +0000</pubDate>
		<dc:creator>Tuomas Rasila</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://rasilagarage.com/?p=275</guid>
		<description><![CDATA[A week ago I went to Tel Aviv, Israel to buy a wedding dress for her. We got the dress, she is happy and the wedding will be on the August. On the eve of our returning flight I lost my iPad and now got it back, here is the story. Carrying my iPad with [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_279" class="wp-caption alignleft" style="width: 310px"><a rel="attachment wp-att-279" href="http://rasilagarage.com/2011/03/the-ipad-friendliest-hotel-in-the-world-found/img_1053/"><img class="size-medium wp-image-279" title="Sheraton" src="http://rasilagarage.com/wp-content/uploads/2011/03/IMG_1053-300x224.jpg" alt="View from the balcony of my room in Sheraton Tel Aviv Hotel &amp; Towers" width="300" height="224" /></a><p class="wp-caption-text">View from the balcony of my room in Sheraton Tel Aviv Hotel &amp; Towers</p></div>
<p>A week ago I went to Tel Aviv, Israel to buy a wedding dress for her. We got the dress, she is happy and the wedding will be on the August. On the eve of our returning flight I lost my iPad and now got it back, here is the story.
</p>
<p>
Carrying my iPad with me all the time sounded like an obvious move, since in Tel Aviv there were an open WI-FI, pretty much everywhere.
</p>
<p>
After shopping with my fiance for couple of hours we were ready to get back to hotel and I stopped taxi from the street. It was only ten minute ride to hotel and I payed the taxi with cash. When I stepped out I took all the bags with the stuff we shopped and walked into the hotel.
</p>
<p><span id="more-275"></span>
<p>
I took only few steps when I realized, my iPad is not with me. I ran back but the taxi had just went away. I had no receipt, taxi number, I had not ordered the taxi via phone. I had no clue how to reach the taxi. I told to hotel security about this and they told me that there are more than 25 taxi companies in Tel Aviv, so it will be impossible to locate it and we just have to wait in case the driver will bring it back.
</p>
<p>
So I went to my Mac and tried to locate it with Mobile Me Find my Phone, initially with no luck. It is a 3G model but I did not have roaming on. After two hours I was able to locate it to Holon, about 10 miles from the hotel.
</p>
<p>
I showed the satellite picture to, Ben, the Security manager of the hotel. I was suppressed as he took the case and eagerly wanted to do what ever needed to find the iPad. He was ready to drive there, but we figured that it might be too difficult to find it. The GPS location was accurate enough to tell the block where the the iPad was.
</p>
<p>
At this point I knew that someone had used the iPad to connect to WI-FI (because I was able to locate and lock it) and I also sent a message with my contact details and asked to bring it back. I got confirmation from Apple that the message was sent and displayed so I knew that someone had red it. I waited but the iPad did not appear so I went to sleep.
</p>
<p>
During the night, Ben the Security manager and his staff sent another taxi (hotel even payed it) to drive there and see if there is a taxi parked. They contacted to Israeli Police to get the name of the driver. I heard the news on the morning but I had a flight to catch. I was going back home to Finland.
</p>
<p>
Today I got a phone call from Israel. It was Security department of Sheraton Tel Aviv Hotel. &#8220;Mr Rasila, we found you iPad&#8221; started the man on the phone. I was so amazed, with only a one block accurate location these Israelis where able to find and bring back my iPad. No to mention that they did not accept any money for their efforts or even to cover the postage fees.
</p>
<p>
Now I am expecting to get my iPad back in few days via mail. Next time I&#8217;m going to Israel I will definitely live in Sheraton Tel Aviv Hotel.</p>
]]></content:encoded>
			<wfw:commentRss>http://rasilagarage.com/2011/03/the-ipad-friendliest-hotel-in-the-world-found/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing Dragon Dictate 2.0</title>
		<link>http://rasilagarage.com/2010/11/testing-dragon-dictate-2-0/</link>
		<comments>http://rasilagarage.com/2010/11/testing-dragon-dictate-2-0/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 11:11:41 +0000</pubDate>
		<dc:creator>Tuomas Rasila</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://rasilagarage.com/?p=268</guid>
		<description><![CDATA[I just installed Nuance Dragon Dictate 2.0 to my Mac. And this is my first piece of text I am writing with it. I&#8217;m using the internal microphone off my MacBook Pro. The quality of microphone is not good enough. This is not easy to begin with. I&#8217;m going to teach myself to use this. [...]]]></description>
			<content:encoded><![CDATA[<p>I just installed <a href="http://www.nuance.com/for-individuals/by-product/dragon-for-mac/dragon-dictate/index.htm" onclick="pageTracker._trackPageview('/outgoing/www.nuance.com/for-individuals/by-product/dragon-for-mac/dragon-dictate/index.htm?referer=');">Nuance Dragon Dictate 2.0</a> to my Mac. And this is my first piece of text I am writing with it. I&#8217;m using the internal microphone off my MacBook Pro. The quality of microphone is not good enough. This is not easy to begin with. I&#8217;m going to teach myself to use this.</p>
<p>I do not speak English as my first language. So I do have a pretty strong accent. Another thing I figured out is that I&#8217;m just used to the process off typing text. Usually when you are talking to another person the lot of information is transmitted using your voice and gestures in addition to plain text you speak.</p>
<p>I&#8217;m pretty confident that after using this application for a while I&#8217;m going to get far more productive in text input. When you want to enter text by speaking it doesn&#8217;t feel comfortable in the beginning. You tend to add sentences you really didn&#8217;t mean to. It would be interesting to take this after next level by adding some gesture recognition for unwanted text.</p>
<p>One of the reasons I think this will be a huge productivity gain for me is the fact that, I just don&#8217;t like typing. Knowing the fact that I don&#8217;t need to type everything down anymore feels inspiring. Maybe I would be able to type in blog post while driving a car. Maybe it would be possible to use this tech to make an email app that I could use while driving the car without losing my sight to traffic. Maybe someone already did it.</p>
<p>Dragon Dictate costs US$179 and it is about 1.5 GB package to download. In case this will motivate me to be productive for couple of extra hours I will be happy. I&#8217;m pretty confident that at least native English speakers will gain a lot from this software. In my native language, Finnish there is no dictation software available. Therefore I cannot estimate how well this would work with a better skill of spoken language.</p>
]]></content:encoded>
			<wfw:commentRss>http://rasilagarage.com/2010/11/testing-dragon-dictate-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m Going Wind Powered &#8211; Setting Up a Small Wind Turbine and Connecting to Grid</title>
		<link>http://rasilagarage.com/2010/08/im-going-wind-powered-setting-up-a-small-wind-turbine-and-connecting-to-grid/</link>
		<comments>http://rasilagarage.com/2010/08/im-going-wind-powered-setting-up-a-small-wind-turbine-and-connecting-to-grid/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 21:03:50 +0000</pubDate>
		<dc:creator>Tuomas Rasila</dc:creator>
				<category><![CDATA[Renewable energy]]></category>
		<category><![CDATA[electricity]]></category>
		<category><![CDATA[solar power]]></category>
		<category><![CDATA[wind power]]></category>

		<guid isPermaLink="false">http://rasilagarage.com/?p=251</guid>
		<description><![CDATA[I have been talking about this lately to many of my friends so why not to start to write about it. I&#8217;m currently traveling, but I wanted to post some pictures and share some thoughts about my home project, going wind powered. I recently bought Air Breeze small wind turbine and some accessories in order [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_261" class="wp-caption alignright" style="width: 310px"><a href="http://rasilagarage.com/wp-content/uploads/2010/08/DSC00374.jpg"><img src="http://rasilagarage.com/wp-content/uploads/2010/08/DSC00374-300x225.jpg" alt="" title="Air Breeze" width="300" height="225" class="size-medium wp-image-261" /></a><p class="wp-caption-text">Air Breeze small wind turbine</p></div>I have been talking about this lately to many of my friends so why not to start to write about it. I&#8217;m currently traveling, but I wanted to post some pictures and share some thoughts about my home project, going wind powered.</p>
<p>I recently bought Air Breeze small wind turbine and some accessories in order to test wind power. I&#8217;m really exited about this I want to collect as much data as possible to learn to build more efficient and lower cost wind power in a future. I hope to go 100% wind powered in year or two. I wanted it to be easy to connect to grid, cheap to start with (<$2.000). And available all around the world. Sure this first turbine is not going to make me 100% wind powered, if I'm lucky it will produce something like 4% of my electricity (I live in a old house with direct electric heating and cold weather of Finland). I'm estimating that the turbine will produce about 650KWh/year and I'm about to measure that once it is running.</p>
<p>So here is my plan:</p>
<ol>
<li><del>Buy a cheap wind turbine</del> I bought a <a href="http://airbreeze.com/" onclick="pageTracker._trackPageview('/outgoing/airbreeze.com/?referer=');">Air Breeze</a> It should be available for $700-$1200 price vary in Finland everything is expensive;) Be sure to get one that runs @ 48V</li>
<li><del>Buy a mast for the turbine</del> I bought 6 meters standard 48mm steel pipe for $100</li>
<li><del>Buy cables and other small accessories</del>You are going to need 5mm<super>2</super> cable to transfer DC from the turbine to inverter</li>
<li>Buy a grid-tied inverter</li>
<p>I did not find a really nice deal yet. The ones I found will cost around €500 in Finland</li>
<li>Install the turbine to the mast and the mast to top of the roof</li>
<li>Wire everything up</li>
</ol>
<p>As said, I&#8217;m still in the process of getting everything done and I&#8217;m going to get my turbine running likely in October and update the progress here.<br />

<a href='http://rasilagarage.com/2010/08/im-going-wind-powered-setting-up-a-small-wind-turbine-and-connecting-to-grid/dsc00368/' title='DSC00368'><img width="150" height="150" src="http://rasilagarage.com/wp-content/uploads/2010/08/DSC00368-150x150.jpg" class="attachment-thumbnail" alt="DSC00368" title="DSC00368" /></a>
<a href='http://rasilagarage.com/2010/08/im-going-wind-powered-setting-up-a-small-wind-turbine-and-connecting-to-grid/dsc00369/' title='DSC00369'><img width="150" height="150" src="http://rasilagarage.com/wp-content/uploads/2010/08/DSC00369-150x150.jpg" class="attachment-thumbnail" alt="DSC00369" title="DSC00369" /></a>
<a href='http://rasilagarage.com/2010/08/im-going-wind-powered-setting-up-a-small-wind-turbine-and-connecting-to-grid/dsc00370/' title='DSC00370'><img width="150" height="150" src="http://rasilagarage.com/wp-content/uploads/2010/08/DSC00370-150x150.jpg" class="attachment-thumbnail" alt="DSC00370" title="DSC00370" /></a>
<a href='http://rasilagarage.com/2010/08/im-going-wind-powered-setting-up-a-small-wind-turbine-and-connecting-to-grid/dsc00371/' title='DSC00371'><img width="150" height="150" src="http://rasilagarage.com/wp-content/uploads/2010/08/DSC00371-150x150.jpg" class="attachment-thumbnail" alt="DSC00371" title="DSC00371" /></a>
<a href='http://rasilagarage.com/2010/08/im-going-wind-powered-setting-up-a-small-wind-turbine-and-connecting-to-grid/dsc00372/' title='DSC00372'><img width="150" height="150" src="http://rasilagarage.com/wp-content/uploads/2010/08/DSC00372-150x150.jpg" class="attachment-thumbnail" alt="DSC00372" title="DSC00372" /></a>
<a href='http://rasilagarage.com/2010/08/im-going-wind-powered-setting-up-a-small-wind-turbine-and-connecting-to-grid/dsc00373/' title='DSC00373'><img width="150" height="150" src="http://rasilagarage.com/wp-content/uploads/2010/08/DSC00373-150x150.jpg" class="attachment-thumbnail" alt="DSC00373" title="DSC00373" /></a>
<a href='http://rasilagarage.com/2010/08/im-going-wind-powered-setting-up-a-small-wind-turbine-and-connecting-to-grid/dsc00374/' title='Air Breeze'><img width="150" height="150" src="http://rasilagarage.com/wp-content/uploads/2010/08/DSC00374-150x150.jpg" class="attachment-thumbnail" alt="Air Breeze small wind turbine" title="Air Breeze" /></a>

]]></content:encoded>
			<wfw:commentRss>http://rasilagarage.com/2010/08/im-going-wind-powered-setting-up-a-small-wind-turbine-and-connecting-to-grid/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Five Cool OS X Terminal Tricks</title>
		<link>http://rasilagarage.com/2010/03/five-cool-os-x-terminal-tricks/</link>
		<comments>http://rasilagarage.com/2010/03/five-cool-os-x-terminal-tricks/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 05:08:09 +0000</pubDate>
		<dc:creator>Tuomas Rasila</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://rasilagarage.com/?p=229</guid>
		<description><![CDATA[We all love Unix shell. I can&#8217;t remember when was the last time I had my Mac running without an open Terminal window. Here are couple of tricks you can do with it. 1. &#8220;cd -&#8221; After finding this in all of its simplicity I asked many of Linux &#38; OS X hardcore users and [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_232" class="wp-caption alignright" style="width: 310px"><a rel="attachment wp-att-232" href="http://rasilagarage.com/2010/03/five-cool-os-x-terminal-tricks/3793035220_3ce2874114/"><img class="size-medium wp-image-232 " title="3793035220_3ce2874114" src="http://rasilagarage.com/wp-content/uploads/2010/03/3793035220_3ce2874114-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Photo courtesy of Mads Sabroe</p></div>
<p>We all love Unix shell. I can&#8217;t remember when was the last time I had my Mac running without an open Terminal window. Here are couple of tricks you can do with it.</p>
<p><strong>1. &#8220;cd -&#8221;</strong><br />
After finding this in all of its simplicity I asked many of Linux &amp; OS X hardcore users and none of them knew this existed. &#8220;cd -&#8221; sends you back to the last directory you where in:</p>
<pre class="brush:bash">
macbookpro:/ tuomas$cd usr/bin/
macbookpro:bin tuomas$ cd -
/
macbookpro:/ tuomas$ cd -
/usr/bin
</pre>
<p><strong>2. &#8220;mkdir -p&#8221;</strong><br />
With mkdir you can make a directory, but adding the &#8220;-p&#8221; argument can make multiple directories in case those do not exist before. For example:</p>
<pre class="brush:bash">
mkdir -p /home/bill/documents/books/computer
</pre>
<p><strong>3. Update Twitter from shell with cURL</strong></p>
<pre class="brush:bash">
curl -u username:password -d status="Your tweet" http://twitter.com/statuses/update.xml
</pre>
<p><strong>4. Speak a text file to spoken .aiff file</strong></p>
<pre class="brush:bash">
cat foo.txt |say -o foo
</pre>
<p> Now try this with Apache log;)</p>
<p><strong>5. &#8220;history&#8221;</strong><br />
History shows you list of commands you have ran before like this:</p>
<pre class="brush:bash">
526  cat blog-google-api.txt |say -o foo.mp3
527  open .
528  ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
529  history
</pre>
<p>If you want to run something from your history you can just: !527 and it will run command #527 from the history. In this case: &#8220;open .&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://rasilagarage.com/2010/03/five-cool-os-x-terminal-tricks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Extracting email addresses from any text file with Python</title>
		<link>http://rasilagarage.com/2009/06/extracting-email-addresses-from-any-text-file-with-python/</link>
		<comments>http://rasilagarage.com/2009/06/extracting-email-addresses-from-any-text-file-with-python/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 09:05:48 +0000</pubDate>
		<dc:creator>Tuomas Rasila</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://rasilagarage.com/?p=215</guid>
		<description><![CDATA[Ok, this might sound like that we are in the spamming business now. Well, we are not. The case is that email address is typically the only per-person unique key in CRM data. These couple of lines of Python will extract email addresses from any text file, e.g a HTML-file. This script will also make [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-217" title="picture-11" src="http://rasilagarage.com/wp-content/uploads/2009/06/picture-11-300x190.png" alt="picture-11" width="300" height="190" />Ok, this might sound like that we are in the spamming business now. Well, we are not. The case is that email address is typically the only per-person unique key in CRM data. These couple of lines of Python will extract email addresses from any text file, e.g a HTML-file. This script will also make list unique so if the same email address is listed many times in the original data, it will be only once in the output. Enjoy:</p>
<pre class="brush:python">
#!/usr/bin/env python
# coding: utf-8

import os
import re
import sys

def grab_email(file):
    """Try and grab all emails addresses found within a given file."""
    email_pattern = re.compile(r'\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b',
                               re.IGNORECASE)
    found = set()
    if os.path.isfile(file):
        for line in open(file, 'r'):
            found.update(email_pattern.findall(line))
    for email_address in found:
        print email_address

if __name__ == '__main__':
    grab_email(sys.argv[1])
</pre>
]]></content:encoded>
			<wfw:commentRss>http://rasilagarage.com/2009/06/extracting-email-addresses-from-any-text-file-with-python/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Using SugarCRM&#8217;s SOAP-API with Python and SOAPpy</title>
		<link>http://rasilagarage.com/2009/02/using-sugarcrms-soap-api-with-python-and-soappy/</link>
		<comments>http://rasilagarage.com/2009/02/using-sugarcrms-soap-api-with-python-and-soappy/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 18:13:32 +0000</pubDate>
		<dc:creator>Tuomas Rasila</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sugarcrm]]></category>

		<guid isPermaLink="false">http://rasilagarage.com/?p=195</guid>
		<description><![CDATA[SugarCRM is nowadays very widely used CRM system so I will cover it in my posts every now and then. At work we use it by ourselves to handle some processes and have been working with customers using it. There are things I like and thing I don&#8217;t like in SugarCRM. It is bit bloated [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sugarcrm.com/" onclick="pageTracker._trackPageview('/outgoing/www.sugarcrm.com/?referer=');">SugarCRM</a> is nowadays very widely used CRM system so I will cover it in my posts every now and then.</p>
<div id="attachment_206" class="wp-caption alignright" style="width: 310px"><a href="http://rasilagarage.com/wp-content/uploads/2009/02/picture-1.png"><img class="size-medium wp-image-206" title="Sugarsoap" src="http://rasilagarage.com/wp-content/uploads/2009/02/picture-1-300x139.png" alt="The API is not very well documented but you can browse its capabilities be opening http://URL-TO-SUGAR/soap.php in your browser" width="300" height="139" /></a><p class="wp-caption-text">The API is not very well documented but you can browse its capabilities be opening http://URL-TO-SUGAR/soap.php in your browser</p></div>
<p>At work we use it by ourselves to handle some processes and have been working with customers using it. There are things I like and thing I don&#8217;t like in SugarCRM. It is bit bloated and the code is not the most beautiful I have seen. On the other hand it does its job quite well and it is easy to configure without touching a line of code.</p>
<p>If you use a CRM in your business for a while you will most likely to find that you would like to do some integration. At work we have been doing various kinds of integration tasks. We have integrated a phone system to automatically make entries to SugarCRM when inbound or outbound calls have been made, connected registration of a web application to create a new accounts to CRM, connected a <a href="http://en.wikipedia.org/wiki/Laboratory_Information_Management_System" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Laboratory_Information_Management_System?referer=');">LIMS</a> in various ways to it and so on. The reason I found SOAP-API to be the best way in most these cases is the fact that if you use it you won&#8217;t break down anything and it is likely that your code will work with future releases too. Off course there is a performance penalty and using SOAP API is not a good option when performance is an issue. So lets get to the business.<br />
<span id="more-195"></span><br />
<strong>Installing SOAPpy</strong><br />
I assume that installing Python module with easy_install is not a problem. However, latest version of <a href="http://pywebsvcs.sourceforge.net/" onclick="pageTracker._trackPageview('/outgoing/pywebsvcs.sourceforge.net/?referer=');">SOAPpy</a> was not compatible with Python 2.5. To install SOAPpy I would suggest the following:</p>
<p>1. Download and extract SOAPpy <a href="http://sourceforge.net/project/showfiles.php?group_id=26590&amp;package_id=18246" onclick="pageTracker._trackPageview('/outgoing/sourceforge.net/project/showfiles.php?group_id=26590_amp_package_id=18246&amp;referer=');">http://sourceforge.net/project/showfiles.php?group_id=26590&amp;package_id=18246</a></p>
<p>2. Move every &#8220;from __future__ import&#8221; lines to the beginning of the files where they are in. Below you can see the listing of these files.</p>
<pre class="brush:bash">
localhost:SOAPpy-0.12.0 tuomas$ grep -R __future__ SOAPpy/*.py
SOAPpy/Client.py:from __future__ import nested_scopes
SOAPpy/GSIServer.py:from __future__ import nested_scopes
SOAPpy/NS.py:from __future__ import nested_scopes
SOAPpy/Server.py:from __future__ import nested_scopes
SOAPpy/Types.py:from __future__ import nested_scopes
</pre>
<p>3. Install SOAPpy</p>
<pre class="brush:bash">
sudo python setup.py install
</pre>
<p><strong>The simplest possible example of SugarCRM + SOAPpy</strong><br />
The code below logs in to the SugarCRM, asks the version of the server and prints it. Here is the code:</p>
<pre class="brush:python">
import md5
import SOAPpy
USERNAME= "user"
PASSWORD= "pass"

auth = {'user_name': USERNAME, 'password': md5.new(PASSWORD).hexdigest(), "version": "1.1"}

# Url of SugarCRM + soap.php?wsdl
SUGAR_URL = 'http://192.160.0.1/soap.php?wsdl'

sugar = SOAPpy.WSDL.Proxy(SUGAR_URL)
session = sugar.login(auth, "foobar")

try:
    response = sugar.get_server_version()
except StandardError, err:
    print '\nError in information retrieval from SugarCRM:' + str(err)
print response
</pre>
<p>The API is not documented very well but you can list all of its capabilities by browsing yourself to http://URL-TO-SUGAR/soap.php.</p>
<p><strong>Advanced example</strong><br />
This script will log into SugarCRM and create a new Account.</p>
<pre class="brush:python">
import md5
import SOAPpy
USERNAME= "user"
PASSWORD= "pass"

auth = {'user_name': USERNAME, 'password': md5.new(PASSWORD).hexdigest(), "version": "1.1"}

# Url of SugarCRM + soap.php?wsdl
SUGAR_URL = 'http://192.160.0.1/soap.php?wsdl'

sugar = SOAPpy.WSDL.Proxy(SUGAR_URL)
session = sugar.login(auth, "foobar")
module = "Accounts"

adata = [{'name': 'name', 'value': "Test Account"},
           {'name': 'shipping_address_street', 'value': "Address test"}]
try:
    response = sugar.set_entry(session['id'], module, adata)
except StandardError, err:
     print '\nError in information retrieval from SugarCRM:' + str(err)
print response
</pre>
<p><strong>UPDATE:</strong> It appears to be that, Sugar Team is working with the <a href="http://developers.sugarcrm.com/wordpress/2009/02/11/draft-2-of-the-web-services-documentation-posted/" onclick="pageTracker._trackPageview('/outgoing/developers.sugarcrm.com/wordpress/2009/02/11/draft-2-of-the-web-services-documentation-posted/?referer=');">API and the documentation</a> at the moment and I&#8217;ll take back what I said about missing documentation. Thanks SugarCRM devs! </p>
]]></content:encoded>
			<wfw:commentRss>http://rasilagarage.com/2009/02/using-sugarcrms-soap-api-with-python-and-soappy/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Sugar Feeds, SugarCRM&#8217;s feeding system, where are the feeds?</title>
		<link>http://rasilagarage.com/2009/02/sugar-feeds-sugarcrms-feeding-system-where-are-the-feeds/</link>
		<comments>http://rasilagarage.com/2009/02/sugar-feeds-sugarcrms-feeding-system-where-are-the-feeds/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 19:00:30 +0000</pubDate>
		<dc:creator>Tuomas Rasila</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[sugarcrm]]></category>

		<guid isPermaLink="false">http://rasilagarage.com/?p=187</guid>
		<description><![CDATA[Today I was thinking about integrating our company&#8217;s SugarCRM with our Laconi.ca installation. I thought it would be cool, if our CRM could automatically tweet to Laconi.ca if e.g. a new case have been filed or mail has arrived to some of the group inboxes. There are several quite easy ways to do this. I [...]]]></description>
			<content:encoded><![CDATA[<p>Today I was thinking about integrating our company&#8217;s <a href="http://www.sugarcrm.com/crm/download/sugar-suite.html" onclick="pageTracker._trackPageview('/outgoing/www.sugarcrm.com/crm/download/sugar-suite.html?referer=');">SugarCRM</a> with <a href="http://rasilagarage.com/2009/01/laconica-an-open-source-twitter-clone-behind-a-password-and-your-firewall/">our Laconi.ca</a> installation. I thought it would be cool, if our CRM could automatically tweet to <a href="http://laconi.ca" onclick="pageTracker._trackPageview('/outgoing/laconi.ca?referer=');">Laconi.ca</a> if e.g. a new case have been filed or mail has arrived to some of the group inboxes. There are several quite easy ways to do this. I began by logging into Sugar and looking around what data I would actually want to get out.</p>
<p>So as I clicked the Admin button and went to admin area I realized that there is a new version of SugarCRM available. Ok, I&#8217;ll install the new version first I thought hmm.. lets see release notes hmm.. a new feature <a href="http://developers.sugarcrm.com/wordpress/2009/01/13/care-and-feeding-of-the-sugar-feed-system/" onclick="pageTracker._trackPageview('/outgoing/developers.sugarcrm.com/wordpress/2009/01/13/care-and-feeding-of-the-sugar-feed-system/?referer=');">Sugar Feeds</a>, sounds cool. Maybe I could finally get <a href="http://trac.edgewall.org/" onclick="pageTracker._trackPageview('/outgoing/trac.edgewall.org/?referer=');">Trac</a> like timeline RSS feed from SugarCRM. Here is what release notes said:</p>
<blockquote><p>Sugar Feed enables users to be informed as soon as a user creates a new contact, lead, opportunity, or case. Users can add a My Sugar Feed dashlet on their Home page so that when a user performs any of these actions, a message displays in the dashlet on<br />
their Home page. Userscan also be notified when a lead is converted, when a case is closed, and when an opportunity is closed.<br />
Additionally, users can post status updates, external links, images, and YouTube videos for other users to view within the dashlet.</p>
<p><a href="http://www.sugarcrm.com/crm/index.php?action=docs&#038;enc=UTF-8&#038;v=5.2&#038;option=com_docs&#038;edition=OS&#038;&#038;doc=/docs/Release_Notes/CommunityEdition_ReleaseNotes_5.2/Sugar_Release_Notes_5.2.2.3.html" onclick="pageTracker._trackPageview('/outgoing/www.sugarcrm.com/crm/index.php?action=docs_038_enc=UTF-8_038_v=5.2_038_option=com_docs_038_edition=OS_038_038_doc=/docs/Release_Notes/CommunityEdition_ReleaseNotes_5.2/Sugar_Release_Notes_5.2.2.3.html&amp;referer=');">SugarCRM Community Edition5.2.2.3.h Release Notes</a>
</p></blockquote>
<p>After reading that I still continued to believe that this would be like users life stream RSS-feed. Guess what, it was not. Sugar Feeds is SugarCRM&#8217;s internal message sending service. Sure it sounds kinda cute &#8220;aww, now I can send these nice little messages to my co-workers&#8221; but really. As long as there is no API and no RSS why would anyone log in to SugarCRM to read and write these messages.</p>
<p>As much as I do value the effort of the SugarCRM&#8217;s team and their bold moves on the open source field, I still cannot understand who would want to use Sugar Feeds.</p>
]]></content:encoded>
			<wfw:commentRss>http://rasilagarage.com/2009/02/sugar-feeds-sugarcrms-feeding-system-where-are-the-feeds/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to save 10 hours a month on time of other people by filtering their spam</title>
		<link>http://rasilagarage.com/2009/01/how-to-save-10-hours-a-month-on-time-of-other-people-by-filtering-their-spam/</link>
		<comments>http://rasilagarage.com/2009/01/how-to-save-10-hours-a-month-on-time-of-other-people-by-filtering-their-spam/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 15:12:59 +0000</pubDate>
		<dc:creator>Tuomas Rasila</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://rasilagarage.com/?p=98</guid>
		<description><![CDATA[“The average spam messages per day is 18.5 and the average time spent per day deleting them is 2.8 minutes. The loss in productivity is equivalent to $21.6 billion per year at average U.S. wages.” - Jesdanun, A. (2005), “Deleting spam costs billions, study finds”, The Associated Press Newswires (online) Let’s say there are ten [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>“The average spam messages per day is 18.5 and the average time spent per day deleting them is 2.8 minutes. The loss in productivity is equivalent to $21.6 billion per year at average U.S. wages.”</p>
<p>- Jesdanun, A. (2005), “Deleting spam costs billions, study finds”, The Associated Press Newswires (online)</p></blockquote>
<div id="attachment_168" class="wp-caption alignleft" style="width: 235px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_0087.jpg"><img src="http://rasilagarage.com/wp-content/uploads/2009/01/img_0087-225x300.jpg" alt="You can filter spam and viruses before they hit your mailserver" title="Untangle" width="225" height="300" class="size-medium wp-image-168" /></a><p class="wp-caption-text">You can filter spam and viruses before they hit your mailserver</p></div><br />
Let’s say there are ten people working in your office and monthly cost per person is 4500€ (25,50€ per hour). By eliminating spam you could save 9:48 hours or 249,90€ per month totaling 2998,80€ per year the study says. Ok, I know I&#8217;m quantifying the unquantifiable, but the amount is anyway far greater than zero.</p>
<p>In my opinion the problem that is not solved yet is the deployment. <strong>I think every tech savvy person filters their spam already.</strong> But how about the rest of the people. Sure, you can use time and install a spam filter to each client, you can also install a spam filter to mail server and get more results.</p>
<p>If you wish to install spam filter to every client computer it will take lot of time and possibly people can mess up their installations. Updating lots of PCs does not sound like a good idea either.</p>
<p>Installing spam filter to a mail server sounds like a better idea but it might be that you cannot go to the mail server. Another problem would be that having a universal spam filter that works with any mail server is not reality.</p>
<p>But what about I you could just use hardware based solution that works out-of-the-box with any kind of setup. Wouldn&#8217;t that be cool? Perhaps the easiest way to eliminate spam in any POP3, IMAP &amp; SMTP scenario would be to set up a network attached spam filter. This way would be 100% transparent to clients and completely platform independent. In SMTP scenario (You are not using mail server of your service provider, instead you have your own mail server) you can directly block spam before it goes to your mail server. You can also set up a simple shell script to automatically log in to your mail accounts and sweep the spam with Spamassassin. This would also be useful if you use a mobile device e.g. an iPhone to read your mail.<br />
<span id="more-98"></span><br />
<a href="http://www.untangle.com/" onclick="pageTracker._trackPageview('/outgoing/www.untangle.com/?referer=');">Untangle</a> has made a great job by putting it all together and by offering the whole thing as an <a href="http://www.untangle.com/Downloads/Download-ISO" onclick="pageTracker._trackPageview('/outgoing/www.untangle.com/Downloads/Download-ISO?referer=');">ISO-image</a>. Their software is open source, licensed under GPLv2. All you are going to need is a extra computer with two network controllers.</p>
<p>To get started you should have following items:</p>
<ul>
<li>Untangle ISO image, and empty cd-r, obviously</li>
<li>Extra computer with two nics, see hardware requirements</li>
</ul>
<p>During the installation you might also need:</p>
<ul>
<li>a monitor</li>
<li>an external CD drive</li>
</ul>
<p>So, let’s get started with it.</p>
<p>I didn’t have extra computer for this so I ordered one. Here is my hardware configuration:</p>
<ul>
<li>Kingston Valueram 2GB 23,90€</li>
<li>Intel Dual Core E5200 86,90€</li>
<li>D-Link DGE-528T 14,70€</li>
<li>Shuttle K45 barebone 111,90€</li>
<li>500GB HDD 56,90€</li>
<li>Total 301,80€ with shipping.</li>
</ul>
<p>This setup would be enough for pretty large network (maybe 200 clients). Hardware is not the case here, almost any x86 hardware should be just fine.</p>
<p><strong>Unboxing and putting hardware together</strong></p>
<p><div id="attachment_103" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1030.jpg"><img class="size-thumbnail wp-image-103" title="Spam filter unboxing 1" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1030-150x150.jpg" alt="Spam filter unboxing 1" width="150" height="150" /></a><p class="wp-caption-text">Spam filter unboxing 1</p></div>
<div id="attachment_105" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1033.jpg"><img class="size-thumbnail wp-image-105" title="Spam filter unboxing 2" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1033-150x150.jpg" alt="Spam filter unboxing 2" width="150" height="150" /></a><p class="wp-caption-text">Spam filter unboxing 2</p></div>
<div id="attachment_106" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1035.jpg"><img class="size-thumbnail wp-image-106" title="Spam filter unboxing 3" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1035-150x150.jpg" alt="Spam filter unboxing 3" width="150" height="150" /></a><p class="wp-caption-text">Spam filter unboxing 3</p></div>
<div id="attachment_107" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1039.jpg"><img class="size-thumbnail wp-image-107" title="Spam filter unboxing 4" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1039-150x150.jpg" alt="Spam filter unboxing 4" width="150" height="150" /></a><p class="wp-caption-text">Spam filter unboxing 4</p></div>
<div id="attachment_108" class="wp-caption alignnone" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1043.jpg"><img class="size-thumbnail wp-image-108" title="Spam filter unboxing 5" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1043-150x150.jpg" alt="Spam filter unboxing 5" width="150" height="150" /></a><p class="wp-caption-text">Spam filter unboxing 5</p></div>
<p>Putting the hardware is an easy thing to do and even if you have not done it before I&#8217;m sure it won&#8217;t be a big problem. To me it took something like 15 minutes.</p>
<p>Since I think most of the readers might end up with a different hardware setup I won&#8217;t go thru putting the hardware together part any further. If you find any problems with the hardware, post a comment.</p>
<p><strong>The installation process screenshots</strong></p>
<div id="attachment_115" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1044.jpg"><img class="size-thumbnail wp-image-115" title="Spam filter installation 1" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1044-150x150.jpg" alt="Setting up BIOS to boot from USB-CD" width="150" height="150" /></a><p class="wp-caption-text">Setting up BIOS to boot from USB-CD</p></div>
<div id="attachment_116" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1046.jpg"><img class="size-thumbnail wp-image-116" title="Spam filter installation 2" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1046-150x150.jpg" alt="Setting up BIOS continues" width="150" height="150" /></a><p class="wp-caption-text">Setting up bios continues</p></div>
<div id="attachment_117" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1047.jpg"><img class="size-thumbnail wp-image-117" title="Spam filter installation 3" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1047-150x150.jpg" alt="Saving BIOS and booting" width="150" height="150" /></a><p class="wp-caption-text">Saving BIOS and booting</p></div>
<div id="attachment_118" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1048.jpg"><img class="size-thumbnail wp-image-118" title="Spam filter installation 4" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1048-150x150.jpg" alt="Untangle booting" width="150" height="150" /></a><p class="wp-caption-text">Untangle booting</p></div>
<div id="attachment_119" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1049.jpg"><img class="size-thumbnail wp-image-119" title="Spam filter installation 5" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1049-150x150.jpg" alt="Entering to the installation wizard" width="150" height="150" /></a><p class="wp-caption-text">Entering to the installation wizard</p></div>
<div id="attachment_120" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1050.jpg"><img class="size-thumbnail wp-image-120" title="Spam filter installation 6" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1050-150x150.jpg" alt="Installation wizard 2, Accepting the GPL license" width="150" height="150" /></a><p class="wp-caption-text">Installation wizard 2</p></div>
<div id="attachment_122" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1051.jpg"><img class="size-thumbnail wp-image-122" title="Spam filter installation 7" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1051-150x150.jpg" alt="Selecting the destination drive" width="150" height="150" /></a><p class="wp-caption-text">Selecting the destination drive</p></div>
<div id="attachment_123" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1052.jpg"><img class="size-thumbnail wp-image-123" title="Spam filter installation 8" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1052-150x150.jpg" alt="Testing hardware" width="150" height="150" /></a><p class="wp-caption-text">Testing hardware</p></div>
<div id="attachment_124" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1054.jpg"><img class="size-thumbnail wp-image-124" title="Spam filter installation 9" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1054-150x150.jpg" alt="Final warning before writing to the disk" width="150" height="150" /></a><p class="wp-caption-text">Final warning before writing to the disk</p></div>
<div id="attachment_125" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1056.jpg"><img class="size-thumbnail wp-image-125" title="Spam filter installation 10" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1056-150x150.jpg" alt="Writing to the disk" width="150" height="150" /></a><p class="wp-caption-text">Writing to the disk</p></div>
<div id="attachment_126" class="wp-caption alignnone" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1057.jpg"><img class="size-thumbnail wp-image-126" title="Spam filter installation 11" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1057-150x150.jpg" alt="The installation is ready, remove CD and boot it for the first time" width="150" height="150" /></a><p class="wp-caption-text">The installation is ready, remove CD and boot it for the first time</p></div>
<p>Installing Untangle is quite straightforward process. My hardware setup did not have a CD-drive, keyboard, mouse or a monitor so I borrowed those from another computer. <strong>The mouse is essential!</strong> You cannot install Untangle without a mouse if you want to use the installer.</p>
<p>I think installation took something like half an hour for me, I didn&#8217;t time it. The installation wizard was easy to use and I sure most of the potential users with limited experience are fine with it.</p>
<p>My only complain would be the fact that in some step I needed a mouse to continue. I not sure if it was before or after the boot. Maybe text based installation option and SSH stating as a default would be a good idea for the future.</p>
<p>So as said, even thru Untangle pretty much works out of the box you should do some work more before you can remotely administer it.</p>
<p>Next couple of screens will guide you thru making basic settings and enabling the SSH server.</p>
<p><strong>Configuration screenshots</strong></p>
<div id="attachment_131" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1059.jpg"><img class="size-thumbnail wp-image-131" title="Untangle configuration 1" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1059-150x150.jpg" alt="Welcome to configuration wizard" width="150" height="150" /></a><p class="wp-caption-text">Welcome to configuration wizard</p></div>
<div id="attachment_132" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1060.jpg"><img class="size-thumbnail wp-image-132" title="Untangle configuration 2" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1060-150x150.jpg" alt="Entering some basic information" width="150" height="150" /></a><p class="wp-caption-text">Entering some basic information</p></div>
<div id="attachment_133" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1061.jpg"><img class="size-thumbnail wp-image-133" title="Untangle configuration 3" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1061-150x150.jpg" alt="Select a password" width="150" height="150" /></a><p class="wp-caption-text">Select a password</p></div>
<div id="attachment_134" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1063.jpg"><img class="size-thumbnail wp-image-134" title="Untangle configuration 4" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1063-150x150.jpg" alt="Select external and internal network interface" width="150" height="150" /></a><p class="wp-caption-text">Select external and internal network interface</p></div>
<div id="attachment_135" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1065.jpg"><img class="size-thumbnail wp-image-135" title="Untangle configuration 5" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1065-150x150.jpg" alt="Setup network" width="150" height="150" /></a><p class="wp-caption-text">Setup network</p></div>
<div id="attachment_136" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1066.jpg"><img class="size-thumbnail wp-image-136" title="Untangle configuration 6" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1066-150x150.jpg" alt="Checking connectivity" width="150" height="150" /></a><p class="wp-caption-text">Checking connectivity</p></div>
<div id="attachment_137" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1067.jpg"><img class="size-thumbnail wp-image-137" title="Untangle configuration 7" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1067-150x150.jpg" alt="As a router with NAT or completely transparent" width="150" height="150" /></a><p class="wp-caption-text">As a router with NAT or completely transparent</p></div>
<div id="attachment_138" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1068.jpg"><img class="size-thumbnail wp-image-138" title="Untangle configuration 8" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1068-150x150.jpg" alt="Setup email" width="150" height="150" /></a><p class="wp-caption-text">Setup email</p></div>
<div id="attachment_139" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1069.jpg"><img class="size-thumbnail wp-image-139" title="Untangle configuration 9" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1069-150x150.jpg" alt="Congrats Untangle is now installed" width="150" height="150" /></a><p class="wp-caption-text">Congrats Untangle is now installed</p></div>
<div id="attachment_140" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1070.jpg"><img class="size-thumbnail wp-image-140" title="Untangle configuration 10" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1070-150x150.jpg" alt="Login to admin interface" width="150" height="150" /></a><p class="wp-caption-text">Login to admin interface</p></div>
<div id="attachment_141" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1071.jpg"><img class="size-thumbnail wp-image-141" title="Untangle configuration 11" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1071-150x150.jpg" alt="By default your Untangle rack is empty" width="150" height="150" /></a><p class="wp-caption-text">By default your Untangle rack is empty</p></div>
<div id="attachment_142" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1072.jpg"><img class="size-thumbnail wp-image-142" title="Untangle configuration 12" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1072-150x150.jpg" alt="Launch a shell" width="150" height="150" /></a><p class="wp-caption-text">Launch a shell</p></div>
<div id="attachment_143" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1073.jpg"><img class="size-thumbnail wp-image-143" title="Untangle configuration 13" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1073-150x150.jpg" alt="Type ifconfig to see your network configuration" width="150" height="150" /></a><p class="wp-caption-text">Type ifconfig to see your network configuration</p></div>
<div id="attachment_144" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1075.jpg"><img class="size-thumbnail wp-image-144" title="Untangle configuration 14" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1075-150x150.jpg" alt="Enabling remote admin functionality" width="150" height="150" /></a><p class="wp-caption-text">Enabling remote admin functionality</p></div>
<div id="attachment_145" class="wp-caption alignleft" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1076.jpg"><img class="size-thumbnail wp-image-145" title="Untangle configuration 15" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1076-150x150.jpg" alt="Starting SSH by typing /etc/init.d/ssh start" width="150" height="150" /></a><p class="wp-caption-text">Starting SSH by typing /etc/init.d/ssh start</p></div>
<div id="attachment_146" class="wp-caption alignnone" style="width: 160px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/img_1077.jpg"><img class="size-thumbnail wp-image-146" title="Untangle configuration 16" src="http://rasilagarage.com/wp-content/uploads/2009/01/img_1077-150x150.jpg" alt="To make sure SSH starts next time you boot you have to type update-rc.d ssh defaults" width="150" height="150" /></a><p class="wp-caption-text">To make sure SSH starts next time you boot you have to type update-rc.d ssh defaults</p></div>
<p>Configuring Untangle is done with another wizard and it includes following steps:</p>
<p>- Agree with license, select password</p>
<p>- Select which network interface to use as external and which as internal</p>
<p>- Select router mode with NAT or transparent mode</p>
<p>Remote admin functionality is not on by default due the security reasons so in most cases you would like to put that on.</p>
<p>Putting SSH on is also a good idea and don&#8217;t forget to get SSH to the default runlevel. This is done by saying following to the terminal as a root:<br />
<code><br />
/etc/init.d/ssh start<br />
update-rc.d ssh defaults<br />
</code></p>
<p>Now that Untangle is installed and configured I would like to write few words about its capabilities.</p>
<p><strong>Using Untangle</strong></p>
<p>The beauty of Untangle is in its transparency. If you have only one computer I cannot see why you would like to install hardware based spam filter. But for network from couple to hundreds of clients PCs it is just great! After you get it up and running all the clients get the benefit of being spam free with no software installations and no new skills to learn. Sure this depends little bit of your configuration. It is going to be 100% transparent only if you will install it in front of the mail server you are using.</p>
<p>If you have a mail server outside of your network. You can use a small script called <a href="http://www.rogerbinns.com/isbg/" onclick="pageTracker._trackPageview('/outgoing/www.rogerbinns.com/isbg/?referer=');">IMAP Spam Begone</a> to sweep the spam on e.g. hourly basis. Installation is bit more difficult, I might write about it later on because it is generally useful.</p>
<p><strong>The admin utility</strong></p>
<p>Finally couple word about the admin utility. Untangle admin utility&#8217;s user interface looks like a server rack. Each component appears as a rack-mounted utility. I did not like the look of the UI for at first but it was simple to use.</p>
<p>Untangle&#8217;s spam filter is <a href="http://spamassassin.apache.org/" onclick="pageTracker._trackPageview('/outgoing/spamassassin.apache.org/?referer=');">Spamassassin</a>. The other components you can get to your rack are:</p>
<ul>
<li>Web Filter</li>
<li>Spyware Blocker</li>
<li>Protocol Control</li>
<li>Virus Blocker</li>
<li>Phish Blocker</li>
<li>IPS</li>
<li>Attack Blocker</li>
<li>Firewall</li>
<li>OpenVPN</li>
<li>Reports Routing</li>
<li>QoS</li>
</ul>
<p><strong>UPDATE: Statistics after about six weeks</strong><br />
It appears to be that after six weeks 121480 spam messages have been blocked and 1051 non-spam messages passed. Users are saying that they are virtually getting no spam at all. So I am pretty happy with it.<br />
<div id="attachment_178" class="wp-caption alignright" style="width: 310px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/02022009252.jpg"><img src="http://rasilagarage.com/wp-content/uploads/2009/01/02022009252-300x225.jpg" alt="Untangle stats after six weeks of operation" title="Untangle stats" width="300" height="225" class="size-medium wp-image-178" /></a><p class="wp-caption-text">Untangle stats after six weeks of operation</p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://rasilagarage.com/2009/01/how-to-save-10-hours-a-month-on-time-of-other-people-by-filtering-their-spam/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How to write a simple bot that updates status to Laconi.ca</title>
		<link>http://rasilagarage.com/2009/01/how-to-write-a-simple-bot-that-updates-to-laconica/</link>
		<comments>http://rasilagarage.com/2009/01/how-to-write-a-simple-bot-that-updates-to-laconica/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 10:36:43 +0000</pubDate>
		<dc:creator>Tuomas Rasila</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[laconi.ca]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://rasilagarage.com/?p=73</guid>
		<description><![CDATA[In my last post I wrote about Laconi.ca and mentioned that we have many bots updating Laconi.ca too. The bots are made active when some condition has met. Example: Make server running out of disk space to post an update to Laconi.ca This is actually quite useful. Sure, you can tell every service to send [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_91" class="wp-caption alignleft" style="width: 220px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/419970_front_rack_server.jpg"><img class="size-full wp-image-91 " title="Rack server" src="http://rasilagarage.com/wp-content/uploads/2009/01/419970_front_rack_server.jpg" alt="Full disk is a lousy reason to wake up in a middle of the night" width="210" height="158" /></a><p class="wp-caption-text">Full disk is a lousy reason to wake up in a middle of the night</p></div>
<p>In my <a href="http://rasilagarage.com/2009/01/laconica-an-open-source-twitter-clone-behind-a-password-and-your-firewall/">last post</a> I wrote about Laconi.ca and mentioned that we have many bots updating Laconi.ca too. The bots are made active when some condition has met.</p>
<p><strong>Example: Make server running out of disk space to post an update to Laconi.ca</strong></p>
<p>This is actually quite useful. Sure, you can tell every service to send an email when something not wanted is happening but then you will have to read that mailbox too. Sending email to someone else doesn’t solve the problem. Hmm, updating to Laconi.ca doesn’t solve the problem either but it makes servers easier follow and to subscribe.</p>
<p>So here is a simple shell script:</p>
<p><span id="more-73"></span></p>
<p><code>#!/bin/sh<br />
fs=`mount|egrep '^/dev'|grep -iv cdrom| awk '{print $3}'`<br />
typeset -i thresh="96"<br />
typeset -i warn="98"<br />
for i in $fs<br />
do<br />
skip=0<br />
typeset -i used=`df -k $i|tail -n 1|awk '{print $5}'|cut -d "%" -f 1`<br />
if [ "$used" -ge "$warn" ]; then<br />
laconica.sh "1.2.3.4 server CRITICAL: filesystem $i is $used% full"<br />
fi<br />
if [ "$used" -ge "$thresh" -a "$used" -le "$warn" ]; then<br />
laconica.sh "1.2.3.4 server WARNING: filesystem $i is $used %full"<br />
fi<br />
done</code></p>
<p>I didn’t want to use cURL directly to talk to Laconi.ca so I downloaded laconica.sh from http://downloads.guillermoamaral.com/misc/laconica. Sure it uses cURL, but if I change a password no I can change it to this wrapper instead.</p>
<p>I saved the script as diskfull.sh. So lets first chmod it and then try it:</p>
<p><code>chmod 755 diskfull.sh<br />
./diskfull.sh</code></p>
<p>Laconi.ca gets an update as follows:</p>
<div id="attachment_75" class="wp-caption alignnone" style="width: 310px"><a href="http://rasilagarage.com/wp-content/uploads/2009/01/picture-3.png"><img class="size-medium wp-image-75" title="Laconi.ca bot in action" src="http://rasilagarage.com/wp-content/uploads/2009/01/picture-3-300x49.png" alt="Screenshot of Laconi.ca" width="300" height="49" /></a><p class="wp-caption-text">Screenshot of Laconi.ca</p></div>
<p>You would need schedule Cron to run the script. To do so, edit the /etc/crontab and add the following line:</p>
<p><code>31 8  * * *     root    /opt/diskfull.sh</code></p>
<p>This line will run it daily on 08:31 as root. You might want to change it. If you are not familiar with Cron <a href="http://guerrillatech.wordpress.com/2008/01/25/howto-use-cron-to-schedule-tasks/" onclick="pageTracker._trackPageview('/outgoing/guerrillatech.wordpress.com/2008/01/25/howto-use-cron-to-schedule-tasks/?referer=');">here is some help</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://rasilagarage.com/2009/01/how-to-write-a-simple-bot-that-updates-to-laconica/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Laconi.ca an Open Source Twitter clone behind a password and your firewall</title>
		<link>http://rasilagarage.com/2009/01/laconica-an-open-source-twitter-clone-behind-a-password-and-your-firewall/</link>
		<comments>http://rasilagarage.com/2009/01/laconica-an-open-source-twitter-clone-behind-a-password-and-your-firewall/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 10:11:17 +0000</pubDate>
		<dc:creator>Tuomas Rasila</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[laconi.ca]]></category>
		<category><![CDATA[twitterific]]></category>

		<guid isPermaLink="false">http://rasilagarage.com/?p=19</guid>
		<description><![CDATA[Not familiar with Twitter? Twitter is a free social networking and micro-blogging service that allows its users to send and read other users&#8217; updates (otherwise known as tweets), which are text-based posts of up to 140 characters in length. Twitter page on Wikipedia This post covers: Why I like Laconi.ca as our internal Micro-Blogging-service How [...]]]></description>
			<content:encoded><![CDATA[<p>Not familiar with Twitter?</p>
<blockquote><p>Twitter is a free social networking and micro-blogging service that allows its users to send and read other users&#8217; updates (otherwise known as tweets), which are text-based posts of up to 140 characters in length.<br />
<a href="http://en.wikipedia.org/wiki/Twitter" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Twitter?referer=');">Twitter page on Wikipedia</a>
</p></blockquote>
<p><strong>This post covers:</strong></p>
<ul>
<li>Why I like Laconi.ca as our internal Micro-Blogging-service</li>
<li>How to configure Laconi.ca behind password without breaking up the API functionality</li>
<li>How to set up Twitterific to work with custom Laconi.ca installation</li>
</ul>
<p><div id="attachment_31" class="wp-caption alignnone" style="width: 410px"><img src="http://rasilagarage.com/wp-content/uploads/2009/01/laconica-screenshot.jpg" alt="Laconi.ca in a browser &#038; Twitterific" title="Laconi.ca Screenshot" width="400" height="203" class="size-full wp-image-31" /><p class="wp-caption-text">Laconi.ca in a browser &#038; Twitterific</p></div><br />
<strong>Motivation</strong></p>
<p>Ok, Twitter is sweet, even a bit addictive, but not that useful in internal use of your business for couple of reasons:</p>
<ul>
<li>Privacy concerns; I know you don&#8217;t have to tweet everything in public but still; You might not want to trust any third parties</li>
<li>It is useful to have a possibility to customize your micro-blogging application, make backups and so on</li>
</ul>
<p>At first, Micro-blogging is like wiki in a way that it does not implement any kind of process. In Twitter the idea is &#8220;it&#8217;s a tool, use it as you like&#8221; This works well with Twitter.com, where all the users have their own reasons to use the service. In business however, the business has a goal and people are working to meet this goal for their common reason. Therefore a process, as loose as it might be, must be implemented.<br />
<span id="more-19"></span><br />
<strong>How and why it should be used</strong></p>
<p>We got Laconi.ca running to our office a few weeks ago. In our case we have two offices with a distance of 600 km to each other. Some people in our staff are working from home and someone is always on the road. We use Laconi.ca to keep on track where people are on what are they working with.</p>
<p>So we have two rules on how to use it:</p>
<ul>
<li>When you start to work, tell what you are going to work with</li>
<li>When you finish the day, tell when you are going to be back</li>
</ul>
<p>Nothing too complicated just two easy rules. In my opinion it works just great. Before getting Laconi.ca I made far more phone calls to people asking for these same basic questions.</p>
<p>We also have many bots updating to Laconi.ca from our project management systems, internal blog and errors &#038; warnings from servers. Generally I think you should not be worried about the amount of data because everyone doesn&#8217;t have to subscribe everything and everything does not have to be read by everyone. Still, having a possibility to subscribe a bot when needed is great.</p>
<p><strong>How to install Laconi.ca on Ubuntu and get it behind a password</strong></p>
<p>Laconi.ca installation guide can be found at <a href="http://laconi.ca/trac/wiki/Installation" onclick="pageTracker._trackPageview('/outgoing/laconi.ca/trac/wiki/Installation?referer=');">http://laconi.ca/trac/wiki/Installation</a></p>
<p>Getting Laconi.ca behind password is actually the simplest thing:</p>
<p>1) Just create .htaccess and .htpasswd file. If don&#8217;t know how <a href="http://www.javascriptkit.com/howto/htaccess3.shtml" onclick="pageTracker._trackPageview('/outgoing/www.javascriptkit.com/howto/htaccess3.shtml?referer=');">here is some help</a>.</p>
<p>2) Create the same users with the same passwords as you have in your Laconi.ca installation.</p>
<p><strong>How to make Twitterific to work with Laconi.ca</strong></p>
<p>Get <a href="http://iconfactory.com/software/twitterrific" onclick="pageTracker._trackPageview('/outgoing/iconfactory.com/software/twitterrific?referer=');">Twitterific</a></p>
<p>Open terminal and run:</p>
<p><code>defaults write com.iconfactory.Twitterrific baseUrl -string 'your-hostname/path-to-laconica/api'</code></p>
<p>The command to switch back is the following:</p>
<p><code>defaults write com.iconfactory.Twitterrific baseUrl -string 'twitter.com'</code></p>
<p>I found this tip from <a href="http://decafbad.com/blog/2008/07/18/using-twitterrific-with-identica" onclick="pageTracker._trackPageview('/outgoing/decafbad.com/blog/2008/07/18/using-twitterrific-with-identica?referer=');">Leslie Michael Orchard&#8217;s blog</a>, thank you Leslie!</p>
]]></content:encoded>
			<wfw:commentRss>http://rasilagarage.com/2009/01/laconica-an-open-source-twitter-clone-behind-a-password-and-your-firewall/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
