27 noviembre 2007

Problemas en webs con codificación UTF-8

Me he encontrado con este problema al instalar en la versión española de phpTrafficA, un portal PHP-MySQL para estadísticas. Los caracteres latinos salían incorrectamente a pesar de tener configurado en el HTML:

<?xml version="1.0" encoding="UTF-8"?>
o
<meta equiv="content-type" content="text/html; charset=UTF-8">

Existen varias soluciones:
  • Modificar apache2.conf. Por defecto las páginas PHP se suelen servir con codificación ISO-8859-1. Se podría forzar a servirlas en UTF-8 poniendo: AddDefaultCharset UTF-8
  • Modificar el fichero .htaccess del directorio web, pudiendo desactivar (AddDefaultCharset off) o forzar UTF-8 (AddDefaultCharset utf-8)
  • Configurando la cabecera de las páginas mediante PHP, añadiendo al principio de las páginas:
    <?php header('Content-Type: text/html; charset=UTF-8'); ?>

22 noviembre 2007

Consola MS-DOS de Vista con teclado en inglés

Este problema es un clásico de Windows Vista 32 (en Vista 64 no puede ejecutarse MS-DOS ya que en 64 bits, por diseño de la CPU no pueden ejecutarse tareas de 16 bits).

Al abrir un cmd.exe el teclado sigue en español, pero en cuanto ejecutamos un command, el teclado se convierte al teclado inglés y por tanto todas las aplicaciones MSDOS puras, heredan el teclado en inglés.

Para solucionarlo, abrimos con el Bloc de Notas el fichero C:\windows\system32\autoexec.nt y le añadimos al final una línea que ponga:

kb16 sp

Y ya está. Al arrancar de nuevo cualquier programa MSDOS, ya tendrá correctamente configurado el teclado.

Fuente:

http://www.multingles.net/docs/jmt/wvteclado.html

30 octubre 2007

Opción "No a todo" en diálogo al borrar, copiar o mover

Cuando realizamos algunas operaciones de borrar, copiar o mover archivos puede aparecernos un diálogo con varias opciones para borrar o sobreescribir: , Sí a todo, No, Cancelar... Pero no tenemos la necesaria opción "No a todo". Sin embargo podemos ejecutar esa opción haciendo click en "No" mientras se mantiene pulsada la tecla Mayúsculas.

22 septiembre 2007

CSS: hacks para igualar webs en distintos navegadores

A pesar de utilizar CSS, muchas veces no conseguimos que el resultado se vea igual en todos los navegadores. Para conseguir distinguirlos y crear estilos propios para cada uno, se han venido utilizando los famosos "hacks" que normalmente aprovechan bugs de los navegadores Internet Explorer (IE) para marcar diferencias y sobreescribir valores genéricos:

p{
color:#000; /* Definición genérica */
}
* html p {
color:#f00; /* Solo se modifica para IE6 */
}

p {
color: #000; /* Definición genérica */
#color: #f00; /* Se modifica sólo para IE */
}

.titulo {
height: 15px; /* Definición genérica */
#height: 15px; /* Se modifica sólo para IE */
_height: 21px; /* Se modifica sólo para IE6 */
}

#header {margin-bottom: 3em;} /* Definición genérica */
html>body #header {margin-bottom: 1em;} /* Se modifica sólo para IE6 */

.elemento {
width: 700px;
\width: 710px; /* Se modifica sólo para IE5.x */
wid\th: 710px; /* Se modifica para el resto de navegadores */
}

El uso de los hacks no es muy recomendable, puesto que en el futuro es probable que queden obsoletos y en los nuevos navegadores las páginas se vean incorrectamente. Además su uso hace que los documentos CSS puedan dejar de seguir el estándar. Así, siempre que sea posible, usaremos esta otra alternativa que nos permite cargar un css específico para cada navegador:

<!-- Usar ie6.css si el navegador es igual a Internet Explorer 6 -->
<!--[if IE 6]>
<link href="css/ie6.css" rel="stylesheet" type="text/css">
<![endif]-->

