martes, 21 de octubre de 2014

Restricción de Gmail al envio de correos

Nueva restricción por parte de Google en Gmail. Desde al menos el mes pasado (septiembre 2014) se ha restringido la opción de usar los servidores de correo salientes de Google para dar de alta nuevos alias en las cuentas de Gmail.

Puede parecer una tontería, pero a partir de ahora ya no es posible usar Gmail como cliente de cuentas alias o redireccionadas.

Google va redirigiendo cada vez más su mercado de trabajo hacia el sector empresarial y de dispositivos y da un paso más en el continuo cierre de servicios y funcionalidades que viene realizando de manera más agresiva en los últimos dos años.

viernes, 12 de septiembre de 2014

Comparando TinyCC vs Visual C++ 2012 Express vs PicoC vs Otras Máquinas Virtuales

He realizado una prueba de velocidad entre estos diferentes compiladores de C y varias máquinas virtuales con idea de ver en que orden de magnitud se mueve cada uno de los lenguages y plataformas.

El código de prueba son dos for anidados con varias operaciones matemáticas para generar interdependencia en su interior. Es un tanto arbitrario, pero creo que suficiente para comparar la ejecución de código interdependiente.

Respecto a los compiladores (o interpretes) de C, todos ejecutando el mismo código:
  • 1 segundo aproximadamente en promedio TinyCC (tardó 1 segundo en ejecutar la prueba).
  • 1 segundo aprox. Visual C++ (con las opciones por defecto).
  • 0.15 segundos aprox. 6 veces más rápido, Visual C++ con /O2 (optimizar velocidad)
  • 600 segundos aprox. PicoC.

Ahora pasamos a plataformas de máquina virtual, respetando el código al máximo (apenas hizo falta reemplazar las declaraciones de las variables según el lenguaje y los printf por la instrucción adecuada). El resultado:
  • 4 segundos aproximadamente Chrome 35 ejecutando en Javascript estándar.
  • 1.5 segundos aproximadamente Firefox 31.
  • 0.15 segundos aproximadamente Java 1.8 SE 64bits.
  • 1 segundo aproximadamente en C#, Mono 2.0, ejecutandose en Unity 3D.
  • 60 segundos aproximadamente PHP 5.

Sorprende en positivo el rendimiento de Java SE y muy en negativo el rendimiento de PicoC.

sábado, 31 de mayo de 2014

Inestabilidad de Flash en Google Chrome y otros golpes bajos a Java y otros plugins

De un tiempo ha esta parte me ha sorprendido un hecho sorprendente: en el Google Chrome el Flash Player no deja de colgarse.

Por un momento pensé que sería cosa de Adobe, por un pobre mantenimiento del plugin pero cual ha sido mi sorpresa cuando en Firefox, con la misma versión y todo igual estos problemas no se producen. Es un problema reproducible y que ocurre el 100% de las veces al cargarse los reproductores y que deja colgada la pestaña impidiendo navegar y dando una imagen penosa del Flash (más penoso si cabe cuando Chrome supuestamente se encargar de mantener Flash al día).

Y esto se suma a los tumbos que viene dando Oracle respecto a los applets de Java, obligando a todos los desarrolladores a dar explicaciones a clientes descontentos. Todos sabíamos que la obligación de firmar los applets no iba a llevar a ningún lugar.

No es que esté a favor de los plugins de Java o de Flash, de hecho no me gustan, pero no dejo de sentir que todos estos movimientos son chapuzas. Son movimientos necesarios para garantizar la seguridad de los usuarios pero otra solución más eficiente hubiera sido mucho más útil.

En lugar de esto se sucedió una cadena de absurdos: primero fue la obligación de firmar applets incluso sin acceso privilegiado si no querías ver un aviso, luego obligaron a que fuera firmado con certificado. Luego como ya estaba cantado, esa chapuza no llegó y tuvieron que pedir confirmación para todo: los hackers pueden comprar certificados también, es más, seguramente no tengan que convencer a ningún cliente para ello (la medida perjudica más a los desarrolladores honrados que a cualquier otro sector). Luego para ejecutar un applet no firmado había que hacer un cambio en la configuración de windows y ahora finalmente ante la avalancha de quejas directamente prohibieron los applets no firmados. ¿Es que creen que la firma con certificado de entidad autorizada supone alguna diferencia? Como si ahora los usuarios diferenciaran entre los mensajes de un applet que está fabricado por alguien que ha demostrado su identidad. El problema es que los usuarios no leen: quitadles los cuadros modales y que tengan que hacer clic en un checkbox y un enlace dentro del applet para cargarlo y ya veréis como bajan las quejas. Pero no, en lugar de eso PROHIBICIÓN TOTAL de applets no firmados.

Es cierto que son productos privados, y pueden hacer lo que quieran, y no se puede hacer nada, pero eso no quita que que queje en un blog con verborrea a gusto sobre su actitud dictatorial encubierta ;)

¿Qué hacer frente a esto? ¿Hay alguna alternativa?

Pues no sé, yo por ahora ajo y agua.

Si un cliente necesita ejecutar un applet a narices se le pasa el presupuesto de certificado y presupuesto de adaptar el applet como aplicación.

Se le da la alternativa totalmente desaconsejada y chapucera de instalar una versión antigua de Java (y eso cuando no la piden ellos directamente, que tontos tampoco son; al menos se les fuerza a desactivar java para internet en general).

MORALEJA: ¿las medidas de estos señores han conseguido algo? por mi parte me da la sensación de que son medidas que dan una falsa sensación de seguridad, escurren el bulto de la culpa, impiden el correcto funcionamiento y en muchos casos logran el efecto contrario que supuestamente buscan, por lo que tiendo a pensar que lo que quieren es sacarse el soporte a estos productos de encima como puedan... aunque incluso eso lo podrían hacer más elegantemente.

