<?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>Nullable Blog [Ignoranto.Info] &#187; Tutoriales</title>
	<atom:link href="http://ignoranto.info/contenidos/tutoriales/feed/" rel="self" type="application/rss+xml" />
	<link>http://ignoranto.info</link>
	<description>grbr.says(&#34;a little bit of everything and a lot of nothing&#34;);</description>
	<lastBuildDate>Sat, 24 Jul 2010 01:42:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Star Wars Imperial March in HP 50G calc</title>
		<link>http://ignoranto.info/ricercando/star-wars-imperial-march-in-hp50g-calc/</link>
		<comments>http://ignoranto.info/ricercando/star-wars-imperial-march-in-hp50g-calc/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 03:58:52 +0000</pubDate>
		<dc:creator>gerWare</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[hp]]></category>
		<category><![CDATA[HP 50G]]></category>
		<category><![CDATA[Imperial March]]></category>
		<category><![CDATA[Star Wars]]></category>

		<guid isPermaLink="false">http://ignoranto.info/?p=638</guid>
		<description><![CDATA[Hola amigos! Luego del post anterior (donde les contaba mi triste destino&#8230;) decidí compartir unas cuantas líneas de código, en esta oportunidad les escribo algo sobre la programación en calculdoras HP 50G, resulta que ésta es una de mis calculadoras favoritas (jaja en realidad es la única que tengo), a continuación detallo alguna de las [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Hola amigos!</p>
<p style="text-align: left;">Luego del post anterior (donde les contaba mi triste destino&#8230;) decidí compartir unas cuantas líneas de código, en esta oportunidad les escribo algo sobre la <strong>programación</strong> en <strong>calculdoras</strong> <strong>HP 50G</strong>, resulta que ésta es una de mis calculadoras favoritas (jaja en realidad es la única que tengo), a continuación detallo alguna de las características del hardware de ésta calculadora:</p>
<ul>
<li><strong>Procesador ARM</strong> @75Mhz (ARM920T)</li>
<li>Resolución de Pantalla: 131 x 80 píxeles</li>
<li>Memoria RAM: 512KB (300kb para el usuario)</li>
<li>Memoria FLASH: 2MB (800KB para el usuario)</li>
</ul>
<p>Bueno el motivo de éste post es <strong>programar música</strong> en la <strong>calculadora</strong> <strong>HP 50 G</strong>&#8230;</p>
<p>SI! Música, resulta que quien redacta este artículo es un músico frustrado y aprovechando que ésta calculadora posee un beeper piezoeléctrico y tiene capacidad de programación, entonces que mejor manera de aprender algo de programación en User_RPL haciendo algo de música!</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/82G_FRqqLQo&amp;hl=es_ES&amp;fs=1&amp;color1=0x402061&amp;color2=0x9461ca" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/82G_FRqqLQo&amp;hl=es_ES&amp;fs=1&amp;color1=0x402061&amp;color2=0x9461ca" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p style="text-align: left;">Primero, unos cuantos conceptos sobre el lenguaje userRPL</p>
<ul>
<li>UserRPL significa RPL del Usuario, es el lenguaje en el que programamos cosas sencillas sin manejar excepciones (a nivel hardware) que pueda tener la calculadora, es un lenguaje de alto nivel</li>
<li>RPL significa <strong>Reverse Polish Lisp</strong>, traduciendo a nuestra lengua madre significaría Lisp Polaco Inverso;</li>
<li>RPN significa <strong>Notación Polaca Inversa</strong>, es una notación matemática donde no hace falta usar paréntesis, en el caso de la calculadora se aplica al manejo de PILA (stack)</li>
</ul>
<p>Entendiendo un poco la  Notación Polaca Inversa, la lógica es sencilla y fácil de entender, a continuación unos ejemplos</p>
<blockquote><p><strong>2 + 3</strong> <em>en RPN es</em> <strong>2 3 +</strong><br />
<strong> 4/3</strong> <em>en RPN es</em> <strong>4 3 /</strong><br />
<strong> (4 + 8 ) / 3</strong> <em>en RPN es</em> <strong>4 8 + 3 /</strong><br />
<strong> 4 * (7  / 1 ) &#8211; 3</strong> <em>en RPN es</em> <strong>4 7 1 / * 3 -</strong><br />
<strong> 1 * (((((4+7)*5)/2)^2)+1)</strong> <em>en RPN es</em> <strong>4 7 + 5 * 2 / 2 ^ 1 + 1 *</strong></p></blockquote>
<p>Como vimos en los ejemplos anteriores, el uso de paréntesis queda limitado, las operaciones se resuelven segun la pila (el orden) y cada operador en realidad es una funcion, por lo cual si tuvieramos la funcion FPOS, la notación se mantiene siempre de la siguiente manera:</p>
<blockquote><p><strong>fpos(4,3) + 4</strong> <em>en RPN es</em> <strong>4 3 fpos 4 +</strong></p></blockquote>
<h2>¿Cómo programar en la HP50G?</h2>
<p>No pretendo explicar detalladamente la programación de esta calculadora, solo me limitaré a dar pequeñas nociones, tenemos 2 formas (algebraico y RPN) y 4 lenguajes (HP-Basic, UserRPL, SystemRPL, ML ); en este post me limitaré a explicar la sintaxis de UserRPL y la notación RPN, prometo a futuro crear un sitio exclusivo donde explicaré de forma detallada la programación de ésta y otras calculadoras&#8230;</p>
<ol>
<li>Encender la calculadora</li>
<li>Configurar tu calculadora para que funcione en RPN (Boton MODE &gt; Operating Mode: &#8216;RPN&#8217; &gt; ENTER)</li>
</ol>
<p>Si ya estamos en MODO RPN, entonces aqui viene la parte divertida, todos los programas en ésta calculadora comienzan y terminan con estos simbolos: <strong>«</strong> <strong>»</strong>, por lo cual ahora crearemos una funcion:</p>
<blockquote><p>f(x) = x ^2;</p></blockquote>
<p>La cual en <strong>Notación Polaca Inversa</strong>, sería:</p>
<blockquote><p>x 2 ^</p></blockquote>
<p>Veamos como programar esta pequeña funcion en la calculadora, a continuación el código y luego ire detallando&#8230;</p>
<blockquote><p>« → X « X 2 ^» » F STO</p></blockquote>
<h3>Explicación del código anterior:</h3>
<ul>
<li><strong>« </strong><strong>→ X;</strong> con ello iniciamos un programa y depositamos cualquier dato que esté en la pila como la variable X</li>
<li><strong>« x 2 ^»</strong>; iniciamos un subprograma con los simbolos <strong>« »</strong> el cual nos retornará el valor de X al cuadrado</li>
<li>Terminamos el programa principal con <strong>»</strong></li>
<li>Creamos la variable <strong>F</strong> y como tenemos un &#8220;programa&#8221; (un objeto) en la <strong>Pila de Datos</strong>, entonces con el comando <strong>STO</strong> depositamos el valor del objeto (el programa) en la variable <strong>F</strong><br />
Con ello conseguimos guardar todo el codigo en la variable F como si el código se tratase de un simple número (esto es lo fantástico)</li>
</ul>
<p>Para poner en marcha el pequeño programa basta con escribir un numero y seguido de él la letra F, presionar Enter y ver los resultados</p>
<blockquote><p><strong>8 [espacio] F [enter]</strong> nos devuelve <strong>64</strong>, o sino 8 [enter] F [enter] y tambien nos devuelve 64</p></blockquote>
<p>Ahora veamos lo más interesante&#8230;</p>
<h3>¿Música en la calculadora HP50g?</h3>
<p>Si! Es posible, como dije anteriormente tenemos un BEEP en el aparatito en cuestión el cual haremos sonar metiendole frecuencias y duración de las mismas, con ello conseguimos música! SI quieres comprobar las capacidades sonoras de tu calculadora escribe el siguiente código:</p>
<blockquote><p>1760 [espacio] .5 [espacio] BEEP [enter]</p></blockquote>
<p>Tu calculadora deberá producir un BEEP de medio segundo de duración y 1760hz que equivale a una LA aguda (muy aguda), te parece si ahora hacemos un bucle?</p>
<blockquote><p>« → A<br />
« WHILE A 0 &gt; REPEAT<br />
1760  0.1 BEEP  A 1 &#8211; &#8216;A&#8217; STO<br />
END<br />
»<br />
» MM STO</p></blockquote>
<h3>Explicación del código anterior:</h3>
<ul>
<li>→ A; Depositamos el número de la pila (stack) como la variable A</li>
<li><strong>WHILE A 0 &gt; REPEAT</strong> (mientras A sea mayor que Cero repetir)</li>
<li><strong>1760 0.1 BEEP A 1 &#8211; &#8216;A&#8217; STO;</strong> Hacemos sonar un Beep de 1760Hz durante 0.1 Segundos y luego restamos el valor de A en 1 y lo depositamos como A</li>
<li><strong>END</strong> (Fin)</li>
<li>Guardamos todo el codigo anterior como la variable MM</li>
</ul>
<p>Para poner en marcha el código, escribe cualquier numero y luego ejecuta MM, ejemplo:</p>
<blockquote><p>10 [espacio] MM [enter]</p></blockquote>
<p>Debería dar 10 pitidos!</p>
<h2 style="text-align: center;">Star Wars Imperial March in HP 50G, How To</h2>
<p style="text-align: center;">Bueno, luego de tanta explicación (para enteder la lógica de la calculadora), veremos a continuación el código de la <strong>Marcha Imperial</strong>!</p>
<pre>«
.48 'N' STO

523 'D' STO
554 'DS' STO
587 'R' STO
622 'RS' STO
659 'M' STO
698 'F' STO
739 'FS' STO
783 'S' STO
830 'SS' STO
880 'L' STO
932 'LS' STO
987 'SI' STO

S N BEEP
S N BEEP
S N BEEP

RS N 4 / 3 * BEEP
LS N 4 / BEEP
S N BEEP

RS N 4 / 3 * BEEP
LS N 4 / BEEP
S N 2 * BEEP

R 2 * N BEEP
R 2 * N BEEP
R 2 * N BEEP
RS 2 * N 4 / 3 * BEEP
LS N 4 / BEEP
FS N BEEP

RS N 4 / 3 * BEEP
LS N 4 / BEEP
S N 2 * BEEP

S 2 * N BEEP
S N 4 / 3 * BEEP
S N 4 / BEEP
S 2 * N BEEP

FS 2 * N 4 / 3 * BEEP
F 2 * N 4 / BEEP
M 2 * N 4 / BEEP
RS 2 * N 4 / BEEP
M 2 * N BEEP

SS N 2 / BEEP
R 2 * N BEEP
D 2 * N 4 / 3 * BEEP
SI N 4 / BEEP
LS N 4 / BEEP
L N 4 / BEEP
LS N BEEP

RS N 2 / BEEP
FS N BEEP

RS N 4 / 3 * BEEP
FS N 4 / BEEP

LS N BEEP
S N 4 / 3 * BEEP
LS N 4 / BEEP
R 2 * N 2 * BEEP

S 2 * N BEEP
S N 4 / 3 * BEEP
S N 4 / BEEP
S 2 * N BEEP

FS 2 * N 4 / 3 * BEEP
F 2 * N 4 / BEEP
M 2 * N 4 / BEEP
RS 2 * N 4 / BEEP
M 2 * N BEEP

SS N 2 / BEEP
R 2 * N BEEP
D 2 * N 4 / 3 * BEEP
SI N 4 / BEEP
LS N 4 / BEEP
L N 4 / BEEP
LS N BEEP

RS N 2 / BEEP
FS N BEEP

RS N 4 / 3 * BEEP
LS N 4 / BEEP
S N BEEP

RS N 4 / 3 * BEEP
LS N 4 / BEEP
S N 2 * BEEP

R 2 / N 2 / BEEP
R N 4 / BEEP
R N 4 / BEEP
RS N 4 / BEEP
RS N 4 / BEEP
D N 4 / BEEP
D N 4 / BEEP

R 2 / N 2 / BEEP
LS N 4 / BEEP
LS N 4 / BEEP
L N 4 / BEEP
L N 4 / BEEP
FS N 4 / BEEP
FS N 4 / BEEP

R 2 / N 2 / BEEP
R 2 * N 4 / BEEP
R 2 * N 4 / BEEP
DS 2 * N 4 / BEEP
DS 2 * N 4 / BEEP
L N 4 / BEEP
L N 4 / BEEP
D 2 * N 4 / BEEP
D 2 * N 4 / BEEP
LS N 4 / BEEP
LS N 4 / BEEP
FS N 4 / BEEP
FS N 4 / BEEP
RS N 4 / BEEP
RS N 4 / BEEP

R 2 / N 2 / BEEP
R N 4 / BEEP
R N 4 / BEEP
RS N 4 / BEEP
RS N 4 / BEEP
D N 4 / BEEP
D N 4 / BEEP

R 2 / N 2 / BEEP
LS N 4 / BEEP
LS N 4 / BEEP
L N 4 / BEEP
L N 4 / BEEP
FS N 4 / BEEP
FS N 4 / BEEP

R 2 / N 2 / BEEP
S 2 * N 4 / BEEP
S 2 * N 4 / BEEP
RS 2 * N 4 / BEEP
RS 2 * N 4 / BEEP
LS N 4 / BEEP
LS N 4 / BEEP
SS N 4 / BEEP
SS N 4 / BEEP
RS N 4 / BEEP
RS N 4 / BEEP
SI 2 / N 4 / BEEP
SI 2 / N 4 / BEEP
SS 2 / N 4 / BEEP
SS 2 / N 4 / BEEP

S 2 / N 2 / BEEP
R N 4 / BEEP
R N 4 / BEEP
RS N 4 / BEEP
RS N 4 / BEEP
D N 4 / BEEP
D N 4 / BEEP

S 2 / N 2 / BEEP
LS N 4 / BEEP
LS N 4 / BEEP
L N 4 / BEEP
L N 4 / BEEP
FS N 4 / BEEP
FS N 4 / BEEP

S 2 / N 2 / BEEP
R 2 * N 4 / BEEP
R 2 * N 4 / BEEP
DS 2 * N 4 / BEEP
DS 2 * N 4 / BEEP
L N 4 / BEEP
L N 4 / BEEP
D 2 * N 4 / BEEP
D 2 * N 4 / BEEP
LS N 4 / BEEP
LS N 4 / BEEP
FS N 4 / BEEP
FS N 4 / BEEP
RS N 4 / BEEP
RS N 4 / BEEP

SS 2 / N 2 / BEEP
RS N 4 / BEEP
RS N 4 / BEEP
M N 4 / BEEP
M N 4 / BEEP
DS N 4 / BEEP
DS N 4 / BEEP

SS 2 / N 2 / BEEP
SI N 4 / BEEP
SI N 4 / BEEP
LS N 4 / BEEP
LS N 4 / BEEP
S N 4 / BEEP
S N 4 / BEEP

SS 2 / N 2 / BEEP
SS 2 * N 4 / BEEP
SS 2 * N 4 / BEEP
RS 2 * N 4 / BEEP
RS 2 * N 4 / BEEP
SI N 4 / BEEP
SI N 4 / BEEP
L N 4 / BEEP
L N 4 / BEEP
M N 4 / BEEP
M N 4 / BEEP
D N 4 / BEEP
D N 4 / BEEP
L 2 / N 4 / BEEP
L 2 / N 4 / BEEP

L 2 / N BEEP
L 2 / N BEEP
L 2 / N BEEP

F 2 / N 4 / 3 * BEEP
D N 4 / BEEP
L 2 / N BEEP

F 2 / N 4 / 3 * BEEP
D N 4 / BEEP
L 2 / N 2 * BEEP

M N BEEP
M N BEEP
M N BEEP

F N 4 / 3 * BEEP
D N 4 / BEEP
SS 2 / N BEEP

F 2 / N 4 / 3 * BEEP
D N 4 / BEEP
L 2 / N 2 * BEEP

L N BEEP
L 2 / N 4 / 3 * BEEP
L 2 / N 4 / BEEP
L N BEEP

SS N 4 / 3 * BEEP
S N 4 / BEEP

FS N 4 / BEEP
F N 4 / BEEP
FS N BEEP

LS 2 / N 2 / BEEP
M N BEEP
R N 4 / 3 * BEEP
DS N 4 / BEEP

D N 4 / BEEP
SI 2 / N 4 / BEEP
D N BEEP

F 2 / N 2 / BEEP
S 2 / N BEEP

F 2 / N 4 / 3 * BEEP
D N 4 / BEEP
L 2 / N BEEP

F 2 / N 4 / 3 * BEEP
D N 4 / BEEP
L 2 / N 2 * BEEP

"IMPERIAL MARCH
Ignoranto.Info" MSGBOX

'N' PURGE
'D' PURGE
'DS' PURGE
'R' PURGE
'RS' PURGE
'M' PURGE
'F' PURGE
'FS' PURGE
'S' PURGE
'SS' PURGE
'L' PURGE
'LS' PURGE
'SI' PURGE

»
</pre>
<p>Algo de explicación&#8230;</p>
<p>Primero Declaramos las Variables, en los ejemplos anteriores vimos que usabamos una flechita → para depositar variables, dicha flechita genera <strong>variables locales</strong> (las cuales se eliminan al finalizar el programa) en este caso usaremos variables globales pero luego de finalizar el script las eliminaremos:</p>
<blockquote><p><strong>.48 &#8216;N&#8217; STO</strong> <em>Declaramos la N como global (nótese las media comillas), es la duración de una NEGRA</em></p>
<p><strong>523 &#8216;D&#8217; STO</strong> <em>Declaramos D, la frecuencia de la nota DO</em><br />
<strong> 554 &#8216;DS&#8217; STO</strong> <em>Declaramos DS, la frecuencia de la nota DO#</em><br />
<strong> 587 &#8216;R&#8217; STO</strong> <em>Declaramos R, la frecuencia de la nota RE</em><br />
<strong> 622 &#8216;RS&#8217; STO</strong> <em>Declaramos RS, la frecuencia de la nota RE#</em></p>
<p>&#8230; hasta terminar de declarar toda una Octava</p></blockquote>
<p>Luego en la parte final del script</p>
<blockquote><p><strong>&#8216;N&#8217; PURGE</strong> <em>Eliminamos la variable N</em><br />
<strong>&#8216;D&#8217; PURGE</strong> <em>Eliminamos la variable D</em><br />
<strong>&#8216;DS&#8217; PURGE</strong> <em>Eliminamos la variable DS</em><br />
&#8230;</p></blockquote>
<p>A partir de <strong>S N BEEP</strong> comienza la musiquita, ya que S tiene la frecuencia de la nota SOL y N es la duración de una Negra, BEEP el comando mágico que hace sonar el Buzzer!</p>
<p>Para reproducir la música en tu calculadora deberías escribir todo ese código en ella misma y luego guardar como un objeto (variable, archivo); pero existe una solución, la cual es descargar mi script: <a href="http://develop.ignoranto.info/user-rpl/imarchexe.hp">imperial march hp50g</a>; o copiar y pegar el código anterior en el programa <a href="http://www.hpjhuavi.uni.cc/modules/wfdownloads/singlefile.php?cid=3&amp;lid=20">HPuserEdit</a> y luego Archivo &gt; Exportar a Objeto Binario, posteriormente copiar el Script en la tarjeta de memoria y leerlo en la calculadora!</p>
<p>Fin!</p>
<p>Comenta <img src='http://ignoranto.info/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  o sino escríbeme &gt;&gt; <strong>grbr@ignoranto.info</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ignoranto.info/ricercando/star-wars-imperial-march-in-hp50g-calc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>StarWars Console.Beep()</title>
		<link>http://ignoranto.info/ricercando/starwars-console-beep-csharp/</link>
		<comments>http://ignoranto.info/ricercando/starwars-console-beep-csharp/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 05:30:10 +0000</pubDate>
		<dc:creator>gerWare</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Experimentos!]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Beep]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Star Wars]]></category>

		<guid isPermaLink="false">http://gerber.ignoranto.info/?p=499</guid>
		<description><![CDATA[Hola, aquí explicaré como componer la melodía de StarWars usando Console.Beep() Actualización 28/10/2009 ¿Usas GNU/Linux? ¿Mono ejecuta el binario pero no suena la bocina de tu PC? La solución esta en éste post: Imperial March Bash Beep, un script en BASH con las frecuencias de la Marcha Imperial de StarWars listo para ejecutar, incluye control [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">Hola, aquí explicaré como componer la melodía de<strong> StarWars</strong> usando <strong>Console.Beep()</strong></p>
<div id="attachment_500" class="wp-caption aligncenter" style="width: 387px"><a href="http://ignoranto.info/wp-content/uploads/Darth_Vader_Programando.jpg"><img class="size-full wp-image-500       " title="Darth Vader Programando" src="http://ignoranto.info/wp-content/uploads/Darth_Vader_Programando.jpg" alt="Darth Vader Programando" width="377" height="253" /></a><p class="wp-caption-text">Darth Vader aprendiendo a programar!</p></div>
<p style="text-align: center;">
<h3 style="text-align: justify;">Actualización 28/10/2009</h3>
<p style="text-align: justify;"><strong>¿Usas GNU/Linux?</strong> ¿Mono  ejecuta el binario pero no suena la bocina de tu PC? La solución esta en éste post: <a href="http://ignoranto.info/ricercando/imperial-march-bash-beep/">Imperial March Bash Beep</a>, un <strong>script en BASH</strong> con las frecuencias de la Marcha Imperial de StarWars listo para ejecutar, incluye control de tempo para ejecutarlo al tempo (bpm, negras por minuto) que más gustes!</p>
<p style="text-align: justify;">Continuando con el post &#8230;</p>
<p style="text-align: justify;">Anteriormente <a href="http://ignoranto.info/ricercando/bach-en-bash-beep-en-consola/">escribí aquí</a> como hacer crear pequeñas melodías usando una <strong>consola en GNU</strong>, ahora le tocó el turno a <strong>Microsoft Windows</strong>; usaremos <strong>Microsoft Visual Studio</strong> y programaremos en Do Sostenido (C#, <strong>C Sharp</strong>) la melodía de <strong>StarWars</strong>.</p>
<p>En este <span style="text-decoration: line-through;">pseudo</span>tutorial haremos uso del método Console.Beep() de la clase System en C Sharp, si quieres conocer más a fondo como funciona éste método puedes leer &gt;&gt; <a href="http://ignoranto.info/ricercando/sobrecargas-console-beep/">Sobrecargas en Console.Beep();</a></p>
<p><strong>Gerber dice:</strong></p>
<blockquote><p>No me hago responsable por el uso inadecuado de <strong>Console.Beep();</strong> si exageras escribiendo <span style="text-decoration: underline;">frecuencias muy altas</span> puedes llegar a dañar TUS OIDOS y probablemente también dañar el hardware de tu ordenador!</p></blockquote>
<p><strong>Requisitos:</strong></p>
<ol>
<li>Conocimientos básicos de programación en C Sharp<br />
<span style="text-decoration: underline;">Métodos</span> y <span style="text-decoration: underline;">Bucles</span></li>
<li>Paciencia y Muchas ganas de programar</li>
<li>Amor por la música</li>
</ol>
<p>Comenzemos&#8230;</p>
<div id="attachment_574" class="wp-caption alignright" style="width: 220px"><a href="http://ignoranto.info/wp-content/uploads/star_wars.jpg"><img class="size-medium wp-image-574 " title="Arreglo de la Partitura de Star Wars" src="http://ignoranto.info/wp-content/uploads/star_wars-262x300.jpg" alt="Arreglo de la Partitura de Star Wars" width="210" height="240" /></a><p class="wp-caption-text">Arreglo de la Partitura de Star Wars</p></div>
<p>Programar toda la melodía escribiendo &#8220;nota por nota&#8221; nos llevaría dias, meses (y quizá años); para ello crearemos (e implementaremos) métodos y haremos uso de <strong>bucles FOR</strong> para llamar (o repetir) &#8220;ciertas secuencias musicales&#8221; las veces que sean necesarias durante la melodía!</p>
<p><strong>Console.Beep(int frecuencia, int duración_sonido);</strong><br />
Este método de la clase consola necesita 2 parámetros, el primero es la frecuencia de tipo ENTERO (no double, no float) y la duración del sonido expresado en milésimas de segundo, ejemplo si quisieramos hacer sonar una LA (frecuencia = 440hertz) durante 3 segundos (3000 milésimas de segundo) escribiríamos asi:</p>
<pre>Console.Beep(440, 3000) // laaaaaaaaaaaaaaaaa</pre>
<p>Aquí tenemos una <a href="http://latecladeescape.com/w0/recetas-algoritmicas/frecuencia-de-las-notas-musicales/tabla-de-frecuencias.html">tabla de frecuencias</a> de las notas musicales, sería bueno que echemos un vistazo para conocer las frecuencias, es necesario redondearlas (o expresar su máximo entero) para usar la frecuencia en Beep();</p>
<p>Se ha dividido el tema en 3 partes, cada parte es un método (método = función, procedimiento) y cada método ejecuta una secuencia de notas diferentes (estas notas están asociadas en otros métodos), los métodos son: partI_starwars(); partII_starwars(); y final();</p>
<div id="attachment_501" class="wp-caption aligncenter" style="width: 437px"><a href="http://gerber.ignoranto.info/wp-content/uploads/PrimeraParte.jpg"><img class="size-full wp-image-501 " title="Primera Parte" src="http://ignoranto.info/wp-content/uploads/PrimeraParte.jpg" alt="Primera Parte" width="427" height="88" /></a><p class="wp-caption-text">El método partI_starwars(); ejecuta este fragmento!</p></div>
<p>La primera parte esta formada por 3 métodos:</p>
<ul>
<li>rerere(); ejecuta un tresillo (tres notas en una corchea) de la nota RE</li>
<li>dosila(); ejecuta un tresillo con las notas Do Si La</li>
<li>dosido(); ejecuta un tresillo con las notas Do Si Do</li>
</ul>
<p>A continuación el código de cada método (rerere, dosila, dosido)</p>
<pre>//tresillo re re re
static void rerere(int d)
{
 //un bucle FOR repite 3 veces el Beep
 for (int x = 0; x &lt; 3; x++) {
   Console.Beep(523, d); //re
 }
}

//tresillo do si la
static void dosila(int d)
{
 Console.Beep(1046, d); //do
 Console.Beep(987, d); //si
 Console.Beep(880, d);//la
}

//tresillo do si do
static void dosido(int d)
{
 Console.Beep(1046, d);
 Console.Beep(987, d);
 Console.Beep(1046, d);
}</pre>
<p>Cada tresillo recibe un parámetro, en esta melodía he tomado <span style="text-decoration: underline;">1200 milésimas de segundo</span> como <strong>duración de una negra</strong>, como sabemos (si es que sabemos) los tresillos se ejecutan en el lapso de una corchea, entonces nuestra corchea vale 600 (la mitad de la negra), y cada tresillo valdría 200, es por eso que el parámetro (int d) recibirá un 200; también se ha usado un bucle para que se repita el primer tresillo (rerere), ahora veremos cómo esta compuesto nuestro método partI_starwars();</p>
<pre>static void partI_starwars()
{
 rerere(200); // llamamos a la funcion rerere()
 Console.Beep(783, 1200); //sol
 Console.Beep(1174, 1200);//re2
 dosila(200); //funcion dosila()
 Console.Beep(1567, 1200); //sol2
 Console.Beep(1174, 600); //re2
 dosila(200); //nuevamente funcion dosila()
 Console.Beep(1567, 1200); //sol2
 Console.Beep(1174, 600); //re2
 dosido(200); //ahora dosido()
 Console.Beep(880, 1200); //la
}</pre>
<div id="attachment_502" class="wp-caption aligncenter" style="width: 437px"><a href="http://ignoranto.info/wp-content/uploads/SegundaParte.jpg"><img class="size-full wp-image-502  " title="Segunda Parte" src="http://ignoranto.info/wp-content/uploads/SegundaParte.jpg" alt="SegundaParte" width="427" height="174" /></a><p class="wp-caption-text">El método partII_starwars();</p></div>
<p>La segunda parte está formada por los métodos:</p>
<ul>
<li>reremimi(); Como verán existe un puntillo, re &#8230; re mi&#8230; mi</li>
<li>frase000(); Una larga melodía</li>
<li>frase001(); Otra larga melodía</li>
<li>frase002(); Y La última casi larga melodía</li>
</ul>
<p>Estos métodos no reciben parámetros, y se ejecutan de modo secuencial, aquí el código de los métodos (reremimi, frase001&#8230;)</p>
<pre>static void reremimi()
{
 Console.Beep(523, 400); //re
 Console.Beep(523, 200); //re
 Console.Beep(659, 900); //mi
 Console.Beep(659, 300); //mi
}

static void frase000()
{
 Console.Beep(1046,300);//do
 Console.Beep(987, 300);//si
 Console.Beep(880, 300);//la
 Console.Beep(783, 300);//sol

 Console.Beep(783, 300);//sol
 Console.Beep(880, 150);//la
 Console.Beep(987, 150);//si
 Console.Beep(880, 300);//la
 Console.Beep(659, 300); //mi
 Console.Beep(733, 600); //fa#
}

static void frase001()
{
 Console.Beep(1046, 300);//do
 Console.Beep(987, 300);//si
 Console.Beep(880, 300);//la
 Console.Beep(783, 300);//sol

 Console.Beep(1174, 900);//re2
 Console.Beep(880, 300);//la
 Console.Beep(880, 600);//la
}

static void frase002()
{
 Console.Beep(1174, 400); //re2
 Console.Beep(1174, 200); //re2
 Console.Beep(1567, 400); //sol2
 Console.Beep(1396, 200); //sol2
 Console.Beep(1244, 400); //mib
 Console.Beep(1174, 200); //re
 Console.Beep(1046, 400); //do
 Console.Beep(923, 200);  //sib
 Console.Beep(880, 400);  //la
 Console.Beep(783, 200);  //sol
 Console.Beep(1174, 600);//re2
 for (int x = 0; x &lt; 3; x++)
 {
  Console.Beep(880, 200);  //la
 }
 Console.Beep(880, 600);  //la
}</pre>
<p>Luego tendremos que asociar éstos métodos en el método principal que es partII_starwars(); solo haremos una llamada a cada método y éstos iran ejecutando sus partes!</p>
<pre>static void partII_starwars()
{
 reremimi();frase000();
 reremimi();frase001();
 reremimi();frase000();
 frase002();
}</pre>
<p>La parte final</p>
<div id="attachment_503" class="wp-caption aligncenter" style="width: 383px"><a href="http://ignoranto.info/wp-content/uploads/TerceraParte.jpg"><img class="size-full wp-image-503 " title="final()" src="http://ignoranto.info/wp-content/uploads/TerceraParte.jpg" alt="Final de la melodía de StarWars" width="373" height="54" /></a><p class="wp-caption-text">Final de la melodía de StarWars</p></div>
<p>Ahora solo nos queda el método final(); es tan simple y está formado por 2 bucles y 2 largas notas</p>
<pre>static void final()
{
 for (int x = 0; x &lt; 3; x++)
 {
  Console.Beep(1174, 200); //re2
 }
Console.Beep(1567, 1800); //sol2

for (int x = 0; x &lt; 3; x++)
 {
  Console.Beep(783, 200); //re2
 }
 Console.Beep(783, 1800);  //sol
}</pre>
<p>Los bucles ejecutan los tresillos y las largas notas son las Blancas (equivalen a 2 negras) pero son blancas con puntillo (el puntillo equivale a la mitad de su propia duración) eso quiere decir que equivale a 1800 milésimas de segundo (1200 = blanca, 600 = mitad de blanca =&gt; 1200+600 = 1800).</p>
<p>Ahora solo nos queda armar el Main(), el cual se encargará de ejecutar la primera, segunda parte y la parte final, su código es:</p>
<pre>static void Main()
{
 //repetimos la primera parte 2 veces
 //asi esta en la partitura <img src='http://ignoranto.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
 for (int x = 0; x &lt; 2; x++) {partI_starwars();}
 //ejecutamos la segunda parte 1 sola vez
 partII_starwars();
 //nuevamente la primera parte vuelve a ejecutarse
 //2 veces
 for (int x = 0; x &lt; 2; x++) { partI_starwars(); }
 //ejecutamos el final de la melodia
 final();
}</pre>
<p style="text-align: justify;">El código de ésta melodía la encuentras aquí &gt; <a href="http://develop.ignoranto.info/csharp/beep_starwars.cs">starwars beep.cs</a>, si quieres escuchar la melodía (sin necesidad de compilar el código) puedes descargarte el binario (libre de virus) <a href="http://ignoranto.info/paraDescargar/beep_starwars.exe">starwars_beep.exe</a>; para ejecutar necesitas el <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;displaylang=en">framework.net</a></p>
<p style="text-align: right;">¿Encontraste algún fallo? Puedes escribirme a <strong>gerber@ignoranto.info</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ignoranto.info/ricercando/starwars-console-beep-csharp/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Bach en bash [beep en consola]</title>
		<link>http://ignoranto.info/ricercando/bach-en-bash-beep-en-consola/</link>
		<comments>http://ignoranto.info/ricercando/bach-en-bash-beep-en-consola/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 03:18:43 +0000</pubDate>
		<dc:creator>gerWare</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Bach]]></category>
		<category><![CDATA[Beep]]></category>

		<guid isPermaLink="false">http://gerber.ignoranto.info/?p=475</guid>
		<description><![CDATA[¿Sabías que en GNU puedes componer música desde la línea de comandos? En esta entrada se explicará la forma de componer música para consola usando el famoso pitido de nuestro computador, BEEP. Actualización 28/10/2009 ¿No te gusta el barroco? ¿Te gusta Star Wars? Aquí el script en Bash de la Marcha Imperial de Star Wars, [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignright" style="width: 190px"><a href="http://www.artlevine.com/images/bach_shades.jpg"><img title="Johann Sebastian Bach" src="http://www.artlevine.com/images/bach_shades.jpg" alt="" width="180" height="240" /></a><p class="wp-caption-text">Johann Sebastian Bach</p></div>
<p>¿Sabías que en GNU puedes componer música desde la línea de comandos?</p>
<p>En esta entrada se explicará la forma de componer música para consola usando el famoso pitido de nuestro computador, BEEP.</p>
<h3>Actualización 28/10/2009</h3>
<p>¿No te gusta el barroco? ¿Te gusta <strong>Star Wars</strong>? <a href="http://develop.ignoranto.info/bash/imperialMarchBashBeep.sh">Aquí</a> el <strong>script en Bash</strong> de la <strong>Marcha Imperial de Star Wars</strong>, para más información leer: <a href="http://ignoranto.info/ricercando/imperial-march-bash-beep/">Imperial March Bash Beep</a></p>
<p>Requisitos</p>
<ul>
<li>Cualquier distribución de <strong>GNU/Linux</strong> (Aquí se ejemplifica con Ubuntu)</li>
<li>Alma de músico o por lo menos gustar de ella</li>
<li>Creatividad y paciencia</li>
<li>Leer este blog <img src='http://ignoranto.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>Requisitos de hardware</p>
<ul>
<li>Tener BEEP (dispositivo que emite pitidos)</li>
</ul>
<p>Imagino que tu PC tiene BEEP (nos damos cuenta al encender el ordenador, éste dice &#8220;beep&#8221;), asi que obviamos ello, procederemos a ver si tenemos instalado el comando BEEP en nuestro shell (obviamente, primero abrimos un terminal):</p>
<pre>root@ignoranto-pc:/home/ignoranto# beep -f 440 -l 1000</pre>
<p>Si se escucha un beeep entonces <strong>SI</strong> tenemos instalado BEEP, caso contrario a instarlo; es sabido que debemos tener privilegios de administrador (root) para instalar software, entonces (usando el comando <strong>su</strong>, o <strong>sudo</strong>) procederemos a instalar:</p>
<pre>root@ignoranto-pc:/home/ignoranto# aptitude install beep</pre>
<p>Se descargarán los paquetes y se instalarán, podemos comprobar que BEEP está instalado escribiendo &#8220;beep&#8221; en el terminal:</p>
<pre>root@ignoranto-pc:/home/ignoranto# beep</pre>
<p>A partir de aquí no hace falta tener permisos de administrador, sería bueno que escribamos &#8220;exit&#8221; para terminar con tareas de administración (solo si se usó <strong>su</strong> para la instalación)</p>
<p>Ahora que tenemos beep instalado en nuestro shell, veremos sus principales características (las cuales usaremos aquí para hacer música).</p>
<ul>
<li><strong>beep -f 440</strong> emite un pitido de 440 hertz (el sonido de una LA)</li>
<li><strong>beep -f 440 -l 1000</strong> emite un pitido de 1 segundo (1000 milésimas de segundo)</li>
</ul>
<p>Listo! ahora escribiremos música, para ello abriremos un editor de texto (gedit) y escribiremos esto en la primera linea: <strong>#!/bin/bash</strong> , con ello llamamos a bash para que interprete el código contenido en el archivo!</p>
<p>Aquí una tabla de las frecuencias de las notas musicales:</p>
<ul>
<li>Do &gt; <strong>261</strong></li>
<li>Do# &gt; <strong>277</strong></li>
<li>Re &gt; <strong>293</strong></li>
<li>Re# &gt; <strong>311</strong></li>
<li>Mi &gt; <strong>329</strong></li>
<li>Fa &gt; <strong>349</strong></li>
<li>Fa# &gt; <strong>369</strong></li>
<li>Sol &gt; <strong>392 </strong></li>
<li>Sol# &gt;<strong>415</strong></li>
<li>La &gt; <strong>440</strong></li>
<li>La# &gt; <strong>466</strong></li>
<li>Si &gt; <strong>493</strong></li>
</ul>
<p>En <a href="http://latecladeescape.com/w0/recetas-algoritmicas/frecuencia-de-las-notas-musicales/tabla-de-frecuencias.html" target="_blank">esta web</a> tenemos una gran tabla con las frecuencias de cada nota!</p>
<p>Si quieres ahorrarte el trabajo de usar numeros en lugar de notas musicales, en éste post: <a href="http://ignoranto.info/ricercando/beep-en-bash/">Beep Bash</a> hay una tabla con arrays (arreglos, vectores) de las notas musicales en sus diferentes octavas <img src='http://ignoranto.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ahora escribiremos una melodía bastante conocida: La &#8220;Toccata et Fuga BWV565&#8243; de Johann Sebastian <strong>BACH</strong>, escribirla completa llevaría años, asi que solo escribiremos el comienzo de la Toccata, las notas son las siguientes:</p>
<p>La sol laaa, sol fa mi re do# reee&#8230;</p>
<p>La frecuencia de LA es 440, y la de sol 392, entonces para escribir &#8220;la sol laaa&#8221; debemos escribir lo siguiente (en el archivo):</p>
<pre>beep -l 150 -f 440 #la
beep -l 150 -f 392 #sol
beep -l 800 -f 440 #la</pre>
<p>Le damos 150 milésimas de segundo a &#8220;La sol&#8221; y 800 milésimas a &#8220;laaa&#8230;&#8221;; ahora escribiremos las demás notas</p>
<pre>beep -l 150 -f 392 #sol
beep -l 150 -f 348 #fa
beep -l 150 -f 329 #mi
beep -l 150 -f 293 #re
beep -l 350 -f 277 #dos
beep -l 800 -f 293 #re!</pre>
<p>Luego de terminar de escribir, guardamos el archivo con extensión .sh y lo ejecutamos en el terminal de la siguiente manera</p>
<pre>gerware@ignoranto-pc:~$ sh nombre_de_mi_archivo.sh</pre>
<p>&#8220;<strong>~</strong>&#8221; éste caracter representa el directorio <strong>/home/mi_usuario</strong>; pueden descargar ésta melodía <a href="http://develop.ignoranto.info/bash/bwv565.sh" target="_self">haciendo clic aquí</a></p>
<p>¿Tienes Microsoft Windows y quieres música en tu terminal?<br />
La clase Console tiene como método beep(); podemos escribir melodías haciendo uso de Console.Beep(); en C# con Visual Studio</p>
<p><strong>Actualización 23/10/2009</strong><br />
Si deseamos algo más musical entonces necesitaremos producir silencios, en realidad esos &#8220;silencios&#8221; no son parte de beep, sino es un comando que <strong>ejecuta pausas en el terminal</strong> y practicamente dichas pausas se evalúan como silencios, para ello usamos <strong>sleep</strong>; para conocer más el uso de sleep podemos hacer &#8220;<strong>man sleep</strong>&#8221; <img src='http://ignoranto.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://ignoranto.info/ricercando/bach-en-bash-beep-en-consola/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Control de ventiladores en Ubuntu</title>
		<link>http://ignoranto.info/ricercando/control-ventiladores-ubuntu/</link>
		<comments>http://ignoranto.info/ricercando/control-ventiladores-ubuntu/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 01:23:49 +0000</pubDate>
		<dc:creator>gerWare</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Control Ventiladores]]></category>
		<category><![CDATA[lm-sensors]]></category>

		<guid isPermaLink="false">http://gerber.ignoranto.info/?p=473</guid>
		<description><![CDATA[¿Te molesta el ruido de los ventiladores de tu PC? Si tu respuesta es SI, este post es para ti, caso contrario pues &#8230; (no sé) Aquí unos cuantos pasos a seguir para tener la PC en silencio o por lo menos bajarle el ruido a los ventiladores (claro teniendo en cuenta que esto será [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.globalserviceschile.cl/productos/gsch56.jpg"><img class="alignright" title="Ventilador PC" src="http://www.globalserviceschile.cl/productos/gsch56.jpg" alt="" width="200" height="200" /></a><strong>¿Te molesta el ruido de los ventiladores de tu PC?</strong><br />
Si tu respuesta es SI, este post es para ti, caso contrario pues &#8230; (no sé)</p>
<p>Aquí unos cuantos pasos a seguir para tener la PC en silencio o por lo menos bajarle el ruido a los ventiladores (claro teniendo en cuenta que esto será temporal mientras nuestro procesador esté desocupado).</p>
<p><strong>Gerber dice:</strong></p>
<blockquote><p>No me hago responsable por placas quemadas, este pseudotutorial tiene fines didácticos!</p></blockquote>
<p>OJO: Se recomienda desactivar Cool&amp;Quiet (AMD) o SpeedStep (INTEL).</p>
<p>Requisitos</p>
<ul>
<li>Conocimientos básicos del propio hardware</li>
<li>Ubuntu Linux o una distro basada en debian</li>
<li>Permisos para realizar cambios (cuenta root)</li>
<li>Paciencia y ganas</li>
</ul>
<p style="text-align: justify;">Para realizar tareas de administración podemos iniciar sesión como <strong>root</strong> (algo que se hace mediante CLI (Linea de Comandos)) o tomar posesión de los permisos de administrador con el comando &#8220;su&#8221; o usar el archiconocido &#8220;sudo&#8221;, personalmente prefiero &#8220;su&#8221;</p>
<pre>ignoranto@ignoranto-pc:~$ su
Contraseña: mellamogerber
root@ignoranto-pc:/home/ignoranto#</pre>
<p>Paquetes a instalar</p>
<ul>
<li>lm-sensors</li>
</ul>
<p>Y &#8230; ¿Cómo instalo lm-sensors?<br />
Pues, mediante synaptic o escribiendo en consola el siguiente comando:</p>
<pre>apt-get install lm-sensors</pre>
<p style="text-align: justify;">La instalación es automática, aptitude descargará los archivos desde internet  y los instalará en nuestro PC, una vez que se haya terminado la configuración, escribiremos &#8220;sensors&#8221;, nos deberá mostrar una información <span style="text-decoration: underline;">bastante superficial</span> de los sensores en nuestro PC, ésta información no es suficiente para configurar el control de ventiladores, para ello usaremos &#8220;sensors-detect&#8221;, este script nos irá haciendo preguntas para la detección de los sensores, pues simplemente presionamos &#8220;enter&#8221; y al final se nos mostrará un resumen con la lista de sensores detectados:</p>
<pre>#----cut here----
# Chip drivers
w83627hf
k8temp
#----cut here----</pre>
<p>Los sensores de la lista son los que se encontraron en nuestro PC; la última pregunta es crítica y dice <span style="text-decoration: line-through;">algo</span> asi:</p>
<blockquote><p>¿Desea añadir la lista de sensores a /etc/modules? [Si, porfis / NO!!!]</p></blockquote>
<p style="text-align: justify;">Si presionamos &#8220;enter&#8221; estaremos diciendo NO.<br />
Los rumores en internet nos dicen que debemos añadir los módulos (de la lista mostrada) &#8220;en el orden inverso&#8221;, pero Gerber Ignoranto hace caso omiso a los rumores en internet, así que añadí esa lista tal cual como se muestra!</p>
<p>Editamos el archivo <strong>/etc/modules</strong> escribiendo:</p>
<pre>root@ignoranto-pc:/home/ignoranto# gedit /etc/modules</pre>
<p>O si deseamos añadir en modo texto</p>
<pre>root@ignoranto-pc:/home/ignoranto# nano /etc/modules</pre>
<p style="text-align: justify;">Luego de añadir los módulos al archivo <strong>/etc/modules</strong> reiniciamos la PC para estar seguros de que reinicia (jaja, esto es opcional pero recomendado, si no reinicias la PC debes cargar cada módulo usando <strong>modprobe</strong>) y luego nuevamente haremos un chequeo de los sensores (ahora debería salirnos mucha información sobre las temperaturas y cosas más), escribimos en consola &#8220;<strong>sensors</strong>&#8221; (no hace falta ser root (o usuario con privilegios) para ver ésta información), ahora haremos lo más divertido, usaremos el script <strong>pwmconfig</strong> para escalar las velocidades de nuestros fan (fan=ventilador), para correr este script es necesario tener privilegios (o ser root)</p>
<pre>ignoranto@ignoranto-pc:~$ su
Contraseña: mellamogerber
root@ignoranto-pc:/home/ignoranto# pwmconfig</pre>
<p>Esta utilidad nos mostrará las rotaciones por minuto de nuestros ventiladores. OJO con ésta información</p>
<blockquote><p>Found the following devices:<br />
hwmon1/device is k8temp<br />
hwmon2/device is w83627thf</p></blockquote>
<p style="text-align: justify;">Ahí se nos muestra la dirección del disposito asociado con el sensor (esto difiere según el ordenador, la info mostrada solo es de referencia), interpretando la información anterior:</p>
<ul>
<li><strong>k8temp</strong> es el sensor del procesador (AMD <img src='http://ignoranto.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</li>
<li><strong>w83627thf</strong> es el sensor de la mobo (MOther BOard)</li>
</ul>
<p style="text-align: justify;">En el momento que <strong>pwmconfig</strong> se ponga a &#8220;escalar&#8221; las velocidades, observemos bien que ventilador es el que se está trabajando y a que sensor le pertenece!</p>
<p style="text-align: justify;">Luego de todo (al final de las pruebas) nos dará la opción de escribir nuestro archivo &#8220;fancontrol&#8221; para controlar la velocidad deacuerdo a la temperatura de nuestros sensores, se nos muestra un menú así:</p>
<blockquote><p>Select fan output to configure, or other action:<br />
1)<strong> hwmon2/device/pwm2</strong> 3) Change INTERVAL     5) Save and quit<br />
2) <strong>hwmon2/device/pwm1</strong> 4) Just quit          6) Show configuration<br />
select (1-n):</p></blockquote>
<p style="text-align: justify;">En las opciones 1 y 2 encontramos las direcciones de nuestros ventiladores, según mi ordenador, <strong>hwmon2</strong> está asociado al sensor de mi placa (obvio) y los 2 ventiladores provienen de él (obvio, estan conectados a la placa), desde aquí ya es un tanto difícil <span style="text-decoration: line-through;">(si es la primera vez que configuras esto es probablemente que tu procesador se derrita)</span>, comencemos&#8230;</p>
<p>Este ejemplo es PROPIO de <span style="text-decoration: underline;">mi ordenador</span> y varía según el ordenador (placa, procesador, etc)</p>
<p>Le damos a la opción 1, y nos mostrará esta pantalla:</p>
<blockquote><p><strong>Dispositvos (sensores)</strong><br />
Devices:<br />
hwmon1/device is k8temp<br />
hwmon2/device is w83627thf</p>
<p><strong>Temperatura actual de los sensores</strong><br />
Current temperature readings are as follows:<br />
hwmon1/device/temp1_input    31<br />
hwmon2/device/temp1_input    30<br />
hwmon2/device/temp2_input    28<br />
hwmon2/device/temp3_input    64</p>
<p><strong>Seleccionamos el sensor para hwmon2</strong><br />
Select a temperature sensor as source for hwmon2/device/pwm2:<br />
1) hwmon1/device/temp1_input<br />
2) hwmon2/device/temp1_input<br />
3) hwmon2/device/temp2_input<br />
4) hwmon2/device/temp3_input<br />
5) None (Do not affect this PWM output)</p></blockquote>
<p>Se nos irán preguntando estas cosas</p>
<ol>
<li>Enter the low temperature (degree C)<br />
below which the fan should spin at minimum speed (0):<br />
<strong>Ingresamos la temperatura baja (centígrados) para la cual nuestros ventiladores tendran su minima velocidad<br />
</strong></li>
<li>Enter the high temperature (degree C)<br />
over which the fan should spin at maximum speed (60):<br />
<strong>Ingresamos la temperatura más alta, para que nuestros ventiladores estén a su máxima velocidad</strong></li>
<li>Enter the minimum PWM value (0-255)<br />
at which the fan STARTS spinning (press t to test) (150):<br />
<strong>Ingresamos la velocidad de giro de los ventiladores con la cual comenzaremos<br />
</strong></li>
<li>Enter the minimum PWM value (0-255)<br />
at which the fan STOPS spinning (press t to test) (100):<strong><br />
Ingresamos la velocidad minima donde probablemente los ventiladores dejen de girar (recomiendo utilizar el valor anterior)</strong></li>
<li>Enter the PWM value (0-120) to use when the temperature<br />
is below the low temperature limit (0):<strong><br />
Ingresamos la velocidad cuando la temperatura es menor a la temperatura<br />
</strong></li>
<li>Enter the PWM value (120-255) to use when the temperature<br />
is over the high temperature limit (255): <strong><br />
Ingresamos la velocidad cuando la temperatura es máxima (o sobrepasa la temperatura máxima)</strong></li>
</ol>
<p style="text-align: justify;">Hasta aquí ya configuramos las temperaturas y las velocidades del ventilador, luego que hayamos configurado los ventiladores (en mi caso solo 2), guardamos el archivo de configuración presionando 5, listo y ahora ¿Cómo probamos nuestra configuración?, simplemente ejecutamos el script <strong>fancontrol</strong></p>
<pre>root@ignoranto-pc:/home/ignoranto# fancontrol
Loading configuration from /etc/fancontrol ...</pre>
<p style="text-align: justify;">Luego de ejecutar fancontrol deberíamos notar que nuestros ventiladores reducen su ruido y que éste varia dependiendo a la temperatura del ordenador.</p>
<p style="text-align: justify;">Si algo sale mal, simplemente detenemos la ejecución presionando <strong>Control+C</strong>, si nuestra configuración no es convincente pues ejecutamos nuevamente <strong>pwmconfig</strong>, con esto ya tenemos un lindo control de ventiladores, éstos dependerán directamente a lo que indiquen nuestros sensores!</p>
<p style="text-align: justify;"><strong>Datos extras!</strong><br />
Si somos de las personas que nos preocupamos por ver como anda nuestro PC, entonces necesitaremos instalar Gnome Sensors (para usuarios de Gnome), la instalación es sencilla, nuevamente haremos uso de apt-get (o si gustas &gt; aptitude), bueno si prefieres tambien puedes hacer la instalación yendo a: Sistemas/Administración/Gestor de paquetes Synaptic</p>
<pre>root@ignoranto-pc:/home/ignoranto# aptitude install sensors-applet</pre>
<p style="text-align: justify;">Luego de la instalación vamos a cualquier panel de nuestro escritorio, le damos clic derecho y clic en &#8220;Añadir al panel&#8221;, buscamos &#8220;Monitor de sensores&#8221; y lo configuramos a nuestro gusto!</p>
<p style="text-align: right;">Dudas y consultas a mi correo &gt;&gt; gerber@ignoranto.info</p>
<blockquote>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 56px; width: 1px; height: 1px;">
<pre>w83627hf</pre>
</div>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ignoranto.info/ricercando/control-ventiladores-ubuntu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Imagen Aleatoria para Cabecera [WordPress]</title>
		<link>http://ignoranto.info/ricercando/imagen-aleatoria-para-wordpress/</link>
		<comments>http://ignoranto.info/ricercando/imagen-aleatoria-para-wordpress/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 02:32:27 +0000</pubDate>
		<dc:creator>gerWare</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WWW]]></category>
		<category><![CDATA[Cabecera Aleatoria]]></category>
		<category><![CDATA[Cabecera Personalizada]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://gerber.ignoranto.info/?p=460</guid>
		<description><![CDATA[Hola amigos bloggers y queridos lectores, en este post explicaré como hacer que nuestro blog tenga una imagen de cabecera aleatoria. Requisitos (Se incluyen enlaces a descargas): Conocimientos de PHP [a nivel teletubi] Conocimientos de Plantillas Wordpres [Básico/Medio] Editor de imágenes [Gimp, Photoshop, mspaint.exe] Editor PHP [Aptana, Geany, notepad.exe] Ok, primero necesitamos que nuetro Theme [...]]]></description>
			<content:encoded><![CDATA[<p>Hola amigos bloggers y queridos lectores, en este post explicaré como hacer que nuestro blog tenga una imagen de cabecera aleatoria.</p>
<p><strong>Requisitos (Se incluyen enlaces a descargas):</strong></p>
<ul>
<li>Conocimientos de PHP [a nivel teletubi]</li>
<li>Conocimientos de Plantillas Wordpres [Básico/Medio]</li>
<li>Editor de imágenes [<a href="http://gimp.org/downloads/" target="_blank">Gimp</a>, Photoshop, mspaint.exe]</li>
<li>Editor PHP [<a href="http://www.aptana.com/studio/download" target="_blank">Aptana</a>, <a href="http://www.geany.org/Download/Releases" target="_blank">Geany</a>, notepad.exe]</li>
</ul>
<p>Ok, primero necesitamos que nuetro Theme NO tenga la opción de &#8220;cabecera personalizada&#8221;, pero si la tiene la podemos desactivar, pero&#8230;</p>
<p><strong>¿Por que no debe tener cabecera personalizada?</strong><br />
Por que nosotros mismos programaremos <span style="text-decoration: line-through;">y modificaremos</span> nuestro template (plantilla) para que cambie de cabecera cada vez que alguien visite nuestro blog <img src='http://ignoranto.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="attachment_461" class="wp-caption alignright" style="width: 164px"><a href="/wp-content/uploads/antesdeeliminarheader.jpg"><img class="size-full wp-image-461 " title="antesdeeliminarheader" src="http://gerber.ignoranto.info/wp-content/uploads/antesdeeliminarheader.jpg" alt="Antes de Eliminar la funcion " width="154" height="147" /></a><p class="wp-caption-text">Antes de Eliminar la Cabecera personalizada</p></div>
<p style="text-align: justify;"><strong>¿Cómo será el funcionamiento?</strong><br />
Crearemos funciones de PHP las cuales se encargarán de leer el contenido de un directorio (de imágenes), el cual insertará como background la dirección de la imagen extraida, todo esto al azar! Las funciones las guardaremos en el archivo functions.php de nuestra plantilla.</p>
<p>Archivos de nuestra plantilla que deberemos de editar (la mayoria de plantillas cuentan con estos archivos)</p>
<ul>
<li>style.css</li>
<li>headers.php</li>
<li>functions.php</li>
</ul>
<p>Funciones PHP que usaremos</p>
<ul>
<li><strong>scandir($directorio);</strong> crea un array con los nombres de archivo dentro de un directorio;</li>
<li><strong>rand($min, $max);</strong> devuelve un número aleatorio entre los valores $min y $max;</li>
<li><strong>count($array);</strong> cuenta la cantidad de datos dentro de un array;</li>
</ul>
<p>Funciones de WordPress que usaremos</p>
<ul>
<li><strong>bloginfo($parametro)</strong>; imprime un valor según el parámetro ingresado, usaremos el parametro <strong>&#8220;template_url&#8221;</strong>, la función nos mostrará la url de la plantilla!</li>
</ul>
<p><strong>NOTA: Por seguridad antes de hacer cambios en dichos archivos debemos de crear una copia de los mismos (respaldo)</strong></p>
<div id="attachment_462" class="wp-caption alignright" style="width: 164px"><strong><a href="/wp-content/uploads/despuesdeeliminarheader.jpg"><img class="size-full wp-image-462 " title="despuesdeeliminarheader" src="http://gerber.ignoranto.info/wp-content/uploads/despuesdeeliminarheader.jpg" alt="Despues de eliminar la Cabecera Personalizada" width="154" height="106" /></a></strong><p class="wp-caption-text">Despues de eliminar la Cabecera Personalizada</p></div>
<p><strong> </strong></p>
<p style="text-align: justify;">En este pequeño tutorial usaremos como ejemplo la plantilla <a href="http://wpgpl.com/themes/yashfa/" target="_blank">Yashfa</a> [<a href="http://wpgpl.com/download/yashfa.zip">clic para descargar</a>] de <a href="http://wpgpl.com/" target="_blank">WPgpl.com</a>, ésta plantilla tiene la opción de &#8220;Cabecera personalizada&#8221;, como se dijo anteriormente quitaremos dicha propiedad para que nuestro template cambie <span style="text-decoration: line-through;">por si mismo</span> de cabecera en cada visita y editaremos los archivos anteriomente mencionados.</p>
<p style="text-align: justify;"><strong>MODIFICANDO functions.php</strong></p>
<p style="text-align: justify;">Las plantillas para wodpress incluyen el archivo functions.php donde guardan un conjunto de funciones a utilizar y  funciones que añaden &#8220;capacidades extras&#8221; de la plantilla en nuestro panel de WordPress, el archivo functions.php de Yashfa tiene ésta línea de código [línea 134]</p>
<pre>if ( function_exists('add_custom_image_header') ) {
 add_custom_image_header('header_style', 'admin_header_style');</pre>
<p style="text-align: justify;">Eliminaremos esas líneas, tambien podemos comentarlas (para comentar usamos <strong>/*</strong> texto no visible <strong>*/</strong>), una vez que las hayamos comentado, eliminamos (opcionalmente) las funciones &#8220;header_style&#8221; y &#8220;admin_header_style&#8221;, ya que estarían en vano <img src='http://ignoranto.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  (y sería código innecesario) debemos de tener mucho cuidado de eliminar <span style="text-decoration: line-through;">o no</span> <strong>&lt;?php  ?&gt;</strong> ya que se está mezclando el código PHP con HTML y si olvidamos &#8220;cerrar&#8221; el código PHP probablemente nos encontremos con un terrible error!</p>
<p>Una vez que eliminamos las funciones y también la condición, ahora crearemos nuestra función para imágenes aleatorias! Las funciones serán las siguientes:</p>
<ol>
<li>Una función que lea un directorio de imágenes</li>
<li>Una función que imprima el código css para incluir el fondo aleatorio</li>
</ol>
<p>Crearemos 2 funciones, <strong>imagenAleatoria()</strong> y <strong>fondoAleatorioCSS()</strong>; también usaremos una variable global llamada $dir.</p>
<p style="text-align: justify;"><strong>Variable global $dir</strong><br />
$dir contendrá la URL hacia la carpeta de imágenes de nuestro tema, se ha creado la carpeta &#8220;splash&#8221; exclusiva para guardar las imágenes de fondo usadas por nuestra plantilla (yashfa) modificada!, el valor de $dir que usaremos dentro de functions.php será &gt;&gt; &#8220;wp-content/themes/yashfa/images/splash&#8221;;</p>
<pre>$dir = "wp-content/themes/yashfa/images/splash";</pre>
<p><strong>» Función imagenAleatoria(); ¿Cómo funciona?</strong><br />
Esta funcion lee un directorio de imágenes usando scandir(), nos crea un array y usando rand() generamos un número entre 2 y el tamaño máximo de nuestro array, pero&#8230;</p>
<p style="text-align: justify;">¿Por que 2 como número minimo? explicación:<br />
Cuando leemos un directorio siempre nos encontramos con estos subdirectorios . y .. (punto, y 2 puntos), los cuales nos permiten ir al directorio contenedor (un directorio atrás), por ello el valor mínimo será 2 para que al momento de llamar a una posición del array ésta no devuelva <strong>.</strong> o <strong>..</strong></p>
<p style="text-align: justify;">Leeremos nuestro directorio $dir y crearemos un array de los archivos con scandir($dir), contaremos la cantidad de archivos usando count($array); generaremos una posición aleatoria en el array usando rand(), luego devolveremos el valor del array en la posición dada.</p>
<pre>function imagenAleatoria()
{
 global $dir;
 $imagenes = scandir($dir);
 $cantidadImagenes = count($imagenes);
 $posicionImagenAleatoria = rand(2,$cantidadImagenes-2);
 return $imagenes[$posicionImagenAleatoria];
}</pre>
<p><strong>Lo que hace nuestra función<br />
</strong></p>
<ul>
<li><strong>global $dir;</strong> lee el contenido de la variable $dir, ésta variable está fuera de la función;</li>
<li><strong>$imagenes</strong> almacena el valor que devuelve la funcion <strong>scandir($dir)</strong>, una lista (array) con el nombre de los archivos, sabemos que <strong>$dir</strong> es la url de nuestra carpeta <strong>splash</strong>, donde tenemos almacenadas nuestras imágenes;</li>
<li><strong>$cantidadImagenes</strong> será el número de imágenes que tenemos, count($imagenes) cuenta la cantidad de imágenes (cuenta los elementos del array);</li>
<li><strong>$posicionImagenAleatoria</strong> nos devolverá un numero aleatorio entre 2 y el número de elementos del array ($cantidadImagenes), le restamos 2 al final por que no contamos los 2 primeros elementos, ya sabemos que son . y .. éstos elementos NO son imágenes!</li>
<li><strong>return </strong><strong>$imagenes[$posicionImagenAleatoria]</strong>; retorna el valor generado por la función, le indicamos que retorne el NOMBRE del archivo de $posicionImagenAleatoria</li>
</ul>
<p><strong>» Función fondoAleatorioCSS(); ¿Cómo funciona?</strong><br />
Nuestra función solo imprimirá el código CSS dentro de nuestra etiqueta DIV a la cual queremos añadir el estilo de background-image, su creación es sensilla</p>
<pre>function fondoAleatorioCSS()
{
 $nImagen = imagenAleatoria();
 echo "background-image:url(";
 bloginfo(template_url);
 echo "/images/splash/$nImagen)";
}</pre>
<p><strong>Lo que hace ésta función</strong></p>
<ul>
<li><strong>$nImagen = imagenAleatoria();</strong> aquí llamamos a la función imagenAleatoria(); y el valor devuelto lo guardamos como $nImagen;;</li>
<li><strong>echo &#8220;background-image:url(&#8220;;</strong> imprimimos de manera INCOMPLETA el valor CSS background-image;</li>
<li><strong>bloginfo(template_url);</strong> llama a la función de wordpress y esta imprime la url de nuestra plantilla;</li>
<li><strong>echo &#8220;/images/splash/$nImagen)&#8221;;</strong> termina de imprimir el código CSS background-image;</li>
</ul>
<p>Listo! Hasta ahora ya tenemos preparada nuestra plantilla para que muestre fondos aleatorios, ahora falta editar el archivo header.php de nuestra plantilla y llamar a la función PHP <strong>fondoAleatorioCSS()</strong>; para que muestre la dirección de nuestra imagen de fondo!</p>
<p><strong>MODIFICANDO header.php</strong></p>
<div id="attachment_464" class="wp-caption alignright" style="width: 310px"><a href="/wp-content/uploads/yashfa.jpg"><img class="size-medium wp-image-464 " title="yashfa" src="http://gerber.ignoranto.info/wp-content/uploads/yashfa-300x141.jpg" alt="Yashfa Modificado" width="300" height="141" /></a><p class="wp-caption-text">Yashfa Modificado</p></div>
<p>Dentro de éste archivo tenemos la etiqueta &lt;div id=header&gt;&lt;/div&gt;(estamos retocando la plantilla yasfha, ésta etiqueta puede tener otro ID si se modifica otra plantilla), llamaremos a la función fondoAleatorioCSS() dentro de &lt;div&gt; para que nos muestre la url de  la imagen de fondo.</p>
<pre>&lt;div id="header" style="&lt;?php fondoAleatorioCSS();?&gt;"&gt;</pre>
<p>Llamado a <strong>fondoAleatorioCSS();</strong> su contenido es impreso dentro de <strong>&#8220;style:&#8221;</strong>, esto genera un <strong>background-image</strong> con la url de la imagen aleatoria a mostrar!</p>
<p><strong>MODIFICANDO style.css (Opcional)</strong><br />
Solo modificaremos la propiedad &#8220;background&#8221; de <strong>#header{}</strong> por background-position, background-repeat, etc. Esto es opcional y debería quedar así:</p>
<p><strong>Propiedad original: </strong>background: #000 url(images/header.jpg) 0 0 no-repeat;<br />
<strong>Cambiar por:</strong> background-repeat:no-repeat; background-position:center top;</p>
<p><strong>IMPORTANTE<br />
</strong>La modificación de la cabecera en el archivo header.php es EXCLUSIVA para ésta plantilla, otras plantillas pueden tener otro ID para la etiqueta que guarda la imagen de fondo, es necesario leer el código fuente (generado) y el archivo style.css para conocer el ID de la etiqueta que tiene imagen de fondo.</p>
<p><strong>NOTAS EXTRAS</strong><br />
Luego de éstas modificaciones solo hace falta colocar <strong>imágenes de 950*170 píxeles</strong> en la carpeta <strong>images/splash</strong> dentro de la carpeta de nuestra plantilla (yashfa).<br />
Los usuarios de windows deberán tener mucho cuidado al subir imágenes al host, ya que también se suele cargar el archivo thumb.db siendo este &#8220;no visible&#8221;</p>
<p style="text-align: center;"><strong>Los archivos modificados los <a href="http://ignoranto.info/paraDescargar/yashfa.rar">encuentras aquí</a> están compresos en formato.rar y libre de virus <img src='http://ignoranto.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ignoranto.info/ricercando/imagen-aleatoria-para-wordpress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Frases aleatorias para WordPress</title>
		<link>http://ignoranto.info/ricercando/frases-aleatorias-para-wordpress/</link>
		<comments>http://ignoranto.info/ricercando/frases-aleatorias-para-wordpress/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 18:52:07 +0000</pubDate>
		<dc:creator>gerWare</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://gerber.ignoranto.info/?p=429</guid>
		<description><![CDATA[Dando unos retoques a mi blog, escribí este script PHP que permite mostrar &#8220;frases aleatorias&#8221; en cualquier parte de nuestro blog. En el caso de este blog dichas frases están al final del primer post e invitan a &#8220;comentar algo&#8221; en dicha entrada. ¿Qué necesitamos saber? Pues algo de PHP, pero aquí explicaré todo de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Dando unos retoques a mi blog, escribí este script PHP que permite mostrar &#8220;frases aleatorias&#8221; en cualquier parte de nuestro blog. En el caso de este blog dichas frases están al final del primer post e invitan a &#8220;comentar algo&#8221; en dicha entrada.</p>
<p><strong>¿Qué necesitamos saber?</strong><br />
Pues algo de PHP, pero aquí explicaré todo de manera entendible</p>
<p><strong>¿Para qué me sirve este script?</strong><br />
Para nada, solo muestra frases aleatorias en la parte donde coloces el script y las frases que quieras <img src='http://ignoranto.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Primero debemos saber que es un &#8220;array&#8221;, pero <strong>¿Qué es?<br />
</strong>Es un conjunto de &#8220;datos&#8221; (del mismo tipo) agrupados en una sola &#8220;variable&#8221;, ejemplo:</p>
<p style="text-align: center;"><strong>gaseosa = array(cocacola, fanta, sprite, 7up, etc)</strong></p>
<p style="text-align: left;">Donde: &#8220;cocacola&#8221; está en la posición 0, &#8220;fanta&#8221; en 1, &#8220;sprite&#8221; en 2, &#8220;7up&#8221; en 3, etc. Crearemos un array de &#8220;saludos&#8221; o &#8220;frases&#8221;, en mi caso he creado un array de &#8220;frases que invitan a comentar&#8221;, miren el código</p>
<pre style="text-align: left;">$comentar = array( //nuestro array
//las frases van separadas por comas y entre comillas
        'Deja tu comentario!',
        '&amp;iquest;Quieres dejar un comentario?',
        'Y... &amp;iquest;Por qu&amp;eacute; no comentas?',
        'Comenta algo! vamos!',
        '&amp;iquest;Ya comentaste?',
        '&amp;iquest;Gustas comentar algo?',
        'Escribe un comentario!',
        'Que te parece si ... Dejas un comentario!',
    ); //aqui termina el array</pre>
<p>Luego de haber creado nuestro array necesitamos saber cuantos datos están dentro de él, para ello en PHP tenemos una función llamada &#8220;count($var)&#8221; la cual nos devuelve el &#8220;tamaño&#8221; de la variable $var, la aplicaremos en nuestro array!</p>
<pre> //$long es la cantidad de datos del array
 $long = count($comentar) -1;</pre>
<p>Y para escoger un valor aleatorio dentro del array usaremos la función &#8220;rand($inicio, $fin)&#8221; de PHP, el cual nos seleccionará un valor al azar entre 0 y la longitud de nuestro array</p>
<pre>// $x será el valor aleatorio entre 0 y $long
$x = rand(0,$long);</pre>
<p>Para poder &#8220;imprimir&#8221; en pantalla la frase y/o mensaje crearemos una funcion, la cual llamaremos desde la plantilla y ésta funcion se encargará de mostrar la frase:</p>
<pre>function mostrar_mensaje()
{
    global $comentar, $x;
    echo $comentar[$x];
}</pre>
<p style="text-align: justify;">Listo! Todo el código escrito lo guardamos en un archivo que esté junto (en la misma carpeta) al index.php de nuestra plantilla, lo guardamos con el nombre que querramos, y luego en nuestra plantilla escribimos este código (de preferencia al inicio):</p>
<pre style="text-align: justify;">&lt;?php include('nombredelarchivo.php'); ?&gt;</pre>
<p style="text-align: justify;">El cual cargará el código en la plantilla y en el lugar donde queramos mostrar el saludo, frase o lo que fuese, insertamos:</p>
<pre style="text-align: justify;">&lt;?php mostrar_mensaje(); ?&gt;</pre>
<p style="text-align: justify;">Eso es todo, en nuestro array, podemos agregar más &#8220;saludos&#8221; escribiéndolos así:</p>
<pre style="text-align: justify;">"mi saludo entre comillas y luego una COMA",
//la ultima frase no debe tener coma (,)</pre>
<p>Eso es todo, a ver si les sirve, ya existen plugins que hacen esto pero mejor es hacerlo a mano, de paso aprendemos algo <img src='http://ignoranto.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://ignoranto.info/ricercando/frases-aleatorias-para-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
