<?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>Linux AV &#187; Debian</title>
	<atom:link href="http://www.linuxav.net/index.php/category/debian/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.linuxav.net</link>
	<description>Una experiencia multimedia con GNU/Linux</description>
	<lastBuildDate>Wed, 14 Apr 2010 14:17:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Pulse Audio y la reproducción simultánea de sonido con ALSA</title>
		<link>http://www.linuxav.net/index.php/2010/04/pulse-audio-y-la-reproduccion-simultanea-de-sonido-con-alsa/</link>
		<comments>http://www.linuxav.net/index.php/2010/04/pulse-audio-y-la-reproduccion-simultanea-de-sonido-con-alsa/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 08:16:21 +0000</pubDate>
		<dc:creator>ismael</dc:creator>
				<category><![CDATA[Audio]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[alsa]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[pulseaudio]]></category>

		<guid isPermaLink="false">http://www.linuxav.net/?p=812</guid>
		<description><![CDATA[¿Debería eliminar Pulse Audio? Desde luego, muchos usuarios se quejan de problemas con el sonido desde las aplicaciones. Un servidor de sonido como Pulse Audio es una buena idea para sistemas de escritorio sobre los que corren aplicaciones genéricas, pero una pésima idea para quien trabaja con aplicaciones multimedia y necesita un control absoluto de [...]]]></description>
			<content:encoded><![CDATA[<p>¿Debería eliminar Pulse Audio? Desde luego, muchos usuarios se quejan de problemas con el sonido desde las aplicaciones. Un servidor de sonido como Pulse Audio es una buena idea para sistemas de escritorio sobre los que corren aplicaciones genéricas, pero una pésima idea para quien trabaja con aplicaciones multimedia y necesita un control absoluto de su <i>driver</i> de audio. No debería haber nada de malo en que Ubuntu incorpore Pulse Audio por defecto &mdash;Debian no lo hace&mdash; pero sí resulta pintoresco que Ubuntu Studio también lo haga.</p>
<p><center><img src="http://www.linuxav.net/wp-content/uploads/alsa.png" alt="alsa" title="alsa" width="320" height="240" class="alignnone size-full wp-image-814" /></center></p>
<p>Así pues, para retomar el control absoluto del sonido en tu sistema:</p>
<pre>
  $ sudo apt-get remove pulseaudio
  </pre>
<p>Alguien dirá que el problema ahora es que distintas aplicaciones no pueden reproducir audio simultáneamente. Respondo que, por una parte, no todas las aplicaciones reconocen Pulse Audio por lo que probablemente antes tampoco era posible. Y, por otra parte, que ALSA sí lo permite. Sólo es necesario activar la mezcla por software <i>dmix</i> sobre la salida de audio. Simplemente lléva este código a tu .asoundrc.</p>
<pre>
<span class="comment-delimiter"># </span><span class="comment">.asoundrc - Personal configuration file for ALSA
</span>
<span class="comment-delimiter"># </span><span class="comment">Copyright (C) 2009 Ismael Valladolid Torres &lt;<a href="mailto:ivalladt&#64;gmail.com">ivalladt&#64;gmail.com</a>&gt;
</span>
<span class="comment-delimiter"># </span><span class="comment">This program is free software; you can redistribute it and/or
</span><span class="comment-delimiter"># </span><span class="comment">modify it under the terms of the GNU General Public License
</span><span class="comment-delimiter"># </span><span class="comment">as published by the Free Software Foundation; either version 2
</span><span class="comment-delimiter"># </span><span class="comment">of the License, or (at your option) any later version.
</span>
<span class="comment-delimiter"># </span><span class="comment">This program is distributed in the hope that it will be useful,
</span><span class="comment-delimiter"># </span><span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of
</span><span class="comment-delimiter"># </span><span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
</span><span class="comment-delimiter"># </span><span class="comment">GNU General Public License for more details.
</span>
<span class="comment-delimiter"># </span><span class="comment">You should have received a copy of the GNU General Public License
</span><span class="comment-delimiter"># </span><span class="comment">along with this program; if not, write to the Free Software
</span><span class="comment-delimiter"># </span><span class="comment">Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
</span><span class="comment-delimiter"># </span><span class="comment">02110-1301, USA.
</span>
<span class="comment-delimiter"># </span><span class="comment">See the file COPYING for details.
</span>
<span class="type">pcm.ossmix</span> {
    <span class="variable-name">type</span> dmix
    <span class="variable-name">ipc_key</span> 1021                <span class="comment-delimiter"># </span><span class="comment">must be unique!
</span>    <span class="variable-name">ipc_perm</span> 0660               <span class="comment-delimiter"># </span><span class="comment">sound for everybody (at least in your group)
</span>    <span class="comment-delimiter">#</span><span class="comment">ipc_key_add_uid false      # let multiple users share
</span>    <span class="type">slave</span> {
        <span class="variable-name">pcm</span> <span class="string">"hw:0,0"</span>
        <span class="variable-name">period_time</span> 0
        <span class="variable-name">period_size</span> 1024        <span class="comment-delimiter"># </span><span class="comment">must be power of 2
</span>        <span class="variable-name">buffer_size</span> 8192        <span class="comment-delimiter"># </span><span class="comment">dito
</span>        <span class="comment-delimiter">#</span><span class="comment">format "S32_LE"
</span>        <span class="comment-delimiter">#</span><span class="comment">periods 128            # dito
</span>        <span class="comment-delimiter">#</span><span class="comment">rate 8000              # with rate 8000 you *will* hear
</span>    <span class="variable-name">}</span>                           <span class="comment-delimiter"># </span><span class="comment">if ossmix is used <img src='http://www.linuxav.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</span>
    <span class="comment-delimiter"># </span><span class="comment">bindings are cool. This says, that only the first
</span>    <span class="comment-delimiter"># </span><span class="comment">two channels are to be used by dmix, which is enough for
</span>    <span class="comment-delimiter"># </span><span class="comment">(most) oss apps and also lets multichannel chios work
</span>    <span class="comment-delimiter"># </span><span class="comment">much faster:
</span>    <span class="type">bindings</span> {
        <span class="variable-name">0</span> 0   <span class="comment-delimiter"># </span><span class="comment">from 0 =&gt; to 0
</span>        <span class="variable-name">1</span> 1   <span class="comment-delimiter"># </span><span class="comment">from 1 =&gt; to 1
</span>    <span class="variable-name">}</span>
<span class="variable-name">}</span>

<span class="comment-delimiter"># </span><span class="comment">Redirect to ossmix
</span><span class="type">pcm.!default</span> {
    <span class="variable-name">type</span> plug
    <span class="variable-name">slave.pcm</span> <span class="string">"ossmix"</span>     <span class="comment-delimiter"># </span><span class="comment">use our new PCM here
</span><span class="variable-name">}</span>

<span class="comment-delimiter"># </span><span class="comment">Redirect to ossmix
</span><span class="type">pcm.dsp</span> {
    <span class="variable-name">type</span> plug
    <span class="variable-name">slave.pcm</span> <span class="string">"ossmix"</span>     <span class="comment-delimiter"># </span><span class="comment">use our new PCM here
</span><span class="variable-name">}</span>

<span class="comment-delimiter"># </span><span class="comment">mixer like above
</span><span class="type">ctl.mixer</span> {
    <span class="variable-name">type</span> hw
    <span class="variable-name">card</span> 0
<span class="variable-name">}</span>

<span class="comment-delimiter"># </span><span class="comment">Local Variables&#58;
</span><span class="comment-delimiter"># </span><span class="comment">mode: conf
</span><span class="comment-delimiter"># </span><span class="comment">End:
</span></pre>
<p>Ahora la salida llamada <i>default</i>, la que por omisión utilizan todas las aplicaciones compatibles con ALSA para reproducir audio, implemente mezcla por software desde todas las aplicaciones que la están utilizando. En mi máquina, así, es posible reproducir simultáneamente audio desde <i>clips</i> en YouTube vía Flash en Firefox, Spotify, mplayer, Audacious, Skype y cualquier otra.</p>
<p>Sólo dos avisos. Si alguna aplicación utiliza explícitamente la salida <i>hw:0,0</i> todo deja de funcionar. La mezcla por software queda configurada para la salida llamada <i>default</i> y no para ninguna otra. Por otra parte, de nuevo, si cualquier aplicación consigue reproducir con éxito audio utilizando la emulación OSS, la cosa de nuevo deja de funcionar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxav.net/index.php/2010/04/pulse-audio-y-la-reproduccion-simultanea-de-sonido-con-alsa/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>La evolución de Linux</title>
		<link>http://www.linuxav.net/index.php/2010/02/la-evolucion-de-linux/</link>
		<comments>http://www.linuxav.net/index.php/2010/02/la-evolucion-de-linux/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 20:16:56 +0000</pubDate>
		<dc:creator>ismael</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[red hat]]></category>
		<category><![CDATA[slackware]]></category>

		<guid isPermaLink="false">http://www.linuxav.net/?p=772</guid>
		<description><![CDATA[
  
  
Un documento fascinante. Se trata de un gráfico a modo de árbol genealógico de las distribuciones Linux en la actualidad, todas procedentes de las tres grandes semillas de nuestro jardín informático; Debian, Slackware y Red Hat.
Visto en Userlinux.net.
]]></description>
			<content:encoded><![CDATA[<p><center><br />
  <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_faKJ0v_HBgY/S3MTz_4hmgI/AAAAAAAABeo/LnX2iF62f5I/s1600-h/timeline-linux.png"><img style="cursor:pointer; cursor:hand;width: 239px; height: 400px;" src="http://2.bp.blogspot.com/_faKJ0v_HBgY/S3MTz_4hmgI/AAAAAAAABeo/LnX2iF62f5I/s400/timeline-linux.png" border="0" alt="historia linux"id="BLOGGER_PHOTO_ID_5436710959209093634" /></a><br />
  </center></p>
<p>Un documento fascinante. Se trata de un gráfico a modo de árbol genealógico de las distribuciones Linux en la actualidad, todas procedentes de las tres grandes semillas de nuestro jardín informático; Debian, Slackware y Red Hat.</p>
<p>Visto en <a href="http://www.userlinux.net/timeline-linux-distros.htm">Userlinux.net</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxav.net/index.php/2010/02/la-evolucion-de-linux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Puredyne</title>
		<link>http://www.linuxav.net/index.php/2010/01/puredyne/</link>
		<comments>http://www.linuxav.net/index.php/2010/01/puredyne/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 21:19:48 +0000</pubDate>
		<dc:creator>ismael</dc:creator>
				<category><![CDATA[Audio]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Imagen]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[realtime]]></category>

		<guid isPermaLink="false">http://www.linuxav.net/?p=733</guid>
		<description><![CDATA[
  
  
Puredyne es una distribución orientada al trabajo creativo para aquellos que buscan herramientas apartedas del estandar. Facilita las mejores aplicaciones creativas en estado experimental además de un sólido conjunto de herramientas para el trabajo con imagen, audio y vídeo en un paquete minimalista muy rápido.
Puredyne está optimizada para el procesado de [...]]]></description>
			<content:encoded><![CDATA[<p><center><br />
  <img src="http://www.linuxav.net/wp-content/uploads/puredyne.png" alt="puredyne" title="puredyne" width="397" height="144" class="alignnone size-full wp-image-734" /><br />
  </center></p>
<p><a href="http://puredyne.goto10.org/about.html" target="_blank" rel="nofollow">Puredyne</a> es una distribución orientada al trabajo creativo para aquellos que buscan herramientas apartedas del estandar. Facilita las mejores aplicaciones creativas en estado experimental además de un sólido conjunto de herramientas para el trabajo con imagen, audio y vídeo en un paquete minimalista muy rápido.</p>
<p>Puredyne está optimizada para el procesado de audio y vídeo en tiempo real. Se distingue por facilitar un <i>kernel</i> de muy baja latencia, para la responsividad que necesitan los artistas que trabajan en este campo.</p>
<p>Está basada en Ubuntu y Debian Live, y todos los paquetes facilitados por Puredyne pueden ser fácilmente utilizados en cualquiera de los sabores de Linux. <a href="http://puredyne.goto10.org/download.html" target="_blank" rel="nofollow">Descarga Puredyne</a>, utilízala, compártela, modifícala, únete al equipo de desarrollo o haz lo que quieras con ella.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxav.net/index.php/2010/01/puredyne/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>El próximo Ubuntu LTS será retrasado</title>
		<link>http://www.linuxav.net/index.php/2010/01/el-proximo-ubuntu-lts-sera-retrasado/</link>
		<comments>http://www.linuxav.net/index.php/2010/01/el-proximo-ubuntu-lts-sera-retrasado/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 20:17:31 +0000</pubDate>
		<dc:creator>ismael</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[lts]]></category>

		<guid isPermaLink="false">http://www.linuxav.net/?p=728</guid>
		<description><![CDATA[Mark Shuttleworth el astronauta sugiere que la próxima versión LTS con soporte a largo plazo podría retrasarse. La expectación se había despertado ante la posibilidad de que la próxima versión LTS fuese la 10.04, a ser liberada en abril de 2010. Pero en una entrevista en derStandard.at Shuttleworth dice que &#171;la próxima LTS será la [...]]]></description>
			<content:encoded><![CDATA[<p><b>Mark Shuttleworth</b> el astronauta sugiere que la próxima versión LTS con soporte a largo plazo podría retrasarse. La expectación se había despertado ante la posibilidad de que la próxima versión LTS fuese la 10.04, a ser liberada en abril de 2010. Pero en una entrevista en derStandard.at Shuttleworth dice que &laquo;la próxima LTS será la 10.04 o la 10.10, habrá que esperar a que terminen las conversaciones actuales entre Debian y Ubuntu.</p>
<p><center><br />
  <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_faKJ0v_HBgY/S0uGr_tju_I/AAAAAAAABKc/wDwZB5RrqCI/s1600-h/800px-Ubuntu_8.04_LTS.JPG"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_faKJ0v_HBgY/S0uGr_tju_I/AAAAAAAABKc/wDwZB5RrqCI/s400/800px-Ubuntu_8.04_LTS.JPG" border="0" alt="ubuntu lts"id="BLOGGER_PHOTO_ID_5425578266492910578" /></a><br />
  </center></p>
<p>La conversación transcurre sobre un &laquo;ciclo meta release&raquo; que vería cómo las próximas revisiones de Ubuntu y Debian congelan sus fechas de congelación. Parte del retraso se debería a la incorporación de GNOME 3.0, esperada para primavera de 2010, sobre la misma fecha inicialmente esperada para Ubuntu 10.04. Los desarrolladores de Ubuntu liberan versiones de forma regular cada seis meses, soportadas con actualizaciones hasta dieciocho meses, pero hay versiones LTS como la Ubuntu 8.04 LTS que son actualizadas durante tres años para la versión de escritorio y cinco años para la versión de servidor.</p>
<p>Visto en <a href="http://www.h-online.com/open/news/item/Shuttleworth-hints-at-later-Ubuntu-LTS-742453.html" target="_blank" rel="nofollow">The H Open Source</a>. Foto de <a href="http://bartoszsenderek.blogspot.com/" target="_blank" rel="nofollow"><b>Bartosz Senderek</b></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxav.net/index.php/2010/01/el-proximo-ubuntu-lts-sera-retrasado/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Los mejores blogs Linux en Wikio en enero de 2010</title>
		<link>http://www.linuxav.net/index.php/2010/01/los-mejores-blogs-linux-en-wikio-en-enero-de-2010/</link>
		<comments>http://www.linuxav.net/index.php/2010/01/los-mejores-blogs-linux-en-wikio-en-enero-de-2010/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 17:41:37 +0000</pubDate>
		<dc:creator>ismael</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[wikio]]></category>

		<guid isPermaLink="false">http://www.linuxav.net/?p=714</guid>
		<description><![CDATA[
El editor de Linux AV se enorgullece en presentarse como &#171;experto en la categoría Linux&#187; para Wikio. Como tal, irá siendo presentada aquí la lista de blogs dedicados a Linux más populares en Wikio de forma mensual. Ésta es la primera lista.





1
Ubuntu Life


2
MuyLinux


3
Ubuntips


4
Ubunlog


5
120% Linux


6
LinuxHispano.net


7
Slice of Linux


8
Forat


9
Linwind


10
Pillate Un Linux


11
OcioLinux


12
Www.tuxapuntes.com


13
Gnometips


14
Paraiso Linux


15
Cesarius Revolutions


16
Geeks &#038; Linux Atelier!


17
LXA! Linux Adictos








18
Be [...]]]></description>
			<content:encoded><![CDATA[<p><center><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_faKJ0v_HBgY/S0Io4mq-4pI/AAAAAAAABDk/xNL4sssKpBo/s1600-h/adni18_Linux_Christmas_640.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 320px;" src="http://1.bp.blogspot.com/_faKJ0v_HBgY/S0Io4mq-4pI/AAAAAAAABDk/xNL4sssKpBo/s400/adni18_Linux_Christmas_640.jpg" border="0" alt="linux navidad"id="BLOGGER_PHOTO_ID_5422941854226113170" /></a></center></p>
<p>El editor de <a href="http://www.linuxav.net/">Linux AV</a> se enorgullece en presentarse como &laquo;experto en la categoría Linux&raquo; para <a href="http://www.wikio.es/" target="_blank" rel="nofollow">Wikio</a>. Como tal, irá siendo presentada aquí la lista de <i>blogs</i> dedicados a Linux más populares en Wikio de forma mensual. Ésta es la primera lista.</p>
<table width="420">
<tr>
<td valign="top" width="50%">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr class="bg">
<td class="td1" valign="top" width="30">1</td>
<td class="td2"><a href="http://ubuntulife.wordpress.com" target="_blank">Ubuntu Life</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">2</td>
<td class="td2"><a href="http://www.muylinux.com" target="_blank">MuyLinux</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">3</td>
<td class="td2"><a href="http://www.ubuntips.com.ar" target="_blank">Ubuntips</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">4</td>
<td class="td2"><a href="http://ubunlog.com.ar/blog" target="_blank">Ubunlog</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">5</td>
<td class="td2"><a href="http://120linux.com" target="_blank">120% Linux</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">6</td>
<td class="td2"><a href="http://www.linuxhispano.net" target="_blank">LinuxHispano.net</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">7</td>
<td class="td2"><a href="http://sliceoflinux.com" target="_blank">Slice of Linux</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">8</td>
<td class="td2"><a href="http://www.forat.info" target="_blank">Forat</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">9</td>
<td class="td2"><a href="http://www.dacostabalboa.com/es" target="_blank">Linwind</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">10</td>
<td class="td2"><a href="http://pillateunlinux.com" target="_blank">Pillate Un Linux</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">11</td>
<td class="td2"><a href="http://ociolinux.blogspot.com/" target="_blank">OcioLinux</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">12</td>
<td class="td2"><a href="http://www.tuxapuntes.com/drupal" target="_blank">Www.tuxapuntes.com</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">13</td>
<td class="td2"><a href="http://gnometips.wordpress.com/" target="_blank">Gnometips</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">14</td>
<td class="td2"><a href="http://paraisolinux.com.ar" target="_blank">Paraiso Linux</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">15</td>
<td class="td2"><a href="http://www.cesarius.net" target="_blank">Cesarius Revolutions</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">16</td>
<td class="td2"><a href="http://www.glatelier.org/" target="_blank">Geeks &#038; Linux Atelier!</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">17</td>
<td class="td2"><a href="http://linuxadictos.com" target="_blank">LXA! Linux Adictos</a></td>
<td class="td3"></td>
</tr>
</table>
</td>
<td valign="top" width="50%">
<table width="100%">
<tr>
<tr class="bg">
<td class="td1" valign="top" width="30">18</td>
<td class="td2"><a href="http://belinuxmyfriend.blogspot.com/" target="_blank">Be Linux&#8230; my friend</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">19</td>
<td class="td2"><a href="http://mirutalibre.wordpress.com" target="_blank">Mi Ruta Libre</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">20</td>
<td class="td2"><a href="http://miordenadoreslibre.wordpress.com" target="_blank">Mi ordenador es libre&#8230;</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">21</td>
<td class="td2"><a href="http://www.linuxav.net" target="_blank">Linux AV</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">22</td>
<td class="td2"><a href="http://linux.adslzone.net" target="_blank">LinuxZone</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">23</td>
<td class="td2"><a href="http://putolinux.wordpress.com" target="_blank">¡¡PUTOLINUX!!</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">24</td>
<td class="td2"><a href="http://my.opera.com/davidtsunamy/blog/" target="_blank">David Tsunamy</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">25</td>
<td class="td2"><a href="http://sinwindows.wordpress.com" target="_blank">Sin Windows</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">26</td>
<td class="td2"><a href="http://linux-itt.blogspot.com" target="_blank">Telematica &#038; Linux</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">27</td>
<td class="td2"><a href="http://www.linuxboricua.com" target="_blank">Linux Boricua</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">28</td>
<td class="td2"><a href="http://www.userlinux.net" target="_blank">Userlinux</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">29</td>
<td class="td2"><a href="http://portalubuntu.blogspot.com/" target="_blank">Portal Ubuntu</a></td>
<td class="td3"></td>
<tr class="bg">
<td class="td1" valign="top" width="30">30</td>
<td class="td2"><a href="http://www.noticiasubuntu.com/" target="_blank">Noticias Ubuntu</a></td>
<td class="td3"></td>
</table>
<p><a href="http://www.wikio.es" target="_blank" title="Ranking Wikio">Ranking Wikio</a></td>
</tr>
</table>
<p>¿Estás en la lista? ¡Enhorabuena! Otra de las cosas que me pide Wikio es crear una red entre los sitios más populares dedicados a Linux a partir de nuestros respectivos <i>blogroll</i>. Así que me permito pedirte, estés o no en la lista, que añadas <a href="http://www.linuxav.net/">Linux AV</a> a tu <i>blogroll</i> y me dejes un mensaje de correo electrónico o un comentario a este artículo indicándome la dirección de tu <i>blog</i> para que yo haga lo propio.</p>
<pre>&lt;<span class="function-name">a</span> <span class="variable-name">href</span>=<span class="string">"http://www.linuxav.net/"</span>&gt;Linux AV&lt;/<span class="function-name">a</span>&gt;</pre>
<p>¡Gracias! ¡Y que los Reyes Magos te traigan mucho <i>software</i> libre!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxav.net/index.php/2010/01/los-mejores-blogs-linux-en-wikio-en-enero-de-2010/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Linux es vulnerable a las señoras de la limpieza</title>
		<link>http://www.linuxav.net/index.php/2010/01/linux-es-vulnerable-a-las-senoras-de-la-limpieza/</link>
		<comments>http://www.linuxav.net/index.php/2010/01/linux-es-vulnerable-a-las-senoras-de-la-limpieza/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 14:51:45 +0000</pubDate>
		<dc:creator>ismael</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://www.linuxav.net/?p=711</guid>
		<description><![CDATA[¿Y qué es el ataque de la señora de la limpieza?
Es el nombre que le han dado los de PING Labs a un ataque que afecta, demostrado, a Ubuntu y a Debian, pero seguramente también a cualquier otra distribución. El ataque permite acceder sin restricciones a una sesión bloqueada por un salvapantallas.

  
  [...]]]></description>
			<content:encoded><![CDATA[<p>¿Y qué es el <i>ataque de la señora de la limpieza</i>?</p>
<p>Es el nombre que le han dado los de <a href="http://labs.ping.uio.no/" target="_blank" rel="nofollow">PING Labs</a> a un ataque que afecta, demostrado, a Ubuntu y a Debian, pero seguramente también a cualquier otra distribución. El ataque permite acceder sin restricciones a una sesión bloqueada por un salvapantallas.</p>
<p><center><br />
  <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_faKJ0v_HBgY/S0IAWaeuuYI/AAAAAAAABDU/PmiOHEADxM4/s1600-h/800px-Three_japanese_maids.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_faKJ0v_HBgY/S0IAWaeuuYI/AAAAAAAABDU/PmiOHEADxM4/s400/800px-Three_japanese_maids.jpg" border="0" alt="señoras de la limpieza japonesas"id="BLOGGER_PHOTO_ID_5422897286372833666" /></a><br />
  </center></p>
<p>El nombre hace referencia a la facilidad con la que es posible ejecutarlo. Aunque la probabilidad de éxito es mínima, basta con pasar por delante del ordenador bloqueado y pulsar &laquo;Alt+PetSis+F&raquo;. Resulta que el <i>kernel</i> Linux captura ciertas combinaciones de teclas, todas activadas por la combinación &laquo;Alt+PetSis&raquo;, para realizar funciones de emergencia. En particular la citada combinación activa el OOM Killer. Éste libera memoria de forma automática. Si la CPU está demasiado ocupada, el el OOM Killer elimina algún proceso para poder retomar el control del sistema. Existe una mínima posibilidad de que dicho proceso sea el salvapantallas. Éste entonces se cierra y la señora de la limpieza, o cualquiera que pase por allí, puede entonces acceder al escritorio.</p>
<p>En <a href="http://www.xombra.com/go_news.php?nota=4526" target="_blank" rel="nofollow">Xombra tienes toda la información</a>. Foto de <a href="http://commons.wikimedia.org/wiki/User:Szater" target="_blank" rel="nofollow">Szater</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxav.net/index.php/2010/01/linux-es-vulnerable-a-las-senoras-de-la-limpieza/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tu propio bot para Twitter en Perl</title>
		<link>http://www.linuxav.net/index.php/2009/12/tu-propio-bot-para-twitter-en-perl/</link>
		<comments>http://www.linuxav.net/index.php/2009/12/tu-propio-bot-para-twitter-en-perl/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 10:05:40 +0000</pubDate>
		<dc:creator>ismael</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.linuxav.net/?p=693</guid>
		<description><![CDATA[He tenido dudas sobre si publicar mi script implemientando un bot para Twitter en mi blog SEO o en este blog sobre Linux. Finalmente me he decidido por éste. Probablemente tiene más utilidad pedagógica que para el marketing en la red social. Explicado de otra forma. Aunque tengo ciertas ideas sobre su utilidad comercial, me [...]]]></description>
			<content:encoded><![CDATA[<p>He tenido dudas sobre si publicar mi <i>script</i> implemientando un <i>bot</i> para Twitter en mi <i>blog</i> SEO o en este <i>blog</i> sobre Linux. Finalmente me he decidido por éste. Probablemente tiene más utilidad pedagógica que para el <i>marketing</i> en la red social. Explicado de otra forma. Aunque tengo ciertas ideas sobre su utilidad comercial, me limito a publicarlo y a invitarte a buscar las tuyas.</p>
<p>La forma normal de utilizarlo es la siguiente:</p>
<pre>
  $ autoretweet -u usuario -p lksnfd -k linux
  </pre>
<p>Se trata de los tres parámetros obligatorios. El nombre de usuario en el servicio Twitter, la contraseña, y la palabra clave que disparará el <i>bot</i> una vez aparezca en las búsquedas. Utilizado así, el <i>bot</i> simplemente hace un <i>retweet</i> al usuario que ha publicado un mensaje conteniendo la palabra clave. El usuario podría así identificarte como interesado en el tema para el cual dicha palabra clave es representativa y devolverte su seguimiento.</p>
<p>Hay no obstante formas más sofisticadas de utilizarlo, mediante los siguientes parámetros opcionales.</p>
<p>-s status</p>
<p>Utiliza una cadena de texto determinada en lugar del <i>retweet</i>. Dicha cadena podría contener un enlace, y utilizar así el <i>bot</i> para la promoción de un sitio y no para conseguir seguimientos. Utilizar con precaución dado que el uso de una cadena repetida acaba redundando en que la cuenta que lo hace es marcada como sospechosa y desactivada.</p>
<p>-f url</p>
<p>Averigua el <i>feed</i> XML para el sitio cuya URL se proporciona. De dicho <i>feed</i> toma las entradas que contienen la palabra clave indicada y presenta en cada nuevo estado el enlace y el título de dicha entrada. Eventualmente útil para promocionar un sitio. De nuevo, utilizar con precaución.</p>
<p>-n num_results</p>
<p>El número de resultados a ser devuelto en cada búsqueda.</p>
<p>-p poll_frequency</p>
<p>El tiempo entre dos búsquedas consecutivas.</p>
<p>-d delay_updates</p>
<p>El tiempo entre dos envíos al sistema Twitter. Si va a utilizarse un mensaje repetido, configurar un valor lo suficientemente alto para evitar que la cuenta sea marcada como sospechosa.</p>
<p>-r random</p>
<p>Genera para cada envío un <i>hashtag</i> aleatorio de la longitud indicada. Permite que la cadena de texto sea distinta en cada envío y eventualmente que la cuenta no sea marcada así como sospechosa.</p>
<p>-v</p>
<p>Salida prólija, presentando un informe completo de todas las acciones realizadas por el script.</p>
<p>Ante la posibilidad de que Twitter considere maliciosa la actividad del <i>bot</i> y marque la cuenta como sospechosa, no dudo en recomendar no utilizarlo con tu propia cuenta personal. Copia el código en un fichero llamado <i>autoretweet</i>. Activa el permiso de ejecución y guárdalo en un directorio en tu <i>path</i> actual. Crea ahora una cuenta <i>troll</i>. Sigue la convención de utilizar para el <i>avatar</i> de dicha cuenta una nariz roja. Utiliza ahora esa cuenta para probar el <i>bot</i>. Disfrútalo.</p>
<pre>
<span class="comment-delimiter">#</span><span class="comment">!/usr/bin/perl
</span>
<span class="keyword">use</span> <span class="constant">strict</span>;
<span class="keyword">use</span> <span class="constant">warnings</span>;

<span class="keyword">use</span> <span class="constant">Data</span>::Dumper;
<span class="keyword">use</span> <span class="constant">Getopt</span>::Std;
<span class="keyword">use</span> <span class="constant">HTML</span>::TokeParser;
<span class="keyword">use</span> <span class="constant">LWP</span>::Simple;
<span class="keyword">use</span> <span class="constant">Net</span>::Twitter;
<span class="keyword">use</span> <span class="constant">XML</span>::Feed;

<span class="type">local</span> $| = 1; <span class="comment"># auto flush stdout
</span>binmode STDOUT, <span class="string">':utf8'</span>;

<span class="type">my</span> $<span class="variable-name">username</span>;
<span class="type">my</span> $<span class="variable-name">password</span>;
<span class="type">my</span> $<span class="variable-name">keyword</span>;
<span class="type">my</span> $<span class="variable-name">status</span>;

<span class="type">my</span> $<span class="variable-name">num_results</span> = 5;
<span class="type">my</span> $<span class="variable-name">poll_frequency</span> = 100;
<span class="type">my</span> $<span class="variable-name">delay_updates</span> = 60;

<span class="type">my</span> $<span class="variable-name">random</span> = 0;
<span class="type">my</span> $<span class="variable-name">verbose</span> = 0;

<span class="type">my</span> @<span class="underline"><span class="variable-name">feeds</span></span>;
<span class="type">my</span> @<span class="underline"><span class="variable-name">goods</span></span> = ();

<span class="comment-delimiter"># </span><span class="comment">Get command line options
</span><span class="type">my</span> %<span class="underline"><span class="variable-name">opts</span></span>=();
getopts(<span class="string">"u:p:k:f:s:n:q:d:r:v"</span>,\%<span class="underline"><span class="variable-name">opts</span></span>);

<span class="comment-delimiter"># </span><span class="comment">Parse command line options, die if any not defined
</span><span class="keyword">if</span> (defined $<span class="variable-name">opts</span>{u}) {
    $<span class="variable-name">username</span> = $<span class="variable-name">opts</span>{u};
}
<span class="keyword">else</span> {
    <span class="keyword">die</span> <span class="string">"username not defined!"</span>;
}

<span class="keyword">if</span> (defined $<span class="variable-name">opts</span>{p}) {
    $<span class="variable-name">password</span> = $<span class="variable-name">opts</span>{p};
}
<span class="keyword">else</span> {
    <span class="keyword">die</span> <span class="string">"password not defined!"</span>;
}

<span class="keyword">if</span> (defined $<span class="variable-name">opts</span>{k}) {
    $<span class="variable-name">keyword</span> = $<span class="variable-name">opts</span>{k};
}
<span class="keyword">else</span> {
    <span class="keyword">die</span> <span class="string">"keyword not defined!"</span>;
}

<span class="keyword">if</span> (defined $<span class="variable-name">opts</span>{f}) {
    <span class="type">my</span> $<span class="variable-name">url</span> = $<span class="variable-name">opts</span>{f};
    @<span class="underline"><span class="variable-name">feeds</span></span> = XML::Feed-&gt;find_feeds($<span class="variable-name">url</span>);

    <span class="keyword">if</span> ($<span class="variable-name">feeds</span>[0]) {
        <span class="type">my</span> $<span class="variable-name">feed</span> = XML::Feed-&gt;parse(URI-&gt;new($<span class="variable-name">feeds</span>[0]));
        <span class="type">my</span> @<span class="underline"><span class="variable-name">entries</span></span> = $<span class="variable-name">feed</span>-&gt;entries();

        <span class="keyword">foreach</span> <span class="type">my</span> $<span class="variable-name">entry</span> (@<span class="underline"><span class="variable-name">entries</span></span>) {
            <span class="keyword">if</span> ($<span class="variable-name">entry</span>-&gt;link() =~ m<span class="string">/$keyword/</span>) {
                push (@<span class="underline"><span class="variable-name">goods</span></span>, $<span class="variable-name">entry</span>-&gt;link());
            }
        }
    }
}

<span class="keyword">if</span> (defined $<span class="variable-name">opts</span>{s}) {
    $<span class="variable-name">status</span> = $<span class="variable-name">opts</span>{s};
    <span class="keyword">if</span> (length($<span class="variable-name">status</span>) &gt; 140) {
        <span class="keyword">die</span> <span class="string">"status too long!"</span>;
    }
}

<span class="keyword">if</span> (defined $<span class="variable-name">opts</span>{n}) {
    $<span class="variable-name">num_results</span> = $<span class="variable-name">opts</span>{n};
}

<span class="keyword">if</span> (defined $<span class="variable-name">opts</span>{q}) {
    $<span class="variable-name">poll_frequency</span> = $<span class="variable-name">opts</span>{q};
}

<span class="keyword">if</span> (defined $<span class="variable-name">opts</span>{d}) {
    $<span class="variable-name">delay_updates</span> = $<span class="variable-name">opts</span>{d};
}

<span class="keyword">if</span> (defined $<span class="variable-name">opts</span>{r}) {
    $<span class="variable-name">random</span> = $<span class="variable-name">opts</span>{r};
}

<span class="keyword">if</span> (defined $<span class="variable-name">opts</span>{v}) {
    $<span class="variable-name">verbose</span> = 1;
}

printf <span class="string">"get %d search results on keyword \"%s\" each %d seconds\n"</span>,
    $<span class="variable-name">num_results</span>, $<span class="variable-name">keyword</span>, $<span class="variable-name">poll_frequency</span>;
printf <span class="string">"retweet from user %s password %s each %d seconds\n"</span>,
    $<span class="variable-name">username</span>, $<span class="variable-name">password</span>, $<span class="variable-name">delay_updates</span>;
<span class="keyword">if</span> (scalar (@<span class="underline"><span class="variable-name">goods</span></span>)) {
    printf <span class="string">"use random status relevant for keyword \"%s\"\nfrom feed %s\n"</span>,
    $<span class="variable-name">keyword</span>, $<span class="variable-name">feeds</span>[0];
}
<span class="keyword">elsif</span> ($<span class="variable-name">status</span>) {
    printf <span class="string">"use status \"%s\"\n"</span>, $<span class="variable-name">status</span>;
}
<span class="keyword">if</span> ($<span class="variable-name">verbose</span>) {
    print <span class="string">"be verbose\n"</span>;
}

<span class="comment-delimiter"># </span><span class="comment">Create a Net:Twitter object
</span><span class="type">my</span> $<span class="variable-name">nt</span> = Net::Twitter-&gt;new({
    username =&gt; $<span class="variable-name">username</span>,
    password =&gt; $<span class="variable-name">password</span>,
    traits =&gt; [qw<span class="string">/API::REST/</span>, qw<span class="string">/API::Search/</span>]
});

<span class="comment-delimiter"># </span><span class="comment">So only new search results are retweeted
</span><span class="type">my</span> $<span class="variable-name">since_id</span> = 0;
<span class="type">my</span> $<span class="variable-name">max_id</span> = 0;

<span class="keyword">while</span> (1) {

    <span class="comment"># Get search results on keyword
</span>    printf <span class="string">"searching "</span>;
    <span class="type">my</span> $<span class="variable-name">tweets</span> = $<span class="variable-name">nt</span>-&gt;search({
        q <span class="string">=&gt; $keyword,
        rpp =</span>&gt; $<span class="variable-name">num_results</span>,
        lang =&gt; <span class="string">'es'</span>,
        $<span class="variable-name">since_id</span> ? (since_id =&gt; $<span class="variable-name">since_id</span>) : ()
    });

    <span class="keyword">if</span> (defined $<span class="variable-name">tweets</span>) {
        print <span class="string">"ok\n"</span>;
    }
    <span class="keyword">else</span> {
        print <span class="string">"failed!\n"</span>;
    }   

    <span class="comment"># For each search result...
</span>    <span class="keyword">for</span> <span class="type">my</span> $<span class="variable-name">t</span> (@{$<span class="variable-name">tweets</span>-&gt;{results}}) {
        <span class="keyword">next</span> <span class="keyword">unless</span> $<span class="variable-name">t</span>-&gt;{id} &gt; $<span class="variable-name">since_id</span>;
        <span class="keyword">if</span> ($<span class="variable-name">t</span>-&gt;{id} &gt; $<span class="variable-name">max_id</span>) {
            $<span class="variable-name">max_id</span> = $<span class="variable-name">t</span>-&gt;{id};
        }
        <span class="comment"># Don't retweet if an own tweet or from user is the keyword
</span>        <span class="comment"># also if already a retweet when no status is given
</span>        <span class="keyword">if</span> (
            ($<span class="variable-name">t</span>-&gt;{from_user} ne $<span class="variable-name">username</span>) &amp;&amp;
            ($<span class="variable-name">t</span>-&gt;{from_user} ne $<span class="variable-name">keyword</span>) &amp;&amp;
            (($<span class="variable-name">status</span>) || ($<span class="variable-name">t</span>-&gt;{text} !~ m<span class="string">/^RT/</span>))
            ) {
            <span class="comment"># Build retweet string
</span>            <span class="type">my</span> $<span class="variable-name">s</span>;
            <span class="comment"># Prepend a random hashtag
</span>            <span class="keyword">if</span> ($<span class="variable-name">random</span> &gt; 0) {
                $<span class="variable-name">s</span> .= <span class="string">"#"</span>;
                <span class="type">my</span> @<span class="underline"><span class="variable-name">chars</span></span>=(<span class="string">'a'</span>..<span class="string">'z'</span>,<span class="string">'0'</span>..<span class="string">'9'</span>);
                <span class="keyword">foreach</span> (1..$<span class="variable-name">random</span>)
                {
                    $<span class="variable-name">s</span> .= $<span class="variable-name">chars</span>[rand @<span class="underline"><span class="variable-name">chars</span></span>];
                }
                $<span class="variable-name">s</span> .= <span class="string">" "</span>;
            }
            <span class="comment"># Use feed entry with given keyword if any
</span>            <span class="keyword">if</span> (scalar(@<span class="underline"><span class="variable-name">goods</span></span>) &gt; 0) {
                $<span class="variable-name">s</span> .= <span class="string">"@"</span> . $<span class="variable-name">t</span>-&gt;{from_user} . <span class="string">" "</span>;

                <span class="type">my</span> $<span class="variable-name">uri</span> = $<span class="variable-name">goods</span> [rand @<span class="underline"><span class="variable-name">goods</span></span>];
                <span class="type">my</span> $<span class="variable-name">content</span> = get($<span class="variable-name">uri</span>);
                utf8::decode($<span class="variable-name">content</span>);

                <span class="type">my</span> $<span class="variable-name">p</span> = HTML::TokeParser-&gt;new(\$<span class="variable-name">content</span>);
                <span class="keyword">if</span> ($<span class="variable-name">p</span>-&gt;get_tag(<span class="string">'title'</span>)) {
                    <span class="type">my</span> $<span class="variable-name">title</span> = $<span class="variable-name">p</span>-&gt;get_trimmed_text();
                    $<span class="variable-name">title</span> =~ s<span class="string">/&amp;/&amp;amp;/</span>g;
                    $<span class="variable-name">s</span> .= $<span class="variable-name">title</span> . <span class="string">". "</span>;
                }
                $<span class="variable-name">s</span> .= $<span class="variable-name">uri</span>;
            }
            <span class="comment"># Use specified status if any
</span>            <span class="keyword">elsif</span> ($<span class="variable-name">status</span>) {
                $<span class="variable-name">s</span> .= <span class="string">"@"</span> . $<span class="variable-name">t</span>-&gt;{from_user} . <span class="string">" "</span> . $<span class="variable-name">status</span>;
            }
            <span class="comment"># Use a simple retweet
</span>            <span class="keyword">else</span> {
                $<span class="variable-name">s</span> .= <span class="string">"RT @"</span> . $<span class="variable-name">t</span>-&gt;{from_user} . <span class="string">": "</span> . $<span class="variable-name">t</span>-&gt;{text};
            }

            <span class="keyword">if</span> ($<span class="variable-name">verbose</span>) {
                printf <span class="string">"%s\n"</span>, $<span class="variable-name">s</span>;
            }
            printf <span class="string">"%s retweet"</span>, $<span class="variable-name">t</span>-&gt;{from_user};

            <span class="comment"># Send update
</span>            <span class="keyword">if</span> ($<span class="variable-name">nt</span>-&gt;update($<span class="variable-name">s</span>)) {
                print <span class="string">"ed ok\n"</span>;
            }
            <span class="keyword">else</span> {
                print <span class="string">" failed!\n"</span>;
            }
            sleep $<span class="variable-name">delay_updates</span>;
        }
    }

    <span class="comment"># Set last received search result and sleep for a while
</span>    $<span class="variable-name">since_id</span> = $<span class="variable-name">max_id</span>;
    sleep $<span class="variable-name">poll_frequency</span>;
}
</pre>
<p>El usuario de Debian y Ubuntu sólo tiene que instalar el paquete libnet-twitter-perl. El <i>bot</i> sin embargo debería ser utilizable en otros sistemas como Windows. Instálese en ese caso <a href="http://www.activestate.com/activeperl/" target="_blank" rel="nofollow">ActivePerl</a> o, mejor aún, el entorno <a href="http://www.cygwin.com/" target="_blank" rel="nofollow">Cygwin</a> y obténgase la librería necesaria utilizando CPAN.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxav.net/index.php/2009/12/tu-propio-bot-para-twitter-en-perl/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Firefox más rápido</title>
		<link>http://www.linuxav.net/index.php/2009/10/firefox-mas-rapido/</link>
		<comments>http://www.linuxav.net/index.php/2009/10/firefox-mas-rapido/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 18:44:43 +0000</pubDate>
		<dc:creator>ismael</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[iceweasel]]></category>

		<guid isPermaLink="false">http://www.linuxav.net/?p=631</guid>
		<description><![CDATA[¿De verdad Google Chrome es tanto más rápido que Firefox? Puede que te sorprenda saber que las opciones por defecto de Firefox proceden de tiempos de Netscape y de ahí que estén optimizadas para conexiones por módem. Es posible adecuar el rendimiento de Firefox a las actuales conexiones de banda ancha, y hacerte olvidar de [...]]]></description>
			<content:encoded><![CDATA[<p>¿De verdad Google Chrome es tanto más rápido que Firefox? Puede que te sorprenda saber que las opciones por defecto de Firefox proceden de tiempos de Netscape y de ahí que estén optimizadas para conexiones por <i>módem</i>. Es posible adecuar el rendimiento de Firefox a las actuales conexiones de banda ancha, y hacerte olvidar de momento la idea de cambiar de navegador.</p>
<p>Un primer consejo es, desde luego, desactivar las extensiones mientras no las estás necesitando. Firebug, por ejemplo, es, desde luego, una aplicación <i>killer</i> para desarrolladores <i>web</i> que hace imprescindible a Firefox. Pero ralentiza el uso del navegador, y es raro que la necesites más que un par de ocasiones al mes &mdash;a no ser, por supuesto, que seas un profesional en el tema&mdash;. Lo dicho para Firebug vale para muchas otras extensiones complejas. Yo, por ejemplo, hoy por hoy sólo necesito Google Gears para subir <i>clips</i> a YouTube. El resto del tiempo está desactivada.</p>
<p><img src="http://www.linuxav.net/wp-content/uploads/166708746_38c5b2eadf_o_d.png" alt="extensiones firefox" title="166708746_38c5b2eadf_o_d" width="359" height="406" class="alignnone size-full wp-image-630" /></p>
<p>Por lo demás hay una serie de parámetros que es posible optimizar, y se listan debajo. Puedes, por supuesto, visitar about:config y configurarlas una por una. O puedes llevar ese código a prefs.js. La sugerencia es, desde luego, llevar esas opciones a un fichero user.js en el directorio de configuración de Firefox, junto al citado prefs.js. El fichero user.js es así portable de máquina en máquina. En mi caso, estas opciones están en todas las máquinas donde uso Firefox.</p>
<pre>
user_pref(<span class="string">"network.http.pipelining"</span>, <span class="constant">true</span>);
user_pref(<span class="string">"network.http.proxy.pipelining"</span>, <span class="constant">true</span>);
user_pref(<span class="string">"network.http.pipelining.maxrequests"</span>, 30);
user_pref(<span class="string">"nglayout.initialpaint.delay"</span>, 0);
user_pref(<span class="string">"config.trim_on_minimize"</span>, <span class="constant">true</span>);
user_pref(<span class="string">"browser.cache.memory.capacity"</span>, 27648);
user_pref(<span class="string">"browser.cache.memory.enable"</span>, <span class="constant">true</span>);
user_pref(<span class="string">"network.prefetch-next"</span>, <span class="constant">false</span>);
user_pref(<span class="string">"network.http.max-connections"</span>, 60);
user_pref(<span class="string">"network.http.max-connections-per-server"</span>, 32);
user_pref(<span class="string">"network.http.max-persistent-connections-per-proxy"</span>, 16);
user_pref(<span class="string">"network.http.max-persistent-connections-per-server"</span>, 16);
user_pref(<span class="string">"network.dns.disableIPv6"</span>, <span class="constant">true</span>);
user_pref(<span class="string">"content.notify.backoffcount"</span>, 5);
user_pref(<span class="string">"ui.submenuDelay"</span>, 0);
user_pref(<span class="string">"plugin.expose_full_path"</span>, <span class="constant">true</span>);
user_pref(<span class="string">"browser.sessionhistory.max_total_viewers"</span>, 2);
user_pref(<span class="string">"browser.sessionhistory.max_entries"</span>, 10);
</pre>
<ul>
<li>El <i>pipelining</i> en las conexiones HTTP 1.1 reduce la carga de red y el tiempo de carga de las páginas sobre conexiones cuando la latencia es demasiado elevada. Teóricamente no todos los servidores lo soportan y podrían comportarse incorrectamente si reciben peticiones de este tipo, de ahí que muchos aconsejen no activarlo. Yo no he encontrado problemas y sí una mejora clara en el rendimiento. 30 es una buena cifra para el máximo número de este tipo de peticiones concurrentes.</li>
<li>Tiene sentido visualizar la página ya según empieza a ser cargada, de ahí que se elimine cualquier intervalo antes de empezar a hacerlo.</li>
<li>Mejora también el rendimiento permitir que la aplicación haga <i>swap</i> una vez minimizada. De esta forma se libera memoria que hace más agil el uso de tu sistema operativo.</li>
<li>Almacenar en una <i>cache</i> imágenes, elementos de interfaz de usuario o páginas seguras acelera el rendimiento. ¡Piensa en la diferencia que supondría tener que decodificar estas últimas cada vez que son cargadas!</li>
<li>Una opción polémica es la de permitir la precarga de las páginas tras los enlaces que componen una página. Yo voto por liberar a la CPU de la tarea de precargar enlaces que probablemente no van a ser seguidos.</li>
<li>El ADSL y en general toda banda ancha permite un número mayor de conexiones HTTP concurrentes que las que permitían las conexiones por <i>módem</i>. Aumentar ese valor hoy por hoy mejora el rendimiento en todos los casos.</li>
<li>Mientras IPv6 no <i>exista</i>, desactivarlo también mejora el rendimiento.</li>
<li>Posiblemente sea sólo psicológico, pero eliminar el retardo con el que se abren las opciones del menú de la aplicación repercute en la sensación de un mejor rendimiento.</li>
<li>Por último, es improbable que te interesen páginas más allá de las diez últimas visitadas. Se libera así memoria y mejora el rendimiento de la aplicación y del sistema operativo.</li>
</ul>
<p>Haz la prueba y deja un comentario. ¿Notas la mejora en el rendimiento? Yo desde luego que sí. ¿Algún truco más?</p>
<p>Ah, el usuario de Ubuntu dispone por supuesto de Firefox tal cual. El usuario de Debian puede aplicar exactamente las mismas opciones en Iceweasel.</p>
<p>Captura de <a href="http://www.flickr.com/photos/pentadact/" target="_blank" class="en" rel="nofollow">Pentadact</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxav.net/index.php/2009/10/firefox-mas-rapido/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Compila tu propio kernel realtime en Debian y Ubuntu</title>
		<link>http://www.linuxav.net/index.php/2009/05/compila-tu-propio-kernel-realtime-en-debian-y-ubuntu/</link>
		<comments>http://www.linuxav.net/index.php/2009/05/compila-tu-propio-kernel-realtime-en-debian-y-ubuntu/#comments</comments>
		<pubDate>Wed, 27 May 2009 09:20:30 +0000</pubDate>
		<dc:creator>ismael</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[jack]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[realtime]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://www.linuxav.net/?p=534</guid>
		<description><![CDATA[El uso de un kernel modificado con los parches realtime es muy adecuado para sistemas de escritorio, y cabe decir que imprescindible para el creativo multimedia, necesitado de bajas latencias y de la mejor respuesta. Por suerte, hay un gran equipo de gente trabajando en los parches necesarios para transformar un kernel estándar Linux en [...]]]></description>
			<content:encoded><![CDATA[<p>El uso de un <i>kernel</i> modificado con los parches <i>realtime</i> es muy adecuado para sistemas de escritorio, y cabe decir que imprescindible para el creativo multimedia, necesitado de bajas latencias y de la mejor respuesta. Por suerte, hay un gran equipo de gente trabajando en los parches necesarios para transformar un <i>kernel</i> estándar Linux en uno que implemente multitarea apropiativa. Es decir, aquel que permite definir una serie de tareas que van a tener permitido acaparar el tiempo de CPU todo lo que necesiten para asegurar un mejor funcionamiento.</p>
<p>En particular, en el trabajo con audio, permitir un funcionamiento en tiempo real o apropiativo del servidor JACK facilita las latencias más bajas y la ausencia total de artificios en el audio. En el momento en el que JACK necesite la CPU, ninguna otra tarea en el sistema va a competir por ella. Cuando tú tienes el paquete de Donuts en la mano, tus amigos sólo comen los que quieres que coman.</p>
<p>Existe la posibilidad de acceder a un <i>kernel realtime</i> empaquetado en la mayor parte de las distribuciones más populares. Esta explicación te permite disponer de la ultimísima versión del mismo en tu Debian o Ubuntu, sin que necesites esperar a que alguien lo compile y lo empaquete por ti.</p>
<p><b>Requisitos previos</b></p>
<p>Asegúrate de que tu usuario es miembro del grupo src ejecutando el comando groups. Si src no aparece entre los grupos listados ejecuta como root:</p>
<pre>
  # adduser ismael src
  </pre>
<p>Sustituye por supuesto ismael por tu nombre de usuario en tu sistema. Ahora reinicia la sesión y vuelve a ejecutar groups para comprobarlo. Esto es necesario para poder trabajar bajo el directorio /usr/src.</p>
<pre>
  $ groups ismael
  ismael : ismael dialout cdrom floppy audio src video plugdev netdev
  </pre>
<p>Si quieres estar pendiente de las novedades en el soporte <i>realtime</i> al <i>kernel</i> Linux, deberías estar suscrito a la lista de correo linux-rt-users en vger.kernel.org. Simplemente envía un mensaje de correo sin asunto a majordomo@vger.kernel.org con el siguiente texto en el cuerpo:</p>
<pre>
  subscribe linux-rt-users
  </pre>
<p>Recibirás mensajes de progreso y confirmación, simplemente sigue el proceso sugerido.</p>
<p>Una vez suscrito, las novedades en la serie <i>preempt-rt</i> del <i>kernel</i> son anunciadas en mensajes de correo recibidos de <b>Thomas Gleixner</b> con un asunto como éste.</p>
<pre>
  [Announce] 2.6.29.4-rt16
  </pre>
<p>Te resultará sencillo filtrar estos mensajes, por ejemplo moviéndolos a una <i>mbox</i> separada o marcándolos con una estrella en Gmail. Explicar la forma de hacer esto queda fuera del alcance de este artículo.</p>
<p>El cuerpo del mensaje contendrá información como ésta.</p>
<pre>
  We are pleased to announce the next update to our new preempt-rt
  series.

  - rebase to 2.6.29.4 (no conflicts)
  - futex updates (tglx, dvhart)

  Download locations:

  http://rt.et.redhat.com/download/
  http://www.kernel.org/pub/linux/kernel/projects/rt/

  Information on the RT patch can be found at:

  http://rt.wiki.kernel.org/index.php/Main_Page

  to build the 2.6.29.4-rt16 tree, the following patches should be
  applied:

  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.4.tar.bz2
  http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.29.4-rt16.bz2

  The broken out patches are also available at the same download
  locations.

  Enjoy !

  tglx

  --
  To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
  the body of a message to majordomo@vger.kernel.org
  More majordomo info at  http://vger.kernel.org/majordomo-info.html
  </pre>
<p><b>Descarga y parchea el <i>kernel</i></b></p>
<p>Primero descarga el kernel sobre el que hay que aplicar los parches, en nuestro caso el 2.6.29.4.</p>
<pre>
  $ cd /usr/src
  $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.4.tar.bz2
  </pre>
<p>Y ahora el parche <i>realtime</i> que se está anunciando con el mensaje de correo.</p>
<pre>
  $ wget http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.29.4-rt16.bz2
  </pre>
<p>O bien visita esa URL y mira qué hay de nuevo. Para cuando vayas a compilar, una versión más reciente del parche podría estar disponible.</p>
<p>Descomprime ahora las fuentes del <i>kernel</i>.</p>
<pre>
  $ tar xvfj linux-2.6.29.4.tar.bz2
  </pre>
<p>Y aplica el parche <i>realtime</i>.</p>
<pre>
  $ cd linux-2.6.29.4
  $ bzcat ../patch-2.6.29.4-rt16.bz2 | patch -p1
  </pre>
<p><b>Configura y compila el <i>kernel</i></b></p>
<p>Procede ahora a configurar el <i>kernel</i>.</p>
<pre>
  $ make clean &#038;&#038; make mrproper
  $ cp /boot/config-`uname -r` .config
  $ make menuconfig
  </pre>
<p>Visita ahora la opción de menú Processor type and features:</p>
<p>Asegúrate de que High Resolution Timer Support y Symmetric multi-processing support están activados.</p>
<p>En Processor family, elige la CPU de tu sistema.</p>
<p>En Preemption Mode, elige Complete Preemption (Real-Time).</p>
<p>En Timer frequency, selecciona 1000 HZ.</p>
<p>Selecciona Exit y contesta Yes a la pregunta sobre si salvar la configuración del <i>kernel</i>.</p>
<p>Es momento de iniciar la compilación. A la versión del <i>kernel</i> ya le habrá sido añadida la del parche <i>realtime</i>, y como revisión utilizamos el nombre de nuestra máquina &mdash;recuerda que hemos elegido nuestra CPU y el <i>kernel</i> podría no ser utilizable en otros ordenadores&mdash; y una marca temporal. Construirás la imagen del <i>kernel</i> y el correspondiente paquete con los ficheros de cabecera, necesarios más tarde para compilar tus módulos. Ejecuta make-kpkg, hazte un café, o dos, y vuelve cuando haya terminado.</p>
<pre>
  $ make-kpkg clean
  $ make-kpkg --rootcmd fakeroot --initrd --revision `hostname -s`~`date +%Y%m%d` kernel_image kernel_headers
  </pre>
<p>Estás ahora haciendo <i>surf</i> sobre la cresta de peligrosas olas. No hay ninguna garantía de que todo va a funcionar bien. De hecho, lo que se espera de ti ahora es que reportes cualquier inconveniente a la lista de correo. El placer de estar siendo el primero en correr algo que a los usuarios de Ubuntu Studio les quedan meses para disfrutar, por supuesto no te lo quita nadie.</p>
<p>Utiliza <a href="http://rt.wiki.kernel.org/index.php/Cyclictest" class="en" target="_blank" rel="nofollow">Cyclictest para medir la respuesta de tu sistema</a> con temporizadores de alta resolución y baja latencia. Deja tus resultados junto con la configuración de tu máquina y la versión del <i>kernel</i> que estás usando en los comentarios.</p>
<p><b>Sólo para gurús</b> <img src="http://www.linuxav.net/wp-includes/images/smilies/icon_wink.gif" border="0" alt=";)"></p>
<p>Si eres usuario de Debian inestable, podrías haber notado que compilar un <i>kernel</i> utilizable se ha complicado en los últimos tiempos, después de las últimas modificaciones de <b>Manoj Srivastava</b> al paquete kernel-package. Resumiendo, Manoj asume ahora que cada empaquetador podría desear elegir su propia forma de crear la imagen initrd con los módulos necesarios para el arranque de la máquina. No se presume si por defecto se va a utilizar initramfs o yaird, o cualquier otra aplicación. De ahí que aunque especifiques &#8211;initrd como argumento a make-kpkg, aquella imagen no va a ser creada y te expones a un <i>kernel panic</i> durante el arranque con el nuevo núcleo.</p>
<p>La solución es copiar uno de los <i>scripts</i> de ejemplo proporcionados con el paquete kernel-package al directorio que aloja aquellos a ser ejecutados durante la post instalación del kernel. Por si el update-grub final no se ejecutase en el momento adecuado, es decir, después de que la imagen initrd haya sido creada, copiaremos allí también el ejecutable, modificando los nombres de fichero para elegir su orden de ejecución.</p>
<pre>
  # cp /usr/share/kernel-package/examples/etc/kernel/postinst.d/initramfs /etc/kernel/postinst.d/40initramfs
  # cp /usr/sbin/update-grub /etc/kernel/postinst.d/99update-grub
  </pre>
<p>Ah, si la compilación falla por la ausencia del fichero zlib.h, simplemente instala el paquete zlib1g-dev y prueba de nuevo.</p>
<p>Buenas noches y buena suerte.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxav.net/index.php/2009/05/compila-tu-propio-kernel-realtime-en-debian-y-ubuntu/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Notación musical en Linux</title>
		<link>http://www.linuxav.net/index.php/2009/05/notacion-musical-en-linux/</link>
		<comments>http://www.linuxav.net/index.php/2009/05/notacion-musical-en-linux/#comments</comments>
		<pubDate>Mon, 25 May 2009 15:29:20 +0000</pubDate>
		<dc:creator>ismael</dc:creator>
				<category><![CDATA[Audio]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[alsa]]></category>
		<category><![CDATA[kde4]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[midi]]></category>
		<category><![CDATA[musica]]></category>
		<category><![CDATA[notacion]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.linuxav.net/?p=527</guid>
		<description><![CDATA[Dave Phillips
Antes de lanzarme al informe, debo añadir unas palabras sobre LilyPond y su especial relación con los programas revisados aquí.
Ya he escrito sobre el asombroso LilyPond en artículos anteriores, y me hace feliz informar de que el proyecto sigue vivo y floreciente, en la versión 2.12 de su rama estable. Las funciones de desarrollo [...]]]></description>
			<content:encoded><![CDATA[<p><b>Dave Phillips</b></p>
<p>Antes de lanzarme al informe, debo añadir unas palabras sobre LilyPond y su especial relación con los programas revisados aquí.</p>
<p>Ya he escrito sobre el asombroso LilyPond en artículos anteriores, y me hace feliz informar de que el proyecto sigue vivo y floreciente, en la versión 2.12 de su rama estable. Las funciones de desarrollo y mantenimiento las lleva a cabo una numerosa comunidad de usuarios y programadores, y se trata de un proyecto maduro. Muchos usuarios se han pasado a LilyPond desde otros populares programas de notación, a pesar de la interfaz basada en texto y la operativa desde línea de comandos. La calidad de la salida de LilyPond es así de atractiva.</p>
<p>Dado que la interfaz está basada en texto ASCII, muchos usuarios buscan una interfaz gráfica alternativa para LilyPond. La mayor parte de los programas presentados en este artículo pueden ser considerados <i>front ends</i> a LilyPond, pero varían en la clase y nivel de soporte a LilyPond. Los hay entornos de edición de texto especializados en notación y secuenciación. En todos los casos LilyPond es el motor que proporciona la capacidad de notación. En algunos casos se requiere cierto conocimiento de LilyPond, mientras que en otros la presencia de LilyPond está oculta por completo al usuario.</p>
<p><b>Comentarios generales</b></p>
<p>Programar una aplicación de notación pone en problemas a los desarrolladores. Un programa de notación completo implica un motor gráfico complejo, entrada y salida de audio y MIDI y soporte para importar y exportar una gran variedad de formatos de ficheros. Mas aún, el desarrollador debe decidir si su programa va a servir como ayuda al compositor o simplemente como máquina de escribir del músico. Esta distinción impone importantes aspectos del diseño básico de la aplicación, especialmente a nivel de interfaz de usuario.</p>
<p>Hay paquetes que combinan los dos factores de diseño con éxito, pero la necesidad de esa máquina de escribir de calidad profesional siempre demanda una aplicación dedicada. La música imprimida desde un secuenciador de uso general es útil, pero raramente es favorable la comparación con la salida de una aplicación dedicada como es LilyPond.</p>
<p>Los requisitos esenciales para las aplicaciones de notación incluyen funciones de trazado de partitura, métodos de entrada de datos, paletas de símbolos musicales, soporte para salida de audio y opciones para impresión de la partitura finalizada. Los programas básicos pueden incluir sólo un subconjunto de las características posibles, mientras que aplicaciones más profesionales facilitan un mayor control sobre los detalles del trabajo. Por supuesto que mayor control implica mayor complejidad. Los diseñadores de aplicaciones de notación trabajan duro para compensar la facilidad de uso con una plétora de características.</p>
<p>Considérense las necesidades de distintos tipos de usuario; los compositores de escritorio pueden requerir sólo una paleta de notación simple, pero podrían necesitar soporte para entrada MIDI, desde fichero o desde un teclado, y una representación precisa de ess datos. Compositores avanzados podrían no necesitar MIDI pero características como una amplia paleta de símbolos, extracción de partes, o incluso soporte para la manipulación de partituras desde rutinas programadas en Python u otros lenguajes de propósito general. El mundo comercial del <i>software</i> musical ofrece programas que cubren estas necesidades. Finale y Sibelius son dos de las aplicaciones de notación completas más conocidas en el mundo Windows y Mac, y otras aplicaciones más económicas y con menos características están también disponibles.</p>
<p>En los secuenciadores de audio y MIDI modernos se dispone de notación musical, pero la implementación es necesariamente limitada. Un programa de notación completo tiene que ser una aplicación independiente, aunque debe admitirse que las herramientas de notación en aplicaciones como Cubase o Rosegarden son adecuadas para tareas como las hojas principales, las guías de acordes y para piezas relativamente cortas. Un trabajo más ambicioso puede llevarse a cabo con estos programas, pero sus características de notación son sólo un componente de un diseño multipropósito. Debo señalar que los desarrolladores de Rosegarden han prestado gran atención a sus características de notación, y merece la pena recordar que Rosegarden dispone de exportación al formato LilyPond.</p>
<p><b>El equipo de pruebas</b></p>
<p>He elegido un sistema sencillo Ubuntu 8.10 con el <i>kernel</i> 2.6.27-9 como plataforma de pruebas. Mi decisión ha estado influida en parte por la disponibilidad de los paquetes en sus repositorios, donde dispongo además de cualquier utilidad de desarrollo para satisfacer dependencias avanzadas. El soporte <i>realtime</i> en este caso no es obligatorio, aunque en ese caso mejoraría la calidad de la salida de audio.</p>
<p><b>Denemo</b></p>
<p>Denemo es a la vez un editor con interfaz de usuario para compositores con editor de partituras LilyPond y un entorno basado en notación para la composición con MIDI. El trabajo reciente en Denemo ha mejorado la interfaz de usuario y la estabilidad general de la aplicación, y en la versión pública 0.8.0 se han añadido muchas nuevas características. El trabajo de desarrollo es intenso y el equipo está siempre abierto a sugerencias para nuevas e incluso inhabituales funciones.</p>
<p>La intefaz de Denemo opta por un sistema de menús en lugar de por paletas gráficas que presenten la colección de símbolos de notación. A primera vista puede pensarse que este diseño impide un trabajo rápido, pero el punto clave para la productividad en Denemo es su uso extensivo de atajos de teclado. Casi cualquier función del programa está disponible desde el teclado del ordenador, y una vez que el usuario se acostumbra a la asignación de atajos, el trabajo es muy rápido.</p>
<p><a href="http://www.linuxav.net/wp-content/uploads/1-denemo-0821.png"><img src="http://www.linuxav.net/wp-content/uploads/1-denemo-0821-400x166.png" alt="" title="1-denemo-0821" width="400" height="166" class="alignnone size-medium wp-image-529" /></a></p>
<p>Es posible la entrada de datos utilizando MIDI, en tiempo real o desde fichero, ya sea un fichero existente de Denemo, una partitura de LilyPond, o incluso audio en tiempo real (!). Además, Denemo puede extenderse mediante el lenguaje de programación Scheme. El usuario puede definir y visualizar nuevas opciones de menú para el programa, dándole así a Denemo una posición única entre los programas de ayuda para LilyPond que se presentan en este artículo. Scheme no es un lenguaje difícil de aprender &mdash;es una variedad de Lisp&mdash; y aprender al menos un poco facilita un gran poder al usuario de Denemo.</p>
<p>Denemo está repleto de herramientas molonas para compositores. Puedes cambiar entre edición gráfica o basada en texto, se soportan símbolos de acordes para bajo y guitarra, y el soporte a Scheme permitiría incluso la composición algorítmica &mdash;para los desarrolladores de Denemo; ¡esto molaría un montón!&mdash;. Puedes definir qué aplicaciones externas usarás para reproducir audio y MIDI, incluyendo la remarcable posibilidad de utilizar Csound como motor de audio. Los compositores pueden así acceder a las increibles características de Csound desde una aplicación de notación estándar. El secuenciador Rosegarden puede ser usado también como aplicación de notación para Csound, pero no facilita una conexión con Csouns tan integrada. Denemo es la única aplicación que facilita este tipo de conexión para la salida de audio.</p>
<p>Los ficheros pueden ser cargados y salvados en el formato XML propio de Denemo o en el formato nativo de LilyPond. Es posible también exportar a PDF. En el momento de escribir esto, no se soporta MusicXML para importar o exportar, pero la aplicación musicxml2ly de LilyPond permite la traducción de ficheros entre MusicXML y LilyPond.</p>
<p>Versiones anteriores de Denemo sufrían de problemas de estabilidad, y de una imponente curva de aprendizaje. Me alegra informar de que la estabilidad ya no es unproblema, y de que existe mucho material de referencia actualizado, ficheros de ejemplo y documentación para el usuario.</p>
<p><b>Frescobaldi</b></p>
<p>Frescobaldi es una obra de los desarrolladores de la fantástica aplicación lilypond-kde4. Frescobaldi no es en sí mismo un editor de notación. Más bien facilita un entorno especializado para editar partituras en el formato nativo basado en texto de LilyPond. Facilita amenidades como resaltado de sintaxis, ayuda inmediata &mdash;tanto para LilyPond como para el propio Frescobaldi&mdash; y previsualización de la partitura. La interfaz de usuario está refinada, es atractiva, y el programa se domina sin dificultad.</p>
<p><a href="http://www.linuxav.net/wp-content/uploads/2-frescobaldi-077.png"><img src="http://www.linuxav.net/wp-content/uploads/2-frescobaldi-077-400x210.png" alt="" title="2-frescobaldi-077" width="400" height="210" class="alignnone size-medium wp-image-530" /></a></p>
<p>El último Frescobaldi requiere de KDE4 actualizado, y no es probable que esté disponible desde repositorios para sistemas Linux algo antiguos &mdash;como 64 Studio 2.1 ó JAD 1.0&mdash;. Está incluso ausente de mis repositorios para Ubuntu 8.10 pero, como mencioné antes, el sistema está lo suficientemente actualizado como para facilitar su compilación. Las dependencias perdidas las resuelve Synaptic fácilmente, y no he tenido problemas para compilar e instalar versiones recientes de la aplicación.</p>
<p>Aún así tengo sugerencias para los desarrolladores. En la actualidad el flujo de trabajo te requiere salvar las ediciones antes de previsualizarlas. Me gustaría un modo de edición con previsualización tras un <i>clic</i>, que no requiera de un salvado explícito, si esto es posible. Tengo otro inconveniente con la función de impresión de Frescobaldi. Según escribo esto, Frescobaldi sólo imprime a PDF o PostScript. Me gustaría poder utilizar la impresora de mi sistema desde el propio programa. Por último, dado que LilyPond es capaz de generar un fichero MIDI desde su formato nativo, ¿por qué no facilitar una función de reproducción MIDI?</p>
<p>Aparte de mis deseos, me gusta Frescobaldi y voy a seguir su desarrollo de cerca. Si buscabas un editor LilyPond dedicado &mdash;y no te atreves a aprender Emacs&mdash; deberías probar Frescobaldi.</p>
<p><b>Canorus</b></p>
<p>Canorus comenzó como <i>fork</i> del proyecto NoteEdit que describiré en la segunda parte de este artículo. En un momento dado pareció que el programador de NoteEdit iba a abandonar el proyecto, así que <b>Reinhard Katzmann</b> formó un nuevo grupo de desarrolladores para el mismo. Canorus es el resultado de su esfuerzo para proporcionar &laquo;un editor de partituras libre y extensible que soporte escritura de notas, importación y exportación de distintos formatos de fichero, entrada y salida MIDI, <i>scripting</i> y más&raquo;. La última <i>beta</i> de Canorus 0.7 es su última parada antes de la meta.</p>
<p><a href="http://www.linuxav.net/wp-content/uploads/3-canorus-07b.png"><img src="http://www.linuxav.net/wp-content/uploads/3-canorus-07b-400x213.png" alt="" title="3-canorus-07b" width="400" height="213" class="alignnone size-medium wp-image-531" /></a></p>
<p>El sitio de la aplicación reconoce que el <i>software</i> es calidad <i>beta</i>. Aunque cada nuevo lanzamiento incluye características no disponibles en versiones anteriores, podría no ser tan fantásticamente estable como la versión pública 0.5. Resumiendo, las versiones <i>beta</i> no deberían considerarse para un trabajo serio en este punto. Eres bienvenido a probarlas, los desarrolladores quieren informes de sus usuarios, pero si te subes a la ola, ten cuidado.</p>
<p>Se facilitan versiones estables y en desarrollo desde los enlaces en el sitio de la aplicación. Están disponibles paquetes instalables para Debian y Windows, así como paquetes con fuentes independientes de la plataforma en formatos <i>zip</i> y <i>tarball</i>.</p>
<p>Construir la aplicación completa requiere de ciertas dependencias, incluyendo Qt4 reciente y la utilidad cmake. Son necesarios LaTeX y el visualizador LyX para construir la documentación, pero las versiones que he encontrado en Ubuntu 8.10 son inutilizables con Canorus, así que me quedé sin dicha documentación. Por suerte se trata de un paso opcional, así que si el compilado parece fallar con la documentación, simplemente sigue con el resto de pasos. No dispondrás de la ayuda para el usuario en el menú Help, pero esta carencia se ve mitigada por los avisos de la interfaz de usuario, y por la relativa sencillez de uso de la aplicación.</p>
<p>Me doy cuenta de que estoy probando una versión <i>beta</i> y de que la documentación estará disponible en la versión pública final, pero creo que sería sabio por parte de los desarrolladores facilitar la documentación ya compilada en este tipo de versiones previas. Me sorprende que un sistema tan reciente como Ubuntu 8.10 no facilite una cadena de herramientas de compilado que funcione para construir la documentación de Canorus, y me gustaría poder descargar esa documentación del sitio de Canorus. Sea lo que sea que se incluya en el paquete final, una versión HTML simple en el sitio <i>web</i> sería un feliz aporte al material disponible.</p>
<p>El instalador no añadió un icono a mi menú de aplicaciones, así que inicié el programa escribiendo canorus en mi ventana de terminal. No hay ayuda a la línea de comandos utilizando -h ó &#8211;help. Cuando se inicia Canorus, verás una pantalla <i>splash</i> durante unos segundos, y después un lienzo con una marca de inicio sencilla.</p>
<p>Canorus adopta y extiende las características que ya se encontraban en NoteEdit. Como características resaltables se incluyen un excelente método de entrada para notación polifónica, conectividad MIDI con el secuenciador ALSA &mdash;esto es, entrada y salida MIDI multiplexada&mdash;, <i>scripting</i> con Python o Ruby, una rica selección de símbolos estándar y soporte para eventos definidos por el usuario.</p>
<p>Canorus funciona en los modos de selección o edición. En el último, los símbolos musicales se incluyan y se borran de forma definible por el usuario tanto con el ratón como con atajos de teclado típicos de Emacs &mdash;Del para borrar el símbolo seleccionado, Ctrl-Z para <i>undo</i>, Ctrl-A para seleccionar todo, etc.&mdash;. Puedes dividir un proyecto en distintas hojas. Cada una incluye controles para canales MIDI y asignaciones típicas de instrumentos General MIDI. Se prescinde de menús de contexto a favor de menús desplegables, lo que puede frustrar a algunos usuarios. En mi opinión en cambio ese diseño deja la pantalla libre de saturaciones molestas.</p>
<p>Sobre el soporte a ficheros; pueden importarse ficheros MIDI o en el formato MusicXML. Puedes salvar tu trabajo en el formato de projecto canorus .can o en el formato basado en XML, o exportarlo para LilyPond o como MusicXML. Puedes también exportar tu trabajo como fichero MIDI o como fichero gráfico en formato PDF o SVG. Canorus imprime tu notación filtrándola a través de LilyPond. Designas el binario LilyPond en el menú Tools/Settings, donde también seleccionas tu visualizador PDF favorito &mdash;el formato de salida por defecto en LilyPond&mdash;.</p>
<p>Canorus se parece a su excelente predecesor en su clara presentación y en su sencillez de uso. Como he mencionado, las versiones <i>beta</i> requieren probadores, así que si te apetece algo de riesgo, puedes ayudar con el desarrollo de este fantástico programa.</p>
<p>Visto en <a href="http://www.linuxjournal.com/content/music-notation-software-linux-progress-report-part-1" class="en" target="_blank" rel="nofollow">Linux Journal</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxav.net/index.php/2009/05/notacion-musical-en-linux/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