Gracias por nada Oracle, Adobe y Google!

miércoles, 10 de abril de 2013

Apagado de Windows tarda mucho en la pantalla Guardando Configuración

El otro día tenía el problema de que la pantalla Guardando Configuración que se muestra durante el apagado de Windows XP, Vista y otros se prolongaba en el tiempo tardando mucho, minutos, en pasar a los siguiente, Cerrando Windows.

Tras comprobar multitud de cosas, incluyendo:
  • si había procesos perdidos
  • defragmentar el disco duro unas cuantas veces
  • instalar optimizadores
  • etc, etc...
En casi todos los lugares recomendaba una y otra vez esos 3 puntos, cuando me encontré casi de casualidad con un enlace a una utilidad para descargar desde la página de microsoft y tras instalarla ya con pocas esperanzas... bingo... paso de tardar más de 2 minutos a menos de 10 segundos.

UPHClean-Setup.msi en http://www.microsoft.com/es-es/download/details.aspx?id=6676

La utilidad está pensada para asistir en el apagado de Windows... por lo que asumo que fuera cual fuera el problema que tenía yo (seguramente handles abiertos de alguna tarea) seguramente solucione muchos otros casos.

domingo, 7 de abril de 2013

Los problemas de Feedly

Cuanto más uso esta herramienta, menos me convence. Ciertamente es la más cómoda a la hora de leer noticias puesto que apenas requiere esfuerzo o instalaciones y su interfaz es similar a la de Google Reader, incluyendo además algunos "bonus track".

Sin embargo observo varios problemas:
  • en cuanto queremos añadir una fuente nueva empiezan a aparecer problemas.
  • el servicio sigue usando autenticación de Google, es más,
  • lo que es peor accediendo a Google Reader, por lo que no queda claro si Feedly dispone o dispondrá de servidores propios.
Ni que decir tiene que cuando apaguen Google Reader si Feedly no hizo sus deberes se perderán muchisimos datos y el servicio dejará de tener bastante de su utilidad.

Todo esto se sabrá cuando apaguen Reader... esperemos que los de Feedly se pongan las pilas para entonces.

jueves, 14 de marzo de 2013

Muerte de Google Reader. Alternativas a Google Reader.

El fin de Google Reader se aproxima. El 1 de Julio de 2013 se cierra el mejor lector de RSS. Había varios puntos claves, pero para mi lo mejor era su capacidad de recopilar los feeds incluso si no te conectabas cada día. El poder compartir con los amigos y publicar noticias en Twitter y Facebook también estaba bien. Por último el agrupar contenidos era muy útil, pero esta y otras características ya son más comunes entre casi todos los lectores RSS.

Está claro que RSS ya no está de moda: ahora la gente usa Twitter. Yo personalmente -si bien también uso Twitter- sigo prefiriendo RSS por ser más independiente y permitirme hacer lo que realmente quiero: seguir las entradas que publican varias páginas, periodicos, blogs, etc. Además Twitter tiene un fallo muy gordo, y es que no permite organizar bien. Realmente tanto Facebook como Twitter podrían publicar RSS de cada una de sus listas de contenidos pero por motivos monetarios prefieren mantenerse cerrados.

En fin, para todos aquellos que preferían RSS y usaban Google Reader, hay alternativas ahí fuera. Yo por ahora las que mejor me han parecido (aún no es una lista cerrada) son:
Y si disponeis de un servidor web, quizá os interese:
  • http://tt-rss.org/ muy sencillo, e incorpora demonio para escanear las rss incluso sin conectaros.
Hay muchas más alternativas, pero yo creo que estas son las mejores.

miércoles, 13 de marzo de 2013

Calculadora de Google

Una vuelta de rosca más del gigante de internet. Usarlo como buscador es lo normal, pero y si además podemos introducir operaciones matemáticas (incluso conversión de divisas) o busquedas semánticas como el tiempo en madrid, mejor que mejor. Está claro que hace mucho tiempo que Google dejo de ser un simple buscador* para convertirse en mucho más.

Ahora da un paso más y mejora la presentación de muchas de sus búsquedas "inteligentes", entre ellas añade una calculadora en toda regla si realizamos una expresión matemática 5+5 o si buscamos calculadora:


(*) Por ejemplo, algunas cosas curiosas que podíamos buscar con Google:

domingo, 17 de junio de 2012

Llega IPv6, llegan los problemas

Aún no hacían 10 días del lanzamiento "oficial" de IPv6 y empiezan los problemas.

El primer lugar, la penetración de IPv6 es más bien escasa: la mayoría de los servicios de hosting aún no integran la nueva versión de IP en sus redes y según ellos los que lo han hecho han tenido problemas.

Para estos casos está Teredo, sin embargo para los servidores VPS, al menos los basados en OpenVZ habilitar el paquete miredo, el cliente de Teredo para Linux, es toda una odisea.

Por si esto fuera todo, resulta que qmail, uno de los servidores de gestión de correo más conocidos falla como una escopeta de feria en cuanto un dominio activa IPv6...

Todo ello compone un coctel explosivo cuya mecha termina de prender gmail cuando, con toda la razón activa IPv6 en sus servicios de correo... el resultado: el VPS basado en qmail sobre Plesk ya no es capaz de enviar los correos a gmail.

qmail al parecer ya soporta IPv6 pero no es consciente de que el servidor en el que vive no... con lo que poco me importa si soporta o no, o si hace una voltereta, el caso intentar aplicar un ciento de parches infructuosamente, consiguiendo que todo funcionase aún peor (menos mal que apliqué la buena costumbre de hacer copia de seguridad).

La única solución vino de la mano de una alternativa muy sencilla: Plesk integra también postfix, por lo que le doy a un botón en el panel web y cambio el servidor y de repente empieza a funcionar todo.

Así que, moraleja: la única solución es dejar de usar qmail y pasarse a postfix, para ello en el panel Plesk vamos a la pestaña de Servidor, luego a Actualizaciones, entramos y vamos a componentes y wala!!! ahí está: nos deja seleccionar que componente de servidor de correo queremos: postfix o qmail. Le damos y en menos de 5 minutos tenemos todo arreglado.

Me pregunto cual será el siguiente problema que venga de la mano con IPv6, espero que ninguno más...

sábado, 7 de enero de 2012

Ubuntu 11.10... o la actualización que nunca debí hacer

Maldito el día que decidí actualizar!!! según acabó la actualización empezaron los problemas (con 11.04 tuve que cambiar cosas, pero con 11.10 la cuesta se empina más y más!).

Me pregunto si todo esto tendrá que ver con lo que me contaron de que ahora Ubuntu "vende" algunas cosas, vamos, que se ha vuelto más "capitalista" y menos de la comunidad, pero independientemente de eso lo que están haciendo con la distro de linux más popular no tiene nombre!! Pronto habrá que pasarse a Debian si o si...

El caso es que la versión 11.10 ya no sólo carga la nueva interfaz unity por defecto, sino que es que además no incluye gnome. De hecho para conseguir gnome hay que instalar una versión capada. Hay muchas muchas quejas sobre ella, si bien a mi personalmente no me disgusta del todo, aunque me preocupa la línea de evolución, o mejor dicho, involución del sistema.

Tras varios días sufriendo de un ordenador hecho trizas he reunido algo de tiempo para arreglar todo.

Lo primero, instalar el paquete gnome-session-fallback.

Una vez hecho esto nos encontramos con un ordenador sin ningún tipo de aceleración para el escritorio: no entiendo porque han desactivado compiz: ganas de tocar las narices: el caso es que la única alternativa real que he encontrado ha sido ejecutar compiz --replace al principio de cada sesión (se puede lanzar automáticamente).

Para rematar el problema es que compiz por algún motivo deja muerto el sistema de ventanas: no se puede arrastrar ninguna ventana ni nada: de hecho al principio ni siquiera me salían bordes de las ventanas!!

Como primer paso es necesario instalar el gestor de compiz-config que por cierto, hasta esta vez no sabía que se lanzaba usando ccsm XDDDD... debí estar como media hora creyendo que no me funcionaba la instalación.

Al final tras activar window decoration aparecieron las barras, si bien no pude interactuar con las ventanas: no podía moverlas ni redimensionarlas. Era reiniciar la sesión, lanzar compiz --replace y dejaba de funcionar todo!!

Así que dejé el tema y seguí con mi día a día hasta que ayer, dos semanas después, se me dió por volver a ponerme y probar... y funcionó, con lo que apliqué la máxima de "si funciona, no lo toques".

Moraleja: "la nueva ubuntu 11.10 hace aguas, muchas, pronto me migro a Debian!!"

Blusens WebTV

Jojojo... y en la navidad puso Blu:sens su Web:tv a un precio inmejorable, así que me hice con uno.

Señores, este cacharrillo es fenomenal. En resumen es un navegador web + reproductor...

Y que reproductor: ya podemos echarle encima un MKV a super-resolución 1080p (o más... probé uno de 4 mil por 2 mil y tiro fluido XDDD). Sólo mi torre negra con procesador de última generación es capaz de reproducir ese video fluidamente... con eso lo digo todo.

Y como navegador usa un webkit, nada de navegadores tuneados ni gaitas: la compatibilidad está garantizada y desarrollar aplicaciones es tan fácil como hacer una página web. Si queremos que se integre con el mando, tan sólo tendremos que hacer que lea eventos del teclado y opcionalmente podemos usar un api javascript para extender las posibilidades.

Muy recomendable y sencillo, y lo mejor, no quedará desfasado ya que todo está basado en html.

Tutorial: guardar un stream http con Wireshark

Para todos aquellos que querais obtener un stream de datos con Wireshark, este tutorial espero que os ayude:

A mi personalmente me resulta útil para depurar recursos generados dinámicamente en mis páginas: podemos guardarlos a disco y ver que está mal para no andar a dar palos de ciego, si bien variando ligeramente los pasos podemos estudiar un sinfin de protocolos por si teneis problemas implementándolos.

El proceso es:

1) Arrancamos Wireshark con los parámetros de captura que nos interesan: yo optaría por unos relativamente laxos para que capturemos todos los datos necesarios. Es importante arrancar la captura antes de hacer la petición y pararla después de que esta halla terminado. Cuantos menos datos estemos transfiriendo o recibiendo de la red, mejor, así que es mejor reducir la actividad de red de nuestro equipo, y quitar la opción "promiscua".

2) Buscamos la petición, para ello lo ideal es filtrar con las cadenas:

http.request.method == "GET"

o bien

http.request.method == "POST"

3) Una vez que hemos localizado la petición pulsamos botón derecho y luego escogemos "Follow TCP Stream". Esto abrirá una nueva ventana.

4) Por último escogemos en lugar de entire conversation, sólo la parte de la recepción (habitualmente será la que más bytes tenga).

5) Escogemos RAW y pulsamos Save As

6) Si queremos guardar otro stream podemos pulsar Filter Out This Stream, que nos ayudará a encontrar otros, repitiendo los pasos desde el 2 / 3 en adelante, si no vamos a procesar el fichero que hemos guardado.

6) Abrimos el fichero con un editor que soporte ficheros binarios, por ejemplo con Ultraedit.

7) Ahora ya sólo queda comprender un poco el protocolo HTTP: si la respuesta es única (propiedad Connection a close) basta con que busquemos el final de la cabecera de la respuesta HTTP, o sea \n\r\n\r, esto es 0x0D 0x0A 0x0D 0x0A y borramos toda la cabecera, incluyendo estos 4 carácteres, guardamos y ya tenemos el fichero en la mayoría de las ocasiones.

