Archivo de la categoría Programación

Portabilidad



Como excusa para revisar los progresos de los snapshots diarios (27 MB en formato TAR.BZ2 vía FTP), decidí unificar los fuentes de 100 FPS en un PC (16 bits) y 500 FPS en un PC, para mostrar el funcionamiento del preprocesador de C, de cara a mantener la portabilidad entre plataformas.

El artículo pretendía explicar el uso de #define, #ifdef/#if defined, pero incitado de nuevo por los poderes ocultos de Watcom, me dediqué a ver hasta cuánto podía mejorar el original, sin necesidad de usar ensamblador. ¡Qué tiempos con el #pragma aux!

Lo primero que hice fue sustituir las llamadas a kbhit y getch, por una implementación directa basada en los servicios de teclado de la BIOS.…

Continuar leyendo...

Facebook HipHop



Hip Hop es la herramienta desarrollada por Facebook que permite ejecutar PHP como binarios nativos de la plataforma. Las versiones iniciales se basaban en transformar una aplicación completa PHP a un binario nativo, mientras que las siguientes permitían convertir un único archivo PHP y sus dependencias a C++, y compilarlo.

Él último enfoque es HHVM, que funciona como el intérprete de bytecode de PHP, pero que es capaz de compilar Just In Time (JIT) ese bytecode a código nativo en memoria. El código nativo generado queda cacheado en una base de datos SQLite, de manera que si se vuelve a solicitar, no es necesario volver a compilarlo.…

Continuar leyendo...

Simulador de Casio F-91W en HTML



Hace casi 3 años ya de Simulador de Casio W-59 en Flash, llevaba un año o así dándole vueltas a programar un simulador, que además incluyera la funcionalidad del reloj.

Me puse manos a la obra, y tras cuatro días de trabajo, y más de 1000 lineas de código, finalmente os puedo presentar Simulador de Casio F-91W en HTML. Además de cambiar el modelo de reloj de un W-59 a un F-91W-1YEF, que no obstante comparten el módulo 593, incluye bastantes novedades en base a mi experiencia anterior.

Obviamente, y al dominar mucho más la plataforma, hay algunos refinamientos muy interesantes, como el uso de requestAnimationFrame en el caso de estar disponible, efectos CSS, manejo de eventos independientemente del navegador (tanto para dispositivos táctiles, como de escritorio o versiones antiguas de Internet Explorer), etc.…

Continuar leyendo...

Conversiones peligrosas en MySQL



La informática demuestra que por más tiempo que llevemos, siempre nos encontraremos cosas que nos puedan sorprender, como por ejemplo el rendimiento de adición de elementos a un array en PHP. Hoy os traigo otra sorpresa, que tal vez sea menos agradable.

Tradicionalmente se ha recomendado en MySQL, forzar los parámetros numéricos a cadena dentro de las consultas, para evitar errores de tipo, y que por tanto fallen las queries.

Así por ejemplo, en vez de escribir:

SELECT * FROM t_mstr_agenda WHERE agenda_id=47

Escribíamos:

SELECT * FROM t_mstr_agenda WHERE agenda_id='47'

Cuando por el motivo que sea, ese 47 ya no es un numérico, quedamos protegidos del error, no retornándose ningún registro:

SELECT * FROM t_mstr_agenda WHERE agenda_id='ABC'

Lamentablemente si ese string, es convertible, aunque sea parcialmente a un numérico, MySQL efectuará directamente la conversión, reportando la advertencia query – Error Code 1292 – Truncated incorrect DOUBLE value:

SELECT * FROM t_mstr_agenda WHERE agenda_id='1-5W38'

No sería nada grave, si no fuera porque PHP no nos informará de esa advertencia, y transformará la consulta anterior, convertida directamente a numérico:

SELECT * FROM t_mstr_agenda WHERE agenda_id='1'

Es decir, estamos pidiendo un registro con identificador 1-5W38, que no debería existir, pero él nos está devolviendo el que corresponde a 1.…

Continuar leyendo...

Rendimiento de adición de elementos a un array en PHP



