Firefux

Lo hice y lo entendí

El blog de Vicente Navarro
18 Oct

Cómo evitar que las páginas web nos redimensionen Firefox

En monitores y pantallas de grandes resoluciones (mayores de 1024×768), yo evito trabajar con el navegador maximizado. Entre otras cosas, porque en las páginas de ancho variable (entre ellas, la de un servidor) las líneas serán demasiado largas, y en las páginas de ancho fijo (que yo diría que son mayoría) aparecen demasiado vacías. Además, si no lo tengo maximizado, me resulta sencillo poder redimensionar el navegador frecuentemente cuando quiero adaptarlo a la página que estoy visitando. Bueno, y en cualquier caso, es que en general evito las aplicaciones maximizadas. Prefiero tener a la vista un trozo de todas las ventanas abiertas para hacerme una idea de todo lo que estoy haciendo.

Es por eso que, cuando una página decide por mí qué tamaño de ventana es el adecuado redimensionando mi navegador, me enfurezco. Si usara Internet Explorer 6, que no tiene pestañas, quizás no me importaría tanto, ya que sólo se redimensionaría la ventana de esa página web; pero en Firefox (o IE7, o Google Chrome, o Safari, o…), redimensionar el navegador es redimensionarlo para todas las pestañas. Pero aún así, hay diseñadores web que se empeñan en usar técnicas del pasado y redimensionarnos el navegador a la fuerza.

Un ejemplo sangrante es el de la página de ING Direct. Sin entrar en que, en mi opinión, sus diseñadores no usan las mejores técnicas de accesibilidad posibles, lo primero con que nos encontramos al entrar es una maximización del navegador. Bueno, no es exactamente una maximización, es que el navegador use el máximo tamaño posible sin maximizarlo:

<script language=javascript>

window.top.resizeTo(screen.availWidth, screen.availHeight);
window.top.moveTo(0,0); 

</script>

Yo también te podría redimensionar el navegador ahora mismo, pero no lo hago porque considero que es de mal gusto que yo cuestione tu configuración del navegador. Pero si te apetece que lo haga, sólo tienes que pulsar sobre este enlace:

o si quieres que te moleste un poco más, tal vez quieras probar éste:

Sigue leyendo »

13 Oct

Redirigir la salida de un comando a un read con una tubería (pipe)

El mundo de las diferentes shells de UNIX es inmenso. Los pobres mortales con tiempo finito sólo podemos aspirar a ir aprendiendo detalles de aquí y detalles de allá conforme nos van haciendo falta. No hay más que ver que la última revisión del Advanced Bash-Scripting Guide son 802 páginas que, además, necesitan ser leídas muy detenidamente. Y eso si hablamos sólo de bash, porque cada una de las diferentes shells tiene sus mil y una peculiaridades.

La última vez que he sido consciente de mi enorme desconocimiento ha sido esta semana, cuando fruto de un comportamiento que me parecía ilógico me enredé con manuales y documentación de diferentes shells. ¿Habrá mucha gente capaz de dominar casi todos los aspectos de la shell?

Vayamos al grano… El problema que tuve fue que un script muy sencillo que en ksh funcionaba sin problemas, en bash no hacía lo que esperaba. El problema estaba en una línea como esta:

comando | read a b c

Sigue leyendo »

10 Oct

Ubuntu y Debian eliminan ms-sys de sus repositorios

Ya me di cuenta hace unos meses de que el ms-sys, esa utilidad que tantas veces hemos usado en el pasado para escribir sectores de arranque de Microsoft en memorias USB, no venía en Ubuntu 8.04 Hardy Heron. ms-sys sí que fue parte, en cambio, de la 6.06 Dapper Drake, 7.04 Feisty Fawn y Ubuntu 7.10 Gutsy Gibbon.

De igual forma, aunque yo he podido usarlo con Debian 4.0 Etch y anteriores, la Debian 5.0 Lenny ya no incluirá el ms-sys.

¿Por qué ambas distribuciones han decidido eliminar este paquete tan útil de sus repositorios?

Pues por problemas de licencia, ya que a pesar de ser GPL, el ms-sys lleva código que es directamente un volcado de los sectores de arranque de Microsoft (Why ms-sys was removed on hardy?, ms-sys — RoSponsor; contains non-free code, ms-sys contains MBRs which are copyrighted by Microsoft, ms-sys boot loader license).

Si queremos usarlo -a pesar de las dudas que hay sobre su licencia-, tendremos que descargarlo y compilarlo. Sólo es necesario descomprimirlo, un make y un make install para tenerlo funcionando en apenas unos segundos.

