Por fin pude subir nuevas fotos a Flickr:
Todas ellas del rancho de Ale: Ajalpan =)
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.
Una vez más los Simpsons tienen la verdad =D.
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:
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:
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:id
, es el ID del usuario en una forma como USUARIO_ID@apps.messenger.live.com
, esta cadena es con la que realizaremos la consultaCuando 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']
$estado['icon']['width']
$estado['icon']['height']
$estado['displayName']
$estado['status']
$estado['statusText']
?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
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:
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
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.
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
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/
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.
Crear un formulario
Para crear un formulario debemos hacer lo siguiente:
Zend_Form
)$elemento = $formulario->createElement('tipo_elemento', 'nombre_elemento');
$elemento = new Zend_Form_Element_Text('nombre_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
$formulario->addElement($elemento);
$elemento->setOrder($numero);
$this->view->assign('formulario', $formulario);
<?=$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
)Zend_Validate_Alpha
(alpha
)Zend_Validate_Digits
(digits
)Zend_Validate_StringLength
(stringLength
)$element->addValidator('stringLength', false, array(3, 20));
Zend_Validate_EmailAddress
(emailAddress
)Zend_Validate_NotEmpty
(notEmpty
)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/
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
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: