Monthly Archives: May 2008

Nuevas Fotos en Flickr

Por fin pude subir nuevas fotos a Flickr:

Touching Heaven

Market Day 5

Market Day 4

Market Day 3

Market Day 2

Market Day 1

Todas ellas del rancho de Ale: Ajalpan =)

Moe tiene la razón

En el capítulo HABF04 de los Simpsons (En el camino a ninguna parte) Moe dice que consiguió dinero por demandar al fabricante de la soga con la que intentó ahorcarse y falló; me puse a buscar y conseguí una historia similar.

Sucede que un Rumano llamado Victor Dodoi intentó suicidarse después de una pelea; la soga se rompió y llegó al hospital, ya en el hospital dijo que “En este país ni siquiera puedes morirte” y que una vez que se recuperara planeaba demandar al fabricante por hacerle su vida “aún más infeliz”.

Parece ser que no demandó o perdió porque no hubo seguimiento de noticia.

Fuente y Otra más

Una vez más los Simpsons tienen la verdad =D.

WTF Del Día – Películas con Cuerdas

Tenía que ser de los japos, animan trozos de películas con cuerdas todo un clásico:

Otro WTF, Spiderman bailando (uno más):

Previsible pero aún así comico =):

Había visto una parte de este video pero este tiene partes de exteriores, simplemente genial por todo el trabajo =)

Un clásico, temas de Zelda interpretado por instrumentos de cuerdas:

Top 10: Mejores y Peores Lugares de Trabajo

En ValleyMag han publicado los 10 mejores y los 10 peores lugares de trabajo; en los peores 10 resaltan Yahoo, Microsoft (parece trabajo industrial en cadena), Mozilla; pero no se porqué incluyeron a las oficinas centrales de Adobe, excepto porque no se vió ninguna computadora a la vista pero el estilo ‘frio’ es interesante.

De los mejores 10, sin duda el edificio IAC (rediseñado por Frank Gehry) se ganó mi corazón y para muestra:

Referencias:

Presence API – Estado de MSN Messenger en Web (Live Dev)

Presence API - Estado de MSN Messenger en Web

Desde hace algo de tiempo MS ha intentado entrar al mercado de internet, si bien sus productos no han logrado ser populares me acabo de dar cuenta que tienen una API para obtener información de MSN Messenger.

Esto es realmente útil sobre todo por la gran cantidad de personas que usamos este servicio y que las páginas pueden beneficiarse de ello; en este caso probaremos el Presence API que es muy simple y nos permite obtener el estado de una persona mediante su ID.

Funcionamiento

Con esta herramienta podemos obtener su estado (En Línea, Ocupado, etc) el ícono de su estado (no el avatar que lamentablemente no se puede obtener) y el nombre que se ha asignado (también falta el mensaje que uno puede asignar en el messenger).

Inicialmente debemos de obtener el ID del usuario, para esto podemos ir a la siguiente liga:
http://settings.messenger.live.com/applications/websignup.aspx?returnurl=[URL]&privacyurl=[URL]

Donde returnurl es donde se pasarán los datos del usuario y privacyurl una liga donde se especifiquen los criterios de privacidad para que el usuario sepa que se hará con su cuenta.

En esta liga el usuario dará sus credenciales para acceder a su cuenta de messenger; después aceptará que nuestra aplicación pueda ver los detalles; aunque en realidad lo único es que le envia a la aplicación nuestro ID de usuario.

Del lado de nuestra aplicación recibiremos los siguientes parámetros:

  • result, nos indicará el estado de la petición que puede ser:
    Accepted – Cuando el usuario ha aceptado que podamos ver su estado
    Declined – Cuando el usuario ha declinado
    NoPrivacyUrl – Cuando nuestra página de privacidad no es encontrada
  • id, es el ID del usuario en una forma como USUARIO_ID@apps.messenger.live.com, esta cadena es con la que realizaremos la consulta

Cuando necesitemos saber el estado de una persona, debemos llamar a su servicio web en la siguiente dirección:
http://messenger.services.live.com/users/[ID]/presence?mkt=es-MX

Esto nos regresará un elemento en JSON (que puede ser utilizado por javascript si es utilizado mediante un proxy) de otra manera necesitamos convertirlo a PHP, en el ejemplo utilizo Zend_Json para obtener el resultado, el resultado es muy sencillo tiene los siguientes valores (ya convertido en php):

  • $estado['icon']['url']
    Icono de estado
  • $estado['icon']['width']
    Ancho del Icono
  • $estado['icon']['height']
    Alto del Icono
  • $estado['displayName']
    Texto que el usuario ha puesto en su messenger
  • $estado['status']
    Estado del usuario (ID)
  • $estado['statusText']
    Estado en formato ‘legible’ pero debe proporcionarse el ‘contexto’ para que provea en el lenguaje correcto, en la liga de arriba ya se proporcionó para Español de México (?mkt=es-MX)