8) En caso contrario debemos jugar con los content-length, aunque independientemente del caso, es siempre bueno anotarlos en todo caso, ya que podría darse el caso de haber datos extra por algún lado. Para ello buscamos algo tal que Content-Length: 1799788 por ejemplo.

Eso es todo. Normalmente que conste que los datos sobrantes al final de un fichero suelen no molestar, pero si tenemos problemas, siempre podemos intentar pegar el tijeretazo.

Como arreglar Tamper Data para los nuevos Firefox

Las nuevas versiones de Firefox usan un diseño mucho más estilizado, pero para aquellos que usan la extensión Tamper Data ( https://addons.mozilla.org/es-Es/firefox/addon/tamper-data/ ) se pierde una manera rápida de acceder al mismo.

Tamper Data es uno de los sniffers más útiles que he visto nunca (no reemplaza a Wireshark, pero es mucho más rápido y cómodo de usar).

Para lograr solucionar todo este lio ha surgido otra extensión llamada Tamper Data Icon ( https://addons.mozilla.org/es-Es/firefox/addon/tamper-data-icon/ ) que nos permite agregar un icono de acceso a Tamper Data.

El problema es que a su vez Tamper Data Icon no lo suelen actualizar muy a menudo, por lo que cada vez que sale una nueva versión de Firefox, y más que ahora parece que Mozilla lleva un cohete en el culo, Tamper Data Icon deja de funcionar. Para solucionarlo debemos realizar 4 pasos:

1) Descargar el xpi pulsando el botón derecho y guardar como...
2) Renombrar tamper_data_icon-1.0-fx.xpi a tamper_data_icon-1.0-fx.zip y abrirlo con nuestro compresor preferido
3) Editar el fichero install.rdf y cambiar la línea donde aparece para aumentar el número de versión.
4) Volver a renombrar a .xpi e instalar la extensión (o abrimos el fichero o lo arrastramos encima de Firefox).

En mi caso venía 5.0 y he puesto 99.0

No es que sea muy seguro poner 99, ya que la extensión podría volverse incompatible, pero dado que la extensión del icono es muy sencilla y que Mozilla saca actualizaciones continuamente nos evitamos un incordio más... y además no creo que esto ocurra pronto. Además siempre podemos desinstalarla si algún día esto ocurriera :)

Espero que esto sea de ayuda.

sábado, 18 de diciembre de 2010

¿Cómo ocultar "Gustos e Intereses" Facebook?

Nuevo perfil, nueva manera:
  1. Abrimos el desplegable haciendo clic en "Cuenta" (esquina superior derecha).
  2. Escogemos "Configuración de la privacidad".
  3. El primer punto se llama "Conectar en Facebook", si os fijais hay un enlace:
  4. Hacemos clic en el enlace "Ver configuración".
  5. Ya está, el último punto es "Ver tus gustos, actividades y otras conexiones", ajustamos su valor a "Sólo mis amigos", "Amigos de amigos" ó "Personalizar" y listo.
Posiblemente el hecho de que esta sección tengo menos visibilidad se debe a que afecta al funcionamiento global de Facebook como herramienta de interconexión y prospección.

En todo caso los ajustes de privacidad realmente importantes son los de "Compartir en Facebook" y esos los han mejorado facilitando la gestión para personas inexpertas y además ahora nos permiten personalizar cada ajuste permitiendo filtrar por personas.

sábado, 1 de mayo de 2010

HTML 5

Nacio como cosas sin sentido y filosofías locas de tres soñadores: "la web semántica"...

Creció a cachos... un poco de pie, algo de mano...

Ahora que está tomando forma, HTML 5 y se prepara para pegar fuerte, muy fuerte... en breve cosas como flash temblarán e irán preparando su tumba ante la sombra de algo que se está hirguiendo muy por encima de ellos.

En todo caso la verdad es algo truculenta... http://baquia.com/actualidad/noticias/16286/steve-jobs-quiere-dar-la-puntilla-a-flash ya que la realidad es que HTML 5 fue una "copia" de gran parte de flash hacia el mundo HTML... recuerda sospechosamente a flash en muchas de sus características. Lo perdonamos porque HTML 5 no solo ha copiado, sino que ha innovado: ha sabido vencer las limitaciones de flash usando una interesante combinación de virtualización en javascript con elementos nativos como los reproductores de vídeo...

Y eso combinado con las recientes carreras "javascript" que está haciendo que los interpretes js se hayan convertido en compiladores JIT cada vez más rápidos cierra un circulo que se cierne sobre todo internet.

En breve el navegador podrá ser --aún más-- el único elemento de un sistema: hoy en día un sistema operativo compuesto solamente por un navegador ya no asusta a nadie y de hecho ya hay ejemplos prácticos.

Para terminar esta apisonadora, la adición de OpenGL a través de WebGL a la palestra completando lo poco que antes faltaba a la web y la está lanzando a una nueva dimensión progresivamente: basta ver http://www.youtube.com/watch?v=fyfu4OwjUEI&feature=player_embedded | http://code.google.com/p/quake2-gwt-port/, y por si fuera poco ahora hay más y más elementos controlados por javascript, por ejemplo http://earth-api-samples.googlecode.com/svn/trunk/demogallery.html (basta darse un paseo por las APIs que saca Google día a dia).

Y esto es el futuro, pero también el presente: la mayoría de los navegadores AAA soportan ya HTML 5 y los que no en breve lo harán. Las versiones en desarrollo dev de los navegadores soportan ya casi todo el estándar... en breve pasarán a las versiones estables.

miércoles, 17 de marzo de 2010

PHPsh: shell de PHP

PHPsh es una herramienta útil para poder probar al vuelo expresiones en PHP sobre un shell que nos devuelve interactivamente el resultado de nuestras operaciones.

Lo mejor de todo es que no ocupa nada, no necesita nada más que PHP y es compatible con casi todos los sistemas operativos, ya que incluye versión para Windows y para Linux y otros sistemas basados en Unix ó Posix.

Además, es gratuito.

Información y descargas en http://iagofg.com/phpsh.htm

sábado, 2 de enero de 2010

Tradiciones de Fin de Año en el mundo

La fiesta de Fin de año o Nochevieja es un acontecimiento en todo el mundo. Desde Rusia a Brasil pasando por Rumanía , Argentina, Italia y muchos otros países se hacen fiestas multitudinarias o privadas con diferentes tradiciones según el país.

En algunas culturas y religiones se lleva otra cuenta de los años tal como en la cultura china, en general, la fecha de fin de año es muy popular en el mundo.

Tarde o temprano, todos los pueblos del mundo se dieron cuenta de que, trascurrido cierto tiempo, las estaciones solares repetían su cauce luminoso. Los cultivos volvían a crecer y las lluvias retornaban para regar las nuevas semillas. Así, el hombre fue constatando el eterno retorno hacia el punto inicial.

Hace 4000 años los babilonios vieron en esta repetición de las estaciones un motivo digno de celebrarse e instauraron un ciclo festivo que dejaría corta la juerga más movida de nuestra época: eran 11 días de celebración, que comenzaban cuando la primavera describía sus primeros trazos entre los jardines colgantes de Babilonia.

Los egipcios también recibían con algarabía las señales que preludiaban el nuevo año. Su rostro se tornaba festivo cuando llegaba el ansiado momento en que el río Nilo empezaba a crecer y el caudal se hacía propicio para la siembra. Entonces, la tierra era labrada con confianza en los tiempos venideros.

Desde siempre, el nuevo año ha significado el festejo de un triunfo inexistente, una victoria que se desea pero aún no ha ocurrido, un elogio a la esperanza que se renueva cada 365 días.

En las diferentes culturas de todos los tiempos los cambios de ciclo han llevado implícitos ritos que atraen salud, amor y dinero, los tres pilares básicos de la felicidad del hombre. Por eso, no es extraño encontrar ritos ancestrales, propios de cada cultura y pueblo, que busquen la felicidad, el éxito y la abundancia.

Desde los inicios del Imperio Romano, enero estaba dedicado al dios bifronte Janus, que mira delante y detrás: al año que se va y al principio del que viene, por eso le representaban con dos rostros, uno barbudo y viejo y el otro jovencito. Los romanos invitaban a comer a los amigos y se intercambiaban miel con dátiles e higos para que pasase el sabor de las cosas y que el año que empezase fuese dulce. Esta vieja costumbre romana fue poco a poco entrando en Europa, donde con la misma finalidad venturosa comenzaron a ofrecerse lentejas, de las que se dice que propician la prosperidad económica del año que empieza. En la Edad Media la Iglesia trató de oponerse a las viejas costumbres, pero no consiguió extirpar la atmósfera disipada de la noche de San Silvestre, que se mantuvo como la última isla pagana de las doce noches navideñas (las comprendidas entre la Navidad y la Epifanía), que la Iglesia consideraba como periodo de renovación para mejorar el año venidero. La cena de Nochevieja, el 31 de diciembre, empezó a convertirse en una festividad de moda desde principios del siglo XX. A diferencia de la cena de Nochebuena, se trata de un rito de carácter público que se celebra entre amigos, en casa de alguno de ellos o en algún establecimiento hostelero.



En Alemania

Allí desafían al destino mediante la “ceremonia” del bleiglessen. Los teutones aprovechan la última noche del año para predecir el futuro. Este ritual consiste en develar los misterios del futuro con una barra de plomo. El plomo se pasa por una soldadora: funden plomo a la luz de una vela. Una vez derretido, en una cuchara, las gotas plateadas se vierten a una cazuela con agua cuando el alba empieza a despuntar. Al entrar en contacto con ésta el plomo adquiere formas caprichosas que -con una buena dosis de imaginación germánica- pueden predecir lo que depara el mañana. El plomo se vende con una lista de interpretaciones: los trozos parecidos a un puño son un corazón y garantizan buena suerte en el amor, las flores indican nuevas amistades. Es como leer los posos del café moca. Esta práctica adivinatoria ya la practicaban los romanos, expertos en fundir metales.

El protagonista en Alemania es San Silvestre. En su honor, corre la bebida, y se queman castillos de fuego para ahuyentar a los espíritus malignos. Después salen a celebrar el fin de año en sus respectivos cotillones, en esto la tradición es muy parecida a la europea.



En Argentina

La ciudad de la Plata vista desde el cielo es una gran falla la noche del 31. A las once de la noche los vecinos de los barrios de Ensenada y Berisso queman los momos, muñecos de papel maché muy parecidos a los ninots valencianos: entre grupos de jóvenes y amigos compiten por crear el mejor muñeco con trapos, papel de periódico, armazón de hierro y madera. Crear el mejor muñeco, el más grande y vistoso para luego quemarlo. Es como un rito de purificación para celebrar el año que se agota, y se quema con todo lo malo. Esta tradición se ha ido haciendo cada día más popular en Argentina, se acompaña con fuegos artificiales, tracas y cohetes expresión de la alegría por el nuevo año.

Es su manera de desprenderse de lo malo ocurrido y dar la bienvenida al nuevo año.



En Bahamas

La fiesta del Junkanoo se romonta a los siglos XVI o XVII y tiene lugar en honor a John Canoe. Este propietario de plantaciones era bondadoso y permitía a sus esclavos tomarse algunos días para la Navidad. Ellos festejaban con danza y música africanas. Esta celebración hoy en día se ha convertido en un gran desfile formal y organizado, con disfraces sofisticados y músicas con mucho ritmo. Se realiza un cortejo de bailarines enmascarados en trajes coloridos y luminosos. Por grupo, los participantes eligen un tema y confeccionan sus trajes en función del tema retenido. Pero un solo grupo gana y es premiado al final de la ceremonia.



