Archivo de la categoría Programación

Tipos de datos



Cuando empezaba a tocar el Spectrum, empezó a llamarme la atención que los números ocupasen tanto espacio. A mi modo de ver, era como si los guardase internamente como una cadena de caracteres. Poco me podía imaginar yo lo que era la representación de números en coma flotante, o que el Basic manejase todos los número de la misma forma.

Con el tiempo fui profundizando, y me impresionó ver como un procesador de 8 bits como era el Z80, y que tenía instrucciones para manipular 16 bits de golpe, pudiera manejar números en coma flotante de 40 bits. Lógicamente eso era bajo el precio de añadir procesamiento y memoria extra.…

Continuar leyendo...

Hints y anotaciones



Cuando escribía likely, unlikely y __builtin_expect, me vinieron recuerdos de antaño. Me refieron en concreto a los hints o anotaciones. Es decir, añadidos que se hacen en el código fuente, con la finalidad que el documentador, compilador, intérprete o cualquier otra herramienta, pueda leerlos.

El caso de la macro likely, era evidente, un añadido que no afecta al código fuente, pero que sirve para indicar al compilador como mejorar el código que genera.

En realidad, las anotaciones, son algo que se usan con bastante frecuencia en casi todos los lenguajes de programación. Por ejemplo Google Closure Compiler y JSDoc usan los suyos para mejorar la velocidad de ejecución, detección de errores, y el detalle de la documentación respectivamente.…

Continuar leyendo...

likely, unlikely y __builtin_expect



Estaba cotilleando las novedades de GCC, y me he encontrado con lo que llaman __builtin_expect. Esta macro, permite indicar al compilador la probabilidad de una condición, de manera que el predictor de saltos sea capaz de generar un código más eficiente.

Lo habitual es que se usen con una macro más legible llamada likely / unlikely, y que indica una probabilidad alta, y una baja respectivamente.

Imaginemos un fragmento de código que lee un pixel, y en el caso de ser de color negro, retorna cierto, y falso en caso contrario:

if (GetPixel() == BLACK) { return(true); } else { return(false); }

Digamos que el compilador podría traducir este código a x86 de una forma parecida a esta:

call GetPixel cmp eax, BLACK je true false: xor eax, eax ret true: mov eax, 1 ret

De este modo nos encontramos que a nivel de lenguaje máquina, cuando el píxel sea de color negro, entonces se ejecutará el salto a la etiqueta true: y retornará cierto.…

Continuar leyendo...

¿Quién gana dinero con los Bitcoin?



Estoy seguro que todos habéis oído hablar de los Bitcoins o BTC, la moneda virtual de moda. Por supuesto yo tambíen había oído de ella, pero no fue hasta que Sergi, me dio más detalles, que no profundicé en el tema.

Para que todos lo entendamos, un Bitcoin es una divisa virtual, con conversiones a dinero real. En este sentido sería como una acción, o cualquier otra moneda, yo puedo comprar Bitcoins, o venderlos, a cambio de moneda real, sobre el tipo de cambio establecido.

Sin embargo, a diferencia del dinero real, que no se apoya en nada, recordemos que el patrón oro dejó de utilizarse en la década de los 1970, los Bitcoin se apoyan en un bien también escaso.…

Continuar leyendo...

Permisos Windows por linea de comandos



Una de las cosas que más me gusta de UNIX es que toda su gestión se puede realizar directamente desde la consola de comandos. Parece mentira que después de tantos años usando Windows, no hubiera descubierto hasta fecha muy reciente, que en el entorno de Microsoft esto también es posible.

En especial la gestión de permisos, y de propietario NTFS, son bastante tediosas usando el entorno gráfico. Ya sabéis como funciona esto, cualquier error que se produce en un archivo, implica que debas responder Continuar o Cancelar de manera interactiva, así que nos podemos pasar la vida haciendo clic en ese dichoso botón.…

Continuar leyendo...

Desarrollo de software estándar



