PHP Conference 08 - Barcelona

Eventos, PHP, Programación por fillito el 28-09-2008

Etiquetado como : , , , , ,

PHP Conference 08 - BarcelonaÉste fin de semana asistimos ivan, munix , alex y yo al PHP Conference 08 que se celebraba en Cornellá , Barcelona.

Después de un accidentadísimo viaje en el que pillamos un tren de 9 horas desde Madrid que pensábamos teníamos camas, llegamos a Barcelona. Pillamos el metro hasta Cornellá caminamos hasta llegar a estar a unos 50 metros del Citylab, donde se celebraba el evento. Al llegar a esa altura, por alguna extraña razón pensamos : “No, … creo que por aquí no es. Vamos a dar la vuelta y tomar otro camino”. Creo que llegamos a caminar unos 4 kilómetros y a tirar a la basura la hora de antelación con la que habíamos llegado. Entonces llamamos a un taxi que nos llevó al Citylab. Imaginaos nuestras caras cuando nos dimos cuenta lo cerca que estubimos de allí.

Después de acreditarnos, entramos a tiempo a la primera charla de Marcus Bointon sobre Emailing en PHP. Fué bastante entretenida. Nos contaron qué librerías había disponible para el envio de mails desde php y sus características. Aunque luego la explicación detallada, trucos, consejos y demás, estuvo enfocada al uso de phpmailer.
Luego fuimos a una interesantísima charla llamada “How to Pimp High Volume websites” por Jens Bierkandt,  uno de los desarrolladores de Softonic. Esta es la charla que más me gustó y a la que creo que más pro,vecho sacaré. Nos hablaron tanto de cómo organizar una arquitectura basada en balanceo de servidores web, replicación de servidores de bases de datos, cachés, uso de memcached, utilidades de diagnóstico y seguimiento , etc…
Me alegró saber que todas las acciones que habiamos llevado a cabo en minube nos las recomendaron allí, pero también me alegró conocer nuevas formas adicionales que aún no habíamos llevado a cabo.

Luego asistimos a la ponencia de Zoë Slattery sobre indexación y motores de búsqueda en php. Ésta me interesó menos, ya que no se habló sobre metodologías a seguir, o formas de desarrollar un buscador , sino del comportamiento interno de php a la hora de analizar formalmente los textos, extracción de tokens , etc…

La última de las charlas fué la de XDebug por Derick Rethans, donde nos presentaron la herramienta de debuggin y nos explicaron cómo configurarla, y ponerla en práctica. Además de algunos trucos, herramientas complementarias e incluso extensiones de firefox para trabajar con el debuggin de XDebug.

Me perdí una charla sobre SQLite 3 , ya que estaba un poco cansado y aproveché para conectarme a internet un rato , y cargar el portatil (que durante el viaje escasearon mucho los enchufes)

A las 6 o así acabó todo con la keynote de despedida y un sorteo de algunos regalos (no me llevé nada :P).
Después de eso ya sólo nos quedó otras 9 horas de viaje de vuelta en el tren Estrella de Renfe … que dudo vuelva a coger en mi vida.
Si queréis podeis ver algunas de mis fotos del viaje y la conferencia, y algunas otras de Alex

Google Developer Day 08′

Eventos, Programación por fillito el 28-09-2008

Etiquetado como : , ,

El jueves pasado fué el Google Developer Day 08′ en el Parque de Atracciones de Madrid. Y cómo no ? allí estuvimos.

Junto a los chicos de nvivo, alex e ivan, me acredité a a las 9 de la mañana. Y, después de unos regalitos de Google (un cuaderno, un boli , publicidad y un muñequito pendrive), nos dirigieron a una pequeña carpa donde nos ofrecieron un pequeño desayuno.
Nos dieron una pequeña charla introductoria de bienvenida, y ya de allí nos dirigimos a los distintos talleres y conferencias.

Yo asistí a la de GEO, Google Web Toolkit , Open Social, Consejos para el desarrollo de start-ups, y Android.

Me quedo sobre todo con las dos primeras. Nos explicaron todas las novedades que habían sacado en las últimas versiones, y me sirvió para sacar ideas para implementar en minube.
Me quedé totalmente boquiabierto con la potencia y posibilidades que te ofrece GWT. Creo que en las próximas semanas le echaré un ojo más a fondo y probaré qué cosillas se pueden hacer.

