Archivo de la categoría Programación

Límite 287.301 líneas en SSMSE



Curioso el límite que tiene el SQL Server Management Studio Express (SSMSE) de Microsoft, a la hora de copiar y pegar consultas de/desde el portapapeles.

La cifra no son 10.000, ni 100.000 ni siquiera 1.000.000. El número concreto es 287.301, que cuando se excede, hace saltar un aviso con el siguiente texto:

You are attempting to copy more than 287301 lines to the Clipboard. This may decrease performance. Do you want to proceed?.

Por más vueltas que le he dado a ese número, no le encuentro ninguna explicación, salvo que en las pruebas de rendimiento de las máquinas de desarrollo del producto, esa cantidad, se considerase obtenía una velocidad de ejecución lenta.…

Continuar leyendo...

TXT2PDF



Aprovechando una buena racha para el software, he creado TXT2PDF.

Como el propio nombre indica TXT2PDF, es un pequeño programa gratuito para Windows, capaz de convertir archivos de texto plano, en documentos PDF.

La base de código se basa en la versión 1.1 (1996) de text2pdf, escrito por Phil Smith, sobre la que se han aplicado bastantes modificaciones y optimizaciones.

La principal característica de TXT2PDF es su eficiencia. El ejecutable principal de menos de 100 Kb sin comprimir, es capaz de procesar hasta 500 páginas por segundo en mi Ahtlon 64 X2. Los PDF resultantes son compatibles PDF 1.1, por lo que para abrirlos basta con con Acrobat 2.0 o compatibles.…

Continuar leyendo...

Efecto autonumérico



Al igual que ocurrió con el llamado Efecto 2000 (Y2K), causado por destinar dos dígitos para almacenar el año en las fechas, me planteo ahora, que ocurrirá, cuando los campos autonuméricos de las bases de datos, excedan su valor máximo. Y lo que es más importante: ¿Cuándo ocurrirá?

Si tenemos en cuenta que la mayoría de SGBD, almacenan los campos de identidad autonumérica como enteros de 32 bits con signo, esto nos da un rango de valores positivos hasta 2.147.483.647. Realmente parece un número elevado, pero haciendo unos cálculos rápidos, veremos que quizás no lo es tanto.

Así que, cuánto tiempo debe pasar hasta que se exceda el rango:

– 1 inserción por minuto: 68 años.…

Continuar leyendo...

WinVer



Desde los inicios de Windows, recordaba lo compacto que era el programa WinVer. En efecto, al coger todo el código necesario del nucleo de Windows, la funcionalidad que realmente incorporaba el ejecutable era poco más que invocar a un par de funciones.

Sorprendemente en Vista x86, su peso llega a los 8.704 bytes. Quizás hoy día 8 Kb no parezcan demasiado, pero teniendo en cuenta que básicamente sólo se invoca a ShellAboutA, es desmesurado.

Mi versión, se conforma con 1.024 bytes, la mayoría por la alineación requerida del ejecutable, aunque podrían ser algunos menos. Esto hace un total más de 8 veces inferior.…

Continuar leyendo...

Mark Zbikowski – From DOS 1.0 to Windows Vista



Interesante conferencia de Mark Zbikowski (Core File Services Architect en Microsoft), que podéis ver aquí.

Zbikowski empezó en Microsoft en 1981, intervidiando en el MS-DOS 1.0, participó en el diseño de OFS para OS/2, y de NTFS para Windows.



Continuar leyendo...

Confirmar salida en Javascript



Cuando desarrollamos aplicaciones Web, es una tarea habitual que nos interese prevenir que el usuario cierre la ventana actual antes de haberse realizado determinado proceso.

Para ello contamos con el evento OnBeforeUnload, que tanto en Internet Explorer como en Firefox (aunque no en Opera), se ejecuta antes de que la página actual se descargue. El proceso de descarga, se dispara tanto porque se cierre la ventana que la contiene, como porque se transfiera el flujo de navegación a otra.

Su mecanismo es sencillo, si se retorna una cadena de caracteres, la cadena de caracteres será incluída en el diálogo que presentará el navegador solicitando al usuario que confirme el abandono de la página.…

Continuar leyendo...

Instalación de ODAC en Windows x64



La instalación de ODAC.NET para Windows x64, no es trivial. Si usas Windows 2008 x64, Vista x64, 2003 x64, o XP x64, y necesitas desarrollar usando los Oracle Data Access Components, lo siguiente te interesa.

Imagino que a estás alturas habrás visto por internet multitud de alternativas para solucionarlo, pero ninguna te ha convencido, así que pondré aquí un resumen, y la solución sencilla y fácil.

El problema viene, porque el cliente de Oracle, usado entre otros por ODAC, no soporta ser ejecutado desde directorios que contienen paréntesis, como es el caso de Program Files (x86) usado en Windows x64 para instalaciones de software de 32 bits, por ejemplo el cliente de Oracle.…

Continuar leyendo...

Acid 3



Toqué el tema del test Acid 2, donde Opera sacaba buena nota, así que ahora que se está desarrollando el test Acid3, no he podido evitar ejecutarlo en mis navegadores.

Lo he probado con últimisimas versiones de navegadores (Seamonkey 2 y Opera 9.50), y con algunas más antiguas y estables (Firefox 2, Internet Explorer 7, Opera 9.25 y Safari 3).

Como se puede ver con la puntuación obtenida, Opera, sigue liderando la prueba…

– Firefox x64 2.0.11 (Gecko 1.8.1.11): 53/100.
– Internet Explorer 7.00.6000.16575: 14/100.
– Opera 9.25.8827: 51/100.
– Opera 9.50.9755 Beta: 62/100.…

Continuar leyendo...

800 FPS en un PC



Después de los anteriores artículos de frames por segundo en un PC, a la hora de mostrar una imagen en pantalla, usando tecnología de los 80 y los 90, a raiz de hacerlo en un Spectrum.

El código está escrito en Visual C++ 2008 (9.0), y aprovecha las características de DirectDraw 7 en DirectX para aprovechar el hardware de la GPU en los procesos. Es extremadamente portable, pudiéndose compilar en ANSI o UNICODE, y soportando las arquitecturas x86, x64 e IA64 (Itanium).

Viene de un código original mío de hace algunos años, con algunos añadidos de última hora. No se incluye el array de bytes conteniendo el mapa de bits de la imagen, sino que se ha incluído vía recurso de Windows.…

Continuar leyendo...

Funciones intrínsecas en VC++ 2008



Publican en el Visual C++ Team Blog, un inventario exhaustivo de las funcionalidades intrísecas que se han incorporado al Visual C++ 9 (2008).

Las funciones intrínsecas, permiten aprovechar a bajo nivel los juegos de instrucciones de procesadores CISC recientes, de forma más o menos portable. Así, mientras las compilaciones para x64 no soportan ensamblador en linea, las funciones intrínsecas siguen estando disponibles.

Parece ser también, que al compilador, y sobre todo al optimizador, les resulta más fácil manejarlas que el assembler inline, por lo que es probable que ofrezcan también un mejor rendimiento.…

Continuar leyendo...