jueves, 29 de enero de 2009

Manual de PHP 32. Bucles: For

El bucle for

Se trata de una nueva forma –de uso bastante habitual– que permite establecer un bucle que se repetirá mientras una variable numérica se mantenga dentro de intervalo -establecido en la sintaxis del propio bucle– indicándose, también en la propia instrucción, el criterio de modificación de esa variable en cada ejecución del bucle.

La sintaxis es la siguiente:

for ( desde ; hasta ; incre ){
.........
...instrucciones....
.........
}

El parámetro desde permite asignar un valor inicial a una variable ($var=num) que hará funciones de controladora de iteraciones.

El parámetro hasta establece la condición que limita el valor máximo que puede alcanzar la variable de control.

El parámetro incre (con una sintaxis del tipo $variable++; $variable--; ++$variable --$variable; $variable +=n o $variable -=n establece los incrementos o decrementos de la variable controladora en cada iteración del bucle.

Las intrucciones contenidas entre { } serán ejecutadas cada vez que se reitere el bucle.

Variantes del bucle for

El bucle for permite algunas variantes respecto a su forma más general. Son estas:

for ( desde ; ; incre ){
.........
...instrucciones....
.........
}

En este caso se omite el valor del parámetro hasta (observa que no se omite el separador de parámetros (;) con lo que en realidad se está asignando a hasta el valor NUL.

Cuando se utiliza esta sintaxis, el bucle se repetiría de forma indefinida (la variable podría tomar cero como valor, pero, cero es distinto de NUL) salvo que -tal como puedes ver en el ejemplo- se escriba en las instrucciones un operador condicional con una opción de ruptura del bucle -el famoso break que ya hemos visto al estudiar la instrucción while y otras anteriores–.

for ( ; ; ){
.........
...instrucciones....
.........
}
En este caso no se inserta ningún parámetro pero si se escriben los ; delimitadores de los mismos.

Si observas el ejemplo verás que el control se realiza fuera del for. El valor de la variable contador se asigna fuera del bucle, los incrementos de esa variable están escritos en las líneas de instrucciones y llevan un operador condicional con la función break para permitir la salida.

for( desd ; hast ; inst, incr )

Esta nueva variante de for permite insertar instrucciones a través del tercer parámetro de la función.

Si insertamos como tercer parámetro una conjunto de instrucciones, separadas por comas, se ejecutarán de igual forma que si estuvieran contenidas entre { y }

En este caso, el modificador de la variable de control (incr) se incluye como una instrucción más –separada por una coma– de las contenidas en ese tercer parámetro de la función.

for ( desde ; hasta ; incre ):
.........
...instrucciones....
.........
endfor;

Esta sintaxis es alternativa a la primera de las descritas. Sustituye la { por dos puntos (:) y la } por endfor.




<?
for ($i = 1; $i <= 10; $i++) {
print $i."<br>";
}
?>

<?
for ($i = 1;;$i++) {
if ($i > 10) {
break;
}

print $i."<br>";
}
?>



<?
$i = 1;
for (;;) {
if ($i > 10) {
break;
}

print $i."<br>";
$i++;
}
?>
<?
for ($i = 1; $i <= 10; print $i."<br>", $i++) ;
?>

<?
for($i = 1; $i <=10;$i++):
echo $i,"<br>";
endfor;
?>

ejemplo49.php

<? for ($i = 1; $i <= 10;$i++):?>
<H1>Esto se repetirá 10 veces</H1>
<? endfor; ?>

Como puedes observar en este último ejemplo también es aplicable aquí la sintaxis de los dos sripts PHP. El primero contiene las instrucciones del bucle y el segundo señala el final del mismo.

Entre ambos scripts se escribe el código HTML



A la hora de programar bucles hay que evitar el riesgo de convertirlo en un bucle indefinido.

Cuando esto ocurre –el error es humano– al abrir la página que lo contiene parecerá que nuestro navegador se ha quedado colgado aunque en realidad estará esperando a que sea atendida la petición.

Si llega a planteársete ese problema, tendrás que recurrir a la socorrida solución de pulsar ALT+CTRL+DEL para abortar la petición del navegador.






Manual de PHP 31. Bucles: do... while

El bucle do... while

Estamos ante una variante del bucle while que hemos visto en la página anterior.

La sintaxis es la siguiente:

do {
...intrucción 1...
.... instruccion2...
} while(condición) ;

Se diferencia de while en que en este caso se comprueba la condición después de haber ejecutado las instrucciones contenidas en el bucle, con lo cual, en el caso de que desde el comienzo no se cumplieran las condiciones establecidas en while, las instrucciones del bucle se ejecutarían una vez.

Respecto a la sintaxis, como puedes observar, detrás de do se inserta una llave ({) que señala el comienzo de las instrucciones pertenecientes al bucle. El final de esas instrucciones lo señala la otra llave (}) que precede a while(condición).

break

La función break –de forma similar a lo que ocurría en switch– permite interrumpir la ejecución de bucle.

Tal como puede verse en el ejemplo, podría –entre otras posibilidades– utilizarse para evitar la primera ejecución de las instrucciones contenidas en el bucle, en el caso de que, desde un primer momento, no se cumplieran las condiciones establecidas en while.




El bucle do ... while


<?
$A=0;
do {
++$A;
echo "Valores de A usando el do: ",$A,"<br>";
} while($A<5);
$B=7;
do {
echo "Pese a que B es mayor que 5 se ejecuta una vez. B= ",$B,"<br>";
} while($B<5);
?>




<?
$A=500;
do {
if ($A>=500) {
echo "No puede ejecutarse el bucle, porque no se cumple la condicion";
break;
}

++$A;
echo "Valores de A usando el do: ",$A,"<br>";

} while($A<500);

echo "<BR>He salido del bucle porque A es: ",$A;
?>




El ejemplo que tienes aquí debajo es similar al ejemplo nº 40 de la página anterior. Sólo hemos sustituido los bucles while que allí habíamos utilizado por otros del tipo do ... while.


Ver código fuente



No lo hemos comentado en la página anterior pero break se comporta en el caso de while de forma idéntica a la descrita aquí.


ejemplo44.php Ver código fuente



Fuente:
Página del ifstic: http://www.isftic.mepsyd.es/formacion/enred/

Manual de PHP 30. Bucles: While

Los bucles

La necesidad de repetir la ejecución de instrucciones es algo habitual en el mundo de la programación.

Frente a la alternativa –poco práctica– de rescribir esas instrucciones todos los lenguajes de programación disponen de funciones que pueden ejecutar un bloque de instrucciones de forma repetitiva.

La instrucción while

Como ocurría en el caso de if, el parámetro condición permite cualquier estructura lógica, y también dispone de distintas opciones de sintaxis.

while(condición)
...instrucción

Con esta sintaxis estaremos indicando que la instrucción siguiente (sólo una instrucción) ha de ejecutarse continua y repetidamente hasta que deje de cumplirse la condición establecida.

while(condición){
...instrucción
.....
}

De forma similar a la utilizada en el caso de if, también en este caso, las llaves hacen la función de contenedores de las instrucciones cuya ejecución debe repetirse mientras se cumpla la condición.

while(condición):
...instrucción
.....
endwhile;

También aquí se mantiene la similitud con la sintaxis del condicional if.
La llave ({) pueden sustituirse por (:) y en este caso en vez de (}) habría que escribir endwhile.

while(condición) : ?>
...etiquetas HTML
.....


También while permite cerrar el script PHP después de (:) o de la sintaxis alternativa ({) e insertar etiquetas HTML, indicando más tarde el final del bucle con o , según proceda.

Whiles anidados

Una nueva similitud sintáctica con if. En el caso de while también es posible insertar un while dentro de otro while utilizando una sintaxis de este tipo:

while(condición1):
...instrucción
while(condición2) {
...instrucción
.....
}
.....
endwhile;

En esta descripción hemos utilizado dos sintaxis distintas. Por si acaso dudaras de si es necesario o no hacerlo de esa forma, te diremos que no es necesario nunca. El hecho de la anidación no limita un ápice las posibilidades de la sintaxis.

Ver código fuente

PHP dispone de la función

show_source('pag');

que permite visualizar el código fuente del documento que se indica en el parámetro pag.
Es muy útil para los propósitos de este curso, pero presenta un problema de seguridad.

Si escribes –en el parámetro pag– la dirección completa de una web cualquiera (que tenga extensión php) se visualizará su contenido, salvo que el PHP instalado en el servidor que la aloja la tenga expresamente desactivada.

Recuerda...
En HTML se puede asignar el color fondo a una celda incluyendo bgcolor=RGB(x,y,z) dentro de la etiqueta .

x, y ,z son los valores de las componentes de cada color primario.



y
# y el modificador de la variable filas
# y un segundo while (magenta) para insertar las etiquetas correspondientes
# a las celdas de cada fila

while ($filas>0):
echo "<tr>";
$filas--;

while ($columnas>0):
echo "<td>";
print "fila: ".$filas." columna: ".$columnas;
print ("</td>");
$columnas--;
endwhile;

/* ¡muy importante!. Tendremos que reasignar a la variable columnas
su valor inicial para que pueda ser utilizado en la proxima fila
ya que el bucle (magenta) va reduciendo ese valor a cero
y en caso de no restaurar el viejo valor no volvería a ejecutarse
ya que no cumple la condición de ser mayor que cero */
$columnas=3;
echo "</TR>";
endwhile;

# por ultimo la etiqueta de cierre de la tabla
print "</table>";
?>




Insertando condicionales en un bucle while


En este nuevo ejemplo hemos modificado ligeramente el anterior, incluyendo un condicional if. No incluimos aquí el código fuente para evitarte la monotonía de repetir íntegramente y con ligeras modificaciones el supuesto anterior.


Para visualizar ese código bastará que pulses en el enlace Ver código fuente. Las modificaciones que hemos introducido aparecen marcadas y podrás localizarlas rápidamente.


Utilizaremos a menudo esta forma de visualización del código fuente de los scripts. Es una opción de uso muy simple, utilizando la función show_source(), la que aprovechamos para comentar al margen.


La instrucción while


<?
# asignemos un valor a la variable $A
$A=0;
/* establezcamos la condición menor que cinco
e insertemos dentro de la instrucción algo que modifique
el valor de esa variable de modo que en algun momento
deje de cumplirse la condición;
de no ocurrir esto, el bucle se repetiría indefinidamente
en este ejemplo el autoincremento ++ de la variable
hará que vaya modificandose su valor*/

while ($A<5) echo "El valor de A es: ",$A++,"<br>";
# comprobemos que este while solo ejecuta una instrucción
# la delimitada por el punto y coma anterior
print("Esto solo aparecerá una vez. While no lo incluye en su bucle");
?>


<?
$A=0;

/* utilicemos ahora el bucle para crear un tabla HTML
empecemos escribiendo la etiqueta de apertura de esa tabla
fuera del bucle (ya que esa se repite una sola vez)
y utilicemos el bucle para escribir las celdas y sus contenidos */

print ("<table width=300 border=2>");

while ($A<=5){
echo "<tr><td align=center>";
print $A;

# esta instrucción es importantisima
# si no modificamos el valor de $A el bucle sería infinito
$A++;
print("</td></tr>");
}
# cerremos la etiqueta table
print "</table>";
?>

<?
# utilicemos whiles anidados para construir una tabla de
$filas=5; $columnas=3;
# insertemos la etiqueta de apertura de la tabla
print ("<table border=2 width=400 align=center>");
# un primer while rojo que utiliza la condición filas mayor que cero
# en este caso, la variable tendrá que ir disminuyendo su valor con $filas--
# para escribir las etiquetas
Ver nuevo ejemplo Ver código fuente





Fuente:
Página del ifstic: http://www.isftic.mepsyd.es/formacion/enred/

Manual de PHP 29. Operadores: La función switch

La función switch

Una alternativa al uso de condicionales del tipo if es la función switch.

Se trata de un condicional que evalúa una variable y, según su valor, ejecuta unas instrucciones u otras.

Su sintaxis es la siguiente:

switch ( variable ) {

case n1:
instrucciones caso n1...
.....................


case n2:
instrucciones caso n2...
.....................

}

Cuando se usa esta sintaxis sólo se ejecutan aquellas instrucciones que han sido incluidas a partir de la etiqueta en la que el número que sigue a case coincide con el valor de la variable.

La forma más habitual de uso de esta función es esta:

switch ( variable ) {

case n1:
instrucciones caso n1...
.....................
break;

case n2:
instrucciones caso n2...
.....................
break;
}

Esta opción incluye antes de cada nuevo case la función de ruptura break. Cuando PHP encuentra el break interrumpe la ejecución y no la reanuda hasta la instrucción siguiente a la } que cierra la función switch.

Insertando break en cada una de las opciones case, sólo se ejecutarían las instrucciones contenidas entre case num y ese break.

default:

Bajo este nombre (default:) se pueden incluir –dentro de la función switch– un conjunto de instrucciones que solo serán ejecutadas en el caso que el valor de la variable no coincida con ninguno de los case. Su comportamiento es equivalente a else en el condicional if.


La estructura switch

<?
# esta es la variable que controlará la función switch
$i=1;

switch ($i) {

#insertamos la etiqueta case 0 y a continuación
# las instrucciones correspondientes

case 0:
print "i es igual a 0 - No he puesto el break<br>";

# insertamos la etiqueta case 1 y a continuación
# las instrucciones correspondientes
# como no hemos puesto break y en este ejemplo $i=1
# se ejecutarán todas las instrucciones escritas
# de aquí en adelante

case 1:
print "i es igual a 1 - No he puesto el break<br>";
case 2:
print "i es igual a 2 - No he puesto el break<br>";

};
# ahora incluiremos break al final de las intrucciones de cada case
# con ello lograremos que solo se ejecuten las intrucciones correspondientes
# a cada uno de ellos
switch ($i) {
case 0:
print "i es igual a 0 - Ahora lleva break<br>";
break;
case 1:
print "i es igual a 1 - Ahora lleva break<br>";
break;
case 2:
print "i es igual a 2 - Ahora lleva break<br>";
break;
}
?>

ejemplo36.php

<? $i=3;
switch ($i) {
case 0:
print "La variable i es 0<br>";
break;
case 1:
print "La variable i es 1<br>";
break;
case 2:
print "La variable i es 2<br>";
break;

# al intoducir default y dado que $i=3 se ejecutarán
# las instrucciones contenidas aquí ya que la variable
# no coincide con ninguno de los case establecidos
default:
print "La variable i es mayor que dos o menor que cero";
break;
}
?>






Fuente:
Página del ifstic: http://www.isftic.mepsyd.es/formacion/enred/

miércoles, 28 de enero de 2009

Solucionar error 29 en Google Earth para Linux

Al intentar instalar Google Earth para ver el modelo en tres dimensiones de Orense que acaban de poner disponible, me encontré con que en mi versión de Ubuntu AMD64 al intentar ejecutar la aplicación tras su instalación ( por cierto, para instalarlo, lo único que hay que hacer es descagar el fichero y "sh ./GoogleEarthLinux.bin" ) me mostraba un código de error 29.

El error es debido a que en el fichero de instalación se han olvidado de establecer la dependencia de la aplicación con respecto al paquete lib32nss-mdns. Siempre que tengas bien configurado tu cortafuegos y tu conexión a Internet, para solucionarlo, lo único que debes hacer, tras cerrar google earth es:


sudo apt-get install lib32nss-mdns

... que lo disfrutes


Fuente:
http://queltosh.blogspot.com/2008/05/google-earth-linux-error-29.html

martes, 27 de enero de 2009

Ourense 3D en Google Earth





El ayuntamiento de Orense acaba de anunciar la disponibilidad de un nuevo portal dedicado al turismo de la ciudad de Orense.

Tras una primera visita, además de la claridad, me ha sorprendido la cantidad de documentación sobre la ciudad que podréis encontrar en él. Pero de lo que me gustaría hablar no es de eso, sino de uno de los enlaces que os podéis encontrar en la primera página y que es lo que hace de éste un proyecto sorprendente y muy novedoso.


Como podéis ver en la imagen anterior, hay una pestaña (Explore 3d) y una imagen (ourense Earth) que os permitirá acceder a unos modelos en tres dimensiones - 3d - que usan como base la plataforma de Google Earth, desde dónde podréis realizar recorridos por la ciudad de Ourense, permitiendo un acercamiento a parte de la zona monumental de la ciudad, que seguro incitará a algunos a pasarse horas recorriéndolo y a otros muchos a visitar la ciudad.

Ni quiero ni pretendo ser objetivo con este trabajo, pero lo cierto es que otros famosos modelos, como pueden ser el de Westport en Irlanda, quedan muy lejos de éste por varias razones y sitúan al modelo en tres dimensiones de Orense a la cabeza de los representados en esta plataforma. En primer lugar este es un modelo de muchísima extensión en la que los edificios tienen una gran complejidad -mención especial para la impresionante reproducción de la catedral de orense, plaza de la Magdalena, Mayor,...-, por otro lado la fidelidad y dificultad de los modelos representados, baste para ello fijarse en detalles como las galerías de los edificios de la plaza Eironciño dos Cabaleiros o los numerosos rótulos representados en 3d, para finalizar el valor histórico artístico de los modelos representados.



Como una imagen vale más que mil palabras, lo mejor que podéis hacer es ir a la página de www.turismodeourense.com recorrerla, descargaros el programa google earth (accesible y gratuito desde el mismo portal) y dejaros seducir por una de las más bellas y desconocidas ciudades de Galicia.

Por cierto para los menos duchos, en la misma página han puesto un enlace desde dónde podéis ver una guía de uso.

Espero que os guste tanto como a mi.

Por último - aprovechando que el Miño pasa por Ourense - si queréis conocer un poco más sobre la historia de la creación de la ciudad y los edificios, calles y plazas representadas en el modelo os recomiendo la lectura del libro "Historia de Ourense" de Marcos Valcárcel, en el que de modo breve y conciso podréis hacer otro recorrido, éste histórico, por los períodos y personas relevantes en la historia de la ciudad.

domingo, 25 de enero de 2009

Tablas en blogger ¡SOLUCIONADO!

Si has creado alguna tabla en tu blog de blogger ( blogspot ) para que aparezca en alguno de tus post, te habrás dado cuenta -me temo que muy rápidamente-, de que se añaden una gran cantidad de saltos de línea antes de su comienzo y que tú no has creado.

Me temo que esto es debido a un fallo que se soluciona muy fácilmente. La manera de arreglar el fallo es sencilla y se puede automatizar una vez identificado. Por increible que te parezca, una vez has creado tu tabla con sus sangrías, como puede ser la siguiente:


<HTML>

<HEAD>

<TITLE>Ejemplo 10</TITLE>

</HEAD>

<BODY>



<H1>Tablas básicas</H1>



<TABLE BORDER="1">

<TR>

<TH>Cabereca 1</TH>

<TH>Cabereca 2</TH>

<TH>Cabereca 3</TH>

</TR>

<TR>

<TD>Dato 1</TD>

<TD>Dato 2</TD>

<TD>Dato 3</TD>

</TR>

<TR>

<TD>Dato 4</TD>

<TD>Dato 5</TD>

<TD>Dato 6</TD>

</TR>

</TABLE>



</BODY>

</HTML>


verás que se han creado unos saltos al principio:

Tablas básicas



















Cabereca 1 Cabereca 2 Cabereca 3
Dato 1 Dato 2 Dato 3
Dato 4 Dato 5 Dato 6


La manera de solucionarlo es:
  • Manualmente: eliminar todos los saltos de línea, juntando todas las etiquetas hasta dejarlas en una sola línea. (esto en tablas grandes es un engorro y puede llevarte, seguro mucho tiempo, pero también a cometer algún error que haga que tu tabla no se muestre)
  • Automáticamente: vas a este enlace (en el que he creado un pequeño script) copias la tabla en el cuadro de texto superior, y tras pulsar el botón tendrás en el inferior, tu tabla sin los saltos que hacían que no se mostrase bien:


<HTML><HEAD><TITLE>Ejemplo 10</TITLE></HEAD><BODY><H1>Tablas básicas</H1><TABLE BORDER="1"><TR> <TH>Cabereca 1</TH> <TH>Cabereca 2</TH> <TH>Cabereca 3</TH></TR><TR> <TD>Dato 1</TD> <TD>Dato 2</TD> <TD>Dato 3</TD></TR><TR> <TD>Dato 4</TD> <TD>Dato 5</TD> <TD>Dato 6</TD></TR></TABLE></BODY></HTML>


con lo que si te fijas se habrán eliminado en tu post los saltos de línea que no querías apareciesen en tu artículo:

Ejemplo 10

Tablas básicas

Cabereca 1 Cabereca 2 Cabereca 3
Dato 1 Dato 2 Dato 3
Dato 4 Dato 5 Dato 6


Existe otra posibilidad todavía más sencilla para arreglar esto, pero que afectará a la apariencia de la totalidad de tus post, y que tiene la ventaja de ser mucho más sencilla.

Tan sólo vete a las opciones de configuración de blogger y en Configuración -- Formato, pon la opción Convertir Saltos de línea a NO. Esto hará que no aparezcan los incómodos saltos de línea, pero afectará igualmente a los post que ya hayas publicado previamente, aunque si vuelves a seleccionar "Convertir Saltos de línea a SI" tus post recuperarán su apariencia previa, es decir, puedes probarlo sin temor a "romper" nada. (en mi caso destrozaba bastante la apariencia de muchas entradas.)


*tú decides, pero al menos ya sabes qué hacer para eliminarlos...., espero

Aprender a tocar la guitarra jugando con Disney Star Guitarist



Hace un par de años que Guitar Hero irrumpió en el mercado de las videoconsolas con un juego en el que sosteniendo un mando del tamaño de una guitarra -casi, en realidad es una 3/4 creo recordar- los jugadores se disponían a pulsar botones al ritmo de la música que aparecía por pantalla.

A mi sigue pareciéndome un jostick demasiado grande para jugar, pero lo cierto es que el juego ha tenido bastante éxito y se le han añadido nuevos accesorios como el micro y la batería.

Este éxito no podía pasar inadvertido y viendo el blog de enriquebarreiro, me he encontrado con que en el ces de este año han presentado lo que en numerosas páginas han considerado la evolución "natural" de este juego: "Disney Star Guitaris", en realidad una alianza entre Disney y Washburn, un fabricante de guitarras americano (que ya había hecho otras adaptaciones para el guitar hero).

Básicamente, lo que nos venden es un juego con el que se podrá "jugar" mientras se aprende a tocar la guitarra, para ello, el instrumento, esta vez si es una guitarra eléctrica a la que se le han puesto cuerdas de distintos colores para facilitar el desarrollo del juego-aprendizaje, se conectará a nuestro PC o MAC para intentar pulsar cuerdas al ritmo del juego.

Como idea me parece genial, de hecho espero que tenga tanto éxito que se lancen a desarrollar otras interfaces, además de la consabida batería, como pudiera ser un instrumento de viento (podrían tener cabida flauta, saxo y clarinete en un mismo "jostick" al estilo del yamaha wx5 midi), pianos,.... que incluso pudieran constituir un primer acercamiento para los más pequeños a estos instrumentos.

Por supuesto, y a falta de verlos funcionar -lo pondrán a la venta en verano- me parece una gran idea que por 200$ (el precio al que han anunciado el juego más la guitarra) podamos intentar convertirnos en unos avezados guitarristas, o al menos emularlos. Lo cierto es que me temo que en una era en la que el éxito en el mercado parece ir ligado a la simplificación de los mismos (véase el éxito de la wii) me temo y ojalá que tenga que comerme mis palabras, que será un juego para melómanos -que no es poco- y poco más. Aunque así sea, todo lo que sea ofrecer un juego educativo y además en un área como la musical, casi inexistente en la actualidad, me parece una idea valiente y destacable.

*** quiero un interfaz tipo saxo yaa.....