Administra tu Blog

¡Crea tu Blog Ya! Fácil y Gratis

Categoría: Trucos

DNS Wildcards en GNU/Linux

ketari 14/12/2006 @ 18:29

Como comentaba en Posts anteriores, en unas semanas Nireblog se mudará a un Servidor dedicado donde tendremos el control total del servidor, debido a esto he empezado a trastear un poco con la distribución GNU/Linux más estable, Debian, ¿Porqué Debian?, por esto. (Ni que decir tiene que lo que explico a continuación se puede hacer exctamente igual en Ubuntu, Knoppix y demás distribuciones basadas en Debian y también en el resto Red Hat, Fedora, OpenSUSE, e incluso en FreeBSD ...

Seguir leyendo el resto »

UTF8 y estandares web matrimonio perfecto para la internacionalización

ketari 21/07/2006 @ 21:18

Primero vamos a definir estos conceptos:

UTF8 es una manera de codificar documentos en Unicode que permite representar todos los caracteres de los distintos alfabetos (latino, árabe, cirilico, chino, ...) sin que aparezcan caracteres extraños

Estándares web sirven entre otras cosas para separar completamente el contenido de un sitio web de la presentación (Contenido vs diseño) siguiendo unas recomendaciones dadas por la W3C.

A la hora de crear una aplicación web nos solemos plantear que es lo queremos para hoy pero también tenemos que pensar en las posibilidades que se puedan dar en un futuro. Una de esas posibilidades puede ser añadir nuevos idiomas (Internacionalización).

Si no tenemos previsto una serie de factores desde un primero momento, puede ser una auténtica pesadilla el adaptar un sitio para un idioma como el Árabe, por ejemplo, que se escribe de Derecha a Izquierda.

Este planteamiento me lo hice antes de empezar a desarrollar Nireblog, y el resultado es el siguiente Versión en Español y Versión en Árabe.

Lo primero que hay que hacer es utilizar la codificación UTF-8 para todos los documentos, de esta manera nos evitamos el tener que utilizar una codificación distinta para cada alfabeto (Europeo Ocidental ISO-8859-1, Árabe ISO-8859-6, Chino big5, ...), teniendo que duplicar todos nuestros archivos por cada idioma nuevo que añadamos. Con UTF-8 lo único que cambiarán serán las cadenas de texto el resto será igual para todos los idiomas.

Ahora viene la parte más divertida como hacer que una página en Español y otra en Árabe se vean de distinta manera sin tocar los archivos HTML (excepto 3 letras), vamos a ilustralo con 2 imagenes:

Pantallazo de la versión en Árabe

Pantallazo de la versión en Español

La única diferencia entre un docmento y el otro es la siguiente linea:

En Arabe

Ponemos dir="rtl" Right to Left

En Español

Ponemos dir="ltr" Left to Right

Para cambiar el resto se ha modificado el archivo CSS y muy poco también, algún float, text-align y font-size.

Imagínense que lo hubieramos diseñado a la vieja usanza, utilizando tablas para posicionar los ditintos elementos de la página, seguramente tendríamos que tener un archivo para los idiomas que se escribe de Derecha a Izquierda y otro para los que se escriben de Izquierda a Derecha.

Por supuesto la diferencia entre uno y otro sitio serán las cadenas de texto que estarán en un fichero distinto según el idioma.

La idea saqué de Minid

Gestionar Cookies con Javascript

ketari 23/01/2006 @ 12:26

Tanto en NiNaiz como en GuGara la mayoría de las páginas están cacheadas, es decir, cada vez que hay una petición de una página, en vez de ejecutarse todas las consultas a Bases de Datos y código PHP para generar la página, se muestra una página estática generada anteriormente.

Esa página sólo se volverá a generar de nuevo cuando haya algún cambio en ella.

Ésto permite no sobrecargar el servidor con un montón de consulas, con el riesgo de que el proveedor de Hosting me cancele la cuenta.

Éste sistema de cacheo no me permite gestionar las cookies desde el servidos (con PHP), ya que las páginas están creadas anteriormente, con lo que para poder tener un sistema para recordar datos en los Formularios he tenido que hechar mano de Javascript.

Javascript es un lenguaje que se ejecuta en el navegador del cliente y que tiene problemas de accesibilidad, ya que mucha gente no lo tiene instalado en su navegador o utilizan navegadores que no lo soportan (Lynx), en éste caso como no afecta a la navegación, es decir, el sitio funciona perfectamente, lo único que si no se tiene Javascript no recordará los datos introducidos en el formulario.

Para ello he utilizado 2 funciones, la primerar getCookie es una función muy utilizada y explicada en muchos sitios de Internet que lo que hace es darte el valor de la cookie que le pases como name.

<SCRIPT LANGUAGE="JavaScript">
function getCookie(name) {
var dc = document.cookie;
var prefix = name + "=";
var begin = dc.indexOf("; " + prefix);
if (begin == -1) {
begin = dc.indexOf(prefix);
if (begin != 0) return null;
} else {
begin += 2;
}
var end = document.cookie.indexOf(";", begin);
if (end == -1) {
end = dc.length;
}
return unescape(dc.substring(begin + prefix.length, end));
}

La segunda función lo que hace es cojer el valor de la cookie (llamando a la función getCookie) y si hay algún valor lo inserta en input correspondiente del formulario (nombre, correo o web) y además activa el checkbox de Recordar datos.


function insertarCookie() {
var nombre = getCookie('blog_nombre');
var correo = getCookie('blog_correo');
var web = getCookie('blog_web');
document.EscribirComent.nombre.value = nombre;
document.EscribirComent.correo.value = correo;
document.EscribirComent.web.value = web;
if ((correo!=null) || (nombre!=null) || (web!=null)) {
document.EscribirComent.recordar.checked=1;
} else {
document.EscribirComent.recordar.checked=0;
}
if (nombre==null) document.EscribirComent.nombre.value = '';
if (correo==null) document.EscribirComent.correo.value = '';
if (web==null) document.EscribirComent.web.value = '';

}
</SCRIPT>

Luego lo único que hay que hacer es indicar que se ejecute la función cuando se cargue la página.


<body onload='insertarCookie()'>

Las cookies se graban cuando se realiza la inserción del comentario, mediante PHP.

Como crear un sencillo sistema de Tags o Etiquetas con PHP y MySQL

ketari 11/01/2006 @ 11:30

Últmamente se están poniendo de moda las Folcsonomias, que son una nueva forma de categorizar conjuntamente con más personas y que es utilizado por servicios tan populares como Delicious y Flickr entre otros.

Yo para no ser menos que éstos dos servicios quería implementarlo en GuGara.com y NiNaiz.com tanto para las imágenes como para el Wiki que próximamente aparecerá.

Al final quedaría de ésta manera:

antipena aragon arguelles asturies bilbao burgos chiapas donostia elektronikoak forosguays galiza iturrama jalmoa paislliones

Para ello me fue tremendamente util la función de PHP ksort

$sql = "select num, textotag from tag order by num DESC";
$res = mysql_query($sql);
while ($reg = mysql_fetch_array($res)) {
if ($i==1) {
$maxtag = $reg["num"];
$salida[$reg["textotag"]] = "<span style=\"font-size: 2em;\">". $reg["textotag"] ."</span$gt; ";
}
else {
$fontsize = ((2*$reg["num"])/$maxtag);
if ($fontsize <= 1) $fontsize=1;
$salida[$reg["tag"]] = "<span style=\"font-size: ". $fontsize ."em;\"><a href=\"/tag/". $reg["textotag"]) ."\">". $reg["textotag"] ."</a></span> ";
}
$i++;
}
ksort($salida);
foreach ($salida as $value) {
echo $value;
}