En Brasil

Se vive intensamente la fiesta de fin de año. Brasil posee ritos preciosos ligados al mar. El cielo se ilumina con multitud de fuegos artificiales.

Umbanda es una religión practicada en Brasil, fruto de una mezcla de ritos africanos y que genera la fiesta de Iemanja. Las playas se llenan de gente y los cantos religiosos inician la ceremonia en honor a Iemanja. Incluso los que viven retirados en el campo viajan hacia la costa para realizar ofrendas al mar, que la mayoría de las veces son flores en pequeños barcos de madera. “Las filhas do santo” -sacerdotisas africanas- encienden velas y lanzan al mar pequeños barquitos llenos de flores y regalos para que las olas se lo lleven, si es así se considera un buen presagio. Los participantes llevan trajes de colores diferentes cada año (en función del santo que "gobernará" durante esa nueva etapa), bailan y cantan. Le rezan a la santa y piden deseos.



En Escocia

Los escoceses festejanen el Hogmanay. El procedimiento es sencillo: se busca un barril de madera, se le prende fuego y se lo pone a rodar por las calles. Según dicen, es para permitir el paso del nuevo año.

Miles de personas participan en desfiles de antorchas, organizan juegos de luces y pirotecnia en el casco antiguo e inundan las calles de mercadillos y bailes celtas con Kilt.

Además, después de medianoche, llega el momento de presentar su "primer pie": a esa hora van a ver a sus allegados para desearles feliz año nuevo y les ofrecen un trago de whisky, un trozo de carbón y un bizcocho de avena con pasas. Todo eso da buena suerte: los habitantes de Escocia esperan ansiosos a la primera persona que ingrese al hogar. ¿Para qué? Resulta que los rasgos de el individuo determinan el curso de los días futuros. Los más viejos se quedan y esperan que el "primer pie": un moreno pintón (de cabello negro) y bien plantado (una persona bella y alta) es símbolo de buenos augurios. Pero una mujer pálida traerá mala suerte durante todo el año entrante.



En España

La tradición de despedir con uvas el año parece ser que data de 1909; el comienzo del año se festeja con la tradición de las 12 uvas: en el sitio que ocupa cada comensal se coloca previamente un pequeño frutero con 12 uvas y, de acuerdo con el ritual, se debe comer una uva por cada una de las 12 campanadas del reloj. El significado de este ritual se relaciona con las aspiraciones y anhelos de cada participante y con el deseo expreso de que se conviertan en realidad. A continuación, se sigue con costumbres más habituales: comienzan los brindis, se exponen los buenos propósitos de alcanzar alguna meta específica hasta que, entonces sí, se disfruta de la cena de fin de año. Aflora así la añoranza de un año que termina y la esperanza de alcanzar mayor éxito durante el año que comienza.



En los Estados Unidos

La fiesta de fin de año se celebra con muchas fiestas de todo tipo, privadas y multitudinarias. En Estados Unidos las fiestas de Navidad son muy populares. Recibir el año nuevo en la avenida de Times Square es una tradición clásica para los neoyorkinos.



En Francia

La Nochevieja francesa es tan simple como estas dos cosas: Uvas y jolgorio. Como en España.



En Inglaterra

En la parte más poblada del Reino Unido, los festejos se reducen al 31 de diciembre. Esa noche se cuentan los últimos diez segundos del año y cantan Auld Lang Syne mientras brindan con champán. Es una canción del siglo XVIII del poeta Robert Burns, que se utiliza para despedir el año, despedirse de alguien cuando emprende un largo viaje, o despedir a un difunto en su funeral. Su estribillo dice: ¿Deberían ser olvidados los viejos amigos y los viejos tiempos? Por los viejos tiempos, amigo mío, por los viejos tiempos. ¡Tomaremos una copa de afecto por los viejos tiempos!



En Italia

Los italianos aprovechan la Nochevieja para propiciar suerte en el amor con lencería sexy de color rojo. Regalar lencería roja y arrojar trastos viejos por las ventanas como símbolo de un pasado finito. Se deshacen de ropa y muebles viejos para dar cabida a lo nuevo: sobre todo en Nápoles y Roma, donde tuvieron que poner freno al ímpetu de lanzar trastos por la ventana.

En la Nochevieja de Italia las lentejas son las protagonistas para atraer abundancia en el año nuevo.



En Japón

Las fiestas de fin de año duran nada menos que 15 dias, en los que escuchan 108 campanadas equivalentes a los valores negativos que acarreamos los humanos y que con las campanadas se olvidan. Comen también una sopa tradicional con fideos y a continuación se dirigen hacia el templo budista a pedir buena suerte para el año que empieza. Se celebra asi el año recién nacido. Después de dirigirse al templo, beben sake mientras visitan a los amigos para concentrarse después en otra comida especial de año nuevo.

La comida más importante dentro de las celebraciones de fin de año la realizan el dia 15 de enero.



En Polonia

Los polacos van a la zaga en fetichismo festivo port Nochevieja. No sólo llevan ropa interior roja, además esconden en su monedero las escamas del pescado que cenan en Nochebuena para asegurar éxito profesional el resto del año. Otra costumbre, muy sana, es pagar todas las deudas y así encarar el año entrante libre de ataduras. Así mismo no dudan de desprenderse de cosas viejas. Los últimos días del año hacen una buena limpieza de armario.



En Rusia

La Navidad como fiesta cristiana no se celebra de forma oficial, en cambio “La fiesta de fin de año” es el acontecimiento más esperado del año para los rusos durante el día 1 y 2 del año se celebran fiestas y se hacen regalos entre amigos y familiares. El regalo es una costumbre muy arraigada en Rusia.



En Rumanía