Y la verdad es que creo que coincidiréis conmigo en que esto no parece que lo haya programado así, directamente en hexadecimal, el autor del ms-sys, ¿verdad?

/usr/src/ms-sys-2.1.3/inc $ cat mbr_2000.h
/* First 446 bytes of MBR from Windows 2000, XP and 2003 */
/* This is English version. Bytes 0x12c onwards vary with language. */
/* Last two bytes 1b6 and 1b7 point to language-specific messages.  */
/* Support of other languages is an exercise for the reader!        */
unsigned char mbr_2000_0x0[] = {
  0x33, 0xc0, 0x8e, 0xd0, 0xbc, 0x00, 0x7c, 0xfb, 0x50, 0x07, 0x50, 0x1f,
  0xfc, 0xbe, 0x1b, 0x7c, 0xbf, 0x1b, 0x06, 0x50, 0x57, 0xb9, 0xe5, 0x01,
  0xf3, 0xa4, 0xcb, 0xbd, 0xbe, 0x07, 0xb1, 0x04, 0x38, 0x6e, 0x00, 0x7c,
  0x09, 0x75, 0x13, 0x83, 0xc5, 0x10, 0xe2, 0xf4, 0xcd, 0x18, 0x8b, 0xf5,
  0x83, 0xc6, 0x10, 0x49, 0x74, 0x19, 0x38, 0x2c, 0x74, 0xf6, 0xa0, 0xb5,
  0x07, 0xb4, 0x07, 0x8b, 0xf0, 0xac, 0x3c, 0x00, 0x74, 0xfc, 0xbb, 0x07,
  0x00, 0xb4, 0x0e, 0xcd, 0x10, 0xeb, 0xf2, 0x88, 0x4e, 0x10, 0xe8, 0x46,
  0x00, 0x73, 0x2a, 0xfe, 0x46, 0x10, 0x80, 0x7e, 0x04, 0x0b, 0x74, 0x0b,
  0x80, 0x7e, 0x04, 0x0c, 0x74, 0x05, 0xa0, 0xb6, 0x07, 0x75, 0xd2, 0x80,
  0x46, 0x02, 0x06, 0x83, 0x46, 0x08, 0x06, 0x83, 0x56, 0x0a, 0x00, 0xe8,
  0x21, 0x00, 0x73, 0x05, 0xa0, 0xb6, 0x07, 0xeb, 0xbc, 0x81, 0x3e, 0xfe,
  0x7d, 0x55, 0xaa, 0x74, 0x0b, 0x80, 0x7e, 0x10, 0x00, 0x74, 0xc8, 0xa0,
  0xb7, 0x07, 0xeb, 0xa9, 0x8b, 0xfc, 0x1e, 0x57, 0x8b, 0xf5, 0xcb, 0xbf,
  0x05, 0x00, 0x8a, 0x56, 0x00, 0xb4, 0x08, 0xcd, 0x13, 0x72, 0x23, 0x8a,
  0xc1, 0x24, 0x3f, 0x98, 0x8a, 0xde, 0x8a, 0xfc, 0x43, 0xf7, 0xe3, 0x8b,
  0xd1, 0x86, 0xd6, 0xb1, 0x06, 0xd2, 0xee, 0x42, 0xf7, 0xe2, 0x39, 0x56,
  0x0a, 0x77, 0x23, 0x72, 0x05, 0x39, 0x46, 0x08, 0x73, 0x1c, 0xb8, 0x01,
  0x02, 0xbb, 0x00, 0x7c, 0x8b, 0x4e, 0x02, 0x8b, 0x56, 0x00, 0xcd, 0x13,
  0x73, 0x51, 0x4f, 0x74, 0x4e, 0x32, 0xe4, 0x8a, 0x56, 0x00, 0xcd, 0x13,
  0xeb, 0xe4, 0x8a, 0x56, 0x00, 0x60, 0xbb, 0xaa, 0x55, 0xb4, 0x41, 0xcd,
  0x13, 0x72, 0x36, 0x81, 0xfb, 0x55, 0xaa, 0x75, 0x30, 0xf6, 0xc1, 0x01,
  0x74, 0x2b, 0x61, 0x60, 0x6a, 0x00, 0x6a, 0x00, 0xff, 0x76, 0x0a, 0xff,
  0x76, 0x08, 0x6a, 0x00, 0x68, 0x00, 0x7c, 0x6a, 0x01, 0x6a, 0x10, 0xb4,
  0x42, 0x8b, 0xf4, 0xcd, 0x13, 0x61, 0x61, 0x73, 0x0e, 0x4f, 0x74, 0x0b,
  0x32, 0xe4, 0x8a, 0x56, 0x00, 0xcd, 0x13, 0xeb, 0xd6, 0x61, 0xf9, 0xc3,
  0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x70, 0x61, 0x72, 0x74,
  0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x00,
  0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e,
  0x67, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20,
  0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x00, 0x4d, 0x69, 0x73, 0x73, 0x69,
  0x6e, 0x67, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67,
  0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x44, 0x63
};
/* Next four bytes used for Windows Disk Signature / Drive serial number */
/*
unsigned char mbr_2000_0x1b8[] = {
                                                  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00
};
*/

