15/08/2008 a las 10:42 por Shox
Como pudimos ver en otro post, poner acentos o carácteres extraños en los subjects de los emails ya no es un misterio.
Leyendo el fabuloso libro “Building Scalable Web Sites - The Flickr way” he profundizado más en el tema.
El formato se compone de lo siguiente:
=?utf-8?Q?hello_=E2=98=BA?=
que corresponde a:
=?charset?encoding?encoded-text?=
Vamos por partes, el charset utilizaremos siempre utf-8, ya que es nos posibilita enviar cualquier tipo de cadena de carácteres, sin limitar el alfabeto o idioma.
El encoding, puede ser B o Q, y depende de su codificación, el texto codificado será de una manera o otra:
B - Codificación en Base64: Es la que utilicé en el anterior post, codificando todo el string posteriormente en base64.
Q - Codificación en Quoted Printable (RFC 3548): Cada byte representa un literal comenzando por el símbolo igual (=) seguido por dos dígitos hexadecimales. Por ejemplo el byte 0×8A se representaría con =8A. Los espacios (0×20) serán substituidos por el literal underscore (_, byte 0×5F). Los demás carácteres alfanuméricos se quedarían como están.
¿Cual es la mejor opción? Ambas generarán un subject bien formado, peró quizas en modo Q, el texto codificado final es un poco más human-friendly, que el codificado en base64.
Amazon - Building Scalable Web Sites; de Cal Henderson (O’Reilly)
12/08/2008 a las 07:32 por Shox
Hace poco me dijeron que podia hacer llamadas a funciones PHP desde XSL que devolvieran strings. Hoy mismo he investigado un poco el tema, y ha sido más fácil de lo que me esperaba:
1.- Añadir a la hoja de estilo XSL el namespace de PHP para que valide:
XML:
-
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
2.- En el parser PHP, habilitar las llamadas en PHP con esta línea, justo después del constructor
PHP:
-
$xslt->registerPHPFunctions();
Ahora solo hay que llamar a la funcion PHP desde el código XSL:
XML:
-
<xsl:value-of select="php:function('getMessage','welcome',string($id))"/>
Donde getMessage es el nombre de mi funcion, i los demás párametros son añadidos a dicha función. Generaría algo así:
PHP:
-
getMessage('welcome',id);
donde id es una variable de XSL, de ahí lo de string($id).
Con simplemente esto, podemos hacer llamadas a PHP, posibilitando que generen incluso XML, el cual será tratado por el XSL.
XSLTProcessor
registerPHPFunctions
02/08/2008 a las 06:12 por Shox

La nueva versión de Firebug Lite, 1.2, ha añadido a su funcionalidad de sólo como uso de consola de debug JavaScript, y ahora se comporta de una manera más parecida a la de su hermano mayor. Ahora es capaz de inspeccionar el DOM, hacer track de los XHRs, y navegar por el HTML, CSS y JavaScript.
Por fin una versión que será muy útil a los desarrolladores web, para superar la dificil tarea de programar en Internet Explorer. Funciona en todos los navegadores, como Safari y Opera.
Para instalarla en cualquier página web sólo tienes que poner el siguiente código:
HTML:
-
<script type='text/javascript'src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
Firebug Lite
Vía: No al IE6 - Navegadores web
Categorías:
AJAX,
Debug,
JavaScript
Tags:
AJAX,
Debug,
DOM,
firebug,
firebug lite,
HTML,
Internet Explorer,
JavaScript,
Opera,
Safari Comentarios:
Sin comentarios »
02/08/2008 a las 05:57 por Shox
La función gethostbyaddr de PHP devuelve el host name de una IP dada. Puede ser útil por ejemplo para saber si el visitante es un bot de Google o Yahoo, para poder contabilizar bien las visitas o tener un control más profundo del visitante.
Todo sería perfecto si esta función funcionara correctamente. Utilizandola en un proyecto, me di cuenta que tardaba demasiado tiempo en generar toda la web, y en un principio pensaba que fuera un error mio, ya que se hacian consultas a una DB y se generaba una caché, pero resulto ser esta aparente inofensiva función. Quitandola he dividido entre 10 el tiempo de generación, lo que nos puede dar una referencia de lo poco bien planteada que está dicha función.
En el foro de PHP, otros usuarios también se han dado cuenta del echo, y hasta han echo alguna propuesta para solucionar el problema que puedes ver aquí
El problema parece que viene que va a buscar la información a varios DNS y al haber algunos de ellos caidos, se demora el proceso. El usuario que hizo el script, propone una conexión UDP, pero para ello necesitamos saber la IP del DNS
29/06/2008 a las 11:11 por Shox