De esta manera podemos ver el estado de una persona.

Descargar Código:
http://demo.livesourcing.com/blog_vida/articulos/DanguerArticle_LiveDevPresenceApi/.tar.gz

Ver Ejemplo:
http://demo.livesourcing.com/blog_vida/articulos/DanguerArticle_LiveDevPresenceApi/

Información (en inglés):
http://msdn.microsoft.com/en-us/library/bb936691.aspx

Con todo respeto – Nombres Chistosos

Me acaba de llegar la guía telefónica y por azares del destino empecé a ver nombres chistosos, estos son los que me he encontrado:

  • Aniceto Nepomuceno Eufemia
  • Atilano Crispín Rosa
  • Blanca de Lacalle Castro
  • Bolas de Gaspar Gloria
  • Capitán Galan Patricia
  • Casado De Alegría Maria del Socorro
  • Carro de Moctezuma Esperanza
  • Dorado Moreno Roberto
  • Alegría del Angel Griselda
  • Prieto Moreno Pablo (¿no es repetitivo?)
  • Pony Martinez Pedro
  • Pajaro Rosas Alberto (Sin palabras)
  • Pasos Santos Juana (derroche de divinidad)
  • Pinto Parada Jose Armando
  • Pinto Rosano Ma. Del Carmen
  • Posada de la Paz Ricardo
  • Refugio Leon Bravo (le falto ‘del’ después de Refugio ;-) )
  • Severo Pajarito Tula

Herramientas de Diseño en Línea

Sin duda algunas herramientas de Diseño que ayudan en gran manera para el trabajo diario son estas dos:

Generador de Esquemas de Colores de Well Styled

Esta herramienta es muy sencilla de usar y básicamente genera esquemas de color en base a diferentes teorías del color, a mi en lo particular me gusta mucho el modelo de Triad y Tetrad; pero es totalmente relativo a gustos ;-)

Una buena ventaja de esta herramienta es que puedes guardar en una liga para después rescatar los valores y seguir trabajando con ellos.
http://wellstyled.com/tools/colorscheme2/index-es.html

Generador de Esquemas de Colores de Well Styled

Kuler

Kuler es un interesante proyecto en una de las compañías que está dando (y seguramente será líder en las siguientes tecnologías web) mucho de que hablar: Adobe.
En sí es una comunidad donde puedes crear esquemas con cinco colores; tiene un mezclador parecido pero también un poco más complejo (y a veces innecesariamente) que el anterior.

La ventaja es que aquí tienes muchas combinaciones de donde “inspirarte” para elegir colores.

http://kuler.adobe.com

Kuler - Comunidad de esquemas de colores

Por mi parte como pruebas hice dos ejemplos que de vez en cuando me sirven, uno es un mezclador de colores muy parecido a WellStyled (con menos opciones), pero sobre Flex:
http://www.danguer.com/showcase/flex2-ColorMixer

Mezclador de colores en Flex - Danguer

Otro ejemplo es un visor de Fuentes instaladas en el sistema operativo con Flex (pueden ver el código Fuente), esto me ayuda porque puedo ver cómo se verá un texto con las fuentes sin estar cambiando una a una.
http://code.fangit.com/FlexFontViewer/

Visor de Fuentes en Flex - Danguer

Formularios con Zend Framework (Zend_Form)

Una de las características que se había solicitado en Zend Framework era la de poder utilizar formularios. En la versión 1.5 ya existe esta característica; aunque algunas partes de la documentación de Zend es muy vaga el poder de los formularios es excelente; como siempre tiene una muy buena arquitectura que va desde lo medianamente simple para utilizar los formularios de manera rápida hasta lo complejo que permite extender sus capacidades sin ‘hacks’ en el código o rehaciendo partes de código vitales.

Un formulario (Zend_Form) es un contenedor de elementos (por ejemplo una entrada de texto, una casilla de verificación, etc), del lado del controlador debemos definir los elementos, una vez hecho esto entonces podemos visualizar (render) la forma del lado de la vista ya sea asignándole una vista o simplemente con <?=$formulario?> donde $formulario es por supuesto nuestro objeto de tipo Zend_Form