<!-- Usar ie.css si el navegador es Internet Explorer -->
<!--[if IE]>
<link href="css/ie.css" rel="stylesheet" type="text/css" />
<![endif]-->

<!-- Usar ie56.css si el navegador es anterior a Internet Explorer 7 -->
<!--[if lt IE 7]>
<link href="/css/ie56.css" rel="stylesheet" type="text/css">
<![endif]-->

<!-- Usar estilo si el navegador es Internet Explorer 6 o posterior -->
<!--[if gte IE 6]>
<style>.titulo {width: 150px;}</style>
<![endif]-->

Enlaces relacionados:
http://metalize.liveonstyle.com/2007/07/08/evita-los-hacks-en-tu-css
http://www.albertofortes.com/blog/?p=290
http://www.disenorama.com/articulos/el-modelo-de-cajas-en-CSS
http://css-discuss.incutio.com/?page=BoxModelHack

12 septiembre 2007

Problema de apagado automático en XP

Si tenemos el problema de que al apagar el Windows nos aparece el mensaje "Ahora puede apagar su equipo" y no se apaga automáticamente (aún teniendo una fuente ATX), es probable que sea por la configuración de la gestión de energía del XP o por no estar correctamente configurada en la BIOS. Para solucionarlo se puede probar con las siguientes opciones:

OPCIÓN 1: Vamos a [Inicio > Panel de Control > Pantalla], luego seleccionamos la pestaña 'Protector de Pantalla' y pulsamos en [Energía...]. Si te aparece la pestaña APM, activas aí la compatibilidad de ahorro de energía.

OPCIÓN 2: Vamos a [Inicio > Panel de Control > Opciones de Energía] y si aparece la pestaña APM, activamos "Habilitar la compatibilidad con la administración avanzada de energía"

OPCIÓN 3: Vamos a [Inicio > Panel de Control > Sistema] y en la pesataña 'Hardware' pulsamos en [Administrador de dispositivos]. Vamos al menú Ver y seleccionamos 'Mostrar dispositivos ocultos' y luego buscamos en los dispositivos "Equipo compatible con Advanced Configuration and Power Interface (ACPI)" para habilitarlo.

OPCIÓN 4: Entramos en la BIOS (pulsando [Supr/Del] al encender el equipo), buscamos la opción APM (Advanced Power Management) o ACPI (Advanced Configuration and Power Interface) y la ponemos en ENABLED para activarla.

Enlaces relacionados:
http://www.configurarequipos.com/doc19.html
http://www.forospyware.com/archive/t-68546.html
http://www.yoreparo.com/foros/reparacion_de_computadoras/49108.html

01 septiembre 2007

Javascript: codificación hexadecimal de caracteres

Si vamos a enviar con Javascript (mediante GET o POST) parámetros de un formulario que contienen tildes, eñes o caracteres raros, podemos utilizar la función escape(cadena) para generar una cadena válida y unescape(cadena) para invertir el proceso.

La función escape retorna la codificación hexadecimal del argumento en el conjunto de caracteres Latinos ISO. La función unescape retorna la cadena ASCII para el especificado valor hexadecimal decodificado.

Ejemplos:

document.write(escape("¡Qué hermoso niño!"));
Salida: %A1Qu%E9%20hermoso%20ni%F1o%21

document.write(unescape("%A1Qu%E9%20hermoso%20ni%F1o%21"));
Salida: ¡Qué hermoso niño!


 

Existen otras funciones similares como:

  • encodeURI(cadena) / decodeURI(cadena)
  • encodeURIComponent(cadena) / decodeURIComponent(cadena),
  • encodeURL(cadena) / decodeURL(cadena)
  • encodeURLComponent(cadena) / decodeURLComponent(cadena)

Más info y codificador on-line (inglés):
http://www.barelyfitz.com/projects/encoder/

Nota: Estas funciones pueden ser útiles para el envío automático de formularios web a una dirección de correo electrónico, cuando en el email no se visualizan correctamente los caracteres (por ejemplo para usar cuando enviamos parámetros al famoso script formmail).

28 agosto 2007

Anular e intercambiar teclas en XP

Cada tecla tiene dos códigos (ScanCode), uno lo emite cuando se pulsa (representado en rojo) y el otro cuando se deja de pulsar (representado en azul). Por ejemplo, en hexadecimal:

El ScanCode de la tecla S es: 001F
El ScanCode de la tecla L es: 0026
El ScanCode de la tecla CTRL izq. es: 001D
El ScanCode de la tecla CTRL dcho. es: E01D
El ScanCode de la combinación ALT+SUPR es: 0098

Para poder anular o cambiar teclas debemos ir al editor del registro ([Inicio > Ejecutar > regedit] + ENTER) y buscar la clave:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\KeyBoard Layout

Luego hay que crear un nuevo valor binario (REG_BINARY) llamado Scancode Map con la siguiente estructura:

00 00 00 00 (Cabecera)
00 00 00 00 (Flags)
00 00 00 00 (nº de teclas a modificar + 1)
00 00 00 00 (Código para la primera tecla a modificar)
...
00 00
00 00
(Código para la última tecla a modificar)
00 00 00 00 (Terminación)

Así, puesto que:

(
OJO que los números van al revés con respecto al ScanCode)

El código para anular la tecla CTRL izdo. (001D) es 00 00 1D 00
El código para anular la tecla CTRL dcho. (E01D) es 00 00 1D E0
El código para anular la combinación ALT+SUPR (0098) es 00 00 98 00
El código para cambiar la tecla S (001F) por la L (0026) es 26 00 1F 00

La estructura del valor a introducir para conseguir anular y cambiar lo de arriba sería:

00 00 00 00 (Cabecera)
00 00 00 00 (Flags)
05 00 00 00 (nº de teclas a modificar + 1)
00 00 1D 00 (Anular la tecla CTRL izdo.)
00 00 1D E0 (Anular la tecla CTRL dcho.)
00 00 98 E0 (Anular la combinación ALT+SUPR)
26 00 1F 00 (Cambiar la tecla S por la L)
00 00 00 00 (Terminación)

Lo que tendríamos que introducir en el valor binario del registro sería entonces:

00 00 00 00 00 00 00 00 05 00 00 00 00 00 1D 00 00 00 1D E0 00 00 98 E0 26 00 1F 00 00 00 00 00

Tabla de ScanCodes:
http://www.glue.umd.edu/~nsw/ench250/scancode.htm

Enlace relacionado:
http://pio9.com/22teclado.htm

08 julio 2007

Proteger carpeta en Windows XP

A veces, podemos querer mantener una carpeta protegida en una zona común del disco duro y que otros usuarios de nuestro PC (incluídos los administradores) no tengan acceso a ella. Ésto se puede hacer en Windows XP modificando convenientemente los permisos sin necesidad de recurrir a ningún programa específico:

  1. Vamos a Mi PC (o cualqueir ventana del exploraror de archivos) y en el menú Herramientas elegimos Opciones de carpeta...
  2. En la pestaña Ver, al final de todo desmarcamos "Utilizar uso simple de archivos" para poder acceder a la opciones avanzadas de seguridad de las carpetas y archivos.
  3. Creamos la carpeta a proteger y pulsamos sobre ella con el botón derecho para elegir la opción "Compartir y Seguridad..."
  4. En la pestaña Seguridad aparecen los usuarios y grupos de usuarios que por defecto tienen acceso a la carpeta. Si intentamos eliminarlos nos avisa de que debemos desactivar la opción de heredar permisos...
  5. Pulsamos el botón inferior [Opciones avanzadas...] y desmarcamos la casilla "Heredar del objeto principal las entradas de permisos relativas a los objetos secundarios. Incluirlas junto a..." tras lo cual nos aparecerá un cuadro de confirmación con varias opciones. Pulsamos [Quitar] y luego [Aceptar]. Nos avisarán de que hemos denegado a todos el acceso a la carpeta y que sólo el propietario podrá cambiar los permisos. Pulsamos [Sí] para continuar y volver a la ventana donde ahora aparecerá la lista de "Nombres de grupos o usuarios" vacía.
  6. Pulsamos [Agregar...], después [Avanzadas...], luego [Buscar ahora] y seleccionamos el usuario al que le querramos dar permiso de la lista (normalmente nuestro propio usuario).
  7. Pulsamos [Aceptar] hasta volver nuevamente a la lista donde aparecerá el usuario que acabamos de seleccionar. Los permisos normales que deben estar seleccionados (columna Permitir) son:
    • Lectura y ejecución
    • Mostrar el contenido de la carpeta
    • Leer
    • Escribir (si queremos)
  8. Pulsamos [Aceptar] para finalizar. Opcionalmente podemos volver a activar la opción desmarcada en el paso 2 si queremos dejar todo como estaba.