Las muchachas casaderas que aún no tiene pareja suelen caminar hacia un pozo, encienden una vela y miran hacia abajo. Se dice el reflejo de la llama dibujará en las aguas profundas del pozo la cara de su futuro esposo. Las que se quedan en sus casas toman una rama de albahaca y la colocan bajo la almohada: el sueño de esa noche tendrá como protagonista al hombre que las espera.



En Venezuela

La espera de fin de año es especial en Venezuela. Antes que den las 12, las familias se reúnen en sus hogares y preparan la hallaca, una especie de humita exuberante, repleta de condimentos y relleno especial, que se regala a los amigos durante la noche de víspera de Año Nuevo. Es una forma de reafirmar la amistad y de desear buena suerte para el próximo año.

sábado, 16 de mayo de 2009

Ejecutar Need for Speed 2000 en Windows XP y posteriores

El otro día decidí desempolvar el NFS 2000 Porsche para recordar viejos tiempos por la Autobahn a 300 Kilometros por hora y me encontré con el problema de que en Windows XP el juego no cargaba.

La solución la encontré de casualidad tras probar sin éxito algunas posibilidades: simplemente hay que ejecutarlo en modo compatibilidad.

Para ello hacemos clic con el botón derecho encima del ejecutable del juego (porsche.exe) y seleccionamos Propiedades, luego entramos en la muesca Compatibilidad y activamos ejecutar en modo compatibilidad, a mi me ha funcionado con compatibilidad con Windows 98/ME.

Wala!! listo... en el menú va un tanto lento en algunas configuraciones, pero una vez cargada la carrera va como un rayo.

El compilador que se auto-compile buen compilador será

En estos tiempos de avances rápidos hay ciertas cosas que van logrando ventaja por varias razones. Últimamente por ejemplo asistimos a una explosión del uso del Javascript y derivados como el Actionscript, y otros como el PHP o compiladores como el TinyCC.

Todos ellos empiezan a mostrar elementos comunes que van desde una mayor comodidad a la hora de trabajar con estructuras de datos hasta compilación dinámica.

Y es esto lo que me interesa: a lo largo del tiempo esta característica ha sido vista como un elemento de no seriedad en un lenguaje, pero en los últimos tiempos estamos asistiendo a que código óptimo sea capaz de auto-compilar código de su mismo tipo: compilación dinámica y JIT.

Proyectos como AS3eval ó TinyCC, incluso native-client, que son compiladores al vuelo para usar dentro del propio código, o V8 y TraceMonkey, que son implementaciones de Javascript que incluyen la función eval capaz de cargar código al vuelo marcan la diferencia respecto a una generación de compiladores más bien poco flexibles.

Con el tiempo se va demostrando que una característica que a priori se consideraba insegura basta con ser rodeada de un sand-box "suficiente" para garantizar la integridad del sistema, o poco eficiente, se va rodeando de compiladores dinámicos con más potencia.

Otros movimientos abogan por la construcción de un sistema compilación de lenguajes universal que proporcione las mismas facilidades y flexibilidad en los diferentes lenguajes y la posibilidad de exportar código JIT. Al fin y al cabo la mayoría de los lenguajes se diferencian en su sintaxis más que ninguna otra cosa. Intentos de proporcionar herramientas que permitan fusionar diferentes módulos en diferentes lenguajes en una sola aplicación final ya ha habido bastantes con más o menos acierto.

Espero que esto sea el fin de los teóricos de la informática que se dedican a proclamar que para conseguir seguridad e integridad en los sistemas es necesario reducir la libertad de movimiento, que es lo más fácil y trivial.

La seguridad debería proporcionarse incluyendo libertad de hacer lo que se quiera dentro de un sand-box establecido en la configuración del sistema, e incluso debe proporcionarse un método para, en aquellos casos en que sea deseable, superar de manera controlada, con conocimiento del usuario ó administrador las barreras que la propia seguridad del sand-box nos impone para poder realizar labores administrativas mediante solicitud de privilegios.

Fuentes:
http://www.joangarnet.com/blog/?p=422
http://eval.hurlant.com/
http://tinycc.org/
http://bellard.org/tcc/

jueves, 23 de abril de 2009

Colocar un menú que siga al scroll con Javascript

Siguiendo con la anterior entrada, hay un "plus" de las propiedades ya expuestas, aplicadas al objeto body...

Si bien en todos los navegadores salvo IE es posible colocar un elemento "atado" a la posición superior del navegador, sin importar lo que movamos el scroll con position:fixed este estilo es completamente ignorado en IE, por lo que si queremos una compatibilidad total debemos usar, una vez más, Javascript.

En primer lugar hay que obtener una referencia a body. Para ello a partir de cualquier referencia de elemento obtenida con getElementById realizamos elemento1.offsetParent y esto nos devolverá una referencia al body. A continuación dispondremos de estas propiedades:
  • body.scrollLeft que nos devolverá la posición izquierda del área visible de scroll.
  • body.scrollTop que nos devolverá la posición superior del área visible de scroll.
  • body.scrollWidth que nos devolverá el ancho total de la zona scroll.
  • body.scrollHeight que nos devolverá el alto total de la zona scroll.
  • body.offsetWidth que nos devoverá el ancho total del viewport del body, incluyendo el scroll vertical.
  • body.offsetHeight que nos devolverá el alto total del viewport del body incluyendo el scroll horizontal.
Basta con coger el elemento elemento1 y cargar body.scrollTop en su style.top así:
  • elemento1.style.top=body.scrollTop.toString()+"px";
Ejecutamos periodicamente esa orden y ya tenemos un menú atado a la parte superior del viewport del navegador compatible con cualquier browser.

Feedback de posición y tamaño en Javascript

Uno de los problemas de maquetar con position:absolute es que si tenemos elementos flexibles no será fácil hacer que nuestro diseño se ajuste a ellos y tendremos que optar por la maquetación con float:left, float:right y clear:both.