Siendo estrictos, es verdad que el ms-sys lleva código de Microsoft, aunque sólo sean varios trozos de menos de 512 bytes, por lo que es razonable la decisión que han tomado los desarrolladores de Debian y Ubuntu. Pero, ¡qué lastima dejar de tener a mano una herramienta tan útil! Ya podría Microsoft liberar estos míseros bytes de código por el bien de la interoperabilidad…

:wq

09 Oct

Instalar Windows XP desde una memoria USB que arranque BartPE

¿Tienes un ordenador sin lector de CD/DVD? ¿Has tenido algún problema con el Windows y necesitas reinstalarlo? ¿No te apetece comprar una unidad de CD/DVD externa por USB? Entonces, ¡has llegado al sitio adecuado!

Gracias a los interesantísimos comentarios de Reirok en Arrancar BartPE desde memorias USB en FAT32, ¡y mucho más rápido!, como respuesta a una pregunta de miguelo, me he interesado por este tema, he hecho algunas pruebas, y esta entrada pretende ser un resumen de lo que he aprendido.

Para poder instalar Windows XP en un sistema sin unidad de CD/DVD, vamos a necesitar tres cosas:

  • Una memoria USB capaz de arrancar un BartPE
  • El MBR Fix que podemos descargar en Sysint
  • Un CD de instalación de Windows XP

Para llegar a tener una memoria USB capaz de arrancar BartPE, podemos seguir lo descrito en la entrada Sobre el BartPE. Arrancar Windows/BartPE desde una memoria USB., que describe qué es el BartPE, como confeccionarnos uno, y cómo instalarlo en una memoria USB formateada en FAT.

Sin embargo, la reciente entrada Arrancar BartPE desde memorias USB en FAT32, ¡y mucho más rápido!, describe un nuevo método muchísimo mejor para instalar BartPE en una memoria USB, sea FAT o FAT32. Este método lo podemos seguir una vez que tenemos un BartPE confeccionado según la entrada anterior.

Pues bien, suponiendo que ya tenemos nuestra memoria USB capaz de arrancar BartPE, vamos a instalar Windows XP suponiendo que el disco del sistema destino está absolutamente vacío, como si fuera nuevo y lo acabáramos de instalar, por lo que ni tiene particiones, ni está formateado.

Sigue leyendo »

05 Oct

Compactar imágenes de disco de VirtualBox: vditool vs VBoxManage

En Probar en VirtualBox una memoria USB de arranque obtuvimos una imagen vdi de una imagen que habíamos obtenido con dd de una memoria USB de arranque para simular su funcionamiento sin tener que reinciar una y otra vez.

La imagen que creamos allí era, por defecto, de tamaño fijo (no dinámico), de modo que ocupaba en el disco duro el mismo espacio del que disponía la memoria USB, en mi caso 8 GB (que no 8 GiB):

-rwxr-xr-x  1 root    root    8000004096 2008-09-26 23:41 imagen_mem_usb.img*
-rw-------  1 vicente vicente 8000666112 2008-10-05 18:57 imagen_mem_usb.vdi*

Como vimos en Montar imágenes de disco vdi de VirtualBox, podemos convertir dicha imagen de tamaño fijo en una de tamaño dinámico y además, eliminando los bloques no usados, con “vditool SHRINK“:

$ vditool SHRINK imagen_mem_usb.vdi
vditool    Copyright (c) 2004-2008 innotek GmbH.