A partir de este momento los otros usuarios (aún siendo administradores) no podrán acceder a la carpeta.

05 junio 2007

CSS: centrar un div con tamaño absoluto

Cuando trabajamos con tamaños absolutos (position: absolute) no es sencillo centar un div en la página. Esta es una opción para un div de 300x200 pixels:

div {
position: absolute;
left: 50%;
top: 50%;
width: 300px;
height: 200px;
margin-top: -100px; /* mitad de la altura */
margin-left: -150px; /* mitad del ancho */
overflow: auto;
border: 1px solid red;
}

Información detallada:
http://www.programacionweb.net/articulos/articulo/?num=461

Para el caso de querer centrar un div no absoluto podríamos hacer lo siguiente:
  1. Crear un div que ocupe el 100%
  2. Ponerle tex-align:center;
  3. Dentro de ese div insertar otro del tamaño que sea
  4. Poner a este segundo div margin-left:auto; margin-right:auto;

04 mayo 2007

Narrator: Texto a voz en XP

Entre las opciones de accesibilidad de Windows XP está el Narrator que nos permite leer cualquier texto del S.O. en voz alta (Text-To-Speech) gracias a la SAPI (Speech Application Programming Interface). Por defecto el Windows XP trae una única voz en inglés: Microsoft Sam, que se puede probar desde [Inicio > Panel de Control > Voz].

Para activar el Narrator basta con ir a [Inicio > Ejecutar...], escribir narrator.exe y pulsar Enter. En la ventana que aparece podemos elegir varias opciones incluída la voz en caso de que dispongamos de más.

Un buen motor de texto-a-voz en español es Loquendo.

Más información:
http://support.microsoft.com/kb/306902/es

25 abril 2007

Cambiar aspecto barras desplazamiento con CSS

Para cambiar el aspecto de las barras de desplazamiento en las páginas web (sólo para Internet Explorer) podemos usar el siguiente código CSS:

<style type="text/css">
BODY {
scrollbar-face-color: #FDCF66;
scrollbar-highlight-color: #FDCF66;
scrollbar-3dlight-color: #FDCF66;
scrollbar-darkshadow-color: #FDCF66;
scrollbar-shadow-color: #FDCF66;
scrollbar-arrow-color: #FDCF66;
scrollbar-track-color: #FDCF66;
}
</style>

Generador de código: http://www.elhacker.net/scrollbars.htm

Más información:
http://www.programacionweb.net/articulos/articulo/?num=86

27 marzo 2007

Sumar horas a fecha actual en PHP

Si queremos sumar o restar una hora a la fecha actual en PHP (para ajustar el huso horario con respecto a GMT por ejemplo), podemos usar el siguiente código:

//Obtenemos la fecha actual:
$fecha=time();
//Queremos restar 3 horas a la fecha actual:
$horas = -3;
// Convertimos las horas a segundos y las sumamos:
$fecha += ($horas * 60 * 60);
// Le damos al resultado el formato deseado:
$fecha = date("Y-m-d H:i:s", $fecha );

Enlace relacionado:
http://es.php.net/manual/es/function.date.php

08 febrero 2007

Eliminar Barra de Navegación de Blogger

Para suprimir definitivamente la Barra de Navegación (Navigator Bar) de Blogger basta con modificar la plantilla HTML y poner al principio de la página (por ejemplo justo debajo de <body>):

<script language="javascript">
document.getElementById("navbar-iframe").parentNode.removeChild(document.getElementById("navbar-iframe"));
document.getElementById("space-for-ie").parentNode.removeChild(document.getElementById("space-for-ie"));
</script>

Nota: Vale para tanto para Internet Explorer como para Firefox, Mozilla, etc., pero sólo para la nueva plantilla de Blogger.

Para la plantilla tradicional debemos eliminar el espacio "extra" que queda arriba (por lo menos en Firefox) así que añadimos dentro del siguiente <div> después de <body>:

<div id="wrapper">
<script language="javascript">
document.getElementById("wrapper").style.marginTop="0px";
</script>

Nota: El id del div puede variar. Debemos cambiar "wrapper" por el id que aparezca en cada plantilla concreta (wrapper, wrap, header...).

07 febrero 2007

Google code

Recientemente descubrí por casualidad una nueva aplicación de Google que me dejó boquiabierto: Google code. Nada más y nada menos que un motor de búsqueda especializado en códigos fuente públicos de programas y aplicaciones que nos muestra la página y el trozo de código que se corresponde con el patrón de nuestra búsqueda (que por cierto admite expresiones regulares "regexp").

Aquí dejo el enlace del portal: http://code.google.com
y del buscador: http://www.google.com/codesearch

01 febrero 2007

Cambiar clave de XP

Si queremos cambiar la clave del producto de nuestro Windows XP podemos hacerlo siguiendo los siguientes pasos:

  1. Vamos a [Inicio > Ejecutar...], escribimos regedit y pulsamos [Aceptar] para abrir el editor del registro.
  2. Vamos a la clave [HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\Current Version\WPAEvents]
  3. Hacemos doble click en OOBETimer, cambiamos al menos un valor y pulsamos [Aceptar].
  4. Vamos a [Inicio > Ejecutar...], escribimos C:\Windows\System32\oobe\msoobe.exe /a y pulsamos [Aceptar].
  5. Hacemos click en "Sí, deseo llamar por teléfono a un representante de servicios al cliente para activar Windows" y después pulsamos [Siguiente].
  6. Hacemos click en Cambiar la clave del producto.
  7. Escribimos la nueva clave del producto en los cuadros "Nueva clave" y hacemos click en [Aceptar].
  8. Si vuelve a la ventana anterior, hacemos click en [Recordármelo más tarde] y reiniciamos el equipo.
Enlace relacionado: http://support.microsoft.com/kb/328874/es

16 enero 2007

Javascript: recargar página HTML

Existen 3 formas de recargar la página actual y se pueden usar en un botón, en un enlace u en otro elemento que ejecute el código Javascript.

Ejemplos:

<input type="button" value="Recargar página" onClick="window.location.reload()">



<a
href="" onClick="window.location.href=window.location.href">Recargar página</a>

Recargar página


<input
type="button" value="Recargar página" onClick="history.go(0)">



12 enero 2007

Aumentar ancho de banda en XP

Windows XP reserva el 20% del ancho de banda disponible en el sistema con el fin de ejecutar aplicaciones especiales. Esto se lleva a cabo mediante el denominado programador de paquetes QoS (Quality of Service) encargado de la optimización de redes locales, pero para los usuarios domésticos con un sólo PC esta limitación no es necesaria. Para deshabilitarla y hacer así más rápida nuestra conexión a internet, debemos realizar lo siguiente:

  1. Vamos [Inicio > Ejecutar...], escribimos gpedit.msc y pulsamos Aceptar.
  2. En la lista de directivas de grupo de la izquierda, seleccionamos [Configuración de Equipo > Plantillas Administrativas > Red > Programador de Paquetes Qos]
  3. En la ventana derecha, hacemos doble clic en la opción "Limitar el ancho de banda reservado", habilitándolo y poniendo 0% (o un valor más bajo que 20% si sólo queremos reducir la reserva) en "Límite de Ancho de Banda".
Más información