13 marzo 2008

Contar número de ficheros en Linux

Para contar el número de ficheros que hay en un directorio en Linux podemos usar el comando wc -l que cuenta el número de líneas. De esta forma haciendo:

> find -type f | wc -l

obtendríamos el número deseado.

Otros comandos interesantes son du (directory usage) para saber lo que ocupa un directorio recursivamente:

> du -h

df (disk free) para saber el espacio usado y libre en disco:

> df -h

Y free para saber la memoria usada y disponible:

> free -m

Los dos primeros admiten el parámetro -h (human readable), para que no muestre en bytes sino en KB o MB si el valor es alto y el último admite -b (Bytes), -k (KB), -m (MB) y -g (GB).

03 marzo 2008

Priorizar adaptador de red en Windows XP y Vista

Cuando tenemos varios interfaces de red es posible que necesitemos priorizar alguno para que los enrutamientos se realicen en un determinado orden (por ejemplo cuando instalamos Hamachi)

  • Windows XP: Vamos a [Inicio > Panel de Control > Conexiones de Red] y en el menú Opciones Avanzadas... elegimos "Configuración avanzada..." donde ya podremos ordenar seleccionando la Conexión deseada en el cuadro superior y pulsando arriba o abajo.

  • Windows Vista: Accedemos a las Conexiones de Red escribiendo ncpa.cpl en el campo Búsqueda que aparece en el Menú de Inicio y pulsando Enter. En la ventana pulsamos una vez la tecla ALT para que aparezca el menú, vamos a [Opciones Avanzadas...] y elegimos "Configuración avanzada..." donde ya podremos ordenar seleccionando la Conexión deseada en el cuadro superior y pulsando arriba o abajo.
Nota: para ver como están configuradas las rutas, se puede ejecutar el comando route print desde la Consola del Sistema.

19 febrero 2008

Mediawiki: Crear usuario y modificar barra lateral

MediaWiki es la aplicación en la que se ha basado la famosa Wikipedia, pero en ocasiones no es fácil encontrar la manera de realizar ciertas operaciones como crear un usuario o modificar la barra lateral (sidebar) como administrador (wiki sysop):

  • Crear una cuenta de usuario: introducimos en el campo de búsqueda Special:Userlogin y le damos a buscar. Si tenemos los permisos apropiados aparecerá la opción de crear una cuenta.

  • Modificar la barra lateral: introducimos en el campo de búsqueda: MediaWiki:Sidebar y le damos a buscar.

    Más información: http://www.mediawiki.org/wiki/Manual:Navigation_bar

29 enero 2008

Usando JSON con PHP

JSON (JavaScript Object Notation) se puede utilizar en lugar de XML para el intercambio de información con Javascript. Algunos llaman AJAJ en lugar de AJAX a la programación Javascript asíncrona con JSON. La clave para leer objetos JSON con Javascript es la función eval() que debe ser utilizada con precaución, ya que ejecuta cualquier código que se le pase como parámetro.

Para intercambiar información JSON entre Javascript y PHP existen dos funciones muy útiles (a partir de PHP 5.x): json_encode() y json_decode().

Ejemplo:

$i = array(
array("id" => 1, "name" => "linus"),
array("id" => 2, "name" => "bill"),
array("id" => 3, "name" => "steve")
);

echo json_encode($i);

El resultado será:
[{"id":1,"name":"linus"},{"id":2,"name":"bill"},{"id":3,"name":"steve"}]

Para utilizar los datos JSON en el cliente mediante Javascript usaremos eval() para leer el objeto enviado desde PHP:
var json = eval('(' + miRespuestaJSON + ')');
for(var i = 0; i < json.length; i++)
{
console.info(json.id + " " + json.name);
}

Fuente:
http://www.json.es/2007/07/09/usando-json-desde-php/

26 enero 2008

PNG transparente en Internet Explorer 6

Existen varias soluciones para tratar de solucionar este gran problema del IE6, una de ellas es incorporar en la página HTML (dentro de head) el siguiente código:

<!--[if lt IE 7]>
<script language="JavaScript">
function PNG_loader() {
for(var i=0; i<document.images.length; i++) {
var img = document.images[i];
var imgName = img.src.toUpperCase();
if (imgName.substring(imgName.length-3, imgName.length) == "PNG") {
var imgID = (img.id) ? "id='" + img.id + "' " : "";
var imgClass = (img.className) ? "class='" + img.className + "' " : "";
var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
var imgStyle = "display:inline-block;" + img.style.cssText;
if (img.align == "left") imgStyle += "float:left;";
if (img.align == "right") imgStyle += "float:right;";
if (img.parentElement.href) imgStyle += "cursor:hand;";
var strNewHTML = "<span " + imgID + imgClass + imgTitle
+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+ "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>";
img.outerHTML = strNewHTML;
i--;
}
}
}
window.attachEvent("onload", PNG_loader);
</script>
<![endif]-->

Nota: A veces puede tener efectos secundarios y descolocar algún elemento cercano a las imágenes ya que cambia la etiqueta img por span...

Más información:
http://homepage.ntlworld.com/bobosola/pnghowto.htm

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