<?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>alvarezp &#187; English</title>
	<atom:link href="http://blog.alvarezp.org/categorias/por-idioma/english/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.alvarezp.org</link>
	<description>cat &#62;&#62; /dev/blog</description>
	<lastBuildDate>Tue, 15 May 2012 07:36:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>When is a protocol a tunneling protocol?</title>
		<link>http://blog.alvarezp.org/2012/05/11/when-is-a-protocol-a-tunneling-protocol/</link>
		<comments>http://blog.alvarezp.org/2012/05/11/when-is-a-protocol-a-tunneling-protocol/#comments</comments>
		<pubDate>Fri, 11 May 2012 09:06:04 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Net-admin]]></category>
		<category><![CDATA[Notas]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=1605</guid>
		<description><![CDATA[This is a note on episode 102 of the fantastic-as-always Packet Pushers Podcast. Initially it was going to be destined for them and less than 140 characters long but I just couldn&#8217;t, so I started writing freely and all of this came up.
So, the whole episode is about analyzing if is MPLS tunneling. Maybe somebody [...]]]></description>
			<content:encoded><![CDATA[<p>This is a note on <a href="http://packetpushers.net/show-102-a-layer-of-indirection-is-mpls-tunneling/">episode 102</a> of the fantastic-as-always <a href="http://packetpushers.net/">Packet Pushers Podcast</a>. Initially it was going to be destined for them and less than 140 characters long but I just couldn&#8217;t, so I started writing freely and all of this came up.</p>
<p>So, the whole episode is about analyzing if is MPLS tunneling. Maybe somebody asked the question or maybe there is some disagreement in the industry.</p>
<p>I found it very interesting (and fun, as usual) but after listening to the show it got me thinking: it&#8217;s the wrong question. It&#8217;s not if MPLS is tunneling, but if MPLS *can be used for* tunneling.</p>
<p>So before going deeper I also have to say that I have never implemented MPLS; I have labbed it but that&#8217;s about it. I don&#8217;t consider myself to have enough foundations or experience as these guys. I hope not to shoot myself in the foot. With that said&#8230;</p>
<p>Tunneling is an application of encapsulation. Transport, multiplexing and delivery are other applications of encapsulation. Protocols encapsulate their payload. I see Ethernet as layer 2 &#8220;delivery&#8221;, IP as layer 3 &#8220;delivery&#8221; (or &#8220;transport&#8221; across multiple layer 2 domains), and 802.1Q as 1-factor multiplexing. I&#8217;m thinking TCP and UDP are 2-factor multiplexing.</p>
<p>I think we agree that IPv4 and IPv6 are network protocols, but you can create a tunnel with Hurricane Electric by setting the Protocol to 41 in IPv4, and without using GRE. The tunnel gets created by the way they are stacked and used.</p>
<p>So a valid question can be stated: am I setting up a tunnel when I start LDP and MPLS? So, from my point of view, the following are requirements for a tunnel to be made:</p>
<p>1. It is set up by or for a user outside of the domain of the transport network (even if the user is a network engineer in a data center). If I create a tunnel over the Internet, I&#8217;m the user outside of my ISP&#8217;s network. Note that I can tunnel over my own enterprise network; there is some interest in doing that and I&#8217;m the end user for that particular case. This takes away MPLS, but not MPLS VPN.</p>
<p>2. The tunnels created deliver the packet between two endpoints but neither of them are the final destination; or&#8230; well, technically yes, it can, but my point is that there is another endpoint higher in the OSI layers, even if it ends up being the same one. Once a packet gets delivered it gets decapsulated and further processed again for its delivery. Yes, Ethernet may fit here, but it doesn&#8217;t fit #1.</p>
<p>3. Two same or different delivery protocols with usually different address spaces are stacked onto each other. As such, there must be source and destination endpoint addresses endpoints in the encapsulated packet and in the lower-layer protocol. You may use the same address space, but most of the time it&#8217;s only a trick to get around some weird limitation. Oh, wait, just like tunnels! ;-)</p>
<p>So, by how it works, no protocol is a tunneling protocol (well, except maybe IPSec in tunnel mode). It&#8217;s only by what it was designed for that can be called a &#8220;tunneling protocol&#8221;.</p>
<p>Examples:<br />
* ICMP is not a tunneling protocol but it can be used to create tunnels.<br />
* Same for HTTP.<br />
* It can be said that GRE is a tunneling protocol, but it doesn&#8217;t work by creating tunnels, but by encapsulating packets and making it easy to layer a protocol on top of another.</p>
<p>Was MPLS designed to do tunnels?</p>
<p>Best regards.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2012/05/11/when-is-a-protocol-a-tunneling-protocol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>stats.gawk</title>
		<link>http://blog.alvarezp.org/2012/04/19/stats-gawk/</link>
		<comments>http://blog.alvarezp.org/2012/04/19/stats-gawk/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 04:14:11 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[Código]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Español]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Net-admin]]></category>
		<category><![CDATA[Notas]]></category>
		<category><![CDATA[Planet Gultij]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Tenía que ser un geek.]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=1578</guid>
		<description><![CDATA[$ cat bin/stats.gawk
#!/usr/bin/gawk -f

{
	d = $1 ~ /^[0-9]/;
}

d &#038;&#038; !f {
	M = $1;
	m = $1;
	f = 1;
}

d &#038;&#038; $1 > M {
	M = $1;
}

d &#038;&#038; $1 < m {
	m = $1;
}

d {
	c += 1;
	s += $1;
	ss += $1*$1;
}

END {
	OFS = "\t";
	a = s/c;
	print "cnt,min,max,sum,avg,stdev:", c, m, M, s, a, sqrt(ss/c-a**2);
}

Ejemplo de uso:


$ ls -s1 &#124; [...]]]></description>
			<content:encoded><![CDATA[<pre class="code">
$ cat bin/stats.gawk
#!/usr/bin/gawk -f

{
	d = $1 ~ /^[0-9]/;
}

d &#038;&#038; !f {
	M = $1;
	m = $1;
	f = 1;
}

d &#038;&#038; $1 > M {
	M = $1;
}

d &#038;&#038; $1 < m {
	m = $1;
}

d {
	c += 1;
	s += $1;
	ss += $1*$1;
}

END {
	OFS = "\t";
	a = s/c;
	print "cnt,min,max,sum,avg,stdev:", c, m, M, s, a, sqrt(ss/c-a**2);
}
</pre>
<p>Ejemplo de uso:
</pre>
<pre class="code">
$ ls -s1 | ./stats.gawk
cnt,min,max,sum,avg,stdev:	53	4	33064	78860	1487.92	6125.08
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2012/04/19/stats-gawk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tweaking Opera for safer Web browsing</title>
		<link>http://blog.alvarezp.org/2012/03/04/tweaking-opera-for-safer-web-browsing/</link>
		<comments>http://blog.alvarezp.org/2012/03/04/tweaking-opera-for-safer-web-browsing/#comments</comments>
		<pubDate>Sun, 04 Mar 2012 10:28:51 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Notas]]></category>
		<category><![CDATA[Opera browser]]></category>
		<category><![CDATA[Planet Gultij]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=1523</guid>
		<description><![CDATA[Sometimes I deeply hate the Opera browser, as with its RAM consumption behavior, but most of the times I just love it.
One of the reasons I do is because it allows me to pretty easily tweak my browsing safety.
There are several aspects to browsing safety. When working on your own computer the most important one [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes I deeply hate the <a href="http://www.opera.com/browser/">Opera browser</a>, as with <a href="http://blog.alvarezp.org/2011/07/14/the-ram-is-there-to-be-used-fallacy/">its RAM consumption behavior</a>, but most of the times I just love it.</p>
<p>One of the reasons I do is because it allows me to pretty easily tweak my browsing safety.</p>
<p>There are several aspects to browsing safety. When working on your own computer the most important one after having an updated browser is <a href="http://en.wikipedia.org/wiki/Javascript">JavaScript</a>.</p>
<p>JavaScript is really useful, as it allows you to make websites interactive, but it can be easily misused to do all kinds of bad stuff, from personal tracking to attacking <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC networks</a>, passing through personal information stealing, <a href="http://en.wikipedia.org/wiki/Cross-site_scripting">cross-site scripting</a>, <a href="http://en.wikipedia.org/wiki/Clickjacking">clickjacking</a>, etc., even if you use <a href="http://en.wikipedia.org/wiki/Linux">Linux</a>, <a href="http://en.wikipedia.org/wiki/Mac_OS">Mac OS</a> or any other non-<a href="http://en.wikipedia.org/wiki/Microsoft_Windows">Windows</a> operating system. Although not strictly necessary, most of the new browser-related attack vectors require JavaScript to work or be useful.</p>
<p><span id="more-1523"></span></p>
<p>People using <a href="http://en.wikipedia.org/wiki/Firefox">Firefox</a> rely on add-ons like <a href="http://en.wikipedia.org/wiki/NoScript">NoScript</a> to disable JavaScript, but Opera provides a surprisingly easy built-in interface to control JavaScript yourself.</p>
<div class="wp-caption alignright" style="width: 147px"><a href="http://blog.alvarezp.org/imagenes/opera-safer/f12-menu.png"><img alt="Quick Preferences menu" src="http://blog.alvarezp.org/imagenes/opera-safer/f12-menu.png" title="Quick Preferences menu" width="137" height="180" /></a><p class="wp-caption-text"><em>Quick Preferences</em> menu</p></div>
<p>What features of Opera do we need to use to make our browsing safer? </p>
<ul>
<li>We&#8217;ll use the easily-accessible global JavaScript toggle switch. You can see it by pressing F12.</li>
<li>We&#8217;ll use the global JavaScript restrictions defaults.</li>
<li>We&#8217;ll use the customizable per-domain &#8220;Site Preferences&#8221;, which include JavaScript toggling.</li>
<li>We&#8217;ll use the easy access for the per-domain &#8220;Site preferences&#8221;. The dialog, although available through the Tools menu, is also just a right-click away, using the &#8220;Edit site preferences&#8230;&#8221; context menu entry.</li>
</ul>
<h3>What&#8217;s my way of using this?</h3>
<div class="wp-caption alignleft" style="width: 230px"><a href="http://blog.alvarezp.org/imagenes/opera-safer/pref-adv-content-jsdis.png"><img alt="Preferences dialog, Advanced tab, Content section" src="http://blog.alvarezp.org/imagenes/opera-safer/pref-adv-content-jsdis.png" title="Preferences dialog, Advanced tab, Content section" width="220" height="153" /></a><p class="wp-caption-text"><em>Preferences</em> dialog, <em>Advanced</em> tab, <em>Content</em> section</p></div>
<p>Navigate to <em>Tools</em> » <em>Preferences&#8230;</em>, and in the <em>Advanced</em> tab choose <em>Content</em> from the list on the left. Enable JavaScript using the checkbox just to let the <em>JavaScript Options&#8230;</em> button get enabled. Clicking it will get you to the dialog shown.</p>
<div class="wp-caption alignright" style="width: 165px"><a href="http://blog.alvarezp.org/imagenes/opera-safer/js-options.png"><img alt="JavaScript options" src="http://blog.alvarezp.org/imagenes/opera-safer/js-options.png" title="JavaScript options" width="155" height="140" /></a><p class="wp-caption-text"><em>JavaScript</em> options</p></div>
<p>This dialog lets you configure the global JavaScript defaults. I do not like websites raising or lowering any windows, and surely not allow changing the status bar, as I want to trust the links appearing on it before clicking on anything.</p>
<p>Likewise, I don&#8217;t want websites detecting <a href="http://en.wikipedia.org/wiki/Context_menu">context menu</a> events, or at least not by default. Facebook is one site that detects right-clicking to prevent you from properly copying and pasting links. On the other hand, Google Maps extensively tweaks the context menu and gives you more options.</p>
<p>Also, I don&#8217;t like websites hiding the <a href="http://en.wikipedia.org/wiki/Address_bar">address bar</a>, at least not by default, as I like to check the URL of each and every website that I browse to. This is helpful to prevent <a href="http://en.wikipedia.org/wiki/Phishing">phishing</a> attacks.</p>
<p><strong>I disable pretty much everything by default.</strong> After setting it to your own liking click OK. Back in the <em>Preferences</em> window, uncheck <em>Enable JavaScript</em> to disable it back and finally click on OK.</p>
<p>You have just set the default JavaScript settings. You may feel this should be adjusted in the future, but let&#8217;s leave it like that for now.</p>
<p>Now, press F12. You will get a quick menu where you can globally enable or disable JavaScript quickly and easily, just in case you are in a hurry and can&#8217;t make it work for a specific website. It should be disabled because of what we just did. Leave it that way.</p>
<div class="wp-caption alignright" style="width: 123px"><a href="http://blog.alvarezp.org/imagenes/opera-safer/context-menu.png"><img alt="Context menu" src="http://blog.alvarezp.org/imagenes/opera-safer/context-menu.png" title="Context menu" width="113" height="180" /></a><p class="wp-caption-text"><em>Context</em> menu</p></div>
<p>Now, you should manually enable JavaScript to each site you actually trust. Let&#8217;s go to a site that uses JavaScript, say, <a href="http://www.google.com/ncr">Google</a>. You will notice Google works a bit different now. Let&#8217;s say you trust Google and you want to let pages from www.google.com to be able to use JavaScript. Right click on any text or blank area of the website and choose &#8220;Edit site preferences&#8230;&#8221;. This will take you to the &#8220;Site Preferences&#8221; dialog.</p>
<p>In the &#8220;Site Preferences&#8221; dialog you&#8217;ll find a text box for the site (or domain) you want to tweak. You may want to use the current domain or tweak it to use a broader domain.</p>
<div class="wp-caption alignleft" style="width: 230px"><a href="http://blog.alvarezp.org/imagenes/opera-safer/sitepref-scripting.png"><img alt="Site Preferences dialog, General tab" src="http://blog.alvarezp.org/imagenes/opera-safer/sitepref-scripting.png" title="Site Preferences dialog, General tab" width="220" height="112" /></a><p class="wp-caption-text"><em>Site Preferences</em> dialog, <em>General</em> tab</p></div>
<p>After choosing the domain, go to the Scripting tab. There you can &#8220;Enable JavaScript&#8221; only for that domain. When you enable JavaScript, the other 4 checkboxes default to the settings you chose in the <em>JavaScript Options</em> window, globally. You can change that too if you trust your site enough, or if the site requires it. I usually leave them unchecked.</p>
<p>Whenever you find a site that may not be working as expected, selectively enable JavaScript for that site only, but only if you trust it enough. &#8220;Enough&#8221; may have a different meaning for you or me. For some, it may be &#8220;enough&#8221; that the site doesn&#8217;t try to steal your information; others may want the site not to track them in any way (good luck with those, though).</p>
<h3>Caveat</h3>
<p>Some sites hired too few programmers (or too many potatoes) to code their sites and they work in weird ways without the proper JavaScript in place and don&#8217;t offer any kind of graceful degradation. For example, the online banking site I use does multifactor authentication that doesn&#8217;t work without JavaScript, so I selectively enabled it for that subdomain (www.somebank.com). However, the final login step gets sent to a different domain (say, loggedin.somebank.com), which uses JavaScript to redirect you to the dashboard page. Because the second domain doesn&#8217;t have JavaScript enabled yet, I can&#8217;t access it. Since I can&#8217;t access it, I can&#8217;t drop the context menu down to <em>Edit site preferences</em> for the second domain. This leaves me locked out of my online banking.</p>
<p>However, since the two domains are part of somebank.com, you can easily work around this chicken-and-egg problem by tweaking the &#8220;Site&#8221; textbox to remove the &#8220;www.&#8221; part and leave JavaScript enabled for the whole somebank.com domain. Voila!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2012/03/04/tweaking-opera-for-safer-web-browsing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>stail-notify.bash</title>
		<link>http://blog.alvarezp.org/2011/11/29/stail-notify-bash/</link>
		<comments>http://blog.alvarezp.org/2011/11/29/stail-notify-bash/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 04:42:28 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Español]]></category>
		<category><![CDATA[Gultij]]></category>
		<category><![CDATA[Net-admin]]></category>
		<category><![CDATA[Notas]]></category>
		<category><![CDATA[Planet Gultij]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Tenía que ser un geek.]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=1465</guid>
		<description><![CDATA[El siguiente script hace que cada línea nueva que aparezca en un archivo remoto, salte en mi pantalla como notificación.
Con pocas modificaciones se puede hacer lo mismo para un archivo local.
Se puede colocar el comando en el arranque de sesión, pero se va a bloquear para pedir la contraseña. Se recomienda tener acceso al servidor [...]]]></description>
			<content:encoded><![CDATA[<p>El siguiente script hace que cada línea nueva que aparezca en un archivo remoto, salte en mi pantalla como notificación.</p>
<p>Con pocas modificaciones se puede hacer lo mismo para un archivo local.</p>
<p>Se puede colocar el comando en el arranque de sesión, pero se va a bloquear para pedir la contraseña. Se recomienda tener acceso al servidor remoto por medio de claves públicas para que el agente de SSH automáticamente pida la contrafrase en pantalla.</p>
<p>Puesto que tail -f nunca debería salirse, tal vez sería conveniente agregar una línea después del SSH que mande una alerta de que concluyó el tail -f o de que falló la conexión con el servidor. Tal vez se pueda hacer revisando el código de retorno, pero hay que ver qué ruido le provoca el tubo.</p>
<p>Se puede modificar para que también el icono y la severidad de la notificación sean distintas, pero en mi caso no es necesario.</p>
<p>El comando podría fallar si la cadena a mostrar contiene comillas.</p>
<pre class="code">
#!/bin/bash

# stail-notify.bash
# Escrito por Octavio Alvarez.
# Licencia: <a href="http://en.wikipedia.org/wiki/WTFPL">WTFPL</a>

[ $# -lt 3 ] &#038;&#038; {
	echo "usage: "`basename $0`" &lt;user@host> &lt;file-to-tail> &lt;alert-title>"
	exit
}

ssh $1 "tail -n 0 -f "$2 | while read M D T ELSE; do notify-send -t 5000 -i dialog-warning -u critical "$3" "$ELSE"; done
</pre>
<p>Para usarlo, lo ejecutan así:</p>
<pre class="code">stail-notify.bash alvarezp@192.168.2.100 /var/log/messages "Alerta de Syslog"</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2011/11/29/stail-notify-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The &#8220;RAM is there to be used&#8221; fallacy</title>
		<link>http://blog.alvarezp.org/2011/07/14/the-ram-is-there-to-be-used-fallacy/</link>
		<comments>http://blog.alvarezp.org/2011/07/14/the-ram-is-there-to-be-used-fallacy/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 02:09:32 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Opera browser]]></category>
		<category><![CDATA[Queja]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=1403</guid>
		<description><![CDATA[There seems to be a common misconception around some user forums. Maybe you recall this phrase:
RAM is there to be used.
This phrase is true within a particular context. It is used to let the operating system cache as much disk as possible into RAM, as RAM is significantly faster than hard disks.
However, within the context [...]]]></description>
			<content:encoded><![CDATA[<p>There seems to be a common misconception around some user forums. Maybe you recall this phrase:</p>
<blockquote><p>RAM is there to be used.</p></blockquote>
<p>This phrase is true <em>within a particular context</em>. It is used to let the operating system cache as much disk as possible into RAM, as RAM is significantly faster than hard disks.</p>
<p>However, within the context of a user-space application it is actually a fallacy. Some users (and even some developers) don&#8217;t know much about the inner workings of their computers, and use this phrase outside of its proper context. What is worse, sometimes they don&#8217;t even care much about RAM consumption. They don&#8217;t care about memory leaks, or think that if memory leaking occurs only once, it&#8217;s fine. Or they think garbage-collected frameworks or languages will take care of everything by magic. Without knowing, they end up using the aforementioned phrase as the equivalent of:</p>
<blockquote><p>RAM is there to be <em>wasted</em>.</p></blockquote>
<p><span id="more-1403"></span><br />
There are some issues that may lead to actually feed this thought, leading them to think that an application actually should put as much information as needed in RAM, and that, sooner or later, &#8220;the OS will handle it efficiently&#8221;. Furthermore, that not doing this is just a performance sacrifice.</p>
<p>Consider the following (I&#8217;ll oversimplifying for the sake of easy explanation, but the model is true). On one hand:</p>
<ul>
<li>When an application requests for RAM and the OS <em>allocates</em> it, the memory is being reserved for its <strong>exclusive</strong> use until the application <em>frees</em> it. An application can not know (and should not know) if another application requires or requests RAM.</li>
<li>If physical RAM gets topped and there is swap space available in the system, the OS will move out some of the least used RAM <em>pages</em> out to swap space, be it a partition or a file. When the paged-out RAM in swap space is needed, it gets <em>swapped</em> with other least-used physical RAM pages. Both operations require hard disk activity. That&#8217;s what makes swapping inherently slow.</li>
<li>The operating system will always leave some (say, 50 MB) physical RAM unused, so it has RAM available to react to a system instability emergency.</li>
</ul>
<p>On the other hand:</p>
<ul>
<li>Operating systems use free physical memory to cache disk reads and writes, so when a disk sector is read multiple times, subsequent reads are read from RAM, which is much faster.</li>
<li>The OS will only cache disk reads/writes to free physical RAM, as it would be useless to &#8220;cache&#8221; disk to disk.</li>
<li>When an application requests for RAM, the OS will free RAM used by disk cache before allocating it to the requesting application. This operation doesn&#8217;t require disk activity if freeing up RAM-cached reads or flushed disk writes; however, it does require disk writes if freeing up unflushed RAM-buffered disk writes. Usually, the OS flushes cached disk writes when system is idle, so you don&#8217;t really notice it, and when the time comes, everything is already flushed.</li>
</ul>
<p>And last:</p>
<ul>
<li>Linux, report &#8220;resident RAM size&#8221; for a process as &#8220;physical RAM usage&#8221;. So if you measure your application RAM requirements, you should do it with your swap partitions disabled. Please enlighten me about how Windows reports RAM for a process.</li>
<li>Disk writes are usually slower than disk reads.</li>
</ul>
<p>The actual truth around this fallacy is &#8220;sure, the OS handles it, but you kill the disk cache and encourage memory swapping, <strong>slowing the whole system down, including your own application</strong>&#8220;. So yes, the system &#8220;takes care&#8221; of it, but it is actually recovering from the programmer&#8217;s mistake at the cost of overall, unnecessary, system slow down and potential instability.</p>
<p>So let&#8217;s analyze two scenarios taken out of my own experience. I repeat: I am oversimplifying. Use this as a model.</p>
<h3>Case 1: A browser caches on disk instead of RAM.</h3>
<p>You have a system with 2 GB of RAM, out of which you have 1 GB <em>free</em> (as in &#8220;maybe used by disk cache but surely available for applications&#8221;). You fire up a web browser that caches resources on disk (because it is faster than the Internet) and needs about 300 MB of RAM.</p>
<p>1000 &#8211; 300 &#8211; 50 = 650</p>
<p>You end up with about 650 MB of RAM for disk cache optimization and 50 MB of actual free physical RAM.</p>
<p>Whenever the browser needs a network resource it tries to load it up from disk. However, disk gets cached on RAM by the OS, so subsequent reads will be read out from RAM. Performance penalty it is barely noticeable.</p>
<p>If the browser wants to cache a newly-visited website, it will save it to disk. The OS will buffer the write to RAM so it will postpone it until the system is idle (when you are reading the website). Performance penalty it is barely noticeable.</p>
<p>Whenever another application reads from disk there is a high probability of hitting the cache because there is 650 MB of RAM available for this purpose. Even if missing the cache, whatever was read from disk will be cached in RAM for subsequent reading.</p>
<p>You, then, fire up a VM that requests 450 MB of RAM. The following occurs:</p>
<ul>
<li>The operating system frees up 450 MB of disk cache. Some of it requires writing, some not. This operation is only as slow as the disk-writes required for unflushed writes, so it&#8217;s not really <em>that</em> slow. Besides, the user somewhat expects it because he just commanded the PC to load up a VM.</li>
<li>There is no swapping at all. There is no need.</li>
<li>It finally allocates 450 MB to the VM.</li>
<li>The VM writes to that physical RAM allocated for it.</li>
</ul>
<p>There is still 200 MB available for disk caching, which the OS will try to efficiently use.</p>
<p>Now, the browser wants to load something from &#8220;disk cache&#8221;. There is some probability, higher than 0 of course, of hitting the cache and the OS serving the data directly from RAM. Let&#8217;s assume not: it was read from disk. The browser is still accelerating web surfing, as the local disk is still faster than the Internet. Furthermore, the OS will cache the object on RAM for subsequent access.</p>
<p>Of course, the VM continues running from RAM without ever needing of any kind of swapping or disk trashing. The system is fully responsive. The user knows (or should know) that if it wants to free up RAM it will close the VM or the browser.</p>
<h3>Case 2: A browser uses more RAM than it should, for caching.</h3>
<p>You have a system with 2 GB of RAM, out of which you have 1 GB <em>free</em> (as in &#8220;maybe used by disk cache but surely available for applications&#8221;). You fire up a web browser that could work really nice with 300 MB of RAM but instead caches everything up for the sake of speed and ends up using 600 MB of RAM.</p>
<p>1000 &#8211; 600 &#8211; 50 = 350</p>
<p>You end up with about 350 MB of RAM for disk cache optimization and 50 MB of actual free physical RAM.</p>
<p>Whenever the browser needs a network resource it loads it up from its own RAM allocation, so it is really fast. (It still has to load it first from disk if not previously available on RAM).</p>
<p>Whenever any other application reads from disk there is a lower probability of hitting the cache. In any case, the overall probability of the other applications of hitting the cache is lower, as memory is exclusively allocated for the web browser. This significantly increases the probability of accessing disk, which may lead to slow the whole system down.</p>
<p>Minimizing the browser <em>does not</em> free memory for other applications. Memory is still being allocated for exclusive use by it.</p>
<p>You, then, fire up a VM that requests for 450 MB of RAM. The following occurs:</p>
<ul>
<li>The operating system frees up 350 MB of disk cache. Some of it requires writing, some not. This operation is only as slow as the disk-writes required, so it&#8217;s not really that slow.</li>
<li>It determines the least used 100 MB of physical RAM and moves it out to swap space. This operation is slow, as it involves a lot of unavoidable on-the-fly disk writes.</li>
<li>It finally allocates 450 MB to the VM application.</li>
<li>The VM writes to that physical RAM allocated for it.</li>
</ul>
<p>The system has no memory for disk cache anymore. Whenever other applications need to read from disk, they will miss the cache and the OS will have to physically access the disk to serve the request. This is slow. What is worse, the disk access will not be cached for subsequent reading.</p>
<p>Now, the browser wants to load something from its own &#8220;RAM cache&#8221; (which, by the way, may probably be out in swap space, now). It may happen one of two things:</p>
<p>If the RAM cache resource is on swap space, the OS will need to read it back. Since that data will be now a &#8220;more recently used&#8221; memory page, the OS might swap RAM and disk with some contents of the VM or another least-used application. This operation is slow because it requires another lot of unavoidable on-the-fly disk writes. Or:</p>
<p>If the resource is still in the application own &#8220;RAM cache&#8221;, it will be retrieved flash-fast from RAM. However, the VM still needs its own RAM to continue, and so do all other applications. This forces the operating system to swap memory again. Also, there is no RAM available for disk cache, and other applications disk requests will still served continuously from disk without the possibility of RAM caching for subsequent access. This generates constant disk activity, slowing all the system, <strong>including the browser</strong>. The browser &#8220;extra RAM cache&#8221; did no good at all.</p>
<p>Of course, the VM continues running and its RAM will continuously be needed back, so disk writing becomes a constant. The whole system slows down by what is called <em>disk trashing</em>. In really bad cases, the system may become unresponsive, restricting the user from even being able to close one of the two applications to recover the system back.</p>
<h3>Conclusions</h3>
<p>Yes, RAM is there to be used when it is needed, not wasted. RAM is a limited resource. There are ways to use RAM efficiently. For instance, loading the indexes of a mailbox in RAM (but not the whole mailbox content), if done correctly, may significantly speed up mail searching.</p>
<p>However, caching disk to RAM might not be a good idea. The caching is already done by the OS, so it is just discarding an efficient OS function by an application. Sometimes it may be a good idea but most probably, particularly in desktop applications, it is not.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2011/07/14/the-ram-is-there-to-be-used-fallacy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Superkb: then and now</title>
		<link>http://blog.alvarezp.org/2011/03/28/superkb-then-and-now/</link>
		<comments>http://blog.alvarezp.org/2011/03/28/superkb-then-and-now/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 01:30:11 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software libre]]></category>
		<category><![CDATA[Superkb]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=1375</guid>
		<description><![CDATA[This is how Superkb used to look back then in the 0.10 version. It used direct calls to the Xlib library which doesn&#8217;t support antialiasing. Back then, text was also rendered using Xlib. The icons were loaded and painted using Imlib2. Version 0.10 was released on September, 2006. I didn&#8217;t include an even older screenshot [...]]]></description>
			<content:encoded><![CDATA[<p>This is how Superkb used to look back then in the 0.10 version. It used direct calls to the Xlib library which doesn&#8217;t support antialiasing. Back then, text was also rendered using Xlib. The icons were loaded and painted using Imlib2. Version 0.10 was released on September, 2006. I didn&#8217;t include an even older screenshot because I considered it to be &#8220;still too experimental&#8221;.<br />
<span id="more-1375"></span><br />
<div id="attachment_1376" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.alvarezp.org/wp-content/uploads/2011/03/superkb-then.png"><img src="http://blog.alvarezp.org/wp-content/uploads/2011/03/superkb-then-300x133.png" alt="Superkb v0.10 screenshot." title="Superkb, back then!" width="300" height="133" class="size-medium wp-image-1376" /></a><p class="wp-caption-text">Superkb v0.10 screenshot.</p></div></p>
<p>So, Superkb 0.22 was released a couple of weeks ago. It featured a gradient-based rendering of the keys. This, in addition to the multiple key-rendering modes introduced in 0.15 (Feb 2008) and the use of the Cairo library in 0.20 (Nov 2009), have drastically changed the overall appearance. Yesterday I fixed the display of UTF-8 characters, which have allowed me to use arrows for the cursor keys and others. This is the result:<br />
<div id="attachment_1377" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.alvarezp.org/wp-content/uploads/2011/03/superkb-now.png"><img src="http://blog.alvarezp.org/wp-content/uploads/2011/03/superkb-now-300x114.png" alt="Superkb with the most recent change for version 0.23." title="Superkb, now." width="300" height="114" class="size-medium wp-image-1377" /></a><p class="wp-caption-text">Superkb with the most recent change for version 0.23.</p></div></p>
<p>This is also a thank you note to the users that have provided me with their useful feedback.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2011/03/28/superkb-then-and-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Superkb 0.22 released</title>
		<link>http://blog.alvarezp.org/2011/03/18/superkb-0-22-released/</link>
		<comments>http://blog.alvarezp.org/2011/03/18/superkb-0-22-released/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 23:50:56 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Gultij]]></category>
		<category><![CDATA[Superkb]]></category>
		<category><![CDATA[Tenía que ser un geek.]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=1351</guid>
		<description><![CDATA[Superkb 0.22 has been released! This is a minor release. Do you want to know what&#8217;s new? Take a look at the 0.22 page on the Superkb Wiki.
Superkb is a shortcut-based launcher with on-screen graphical hints. It is written in C using Xlib, with the help of Cairo graphics, Pango, Imlib2, Xinerama, etc. and the [...]]]></description>
			<content:encoded><![CDATA[<p>Superkb 0.22 has been released! This is a minor release. Do you want to know what&#8217;s new? Take a look at the <a href="http://superkb.org/wiki/index.php?title=Superkb_0.22">0.22 page on the Superkb Wiki</a>.</p>
<p><a href="http://superkb.sourceforge.net/">Superkb</a> is a shortcut-based launcher with on-screen graphical hints. It is written in C using Xlib, with the help of Cairo graphics, Pango, Imlib2, Xinerama, etc. and the source code is managed using Git.</p>
<p><span id="more-1351"></span><br />
<div class="wp-caption aligncenter" style="width: 650px"><a href="http://blog.alvarezp.org/imagenes/superkb/shots/0.22/0.22-flatkey.png"><img title="Your keyboard shortcuts painted by Superkb 0.22" src="http://blog.alvarezp.org/imagenes/superkb/shots/0.22/0.22-flatkey-640-245.png" alt="Your keyboard shortcuts painted by Superkb 0.22. Click to see the full image." width="640" height="245" /></a><p class="wp-caption-text">Your keyboard shortcuts painted by Superkb 0.22</p></div></p>
<p>Some of Superkb features:</p>
<ul>
<li>Easy to use. You select a hotkey (Super keys by default) as the base for your launchers and just hit Super+Key to execute whatever command you configured or launch whatever application you chose.</li>
<li>Non-obstructive. Being shortcut based, you don&#8217;t need anything on your screen. Holding the hotkey down will invoke the on-screen hints and releasing it will dismiss them.</li>
<li>Support for different keyboard geometries as provided by the underlying X server.</li>
<li>It provides on-screen feedback for whatever action you have launched.</li>
<li>Configuration is written on a file. You take the configuration with you to install it on your other computer as simple as copying a file.</li>
<li>The hotkey isn&#8217;t wasted. You can choose F8 (or any other) as your hotkey if you please and hitting it will still send it to the currently focused window. I use this for the Thinkpad T42 that has no Super keys.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2011/03/18/superkb-0-22-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux driver &#8212; ethX</title>
		<link>http://blog.alvarezp.org/2010/10/11/linux-driver-ethx/</link>
		<comments>http://blog.alvarezp.org/2010/10/11/linux-driver-ethx/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 21:21:08 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Español]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Net-admin]]></category>
		<category><![CDATA[Notas]]></category>
		<category><![CDATA[Planet Gultij]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=1334</guid>
		<description><![CDATA[$ ls -l /sys/class/net/*/device/driver
lrwxrwxrwx 1 root root 0 Oct 11 14:03 /sys/class/net/eth1/device/driver -> ../../../../bus/pci/drivers/skge
lrwxrwxrwx 1 root root 0 Oct 11 14:03 /sys/class/net/eth3/device/driver -> ../../../../bus/pci/drivers/8139too

Thanks to bldewolf. / Gracias a bldewolf.
]]></description>
			<content:encoded><![CDATA[<pre class="code">$ ls -l /sys/class/net/*/device/driver
lrwxrwxrwx 1 root root 0 Oct 11 14:03 /sys/class/net/eth1/device/driver -> ../../../../bus/pci/drivers/skge
lrwxrwxrwx 1 root root 0 Oct 11 14:03 /sys/class/net/eth3/device/driver -> ../../../../bus/pci/drivers/8139too
</pre>
<p>Thanks to bldewolf. / Gracias a bldewolf.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2010/10/11/linux-driver-ethx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rosarito-Ensenada 50-mile fun bike ride</title>
		<link>http://blog.alvarezp.org/2010/09/28/rosarito-ensenada-50-mile-fun-bike-ride/</link>
		<comments>http://blog.alvarezp.org/2010/09/28/rosarito-ensenada-50-mile-fun-bike-ride/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 14:42:02 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Non geek]]></category>
		<category><![CDATA[Tijuana]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=1314</guid>
		<description><![CDATA[It was not long ago that I started biking to make at least a little more exercise than I usually did (zero).
At the same time, Alfredo started too. So him and I took the 50-mile challenge that is biking from Rosarito to Ensenada, Baja California.
I knew it was difficult, but not that much. The Sun [...]]]></description>
			<content:encoded><![CDATA[<p>It was not long ago that I started biking to make at least a little more exercise than I usually did (zero).</p>
<p>At the same time, Alfredo started too. So him and I took the 50-mile challenge that is biking from Rosarito to Ensenada, Baja California.</p>
<p>I knew it was difficult, but not <strong>that</strong> much. The Sun was really tough. I heard other cyclists talking about how hot the day was. Uphill most people were walking. &#8220;Casual riders complete the trip in 4 hours&#8221; says the website. I did 7:15, and there were still people behind me.</p>
<p>It was a real challenge, but actually fun. I found out what I am capable of doing.</p>
<p>Lessons learned:</p>
<ul>
<li>I need to train.</li>
<li>I need to learn to administer my water and food supplies better during the ride.</li>
<li>I need to lighten in my backpack (and my <a href="http://en.wikipedia.org/wiki/Abdomen">frontpack</a> too)</li>
<li>I need to find the optimal way to use my energy on level ground and better hill management.</li>
<li>I probably need to find a more optimal way to use my bike: gears, posture and technique.</li>
<li>I might need to tune up the bike or have a better one.</li>
<li>I need to train.</li>
<li>Not to forget to empty the GNOME trash before placing the flash memory back in the camera. Sorry for the lack of pictures.</li>
<li>&#8230; and I&#8217;m sure I&#8217;m missing something else.</li>
</ul>
<p style="text-align: center"><a href="http://blog.alvarezp.org/wp-content/uploads/2010/09/acantilado.jpg"><img src="http://blog.alvarezp.org/wp-content/uploads/2010/09/acantilado-300x225.jpg" alt="Acantilado" title="acantilado" width="300" height="225" class="size-medium wp-image-1315" style="padding:5px" /></a> <a href="http://blog.alvarezp.org/wp-content/uploads/2010/09/mucha-gente.jpg"><img src="http://blog.alvarezp.org/wp-content/uploads/2010/09/mucha-gente-300x225.jpg" alt="Miles de ciclistas" title="mucha-gente" width="300" height="225" class="size-medium wp-image-1317"  style="padding:5px" /></a> <a href="http://blog.alvarezp.org/wp-content/uploads/2010/09/numero.jpg"><img src="http://blog.alvarezp.org/wp-content/uploads/2010/09/numero-300x225.jpg" alt="2426" title="numero" width="300" height="225" class="size-medium wp-image-1318"  style="padding:5px" /></a> <a href="http://blog.alvarezp.org/wp-content/uploads/2010/09/entero.jpg"><img src="http://blog.alvarezp.org/wp-content/uploads/2010/09/entero-300x225.jpg" alt="Aún entero" title="entero" width="300" height="225" class="size-medium wp-image-1316"  style="padding:5px"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2010/09/28/rosarito-ensenada-50-mile-fun-bike-ride/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Diaspora, first Technology Preview</title>
		<link>http://blog.alvarezp.org/2010/09/21/diaspora-first-technology-preview/</link>
		<comments>http://blog.alvarezp.org/2010/09/21/diaspora-first-technology-preview/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 05:01:06 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tenía que ser un geek.]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=1285</guid>
		<description><![CDATA[I&#8217;m so glad today. Some of you may have heard of Diaspora, the project aimed to be a social network like Facebook but open source and distributed.
Why? Because I don&#8217;t trust Facebook. I don&#8217;t know the exact instructions in the software that governs the service. Being distributed and open source, I trust that thousands of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.alvarezp.org/wp-content/uploads/2010/09/diaspora_large_new.png"><img src="http://blog.alvarezp.org/wp-content/uploads/2010/09/diaspora_large_new-300x43.png" alt="diaspora_large_new" title="diaspora_large_new" width="300" height="43" class="aligncenter size-medium wp-image-1288" /></a></p>
<p>I&#8217;m so glad today. Some of you may have heard of <a href="http://www.joindiaspora.com/">Diaspora</a>, the project aimed to be a <a href="http://en.wikipedia.org/wiki/Social_network">social network</a> like <a href="http://www.facebook.com/">Facebook</a> but <a href="http://en.wikipedia.org/wiki/Open_source">open source</a> and <a href="http://en.wikipedia.org/wiki/Distributed_computing">distributed</a>.</p>
<p><span id="more-1285"></span>Why? Because I don&#8217;t trust Facebook. I don&#8217;t know the exact instructions in the software that governs the service. Being distributed and open source, I trust that thousands of users and developers will be able to view and analyze the code, myself included. I will be able to know exactly what the code says if so I wish. Furthermore, I will be able to post my personal information on my own server instead of a centralized, untrusted one. It also means that people that trust me more than Facebook would have an alternative (and a system administrator that actually cares).</p>
<p>(Oh, and personally, I consider the current lack of any similar-to-Farmville application to be a feature.)</p>
<p>We are still talking about posting information to the Internet, though, so it must not be taken any lighter than publishing any personal information daily on the newspaper or the TV. If I publish a picture, I can take it down from my server, but I may not be able to take it away from other servers into where it may have already been replicated.</p>
<p>Since the moment I heard of the project I&#8217;ve been waiting to get my hands on it and try it myself. That day finally arrived. On September 15th, 2010, the <a href="http://www.joindiaspora.com/people.html">development team</a> released the code to the public in <a href="http://github.com/diaspora/diaspora">their Git repository</a> hosted on <a href="http://github.com/">Github</a>.</p>
<p>I found some <a href="http://achton.net/2010/09/installing-diaspora-on-debian-linux/">instructions on installing Diaspora on Debian</a> and so I decided to try them on my Sid box. It looks those are not complete anymore (the code is rapidly changing as development continues). I had some initial problems, but at the end, with some help from the people at #diaspora, it worked good enough to make this blog post.</p>
<p>I eventually got to this login screen:</p>
<p><a href="http://blog.alvarezp.org/wp-content/uploads/2010/09/diaspora-login.png"><img src="http://blog.alvarezp.org/wp-content/uploads/2010/09/diaspora-login-300x288.png" alt="diaspora screenshot: the login page." title="diaspora-login" width="300" height="288" class="size-medium wp-image-1292 aligncenter" /></a></p>
<p>The user identification takes the form <code>user@domain.com</code>. As you can see on the browser address bar, I&#8217;m accessing my own PC, not some server on the Internet.</p>
<p>After some more tweaking I managed to exchange &#8220;friend&#8221; requests with another person. We exchanged messages bidirectionally:</p>
<p><a href="http://blog.alvarezp.org/wp-content/uploads/2010/09/diaspora-messages.png"><img src="http://blog.alvarezp.org/wp-content/uploads/2010/09/diaspora-messages-300x288.png" alt="Diaspora screenshot: last messages of my &quot;diaspora&quot; aspect." title="diaspora-messages" width="300" height="288" class="size-medium wp-image-1286 aligncenter" /></a></p>
<p>Diaspora has these things called &#8220;aspects&#8221; which I understand as &#8220;aspect of your life&#8221;. The two available by default as of now are &#8220;work&#8221; and &#8220;family&#8221;. When you add a friend, you add them under one (maybe more?) of these aspects.</p>
<p>Message exchange was done in real time. As soon as I published a message, it got sent to my new friend in a third-party server and he got the message shown in his browser without reloading. Same way back: he added a message and I saw it.</p>
<p>The message went encrypted over the wire (which is very good). After some decoding, this is what I got:</p>
<pre class="code">{"aes_key":"Cl2Xtq/VO [... lots of characters ...] A9lSnqEYk=",
"ciphertext":"YT47xNE [... lots of characters ...] KbqlQNx+Y="}</pre>
<p>In my tests I was not able to upload images; they failed for some reason. Screenshots from the developers show pictures already working, though. Maybe they got broken sometime in the last couple of days.</p>
<p>Basically, in addition to what the instructions said, I had to open the ports on my firewall to make it work. You must start the server from the <code>./script/server</code> script provided.</p>
<p>Also, the instructions suggest you directly call <code>build</code> but this will not load the <em>websocket</em> at port 8080. I had to artifically do a <code>PATH=$PATH:/var/lib/gems/1.8/bin</code> to include that directory in the search path, so <code>./script/server</code> could call <code>build</code>.</p>
<p>VERY IMPORTANT: This version is in development quality (which basically translates to &#8220;best effort&#8221;), or as they say in the Git repo, &#8220;pre-alpha&#8221; quality. It is still a long way from being suitable for popular use. It <strong>has</strong> known security problems (your diaspora account can be remotely hijacked); it <strong>has</strong> bugs (image uploads are broken in some setups); and it you may lose diaspora data out of nothing (as with any development release), particularly if some upgrade goes wrong. The actual recommendation is DON&#8217;T POST YOUR IMPORTANT INFORMATION yet. I repeat: it is a development release; it is a preview. It is still in a very early development stage. Call it a prototype if you want, but be sure to accept the existing risks as of today.</p>
<p>If you want to try it yourself, check the <a href="http://github.com/diaspora/diaspora/wiki/Frequently-Asked-Questions">Diaspora Wiki</a> out. It includes information about public servers, installation, some terminology that I did not read and so I made some guys at #diaspora lose some of their valuable time. Now is a good moment to thank them for helping me out.</p>
<p>Diaspora team: great work!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2010/09/21/diaspora-first-technology-preview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Reverse VNC test, documented</title>
		<link>http://blog.alvarezp.org/2010/08/13/quick-reverse-vnc-test-documented/</link>
		<comments>http://blog.alvarezp.org/2010/08/13/quick-reverse-vnc-test-documented/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 19:50:08 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Net-admin]]></category>
		<category><![CDATA[Notas]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=1257</guid>
		<description><![CDATA[This is a quick note, documenting a quick successful test on Reverse VNC connections.
Unlike regular VNC connections, in which you connect to the controllable PC, in a Reverse VNC connection the controllable PC will connect to you. The control is in the same direction, but the connection is reversed.
What&#8217;s the benefit? Not having to worry [...]]]></description>
			<content:encoded><![CDATA[<p>This is a quick note, documenting a quick successful test on Reverse VNC connections.</p>
<p>Unlike regular VNC connections, in which you connect to the controllable PC, in a Reverse VNC connection the controllable PC will connect to you. The control is in the same direction, but the connection is reversed.</p>
<p>What&#8217;s the benefit? Not having to worry about the network status and addresses of the remote PC. It is usually easier to initiate connections than to receive. This lets the guy with better network understanding to be the listener and the poor soul to be the initiator. This will put the network worries near to the tech support guy, where it should be for this particular scenario. Also, as with the current state of IPv4, full of the evil but necessary NAT, you will not have to worry about router NAT / port forwarding configuration in the remote router.</p>
<h3>Test setup</h3>
<p>The test setup consisted on my desktop workstation running Ubuntu and my laptop running Windows, both on the same Ethernet broadcast domain. No gateway was involved in the test.</p>
<p>The desktop workstation had the following characteristics:</p>
<ul>
<li>Operating System: Ubuntu Lucid Lynx (10.04).</li>
<li>VNC package: xvnc4viewer 4.1.1+xorg4.3.0-37ubuntu2.</li>
<li>Role: Controlling computer (VNC client). In real life here is where I would sit and control other computers.</li>
<li>IP address: 192.0.2.10 (this is a fake, RFC 5735 documentation address).
</li>
</ul>
<p>The laptop had the following characteristics:</p>
<ul>
<li>Operating System: Microsoft Windows XP SP3.</li>
<li>VNC package: TightVNC 1.3.10, installed from the OpenDisc software collection.</li>
<li>Role: Controlled computer (VNC server). In real life this would be the PC receiving remote tech support from me.</li>
<li>IP address: 192.0.2.20 (this is a fake, RFC 5735 documentation address).</li>
</ul>
<h3>Steps performed to establish the connection</h3>
<p>On the desktop workstation (the VNC client, controlling computer):</p>
<ul>
<li>Opened a terminal</li>
<li>Ran <code>vncviewer -listen</code></li>
<li>You should get a message like &#8220;main: Listening on port 5500&#8243;</li>
</ul>
<p>On the laptop (the VNC server, controlled computer):</p>
<ul>
<li>Went to <em>Start » All Programs » TightVNC</em> and ran <em>Launch TightVNC Server</em></li>
<li>If the <em>Properties</em> window pops up, disable &#8220;Accept socket connections&#8221; and click OK (just for security reasons).</li>
<li>Right click on the system tray TightVNC Server icon and choose <em>Add New Client&#8230;</em></li>
<li>Enter the IP address of the desktop workstation, in this example, <code>192.0.2.10</code> and click OK or hit Enter.</li>
</ul>
<h3>Sidenotes</h3>
<ul>
<li>The test was done with the Windows Firewall enabled. You might get a message like <em>To help protect your computer, Windows Firewall blocked some of this program features. | The computer administrator may unblock this program for: TightVNC Win32 Server</em> when running the Tight VNC Server. You may safely click &#8220;OK&#8221; because you will initiate connections and not listen for a connection. This message gets inhibited by disabling <em>Accept socket connections</em> in the <em>Properties</em> window.</li>
<li>The test was repeated using a restricted Windows account, with a successful result. This gives you a lot of flexibility. You might even try making a portable TightVNC server by following the Step 2 from the instructions on this <a href="http://tinyapps.org/docs/vnc/">VNC document from the TinyApps.Org blog</a></li>
<li>Depending on the available bandwidth and latency, it might be necessary to tweak the server on the <em>Properties</em> window.</li>
<li>I noticed a somewhat long delay on the first connection attempt, in one case even leading to a connection failing. On the second try it worked fine. I would guess this has to do with DNS resolving delays and caching, but it&#8217;s just speculation.</li>
</ul>
<p>Comments welcome. If you have instructions for the same scenario on different platforms, post it on your blog and link it from a comment, or write it directly on a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2010/08/13/quick-reverse-vnc-test-documented/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>On beliefs and atheism</title>
		<link>http://blog.alvarezp.org/2010/08/01/on-beliefs-and-atheism/</link>
		<comments>http://blog.alvarezp.org/2010/08/01/on-beliefs-and-atheism/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 05:18:08 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Descubrimeinto]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Tenía que ser un geek.]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=1253</guid>
		<description><![CDATA[From XKCD
What a coincidence. I recently said the following over Tweeter (translated from Spanish):
To debate if &#8220;God&#8221; exists or not is like arguing if 0 is positive or negative. The thruth is both are the same number.
For me, +0 == -0 and I like the analogy. And yes, I have already been criticized&#8230; but, oh [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><img src="http://blog.alvarezp.org/imagenes/dios-cero/atheists.png" alt="Atheism / Personally, I find atheists just as annoying as fundamentalist christians. / Well, the important thing is that you've found a way to feel superior to both." /><br />From <a href="http://www.xkcd.com/774/">XKCD</a></p>
<p>What a coincidence. I recently said the following over Tweeter (translated from Spanish):</p>
<blockquote><p>To debate if &#8220;God&#8221; exists or not is like arguing if 0 is positive or negative. The thruth is both are the same number.</p></blockquote>
<p>For me, +0 == -0 and I like the analogy. And yes, I have already been criticized&#8230; but, oh well.</p>
<p>In code I think it could be like this:</p>
<pre class="code">
function dios_existe() {
	if (sign(0) == 1) return True;
	if (sign(0) == -1) return False;
	return dios_existe() /* haha, because that's just what happens with human beings */
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2010/08/01/on-beliefs-and-atheism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Superkb 0.21 released</title>
		<link>http://blog.alvarezp.org/2010/03/18/superkb-0-21-released/</link>
		<comments>http://blog.alvarezp.org/2010/03/18/superkb-0-21-released/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 08:02:04 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Gultij]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software libre]]></category>
		<category><![CDATA[Superkb]]></category>
		<category><![CDATA[Tijuana]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=1010</guid>
		<description><![CDATA[As announced some days ago in the mailing list, Superkb 0.21 was released.
Please let me introduce it for those that don&#8217;t know the project yet.
Superkb is a shortcut-based launcher with on-screen graphical hints. It is written in C using Xlib, with the help of Cairo graphics, Pango, Imlib2, Xinerama, etc. and the source code is [...]]]></description>
			<content:encoded><![CDATA[<p>As announced some days ago in the mailing list, <a href="http://sourceforge.net/mailarchive/forum.php?thread_name=op.u870g8lu4oyyg1%40localhost.localdomain&#038;forum_name=superkb-devel">Superkb 0.21 was released</a>.</p>
<p>Please let me introduce it for those that don&#8217;t know the project yet.</p>
<p><a href="http://superkb.sourceforge.net/">Superkb</a> is a shortcut-based launcher with on-screen graphical hints. It is written in C using Xlib, with the help of Cairo graphics, Pango, Imlib2, Xinerama, etc. and the source code is managed using Git.</p>
<p><span id="more-1010"></span><br />
<div class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.alvarezp.org/imagenes/superkb/shots/0.20/0.20-msnatural.png"><img title="Teclado Microsoft Natural, pintado por Superkb." src="http://blog.alvarezp.org/imagenes/superkb/shots/0.20/0.20-msnatural-thumb.png" alt="Teclado Microsoft Natural, pintado por Superkb (Cairo, flat_key). Haz clic para ver la imagen completa." width="300" height="277" /></a><p class="wp-caption-text">Teclado Microsoft Natural, pintado por Superkb (Cairo, flat_key)</p></div></p>
<p>Some of Superkb features:</p>
<ul>
<li>Easy to use. You select a hotkey (Super keys by default) as the base for your launchers and just hit Super+Key to execute whatever command you configured or launch whatever application you chose.</li>
<li>Non-obstructive. Being shortcut based, you don&#8217;t need anything on your screen. Holding the hotkey down will invoke the on-screen hints and releasing it will dismiss them.</li>
<li>Support for different keyboard geometries as provided by the underlying X server.</li>
<li>It provides on-screen feedback for whatever action you have launched.</li>
<li>Configuration is written on a file. You take the configuration with you to install it on your other computer as simple as copying a file.</li>
<li>The hotkey isn&#8217;t wasted. You can choose F8 as your hotkey if you please and hitting it will still send it to the currently focused window. I use this for the Thinkpad T42.</li>
</ul>
<p>Here are some <a href="http://superkb.sourceforge.net/screenshots.shtml.en">screenshots</a> about how Superkb looks like when the on-screen hints are triggered.</p>
<p>For this version, Superkb has continued walking on the stabilizing road. Since version 0.20 a lot of effort has been put in correcting unfriendliness and unexpected behaviors. This is a release I&#8217;m very happy about. I can say it is no longer in an ancient &#8216;works for me&#8217; state. It has been throughly tested with the invaluable help of the <a href="http://www.gultij.org/">Tijuana Linux User Group</a>, particularly in this last version.</p>
<p>So what&#8217;s particular for this version? Well, as a project:</p>
<ul>
<li>We have started a <a href="http://superkb.org/wiki">Wiki</a> with a lot of better documentation.</li>
<li>We created the <a href="https://lists.sourceforge.net/lists/listinfo/superkb-devel">superkb-devel at lists.sourceforge.net</a> mailing list with its <a href="http://sourceforge.net/mailarchive/forum.php?forum_name=superkb-devel">archive</a>.</li>
<li>We had our <a href="http://sourceforge.net/mailarchive/forum.php?thread_name=op.u8soujqy4oyyg1%40alvarezp-ws&#038;forum_name=superkb-devel">first bug-hunting day</a> in Tijuana.</li>
</ul>
<p>In the software:</p>
<ul>
<li>Stability and friendlyness is drastically increased.</li>
<li>Feedback strings don&#8217;t need to be requoted anymore (via the new<br />
<a href="http://sourceforge.net/apps/mediawiki/superkb/index.php?title=FEEDBACK_STRINGS_AUTOQUOTE">FEEDBACK_STRINGS_AUTOQUOTE</a> option).</li>
<li>Initial support for keyboard states (like Super+Shift+N versus plain Super+N).</li>
<li>Lots of bugs have been fixed.</li>
</ul>
<p>And yet, the project has a lot of space for improvement. Particularly:</p>
<ul>
<li>Packaging. It needs to be prepared for the different versions of Debian, Fedora, openSUSE, Ubuntu, Arch Linux, Slackware, etc.</li>
<li>Distribution inclusion. There is no better way to install any program than simply doing something like <code>apt-get install &lt;pkgname></code>. Superkb could really use that.</li>
<li>A better website. Though the current website is a lot better than the original, keeping it up to date is difficult. Documentation has therefore moved to the Wiki and I&#8217;m looking forward to changing the website to be more static.</li>
<li>Translations. There is no code for string translation yet in Superkb. Even though all non-stdout messages are translatable through configuration, console messages should be internationalized.</li>
<li>Portability testing. The project has proven to work on Debian, Fedora and Slackware-based Linux distributions in 32 and 64-bit versions. However, it has not been tested on non-Linux platforms like openSolaris, *BSD, etc, or non-PC architectures.</li>
</ul>
<p>Room for improvement for Superkb:</p>
<ul>
<li>A configuration GUI. So far, Superkb must be configured by editing a file but this is far from the actual vision of using the software. Superkb actually has a placeholder to do whatever thing when a key is held down for 3 seconds. This is intended to be the configuration interface.</li>
<li>Xrandr support. It currently detects screens using Xinerama at startup, but it cannot detect changes to the screen layout without being restarted.</li>
<li>Much more.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2010/03/18/superkb-0-21-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>felipec&#8217;s msn-pecan 0.1.0 released</title>
		<link>http://blog.alvarezp.org/2010/02/27/felipecs-msn-pecan-0-1-0-released/</link>
		<comments>http://blog.alvarezp.org/2010/02/27/felipecs-msn-pecan-0-1-0-released/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 01:57:37 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[Desarrollos]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software libre]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=986</guid>
		<description><![CDATA[So that&#8217;s the news: msn-pecan 0.1.0 is released! And I&#8217;m glad.
To directly quote from Felipec&#8217;s post in his blog:

After a bit more than two years of development we are proud to announce the first stable release of msn-pecan. The project started as a “fork” of libpurple’s msn protocol (read below why it’s not really a [...]]]></description>
			<content:encoded><![CDATA[<p>So that&#8217;s the news: <a href="http://code.google.com/p/msn-pecan/">msn-pecan</a> 0.1.0 is released! And I&#8217;m glad.</p>
<p>To directly quote from Felipec&#8217;s <a href="http://felipec.wordpress.com/2010/02/27/msn-pecan-0-1-released-the-best-option-for-pidginlibpurple/">post</a> in his <a href="http://felipec.wordpress.com/">blog</a>:</p>
<blockquote><p>
After a bit more than two years of development we are proud to announce the first stable release of msn-pecan. The project started as a “fork” of libpurple’s msn protocol (read below why it’s not really a fork), but it has grown and soon will become a standalone library with support for Telepathy too.
</p></blockquote>
<p><span id="more-986"></span>Even though I have only 3 of the 1009 patches and although I don&#8217;t understand any of the code itself, I gotta admit I really feel like I&#8217;m part of the project.</p>
<p>7 years ago I started a project to write a text mode, ncurses-based MSN client for Linux. The project is still registered on Sourceforge as <a href="http://msnclient.sourceforge.net/">msnclient</a>. It was my first attempt at writing <a href="http://en.wikipedia.org/wiki/Free_software">free software</a>. However, the challenge was too much for me and the project quickly died. I never got further than logging in and sending a single-worded message to another contact.</p>
<p>I eventually started to learn how to use Pidgin and got my self good hardware and my need of a personalized MSN client was no more. I still think, however, that msnclient is a good concept to try to bring to life. Maybe some day it will be an interface based on the msn-pecan functions.</p>
<p>That said, in mid 2009, when I started learning Git, felipec provided me a branch from his repository to test the direct connection feature (better known as &#8220;fast file transfers&#8221; or &#8220;p2p file transfers&#8221;). It didn&#8217;t work that time.</p>
<p>6 months went by and lot of commits over his master branch were too. 0.1.0-rc1 came out and directconn was still not working but the dc-test branch was relly old now. I had learned enough about Git and I though that I was better enough to try fixing the DC code. However I really knew nothing about the MSN functionality and I really didn&#8217;t understand the code. Well, at least I knew what the first step was: I had to rebase it anyway. So I tried to bring that old branch to the new code base so it could be (at least) useful to the developers. So war was lost for me, but perhaps felipec would get encouraged enough to restart working over this part of msn-pecan (but you&#8217;re not supposed to say that, right?). That&#8217;s how I saw it and how I got my motivation to do it; also, I would be my first actual real-world git rebase.</p>
<p>The main problem was that felipec had done a lot of relevant code reorganization, renaming and splitting in July (some done good, some done badly). Using some C experience I managed to rebase it and sent it in as a couple of patches.</p>
<p>Suddenly, felipec continued work on directconn. I don&#8217;t know if it was because of the patches or not; that doesn&#8217;t matter. The important thing is that in msn-pecan 0.1.0, direct connections now work and are stable. Even if not in all cases, it is a great step.</p>
<p>Now I think it went beyond learning how to rebase: I actually learned how to <em>contribute</em> using Git, just like the big boys do in the <a href="http://www.kernel.org/">Linux Kernel</a> project. I still don&#8217;t understand the code and the inner workings of the project but those two patches allowed me to learn a lot about software collaboration and review. This was particularly helpful for <a href="http://sourceforge.net/apps/mediawiki/superkb/">Superkb</a> which is also written in <a href="http://en.wikipedia.org/wiki/C_(programming_language)">C</a> and its source code managed in <a href="http://git-scm.com/">Git</a>.</p>
<p>So, thanks again felipec, congratulations and we all should have a drink for the project, even if on different parts of the world! Let&#8217;s party and spread the word.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2010/02/27/felipecs-msn-pecan-0-1-0-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Video favorito: Saturday Morning Science</title>
		<link>http://blog.alvarezp.org/2010/01/30/video-favorito-saturday-morning-science/</link>
		<comments>http://blog.alvarezp.org/2010/01/30/video-favorito-saturday-morning-science/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 05:37:51 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Español]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=970</guid>
		<description><![CDATA[Justo cuando creí haberlo visto todo encuentro este video titulado Saturday Morning Science.
Es un video con los experimentos realizados por el Dr. Donald Pettit, astronauta, Ingeniero de Vuelo y Oficial de Ciencias de la expedición 6 a bordo de la Estación Espacial Internacional.
Según la página de Saturday Morning Science, &#8220;hasta en su tiempo libre, los [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.youtube.com/watch?v=jXYlrw2JQwo"><img src="http://blog.alvarezp.org/imagenes/saturday-morning-science/saturday-morning-science.png" alt="Cristales crecidos en agua" class="float_left" /></a>Justo cuando creí haberlo visto todo encuentro este video titulado <a href="http://www.youtube.com/watch?v=jXYlrw2JQwo">Saturday Morning Science</a>.</p>
<p>Es un video con los experimentos realizados por el <a href="http://en.wikipedia.org/wiki/Donald_Pettit">Dr. Donald Pettit</a>, astronauta, Ingeniero de Vuelo y Oficial de Ciencias de la <a href="http://spaceflight.nasa.gov/station/crew/exp6/">expedición 6</a> a bordo de la <a href="http://es.wikipedia.org/wiki/Estación_Espacial_Internacional">Estación Espacial Internacional</a>.</p>
<p>Según la página de <a href="http://science.nasa.gov/headlines/y2003/25feb_nosoap.htm">Saturday Morning Science</a>, &#8220;hasta en su tiempo libre, los astronautas a bordo de la ISS están descubriendo cosas nuevas y sorprendentes sobre la naturaleza&#8221;. Según Don Pettit, estos experimentos no se tenían programados como parte de la misión; no eran ciencia &#8220;programada&#8221; sino ciencia &#8220;de oportunidad&#8221;.</p>
<p>Este video es un video crudo y directo al grano; tal vez sea una versión compilada; pero hay otras versiones en YouTube y la <a href="http://spaceflight.nasa.gov/gallery/video/station/expedition6/ndxpage1.html">galería de videos de la expedición</a> donde están editadas a modo de entrevista con un poco más de explicación.</p>
<p>Espero que los disfruten tanto como yo y se sorprendan tanto como los astronautas.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2010/01/30/video-favorito-saturday-morning-science/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Superkb brand new Wiki</title>
		<link>http://blog.alvarezp.org/2010/01/26/superkb-brand-new-wiki/</link>
		<comments>http://blog.alvarezp.org/2010/01/26/superkb-brand-new-wiki/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 09:38:43 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Software libre]]></category>
		<category><![CDATA[Superkb]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=965</guid>
		<description><![CDATA[Update: We have moved the Wiki to a new server: http://superkb.org/wiki/.
Thanks to SourceForge and its MediaWiki implementation, the Superkb project now has its own Wiki.
For now, it is only in English. I&#8217;m really looking forward to adding a full Spanish equivalent.
I think this will make it a lot easier to keep the documentation up to [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> We have moved the Wiki to a new server: <a href="http://superkb.org/wiki/">http://superkb.org/wiki/</a>.</p>
<p>Thanks to <a href="http://www.sourceforge.net/">SourceForge</a> and its <a href="http://www.mediawiki.org/">MediaWiki</a> implementation, the <a href="http://superkb.sourceforge.net/">Superkb</a> project now has its own <del datetime="2010-12-05T22:38:58+00:00">Wiki</del>.</p>
<p>For now, it is only in English. I&#8217;m really looking forward to adding a full Spanish equivalent.</p>
<p>I think this will make it a lot easier to keep the documentation up to date.</p>
<p>The SourceForge Wiki doesn&#8217;t allow anonymous contributions, so an SF account is needed to include the people in the editors group.</p>
<p>Suggestions and contributions are welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2010/01/26/superkb-brand-new-wiki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian Bridge</title>
		<link>http://blog.alvarezp.org/2010/01/18/debian-bridge/</link>
		<comments>http://blog.alvarezp.org/2010/01/18/debian-bridge/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 23:55:05 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Español]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Net-admin]]></category>
		<category><![CDATA[Planet Gultij]]></category>
		<category><![CDATA[Planeta Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=958</guid>
		<description><![CDATA[/etc/network/interfaces:
auto br0
iface br0 net dhcp
   bridge_ports eth0 eth1
   bridge_stp off
   bridge_fd 3

]]></description>
			<content:encoded><![CDATA[<p>/etc/network/interfaces:</p>
<pre class="code"><code>auto br0
iface br0 net dhcp
   bridge_ports eth0 eth1
   bridge_stp off
   bridge_fd 3
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2010/01/18/debian-bridge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meaning of the default EIGRP metric</title>
		<link>http://blog.alvarezp.org/2009/12/26/meaning-of-the-default-eigrp-metric/</link>
		<comments>http://blog.alvarezp.org/2009/12/26/meaning-of-the-default-eigrp-metric/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 23:46:59 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Ensayos]]></category>
		<category><![CDATA[Net-admin]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=892</guid>
		<description><![CDATA[Introduction and motivation
I have always felt the EIGRP metric as being really overwhelming. I see values like &#8220;2820096&#8243; and instead of understanding it, I always end up asking what the hell does that number mean.
For example, in RIP:
R    192.168.0.0/24 [120/3] via 172.16.1.1, 00:00:15, FastEthernet0/0
Just by looking at the metric of &#8220;3&#8243; I [...]]]></description>
			<content:encoded><![CDATA[<h3>Introduction and motivation</h3>
<p>I have always felt the EIGRP metric as being really overwhelming. I see values like &#8220;2820096&#8243; and instead of understanding it, I always end up asking what the hell does that number mean.</p>
<p>For example, in RIP:</p>
<pre class="code">R    192.168.0.0/24 [120/3] via 172.16.1.1, 00:00:15, FastEthernet0/0</pre>
<p>Just by looking at the metric of &#8220;3&#8243; I immediately know what is means: there are three steps between the announced network and the router receiving the advertisement. Easy, right? &#8220;Understanding the number&#8221; makes it easy for me to manage and diagnose it.</p>
<p>In OSPF, the metric (cost) is still not as cumbersome as EIGRP&#8217;s. However, in the following example, can you identify what does &#8220;66&#8243; mean? For you, is it &#8220;just a number&#8221; that won over another because of its numerical value being lower? How do you know if the number is right or not?</p>
<pre class="code">O   192.168.0.0/24 [110/66] via 172.16.1.1, 00:00:82, FastEthernet0/0</pre>
<p><span id="more-892"></span>The EIGRP metric formula is better, functionally speaking. It is calculated from various components. As a result, it is more complex. Furthermore, the resulting value is bigger. When you try to read the number in the route table, it is no longer obvious.</p>
<pre class="code">D   192.168.0.0/24 [90/2820096] via 172.16.1.1, 00:00:12, FastEthernet0/0</pre>
<p>So, what does &#8220;2820096&#8243; mean? Well, it&#8217;s pretty simple. Take 2820096 and divide it by / 25600 and you get the estimated travel time in milliseconds: <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_984_fe151cd7ae1c16721ee58e661b8e7039.png" style="vertical-align:-16px; display: inline-block ;" alt="2820096 / 25600 = 110.16 ms" title="2820096 / 25600 = 110.16 ms"/>.</p>
<p>The EIGRP metric is an approach to calculating the total travel time. By default, EIGRP calculates the packet travel time like is: take the transmission delay in all hops in the path (the famous &#8220;delay&#8221; part) and &mdash;instead of adding all of the serialization delays&mdash; add only that of the bottleneck bandwidth for a 100 Kilobit sample.</p>
<p>The goal of this article is to show you how to mathematically get to that conclusion in the particular case of the default K values. This will allow the article to be much shorter and understandable, because the rest of the terms that compose the complete EIGRP metric are more complex and there is less on-line documentation reference for those. Also, Cisco doesn&#8217;t recommend changing the K values by default unless you REALLY know what you are doing. </p>
<p>Besides, we can get our engines started and warmed up for a later article with an analysis for the whole formula, don&#8217;t we?</p>
<h3>Step 0: Starting to think</h3>
<p>To put a &#8220;meaning&#8221; to this number, I will first ask you: if you designed your own &#8220;perfect&#8221; routing protocol, what would you use as a metric? What formula do you think would provide the routers with the best and closest to reality information in order to always take the most optimal routing decisions, at all times, and whatever the network circumstance is? It is not an easy question, though it is one that any protocol designer will never be able to escape. Think about this for a moment.</p>
<p>When I asked myself this question, my answer was: I think everybody wants the packets to get to its destination (unmodified, of course) as quickly as possible. I would like all participating routers to know the exact time it will take a packet to get to router B. Travel time should be used as *the* metric. In my &#8220;perfect&#8221; routing protocol, the metric would be measured in some submultiple of seconds. Even the Internet would be better if this were true, except that it&#8217;s way too expensive, complex, and difficult to manually control if done this way (that&#8217;s were BGP jumps in).</p>
<p>The EIGRP protocol gives it a shot at this approach.</p>
<h3>Quoting complete the EIGRP metric formula, by Cisco</h3>
<p>To analyze the default metric behavior I will start by quoting the complete EIGRP metric formula specified by Cisco<sup><a href="#reference-eigrp">1</a></sup>:</p>
<blockquote><p>
<img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_976_376332fb80739bec2be9c41ad7b2067c.png" style="vertical-align:-24px; display: inline-block ;" alt="metric = [K_1 * bandwidth + {K_2 * bandwidth} / {256 - load} + K_3 * delay] * [K_5 / {reliability + K_4}]" title="metric = [K_1 * bandwidth + {K_2 * bandwidth} / {256 - load} + K_3 * delay] * [K_5 / {reliability + K_4}]"/></p>
<p>where:</p>
<ul>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_975.5_9bcc4e08bbf462b3f4b8f108149384c3.png" style="vertical-align:-24.5px; display: inline-block ;" alt="bandwidth = (10000000/{bandwidth(i)}) * 256" title="bandwidth = (10000000/{bandwidth(i)}) * 256"/>
<ul>
<li>where <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_991.5_1b4e0643e2b5d0b450ed9295a7d72b7b.png" style="vertical-align:-8.5px; display: inline-block ;" alt="bandwidth(i)" title="bandwidth(i)"/> is the least bandwidth of all outgoing interfaces on the route to the destination network represented in kilobits.</li>
</ul>
</li>
<li> <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_991.5_d01af6959c23697d28dbd916d7fc0dd5.png" style="vertical-align:-8.5px; display: inline-block ;" alt="delay = delay(i) * 256" title="delay = delay(i) * 256"/>
<ul>
<li>where <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_991.5_52d54ae10289acdb87fdd551dcfcc9b4.png" style="vertical-align:-8.5px; display: inline-block ;" alt="delay(i)" title="delay(i)"/> is the sum of the delays configured on the interfaces, on the route to the destination network, in tens of microseconds. The delay as shown in the <strong>show ip eigrp topology</strong> or <strong>show interface commands</strong> is in microseconds, so you must divide by 10 before you use it in this formula. Throughout this paper, we use delay as it is configured and shown on the interface.</li>
</ul>
</li>
<li>If <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_1819bec75cb2651a6339e253b6f64f4e.png" style="vertical-align:-14.5px; display: inline-block ;" alt="K_5 = 0" title="K_5 = 0"/>, the formula reduces to <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_984_4046116e4ccf2fb30ba06d9403deb05a.png" style="vertical-align:-16px; display: inline-block ;" alt="metric = K_1 * bandwidth + {K_2 * bandwidth}/{256 - load} + K_3 * delay" title="metric = K_1 * bandwidth + {K_2 * bandwidth}/{256 - load} + K_3 * delay"/>.</li>
<li>Cisco routers do not perform floating point math, so at each stage in the calculation, you need to round down to the nearest integer to properly calculate the metrics.</li>
<li>The default values for K are:
<ul>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_4b70092d664a9159afb8d9a7a4592275.png" style="vertical-align:-14.5px; display: inline-block ;" alt="K_1 = 1" title="K_1 = 1"/></li>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_43f3b406b35471fa55e9028cd602e28f.png" style="vertical-align:-14.5px; display: inline-block ;" alt="K_2 = 0" title="K_2 = 0"/></li>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_cb547fa56be176041412dea775eb0925.png" style="vertical-align:-14.5px; display: inline-block ;" alt="K_3 = 1" title="K_3 = 1"/></li>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_f11f9ce463756e243c5f9ae7152f9147.png" style="vertical-align:-14.5px; display: inline-block ;" alt="K_4 = 0" title="K_4 = 0"/></li>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_1819bec75cb2651a6339e253b6f64f4e.png" style="vertical-align:-14.5px; display: inline-block ;" alt="K_5 = 0" title="K_5 = 0"/></li>
</ul>
</li>
</ul>
<p>For default behavior, you can simplify the formula as follows:<br />
<img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_f4cd09b3e2eb252e11af7e5821191e64.png" style="vertical-align:-6.5px; display: inline-block ;" alt="metric = bandwidth + delay" title="metric = bandwidth + delay"/>
</p></blockquote>
<p>I found out that sentence to be a source of confusion for myself. Even the simplified, default-behavior metric formula is expressed in a way that assumes we can add apples and oranges, though this is impossible. Cisco wants us to add &#8220;bandwidth&#8221; with &#8220;delay&#8221;. So, how do they actually do it? How much is &#8220;10 bps + 10 s&#8221;?</p>
<h3>Step 1: Arranging the mathematical expression in its default K values</h3>
<p>Let&#8217;s try to state the formula in its default behavior. I will use the following symbols:</p>
<ul>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_e9b2ff641da23037adec56684fb7552b.png" style="vertical-align:-6.5px; display: inline-block ;" alt="M" title="M"/>: metric.</li>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_8acfe827853aff5217d7ef210177df96.png" style="vertical-align:-6.5px; display: inline-block ;" alt="B" title="B"/>: resulting scaled bandwidth.[/pmath]</li>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_71a27f48cb3f8458093be05225f435cd.png" style="vertical-align:-14.5px; display: inline-block ;" alt="B_min" title="B_min"/>: bandwidth(i), the least bandwidth of all outgoing interfaces on the route to the destination network represented in kilobits.</li>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_75b573a2a80f7d1f54f711b89d1a80fa.png" style="vertical-align:-6.5px; display: inline-block ;" alt="D" title="D"/>: resulting scaled delay.[/pmath]</li>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_990.5_e05eb093ab6836b9b83181a25baf2d22.png" style="vertical-align:-9.5px; display: inline-block ;" alt="sum{}{}{d}" title="sum{}{}{d}"/>: delay(i), the sum of the delays configured on the interfaces, on the route to the destination network, in tens of microseconds.</li>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_211bca6f8a55723b6c5c2ce4a5b504a1.png" style="vertical-align:-6.5px; display: inline-block ;" alt="10 * 10^6" title="10 * 10^6"/>: 1000000 (as in 10 Mega-something).</li>
</ul>
<p>Let&#8217;s arrange the formula in a way it really looks like a mathematical equation:</p>
<blockquote><p>
<img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_18f2f570d13dc9223d4ab667a0aea29e.png" style="vertical-align:-6.5px; display: inline-block ;" alt="M = B + D" title="M = B + D"/></p>
<p>where:</p>
<p><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_976_bd73bdd880261665cef62b6fa6ab5ece.png" style="vertical-align:-24px; display: inline-block ;" alt="B = 256 10 * 10^6 / {B_min}" title="B = 256 10 * 10^6 / {B_min}"/><br />
<img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_990.5_7bb547c14ef3d36efc09455c490fb9b2.png" style="vertical-align:-9.5px; display: inline-block ;" alt="D = 256 sum{}{}{d}" title="D = 256 sum{}{}{d}"/>
</p></blockquote>
<h3>Step 2: moving the &#8220;256&#8243; out of the way and getting to the original IGRP metric formula</h3>
<p>EIGRP metric is 256 times that of IGRP<sup><a href="#reference-256igrp">2</a></sup>. This is easily provable: as both, B and D are a multiple of 256, we can divide by it. The result is the exact original IGRP formula<a href="#reference-igrp">3</a>. (Though this is also true in the complete formula, please remember we are only working with the particular case of the default metric behavior.)</p>
<p>This means that the EIGRP metric will be always inflated and will be a multiple of 256.</p>
<p>Let&#8217;s do the procedure. First, lets get all into one big formula. Let&#8217;s replace B and D for their corresponding formulas:</p>
<p><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_976_322fb3711d461985bdb0bf3dea6093cb.png" style="vertical-align:-24px; display: inline-block ;" alt="M = 256 10 * 10^6 / {B_min} + 256 sum{}{}{d}" title="M = 256 10 * 10^6 / {B_min} + 256 sum{}{}{d}"/></p>
<p>There we can see how the 256 factor is present in the two terms. We could factor it out but for convenience I will divide everything by 256.</p>
<p><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_976_02cbf59d8580cbeee82cddecb181dacb.png" style="vertical-align:-24px; display: inline-block ;" alt="M / 256 = 10 * 10^6 / {B_min} + sum{}{}{d}" title="M / 256 = 10 * 10^6 / {B_min} + sum{}{}{d}"/></p>
<p>The right side is the default metric for IGRP.</p>
<h3>Step 3: Unit analysis and T<sub>3</sub></h3>
<p>Or put another way: what is the resulting value measured in, is it Kilobits, seconds, hops, packets&#8230;?</p>
<p>The last formula from step 2 has the following form:</p>
<p><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_984_96e184a0accbd2658cac3adb1b15a69b.png" style="vertical-align:-16px; display: inline-block ;" alt="{M / 256} = T_1 + T_3" title="{M / 256} = T_1 + T_3"/></p>
<p>where:</p>
<ul>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_e9b2ff641da23037adec56684fb7552b.png" style="vertical-align:-6.5px; display: inline-block ;" alt="M" title="M"/> (metric)</li>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_976_6d49a55de5600d1cb163574427c44646.png" style="vertical-align:-24px; display: inline-block ;" alt="T_1 = 10 * 10^6 / {B_min}" title="T_1 = 10 * 10^6 / {B_min}"/></li>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_e9d964f9f2d7b111da97ee0432fd5c9c.png" style="vertical-align:-14.5px; display: inline-block ;" alt="T_3 = sum{}{}{d}" title="T_3 = sum{}{}{d}"/></li>
</ul>
<p>The terms <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_de8060c956be7be96980a5c3f6dec32f.png" style="vertical-align:-14.5px; display: inline-block ;" alt="T_1" title="T_1"/> and <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_da2d64dcacd2e1a44ec409563d302173.png" style="vertical-align:-14.5px; display: inline-block ;" alt="T_3" title="T_3"/> must have the same units. Otherwise, addition couldn&#8217;t be possible.</p>
<p>The easiest term to analyze is <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_da2d64dcacd2e1a44ec409563d302173.png" style="vertical-align:-14.5px; display: inline-block ;" alt="T_3" title="T_3"/>. According to Cisco <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_990.5_e05eb093ab6836b9b83181a25baf2d22.png" style="vertical-align:-9.5px; display: inline-block ;" alt="sum{}{}{d}" title="sum{}{}{d}"/> must be in tens of microsegundos. Therefore:</p>
<p><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_c6c4fe34d5cdaed3d40c7640e324cc3e.png" style="vertical-align:-14.5px; display: inline-block ;" alt="T_3: 10 {mu}s" title="T_3: 10 {mu}s"/></p>
<p>And thus, <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_de8060c956be7be96980a5c3f6dec32f.png" style="vertical-align:-14.5px; display: inline-block ;" alt="T_1" title="T_1"/> units (and therefore the whole M units) must be tens of microseconds, also.</p>
<p>So:</p>
<ul>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_1a813378d8f0b19ef674b959cf055ddb.png" style="vertical-align:-14.5px; display: inline-block ;" alt="T_1: 10 {mu}s" title="T_1: 10 {mu}s"/> (time)</li>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_c6c4fe34d5cdaed3d40c7640e324cc3e.png" style="vertical-align:-14.5px; display: inline-block ;" alt="T_3: 10 {mu}s" title="T_3: 10 {mu}s"/> (time)</li>
<li><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_917e81831d91cdb10364f4760cae4f18.png" style="vertical-align:-6.5px; display: inline-block ;" alt="M: 10 {mu}s" title="M: 10 {mu}s"/> (time)</li>
</ul>
<p>So, given <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_da2d64dcacd2e1a44ec409563d302173.png" style="vertical-align:-14.5px; display: inline-block ;" alt="T_3" title="T_3"/> is a delay, the other term and the total metric must be a delay too in the same scale. Remember what I said at the beginning about using travel time as my &#8220;perfect&#8221; metric for a routing protocol? EIGRP is actually giving it a shot.</p>
<h3>Step 4: Analyzing T<sub>1</sub></h3>
<p>In step 3 we let <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_de8060c956be7be96980a5c3f6dec32f.png" style="vertical-align:-14.5px; display: inline-block ;" alt="T_1" title="T_1"/> be defined as:</p>
<p><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_976_6d49a55de5600d1cb163574427c44646.png" style="vertical-align:-24px; display: inline-block ;" alt="T_1 = 10 * 10^6 / {B_min}" title="T_1 = 10 * 10^6 / {B_min}"/></p>
<p>And also that <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_de8060c956be7be96980a5c3f6dec32f.png" style="vertical-align:-14.5px; display: inline-block ;" alt="T_1" title="T_1"/> must be in tens of microseconds.</p>
<p>We know the units for <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_de8060c956be7be96980a5c3f6dec32f.png" style="vertical-align:-14.5px; display: inline-block ;" alt="T_1" title="T_1"/> and <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_71a27f48cb3f8458093be05225f435cd.png" style="vertical-align:-14.5px; display: inline-block ;" alt="B_min" title="B_min"/>, but what are the units for <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_211bca6f8a55723b6c5c2ce4a5b504a1.png" style="vertical-align:-6.5px; display: inline-block ;" alt="10 * 10^6" title="10 * 10^6"/>?</p>
<p><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_965_c1ca2595f9564fb1856c5a61548d18d1.png" style="vertical-align:-35px; display: inline-block ;" alt="10 {mu}s = x / {kilobit/s} doubleleftright x = {10 {mu}s} {k bit/s} = {10 * 10^{-6} * 10^3 bit s}/s = 10 * 10^{-3} bit" title="10 {mu}s = x / {kilobit/s} doubleleftright x = {10 {mu}s} {k bit/s} = {10 * 10^{-6} * 10^3 bit s}/s = 10 * 10^{-3} bit"/>: tens of millibit</p>
<p><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_965_732c952d2ceb11ad919f69df31f9eee9.png" style="vertical-align:-35px; display: inline-block ;" alt="{10 milibit} / {k bit/s} = {10 * 10^{-3} bit} / {10^3 bit/s} = 10 / { 10^{-6} } s = 10 {mu}s" title="{10 milibit} / {k bit/s} = {10 * 10^{-3} bit} / {10^3 bit/s} = 10 / { 10^{-6} } s = 10 {mu}s"/></p>
<p>How many bits are <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_983_75c792bd251a7e3fc65f431249678344.png" style="vertical-align:-17px; display: inline-block ;" alt="(10 * 10^6) (10 milibit)" title="(10 * 10^6) (10 milibit)"/>?</p>
<p><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_983_2deed1e1f19940f9635e74e9bd26328b.png" style="vertical-align:-17px; display: inline-block ;" alt="(10 * 10^6) (10 milibit) = (10 * 10 * 10^6 * 10^-3 * bit) = 100 * 10^3 * bit = 100 Kilobit" title="(10 * 10^6) (10 milibit) = (10 * 10 * 10^6 * 10^-3 * bit) = 100 * 10^3 * bit = 100 Kilobit"/></p>
<p>So finally, <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_de8060c956be7be96980a5c3f6dec32f.png" style="vertical-align:-14.5px; display: inline-block ;" alt="T_1" title="T_1"/> is like this:</p>
<p><img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_976_af968d550ce51f252136ad603b26f6b3.png" style="vertical-align:-24px; display: inline-block ;" alt="T_1 = {100 Kbits} / B_min" title="T_1 = {100 Kbits} / B_min"/></p>
<p>Just like <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_984_af937e5c92408ab4d1624ac8667e1edc.png" style="vertical-align:-16px; display: inline-block ;" alt="time = distance / speed" title="time = distance / speed"/>, also <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_984_b63eb32e63a20751f9722ee340b0b408.png" style="vertical-align:-16px; display: inline-block ;" alt="serialization delay = bits / bandwidth" title="serialization delay = bits / bandwidth"/>, so <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_976_93c9ec332e889620893530bcd1014bc6.png" style="vertical-align:-24px; display: inline-block ;" alt="{100 Kbits} / {B_min}" title="{100 Kbits} / {B_min}"/> means &#8220;serialization delay for 100 Kbits under that bandwidth B<sub>min</sub>&#8220;.</p>
<h3>Conclusion and interpretation</h3>
<pre class="code">D   192.168.0.0/24 [90/2820096] via 172.16.1.1, 00:00:12, FastEthernet1/1</pre>
<p>We know that 2820096 is given in <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_2f6e8751c1a6a0c20a78e9dfdafaa287.png" style="vertical-align:-6.5px; display: inline-block ;" alt="10 {mu}s" title="10 {mu}s"/> and multiplied by 256.</p>
<p>So we take 2820096 / 256 = 11016.</p>
<p>To convert it to <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_01127c284b667954cef2c9101fd8cb84.png" style="vertical-align:-6.5px; display: inline-block ;" alt="{mu}s" title="{mu}s"/> instead, divide the metric / 25.6: <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_984_ac1b6e974c7fefe2802e00ec168398fc.png" style="vertical-align:-16px; display: inline-block ;" alt="2820096 / 25.6 = 110160 {mu}s" title="2820096 / 25.6 = 110160 {mu}s"/></p>
<p>Or to milliseconds, divide it by / 25600: <img src="http://blog.alvarezp.org/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_984_fe151cd7ae1c16721ee58e661b8e7039.png" style="vertical-align:-16px; display: inline-block ;" alt="2820096 / 25600 = 110.16 ms" title="2820096 / 25600 = 110.16 ms"/></p>
<p>As I said, the EIGRP default metric is an approach to calculating the total travel time. By default, EIGRP calculates the packet travel time like is: take the transmission delay in all hops in the path (the famous &#8220;delay&#8221; part) and &mdash;instead of adding all of the serialization delays&mdash; add only that of the bottleneck bandwidth for a 100 Kilobit sample.</p>
<h3>References</h3>
<p id="reference-eigrp"><sup>1</sup> Cisco Document ID 16406, actualizado: Sep 09, 2005. Enhanced Interior Gateway Routing Protocol: http://www.cisco.com/en/US/tech/tk365/technologies_white_paper09186a0080094cb7.shtml</p>
<p id="reference-256igrp"><sup>2</sup> IP Routing, by Ravi Malhotra, January 2002. Chapter 4: Enhanced Interior Gateway Routing Protocol (EIGRP) http://oreilly.com/catalog/iprouting/chapter/ch04.html#45434</p>
<p id="reference-eigrp"><sup>3</sup> Cisco Document ID 13678, actualizado: Aug 10, 2005. IGRP Metric [IP Routing], http://www.cisco.com/en/US/tech/tk365/technologies_tech_note09186a008009405c.shtml</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2009/12/26/meaning-of-the-default-eigrp-metric/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Etiquette in e-mail message quoting</title>
		<link>http://blog.alvarezp.org/2009/12/24/etiquette-in-e-mail-message-quoting/</link>
		<comments>http://blog.alvarezp.org/2009/12/24/etiquette-in-e-mail-message-quoting/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 20:55:59 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Tenía que ser un geek.]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=888</guid>
		<description><![CDATA[This is a translation of my previous post Etiqueta en el citado de mensajes de e-mail.
Introduction
The most ignored Internet Etiquette rule is that of the posting style when replying to an e-mail message.
By &#8220;quoting&#8221; I mean the inclusion of a previous message in a new one (for example, a reply) with the intent of stating [...]]]></description>
			<content:encoded><![CDATA[<p>This is a translation of my previous post <a href="http://blog.alvarezp.org/2009/12/15/etiqueta-en-el-citado-de-mensajes-de-e-mail/">Etiqueta en el citado de mensajes de e-mail</a>.</p>
<h3>Introduction</h3>
<p>The most ignored <a href="http://en.wikipedia.org/wiki/Netiquette">Internet Etiquette</a> rule is that of the <a href="http://en.wikipedia.org/wiki/Posting_style">posting style</a> when replying to an e-mail message.</p>
<p>By &#8220;quoting&#8221; I mean the inclusion of a previous message in a new one (for example, a reply) with the intent of stating the relevance of the answer itself in the original context. I would say &#8220;Dan, I don&#8217;t know what are you talking about. Please quote the original e-mail in your reply next time in order to know what were you replying to.&#8221;</p>
<p>Almost every <a href="http://en.wikipedia.org/wiki/Email_client">e-mail client</a> do quote the original message in the reply, at least by default. That is good, and it contributes to the &#8220;netiquette&#8221;, but its abuse has made it completely useless.</p>
<p><span id="more-888"></span>By saying that the rule is &#8220;ignored&#8221;, I mean that the common user doesn&#8217;t edit the text put by the e-mail client as the quote. It leaves the quoted message as is, simply ignoring the resulting text. After three iterations of the answer, the &#8220;original message&#8221; carries more garbage than relevant content.</p>
<p>Common e-mail clients &mdash;like Outlook y Thunderbird&mdash; don&#8217;t help either; those are pretty stupid. They quote whatever they find. Even when the original goal is to place the original message in the editor ready for its editing while replying, it is also true that signatures and those hideous legal disclaimers are stupidly included also.</p>
<p>Ok. Beyond the rant, the main purpose of this article is to show the current quoting and reply techniques, but more important, to yearn for a style / technique used more than 15 years ago, even before Internet started to be popular in the city where I live.</p>
<p>A correctly applied etiquette to an e-mail reply allows a well-organized message. This etiquette is mainly formed by two elements: (a) the correct placement of the answer in relation to the quoted message and (b) the correct editing of the quoted message.</p>
<h3>Reply text placement against the quoted text</h3>
<p>The best way to explain this is to mention the three different styles and the difference between them: top-posting, bottom-posting and interposting (or in-line posting). It refers to the placement of the answer before, after or inserted into the original text.</p>
<h5>Example A: top-posting</h5>
<blockquote><pre>
Yes, and I'm going to do it.

On Fri, Jun 26 2009 17:42:34 -0700, Hitsuo Tikashi &lt;hitsuo.tikashi@sistint.com.mx> said:
> Octavio:
>
> Is the maintenance window on next Thursday?
>
> Who's going to execute the changes?
>
> Regards.
>
> ---
> Hitsuo Tikashi.
> Infrastructure Services Manager.
> Integrated Systems, Inc.
> T. +1 (619) 555-1234
> E. hitsuo.tikashi@sistint.com.mx
</pre>
</blockquote>
<h5>Example B: bottom-posting</h5>
<blockquote><pre>
On Fri, Jun 26 2009 17:42:34 -0700, Hitsuo Tikashi &lt;hitsuo.tikashi@sistint.com.mx> said:
> Octavio:
>
> Is the maintenance window on next Thursday?
>
> Who's going to execute the changes?
>
> Regards.
>
> ---
> Hitsuo Tikashi.
> Infrastructure Services Manager.
> Integrated Systems, Inc.
> T. +1 (619) 555-1234
> E. hitsuo.tikashi@sistint.com.mx

Yes, and I'm going to do it.
</pre>
</blockquote>
<h5>Example C: interposting (or inline-posting)</h5>
<blockquote><pre>
On Fri, Jun 26 2009 17:42:34 -0700, Hitsuo Tikashi &lt;hitsuo.tikashi@sistint.com.mx> said:
> Octavio:
>
> Is the maintenance window on next Thursday?

Yes.

>
> Who's going to execute the changes?

I am.

> Regards.
>
> ---
> Hitsuo Tikashi.
> Infrastructure Services Manager.
> Integrated Systems, Inc.
> T. +1 (619) 555-1234
> E. hitsuo.tikashi@sistint.com.mx
</pre>
</blockquote>
<p>Which one do you think is the best? All of them has pros and cons, so the answer may be different in each environment. What do you think are the pros and cons of each?</p>
<p>For instance, In some mailing lists, top-posting is more than prohibited. Either you do bottom-posting or, better yet, interposting. This has been used since before the existence of e-mail as is known today.</p>
<p>However, in businesses and common use, the most popular style is top-posting, due to the easiness of just &#8220;writing and sending&#8221; without worrying for anything else; this has moved the MUAs (e-mail clients) to be configured for top-posting out of the box. This, in turn, makes it even more popular.</p>
<h3>Proper editing of the quoted text</h3>
<p>The last example of interposting made it easy to show how a great part of the reply text is just useless. It is considered that the quoted text is part of the reply, as it occupies disk space as part of the reply.</p>
<p>I&#8217;ll use that interposting example as the case to analyze, but the following applies to either of the three quoting styles.</p>
<p>From the word &#8220;regards&#8221; on, the text is irrelevant, and thus, useless. Maybe we could say that the line &#8220;Octavio:&#8221; is also irrelevant, but let us not be so picky at the moment. In numbers, 8 out of 21 lines (38%) are useless; so are 25 of the 59 words (42%); and so are 161 of the 373 characters (43%). We still have to take into account that mi reply signature is not there, so that will slightly lower those ratios.</p>
<h5>Example D: Proper quoting in top-posting</h5>
<blockquote><pre>
Yes, and I'm going to do it.

On Fri, Jun 26 2009 17:42:34 -0700, Hitsuo Tikashi &lt;hitsuo.tikashi@sistint.com.mx> said:
> Octavio:
>
> Is the maintenance window on next Thursday?
>
> Who's going to execute the changes?
>
</pre>
</blockquote>
<h5>Example E: Proper quoting in bottom-posting</h5>
<blockquote><pre>
On Fri, Jun 26 2009 17:42:34 -0700, Hitsuo Tikashi &lt;hitsuo.tikashi@sistint.com.mx> said:
> Octavio:
>
> Is the maintenance window on next Thursday?
>
> Who's going to execute the changes?
>

Yes, and I'm going to do it.
</pre>
</blockquote>
<h5>Example F: Proper quoting in interposting (or in-line posting)</h5>
<blockquote><pre>
On Fri, Jun 26 2009 17:42:34 -0700, Hitsuo Tikashi &lt;hitsuo.tikashi@sistint.com.mx> said:
> Octavio:
>
> Is the maintenance window on next Thursday?

Yes.

> Who's going to execute the changes?

I am.
</pre>
</blockquote>
<p>The main argument for not editing the quoted text would be that it takes a long time to do it and it is done inefficiently. At home, this is called &#8220;lazyness&#8221;.</p>
<p>This will be the argument for those that don&#8217;t know the keyboard shortcuts for text editing, in particular the use of the Shift key as a non-written standard to select text. Using Shift and the arrow keys, followed by &#8220;Delete&#8221;, is extremely easy to select and erase useless text.</p>
<h3>Yearning for Blue Wave and FidoNet</h3>
<p>Before going into user interfaces and mobile devices, I&#8217;d like to take a momento to show my yearning feeling for the times where I wrote in <a href="http://en.wikipedia.org/wiki/FidoNet">FidoNet</a>, even before the Internet started to be popular in Tijuana (1994 to 1996).</p>
<p>In FidoNet, it was common to do this a little different. I used a popular shareware named <a href="http://en.wikipedia.org/wiki/Blue_Wave">Blue Wave Offline Reader</a>. Many of us used Blue Wave, which had a particular way of preparing the quoted text before putting it into the editor:</p>
<blockquote><pre>
On Fri, Jun 26 2009 17:42:34 -0700, Hitsuo Tikashi said:
 HT> Octavio:
 HT>
 HT> Is the maintenance window on next Thursday?
 HT>
 HT> Who's going to execute the changes?
 HT>
 HT> Regards.
 HT>
 HT> ---
 HT> Hitsuo Tikashi.
 HT> Infrastructure Services Manager.
 HT> Integrated Systems, Inc.
 HT> T. +1 (619) 555-1234
 HT> E. hitsuo.tikashi@sistint.com.mx
</pre>
</blockquote>
<p>The interesting thing is not in the inline replying. Same as today, a couple of Enters in the right place allowed me to reply in-line.</p>
<p>To erase from &#8220;Regards&#8221; on, still same as today: I place the cursor in the &#8220;R&#8221; from &#8220;Regards&#8221; and Shift+Ctrl+End, Delete and voilà: message is clean.</p>
<p>And so was my answer:</p>
<blockquote><pre>
On Fri, Jun 26 2009 17:42:34 -0700, Hitsuo Tikashi said:
 HT> Octavio:
 HT>
 HT> Is the maintenance window on next Thursday?

 Yes. Even thought the changes are not considered to be critical, in case
 of a possible failure we will affect our service level agreements,
 because less than 30 days ago our carriers suffered an outage.

 HT> Who's going to execute the changes?

 I am.
</pre>
</blockquote>
<p>What is really interesting is that when the original sender tried to reply me back, the text would be automatically adjusted to the line length (properly word wrapped) and quoted in the following way:</p>
<blockquote><pre>
On Fri, Jun 26 2009 17:42:34 -0700, Octavio Alvarez said:
 HT> Octavio:
 HT>
 HT> Is the maintenance window on next Thursday?
 OA>
 OA> Yes. Even thought the changes are not considered to be critial, in
 OA> case of a possible failure we will affect our service level
 OA> agreements, because less than 30 days ago our carriers suffered an
 OA> outage.

 Acknowledged. I leave it in your hands and keep me informed.

 HT> Who's going to execute the changes?
 OA>
 OA> I am.

 BTW, who will monitor and operate the services the next day?
</pre>
</blockquote>
<p>In the example, the user interleaved its answers to me.</p>
<p>Notice how the quoted lines don&#8217;t exactly match the original lines. those were modified intelligently, being considered as a paragraph and adjusted to keep a solid and consistent text block.</p>
<p>Also, notice how the text is clear enough and easy to follow; even more if the reader and editor software puts the different authors in different colors.</p>
<p>This style, beyond organized is scalable. After multiple iterations, the format and the text are kept organized.</p>
<blockquote><pre>
On Fri, Jun 26 2009 17:42:34 -0700, Octavio Alvarez said:
 HT> Octavio:
 HT>
 HT> Is the maintenance window on next Thursday?
 OA>
 OA> Yes. Even thought the changes are not considered to be critial, in
 OA> case of a possible failure we will affect our service level
 OA> agreements, because less than 30 days ago our carriers suffered an
 OA> outage.
 HT>
 HT> Acknowledged. I leave it in your hands and keep me informed.
 OA>
 OA> Ok, I'll send you an SMS, according to the procedure.

 And please send it to me via e-mail, also.

 HT> Who's going to execute the changes?
 OA>
 OA> I am.
 HT>
 HT> BTW, who will monitor and operate the services the next day?
 OA>
 OA> It would be the new team member, but we have already asked everyone
 OA> else to be alert and ready in case of any eventuality.

 Have you exchanged phone numbers yet?
</pre>
</blockquote>
<p>From my point of view, this is much more intelligent than its popular counterpart:</p>
<blockquote><pre>
On Mon, Jun 29 2009 17:42:34 -0700, Octavio Alvarez &lt;alvarezp@alvarezp.ods.org> said:
> On Sun, Jun 28 2009 17:42:34 -0700, Hitsuo Tikashi &lt;hitsuo.tikashi@sistint.com.mx> said:
> > On Sat, Jun 27 2009 17:42:34 -0700, Octavio Alvarez &lt;alvarezp@alvarezp.ods.org> said:
> > > On Fri, Jun 26 2009 17:42:34 -0700, Hitsuo Tikashi &lt;hitsuo.tikashi@sistint.com.mx> said:
> > > > Octavio:
> > > >
> > > > Is the maintenance window on next Thursday?
> > >
> > > Yes. Even thought the changes are not considered to be critial, in
> > > case of a possible failure we will affect our service level
> > > agreements, because less than 30 days ago our carriers suffered an
> > > outage.
> >
> > Acknowledged. I leave it in your hands and keep me informed.
>
> Ok, I'll send you an SMS, according to the procedure.

And please send it to me via e-mail, also.

> > > > Who's going to execute the changes?
> > >
> > > I am.
> >
> > BTW, who will monitor and operate the services the next day?
>
> It would be the new team member, but we have already asked everyone else
> to be alert and ready in case of any eventuality.

Have you exchanged phone numbers yet?
</pre>
</blockquote>
<p>This is the best the current e-mail practices can get us. It is not bad, but only if the authors and client software follow the etiquette.</p>
<p>If not, we get:</p>
<ul>
<li>Badly nested quoting prefixes like: > >> > >>> ></li>
<li>Badly split lines for exceeding a line length.</li>
<li>Fully quoted messages, including irrelevant paragraphs.</li>
<li>HTML garbage from improper tag handling.</li>
<li>Messages full of signatures and legal texts (sometimes in more than one language per message).</li>
</ul>
<p>Even though a message from an author that followed the etiquette is a lot better than what we see in a day-to-day basis, i feel it far from the comfort of working in the Blue Wave / FidoNet style.</p>
<h3>About user interfaces</h3>
<p>E-mail clients fail in promoting the etiquette culture in e-mail messaging.</p>
<p>I think there could be a signature detection mechanism and automatically exclude it from the quoted text. This would save us from getting three copies of the same bulk after three replies:</p>
<blockquote><pre>
> ---
> Hitsuo Tikashi.
> Infrastructure Services Manager.
> Integrated Systems, Inc.
> T. +1 (619) 555-1234
> E. hitsuo.tikashi@sistint.com.mx
>
> The content of this e-mail message and its attachments is confidential
> and may be protected by Copyright law. It is intended exclusively to the
> addressees and them only. If you have received it by mistake, you must
> eliminate it from your system. In this case you are not allowed to copy,
> print or distribute this e-mail or its attachments nor use them for any
> purpose of allowing its contents to be known by any person. The here
> included information is not necesarily backed up by [CORPORATION NAME]
> or any of its subsidiaries or strategic alliances.
>
> Please consider the environment before printing this message.
</pre>
</blockquote>
<p>Note: I&#8217;ve seen that last line in some messages. I included it because I just couldn&#8217;t help myself from using my poor sarcasm after seeing that call for the ecology right after that waste of electricity and disk space (that is usually in HTML format).</p>
<h3>Mobile devices</h3>
<p>In a 160&#215;320 screen and an itsy bitsy teenie weenie keyboard one could argue that is difficult to do all of this editing in a practical way. However, in the same way new mobile devices present the user an appropriate interface to do other common tasks in a different way, it is the UI that holds how easy or impossible the editing would be.</p>
<p>If in-line posting were popular, a mobile device would have a function or command to &#8220;answer below this paragraph&#8221; or &#8220;navigate by paragraph&#8221; and choose &#8220;reply, leave or snip&#8221; each of them and maybe even an option to &#8220;erase the rest of the text&#8221;.</p>
<p>If the UI doesn&#8217;t have it, it is because in-line posting has not been that popular and not requested enough. It is still a deficiency, though.</p>
<h3>Conclusions</h3>
<p>I&#8217;ve tried to show show the style in example F is the most organized and scalable among all possible, based on previous experience from Blue Wave and FidoNet.</p>
<p>Personally, I try to go with the same style that most of the people use in the same context. It&#8217;s the best. A people replying with interposting in a mailing list where everybody top-post (for example, at work) will only confuse for everybody.</p>
<p>I have nothing else to say than to throw a call to those that participate in discussion groups, mailing lists (and, in particular those in technical areas) that at least we observe this etiquette guides among ourselves:</p>
<ul>
<li>Reply in line to the topics in the original answer.</li>
<li>Eliminate irrelevant parts of the quoted message. Signatures and legal texts in particular.</li>
<li>Rearrange illegible paragraphs (word wrapping, for example).</li>
<li>Use correct spelling and grammar.</li>
<li>Back our text up with emoticons if confusion might arise.</li>
</ul>
<p>Thank for the patience to read all the way to here.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2009/12/24/etiquette-in-e-mail-message-quoting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bell on new line</title>
		<link>http://blog.alvarezp.org/2009/09/28/bell-on-new-line/</link>
		<comments>http://blog.alvarezp.org/2009/09/28/bell-on-new-line/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 20:10:21 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[Código]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Planet Gultij]]></category>
		<category><![CDATA[Planeta Linux]]></category>

		<guid isPermaLink="false">http://blog.alvarezp.org/?p=725</guid>
		<description><![CDATA[To have a Linux beep each time a new line is printed on standard output, just filter your output through the following code:
gawk '{print "\007" $0 }'
This will effectively &#8220;prepend&#8221; a bell to each line.
You can convert this into an alias or a command (say /usr/local/bin/line-beep.gawk):
#!/usr/bin/gawk -f

{ print "\007" $0; }
So it can be used [...]]]></description>
			<content:encoded><![CDATA[<p>To have a Linux beep each time a new line is printed on standard output, just filter your output through the following code:</p>
<pre class="code"><code>gawk '{print "\007" $0 }'</code></pre>
<p>This will effectively &#8220;prepend&#8221; a bell to each line.</p>
<p>You can convert this into an alias or a command (say /usr/local/bin/line-beep.gawk):</p>
<pre class="code"><code>#!/usr/bin/gawk -f

{ print "\007" $0; }</code></pre>
<p>So it can be used in a code like the following:</p>
<pre class="code"><code>tail -f /var/log/messages | grep --line-buffered dhcpd | line-beep.bash
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2009/09/28/bell-on-new-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

