<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>LuAuF</title>
	
	<link>http://luauf.com</link>
	<description />
	<lastBuildDate>Tue, 30 Jun 2009 09:00:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<creativeCommons:license>http://creativecommons.org/licenses/by/2.5/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/luauf" type="application/rss+xml" /><feedburner:emailServiceId>luauf</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Herramientas profesionales gratuitas de Microsoft para estudiantes</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/9BrVaxJ60Mg/</link>
		<comments>http://luauf.com/2009/06/30/herramientas-profesionales-de-microsoft-sin-costo/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 09:00:32 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Miscelaneas]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Express]]></category>
		<category><![CDATA[gratis]]></category>
		<category><![CDATA[grauito]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[profesionales]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[XNA]]></category>
		<category><![CDATA[XNA Game Studio]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1074</guid>
		<description><![CDATA[Los que me conocen me escucharán hablar mal de Microsoft en varios aspectos y por publicar este artículo no significa que pierda mi postura de los mismos.
Simplemente me pareció un aporte importante para aquella comunidad que utiliza los productos de Microsoft, pero que quieren dejar de estar fuera de la ley y empezar utilizar herramientas [...]]]></description>
			<content:encoded><![CDATA[<p>Los que me conocen me escucharán hablar mal de Microsoft en varios aspectos y por publicar este artículo no significa que pierda mi postura de los mismos.</p>
<p>Simplemente me pareció un aporte importante para aquella comunidad que utiliza los productos de Microsoft, pero que quieren dejar de estar fuera de la ley y empezar utilizar herramientas gratuitas.</p>
<p>Microsoft DreamSpark es una propuesta de Microsoft, especialmente dedicada a estudiantes de nivel superior, que ofrece sus herramientas de desarrolllo y diseño a nivel profesional y sin costo alguno.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/06/dreamspark.png"><img class="alignnone size-medium wp-image-1075" title="dreamspark" src="http://luauf.com/wp-content/uploads/2009/06/dreamspark-300x142.png" alt="dreamspark" width="300" height="142" /></a></p>
<p><span id="more-1074"></span>Entre las herramientas que ofrece podemos disponer de:</p>
<ul>
<li>Microsoft SQL Server 2008 Developer Edition</li>
<li>Microsoft Visual Studio 2005 Professional Edition</li>
<li>Microsoft Visual Studio 2008 Professional Edition</li>
<li>Microsoft Expression Studio 1.0</li>
<li>Microsoft Expression Studio 2 Trial Edition (includes Web, Blend, Media, and Design)</li>
<li>Microsoft Windows Server 2003 R2 Standard Edition</li>
<li>Microsoft Windows Server 2008 Standard Edition</li>
<li>IT Academy Student Pass</li>
<li>SQL Server 2008 Express Edition</li>
<li>Visual Studio 2008 Express Edition</li>
<li>XNA Game Studio 2.0 (with 12-month Creators Club Student trial membership)</li>
<li>Virtual PC 2007</li>
<li>Visual Basic 2005 Express</li>
<li>Visual C++ 2005 Express</li>
<li>Visual C# 2005 Express</li>
<li>Visual Web Developer 2008 Express</li>
<li>Visual Basic 2008 Express</li>
<li>Visual C++2008 Express</li>
<li>Visual C# 2008 Express</li>
</ul>
<p>Enlace: <a href="https://www.dreamspark.com/">Microsoft DreamSpark</a></p>
<p>Vía: <a href="http://josepros.blogspot.com/2009/06/microsoft-dreamspark.html">El Blog de Josep Ros</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/9BrVaxJ60Mg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/06/30/herramientas-profesionales-de-microsoft-sin-costo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://luauf.com/2009/06/30/herramientas-profesionales-de-microsoft-sin-costo/</feedburner:origLink></item>
		<item>
		<title>El manga de Ubuntu ¿no será demasiado?</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/wCMSqY5tveU/</link>
		<comments>http://luauf.com/2009/06/28/el-manga-de-ubuntu-%c2%bfno-sera-demasiado/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 09:00:12 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[comics]]></category>
		<category><![CDATA[japon]]></category>
		<category><![CDATA[manga]]></category>
		<category><![CDATA[ubunchu]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1070</guid>
		<description><![CDATA[Se sabe que Ubuntu es popular, muy popular. Se sabe de todo el fanatismo que hay detrás de la distro y de las masas que mueve, se sabe también del merchandising que dispone, pero&#8230; un manga ¿no será demasiado?
Ubunchu, el manga de Ubuntu es producto de la iniciativa de dos miembros del Ubuntu Japanese Team [...]]]></description>
			<content:encoded><![CDATA[<p>Se sabe que <strong>Ubuntu</strong> es popular, muy popular. Se sabe de todo el fanatismo que hay detrás de la distro y de las masas que mueve, se sabe también del merchandising que dispone, pero&#8230; un manga ¿no será demasiado?</p>
<p>Ubunchu, el manga de Ubuntu es producto de la iniciativa de dos miembros del <a href="https://launchpad.net/~japaneseteam">Ubuntu Japanese Team</a> y <a href="http://doctormo.wordpress.com/">Doctormo</a>. Siendo este último un blog que según palabras del propio autor la popularidad de su blog se vio incrementada de manera notable luego de la publicación del manga, recibiendo enlace de numerosos sitios de manga y algunos blogs de Linux.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/06/ubunchu.jpg"><img class="alignnone size-medium wp-image-1071" title="ubunchu" src="http://luauf.com/wp-content/uploads/2009/06/ubunchu-300x110.jpg" alt="ubunchu" width="300" height="110" /></a></p>
<p><span id="more-1070"></span>Ubunchu ya tiene publicados dos capítulos y traducciones a varios idiomas:</p>
<ul>
<li>Capítulo 1: <a href="http://doctormo.wordpress.com/2009/04/02/ubunchu-the-ubuntu-manga-is-now-in-english/">Ubuntu se presenta</a></li>
<li>Capítulo 2: <a href="http://doctormo.wordpress.com/2009/06/05/ubunchu-chapter-02-is-here/">CLI con GNOMES</a></li>
</ul>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/06/ubunchu2.png"><img class="alignnone size-medium wp-image-1073" title="ubunchu2" src="http://luauf.com/wp-content/uploads/2009/06/ubunchu2-231x300.png" alt="ubunchu2" width="231" height="300" /></a></p>
<p>Vía: <a href="http://www.pctux.com.ar/2009/06/ubunchu-el-manga-de-ubuntu-capitulo-1-traducido-al-espanol.html">PC Tux</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/wCMSqY5tveU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/06/28/el-manga-de-ubuntu-%c2%bfno-sera-demasiado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://luauf.com/2009/06/28/el-manga-de-ubuntu-%c2%bfno-sera-demasiado/</feedburner:origLink></item>
		<item>
		<title>Monitorear las operaciones de E/S de nuestro sistema</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/2eW0q6K-Lpo/</link>
		<comments>http://luauf.com/2009/06/26/monitorear-las-operaciones-de-es-de-nuestro-sistema/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 07:00:38 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[E/S]]></category>
		<category><![CDATA[entrada]]></category>
		<category><![CDATA[entrada/salita]]></category>
		<category><![CDATA[htop]]></category>
		<category><![CDATA[input]]></category>
		<category><![CDATA[input/output]]></category>
		<category><![CDATA[io]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[output]]></category>
		<category><![CDATA[salida]]></category>
		<category><![CDATA[top]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1067</guid>
		<description><![CDATA[En los sistemas GNU/Linux tenemos procesos para monitorear los procesos (valga la redundancia), como top o htop.
Unas operaciones aveces no tenidas en cuenta, pero que puede resultar quien más ralentiza un sistema, son las operaciones de Entrada/Salida. Para monitorear las operaciones E/S en Linux podemos utilizar iotop, una especie de top pero dedicado a monitorear [...]]]></description>
			<content:encoded><![CDATA[<p>En los sistemas GNU/Linux tenemos procesos para monitorear los procesos (valga la redundancia), como top o <a href="http://luauf.com/2009/04/08/htop-visor-de-procesos-interactivo-para-linux/">htop</a>.</p>
<p>Unas operaciones aveces no tenidas en cuenta, pero que puede resultar quien más ralentiza un sistema, son las operaciones de Entrada/Salida. Para monitorear las operaciones E/S en Linux podemos utilizar iotop, una especie de top pero dedicado a monitorear las operaciones IO (Input/Output).</p>
<p><span id="more-1067"></span><strong>iotop</strong> es una aplicación escrita el <strong>Python</strong>, por lo tanto requiere de 2.5 o superior y una versión del kernel superior a la 2.6.20.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/06/iotop.png"><img class="alignnone size-medium wp-image-1068" title="iotop" src="http://luauf.com/wp-content/uploads/2009/06/iotop-300x277.png" alt="iotop" width="300" height="277" /></a></p>
<p><strong>iotop</strong> nos muestra una tabla similar a la que imprime un comando top, donde en la primer línea nos muestra las lecturas y escritura que se están realizando y luego un listado tabulado con el PID del proceso, la prioridad, usuario, lecturas y escrituras que está haciendo a disco, el uso de swap, el porcentaje de IO que repsenta y el nombre del proceso o comando que lo está ejecutando.</p>
<p>El uso de iotop, así como otros <strong>comandos de monitoreo</strong> nos permite dimensionar de forma correcta el equipo que necesitamos para correr nuestro sistema, pues al fin y al cabo, adquirir un equipo no se trata de incluir el último procesador, mucha memoria, el disco más grande, etc.</p>
<p>Me olvidaba, pero creo que a esta altura está demás decir que para instalar iotop puedes utilizar el gestor de paquetes de tu distribución de Linux, en mi caso como utilizo un sistema basado en debian me valgo de <a href="http://luauf.com/tag/apt/">aptitude</a>:</p>
<p><codeline>sudo aptitude install iotop</codeline></p>
<p>Vía: <a href="http://www.muylinux.com/2009/05/05/%C2%BFconoces-tu-io/">MuyLinux</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/2eW0q6K-Lpo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/06/26/monitorear-las-operaciones-de-es-de-nuestro-sistema/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://luauf.com/2009/06/26/monitorear-las-operaciones-de-es-de-nuestro-sistema/</feedburner:origLink></item>
		<item>
		<title>Trappear Ctrl+C en bash</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/icRY18fCtKI/</link>
		<comments>http://luauf.com/2009/06/24/trappear-ctrlc-en-bash/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 08:00:30 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[archivos de lockeo]]></category>
		<category><![CDATA[archivos temporales]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[lock]]></category>
		<category><![CDATA[robusto]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[script robust]]></category>
		<category><![CDATA[tappear]]></category>
		<category><![CDATA[trap]]></category>
		<category><![CDATA[trappear]]></category>
		<category><![CDATA[trapper]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1065</guid>
		<description><![CDATA[En alguna ocasión, puede resultar útil trappear señales en los shell scripts. Un ejemplo clásico de señal a trapear es el famoso Ctrl+C (^C).
Trappear una señal es fácil, simplemente debemos definir una acción (o función) que se ejecutará al momento de recibir la señal, y luego definir las señales a trappear con el comando trap.
Un [...]]]></description>
			<content:encoded><![CDATA[<p>En alguna ocasión, puede resultar útil trappear señales en los<strong> shell scripts</strong>. Un ejemplo clásico de señal a trapear es el famoso <strong>Ctrl+C</strong> (^C).</p>
<p>Trappear una señal es fácil, simplemente debemos definir una acción (o función) que se ejecutará al momento de recibir la señal, y luego definir las señales a trappear con el comando <strong>trap</strong>.</p>
<p><span id="more-1065"></span>Un ejemplo sencillo:</p>
<div class="syntax_hilite">
<div id="code-2">
<div class="code">#!/bin/bash</p>
<p>function trapper <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; echo <span style="color:#CC0000;">"Signal trapped"</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span></p>
<p>trap trapper EXIT</p>
<p>while true;<br />
do<br />
&nbsp; &nbsp; echo <span style="color:#CC0000;">"I'm alive"</span><br />
&nbsp; &nbsp; sleep <span style="color:#800000;">1</span><br />
done</div>
</div>
</div>
<p></p>
<p>Realicemos un análisis rapido. El script imprime en la salida estándar un mensaje "I'm alive" cada  segundo. La ejecución no termina a menos que enviemos una señal (while true;). Al presionar Ctrl+C estamos enviando la señal de EXIT, esta señal es interceptada y dirigida la ejecución a la función trapper, esto gracias a que antes con<strong> trap</strong> definimos la acción a tomar ante la <strong>señal</strong>.</p>
<p>Así como trapeamos la señal EXIT, podemos trapear varias señales, puedes consultar el comando kill para consultar las distintas señales que se pueden enviar sobre un proceso en ejecución.</p>
<p>El uso del trapeo de señales se utiliza en los scripts para no dejar el sistema de archivos en un estado inconsistente; cosas como archivos de bloqueo, archivos temporales o archivos que has actualizado y no puedes asegurar su integridad. Ante casos como éstos, es común encontrar scripts que ante señal de EXIT (como en el ejemplo) eliminan archivos temporales o de lockeo o crean una suerte de "rollback" de las acciones ejecutadas.</p>
<p>Si quieres escribir un<strong> script robusto</strong>, es muy probable que requieras de trapear, por lo tanto, <strong>agéndalo</strong>.</p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/icRY18fCtKI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/06/24/trappear-ctrlc-en-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://luauf.com/2009/06/24/trappear-ctrlc-en-bash/</feedburner:origLink></item>
		<item>
		<title>Se acerca el “viejazo” (o segunda adolescencia) para UNIX</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/-qgSwnvjMc8/</link>
		<comments>http://luauf.com/2009/06/22/se-acerca-el-viejazo-o-segunda-adolescencia-para-unix/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 09:00:51 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[40]]></category>
		<category><![CDATA[adolescencia]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[cumpleaños]]></category>
		<category><![CDATA[historia]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[viejazo]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1060</guid>
		<description><![CDATA[Se dice que el viejazo, fenómeno ocurrido en personas del sexo masculino, también llamado segunda adolescencia se produce a las cuatro décadas. UNIX es pronto a cumplir esa edad, aproximadamente por el mes de agosto, sin embargo no creo que se trate de una segunda adolescencia, pues Unix nunca envejeció, al contrario, cada día está [...]]]></description>
			<content:encoded><![CDATA[<p>Se dice que el viejazo, fenómeno ocurrido en personas del sexo masculino, también llamado segunda adolescencia se produce a las cuatro décadas. UNIX es pronto a cumplir esa edad, aproximadamente por el mes de agosto, sin embargo no creo que se trate de una segunda adolescencia, pues Unix nunca envejeció, al contrario, cada día está más joven.</p>
<p>La historia cuenta que allá por 1969, días después de la llegada del hombre a la luna (si es alguien cree en ese discutible suceso) un programador llamdo <strong>Ken Thomson</strong> de Bell Laboratories (subsidiaria de AT&amp;T) aprovechando la susencia de su mujer e hijo por vacaciones (que casualidad ¿no?) escribió la primera versión de Unix en un lenguaje ensamblador.</p>
<p>En marzo del mismo año, los mismos laboratorios habían renunciado a seguir con un ambicioso proyecto de sistema de tiempo compartido llamado Multics (Multiplexed Information and Computer Service), del que Thomson aplicó algunos principios y como broma al proyecto anterior denominó Unics (reemplazando la primer paralabra por Thomson Uniplexed) a su proyecto.</p>
<p>Como AT&amp;T Bell vió que el proyecto tenía futuro decidió apostar al proyecto e incorporar a varios programadores de los cuales se destaca<strong> Brian Kernighan</strong>. Por motivos desconocidos UNICS pasa llamarse UNIX y va tomando forma adquiriendo nuvas funcionalidades y aplicaciones como cat, chmod, chown, cp, ls, mv, who, wc, etc. Si bien el desarrollo era rápido, el principal cuello de botella estaba en Ensamblador, es así que aparece <strong>Dennis Ritchie </strong>quien con colaboración de Kernighan escribe un lenguaje de más alto nivel, añadiendo nuevas funcionalidades y más abstracción que lo que ofrecía el lenguaje B. El éxito fue rotundo y para 1973 todo UNIX ya estaba re-escrito en C.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/06/unix.gif"><img class="alignnone size-medium wp-image-1063" title="unix" src="http://luauf.com/wp-content/uploads/2009/06/unix-286x300.gif" alt="unix" width="286" height="300" /></a></p>
<p><span id="more-1060"></span>A todo esto, el departamento de defensa estadounidense empezó a financiar su red ARPANET y con ella la pila de protocolos TCP/IP. En 1974 la Universidad de California en Berkeley recibió una copia de los fuentes de UNIX y allí el desarrolló comenzó a dispararse pues se encargaron de implementar el protocolo TCP/IP.  Con esto, la conectividad en red (gran problema hasta el momento para Unix) quedó totalmente resuelto gracias a uso de sockets para las comunicaciones. Este punto fue el boom definitivo de Unix que se empieza a hacer presente en todos los servidores de red o computadoras del mundo.</p>
<p><strong>Bill Joy</strong>, un recién graduado en Berkeley creó la primer versión de BSD (Berkeley Software Distribution) basada en Unix V6 de Bell Labs. Es aquí donde empieza una gran disputa legal entre Berkeley y AT&amp;T, pues para distribuir el software (BSD) había que contar con licencias de AT&amp;T. Pero llegó a un punto que la universisas había cambiado tantos aspectos internos del SO que la diferencia entre ambos Unix era enorme. Este conflicto duró  hasta 1994, cuando Novell compró en 1992 los derechos del Unix AT&amp;T y acordó con la universidad que consistía en eliminar de BSD todo el código residual del Unix de AT&amp;T.</p>
<p>En 1982 Bill Joy fue cofundador de Sun Microsystems, empresa que se basó en Sun OS para la venta de estaciones de trabajo y servidores. En 1983 aparece la primera versión de Unix System V, el cual sería base para los sistemas AIX de IBM y HP-UX de Heweltt Packard.</p>
<p>En medio de la batalla legal (década del 80), Bill Gates empieza a comercializar MS-DOS, un sistema mucho más pobre que Unix, pero con la particularidad en que podía correr en cualquier computadora personal (PC), de ahí nace la historia del imperio de Microsoft, del cual no hablaremos en esta publicación.</p>
<p>También, a finales de esa década un estudiante finlandés llamado Linus Torvalds decide crear su propio SO basado en Minix (SO creado como recurso pedagógico por el profesor <strong>Andrew Tanenbamum</strong>). Apenas Linus tiene un prototipo funcional escribe un mensaje en Usenet y <a href="http://luauf.com/2008/12/04/asi-empezaba-la-historia-de-linux/comment-page-1/">así empezaba la histora de Linux</a>)</p>
<p>Volviendo el tiempo atrás, en 1983 Richard Stallman se desvincula del MIT y comienza un movimiento que se transformó en marco de referencia moral, político y legal, el proyecto GNU. No solo a filosofar se dedicaba la comunidad GNU, al contrario, escribía cientos y cientos de aplicaciones (todas de ellas libres). GNU se tardó en escribir su SO (GNU Hurd), más que nada porque fue dejado para lo último dadas las ambiciones del proyecto que proponía una arquitectura microkernel por sobre las clásicas monolíticas.</p>
<p>El retraso de Hurd, la llegada de Linux y el montón de aplicaciones escritas por GNU llevó a una aparición casi anárquica GNU/Linux, que no era otra cosa que el kernel escrito por Linux Torvalds acompañado por un sin-numero de aplicaciones GNU. La popularidad de GNU desde entonces provocó en cierta medida el decrecimiento de la cuota de mercado de Unix, y a la vez llevó un "Clon de Unix" a los escritorios de las computadoras personales, hasta entonces monopolizado por empresas de software propietario.</p>
<p>Como bonus a la impresionante historia que acabamos de leer, le agregamos a los <a href="http://luauf.com/2008/03/21/timelines/">timelines</a> publicados hace bastante (propiamente al timeline de UNIX) el siguiente diagrama (algo más simplificado) pero con el interesante agregado del tipo de distribución de su código fuente:</p>
<ul>
<li>Open Source</li>
<li>Mixed/Shared Source</li>
<li>Closed Source</li>
</ul>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/06/unix_history-simple.png"><img class="alignnone size-medium wp-image-1061" title="unix_history-simple" src="http://luauf.com/wp-content/uploads/2009/06/unix_history-simple-300x190.png" alt="unix_history-simple" width="300" height="190" /></a></p>
<p>Finalmente, una versión muy simplificada del mismo arbol de genealógico:</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/06/unix-images-unix-histoire.gif"><img class="alignnone size-medium wp-image-1062" title="unix-images-unix-histoire" src="http://luauf.com/wp-content/uploads/2009/06/unix-images-unix-histoire-300x150.gif" alt="unix-images-unix-histoire" width="300" height="150" /></a></p>
<p>Vía: <a href="http://www.muylinux.com/2009/06/04/unix-cumple-40-anos/">MuyLinux</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/-qgSwnvjMc8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/06/22/se-acerca-el-viejazo-o-segunda-adolescencia-para-unix/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://luauf.com/2009/06/22/se-acerca-el-viejazo-o-segunda-adolescencia-para-unix/</feedburner:origLink></item>
		<item>
		<title>Eliminar grub o cualquier otro gestor de booteo desde Windows</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/_-k1N_Ij_Pk/</link>
		<comments>http://luauf.com/2009/06/20/eliminar-grub-o-cualquier-otro-gestor-de-booteo-desde-windows/#comments</comments>
		<pubDate>Sat, 20 Jun 2009 09:00:42 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[booteo]]></category>
		<category><![CDATA[Disco]]></category>
		<category><![CDATA[fdsik]]></category>
		<category><![CDATA[formatear]]></category>
		<category><![CDATA[gestor de booteo]]></category>
		<category><![CDATA[grub]]></category>
		<category><![CDATA[LILO]]></category>
		<category><![CDATA[Master boot record]]></category>
		<category><![CDATA[MBR]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1031</guid>
		<description><![CDATA[Si has instalado Linux y decides formatear la partición del mismo y volver a utilizar Windows, aparte de que no sabes lo que te pierdes, te encontrarás con el problema de que formatear o eliminar una partición no implica eliminar también el gestor de booteo, que puede ser por ejemplo: grub.
 
Recuerdo  hace más de [...]]]></description>
			<content:encoded><![CDATA[<p>Si has instalado Linux y decides formatear la partición del mismo y volver a utilizar Windows, aparte de que no sabes lo que te pierdes, te encontrarás con el problema de que formatear o eliminar una partición no implica eliminar también el <strong>gestor de booteo</strong>, que puede ser por ejemplo: <strong>grub</strong>.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/06/lilo.gif"><img class="alignnone size-thumbnail wp-image-1034" title="lilo" src="http://luauf.com/wp-content/uploads/2009/06/lilo-150x150.gif" alt="lilo" width="150" height="150" /></a> <a href="http://luauf.com/wp-content/uploads/2009/06/grub1.jpg"><img class="alignnone size-thumbnail wp-image-1033" title="grub1" src="http://luauf.com/wp-content/uploads/2009/06/grub1-150x150.jpg" alt="grub1" width="150" height="150" /></a></p>
<p>Recuerdo  hace más de 10 años cuando instalé una de las primeras versiones de <strong>Red Hat</strong> y siendo por entonces más inocente e ignorante, que ahora, quise volver a mi <strong>Windows 98</strong>. Luego de formatear la partición de Linux, LILO seguía allí (para los desprevenidos <strong>LILO</strong> es otro gestor de booteo). Gracias a dicha experiencia conocí el significado del <strong>Master Boot Record</strong> (esos primeros 512 bytes del disco que se utilizan como sector de arranque).</p>
<p><span id="more-1031"></span></p>
<p>Para eliminar GRUB o LILO de tu sector de arranque debes iniciar con un CD de<strong> Windows Vista</strong> o <strong>XP</strong> o un diquette de arranque de <strong>Windows 98</strong> y desde una consola de modo de recuperación (para las dos primeras versiones mencionadas) ejecutar los siguientes comandos:</p>
<ul>
<li>En Windows XP, <strong>FIXMBR</strong></li>
<li>En Windows Vista, <strong>BOOTREC /FIXMBR</strong></li>
<li>En Windows 98, <strong>FDISK /MBR</strong></li>
</ul>
<p>Con cualquiera de estos comandos repararemos el MBR ¿es eso lo que querías? ¿no? ¿estás seguro de la decisión que tomaste? <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Vía: <a href="http://durmiendoafuera.com/como-eliminar-el-grub-sin-formatear">Durmiendo afuera</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/_-k1N_Ij_Pk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/06/20/eliminar-grub-o-cualquier-otro-gestor-de-booteo-desde-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://luauf.com/2009/06/20/eliminar-grub-o-cualquier-otro-gestor-de-booteo-desde-windows/</feedburner:origLink></item>
		<item>
		<title>Desinstalar MySQL de Linux</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/aAwSb6VQVTE/</link>
		<comments>http://luauf.com/2009/06/18/desinstalar-mysql-de-linux/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 09:00:53 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[desinstalar]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mysql 5.1]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[uninstall]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1050</guid>
		<description><![CDATA[Hace un tiempo habíamos instalado en Ubuntu la última versión estable de MySQL, MySQL 5.1. La instalación había sido manual (no utilizamos ningún tipo de gestor de paquetes, solo descargamos los binarios en un tar.gz) y seguimos los pasos de instalación para cualquier sistema operativo UNIX compatible.
Hoy haremos el camino inverso, es decir, desinstalaremos la [...]]]></description>
			<content:encoded><![CDATA[<p>Hace un tiempo habíamos<a href="http://luauf.com/2009/02/08/instalar-mysql-51-en-ubuntu/"> instalado en Ubuntu la última versión estable de MySQL, MySQL 5.1</a>. La instalación había sido manual (no utilizamos ningún tipo de gestor de paquetes, solo descargamos los binarios en un tar.gz) y seguimos los pasos de instalación para cualquier sistema operativo UNIX compatible.</p>
<p>Hoy haremos el camino inverso, es decir, desinstalaremos la base de datos y como suele ocurrir, desarmar es mucho más fácil que armar, y como verán aquí, la desinstalación no escapa de la regla.</p>
<p><span id="more-1050"></span></p>
<p>Paso número uno, detenemos el motor de base de datos:</p>
<p><codeline>(sudo) /etc/init.d/mysql stop</codeline></p>
<p>A continuación borramos el script del init.d:</p>
<p><codeline>(sudo) rm /etc/init.d/mysql</codeline></p>
<p>Y quitamos el servicio:</p>
<p><codeline>(sudo) chkconfig --del mysql</codeline></p>
<p>Si no posees chkconfig, puedes descargarl:</p>
<p><codeline>(sudo) apt-get install chkconfig</codeline></p>
<p>O bien puedes quitarlo desde la interfaz gráfica en Sistema  Administración  Servicios:</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/06/servicio_mysql.png"><img class="alignnone size-medium wp-image-1052" title="servicio_mysql" src="http://luauf.com/wp-content/uploads/2009/06/servicio_mysql-300x202.png" alt="servicio_mysql" width="300" height="202" /></a></p>
<p>A continuación, eliminamos a la fuerza el directorio de MySQL:</p>
<p><codeline>(sudo)rm -fr /usr/local/mysql</codeline></p>
<p>Puede que el anterior no haya sido otra cosa que un link al directorio mysql-version, por lo tanto en ese caso me aseguro de eliminar el directorio hacia el cual apuntaba:</p>
<p><codeline>(sudo) rm -r mysql-5.1.31-linux-i686-glibc23</codeline></p>
<p>Ya terminando quitamos el grupo mysql del archivo <strong>/etc/group</strong> y finalmente borramos el usuario:</p>
<p><codeline>(sudo) deluser mysql</codeline></p>
<p>Y eso fue todo, facil ¿no?</p>
<p>Queda pendiente la pregunta ahora... ¿por que desinstalamos MySQL?</p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/aAwSb6VQVTE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/06/18/desinstalar-mysql-de-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://luauf.com/2009/06/18/desinstalar-mysql-de-linux/</feedburner:origLink></item>
		<item>
		<title>Clase de Logs para PHP</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/EfVxwPr3OVQ/</link>
		<comments>http://luauf.com/2009/06/16/clase-de-logs-para-php/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 09:30:38 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Archivos]]></category>
		<category><![CDATA[Código]]></category>
		<category><![CDATA[Clases]]></category>
		<category><![CDATA[Logs]]></category>
		<category><![CDATA[trazas]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1048</guid>
		<description><![CDATA[Por más entorno de debug que exista, los archivos de log son fundamentales para tracear el comportamiento de cualquier aplicación. Una aplicación web escrita en PHP no se escapa de este requerimiento tampoco.
Por tal motivo, navegando, encontré una sencilla clase para generar archivos de log. Y como siempre se necesita tener a mano código como [...]]]></description>
			<content:encoded><![CDATA[<p>Por más entorno de debug que exista, los archivos de log son fundamentales para tracear el comportamiento de cualquier aplicación. Una aplicación web escrita en PHP no se escapa de este requerimiento tampoco.</p>
<p>Por tal motivo, navegando, encontré una sencilla clase para generar archivos de log. Y como siempre se necesita tener a mano código como tal, no viene mal su publicación.</p>
<p><span id="more-1048"></span>El código de la clase es pequeño y sencillo, muestra por cada línea la hora y fecha en la que se escribió, así como arrays formateados. Algunas mejoras que se le pueden realizar, pero que no se escriben para no manchar el código original del autor son:</p>
<ul>
<li>Especificar el nombre del archivo de log en el constructor o bien formarlo con el nombre del archivo o según el gusto de cada uno. Simplemente, es evitar el cableado del mismo (hoy en día, protected $_fileName = 'myLogger.log';)</li>
<li>Crear archivos de logs por año y mes, o por año mes y día, esto con el único objetivo de no disponer de un único archivo enorme que con el paso del tiempo no pare de crecer y crecer.</li>
</ul>
<p>Ahora si, el código y luego un pequeño ejemplo de su utilización:</p>
<div class="syntax_hilite">
<div id="php-5">
<div class="php"><span style="color:#008000;">/**<br />
&nbsp; &nbsp;&nbsp; * myLogger<br />
&nbsp; &nbsp;&nbsp; * @author Edder Rojas Douglas<br />
&nbsp; &nbsp;&nbsp; * @version 0.2<br />
&nbsp; &nbsp;&nbsp; */</span></p>
<p>&nbsp; &nbsp; <span style="color:#000000; font-weight:bold;">class</span> myLogger&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; protected <span style="color:#0000FF;">$_fileName</span> = <span style="color:#FF0000;">'myLogger.log'</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000;">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param string $path can be a directory o a file path<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; public <span style="color:#000000; font-weight:bold;">function</span> __construct<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$path</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/empty"><span style="color:#000066;">empty</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$path</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Throw <span style="color:#000000; font-weight:bold;">new</span> Exception<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">"Path must be filled"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>!<a href="http://www.php.net/file_exists"><span style="color:#000066;">file_exists</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$path</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Throw <span style="color:#000000; font-weight:bold;">new</span> Exception<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">"The Path doesn't exists."</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span>!<a href="http://www.php.net/is_writeable"><span style="color:#000066;">is_writeable</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$path</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Throw <span style="color:#000000; font-weight:bold;">new</span> Exception<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">"You can write on the give path"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$this</span>-&gt;_path = <span style="color:#0000FF;">$this</span>-&gt;_parsePath<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$path</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>&nbsp; &nbsp;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000;">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Validate the path the add the filename to the path<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param String $path<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @return String<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; protected <span style="color:#000000; font-weight:bold;">function</span> _parsePath<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$path</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$strLenght</span> = <a href="http://www.php.net/strlen"><span style="color:#000066;">strlen</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$path</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#0000FF;">$lastChar</span> = <a href="http://www.php.net/substr"><span style="color:#000066;">substr</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$path</span>, <span style="color:#0000FF;">$strLenght</span> - <span style="color:#CC66CC;">1</span>, <span style="color:#0000FF;">$strLenght</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$path</span> = <span style="color:#0000FF;">$lastChar</span> != <span style="color:#FF0000;">"/"</span> ? <span style="color:#0000FF;">$path</span> . <span style="color:#FF0000;">"/"</span> : <span style="color:#0000FF;">$path</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span> <a href="http://www.php.net/is_dir"><span style="color:#000066;">is_dir</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$path</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#616100;">return</span> <span style="color:#0000FF;">$path</span> . <span style="color:#0000FF;">$this</span>-&gt;_fileName;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#616100;">else</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#616100;">return</span> <span style="color:#0000FF;">$path</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000;">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Will save the path on the give path<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param String $line<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; protected <span style="color:#000000; font-weight:bold;">function</span> _save<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$line</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$fhandle</span> = <a href="http://www.php.net/fopen"><span style="color:#000066;">fopen</span></a> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$this</span>-&gt;_path, <span style="color:#FF0000;">"a+"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f write<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$fhandle</span>, <span style="color:#0000FF;">$line</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/fclose"><span style="color:#000066;">fclose</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$fhandle</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000;">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * main function to add lines to the logging file<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * @param String $line<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; public <span style="color:#000000; font-weight:bold;">function</span> addLine<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$line</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$line</span> = <a href="http://www.php.net/is_array"><span style="color:#000066;">is_array</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$line</span><span style="color:#006600; font-weight:bold;">&#41;</span> ? <a href="http://www.php.net/print_r"><span style="color:#000066;">print_r</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$line</span>, <span style="color:#000000; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#41;</span> : <span style="color:#0000FF;">$line</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$line</span> = <a href="http://www.php.net/date"><span style="color:#000066;">date</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">"d-m-Y h:i:s"</span><span style="color:#006600; font-weight:bold;">&#41;</span> . <span style="color:#FF0000;">": $line<span style="color:#000099; font-weight:bold;">\n</span>"</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$this</span>-&gt;_save<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$line</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div>
</div>
<p></p>
<div class="syntax_hilite">
<div id="php-6">
<div class="php"><span style="color:#616100;">require_once</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'myLogger.php'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</p>
<p><span style="color:#0000FF;">$log</span> = <span style="color:#000000; font-weight:bold;">new</span> myLogger<span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/dirname"><span style="color:#000066;">dirname</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#000000; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span> . <span style="color:#FF0000;">"/log"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#0000FF;">$log</span>-&gt;<span style="color:#006600;">addLine</span><span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/array"><span style="color:#000066;">array</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">"testing"</span>, <span style="color:#FF0000;">"my"</span>, <span style="color:#FF0000;">'data'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</div>
</div>
<p></p>
<p>Vía: <a href="http://paindev.wordpress.com/2009/05/04/una-clase-php-para-hacer-archivos-log/">Pain Dev</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/EfVxwPr3OVQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/06/16/clase-de-logs-para-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://luauf.com/2009/06/16/clase-de-logs-para-php/</feedburner:origLink></item>
		<item>
		<title>Obtener una columna con el número de fila en MySQL</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/xqaCTxD2Uzc/</link>
		<comments>http://luauf.com/2009/06/14/generar-una-columna-calculada-autonumerica-en-mysql/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 09:01:36 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[auto]]></category>
		<category><![CDATA[autoincremental]]></category>
		<category><![CDATA[AUTO_INCREMENT]]></category>
		<category><![CDATA[calculadas]]></category>
		<category><![CDATA[columnas]]></category>
		<category><![CDATA[incremento]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1046</guid>
		<description><![CDATA[Más de una vez tuve la necesidad de en una consulta enumerar las filas de la misma, por medio de una columna calculada auto incremental ¿se entiende cual era me requerimiento?
Explicándolo de nuevo, mi necesidad era de contar con una nueva columna que sea un número auto incremental y que represente el número de fila. [...]]]></description>
			<content:encoded><![CDATA[<p>Más de una vez tuve la necesidad de en una consulta enumerar las filas de la misma, por medio de una columna calculada auto incremental ¿se entiende cual era me requerimiento?</p>
<p>Explicándolo de nuevo, mi necesidad era de contar con una nueva columna que sea un número auto incremental y que represente el número de fila. Según el artículo original esto se puede hacer en Oracle a través de la variable rownum (no doy fe de ello pues no conozco).</p>
<p>Bien, en esta publicación disponemos de la solución.</p>
<p><span id="more-1046"></span>Veamos un ejemplo: tengo la siguiente tabla con nombres de ciudades ordenadas alfabéticamente:</p>
<div class="syntax_hilite">
<div id="code-9">
<div class="code">mysql&gt; SELECT id,name FROM City ORDER BY name ASC LIMIT <span style="color:#800000;">15</span>;<br />
+------+----------------------+<br />
| id   | name                 |<br />
+------+----------------------+<br />
|  <span style="color:#800000;">670</span> | A Coruña <span style="color:#006600; font-weight:bold;">&#40;</span>La Coruña<span style="color:#006600; font-weight:bold;">&#41;</span> |<br />
| <span style="color:#800000;">3097</span> | Aachen               |<br />
| <span style="color:#800000;">3318</span> | Aalborg              |<br />
| <span style="color:#800000;">2760</span> | Aba                  |<br />
| <span style="color:#800000;">1404</span> | Abadan               |<br />
|  <span style="color:#800000;">395</span> | Abaetetuba           |<br />
| <span style="color:#800000;">3683</span> | Abakan               |<br />
| <span style="color:#800000;">1849</span> | Abbotsford           |<br />
| <span style="color:#800000;">2747</span> | Abeokuta             |<br />
|  <span style="color:#800000;">478</span> | Aberdeen             |<br />
| <span style="color:#800000;">3191</span> | Abha                 |<br />
| <span style="color:#800000;">2812</span> | Abidjan              |<br />
| <span style="color:#800000;">1703</span> | Abiko                |<br />
| <span style="color:#800000;">3989</span> | Abilene              |<br />
| <span style="color:#800000;">1309</span> | Abohar               |<br />
+------+----------------------+<br />
<span style="color:#800000;">15</span> rows in set <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">0</span>.<span style="color:#800000;">00</span> sec<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div>
</div>
<p></p>
<p>El código a continuación utiliza una variable @rownum que inicializa como argumento del FROM y se evita de declarar la variable previamente con SET @rownum: = 0;</p>
<p>El resultado es el que veremos abajo, sencillo y sorprendente:</p>
<div class="syntax_hilite">
<div id="code-10">
<div class="code">mysql&gt; SELECT @rownum:=@rownum+<span style="color:#800000;">1</span> <span style="color:#CC0000;">'row number'</span>,name <br />
FROM City C , <span style="color:#006600; font-weight:bold;">&#40;</span>SELECT @rownum:=<span style="color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#41;</span> R <br />
ORDER BY name ASC LIMIT <span style="color:#800000;">15</span>;<br />
+------------+----------------------+<br />
| row number | name                 |<br />
+------------+----------------------+<br />
|          <span style="color:#800000;">1</span> | A Coruña <span style="color:#006600; font-weight:bold;">&#40;</span>La Coruña<span style="color:#006600; font-weight:bold;">&#41;</span> |<br />
|          <span style="color:#800000;">2</span> | Aachen               |<br />
|          <span style="color:#800000;">3</span> | Aalborg              |<br />
|          <span style="color:#800000;">4</span> | Aba                  |<br />
|          <span style="color:#800000;">5</span> | Abadan               |<br />
|          <span style="color:#800000;">6</span> | Abaetetuba           |<br />
|          <span style="color:#800000;">7</span> | Abakan               |<br />
|          <span style="color:#800000;">8</span> | Abbotsford           |<br />
|          <span style="color:#800000;">9</span> | Abeokuta             |<br />
|         <span style="color:#800000;">10</span> | Aberdeen             |<br />
|         <span style="color:#800000;">11</span> | Abha                 |<br />
|         <span style="color:#800000;">12</span> | Abidjan              |<br />
|         <span style="color:#800000;">13</span> | Abiko                |<br />
|         <span style="color:#800000;">14</span> | Abilene              |<br />
|         <span style="color:#800000;">15</span> | Abohar               |<br />
+------------+----------------------+<br />
<span style="color:#800000;">15</span> rows in set <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">0</span>.<span style="color:#800000;">01</span> sec<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div>
</div>
<p></p>
<p>Vía: <a href="http://www.oxfordtechnotes.co.uk/sqlblog/blog4.php/2009/04/21/more-on-variables">The road to using MySQL</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/xqaCTxD2Uzc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/06/14/generar-una-columna-calculada-autonumerica-en-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://luauf.com/2009/06/14/generar-una-columna-calculada-autonumerica-en-mysql/</feedburner:origLink></item>
		<item>
		<title>Declaración de variables en Bash</title>
		<link>http://feedproxy.google.com/~r/luauf/~3/JbvYBjCj8oo/</link>
		<comments>http://luauf.com/2009/06/12/declaracion-de-variables-en-bash/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 09:00:38 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[atribuir]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[declarar]]></category>
		<category><![CDATA[declare]]></category>
		<category><![CDATA[sh]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[shell script]]></category>
		<category><![CDATA[tipados]]></category>
		<category><![CDATA[tipar]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1044</guid>
		<description><![CDATA[No suele ser costumbre utilizar la instrucción declare en Bash, de echo, hasta algunos quizás no la conozcan. Lo cierto es que Bash, al no ser un lenguaje fuertemente tipado y no requerir la declaración explícita de variables, nos permite prescindir de su utilización.
No obstante esto, si declaramos las variables podemos lograr algunos beneficios para [...]]]></description>
			<content:encoded><![CDATA[<p>No suele ser costumbre utilizar la instrucción <strong>declare</strong> en Bash, de echo, hasta algunos quizás no la conozcan. Lo cierto es que Bash, al no ser un lenguaje fuertemente tipado y no requerir la declaración explícita de variables, nos permite prescindir de su utilización.</p>
<p>No obstante esto, si declaramos las variables podemos lograr algunos beneficios para casos puntuales, hasta incluso evitar errores de ejecución.</p>
<p>A continuación veremos algunos ejemplos para saber de que estamos hablando con esto de declarar las variables en Bash.</p>
<p><span id="more-1044"></span></p>
<p>En el primer ejemplo veremos como forzar a una variable para que sea de lectura, por lo tanto invariable:</p>
<p><codeline>declare -r variable</codeline></p>
<p>Así, un ejemplo como el siguiente:#!/bin/bash</p>
<div class="syntax_hilite">
<div id="code-15">
<div class="code">v=<span style="color:#800000;">6</span><br />
declare -r v<br />
echo $v<br />
a=<span style="color:#800000;">0</span><br />
echo $v</div>
</div>
</div>
<p>
Devolvería:</p>
<div class="syntax_hilite">
<div id="code-16">
<div class="code"><span style="color:#800000;">6</span><br />
line <span style="color:#800000;">6</span>: v: variable de solo lectura</div>
</div>
</div>
<p>
Para tipar datos, por ejemplo, declarar una variable como numérica entera, utilizamos:<br />
<codeline>declare -i variable</codeline></p>
<p>Así:</p>
<div class="syntax_hilite">
<div id="code-17">
<div class="code">#!/bin/bash</p>
<p>declare -i n<br />
n=<span style="color:#800000;">30</span><br />
echo $a<br />
a=veinte<br />
echo $a</div>
</div>
</div>
<p></p>
<p>Devolvería:</p>
<div class="syntax_hilite">
<div id="code-18">
<div class="code"><span style="color:#800000;">30</span><br />
<span style="color:#800000;">0</span></div>
</div>
</div>
<p></p>
<p>La instrucción declare tiene un alcance mucho mayor, por ejemplo con el argumento <strong>-a</strong> se pueden declarar arrays, con <strong>-f</strong> se pueden crear funciones, con <strong>-x</strong> se pueden exportar variables de entorno,  etc. Por lo pronto, el objetivo está cumplido: saber que existe.</p>
<p>Vía: <a href="http://comulinux.blogspot.com/2009/04/la-instruccion-declare-en-bash.html">Noticias Interesantes de Linux</a></p>
<img src="http://feeds.feedburner.com/~r/luauf/~4/JbvYBjCj8oo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/06/12/declaracion-de-variables-en-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://luauf.com/2009/06/12/declaracion-de-variables-en-bash/</feedburner:origLink></item>
	</channel>
</rss>