PHP es sencillo, es util, es libre.

Problema con MySQL 4.1 phpMyAdmin y utf-8

ketari 17/11/2005 @ 01:42

El caso es que estaba creando una apliación y decidí siguiendo ésta recomendación utilizar como codificación UTF8.

Todo me iba de maravilla en mi servidor local (MySQL 3.xx). Al subirlo al Hosting me encuetro que tienen instalada la versión 4.1.3 y veo que hay algunos cambios (Collation, ...) le indico como collation utf-8_spanish_ci y mediante el phpMyAdmin importo todas las tablas y el contenido, que previamente había exportado desde mi servidor local.

Al acceder al contenido desde el phpMyAdmin veo que los registros que tienen algún caracter no-ASCII (ñáéíóú...) no se ven correctamente.

Vista desde phpMyAdmin
Y al insertar registros no-ASCII desde el phpMyAdmin no se ven correcatmente en la aplicación web.

Vista desde Aplicación Web

El caso es que tenía todo en utf8, servidor web, MySQL, phpMyAdmin, en el HTML, ... y no había manera de que funcionara correctamente.

La solución era tan simple como ésta:

Después de hacer la conexión y seleccionar la BD

$enlace= @mysql_connect($host,$user,$pass)
@mysql_select_db($db_name,$enlace) or die(mysql_error());
Añadir la siguiente línea

@mysql_query("SET NAMES 'utf8'");
Y ya está todo solucionado

Después de revisar todos lo Foros habidos y por haber, postear el problema en los Foros de phpMyAdmin y no encontar respuesta, la solución me la enviaron por correo una persona que había visto mi pregunta en algún sitio.

Espero que a alguien le sea de utilidad, a mí ésta chorrada me ha vuelto loco durante unas cuantas semanas.

Actualización: Si quieres pasarte a UTF8 te recomiendo éste Post lo explica todo clarito, clarito.