Otro de los grandes momentos del día, fué la ponencia de Eduardo Manchón de panoramio sobre el desarrollo de producto para start-ups. Tomé muchas ideas de los consejos que nos proponía Eduardo, y al final de la charla pude hablar con él personalmente y saludarle.

Después de todas las ponencias fué el acto de despedida. Donde entregaron los premios a los proyectos ganadores de los talleres, de los que mi amigo gafeman era uno de los gandores.
Poco después, Google nos tenía organizada una pequeña fiesta con música, futbolines, máquinas recreativas, aperitivos y barra libre !! Además nos abrieron gratis la atracción “La Lanzadera” durante una hora.

La verdad es que un 10 para la organización, que nos ofreció un fantástico día de charlas interesantísimas, nos dió de comer y beber gratis, y la oportunidad de conocer y charlar con los ingenieros y excepcionales ponentes.

El próximo año espero repetir :P

Evitar links externos con Amazon S3

Amazon Web Services, PHP, Programación, S3 por fillito el 14-09-2008

Etiquetado como : , , ,

Si hemos elegido Amazon S3 como sistema de almacenamiento virtual , quizás nos interese tener almacenados archivos que se puedan descargar libremente por cualquier usuario, y que además puedan ser linkados desde cualquier sitio. Pero en la mayoría de los casos tendremos almacenados nuestros archivos y no nos gustará que nadie nos enlace directamente y tener que soportar los gastos de transferencia y almacenamiento por él.

Voy a explicar cómo, con un sencillo script en php conseguiremos que nuestros archivos de S3 estén totalmente protegidos y que sólo puedan ser accesibles desde nuestro dominio.

Lo primero de todo, es conocer dos características que Amazon nos prové con sus APIs:
- Los ACL (Access Control List) : que nos permite definir los permisos de lectura-escritura-ejecución de nuestros bucket y objetos.
- Las URLs Firmadas : que nos permite acceder temporalmente a nuestros archivos protegidos, a través de una url que incluye una firma y un tiempo de expiración de los permisos. Éstas URLs las podremos generar con nuestro script, y llevarán como parámetro nuestra firma generada en tiempo de ejecución, que lleva implicita el tiempo de caducidad de la url.

La primera medida es aplicar permisos exclusivo de lectura para nuestro usuario (usando los ACLs) a todos los archivos que queramos proteger, para que sea imprescindible una validación al acceder a ellos.
Para generar nuestro script , necesitaremos echar mano de la clase Crypt/HMAC para construir el hash en sha1 que Amazon S3 requiere.
Lo primero será crear nuestra función para  generar nuestra firma:

PHP:
  1. require_once 'Crypt/HMAC.php';
  2. function hex2b64($str) {
  3.    $raw = '';
  4.    for ($i=0; $i <strlen($str); $i+=2) {
  5.       $raw .= chr(hexdec(substr($str, $i, 2)));
  6.    }
  7.    return base64_encode($raw);
  8. }
  9. function makeSig($str) {
  10.    $secretKey="Llave secreta que nos proporciona Amazon para nuestra cuenta";
  11.    $hasher =& new Crypt_HMAC($secretKey, "sha1");
  12.    $signature = hex2b64($hasher->hash($str));
  13.    return($signature);
  14. }

Lo siguiente, será crearnos una función para construir nuestra URL firmada :

PHP:
  1. function getSignedURL($bucket, $key, $expires=120){
  2.    $accessKeyId="accessKeyId que nos proporciona Amazon con nuestra cuenta";
  3.    $expires = time() + $expires;
  4.    $resource = $bucket."/".urlencode($key);
  5.    $stringToSign = "GET\n\n\n$expires\n/$resource";
  6.    $signature = urlencode(makeSig($stringToSign));
  7.    $signedUrl="http://s3.amazonaws.com/$resource?AWSAccessKeyId=$accessKeyId&Expires=$expires&Signature=$signature";
  8.    return $signedUrl;
  9. }

Ésta función nos devolverá la url firmada, que estará disponible durante el tiempo (en segundos) que hayamos establecido en el parametro $expires (120seg por defecto)

