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

Redimensionado líquido con PHP

11/10/2008 a las 07:37 por Shox

No hace ni dos años, un grupo de investigadores presentaban un algoritmo de redimensionamiento sin distorsión de las partes más importantes de la imagen. El llamado Seam Carving o redimensionamiento líquido consigue eliminar linias horizontales o verticales poco relevantes en la imagen, para así poder cambiarle el tamaño. Pero lo mejor es ver un vídeo para ilustrar de lo que hablo.

Como me toca inplementarlo en C++, habia pensado si alguien se le habia ocurrido integrarlo en librerías de imágenes de PHP. La respuesta es que sí

La libreria ImageMagick añadió esta funcionalidad en la versión 6.3.8-2. No he tenido tiempo de provarla, pero la verdad es que más fácil de utilizar, imposible.

PHP:
  1. <?php
  2. /* Create new object */
  3. $im = new Imagick( 'test.jpg' );
  4. /* Scale down */
  5. $im->liquidRescaleImage( 500, 200, 3, 25 );
  6. /* Display */
  7. header( 'Content-Type: image/jpg' );
  8. echo $im;
  9. ?>

Seam Carving for Content-Aware Image Resizing [Artículo original]

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

Validar un email mediante PHP

08/09/2008 a las 01:43 por Shox

Una de las cosas que muchas veces se pasan por alto en los formularios de registro, es el validar que el email sea lo más válido posible. No conseguimos hacer maravillas (emails como example@example.com seguirán siendo posibles) pero restringimos tener información incorrecta en la DB.

Hay miles de formas de hacerlo, pero yo propongo esta para PHP:

PHP:
  1. define("REGEXP_MAIL_1", "^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
  2.  
  3. define("REGEXP_MAIL_2", "(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)");
  4.  
  5. if( eregi(REGEXP_MAIL_2, $email) or !eregi(REGEXP_MAIL_1, $email)) {
  6. // La dirección de e-mail es incorrecta
  7. }

Como Extra bonus, he sacado una imagen de archivo, de las típicas que se solían poner en todas las páginas webs para linkar con el mail. Viva la web 1.0

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

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 0x8A se representaría con =8A. Los espacios (0x20) serán substituidos por el literal underscore (_, byte 0x5F). 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 »

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 »

« Entradas anteriores