Cuando tenemos que añadir elementos a un array en PHP, al igual que en otros lenguajes, hay muchas formas de hacerlo. En mi caso utilizaba el acceso directamente por índice, que para bucles triviales era muy conveniente (opción 2); o bien array_push, muy efectivo si nos queríamos ahorrar el índice, o si era necesario agregar más de un elemento a la vez.

Sin embargo, resulta sorprendente que no conociera la construcción $array[] =, que automáticamente mete elementos al final del arreglo, y que se encuentra incluso documentada como mejor candidato a array_push al agregar solamente un elemento.…

Continuar leyendo...

¿Qué fue de… en la informática?



Los que llevamos tiempo en el apasionante mundo de la informática, hemos tenido la suerte de ser participantes de primera linea en sus numerosas revoluciones. Pero también hemos podido ser testigos de grandes cambios, que luego no lo fueron tanto.

Voy a haceros memoria sobre algunas tecnologías, que prometían ser un nuevo paradigma, y que a día de hoy, en un profundo declive, se han extinguido, integrado con otras, o pasan sus días sin pena ni gloria.

Sistemas expertos
Los sistemas expertos son llamados así porque emulan el razonamiento de un experto en un dominio concreto y en ocasiones son usados por éstos.

Continuar leyendo...

WikiquoteES



WikiquoteES lleva funcionando más de un año, pero acabo de darme cuenta, que no llegué a anunciarlo aquí.

Es un sencillo bot que he creado, que sindica en RSS la frase del día de Wikiquote. Es decir, poco más que un parseador HTML escrito en PHP, que obtiene el contenido deseado.

Menos de 100 lineas de código son las responsables de tomar y seleccionar el contenido, manejar un caché de citas diarias por días, y devolverlo en formato RSS, o bien HTML

Con twitterfeed.com se publica además en la cuenta de Twitter de @WikiquoteES, y se publica en Facebook en Wiki Quote ES.

Unos resultados bastante vistosos y convincentes.…

Continuar leyendo...

Mi relación con Pascal



Hace algunos días surgió una conversación en la que varias personas se sorprendían porque siguiera usando el lenguaje Pascal en estos días. Me pareció lo suficientemente interesante como para reflexionar sobre ello, y publicarlo aquí, ya que en lo que a mi respecta, Pascal es un lenguaje que nunca me ha gustado demasiado, que que en cambio si he utilizado bastante.

Analicemos a continuación el porqué… Primero de todo, Pascal fue el primer lenguaje más o menos serio que aprendí. Dominaba varios dialectos de BASIC, algo de ensamblador Z80, y otros lenguajes sencillitos como LOGO, pero quería algo más.…

Continuar leyendo...

FreeMem



Por esas cosas que ocurren de vez en cuando, me he topado con FreeMem, un sencillo “desfragmentador de memoria RAM” escrito en Visual Basic Script (VBS).

La idea se me pasó por la cabeza en 2008, cuando con el auge de Windows XP y Vista, seguía habiendo multitud de usuarios que alababan los méritos de este tipo de herramientas, a pesar que no hace falta ser demasiado avispado como para detectar el fraude.

Quizás en núcleos de Windows 95, 98 o ME, el simple procedimiento de reservar un bloque grande de memoria, para forzar al sistema operativo a paginar en disco el contenido de la memoria, y luego liberar ese bloque, para que se recuperara el contenido de disco, daba ciertas ventajas en cuanto a fragmentación y más memoria libre.…

Continuar leyendo...

Implatanción de SQLite



Soy entusiasta de SQLite desde hace muchos años, cuando todavía era minoritaria, y acababan de lanzar la versión 2.

Me gusta ver como su implantación ha ido progresivamente en aumento. Desde navegadores web que implementan WebSQL y LocalStorage como Chrome, u Opera, hasta Firefox, que además lo utiliza internamente para las URL escritas, y los favoritos.

Clientes de correo como Thunderbird, que lo usan como almacenamiento de mensajes, o lectores de feeds tales como FeedDemon, y GreatNews, que lo utilizan para lo mismo.

No podemos olvidarnos de Skype, que almacena gran parte de sus datos también en SQLite, o Adobe AIR, que lo ofrece con una API al usuario.…

Continuar leyendo...