Archivo de la categoría Programación

x86 vs x64 (Continuación)



Si te perdiste la primera parte, la puedes leer en el artículo x86 vs x64, si fuiste de los que leyeron recordarás que se dejó como "deberes", optimizar la aplicación para que usase varios hilos de ejecución, y así resultar más veloz en equipos de varios nucleos.

Para no complicarlo demasiado, he optado por usar OpenMP, de forma que añadiendo un par de lineas más al fuente original fuera suficiente:

#include <stdio.h>
#include <time.h>
#include <omp.h>

void __cdecl main (void)
{
__int64 iCount, iRes;
unsigned int iInicio, iFin;

iInicio=clock();

iRes=0;
#pragma omp parallel for
for (iCount=1; iCount<=10000000000; iCount++)
{
iRes+=iCount;
iRes--;
}
iFin=clock();
printf("%I64d %d\n", iRes, iFin-iInicio);
getchar();
}

He omitido la publicación de los listados en ensamblador, pues son bastante extensos debido a los diferentes procedimientos que ejecutan la rutina, y al código necesario para lanzar los threads.…

Continuar leyendo...

x86 vs x64



Para comprobar la ganancia que se podría obtener compilando para Windows 64 bits las aplicaciociones de 32 bits, he hecho un pequeño ejemplo que utiliza aritmética de 64 bits, y que pueda ser utilizado como benchmark comparativo.

Intentando que sea lo más real posible, he configurado el Visual C++ 2005 SP1 para que utilice en x86 instrucciones SSE2 (/arch:SSE2), y así poder manipular la información en bloques de más de 32 bits, aunque como se verá más adelante, el compilador no ha considerado que se obtenga ningún beneficio usándolas.

El programa utilizado, simplemente realiza un bucle de 10 millardos de iteraciones, donde se ejecuta una suma y un decremento.…

Continuar leyendo...

JLC's Internet TV



Tras mucho tiempo de ir probando de forma esporádica programas para ver la televisión por internet, he dado con JLC's Internet TV.

JLC's Internet TV concentra en menos de 200 Kb un completísimo programa para Windows que permite ver la televisión por internet. Es sencillo de utilizar, gratuito e incluye más de 1300 canales preconfigurados (incluso españoles).

El programa no necesita ser instalado, ni escribe en el registro, por lo que es perfecto para los defensores de las aplicaciones mal definidas como portables (aquellas que pueden ser ejecutadas directamente desde un Pendrive sin necesidad de ser instaladas previamente).…

Continuar leyendo...

Instalar MySQL en otro directorio



Para instalar bajo Windows el servidor MySQL en otro directorio diferente al que se usa por defecto (c:\mysql), inclusive si el nuevo directorio contiene nombres de archivo largos, solamente hay que agregar un par de lineas al archivo de configuración my.ini ubicado en la carpeta de Windows (por defecto C:\Windows), de manera que el servidor sepa donde localizar los recursos.

Dentro de la sección mysqld, añadiremos o modificaremos los siguientes parámetros:
– basedir
– datadir

Hay que tener en cuenta que se deben reemplazar las contrabarras de Windows (\) por barras (/).

Si el nombre de directorio es largo, o contiene espacios, habrá que especificarse el correspondiente nombre corto.…

Continuar leyendo...

Juego de instrucciones x86



Por pura casualidad, mientras le echaba un vistazo al Lazy Assembler (LZASM), un ensamblador para DOS y Windows compatible con el modo ideal de Turbo Assembler (TASM), casi me caigo de culo al ver la cantidad de instrucciones que soportan los procesadores actuales.

A pesar de que no toco ensamblador en serio desde hace años, creo que sabría utilizar de memoria, al menos el 80% de las instrucciones 8088/8086, y digamos un 60% de las del 386. Para las arquitecturas más nuevas, digamos que las instrucciones añadidas me suenan, pero poco más.

En x87 nunca fui un experto, por lo que para hacer algo basado en un 8087, sin duda necesitaría al menos documentación de referencia.…

Continuar leyendo...

JSON



JSON (Javascript Object Notation), es una librería diseñada para intercambiar datos entre diferentes lenguajes y plataformas.

Se soportan desde ActionScript hasta Squeak. Pasando por C, C++, Coldfusion, Delphi, Javascript, Perl, PHP, Python, Ruby, …

Los datos se almacenan de una forma sencilla, y que es facilmente entendible por un humano, al mismo tiempo que el proceso de codificación y decodificación es eficiente.

Pretende ser una alternativa ligera a XML, por lo que no es de extrañar que haya conversores de archivos XML a JSON.

Para que os hagáis una idea, podéis echarle un vistazo a estos ejemplos, con sus equivalentes en XML.…

Continuar leyendo...

PHP 6



Recientemente se puso a disposición de la comunidad la versión 5.2.0 de PHP, con novedades en la gestión de memoria, y como siempre, corrigiendo errores, y actualizando las librerías que se incluyen.

Pero en la tubería de salida, tenemos también la versión 6, que si bien no será tan revolucionaria como lo fue la 3, la 4 y la 5, promete interesantes novedades.

La más relevante es sin duda el soporte unicode. Es decir, se está modificando todo el motor y las librerías incluídas, para que trabajen nativamente en unicode, lo que evitará multitud de problemas a los desarrolladores que en mayor o menor medida internacionalizan sus aplicaciones web.…

Continuar leyendo...

Snap Preview Anywhere



He visto en BlueMag, que usa un servicio llamado con Snap Preview Anywhere, que permite añadir a tus páginas la funcionalidad de mostrar una preview de la web que es enlazada.

Añadir la ventana flotante de previsualización de enlaces es realmente fácil.

No hay más que incluir en vuestras páginas el siguiente código:
<script defer="defer" id="snap_preview_anywhere" type="text/javascript" src="http://spa.snap.com/snap_preview_anywhere.js?ap=1
&amp;key=b0861d51d5da18dc68b4caf97ce4b43b&amp;sb=0
&amp;domain=TU_URL"></script>

El resultado es espectacular.…

Continuar leyendo...

Incrustar Flash sin embed



Cuando necesitamos incrustar un control de Flash dentro de nuestras páginas HTML, nos vemos obligados a hacerlo de dos formas diferentes.

La primera usando la marca <OBJECT> para embeder el ActiveX de Flash en Internet Explorer bajo Windows, y la segunda utilizando la etiqueta <EMBED> para cargar el plugin de Flash en formato compatible Netscape para el resto de plataformas (Firefox, Opera, …).

Aunque no es nada intuitivo, es posible hacer esto mismo en un solo paso. Es decir escribir una etiqueta que cargue un Flash, tanto en IE, como en el resto, WORA 100%.

La forma tradicional para hacerlo, que es incluso la que genera el propio Flash al publicar un HTML, tiene este estilo:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="375" height="130">
<param name="movie" value="images/04/07/flash_version.swf">
<embed src="images/04/07/flash_version.swf" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="375" height="130"></embed>
</object>

Y su resultado:

La manera todo en uno, sería así:

<object type="application/x-shockwave-flash" data="images/04/07/flash_version.swf" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="375" height="130">
<param name="movie" value="images/04/07/flash_version.swf">
</object>

Con un idéntico resultado:

La explicación es que HTML 4.01 define OBJECT como el estándar, por lo que todos los navegadores alternativos lo implementan, mientras que la variación de OBJECT sigue estando sólo soportada por Microsoft.…

Continuar leyendo...

HeidiSQL



A raiz de la muerte de MySQLFront, Ansgar Becker, el autor original de MySQLFront 2.5, ha decidido abrir el código, y crear HeidiSQL.

Sobre la base de la versión 2.5, se han añadido actualmente multitud de cambios, principalmente se han activado las funciones de exportación, se ha migrado el acceso a MySQL usando la librería ZeosLib, y se ha recompilado con Delphi 2006.

El resultado, sin ser espectacular de momento, sienta las bases de un excelente producto, al que solamente le faltan las características de importación/exportación de la MySQLFront 3/SQLFront 3 (de Nils Hoyer), y el rendimiento de SQLYog 5.2.…

Continuar leyendo...