Hoy ha salido una nueva versión del famoso e importantísimo plugin Firebug para Firefox. La versión, 1.2.0 B4 pide hoy su descarga para los usuarios del plugin, dando soporte para el Español. La anterior versión no disponia de muchas novedades, basicamente el soporte oficial de Firefox 3. A partir de ahora, Inspect será Inspeccionar o Console será Consola.
Otros idiomas soportados además del español y el inglés: danés, francés, italiano, japones, coreano, holandes, portugués, sueco, turco y chino. El idioma es reconocido por el propio programa, sin, aparentemente, poder cambiarlo.
Próximamente esperamos explicar un poco más sus bondades con algunos trucos.
29/06/2008 a las 08:19 por Shox

Estas semanas me he estado peleando con unas máquinas que corrían bajo PHP4 y que queria poner una plataforma desarrollada para PHP5, los problemas han sido muchos y variados:
- Primero no soporta de manera total la transformación de XSL, en la cual se basaba prácticamente todo el sistema. Por suerte, el fron-end es en flash y sólo debo generar con PHP un XML.
- Funciones que no existen en PHP4. No voy a poner ni todas ni unas cuantas, hay bastante funciones muy útiles que no estaban en PHP4 y que si están en PHP5.
Para más inri, los administradores del sistema no querian tocar la máquina para instalarle ningún módulo, asi que tenia disponia de un PHP 4.4.7 a pelo, que me tenia que montar como quisiera para hacer funcionar toda la aplicación, eso si, con los mismos timmings que antes de conocer este problema.
Pense en hacer una guía de como migrar de PHP5 a PHP4, pero no veo lógico que seamos los programadores los que nos tengamos que acomodar a una vieja plataforma por culpa de no querer actualizar.
Recordemos que PHP5 está entre nosotros desde hace 4 años, y hace justo 1 que el equipo decidió dejar de dar soporte a PHP4, viendo que la nueva versión ya era totalmente estable.
Así que administradores del mundo, migrar a PHP5 si aun no lo habeis echo, y recordar que PHP6 está aquí en la esquina.
Migrar de PHP4 a PHP5
29/06/2008 a las 07:28 por Shox