Los elementos que maneja Zend Framework son básicamente los objetos en HTML a los que estamos acostumbrados, pero no estamos limitados a ellos ya que podemos crear los elementos que necesitemos.
Un elemento puede tener validadores (subclases de Zend_Validate_Abstract) que nos permiten validar la entrada, aunque ya existen muchos validadores muy útiles y de uso frecuente.
El elemento puede ser asignado uno o varios “Decoradores“; un Decorador es un objeto que pasa información a un Helper de la vista, los decoradores que tiene Zend Framework integrado nos permiten fácilmente alterar la salida de un elemento y también añadir fácilmente un diseño.

Esquema

El siguiente es un esquema de cómo funciona Zend_Form, podemos ver que el controlador se encargará de crear el formato del formulario y la parte de vista se encargará de mostrar el formulario y de mostrar los errores que hayan surgido.

Esquema de Zend_Form

Crear un formulario

Para crear un formulario debemos hacer lo siguiente:

  1. Crear un formulario (Zend_Form)
  2. Crear elementos ya sea mediante
    $elemento = $formulario->createElement('tipo_elemento', 'nombre_elemento');
    o mediante un objeto de tipo Zend_Form_Element:
    $elemento = new Zend_Form_Element_Text('nombre_elemento');
  3. Asignar propiedades al elemento:
    setLabel('nombre_etiqueta'); //asigna el nombre de la etiqueta del elemento
    setValue('valor'); //asigna el valor del elemento (sobreescribe la entrada del usuario)
    setDecorators($arreglo_decoradores); //asigna los decoradores a usarse
    setRequired(true/false); //indica si el valor no debe estar vacio
    addValidator($validador); //indica el validador a utilizar
  4. Agregar el elemento al formulario:
    $formulario->addElement($elemento);
    los elementos se visualizarán en el orden en que han sido agregados, aunque esto puede cambiarse si se modifica el elemento mediante $elemento->setOrder($numero);
  5. Pasar el formulario a la vista para que sea renderizado:
    $this->view->assign('formulario', $formulario);
  6. Renderizarlo en la vista:
    <?=$this->formulario?>

Validar un formulario

Una vez que hemos renderizado el formulario y el usuario ha enviado datos, lo siguiente que debemos hacer es validar la entrada, para esto debemos de crear nuevamente el formulario y verificar si se han enviado datos (porque Zend Framework solo envia valores y no información sobre el formulario), si se han enviado datos entonces podemos utilizar la función isValid($_POST); que regresará un valor de verdadero en caso de que todos los validadores fueron satisfechos o falso en caso de que alguno no lo fuera.

La ventaja de Zend es que automáticamente agregará un mensaje de error al renderizar el elemento que tuvo un error; inicialmente el código de error estará en inglés, por lo que deberemos de traducir los mensajes (más adelante).

Opciones de Validación

Zend Framework tiene varias opciones para validar las entradas, todas ellas son subclases de Zend_Validate_Abstract, para agregar un validador debemos llamarlo de la siguiente manera:

$elemento->addValidator('nombre_validador', $romper_cadena_al_fallar, $arreglo_opciones);

Los validadores más importantes son (el nombre de validador es el que está entre paréntesis):

  • Zend_Validate_Alnum (alnum)
    Nos permite verificar que la entrada solo contenda caracteres alfanuméricos (letras y dígitos), opcionalmente se le puede pasar como opción un booleano para definir si se deben aceptar espacios en blanco (predeterminado en falso)
  • Zend_Validate_Alpha (alpha)
    Nos permite verificar que la entrada sea sólo letras, al igual que el anterior permite una opción para aceptar espacios en blanco
  • Zend_Validate_Digits (digits)
    Permite verificar que la entrada sea sólo números
  • Zend_Validate_StringLength (stringLength)
    Nos permite definir que la entrada sólo contenga un número mínimo o máximo de valores; que deben ser especificado en las opciones por ejemplo:
    $element->addValidator('stringLength', false, array(3, 20));
    Que especifica una cadena de al menos 3 caracteres y máximo 20 caracteres.
  • Zend_Validate_EmailAddress (emailAddress)
    Es un validador muy poderoso que nos permite verificar que un correo sea válido (al menos en cuanto a formato y servidor válido incluso)
  • Zend_Validate_NotEmpty (notEmpty)
    Este validador nos permite verificar que el usuario ha introducido un valor, lamentablemente no permite eliminar espacios en blanco con trim por ejemplo.

Traducción

Los mensajes de error que mostrará Zend Framework de manera predeterminada serán en inglés; para poderlos mostrar en español debemos utilizar la parte de traducción de Zend (Zend_Translate).