Shrinking VDI image file="imagen_mem_usb.vdi"...
progress: 0%Log created: 2008-09-27T12:19:10.484950000Z
Executable: /usr/lib/virtualbox/vditool
Arg[0]: /usr/lib/virtualbox/vditool
Arg[1]: SHRINK
Arg[2]: imagen_mem_usb.vdi
Dumping VDI image "imagen_mem_usb.vdi" mode=r/w fOpen=0 File=00000004
Header: Version=00010001 Type=2 Flags=0 Size=8000004096
Header: cbBlock=1048576 cbBlockExtra=0 cBlocks=7630 cBlocksAllocated=7630
Header: offBlocks=512 offData=31232
Header: Geometry: C/H/S=15501/16/63 cbSector=512 Mode=2
Header: uuidCreation={53bea69e-c21b-4273-be9e-df3fa8f1ffd7}
Header: uuidModification={7a7be4b9-188a-42b2-298e-07eaa266a651}
Header: uuidParent={00000000-0000-0000-0000-000000000000}
Header: uuidParentModification={00000000-0000-0000-0000-000000000000}
Image:  fFlags=00000000 offStartBlocks=512 offStartData=31232
Image:  uBlockMask=000FFFFF uShiftIndex2Offset=20 uShiftOffset2Index=20 offStartBlockData=0
...........10%..........20%..........30%..........40%..........50%
..........60%..........70%..........80%..........90%..........100%
Dumping VDI image "imagen_mem_usb.vdi" mode=r/w fOpen=0 File=00000004
Header: Version=00010001 Type=2 Flags=0 Size=8000004096
Header: cbBlock=1048576 cbBlockExtra=0 cBlocks=7630 cBlocksAllocated=7621
Header: offBlocks=512 offData=31232
Header: Geometry: C/H/S=15501/16/63 cbSector=512 Mode=2
Header: uuidCreation={53bea69e-c21b-4273-be9e-df3fa8f1ffd7}
Header: uuidModification={7a7be4b9-188a-42b2-298e-07eaa266a651}
Header: uuidParent={00000000-0000-0000-0000-000000000000}
Header: uuidParentModification={00000000-0000-0000-0000-000000000000}
Image:  fFlags=00000000 offStartBlocks=512 offStartData=31232
Image:  uBlockMask=000FFFFF uShiftIndex2Offset=20 uShiftOffset2Index=20 offStartBlockData=0

The operation completed successfully!

Sin embargo, en este caso no conseguimos apenas ningún ahorro de espacio:

-rwxr-xr-x  1 root    root    8000004096 2008-09-26 23:41 imagen_mem_usb.img*
-rw-------  1 vicente vicente 7993326080 2008-09-30 21:04 imagen_mem_usb.vdi*

La imagen compactada es tan sólo 8000666112-7993326080=7340032 bytes más pequeña que la anterior. Esto es debido a que el proceso de compactación de vditool sólo es capaz de ahorrarnos los bloques que contengan íntegramente ceros, y en el caso de mi memoria USB, fruto de innumerables movimientos de ficheros, ya vemos que son muy pocos los bloques que continuaban conteniendo exclusivamente ceros. Es bien sabido que cuando borramos un fichero, su contenido sigue estando íntegramente en el disco y sólo anotamos en las estructuras del sistema de ficheros que ese espacio que antes usaba tal fichero, ahora está disponible para cualquier otro fichero. Y eso es en lo que se basan los programas de recuperación de ficheros eliminados para hacer su trabajo con mayor o menor éxito según sea el sistema de ficheros y según las operaciones de ficheros que se hayan realizado desde el borrado.

Por tanto, normalmente las imágenes de disco que hayan tenido mucho trajín de archivos y que no tengan mucho espacio sobrante, tendrán pocos bloques que puedan ser eliminados durante la compactación, ya que esos bloques es muy posible que contengan restos de ficheros ya eliminados y no contengan solo ceros.

Sigue leyendo »

02 Oct

Gestionando crashes (errores) de Firefox con about:crashes

Aproximadamente desde que migré a Firefox 3 en Windows XP, venía sufriendo “crashes” aleatorios de Firefox antológicos. Me refiero a “crash” no a cuando el navegador se queda completamente colgado, sino a cuando se cierra completamente fruto de alguna excepción.

En esos casos, nos aparecerá el Mozilla Crash Reporter para solicitarnos permiso para enviar información sobre el crash a los servidores de la fundación Mozilla donde pueden estudiarlos y solucionar errores similares en posteriores revisiones:

Pues bien, decía que al principio los crashes parecían aleatorios, pero poco a poco me fue dando la sensación de que siempre aparecía en páginas que usaban el plugin de Java, pero no estaba seguro del todo. Hasta que no sé cómo, me enteré de la existencia del about:crashes, una página interna de Firefox que nos muestra un listado de los informes de errores que hemos mandado. Y yo tengo un buen montón:

Sigue leyendo »

Tema LHYLE08, creado por Vicente Navarro a partir del tema Fluid Index de 2yi