jQuery es un framework de JavaScript para facilitar, entre otros, el acceso a los elementos del DOM, los efectos y sobretodo las llamadas en AJAX. jQuery podría ser otro framework más como script.aculo.us, MooTools, YUI pero en cambio disponemos una gran potencia con una facilidad mucho mayor que sus competidores.
Primero de todo deberemos de incluir la libreria en nuestra web: por ejemplo
HTML:
-
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>
Primero de todo vamos a seleccionar un elemento de nuestro HTML, y por ejemplo, esconderlo. Utilizaremos la función hide() que, efectivamente, esconde dicho elemento html, pero ahora nos fijaremos más en como acceder al árbol DOM de HTML.
JavaScript:
-
$("p").hide(); // Escondemos todas las p de nuestra web
-
-
$("#item").hide(); // Escondemos el elemento con id="item"
-
-
$(".miClase").hide(); // Escondemos los elementos con class="miClase"
-
-
$("p span").hide(); // Escondemos únicamente todos los span que haya dentro de los p
-
-
$("p span.miClase").hide(); // Escondemos los span con class="miClase" que haya dentro de p
-
-
$("p span#item").hide(); // Escondemos el span con id="item" que hay dentro de p
-
-
$("p > span").hide(); // Esconde los span que son hijos directos de p
-
-
$("p+div").hide(); //Esconde todos los div que esten precedidos de un p
-
-
$("p~div").hide(); //Esconde todo los div que hayan sido precedido por p
-
-
$("input[type=radio]").hide(); // Esconde todos los inputs que sean del tipo radio
-
-
$("a[href^=http://]").hide(); // Esconde todos los links que su href empiece por http://
-
-
$("a[href$=.com]").hide(); // Esconde todo los links que su href acabe por .com
-
-
$("a[href*=www]").hide(); // Esconde todo los links que en su href aparezca "www"
Como podemos ver, jQuery siempre (o casi siempre, ya lo veremos más adelante) actua sobre elementos de HTML, seleccionandolos en lo que llamaremos selector, y le aplicaremos funciones:
$(selector).funcion();
Ya veremos más adelantes que la selección de elementos del DOM es más potente aun, y que las funcionalidades, a parte de que se pueden unir, son casi infinitas.
jQuery
29/06/2008 a las 06:58 por Shox
La codificación de los páginas ha tenido muchos misterios para mi durante mucho tiempo, pero poco a poco los he ido salvando todos. Uno de los que me tenía más preocupado, por que lo había provado casi todo, es el de subjects o asunto de los emails.
Siempre había conseguido enviar emails bien codificados, pero el asunto siempre llegaba con X , interrogantes o demás símbolos raros. La solución como siempre, la tiene Google.
Si queremos enviar un asunto tal que "Título del mensaje" la letra í acentuada debe estar codificado en quoted printable, y el mensaje debe de tener unos carácteres especiales para especificarle codificación:
=?UTF-8?B?T=EDtulo del mensaje?=
Que en PHP podemos conseguirlo mediante:
$title=”=?UTF-8?B?”.base64_encode($title).”?=\n”;
y así conseguimos pasar, en el ejemplo, la í acentuada por su correspondiente en ASCII: =ED
Si no la teneis ya, esta es una línea básica que siempre deberia ir en vuestros sites donde se envien emails.
29/06/2008 a las 06:47 por Shox
Recuerdo del blog de Omatech, un problema que tuvo David con los memory leaks del Internet Explorer 6 usando Javascript.
Traduzco al castellano el problema la solución:
"...la navegación por la web era fluida por Firefox e Internet Explorer, pero pasaba a ser excesivamente lenta en el segundo después de algunas iteraciones.
Despues de varias pruebas, encontra algo interesante:IE: Where’s my memory?. Segun parece Internet Explorer no gestiona bien los closures en Javascript de forma que el garbage collector automático utilizado en el ECMAScript no funciona como debería en Internet Explorer. Podemos encontrar una buena explicación de que es un closure en IE: Where’s my memory? o en Javascript Closures.
Una vez echo los cambios en varios sitios, la navegación era ligeramente más fluida, pero el problema seguía estando. ¿Que podría ser? Finalmente, lo que parecía ser como isolate-your-code-developing, encontre el problema, i como sucede a menudo resultaba ser menos importante de lo que podíamos pensar (ahora es fácil decirlo). En la web se utilizaba un javaScript con el tag de inicio siguiente:
<script language="javascript">
En cambio, según las especificaciones de W3C, el atributo language está en desuso, i en su lugar instan en utilizar el atributo type, que por otra parte, es obligatorio. Así que el tag de inicio mínimo deberia de ser:
<script type="text/javascript">
Este cambio resuelve finalmente el problema planteado..."
Con este ejempo podemos ver la importancia de que las especificaciones están para algo, y que ampararse en lo que uno aprendio hace 8 o 10 años no tiene sentido.
29/06/2008 a las 06:27 por Shox

Reciendtemente fue presentada la nueva versión de jQuery UI, donde principalmente se unificant y facilitan las cosas. Entremos un poco en detalle:
Se ha echo refactoring de los métodos utilizados, por ejemplo .dragable() unifica todas las funcionalidades de los drag&drop. Para ello se elimina la necesidad de ciertas extensiones que ahora vienen en el core de jQuery (como jquery.dimension.js) o jQuery UI (como ui.mouse.js). También se facilita la creación de generar nuevos plugins para jQuery UI.
Nuevos y mejores efectos. Si algo le faltaba a jQuery en efectos con los que competir con script.aculo.us. Ahora se soluciona añadiendo nuevos y mejores efectos, de los cuales, algunos no estan ni en el framework que comentaba. Personalmente me ha dejado impresionado el efecto de explsión en varios trozos. No dudeis en verlos en acción: jQuery UI en acción