Me pone programar

Más que me pone, digamos que me gusta y disfruto con ello

Me pone programar

Blog personal sobre PHP, JavaScript, CSS, Estándares, Flash i demás temas interesantes del mundo de la informática e Internet

Acentos en los subjects de los emails. Ampliado

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)

Categorías: Meponeprogramar, PHP
Tags: , , ,
Comentarios: Sin comentarios »

Hacer llamadas a funciones PHP desde XSL

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:
  1. <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:
  1. $xslt->registerPHPFunctions();

Ahora solo hay que llamar a la funcion PHP desde el código XSL:

XML:
  1. <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:
  1. 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

Categorías: PHP
Tags: , , ,
Comentarios: Sin comentarios »

Firebug Lite, por fin inspector de DOM i HTML para IE

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:
  1. <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

El lento gethostbyaddr de PHP

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

Categorías: Firefox, Google, Meponeprogramar, PHP
Tags: , , ,
Comentarios: Sin comentarios »

Firebug en español

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.

Categorías: Firefox
Tags: ,
Comentarios: Sin comentarios »

La lenta muerte de PHP4

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

Categorías: PHP
Tags:
Comentarios: Sin comentarios »

Que es jQuery. Parte I

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:
  1. <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:
  1. $("p").hide(); // Escondemos todas las p de nuestra web
  2.  
  3. $("#item").hide(); // Escondemos el elemento con id="item"
  4.  
  5. $(".miClase").hide(); // Escondemos los elementos con class="miClase"
  6.  
  7. $("p span").hide(); // Escondemos únicamente todos los span que haya dentro de los p
  8.  
  9. $("p span.miClase").hide(); // Escondemos los span con class="miClase" que haya dentro de p
  10.  
  11. $("p span#item").hide(); // Escondemos el span con id="item" que hay dentro de p
  12.  
  13. $("p > span").hide(); // Esconde los span que son hijos directos de p
  14.  
  15. $("p+div").hide(); //Esconde todos los div que esten precedidos de un p
  16.  
  17. $("p~div").hide(); //Esconde todo los div que hayan sido precedido por p
  18.  
  19. $("input[type=radio]").hide(); // Esconde todos los inputs que sean del tipo radio
  20.  
  21. $("a[href^=http://]").hide(); // Esconde todos los links que su href empiece por http://
  22.  
  23. $("a[href$=.com]").hide(); // Esconde todo los links que su href acabe por .com
  24.  
  25. $("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

Categorías: JavaScript, jQuery
Tags: ,
Comentarios: Sin comentarios »

Acentos en los subjects de los mails

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.

Categorías: PHP
Tags: , ,
Comentarios: 1 comentario »

IE, Javascript y los memory leaks

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.

Categorías: JavaScript
Tags: , ,
Comentarios: Sin comentarios »

jQuery UI 1.5

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

Categorías: AJAX, JavaScript, jQuery
Tags: ,
Comentarios: Sin comentarios »

« Entradas anteriores