Hace unos días surgió una conversación interesante en el foro de encode.ru. Phil de Northstone, lanzaba una campaña de donación para BulkZip.

A modo de introducción, Bulkzip es una de esas herramientas que surgen desde matrices no técnicas, y que fundamentalmente se encargan de intentar obtener beneficios aprovechando otras herramientas gratuitas.

En este caso concreto, lo que hace es encapsular software de código abierto como FreeArc o zPaq entre otros, bajo una interfaz de usuario propia, que venden a 9,99$. No contentos con eso, mediante la citada campaña, planean obtener un extra de 2.000$.…

Continuar leyendo...

conio.h



La biblioteca de C CONIO (CONsole Input Output), conocida popularmente como conio.h por su archivo de cabecera, es sin duda uno de los recuerdos más intensos de desarrolladores de C durante los años 80 y 90.

Pese a no formar parte del estándar ANSI, ni POSIX, conio se ha llegado a portar a diferentes plataformas: DOS, OS/2, Win32, Win64, etc. Está disponible también en diferentes compiladores, incluso en sus versiones más recientes, como Visual C++, Digital Mars C++, Embarcadero C++ Builder, DJGPP C++ o OpenWatcom C++.

Aunque se implementó inicialmente por Lifeboat Associates como parte de Lattice C 1.0 (1982), no fue hasta que Borland lanzara Turbo C 1.0 (1987) que conio.h cobraría gran popularidad.…

Continuar leyendo...

Retrospectiva de Simple PHP Blog



Casualmente estaba revisando el código de SPHPBlog, y al encontrarme vestigios de mis contribuciones, sin apenas ningún cambio, me he puesto a indagar más.

Todo empezó en un lejano año 2003, aunque no fue hasta abril de 2004, que encontré el Simple PHP Blog, un sistema de bloging sencillo, y con pocos requisitos hardware y software, es decir, ideal para montarlo en servidores gratuitos.

Muchos no estarías por aquí, pero en aquellos tiempos, se estilaban cosas super complicadas como Movable Type o …

Continuar leyendo...

Carga asíncrona de Javascript



Con páginas, y aplicaciones web, cada vez más pesadas, nos enfrentamos a un importante reto, que excede las capacidades iniciales de ECMAScript.

Me estoy refiriendo a la velocidad de visualización de las páginas. Por defecto, una página sólamente se renderiza cuando todas sus dependencias están disponibles, por lo que con tamaños que aumentan, cada vez es más complicado.

Cabe recordar, que cuando hacemos una inclusión de un archivo JS externo en nuestra página, lo que ocurre es que el navegador solicita la el archivo, lo ejecuta, y entonces continúa la carga de la página principal. Es lo que se llama Blocking Javascript, y que es como digo, el comportamiento por defecto, cuando hacemos algo como esto:

<script type="text/javascript" language="Javascript" src="miscript.js"></script>

No se trata de que carguen al completo de manera más rápida, ese sería otro tema, sino que solamente lo parezca, haciendo que la mayoría de contenido se visualice lo antes posible.…

Continuar leyendo...

Plugin Anti-spam para WordPress



Llevo mucho tiempo probando plugins de WordPress, para evitar el spam que me generan los bots desde el formulario de comentarios. La actividad es elevada, unos 50 al día.

Inicialmente, lo dejaba todo en manos de Akismet, pero el problema es que entonces se me movían al spam, y tenía que ir repasándolos para evitar que se colasen falsos positivos. La idea de estos plugins antispam, es que se centran en detectar la actividad procedente de bots, y directamente eliminarlos. Los que no son de bots, es decir, que son de personas que cobran por manualmente introducir spam en páginas web, son analizados ahora si por Akismet, que entonces los intenta discriminar.…

Continuar leyendo...

Uso de cookies

Esta web utiliza cookies para mejorar la mejor experiencia de usuario. Si continúas navegando estás dandos tu consentimiento para la aceptación de las mismas y la aceptación de la política de cookies, pincha el enlace para más información.

ACEPTAR
Aviso de cookies