Una manera alternativa de poder maquetar con position:absolute, siempre que no tengamos que cumplir las normas WAI, es utilizar javascript para recolocar los elementos. Las características que voy a explicar, por otro lado, son perfectamente compatibles con todos los navegadores de PC y gran parte de los navegadores de dispositivos portátiles, siempre que tengamos soporte para Javascript activado.

Una vez hemos colocado un elemento con position:absolute a priori será muy dificil -al menos hasta donde llega lo que he visto por internet- obtener el alto si sólo hemos prefijado el ancho. Es posible, mediante técnicas, colocar un bloque justo a continuación del bloque position:absolute, pero para ello hay que cumplir una serie de requisitos que hacen impracticable la solución en la mayoría de los casos.

Pero gracias a varias propiedades accesibles desde Javascript podremos obtener el alto una vez inyectado el contenido dinámico, sin problemas y -por fin- ajustar el resto de los bloques de la web a estas nuevas dimensiones.

El primer paso es obtener la referencia al bloque que queremos, para ello usaremos:
  • var elemento1 = document.getElementById("id_del_bloque");
A continuación, si el bloque es un div (y en otros casos también) dispondremos de las propiedades offset, incluso para elementos con posicionamiento float, relativo o sin position, concretamente:
  • elemento1.offsetLeft nos devolverá la posición izquierda dentro del canvas de la página en píxeles.
  • elemento1.offsetTop nos devolverá la posición superior.
  • elemento1.offsetWidth nos dará el ancho, y, por fin,
  • elemento1.offsetHeight nos devolverá el alto, una vez tenido en cuenta el contenido.
Con elemento1.offsetHeight+elemento1.offsetTop ya podremos obtener un valor para inyectar, una vez hechos los cálculos oportunos (teniendo en cuenta la posición del padre, si lo hay) en elemento2.style.top, donde elemento2 se obtiene con document.getElementById igual que la referencia a elemento1.

Estas propiedades son compatibles con IE, Firefox, Safari, Chrome, Opera y otros muchos navegadores.

miércoles, 22 de abril de 2009

Programación funcional con ANSI-C

Últimamente parece que se está poniendo de moda la programación funcional, sobre todo desde que por un lado los procesadores multi-threading están a la orden del día y desde que C# lo soporta "oficialmente".

Hace mucho no obstante que es posible usar programación funcional, incluso antes de que ningún lenguaje funcional naciera, C ya soportaba callbacks, con los que se podían llegar a hacer cosas similares a las que hoy en día es el pan de cada día en la programación funcional: las funciones lambda.

Supongo que muchos ya conocereis su existencia y cómo usarlas, pero por si acaso no es así os dejo aquí un código de ejemplo que usé de pruebas en su día:

#include

typedef int (*operation__prototype) (int, int);
typedef void (*callback__prototype) (int);

int add__implementation(int input1, int input2) {
return input1+input2;
}
int mul__implementation(int input1, int input2) {
return input1*input2;
}
void callback__implementation(int result) {
printf("[Operation done! callback called with result: %d]\n", result);
}

int operation(int input1, int input2, operation__prototype what_operation, callback__prototype what_callback) {
int retv;
retv=what_operation(input1, input2);
what_callback(retv);
return retv;
}

int option1(int arg1, int arg2) {
operation__prototype add_proc = add__implementation;
operation__prototype mul_proc = mul__implementation;
callback__prototype callback_proc = callback__implementation;
printf(
"[Hello world, result of operation ADD is %d.]\n\n",
operation(arg1, arg2, add_proc, callback_proc)
);
printf(
"[Hello world, result of operation MUL is %d.]\n\n",
operation(arg1, arg2, mul_proc, callback_proc)
);
}

int option2(int arg1, int arg2) {
printf(
"[Hello world, result of operation ADD is %d.]\n\n",
operation(arg1, arg2, add__implementation, callback__implementation)
);
printf(
"[Hello world, result of operation MUL is %d.]\n\n",
operation(arg1, arg2, mul__implementation, callback__implementation)
);
}

int main(int argc,char** argv) {
int arg1=4;
int arg2=5;
//printf("[$argc = %d]\n",argc);
//if (argc>=1) { printf("[$0 = %s]\n", argv[0]); }
if (argc<3) {
printf("%s: usage %s value1 value2\n", argv[0], argv[0]); return 0;
}
if (argc>=2) {
printf("[value1 = %s]\n", argv[1]); arg1=atoi(argv[1]);
}
if (argc>=3) {
printf("[value2 = %s]\n", argv[2]); arg2=atoi(argv[2]);
}
printf("\n");
return option2(arg1,arg2);
}

domingo, 8 de marzo de 2009

100000 euros por una aplicación web

A través de Barrapunto: en http://www.galiciapms.eu/ que la Consellería de Innovación e Industria ha destinado 100.000 euros al desarrollo de una aplicación para elaborar presupuestos, por parte de Ardinova Consulting S.L. de A Coruña, orientada al sector de la carpintería metálica llamada Orzametal (que es de libre descarga desde GaliciaPMS, o desde la página http://www.orzametal.eu/).

El detalle es que la aplicación en cuestión es un tanto "descafeinada" incluso si su presupuesto fuera una décima parte del que es... la aplicación en cuestión consiste en una serie de formularios montados sobre el framework Symphony (lo que aligera más el trabajo y me hace dudar sobre la afirmación de que sea "100% galega", quizás "10% galega" sería más apropiado). Los formularios apenas dan funcionalidad de añadir, listar y gestionar mínimamente una serie de tablas de una base de datos.

Fuentes:
http://barrapunto.com/
http://www.conselleriaiei.org/ga/web/notic.php?ide=1815&pag=0
http://elprogreso.galiciae.com/nova/25088.html