Ahora ya sólamente nos falta un script que nos lance al contenido, pero que nos proteja de links externos a nuestro dominio.
Para ésto simplemente comprobaremos si existe el campo HTTP_REFERER en nuestra variable $_SERVER , que nos indicará que estamos accediendo a ésta url desde otra url de referencia , y que nuestro dominio (extraido desde $_SERVER['HTTP_HOST']) esté contenido en él.

PHP:
  1. function get_amazon_url($amazon_bucket,$amazon_object){
  2.    if(isset($_SERVER['HTTP_REFERER']) && strstr($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST']))   {
  3.       $url=getSignedURL($amazon_bucket,$amazon_object,60);
  4.       header('Location:'.$url);
  5.    }else{
  6.       echo 'Éste contenido ha sido enlazado ilegalmente';
  7.    }
  8. }

Al llamar a ésta función, seremos automáticamente redirigidos al contenido en amazon siempre que el link provenga desde nuestro mismo dominio. Por supuest, si quisieramos permitir el acceso desde una determinada lista de dominios, simplemente tendríamos que modificar un poco la condición if , para que compruebe que cada uno de los dominios están incluido en el HTTP_REFERER.

Espero que sea útil.
Un Saludo !!

Operadores << y >> en PHP (desplazamientos binarios)

Eventos, PHP, Programación por fillito el 10-09-2008

Etiquetado como : ,

Esta semana me he puesto ya en serio a prepararme para la certificación Zend de Ingeniero PHP.

Entre el temario del primer capítulo, encontré dos operadores que jamás había usado y me llamaron mucho la atención porque ni siquiera los había visto usados en algún otro script php. Me sonaban de cuando había estudiado C en la universidad, y efectivamente hacen lo mismo.

Los operadores "<<" y ">>" realizan un desplazamiento binario de n posiciones, hacia la izquierda o a la derecha respectivamente.

Para el que no sepa exáctamente qué es un desplazamiento binario, lo explico:

La representación binaria de 5 (decimal) es 101. Un desplazamiento binario nos sirve para desplazar, a la izquierda o a la derecha, sus dígitos.  Por lo que un desplazamiento binario de 2 posiciones sobre el numero 5 nos daría como resultado el binario 10100 (20 en decimal).
Su uso puede ser bastante útil y extremadamente eficiente cuando queremos multiplicar un número por alguna potencia de dos, ya que, internamente, el desplazamiento binario será mucho más rápido y requerirá menos operaciones que la multiplicación.

Su sintaxis es muy sencilla, y como cualquier otro operador aritmético, su asociatividad de izquierda.

PHP:
  1. $a << n;

Donde n es el número de desplazamientos que queremos hacer hacia la izquierda.

Nota adicional: si pretendemos usar el desplazamiento binario tenemos que tener cierto cuidado y conocimiento de las características técnicas de la máquina en la que estamos corriendo el script. Ya que si estamos utilizando una máquina de 32bits , los datos se almacenarán, como es lógico, en palabras de 32 bits, y si intentamos realizar un desplazamiento binario de 32 posiciones, obtendremos como resultado un estupendo overflow.
Por lo que si queremos multiplicar por potencias de 2 , tened cuidado de cuántas posiciones desplazais, ya que a veces os convendrá más utilizar la función pow(n,m);

Chuletas Imprescindibles

PHP, Programación, SEO por fillito el 06-09-2008

Etiquetado como : , , ,

Esta semana, Raúl Jimenez me pasó una chuleta donde venía un resumen de elementos importantes para el SEO en una web. Esto me trajo recuerdos de una magnífica chuleta que había hecho Manz sobre PHP, así que me decidí a publicar un pequeño post con cuatro de las chuletas básicas para mí como desarrollador web. Cuatro guias de referencia para PHP, SEO, ModRewrite y CSS.
Esta es mi lista ordenada según lo útiles que son para mí :P

- La primera es, cómo no, la magnífica  Emezeta Card PHP Cheatsheet (v0.2)
- El segundo puesto es para SEO Cheatsheet , de Anton Shevchuk (el link al post está en ruso, pero la chuleta en inglés)
- El tercer puesto es para Emezeta Card ModRewrite Cheatsheet (v0.1)
- Y cuarto, pero no menos importante para CSS CheatShett (V2) , de AddedBytes

Espero que os sean útiles !