Zend_Translate permite muchas opciones pero aqui haremos una de las más básicas que es mediante un archivo PHP, esto nos permitirá usar las constantes de Zend, para esto simplemente hay que crear un archivo en PHP donde tendrá los mensajes en español, por ejemplo: app/langs/es.php

En este archivo deberemos regresar un arreglo con la llave la cadena a traducir y el valor con la cadena traducida, por ejemplo:

<?php
require_once 'Zend/Validate/NotEmpty.php';
require_once 'Zend/Validate/StringLength.php';
require_once 'Zend/Validate/EmailAddress.php';

return array(
Zend_Validate_NotEmpty::IS_EMPTY => 'El campo no puede estar vacío',
Zend_Validate_StringLength::TOO_LONG => 'El campo debe contener por lo menos %min% caracteres',
Zend_Validate_StringLength::TOO_SHORT => 'El campo debe contener un máximo de %max% caracteres',
Zend_Validate_EmailAddress::INVALID => 'La dirección de correo no es válida',
Zend_Validate_EmailAddress::QUOTED_STRING => "'%localPart%' no concuerda con el formato de comillas",
Zend_Validate_EmailAddress::DOT_ATOM => "'%localPart%' no concuerda con el formato de punto",
Zend_Validate_EmailAddress::INVALID_HOSTNAME => "'%hostname%' no es un nombre de dominio válido",
Zend_Validate_EmailAddress::INVALID_LOCAL_PART => "'%localPart%' no es una parte local válida",
Zend_Validate_EmailAddress::INVALID_MX_RECORD => "'%hostname%' no tiene un dominio de correo asignado",
);

?>

Debemos consultar la API para ver las cadenas que debemos traducir para cada validador. En el ejemplo sólo usaremos tres notEmpty, stringLength y emailAddress

Entonces debemos de asignar estas traducciones a todos los componentes de Zend_Form de la siguiente manera:

$traduccion = new Zend_Translate('array', 'app/langs/es.php', 'es');
Zend_Form::setDefaultTranslator($traduccion);

Obtención de Valores

Los valores del formulario estarán en $_POST['nombre_elemento'] o $_GET['nombre_elemento'] según sea el caso, pero podemos pedirle al formulario que nos regrese solamente los valores que le corresponden de la entrada (si es que pasamos más datos), por lo que debemos hacer:

$valores = $formulario->getValues();

Ejemplo

Para el ejemplo tendremos dos archivos, IndexController.php (Controlador) e index.phtml (vista), simplemente mostraremos un formulario y mostraremos los valores.

El código del ejemplo puede ser obtenido en esta liga:
http://vida.danguer.com/archivos/articulos/Zend_Form/DanguerArticle_Zend_Form.tar.gz

Mientras que el ejemplo puede visualizarse en la siguiente liga:
http://dev.fangit.com/DanguerArticle_Zend_Form/

Violación a través del teléfono

Si creían que el título era una broma entonces sigan leyendo, esto es lo que dice una nota periodística (traducida):

Tunisia, Tunez. Abril 27 – Una familia tunesina alega que su hija fue violada durante una conversación telefónica con un hombre, esto dice el abogado de la familia.

El hombre de treinta años alega no haber tocado nunca a la joven, pero acepta que la escuchó gritar cuando estaban “en el mejor punto” de una conversación telefónica erótica – ella reportó que estaba sangrando, reportó Al Arabiya.

Maha al-Metebaa, el abogado representando a la familia dijo al periódico Kuwaiti Al-Qabs que el caso necesita una investigación cuidadosa debido a las acusaciones sin precedentes. También dijo que un examen médico determinó que la mujer de 20 años ya no era virgen.

“La relación sexual se llevo a cabo pero sóo verbalmente” dijo. “El acto sexual no se realizó por completo debido a que faltó el factor de proximidad física, aunque se llevó a cabo debido a que hay un impacto físico directo: la pérdida de la virginidad

Fuente: http://www.upi.com/NewsTrack/Top_News/2008/04/27/was_woman_raped_on_telephone/5602/ (inglés)

Ustedes juzguen si el acusado es culpable o no ;)

Anthony & the Johnsons

La primera vez que escuché esta canción fue en la película de V for Vendetta; en esta excelente película sólo existen dos canciones “cantadas”, esta y la de “I Found a Reason“. Las dos son excelentes pero sin duda esta sobresale, si no juzguen por si mismos:

La canción tiene un gran toque emotivo que es aprovechado a la perfección por la película para interpretarla en el momento perfecto, la partida de Evey.

Anthony tiene una voz especial y se nota un gran dueto con Boy George: