Me lo contaron y lo olvidé, lo leí y lo entendí, lo hice y lo aprendí.





sábado, 26 de mayo de 2012

Dejar de ver la biografía (TimeLine) en FB

Es oficial, a nadie nos gusta la apariencia actual del FaceBook; y es que han reemplazado la vista del "muro" por la de "Biografía" (TimeLine).
Hay varias supuesta "aplicaciones" del FB que dicen re-configurar la vista del muro, pero todas ellas son un fraude, bromas para los usuarios o formas de conseguir "likes".

Hace 4 meses que encontré y uso un plugin que resuelve éste problema; no cambia la configuración del perfil, por lo que seguirá siendo la de "Biografía", pero lo que sí hace es instalarse en el navegador web y dar la apariencia anterior a los perfiles. Ésto solo funciona, obviamente, bajo el navegador que tiene instalado el plugin, pero es la única forma auténtica que evita lastimarse la vista con la visualización actual de FaceBook.

El plugin "TimeLine Remove" se descarga de aquí:

http://www.timelineremove.com/

Solo tienen que elegir el navegador en el cual instalar el plugin.

He aquí una comparación de la vista del mismo perfil con Chrome (en donde tengo la TimeLine Remove) y Opera (Sin la TimeLine Remove):

Chrome con la TimeLine Remove


Opera sin la TimeLine Remove

martes, 22 de mayo de 2012

Instituto Superior de Música del Estado de Veracruz: Recitales Mayo-Junio


MAYO

22.- Recital de Violín 19:00 hrs.
        Maestro Mikhail Medvid

23.- Concierto de cuartetos de saxofón 19:00 hrs.

24.- Recital de violín 19:30 hrs
        Maestros Ernesto Tarragó y Laura Sosa

25.- Recital de Piano y violín 19:00 hrs
       Maestro Ernesto Tarragó

29.- Recital de Violín 19:00 hrs.
       Maestro Mikhail Medvid


JUNIO

Ciclo de conciertos - Fin de Cursos 2011 - 2012

8.- Piano, Música de cámaras y prácticas de acompañamiento 18:00

16.- Piano, Música de cámaras y prácticas de acompañamiento 19:00 hrs.

19.- Recital de Piano 19:00 hrs

20.- Recital de Piano 19:00 hrs.

21.- Recital de Piano 19:00 hrs.

28.- Recital de Piano y Cámaras 19:00 hrs.


Arco Sur #1, Reserva Territorial, Xalapa de Enriquez, Veracruz, C.P. 91070. 
TEL/FAX 2288193648 y 49

domingo, 20 de mayo de 2012

2 libros de CSS: introducción y avanzado

El diseño web puede ocasionar dolores de cabeza para los que somos novatos en ésta área; y es que sin los conocimientos mínimos necesario se pueden complicar cuestiones como un buen formato de texto que encaje perfectamente con el fondo, dar una apariencia profesional o amigable de un sitio; en fin, hacer un sitio visualmente más agradable.
Como la apariencia es un importante aspecto, me busqué en el internet algunas fuentes de información a cerca de CSS "Cascading Style Sheets" y he encontrado 2 libros que me ayudaron en el diseño de un proyecto escolar:

Introducción a CSS : Da una introducción al funcionamiento del CSS, los objetos más comunes sobre los que se trabajan y los atributos que podemos modificar para dar el formato que queramos a nuestro sitio. También nos enseña cosas semi-avanzadas como las clases, las herencias, los "id", tipos de posicionamiento, textos, tablas, imágenes, listas, formularios y demás.

CSS Avanzado: Ya nos da un panorama de todo aquellos que debemos saber para extraer lo máximo del diseño de Hojas de Estilo es Cascada: técnicas imprescindibles, consejos prácticos, selectores, propiedades avanzadas, efectos dinámicos, el reemplazo de CSS por Flash y viceversa e incluso introducción a Frameworks de diseño.

Ambos libros están bajo la licencia de a Creative Commons - Reconocimiento - No Comercial - Sin Obra Derivada 3.0; por lo que son libres de descargarlos sin problema alguno.

Espero y éstos libros les sea de mucha utilidad, que apuesto a que sí.
¡Sigamos picando código!

Agregar Mapa en una Web con solo 1 línea de código

Un saludo, webmasters.
Algo que desde hacía su tiempo se me había escurrido era el poder agregar un mapa del estilo "GoogleMaps" a un sitio web. En internet hay buena documentación al respecto pero nada que me diera el resultado querido, y es que quiero que el mapa sea dinámico, o sea que se posicione automáticamente en la ubicación del usuario que visita la página y, hasta ahora, ningún servicio (al menos gratuito) me lo permitía.

Visitando una página que permite agregar mapas a una web (http://wikimapia.org) noté que el mapa de presentación de la web se posiciona automáticamente en la ubicación del usuario mediante la IP y por medio de parámetros (automáticos) GET en la url, además de que el mapa abarca toda la página.
Siendo así, se me ocurrió que podía poner un iframe de esa página en mi web/blog y entonces se mostraría el mapa de la página en la ubicación del usuario de mi blog.
El código que se puede usar para ésto es:

<iframe allowtransparency="true" width="600" height=600" frameborder='0' src='http://wikimapia.org' ></iframe>


La ubicación del usuario de realiza, como siempre, mediante la IP y un sistema de latitud y altitud. EL único posible inconveniente es si el iFrame es muy pequeño (como 200 X 200) en cuyo caso no se podría apreciar el mapa, de allí en fuera ofrece un buen servicio gratuito :D

He aquí el resultado:

sábado, 12 de mayo de 2012

El bucle FOR de Python


Siempre he dicho que python no sería el mejor lenguaje de programación, pero si es único. Unas de sus más grandes "rarezas" es el bucle 'for' el cual no existe como tal (al menos no como en la mayoría de los lenguajes de programación actuales); el 'for' en Python es un "for ... in".
Para quien no sepa cómo funciona el 'for ... in', éste interactúa con lístas (arreglos) en vez de con una sola variable; su sintaxis dice claramente que "por cada 'elemento' en 'tal lista'" realice cierta operación. Con un ejemplo lo dejaré todo claro:

lista=[1,2,3,4]
for numero in lista:
print numero*numero;

El código anterior nos desplegará el siguiente resultado:

1
4
9
16

Como se puede ver, "lista" es una lísta que contiene los número del 1 al 4; lo que hace el for ... in es "descomponer" la lista en los elementos que la conforman y tratar, en cada iteración, cada elemento como la variable número, y dentro del bloque del bucle imprime el cuadrado de cada número o elemento de la lista (o sea que para la primera iteración 'numero' será igual a 1, para la segunda iteración 'numero' será igual a 2, y así para cada elemento de la lista).

Ésto puede sonar bien en primer orden, pero como todo programador estamos acostumbrados a usar el bucle 'for' de la manera tradicional:

for(i=0;i<n;i++)


Por "desgracia" python no cuenta con esta sintaxis, por lo que inicialmente no podemos declarar un valor inicial, un valor final y un incremento/decremento de una variable con la cual interactuar. Posiblemente más de uno haya sustituido el "for" por un "while" en Python, pero ésto, además de ser poco "robusto" para un programador también consume más recursos que un for. La mejor forma de usar un for para las situaciones a las que estamos acostubrados (como por ejemplo, hacer un a[i] y cosas por el estilo) es usar la función "range()" en python combinada con el "for ... in".
La función range() permite generar una lista que vaya desde el primer número que le indiquemos al segundo. Ésta función se puede trabajar de 3 manera, dependiendo la cantidad de parámetros que le pasemos.

Si le pasamos un sólo parámetro, por ejemplo 4 (range(4)), nos arrojará una lista que empieza con el número 0 y terminará con el número 3, incrementándose cada valor de 1 en uno; o sea que la lista final sería:
[0,1,2,3]

Si le pasamos 2 parámentros, por ejemplo 1 y 4 (range(1,4)), nos arrojará una lista que empieza con el primer parámetro (en este caso 1) y terminará un número antes del segundo parámetro (en este caso 4) incrementándose cada valor de 1 en 1; o sea que la lista final sería:
[1,2,3]

Y por último se le puede enviar 3 parámetro, por ejemplo 0,10,2 (range(0,10,2)); el primer parámetro indica en dónde empezará la lista (0), el segundo en dónde terminará (10,recuerden que se detiene un número anterior a éste) y el tercer número indica el incremento entre cáda número (en éste caso 2); así, la lista final será:
[0,2,4,6,8]

para el bucle for... in podemos usar cualquier forma la función range(), pero la forma que más estamos acostumbrados es el tercero, ya que en éste establecemos un valor inicial, uno final y un incremento.
Para el ejemplo inicial podemos hacer lo siguiente:

for i in range(0,4,1):
print lista[i]*lista[i]

y nos dará el mismo resultado que al principio:

1
4
9
16


Ahora bien, aclaremos una cosa, la función range() nos devuelve una lista con tódos los número que le solicitemos dentro de un rango y a intérvalos definidos; o sea que si escribimos

lista=range(0,1000,1)

Nos devolverá una lista con 1000 número (del 0 al 999) lo cual supone un gran e in-necesario gasto de memoria, cosa muy contraria a los bucles "for" de otros lenguajes los cuales solo manejan 1 valor a la vez... pero tranquilos, no es necesario cambiarse de lenguaje y mucho menos volver a recurrir al bucle "while" para evitar tal gasto de memoria en las ocasiones en donde el bucle puede llegar a ser muy grande ya que para ésto tenemos la función xrange() que está hecha precisamente para bucles (y algunas otras cuestiones que no son necesarias mencionar) ya que no crea realmente una lista, sino que en cada iteración va devolviendo el número necesario. Ésto lo podemos hacer si probamos lo siguiente:


print range(0,10,1)
[0,1,2,3,4,5,6,7,8,9]


print xrange(0,10,1)
xrange(0,10,1)


Lo anterior indica que range() nos devuelve la lista completa con todo y el gasto innecesario que con ello conlleva; en cambio xrange() nos devuelve una función, la cual (aun que no se vea en el intérprete) devuelve en cada iteración el número que corresponde a la posición del rango definido; en pocas palabras podemos hacer lo siguiente:

for i in xrange(0,4,1):
print lista[i]*lista[i]

y nos dará el mismo resultado que al principio:

1
4
9
16


Y todo sin ningún gasto innecesario de memoria; de hecho el consumo de recursos es exactamente el mismo que si se hiciera desde C/C++ ya que el bucle "for" está basado en el de C/C++ y la funcion xrand() se interpreta en python (lo que le da velocidad de respuesta).

Bueno, espero que les sirva bastante ésta información, ya que en muchas ocasiones se ve uno en la necesidad de reemplazar un posible "for" con un "while" declarando anteriormente una variable "i" e incrementándola con cada iteración y cosas por el estilo que, además de gastar más recursos de los necesarios, es muy chocante para el programador manejar.

Sigamos teclenado.