<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Another blog bites the dust</title>
	
	<link>http://eran.sandler.co.il</link>
	<description>Not biting dust since 2005</description>
	<lastBuildDate>Mon, 30 Aug 2010 13:51:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AnotherBlogBitesTheDust" /><feedburner:info uri="anotherblogbitesthedust" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item>
		<title>PPTP VPN on Ubuntu 10.04 for your iPhone / iPad</title>
		<link>http://feedproxy.google.com/~r/AnotherBlogBitesTheDust/~3/qKK1r0A_s0Y/</link>
		<comments>http://eran.sandler.co.il/2010/08/30/pptp-vpn-on-ubuntu-10-04-for-your-iphone-ipad/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 13:51:24 +0000</pubDate>
		<dc:creator>Eran Sandler</dc:creator>
				<category><![CDATA[Tips n' Tricks]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[10.04]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PPTP]]></category>
		<category><![CDATA[Tunneling]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://eran.sandler.co.il/?p=278</guid>
		<description>Below are the steps necessary to connect your iPhone / iPad or any other computer via a PPTP VPN. Why would I want to do this? For various reasons such as allow you to access information and servers that are behind a firewall, or maybe you just need to route traffic through different servers. I&amp;#8217;ve [...]</description>
			<content:encoded><![CDATA[<p>Below are the steps necessary to connect your iPhone / iPad or any other computer via a PPTP VPN.</p>
<p>Why would I want to do this? For various reasons such as allow you to access information and servers that are behind a firewall, or maybe you just need to route traffic through different servers.</p>
<p>I&#8217;ve tested this on a 256mb <a href="http://www.rackspacecloud.com/1431.html">Rackspace Cloud</a> instance running Ubuntu 10.04 and with an iPhone and an iPad. Thanks to <a href="http://yaniv.golan.name/blog/">Yaniv</a> for debugging the instructions.</p>
<p><strong>Disclaimer</strong>: This is for educational uses only and I take no responsibility as to what you may do with it. The PPTP VPN setup via the instructions below has no encryption and uses the simplest and lowest form of password authentication. If you require stricter encryption and authentication methods you&#8217;ll need to read more about pptpd configuration.</p>
<p><strong><span style="text-decoration: underline;">Assumptions:</span></strong></p>
<ul>
<li>The instance you are using is blank, specifically from firewall rules in iptables, otherwise, you&#8217;ll need to patch things up.</li>
<li>All commands assume you are current a root user. If you logged in as root, that&#8217;s great. If not, run:
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;"><span class="kw2">sudo</span> <span class="kw2">su</span></div>
</div>
</li>
<li>Instead of messing a lot with iptables commands, I&#8217;m using <a href="https://help.ubuntu.com/community/UFW">ufw</a> (Uncomplicated FireWall). In general, to most people, it will be easier to manage and work with.</li>
</ul>
<h1>Setting up the PPTP Server</h1>
<p>In general we are going to create a PPTP VPN that is very basic without encryption and with basic authentication security (not fancy authentication protocols). Since Rackspace Cloud instance has an external interface (eth0) that has the instance public IP and an internal interface (eth1) with an internal IP used to communicate with your other Rackspace Cloud server (if you have them), we&#8217;ll create an alias network interface card that will have some other set of internal ips, which will be given to the devices connected via the VPN.</p>
<ol>
<li>Install the necessary software (pptpd, pptp-linux, ppp and ufw &#8211; for firewall):
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;"><span class="kw2">apt-get</span> <span class="kw2">install</span> pptpd pptp-linux ppp ufw</div>
</div>
</li>
<li>Enable port 22 (ssh) in the firewall, so we don&#8217;t get locked out of our instance:
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">ufw allow <span class="nu0">22</span></div>
</div>
</li>
<li> Enable port 1723 (pptpd) in the firewall to enable access to the pptpd dameon:
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">ufw allow <span class="nu0">1723</span></div>
</div>
</li>
<li>Enable ufw:
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">ufw <span class="kw3">enable</span></div>
</div>
</li>
<li>Add an aliased network interface card (eth0:0): (We use the address space of 192.168.88.0/24 since its usually free for most networks for most users. You can feel free to change this address if it is already taken)<br />
Edit /etc/network/interfaces:</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;"><span class="kw2">nano</span> <span class="sy0">/</span>etc<span class="sy0">/</span>network<span class="sy0">/</span>interfaces</div>
</div>
<p>Enter the following text at the end of the file:</p>
<div class="codesnip-container" >
<div class="dos codesnip" style="font-family:monospace;">auto eth0:0<br />
iface eth0:0 inet static<br />
address 192.168.88.1<br />
netmask 255.255.255.0<br />
gateway <span class="br0">&#40;</span>same value as listed <a href="http://www.ss64.com/nt/for.html"><span class="kw1">for</span></a> eth0<span class="br0">&#41;</span><br />
dns-nameservers <span class="br0">&#40;</span>same value as listed <a href="http://www.ss64.com/nt/for.html"><span class="kw1">for</span></a> eth0<span class="br0">&#41;</span></div>
</div>
<p>Replace the value of &#8220;gateway&#8221; with the same value you will see in this file for &#8220;eth0&#8243;, the real public network interface.<br />
Replace the value of &#8220;dns-nameservers&#8221; with the same value you will see in this file for &#8220;eth0&#8243;</li>
<li>Configure the pptpd daemon:<br />
Edit /etc/ppp/pptpd-options:</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;"><span class="kw2">nano</span> <span class="sy0">/</span>etc<span class="sy0">/</span>ppp<span class="sy0">/</span>pptpd-options</div>
</div>
<p>Comment out (add a &#8220;#&#8221; char at the start of the line) the following lines:<br />
&#8220;refuse-pap&#8221;<br />
&#8220;refuse-chap&#8221;<br />
&#8220;refuse-mschap&#8221;<br />
&#8220;refuse-mschap-v2&#8243;<br />
&#8220;require-mppe-128&#8243;</p>
<p>replace &#8220;#ms-dns 10.0.0.1&#8243; with &#8220;ms-dns 8.8.8.8&#8243;<br />
replace &#8220;#ms-dns 10.0.0.2&#8243; with &#8220;ms-dns 4.4.4.4&#8243;</p>
<p>The last 2 lines above sets the DNS server the devices connecting to your PPTP VPN will use. The addresses above are for the <a href="http://code.google.com/speed/public-dns/">Google Public DNS</a> server, but can be any other DNS server (including the same DNS servers as Rackspace or your hosting provider use)</p>
<p>Edit /etc/pptpd.conf :</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;"><span class="kw2">nano</span> <span class="sy0">/</span>etc<span class="sy0">/</span>pptpd.conf</div>
</div>
<p>Add at the bottom of the file:</p>
<div class="codesnip-container" >localip 192.168.88.1<br />
remoteip 192.168.88.2-20</div>
<p>The value of &#8220;remoteip&#8221; will be the set of IP addresses the devices connecting to the VPN will get upon successful connection. Currently, we have here 18 addresses, which is enough for 18 concurrent devices. You can make this range bigger if needed.</li>
<li>Configure the username and password that will be used to authenticate client accessing the VPN:<br />
Edit /etc/ppp/chap-secrets:</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;"><span class="kw2">nano</span> <span class="sy0">/</span>etc<span class="sy0">/</span>ppp<span class="sy0">/</span>chap-secrets</div>
</div>
<div class="codesnip-container" ># client        server  secret                  IP addresses<br />
<strong>[UserName]</strong> pptpd   <strong>[Password]</strong> *</div>
<p>Replace [UserName] with the username you wish to use.<br />
Replace [Password] with the password you wish to use (I suggest a long random password. Try <a href="http://www.random.org/passwords/">this</a> generator)</li>
<li>Enable IP forwarding in the kernel:<br />
Edit /etc/sysctl.conf :</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;"><span class="kw2">nano</span> <span class="sy0">/</span>etc<span class="sy0">/</span>sysctl.conf</div>
</div>
<p>Uncomment the line &#8220;net.ipv4.ip_forward=1&#8243;<br />
For IPv6, uncomment &#8220;net.ipv6.conf.all.forwarding=1&#8243;</li>
<li>Enable IP forwarding in ufw:<br />
Edit /etc/default/ufw:</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;"><span class="kw2">nano</span> <span class="sy0">/</span>etc<span class="sy0">/</span>default<span class="sy0">/</span>ufw</div>
</div>
<p>Change the value of &#8220;DEFAULT_FORWARD_POLICY&#8221; from &#8220;DROP&#8221; to &#8220;ACCEPT&#8221;</li>
<li>Add IP masquerading rule in ufw, so that NAT will work and devices connecting to the VPN will be seen as if the traffic goes out of the VPN server:<br />
Edit /etc/ufw/before.rules:</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;"><span class="kw2">nano</span> <span class="sy0">/</span>etc<span class="sy0">/</span>ufw<span class="sy0">/</span>before.rules</div>
</div>
<p>Paste the text below after the header and before the &#8220;*filter&#8221; rules:</p>
<div class="codesnip-container" ># nat Table rules<br />
*nat<br />
:POSTROUTING ACCEPT [0:0]</p>
<p># Allow forward traffic from eth0:0 to eth0<br />
-A POSTROUTING -s 192.168.88.0/24 -o eth0 -j MASQUERADE</p>
<p># don&#8217;t delete the &#8216;COMMIT&#8217; line or these nat table rules won&#8217;t be processed<br />
COMMIT</p></div>
</li>
<li>Reboot the machine, cross your fingers and hope for the best :-)</li>
</ol>
<h1>Configuring your iPhone / iPad</h1>
<ol>
<li>In your iPhone / iPad go to &#8220;Settings&#8221; -&gt; &#8220;General&#8221; -&gt; &#8220;Network&#8221; -&gt; &#8220;VPN&#8221;<br />
<img class="alignright" style="border: 2px solid black;" title="PPTP VPN Configuration" src="http://eran.sandler.co.il/wp-content/uploads/2010/08/photo-200x300.png" alt="PPTP VPN Configuration" width="160" height="240" /></li>
<li>Select &#8220;Add VPN Configuration&#8221;</li>
<li>Select &#8220;PPTP&#8221;</li>
<li>In &#8220;Description&#8221; enter the name of the VPN connection</li>
<li>In &#8220;Server&#8221; enter the IP address of the server (or a server name, if you mapped the server&#8217;s IP address to a domain name)</li>
<li>In &#8220;Account&#8221; enter the username you have entered into the &#8220;/etc/ppp/chap-secrets&#8221; file</li>
<li>In &#8220;Password&#8221; enter the password you entered for the above username in &#8220;/etc/ppp/chap-secrets&#8221;</li>
<li>Make sure &#8220;Send All Traffic&#8221; is turned to &#8220;ON&#8221;</li>
<li>Set &#8220;Encryption Level&#8221; to &#8220;None&#8221; (this is how we configured the PPTP server in this post, if you setup an encryption try to keep it in &#8220;Auto&#8221;</li>
<li>Select save</li>
</ol>
<p><a href="http://eran.sandler.co.il/wp-content/uploads/2010/08/photo.png"></a></p>
<div><span style="color: #0000ee; -webkit-text-decorations-in-effect: underline;"><br />
</span></div>

<p><a href="http://feedads.g.doubleclick.net/~a/DGiH48QqQk17ry0YwKBGv2K2kws/0/da"><img src="http://feedads.g.doubleclick.net/~a/DGiH48QqQk17ry0YwKBGv2K2kws/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/DGiH48QqQk17ry0YwKBGv2K2kws/1/da"><img src="http://feedads.g.doubleclick.net/~a/DGiH48QqQk17ry0YwKBGv2K2kws/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=qKK1r0A_s0Y:ndMFGmAu32s:VmDNsTJpR-U"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=VmDNsTJpR-U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=qKK1r0A_s0Y:ndMFGmAu32s:ywP3isDd3gE"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=ywP3isDd3gE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=qKK1r0A_s0Y:ndMFGmAu32s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=qKK1r0A_s0Y:ndMFGmAu32s:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=qKK1r0A_s0Y:ndMFGmAu32s:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=qKK1r0A_s0Y:ndMFGmAu32s:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=qKK1r0A_s0Y:ndMFGmAu32s:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=qKK1r0A_s0Y:ndMFGmAu32s:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=qKK1r0A_s0Y:ndMFGmAu32s:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=dnMXMwOfBR0" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://eran.sandler.co.il/2010/08/30/pptp-vpn-on-ubuntu-10-04-for-your-iphone-ipad/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://eran.sandler.co.il/2010/08/30/pptp-vpn-on-ubuntu-10-04-for-your-iphone-ipad/</feedburner:origLink></item>
		<item>
		<title>Varnish High, Ever increasing CPU usage workaround</title>
		<link>http://feedproxy.google.com/~r/AnotherBlogBitesTheDust/~3/Zd31GaZMOVk/</link>
		<comments>http://eran.sandler.co.il/2010/05/26/varnish-high-ever-increasing-cpu-usage-workaround/#comments</comments>
		<pubDate>Wed, 26 May 2010 08:40:47 +0000</pubDate>
		<dc:creator>Eran Sandler</dc:creator>
				<category><![CDATA[Tips n' Tricks]]></category>
		<category><![CDATA[Caching]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[high cpu]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[Varnish]]></category>
		<category><![CDATA[workaround]]></category>

		<guid isPermaLink="false">http://eran.sandler.co.il/?p=241</guid>
		<description>If you are using Varnish version &amp;#62;= 2.1 and experiencing an ever increasing CPU usage up to a point where you need to restart the service to force CPU usage to drop you may want to add the &amp;#8220;-h classic&amp;#8221; argument to the command line. This will revert to use the older hashing method instead [...]</description>
			<content:encoded><![CDATA[<p>If you are using <a href="http://varnish-cache.org">Varnish</a> version &gt;= 2.1 and experiencing an ever increasing CPU usage up to a point where you need to restart the service to force CPU usage to drop you may want to add the &#8220;-h classic&#8221; argument to the command line.</p>
<p>This will revert to use the older hashing method instead of the newer &#8220;critbit&#8221; that was first introduced in version 2.1.</p>
<p>You can read a little bit more about it on the <a href="http://devblog.yedda.com/index.php/2010/05/26/varnish-2-1-ever-increasing-high-cpu-over-time-workaround/">Yedda Dev Blog</a>.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/hYh5MJtK6KhNjdewiDMVppa780s/0/da"><img src="http://feedads.g.doubleclick.net/~a/hYh5MJtK6KhNjdewiDMVppa780s/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/hYh5MJtK6KhNjdewiDMVppa780s/1/da"><img src="http://feedads.g.doubleclick.net/~a/hYh5MJtK6KhNjdewiDMVppa780s/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Zd31GaZMOVk:b19IRUT_fu8:VmDNsTJpR-U"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=VmDNsTJpR-U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Zd31GaZMOVk:b19IRUT_fu8:ywP3isDd3gE"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=ywP3isDd3gE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Zd31GaZMOVk:b19IRUT_fu8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Zd31GaZMOVk:b19IRUT_fu8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=Zd31GaZMOVk:b19IRUT_fu8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Zd31GaZMOVk:b19IRUT_fu8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Zd31GaZMOVk:b19IRUT_fu8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=Zd31GaZMOVk:b19IRUT_fu8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Zd31GaZMOVk:b19IRUT_fu8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=dnMXMwOfBR0" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://eran.sandler.co.il/2010/05/26/varnish-high-ever-increasing-cpu-usage-workaround/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://eran.sandler.co.il/2010/05/26/varnish-high-ever-increasing-cpu-usage-workaround/</feedburner:origLink></item>
		<item>
		<title>Disco Tip – Crunching web server logs</title>
		<link>http://feedproxy.google.com/~r/AnotherBlogBitesTheDust/~3/332kVbz23Rw/</link>
		<comments>http://eran.sandler.co.il/2010/03/21/disco-tip-crunching-web-server-logs/#comments</comments>
		<pubDate>Sun, 21 Mar 2010 13:22:57 +0000</pubDate>
		<dc:creator>Eran Sandler</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Disco]]></category>
		<category><![CDATA[Tips n' Tricks]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[MapReduce]]></category>
		<category><![CDATA[Processing Log Files]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://eran.sandler.co.il/?p=224</guid>
		<description>At my day job we use Disco, a Python + Erlang based Map-Reduce framework, to crunch our web servers and application logs to generate useful data. Each web server log file per day is a couple of GB of data which can amount to a lot of log data that needs to be processed on a daily. [...]</description>
			<content:encoded><![CDATA[<div>
<p>At my <a href="http://yedda.com">day job</a> we use <a href="http://discoproject.org">Disco</a>, a Python + Erlang based Map-Reduce framework, to crunch our web servers and application logs to generate useful data.<img class="alignright" title="discoball" src="http://eran.sandler.co.il/wp-content/uploads/2010/03/discoball.png" alt="" width="90" height="120" /></p>
<p>Each web server log file per day is a couple of GB of data which can amount to a lot of log data that needs to be processed on a daily.</p>
<p>Since the files are big it was easier for us to perform all the necessary filtering of find the rows of interest in the &#8220;map&#8221; function. The problem is, that it requires us to return some generic null value for rows that are not interesting for us. This causes the intermediate files to contains a lot of unnecessary data that has the mapping of our uninteresting rows.</p>
<p>To significantly reduce this number, we have started to use the &#8220;combiner&#8221; function so that our intermediate results contains an already summed up result of the file the node is currently processing that is composed only from the rows we found interesting using the filtering in the &#8220;map&#8221; phase.</p>
<p>For example, if we have 1,000 rows and only 200 answer a certain filtering criteria for a particular report, instead of getting 1,000 rows in the intermediate file out of which 800 have the same null value, we now get only 200 rows.</p>
<p>In some cases we saw an increase of up to 50% in run time (the increase in speed is the result of reducing less rows from the intermediate files), not to mention a reduction in disk space use during execution due to the smaller intermediate files.</p>
<p>That way, we can keep the filtering logic in the &#8220;map&#8221; function while making sure we don&#8217;t end up reducing unnecessary data.</p>
</div>

<p><a href="http://feedads.g.doubleclick.net/~a/LXXQp_7l_xizLGepysYexMejn2A/0/da"><img src="http://feedads.g.doubleclick.net/~a/LXXQp_7l_xizLGepysYexMejn2A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/LXXQp_7l_xizLGepysYexMejn2A/1/da"><img src="http://feedads.g.doubleclick.net/~a/LXXQp_7l_xizLGepysYexMejn2A/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=332kVbz23Rw:FB9zbk52bc8:VmDNsTJpR-U"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=VmDNsTJpR-U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=332kVbz23Rw:FB9zbk52bc8:ywP3isDd3gE"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=ywP3isDd3gE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=332kVbz23Rw:FB9zbk52bc8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=332kVbz23Rw:FB9zbk52bc8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=332kVbz23Rw:FB9zbk52bc8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=332kVbz23Rw:FB9zbk52bc8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=332kVbz23Rw:FB9zbk52bc8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=332kVbz23Rw:FB9zbk52bc8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=332kVbz23Rw:FB9zbk52bc8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=dnMXMwOfBR0" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://eran.sandler.co.il/2010/03/21/disco-tip-crunching-web-server-logs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://eran.sandler.co.il/2010/03/21/disco-tip-crunching-web-server-logs/</feedburner:origLink></item>
		<item>
		<title>Ubuntu 9.10 Karmic Koala and ies4linux – Installation</title>
		<link>http://feedproxy.google.com/~r/AnotherBlogBitesTheDust/~3/WcV2RDnmsp0/</link>
		<comments>http://eran.sandler.co.il/2009/12/30/ubuntu-9-10-karmic-koala-and-ies4linux-installation/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 09:01:44 +0000</pubDate>
		<dc:creator>Eran Sandler</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tips n' Tricks]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[IE 4 Linux]]></category>
		<category><![CDATA[IE for Linux]]></category>
		<category><![CDATA[ie4linux]]></category>
		<category><![CDATA[ies4linux]]></category>
		<category><![CDATA[karmic koala]]></category>
		<category><![CDATA[ubuntu 9.10]]></category>

		<guid isPermaLink="false">http://eran.sandler.co.il/?p=219</guid>
		<description>Installing ies4linux on Ubuntu 9.10 Karmic Koala by just running &amp;#8220;./ies4linux&amp;#8221; might show some warnings such as: IEs4Linux 2 is developed to be used with recent Wine versions (0.9.x). It seems that you are using an old version. It’s recommended that you update your wine to the latest version (Go to: winehq.com). In my case [...]</description>
			<content:encoded><![CDATA[<p>Installing <a href="http://www.tatanka.com.br/ies4linux/page/Main_Page">ies4linux</a> on Ubuntu 9.10 Karmic Koala by just running &#8220;./ies4linux&#8221; might show some warnings such as:</p>
<blockquote><p>IEs4Linux 2 is developed to be used with recent Wine versions (0.9.x). It seems that you are using an old version. It’s recommended that you update your wine to the latest version (Go to: winehq.com).</p></blockquote>
<p>In my case it showed the above text, which seems to be a warning, and run the UI but then got stuck and didn&#8217;t complete anything.</p>
<p>To overcome this issue simply run the installation without the GTK based UI in a terminal window:</p>
<blockquote><p>./ies4linux &#8211;no-gui</p></blockquote>
<p>That&#8217;s it. Works like a charm.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/FjaccYZqXe977QaQyMsbwEt6-1A/0/da"><img src="http://feedads.g.doubleclick.net/~a/FjaccYZqXe977QaQyMsbwEt6-1A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/FjaccYZqXe977QaQyMsbwEt6-1A/1/da"><img src="http://feedads.g.doubleclick.net/~a/FjaccYZqXe977QaQyMsbwEt6-1A/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=WcV2RDnmsp0:m6T_Az2auYo:VmDNsTJpR-U"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=VmDNsTJpR-U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=WcV2RDnmsp0:m6T_Az2auYo:ywP3isDd3gE"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=ywP3isDd3gE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=WcV2RDnmsp0:m6T_Az2auYo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=WcV2RDnmsp0:m6T_Az2auYo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=WcV2RDnmsp0:m6T_Az2auYo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=WcV2RDnmsp0:m6T_Az2auYo:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=WcV2RDnmsp0:m6T_Az2auYo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=WcV2RDnmsp0:m6T_Az2auYo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=WcV2RDnmsp0:m6T_Az2auYo:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=dnMXMwOfBR0" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://eran.sandler.co.il/2009/12/30/ubuntu-9-10-karmic-koala-and-ies4linux-installation/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://eran.sandler.co.il/2009/12/30/ubuntu-9-10-karmic-koala-and-ies4linux-installation/</feedburner:origLink></item>
		<item>
		<title>Message in a bottle</title>
		<link>http://feedproxy.google.com/~r/AnotherBlogBitesTheDust/~3/z7Za18fNAIE/</link>
		<comments>http://eran.sandler.co.il/2009/12/22/message-in-a-bottle/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 15:23:27 +0000</pubDate>
		<dc:creator>Eran Sandler</dc:creator>
				<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[startups]]></category>

		<guid isPermaLink="false">http://eran.sandler.co.il/?p=208</guid>
		<description>Launching a startup is like sending a message in a bottle. If the message is not clear, no one will come to visit your lonely island or send you a postcard back. When you launch your startup, your online presence (i.e. website, twitter account, facebook page, etc) and the buzz you manage to create online via the online official [...]</description>
			<content:encoded><![CDATA[<p>Launching a startup is like sending a message in a bottle. If the message is not clear, no one will come to visit your lonely island or send you a postcard back.<a href="http://www.flickr.com/photos/kraftwerckk/2967546108/"><img class="alignright" title="Message in a bottle" src="http://farm4.static.flickr.com/3285/2967546108_b68655f652_m.jpg" alt="Message in a bottle" width="173" height="130" /></a></p>
<p>When you launch your startup, your online presence (i.e. website, twitter account, facebook page, etc) and the buzz you manage to create online via the online official and unofficial press are the message you are passing to your users. If the message is not clear you can lose a lot of attention.</p>
<p>Before launching your startup you might want to test your messaging. I propose two very simple tests that can serve as rather good markers to determine if your message is clear.</p>
<p><strong><span style="text-decoration: underline;">Tests Rules:</span></strong></p>
<ul>
<li>Each of the tests should be given to 2 different people</li>
<li>These people should have no prior knowledge of your startup and what it does</li>
<li>One person should be a Non-Techie &#8211; someone not from the tech industry who is known to have little to no technical background. The other should be a Techie &#8211; someone from the tech industry that can eventually ask a question along the lines of &#8220;How are you going to implement this?&#8221; and understand the answer.</li>
<li>Each test should have a different set of people, you cannot reuse people from one test in the other test.</li>
</ul>
<p><strong><span style="text-decoration: underline;">Test #1 &#8211; One sentence or less (or the 140 character pitch)</span></strong></p>
<p>Tell each of the 2 people in one sentence or less what your startup does. If they don&#8217;t ask for additional clarification then you can consider that your message is rather clear. If they don&#8217;t ask for additional clarification, but are rather intrigued by your startup and message you can safely assume your message is clear enough and your startup does interest them.</p>
<p><strong><span style="text-decoration: underline;">Test #2 &#8211; The blind website test</span></strong></p>
<p>Show your website to the 2 people without saying a word. Ask them to read what is written and explain to you what they think your startup is about. If they can explain it and understand completely what you are doing you can be certain enough that your web site message is clear even to new users who has no prior knowledge of what your startup does.</p>
<p>If you did not pass one of the test, try it again on a different set of people (just to make sure these 4 are not a statistical anomaly). If the result is still the same try to revise your messaging and, as always, remember to rinse and repeat.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/9431bkdppHV9kYFGQ7qm-u5oPM0/0/da"><img src="http://feedads.g.doubleclick.net/~a/9431bkdppHV9kYFGQ7qm-u5oPM0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/9431bkdppHV9kYFGQ7qm-u5oPM0/1/da"><img src="http://feedads.g.doubleclick.net/~a/9431bkdppHV9kYFGQ7qm-u5oPM0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=z7Za18fNAIE:rOZpMPyDKwo:VmDNsTJpR-U"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=VmDNsTJpR-U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=z7Za18fNAIE:rOZpMPyDKwo:ywP3isDd3gE"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=ywP3isDd3gE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=z7Za18fNAIE:rOZpMPyDKwo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=z7Za18fNAIE:rOZpMPyDKwo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=z7Za18fNAIE:rOZpMPyDKwo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=z7Za18fNAIE:rOZpMPyDKwo:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=z7Za18fNAIE:rOZpMPyDKwo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=z7Za18fNAIE:rOZpMPyDKwo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=z7Za18fNAIE:rOZpMPyDKwo:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=dnMXMwOfBR0" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://eran.sandler.co.il/2009/12/22/message-in-a-bottle/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://eran.sandler.co.il/2009/12/22/message-in-a-bottle/</feedburner:origLink></item>
		<item>
		<title>Don Dodge, Google and Developers Evangelism</title>
		<link>http://feedproxy.google.com/~r/AnotherBlogBitesTheDust/~3/pGTrr8o8Yp0/</link>
		<comments>http://eran.sandler.co.il/2009/11/16/don-dodge-google-and-developers-evangelism/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 20:57:20 +0000</pubDate>
		<dc:creator>Eran Sandler</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Developers Evangelism]]></category>
		<category><![CDATA[Don Dodge]]></category>
		<category><![CDATA[MSDN]]></category>
		<category><![CDATA[MVP]]></category>
		<category><![CDATA[Software Evangelism]]></category>

		<guid isPermaLink="false">http://eran.sandler.co.il/?p=193</guid>
		<description>I was just reading over at TechCrunch about Google quickly hiring Don Dodge after he was let go from Microsoft. It seems Don will be doing what he used to do at Microsoft &amp;#8211; Developer Evangelism (good for him, and Google!). I&amp;#8217;m very happy to see that Google is putting their stock options and cash [...]</description>
			<content:encoded><![CDATA[<p>I was just reading over at <a href="http://www.techcrunch.com/">TechCrunch</a> about <a href="http://www.techcrunch.com/2009/11/15/microsofts-loss-googles-gain-don-dodge-gets-a-new-job/">Google quickly hiring Don Dodge</a> after he was let go from Microsoft. It seems Don will be doing what he used to do at Microsoft &#8211; Developer Evangelism (good for him, and Google!).</p>
<p>I&#8217;m very happy to see that Google is putting their stock options and cash where their mouth is to evangelize their APIs, platforms (Android, AppEngine) and tools to developers.</p>
<p>A while back I wrote about the <a href="http://eran.sandler.co.il/2007/05/28/google-israel-where-art-thou-in-the-development-community/">lack of Google&#8217;s outreach in the Israeli developers community</a>, and it is still very visible in Israel by the jobs listings as well as various events and conventions that Microsoft Technology still dominates the Israeli high-tech software scene.</p>
<p>I do hope that hiring Don Dodge and keep on releasing tools, SDKs, Platforms and even languages such as the new <a href="http://golang.org">Go</a> programming language, to create the necessary diversification that every monopolized field needs.</p>
<p>I just hope that Google will start to do more than just very simple and shallow Dev Days in Israel and will start reaching out the community, specifically in Israel. I would like to see a Google I/O event in Israel and may be a couple of smaller events that dig down into code and details in a more intimate scenario with less people.</p>
<p>In general I would expect Google to start evangelizing in other countries and start having evangelists in every country they have an office. I would suggest Google to learn a bit from <a href="http://msnd.microsoft.com">MSDN</a> as well as the <a href="http://en.wikipedia.org/wiki/Microsoft_Most_Valuable_Professional">Microsoft Valued Professional (MVP) program</a> &#8211; these tools are one of the best examples of creating a community based on core leaders that can drive the community as well as Google straight up.</p>
<p>Google is still light years from reaching the well oiled, well organized Microsoft evangelism machine and I hope Don and other will be able to make big leaps to close that gap.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/bNrWdY91clh0IhZ4KRFlFlf0rQg/0/da"><img src="http://feedads.g.doubleclick.net/~a/bNrWdY91clh0IhZ4KRFlFlf0rQg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/bNrWdY91clh0IhZ4KRFlFlf0rQg/1/da"><img src="http://feedads.g.doubleclick.net/~a/bNrWdY91clh0IhZ4KRFlFlf0rQg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=pGTrr8o8Yp0:-t_Vgb7_MF4:VmDNsTJpR-U"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=VmDNsTJpR-U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=pGTrr8o8Yp0:-t_Vgb7_MF4:ywP3isDd3gE"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=ywP3isDd3gE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=pGTrr8o8Yp0:-t_Vgb7_MF4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=pGTrr8o8Yp0:-t_Vgb7_MF4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=pGTrr8o8Yp0:-t_Vgb7_MF4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=pGTrr8o8Yp0:-t_Vgb7_MF4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=pGTrr8o8Yp0:-t_Vgb7_MF4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=pGTrr8o8Yp0:-t_Vgb7_MF4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=pGTrr8o8Yp0:-t_Vgb7_MF4:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=dnMXMwOfBR0" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://eran.sandler.co.il/2009/11/16/don-dodge-google-and-developers-evangelism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://eran.sandler.co.il/2009/11/16/don-dodge-google-and-developers-evangelism/</feedburner:origLink></item>
		<item>
		<title>New programming languages forces you to re-think a problem in a fresh way (or why do we need new programming languages. always.)</title>
		<link>http://feedproxy.google.com/~r/AnotherBlogBitesTheDust/~3/Qdd_-pqQFDA/</link>
		<comments>http://eran.sandler.co.il/2009/11/13/new-programming-languages-forces-you-to-re-think-a-problem-in-a-fresh-way-or-why-do-we-need-new-programming-languages-always/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 22:26:01 +0000</pubDate>
		<dc:creator>Eran Sandler</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[Computer Sciences]]></category>
		<category><![CDATA[CS]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://eran.sandler.co.il/?p=187</guid>
		<description>Whenever a new programming language appears some claim its the best thing since sliced bread (tm &amp;#8211; not mine ;-) ), other claim its the worst thing that can happen and you can implement everything that the language provides in programming language X (assign X to your favorite low level programming language and append a [...]</description>
			<content:encoded><![CDATA[<p>Whenever a new programming language appears some claim its the best thing since sliced bread (tm &#8211; not mine ;-) ), other claim its the worst thing that can happen and you can implement everything that the language provides in programming language X (assign X to your favorite low level programming language and append a suitable library).</p>
<p>After seeing Google&#8217;s new <a href="http://golang.org/">Go</a> programming language I must say I&#8217;m excited. Not because its from Google and it got a huge buzz around the net. I am excited about the fact that people decided to think differently before they went on and created Go.</p>
<p>I&#8217;m reading <a href="http://www.amazon.com/gp/product/0596515170?ie=UTF8&amp;tag=advancenetdeb-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0596515170">Masterminds of Programming: Conversations with the Creators of Major Programming Languages</a> (a good read for any programming language fanaticos) which is a set of interviews with various programming languages creators and its very interesting to see the thoughts and processes behind a couple of the most widely used programming languages (and even some non-so-widely-used programming languages).</p>
<p>In a recent <a href="http://blogoscoped.com/archive/2009-11-07-n67.html">interview</a> Brad Fitzpatrick (of LiveJournal fame and now a Google employee) was asked:</p>
<blockquote><p>You’ve done a lot of work in Perl, which is a pretty high-level language. How low do you think programmers need to go – do programmers still need to know assembly and how chips work?</p></blockquote>
<p>To which he replied:</p>
<blockquote><p>&#8230; I see people that are really smart – I would say they’re good programmers – but say they only know Java. The way they think about solving things is always within the space they know. They don’t think ends-to-ends as much. I think it’s really important to know the whole stack even if you don’t operate within the whole stack.</p></blockquote>
<p>I subscribe to Brad&#8217;s point of view because   a) you need to know your stack from end to end &#8211; from the metals in your servers (i.e. server configuration), the operating system internals to the data structures used in your code and   b) you need to know more than one programming language to open up your mind to different ways of implementing a solution to a problem.</p>
<p><a href="http://www.perl.org/">Perl</a> has regular expressions baked into the language making every Perl developer to think in pattern matching when performing string operations instead of writing tedious code of finding and replacing strings. Of course you can always use various find and replace methods, but the power and way of thinking of compiled pattern matching makes it much more accessible, powerful and useful.</p>
<p><a href="http://python.org">Python</a> has lists and dictionaries (using a VERY efficient hashtable implementation, at least in CPython) backed into the language because lists and dictionaries are very powerful data structures that can be used in a lot solutions to problems.</p>
<p>One of Go&#8217;s baked in features is concurrency support in the form of goroutines. Goroutines makes the use of multi-core systems very easy without the complexities that exists in multi-processing or multi-threading programming such as synchronization. This feature actually shares some ancestry with <a href="http://erlang.org">Erlang</a> (which by itself has a very unique syntax and vocabulary for scalable functional programming).</p>
<p>Every programming language brings something new to the table and a new way of looking at things and solving problems. That&#8217;s why its so special :-)</p>

<p><a href="http://feedads.g.doubleclick.net/~a/-4Iqzc0CtwqXjhRnPIAOOjjv_Lo/0/da"><img src="http://feedads.g.doubleclick.net/~a/-4Iqzc0CtwqXjhRnPIAOOjjv_Lo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/-4Iqzc0CtwqXjhRnPIAOOjjv_Lo/1/da"><img src="http://feedads.g.doubleclick.net/~a/-4Iqzc0CtwqXjhRnPIAOOjjv_Lo/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Qdd_-pqQFDA:RROg5D0rEsc:VmDNsTJpR-U"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=VmDNsTJpR-U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Qdd_-pqQFDA:RROg5D0rEsc:ywP3isDd3gE"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=ywP3isDd3gE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Qdd_-pqQFDA:RROg5D0rEsc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Qdd_-pqQFDA:RROg5D0rEsc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=Qdd_-pqQFDA:RROg5D0rEsc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Qdd_-pqQFDA:RROg5D0rEsc:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Qdd_-pqQFDA:RROg5D0rEsc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=Qdd_-pqQFDA:RROg5D0rEsc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=Qdd_-pqQFDA:RROg5D0rEsc:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=dnMXMwOfBR0" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://eran.sandler.co.il/2009/11/13/new-programming-languages-forces-you-to-re-think-a-problem-in-a-fresh-way-or-why-do-we-need-new-programming-languages-always/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://eran.sandler.co.il/2009/11/13/new-programming-languages-forces-you-to-re-think-a-problem-in-a-fresh-way-or-why-do-we-need-new-programming-languages-always/</feedburner:origLink></item>
		<item>
		<title>Google AppEngine – Python – issubclass() arg 1 must be a class</title>
		<link>http://feedproxy.google.com/~r/AnotherBlogBitesTheDust/~3/LF7IeRoGEZ0/</link>
		<comments>http://eran.sandler.co.il/2009/09/14/google-appengine-python-issubclass-arg-1-must-be-a-class/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 11:56:22 +0000</pubDate>
		<dc:creator>Eran Sandler</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google AppEngine]]></category>
		<category><![CDATA[Tips n' Tricks]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Python 2.6]]></category>
		<category><![CDATA[SDK]]></category>

		<guid isPermaLink="false">http://eran.sandler.co.il/2009/09/14/google-appengine-python-issubclass-arg-1-must-be-a-class/</guid>
		<description>If you are getting the error &amp;#8220;&amp;#8221;issubclass() arg 1 must be a class&amp;#8221;" with Google App Engine SDK for Python on Linux its probably because you are running Python 2.6 (and will probably happen to you when you run Ubuntu 9.04 &amp;#8211; 2.6 is the default there). Just run the dev server under python 2.5 [...]</description>
			<content:encoded><![CDATA[<p>If you are getting the error &#8220;&#8221;issubclass() arg 1 must be a class&#8221;" with Google App Engine SDK for Python on Linux its probably because you are running Python 2.6 (and will probably happen to you when you run Ubuntu 9.04 &#8211; 2.6 is the default there).</p>
<p>Just run the dev server under python 2.5 (i.e. python2.5 dev_appserver.py)</p>

<p><a href="http://feedads.g.doubleclick.net/~a/DecT4humjpUxQhwNlK28EuAdVVw/0/da"><img src="http://feedads.g.doubleclick.net/~a/DecT4humjpUxQhwNlK28EuAdVVw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/DecT4humjpUxQhwNlK28EuAdVVw/1/da"><img src="http://feedads.g.doubleclick.net/~a/DecT4humjpUxQhwNlK28EuAdVVw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=LF7IeRoGEZ0:kcpCzWLlTDw:VmDNsTJpR-U"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=VmDNsTJpR-U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=LF7IeRoGEZ0:kcpCzWLlTDw:ywP3isDd3gE"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=ywP3isDd3gE" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=LF7IeRoGEZ0:kcpCzWLlTDw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=LF7IeRoGEZ0:kcpCzWLlTDw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=LF7IeRoGEZ0:kcpCzWLlTDw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=LF7IeRoGEZ0:kcpCzWLlTDw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=LF7IeRoGEZ0:kcpCzWLlTDw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?i=LF7IeRoGEZ0:kcpCzWLlTDw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?a=LF7IeRoGEZ0:kcpCzWLlTDw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/AnotherBlogBitesTheDust?d=dnMXMwOfBR0" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://eran.sandler.co.il/2009/09/14/google-appengine-python-issubclass-arg-1-must-be-a-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://eran.sandler.co.il/2009/09/14/google-appengine-python-issubclass-arg-1-must-be-a-class/</feedburner:origLink></item>
		<item>
		<title>Error: “Operation could not be completed (error 0x000006d1)” when adding a Samba based network printer to Vista</title>
		<link>http://feedproxy.google.com/~r/AnotherBlogBitesTheDust/~3/j_kF2O3c0MM/</link>
		<comments>http://eran.sandler.co.il/2009/01/20/error-operation-could-not-be-completed-error-0x000006d1-when-adding-a-samba-based-network-printer-to-vista/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 19:19:37 +0000</pubDate>
		<dc:creator>Eran Sandler</dc:creator>
				<category><![CDATA[Tips n' Tricks]]></category>
		<category><![CDATA[0x000006d1]]></category>
		<category><![CDATA[network printer]]></category>
		<category><![CDATA[operation could not be completed]]></category>
		<category><![CDATA[samba]]></category>
		<category><![CDATA[samba printer]]></category>
		<category><![CDATA[Vista]]></category>

		<guid isPermaLink="false">http://eran.sandler.co.il/?p=172</guid>
		<description>If you are getting the following error while adding a Samba based network printer to Vista: Windows cannot connect to the printer. Operation could not be completed (error 0x000006d1). And you have a Samba server (version 3.0 and above) consider using the following technique to add the printer: Add a local printer (not a network [...]</description>
			<content:encoded><![CDATA[<p>If you are getting the following error while adding a Samba based network printer to Vista:</p>
<blockquote><p>Windows cannot connect to the printer. Operation could not be completed (error 0x000006d1).</p></blockquote>
<p>And you have a Samba server (version 3.0 and above) consider using the following technique to add the printer:</p>
<ul>
<li>Add a local printer (not a network one!)</li>
<li>Select &#8220;create a new port&#8221;</li>
<li>Select &#8220;Local port&#8221; as type of port</li>
<li>In the port name enter the printer&#8217;s SMB path, i.e. \\sambaserver\printer_name</li>
<li>Select the right driver</li>
</ul>
<p>That&#8217;s all. Works like a charm!</p>
<p>If you have an older version of Samba (&lt; 3.0) know that Vista uses NTLMv2 by default. Follow <a href="http://www.builderau.com.au/blogs/codemonkeybusiness/viewblogpost.htm?p=339270746">these instructions</a> to revert back to NTLMv1 by default (also true for regular shares).</p>
<p>Also note that since this is a local printer that prints to a print queue on the Samba server, you might not be able to delete print jobs that were completely sent to the Samba server print queue, since we essentially created a local queue.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/XWTJF94HSgWY-tAUPfJ8w037TYU/0/da"><img src="http://feedads.g.doubleclick.net/~a/XWTJF94HSgWY-tAUPfJ8w037TYU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/XWTJF94HSgWY-tAUPfJ8w037TYU/1/da"><img src="http://feedads.g.doubleclick.net/~a/XWTJF94HSgWY-tAUPfJ8w037TYU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=eT4RNqlz"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?d=1240" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=PxbOG5r3"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?d=1241" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=LGidAIC8"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=0z6nNtsP"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?i=0z6nNtsP" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=MOTqZ4lv"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?d=50" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=GFwEwsU5"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?i=GFwEwsU5" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=ximYFopF"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?d=43" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://eran.sandler.co.il/2009/01/20/error-operation-could-not-be-completed-error-0x000006d1-when-adding-a-samba-based-network-printer-to-vista/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://eran.sandler.co.il/2009/01/20/error-operation-could-not-be-completed-error-0x000006d1-when-adding-a-samba-based-network-printer-to-vista/</feedburner:origLink></item>
		<item>
		<title>“Unable to retrieve MSN Address Book” on Pidgin on Ubuntu / Debian?</title>
		<link>http://feedproxy.google.com/~r/AnotherBlogBitesTheDust/~3/Wo1BggTxET0/</link>
		<comments>http://eran.sandler.co.il/2009/01/12/unable-to-retrieve-msn-address-book-on-pidgin-on-ubuntu-debian/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 16:42:28 +0000</pubDate>
		<dc:creator>Eran Sandler</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Pidgin]]></category>
		<category><![CDATA[Tips n' Tricks]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Adium]]></category>
		<category><![CDATA[libpurple]]></category>
		<category><![CDATA[MSN]]></category>
		<category><![CDATA[msn-pecan]]></category>
		<category><![CDATA[Unable to retrieve MSN Address Book]]></category>

		<guid isPermaLink="false">http://eran.sandler.co.il/?p=166</guid>
		<description>Today I got the following error on Pidgin (I&amp;#8217;m running version 2.5.2 on Ubuntu 8.10 Intrepid Ibex) while it tried to connect to MSN: &amp;#8220;Unable to retrieve MSN Address Book&amp;#8221; After searching a bit I found this post by Gijs Nelissen which said to use a different MSN plugin for Pidgin called msn-pecan. I&amp;#8217;ll reiterate [...]</description>
			<content:encoded><![CDATA[<p>Today I got the following error on Pidgin (I&#8217;m running version 2.5.2 on Ubuntu 8.10 Intrepid Ibex) while it tried to connect to MSN:</p>
<blockquote><p>&#8220;Unable to retrieve MSN Address Book&#8221;</p></blockquote>
<p>After searching a bit I found <a href="http://www.lifelog.be/2009/01/12/pidgin-unable-to-retrieve-msn-address-list/">this post</a> by Gijs Nelissen which said to use a different MSN plugin for Pidgin called <a href="http://code.google.com/p/msn-pecan/downloads/list">msn-pecan</a>.</p>
<p>I&#8217;ll reiterate the instructions for those with Ubuntu / Debian:</p>
<ol>
<li>Close Pidgin (make sure the process is really down)</li>
<li>Run &#8220;apt-get install msn-pecan&#8221;</li>
<li>Start pidgin</li>
<li>Change your MSN account type from MSN to WLM</li>
<li>Reconnect</li>
</ol>
<p><span style="text-decoration: line-through;">I don&#8217;t know if this error affects other libpurple based multi-headed IMs (such as <a href="http://www.adiumx.com">Adium</a>)</span> (<strong>UPDATE:</strong> It appears this IS a libpurple issue &#8211; so Adium IS affected), however, the msn-pecan project has a Windows binary release as well as source release (if you care/need/want to compile it for Mac OS X or other Linux distributions).</p>

<p><a href="http://feedads.g.doubleclick.net/~a/giU2C-XPmKL8NiI0PAa4ax4p1c0/0/da"><img src="http://feedads.g.doubleclick.net/~a/giU2C-XPmKL8NiI0PAa4ax4p1c0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/giU2C-XPmKL8NiI0PAa4ax4p1c0/1/da"><img src="http://feedads.g.doubleclick.net/~a/giU2C-XPmKL8NiI0PAa4ax4p1c0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=OVlS1L8u"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?d=1240" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=kGkhrKxp"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?d=1241" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=MZ2MCrRD"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=vRpQkon8"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?i=vRpQkon8" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=LzCVpfXu"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?d=50" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=pj3dwoYf"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?i=pj3dwoYf" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?a=iqSgKeCI"><img src="http://feeds.feedburner.com/~f/AnotherBlogBitesTheDust?d=43" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://eran.sandler.co.il/2009/01/12/unable-to-retrieve-msn-address-book-on-pidgin-on-ubuntu-debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://eran.sandler.co.il/2009/01/12/unable-to-retrieve-msn-address-book-on-pidgin-on-ubuntu-debian/</feedburner:origLink></item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced)

Served from: eran.sandler.co.il @ 2010-09-06 13:27:55 -->
