Noticias Weblogs Foros Wiki Código

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

Mal Código

Uno rápido sobre expresiones booleanas

Octubre 30th, 2010 - [Enlace local]

Este Mal Código es un ejemplo simple de como pensar un poco sobre las expresiones booleanas. if( (level != 1) && (level % 5 == 0) ){ // do something on level}Si tenemos en cuenta que el resto de dividir 1 entre 5 es siempre 1, la expresion anterioor se reduce a:if( level % 5 == 0 ){ // do something on level}

» Leer más, comentarios, etc...

Picando Código

Primer jornada de la RubyConf Uruguay 2010

Octubre 30th, 2010 - [Enlace local]

RubyConf Uruguay 2010

RubyConf Uruguay 2010

Recién volví de la primer parte de RubyConf Uruguay 2010.No saqué fotos así que me tomo el atrevimiento de usar algunas que fueron publicando hoy en Twitter (con el crédito correspondiente). Les doy un repaso del primer día:

Como era de esperarse, fue un evento excelente, de primer nivel. Desde temprano se empezó a juntar la gente en el primer piso de la torre de las telecomunicaciones de Antel. Ahí fuimos recibidos con bizcochos y café para empezar hasta que fuimos llamados al auditorio.

Dentro del auditorio, comenzaba la primer charla sobre Ruby en Windows. Luis Lavena presentó el proyecto RubyInstaller, ambiente de desarrollo Ruby en Windows. Ya en Twitter ardía el hashtag #RubyConfUY, donde se iban conociendo distintas impresiones y comentarios de la conferencia.

Un comentario que vi varias veces fue relacionado al asombro de tantas laptops con Windows. De todas formas habían bastantes con Mac OS X y GNU/Linux también.

Laptops de RubyConfUy - por @rabble

Laptops de RubyConfUy - por @rabble

Primer Coffe Break del día, con café y sanguches, previo al tutorial básico de Rails. La gente de Cubox estuvo a cargo de esta presentación. Por medio de la aplicación Rails For Zombies y una presentación con la misma temática, fueron presentando el framework a los asistentes.

Como en toda conferencia, algo tenía que salir mal. Irónicamente la red se saturó y no se podía acceder a la aplicación (la ironía es que fuera la sede de “la empresa de las telecomunicaciones de los uruguayos”). Por esto el resto de la presentación se hizo menos interactiva, pero buena de todas formas. Todavía podemos ingresar a la aplicación y tomar las lecciones.

De todas formas el tutorial y la presentación estuvieron excelentes, si bien no salió como hubieran querido, creo que todos quedamos conformes.

Al terminar el tutorial, se vino el almuerzo con empanadas para todos los gustos. En este momento mis obligaciones laborales me obligaron a retirarme de la conferencia (por suerte trabajo en el edificio de al lado :P ). Me perdí unas cuantas charlas interesantes, pero volví para cuando estaba terminando una sobre Rubinius.

Por suerte se había atrasado un poco la agenda, por lo que pude ver la presentación sobre Node.js de Federico Romero. Bastante interesante, la demo se encuentra todavía arriba, se trata de un servicio que se actualiza en tiempo real (lista de tareas). Prueben abrir en dos navegadores (o ventanas) distintos, al modificar algo en uno, se actualiza en tiempo real en otro. El código fuente.

Siguió un nuevo Coffee Break con masitas. En él Santiago Pastorino estaba regalando remeras de Engine Yard y me quedé con una. Engine Yard es un servicio de hosting para Rails, o como lo definen en su página web: Rails in the Cloud.

La siguiente charla fue de la mano de Gabriel Ledesma sobre Scrum. Una charla muy buena sobre la metodología, donde planteaba iniciar a aplicarla con la reunión de retrospectiva. Tras algunas preguntas (en las que regalaban un juego de cartas de Planning Poker) terminó una charla que basado en los comentarios gustó mucho pero dejó gusto a poco.

Subió entonces al escenario Aaron Patterson, quien mezcló su presentación técnica con un stand up humorístico (tan de moda que están ahora…). Literalmente lloré de risa los primeros minutos de su presentación, hasta que se metió realmente en lo técnico con Fibers en Ruby 1.9. Un detalle interesante, usaba un Wiimote para pasar de diapositiva en su presentación…

Para cerrar la noche, se realizó una serie de Lightning Talks que fueron elegidas primero por la audiencia, y después seleccionadas al azar por un algoritmo en Ruby. En ella volvió @tenderlove al escenario mostrando Playpen y  Leo Soto mostró Sounds Good, un app muy bueno hecho en 50 horas de trabajo. Maneja audio y video con HTML5 y los formatos Ogg y WebM, aunque soporta varios más.

Emmanuel Olga dió una charla sobre IRC y Ruby, para aquellos que hemos usado bots de IRC (me hizo acordar a Uma la bot de Montevideolibre). También hubo charla de diseño por Nicolás Barrera y un par más que en este momento no recuerdo…

Un Lightning Talk bastante interesante vino de la mano de Foca y fue “La manera más simple de aprender Ruby”. En esos minutos contó sobre Try Ruby!, un sitio web tutorial interactivo. También agregó que instalar Ruby y probarlo es una buena manera de empezar. Ya tengo ese sitio y el tutorial de los Zombies para ir metiéndole, mas el domingo aprovechar el Hack Day en CoworkingMVD.

Bueno, este fue mi pantallazo de lo que fue la primer jornada. Pueden ver un set de fotos del primer día en Flickr de Bruno Aguirre.

También pueden seguir la conferencia en Twitter con el hash oficial: #RubyConfUY, y también en EventRT. La conferencia viene bien de bien, ¡felicitaciones a la organización por un evento tan bueno!

Mañana volveré a informar desde las cuentas de Identi.ca y Twitter.

Comparte: Print del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com Tumblr Twitter

» Leer más, comentarios, etc...

Bitácora de Javier Gutiérrez Chamorro (Guti)

¿x64 más lento que x86?

Octubre 29th, 2010 - [Enlace local]

Antes que alguien se cuestione a raiz de la lectura de Sieve en C, si realmente es x64 más lento que x86, voy a adelantarme, y aclarar algunos conceptos.

La respuesta rápida es que si, que x64 puede llegar a ser más lento que x86. Esto ocurrirá en los caos en que el código no pueda sacar ventaja de ninguna de las mejoras de la arquitectura x64. Esto pasará en raros casos, donde el código solamente maneje enteros, y acceda a bloques de memoria de 4 bytes, como era el caso de Sieve. La pérdida de rendimiento en esta situación suele ser entorno al 5%, debida a la sobrecarga de manejar punteros largos.

En la mayoría de aplicaciones, como ya vimos con 7-Zip o MySQL, dará una mejoría en x64 de entre el 5% y el 25%. Claro está que a medida que pase el tiempo, y la arquitectura, así como los compiladores vayan mejorando, estas diferencias irán aumentando, y es que sobre x86, no hay ya mucho que mejorar.

Si hablamos de código, que maneja enteros de 64 bits, o accede a datos en bloques de al menos ese tamaño, la situación sería justo la opuesta a la primera, y tendríamos como en x86 vs x64 (Continuación), incrementos de rendimiento de más del 200%.

Ahora bien, sobre el caso que nos ocupa, que es el Sieve en C, ¿qué pasaría si manipulásemos el algoritmo, para de forma artificial requerir enteros de 64 bits? Aplicamos los cambios necesarios, y el código quedaría así:

...
long long i, k, iter, count;
...
printf("%lld iterations\n", ITER);
...
printf("%lld primes in %ld ms.\n", count, (end-start));
...


Lo ejecutamos, y tenemos:
- x86: 54.615 ms (100%).
- x64: 32.996 ms (165%).

Ya para terminar, quiero remarcar el mensaje final. Las aplicaciones nativas x64 son en el 95% de los casos más veloces que las x86. En el 5% restante, serán mucho más rápidas, o marginalmente menos.

» Leer más, comentarios, etc...

Bitácora de Javier Gutiérrez Chamorro (Guti) » Programación

¿x64 más lento que x86?

Octubre 29th, 2010 - [Enlace local]

Antes que alguien se cuestione a raiz de la lectura de Sieve en C, si realmente es x64 más lento que x86, voy a adelantarme, y aclarar algunos conceptos.

La respuesta rápida es que si, que x64 puede llegar a ser más lento que x86. Esto ocurrirá en los caos en que el código no pueda sacar ventaja de ninguna de las mejoras de la arquitectura x64. Esto pasará en raros casos, donde el código solamente maneje enteros, y acceda a bloques de memoria de 4 bytes, como era el caso de Sieve. La pérdida de rendimiento en esta situación suele ser entorno al 5%, debida a la sobrecarga de manejar punteros largos.

En la mayoría de aplicaciones, como ya vimos con 7-Zip o MySQL, dará una mejoría en x64 de entre el 5% y el 25%. Claro está que a medida que pase el tiempo, y la arquitectura, así como los compiladores vayan mejorando, estas diferencias irán aumentando, y es que sobre x86, no hay ya mucho que mejorar.

Si hablamos de código, que maneja enteros de 64 bits, o accede a datos en bloques de al menos ese tamaño, la situación sería justo la opuesta a la primera, y tendríamos como en x86 vs x64 (Continuación), incrementos de rendimiento de más del 200%.

Ahora bien, sobre el caso que nos ocupa, que es el Sieve en C, ¿qué pasaría si manipulásemos el algoritmo, para de forma artificial requerir enteros de 64 bits? Aplicamos los cambios necesarios, y el código quedaría así:

...
long long i, k, iter, count;
...
printf("%lld iterations\n", ITER);
...
printf("%lld primes in %ld ms.\n", count, (end-start));
...

Lo ejecutamos, y tenemos:
- x86: 54.615 ms (100%).
- x64: 32.996 ms (165%).

Ya para terminar, quiero remarcar el mensaje final. Las aplicaciones nativas x64 son en el 95% de los casos más veloces que las x86. En el 5% restante, serán mucho más rápidas, o marginalmente menos.

Artículos relacionados

PHP 5.2+ lento al concatenar
Sieve en Javascript
Usar o no usar mysql_num_rows

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Cuadrante de Gartner BPMS

Octubre 29th, 2010 - [Enlace local]

Gartner presenta los jugadores mas importantes en el ámbito de BPMS. Como siempre las grandes marcas (ORACLE, IBM)tienen presencia en todos lados.

x10sctmp6

» Leer más, comentarios, etc...

MadeInFlex

Nueva plataforma server: Flash Media Gateway

Octubre 29th, 2010 - [Enlace local]

Adobe ha lanzado la preview release de su nueva plataforma, Flash Media Gateway. Es la nueva plataforma servidora real-time, que permite que las aplicaciones Flash y AIR puedan conectarse a los dispositivos tradicionales de comunicación mediante SIP (Session Initiation Protocol).

FMG, con su SDK hace que las aplicaciones que usan Adobe Flash Media Server se integren con el flujo de telefonía.

flashmedia_gateway_flow

Características de Flash Media Gateway:

Más información aquí.

» Leer más, comentarios, etc...

Picando Código

¡Mañana RubyConf Uruguay!

Octubre 29th, 2010 - [Enlace local]

RubyConf Uruguay 2010

RubyConf Uruguay 2010

Faltan solo horas para la primer RubyConf en Uruguay. A las 9 nos registramos y compartimos un café y desayuno con el resto de los participantes. Si no se registraron todavía y tienen ganas de ir, pueden hacerlo mañana mismo en la conferencia. Para terminar de convencerse de ir, revisen la agenda.

Si (como yo) no tienen experiencia con Ruby, van a haber un par de tutoriales introductorios para no sentirse tan perdidos :P

Si les interesa pueden seguirme en Twitter o Identi.ca, prometo hacer mucho bombo sobre la conferencia en mi Timeline (en caso que Antel provea correctamente el servicio de Internet mañana en su auditorio).

Varios de los oradores llegaron hoy a Montevideo, entre ellos Charles Nutter – lead developer de JRuby – quien se mostró bastante contento con Uruguay. Pueden ir viendo varias reacciones de la RubyConf en la cuenta oficial de Twitter: @rubyconfuruguay

Nos vemos mañana por ahí (voy a ser el que tenga una remera de Picando Código)

Comparte: Print del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com Tumblr Twitter

» Leer más, comentarios, etc...

Cerebro en la Sombra » Técnico

Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

Octubre 28th, 2010 - [Enlace local]

Como ya sabéis tengo un ordenador como HTPC que utilizo como centro multimedia con una tarjeta de TV con doble sintonizador, con lo que accedo a todos los canales de TDT incluidos los nuevos HD sin ningún problema, y todo ello integrado en Windows Media Center (WMC) de Windows 7.

Además tengo una línea ADSL de Movistar con el paquete Trio, llamadas + Internet + televisión Imagenio por un módico precio.

Hoy procedemos a rizar el rizo y vamos a integrar también los canales de televisión de Imagenio para aprovechar la infraestructura que ya nos aporta WMC, tanto el control con el mando a distancia como las posibilidades de grabación y timeshift que ofrece el HTPC. Este tutorial será válido para cualquier servicio de televisión IP, solo necesitáis conocer las url’s de los canales que quieres añadir y la configuración de red del decodificador.

Os diré que mi decodificador de Imagenio está en un cajón desde hace más de un año, no he tenido que utilizarlo para nada ya que el HTPC me proporciona muchas más prestaciones.

Estos son los pasos que seguiremos para montar nuestro sistema:

  1. Configuración de red para ver Imagenio en un PC.
  2. Configuración de XMLTV para obtener la guía de los canales que no tenemos.
  3. Configuración de Dvblink.
  4. Configuración del WMC.
  5. Actualización automática de la guía de canales.
  6. Resultado final y últimos ajustes.

La base de este artículo es Dvblink, un software fabricado por Dvblogic que permite que accedamos a los canales de Imagenio desde el Media Center como si llegasen a través de una tarjeta sintonizadora. Hace unos días, al actualizar la versión de este software, me encontré con que la clave que había comprado hace un año ya no era válida para esta nueva versión. Ni corto ni perezoso me puse en contacto con Dvblogic explicándoles la situación y al momento me respondieron que me enviaban un nuevo número de serie. Un diez para ellos, no todos harían lo mismo icon smile Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink . Pero la verdadera sorpresa estaba en la nueva versión de Dvblink, mucho más sencilla de configurar, amigable y clara y potente que la anterior.

Manos a la obra.

1) Configuración de red para ver Imagenio en el PC

Ante todo debo deciros que para que todo funcione bien, sin cortes y fluidamente, la conexión del HTPC al router debe ser cableada, no inalámbrica. Así que supondremos que ya has conectado el ordenador con cable.

Lo primero que debemos hacer será obtener la configuración de Imagenio bien desde el decodificador o bien desde el router. En el primer caso, normalmente se desenchufa el decodificador se vuelve a enchufar y cuando arranque se mantiene pulsada la tecla “menú” del mando a distancia hasta que aparezca la pantalla de configuración. Si tienes acceso al router puedes ver también la configuración LAN del mismo. Necesitaremos la IP del gateway, la que tiene el router, del rango 10.x.x.x y la que tiene el decoder. Apuntaremos además la máscara de red. Tendremos por tanto los datos:

Normalmente cada instalación de Imagenio reserva las dos IP’s siguientes a la del router para los clientes, con lo que si la del router es la 10.x.y.n, la del decoder será la 10.x.y.n+1 y la n+2 podremos utilizarla también. Para configurar nuestro HTPC podemos utilizar inicialmente la misma que tiene el decoder para asegurarnos que no hay ningún fallo y, posteriormente, podremos cambiarla, aunque si no vamos a utilizar el decodificador no sería imprescindible.

En el HTPC nos vamos a:

  1. Inicio -> Panel de control -> Centro de redes y recursos compartidos -> Cambiar configuración del adaptador

Y en nuestra interfaz de red local damos botón derecho y propiedades y ahí seleccionamos “Protocolo de Internet versión 4″ y propiedades..

red1 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con DvblinkY añadimos los datos que hemos obtenido, la IP del decoder (o la siguiente), la máscara y la IP del router. Aceptamos la configuración y si todo va bien ya podremos ver Imagenio en el ordenador. Para comprobarlo, nos descargamos VideoLan y lo instalamos.

Ahora necesitaremos la lista de canales de Imagenio que tenéis aquí. Como podéis comprobar es una lista de reproducción típica con las url’s de acceso a cada uno de los canales. Ahora procedemos a abrirla con VideoLAN en Medio -> Abrir archivo. Si todo va bien se abrirá la reproducción del canal promocional de Imagenio. Si no ves la lista de canales ve a View -> Playlist. Verás esto:

vlc1 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

Cambiando de canal desde la lista irás viendo cada uno de los canales. En este punto ya podrías ver Imagenio en tu ordenador, pero queremos además tener la guía de programas e  integrarlo todo con WMC.

Si queréis además utilizar la misma tarjeta de red para la red local, cosa bastante lógica, podéis buscar en Google, hay mucha documentación sobre cómo configurar una misma interfaz para dos subredes.

2) Configuración de XMLTV para la guía de canales

Inicialmente intentaremos aprovechar la guía de programas que el propio Media Center trae incorporada, pero ni están todos los canales ni todos los que están tienen correctamente la programación. Para solucionarlo importaremos la guía de los canales que nos interese a través de xmltv, un sistema para compartir programaciones de televisión basado en archivos XML.

Comenzaremos descargando la última versión de este software para sistemas Windows desde aquí. Lo descomprimimos y lo dejamos en una ruta de nuestro disco duro, supondremos que lo hemos dejado en c:\xmltv.

Configuremos ahora la fuente para nuestra guía. Abrimos el símbolo del sistema y tecleamos:

  1. cd c:\xmltv
  2. xmltv tv_grab_es_laguiatv –configure

Esto lanzará un asistente donde nos preguntará primero si queremos descargar las descripciones de los programas y, a continuación, qué canales queremos descargar. Conviene seleccionar solamente aquellos que vamos a utilizar y no todos ya que el proceso de sincronización es bastante lento. Piensa que prácticamente todos los canales generalistas están ya en la guía del Media Center con lo que no los necesitarás, añade solo los que vayas a necesitar de verdad. Este proceso puedes alterarlo más adelante ejecutando de nuevo el asistente.

Finalmente lanzamos el proceso que descargará la guía según la configuración indicada:

  1. xmltv tv_grab_es_laguiatv > guiaxmltv.xml

Insisto en que es un procedimiento bastante lento, cuantos más canales hayas seleccionado más tardará, cuando termine tendrás en la ruta c:\xmltv\guiaxmltv.xml tu archivo con la guía de los canales.

3) Configuración de Dvblink

Dvblink es el centro de este artículo, sin este software sería imposible ver Imagenio en el Media Center. La teoría es realmente sencilla, crea una tarjeta de televisión por satélite virtual que Media Center reconoce como tal y a través de ella transmite nuestros canales IP, es decir, la sintonizadora virtual hace de puente entre Media Center y el servidor de Imagenio.

Nuestro producto es Dvblink for IPTV, y cuesta sólamente 21 euros, creedme, vale la pena. Puedes usarlo gratis durante 20 días para probarlo icon smile Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink .  Descargamos, por tanto, la versión de prueba (21mb) y procedemos a instalarlo, primero el servidor, DVBLinkServer.msi, y después DVBLinkForIPTV.msi. Cuando termina la segunda instalación se abre automáticamente para que comencemos a configurarlo. Vamos a ello.

Añadimos primero la fuente de nuestra guía xmltv. Según la imagen de abajo, seleccionamos a la izquierda XMLTV y lo añadimos en la flecha, pasos etiquetados como (1) y (2), lo que nos abrirá la ventana que veis en la imagen para que le demos un nombre. En cuanto aceptamos se nos abre otra ventana (3) para que seleccionemos nuestro archivo de xmltv, el que creamos en al punto anterior, c:\xmltv\guiaxmltv.xml.

xmltv1 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink
A continuación añadimos los canales de Imagenio. Para ello seleccionamos el flujo IPTV (1), lo agregamos a la configuración (2) y le damos nuevamente un nombre (3).
iptv1 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

Igual que al configurar xmltv, se nos abre una ventana para que seleccionemos la lista de canales. Dvblink trae su propia lista de Imagenio, puedes probarla, yo he utilizado la mía propia en la que había eliminado los canales que no tengo contratados. En el primer paso os indicaba el archivo que yo utilizo, es el archivo completo de canales de Imagenio, puedes quitar aquellos que no utilices o utilizarla entera ya que posteriormente le indicaremos qué canales queremos. iptv2 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

El siguiente paso es indicarle a Dvblink a través de qué interfaz de red se comunica con Imagenio. Para eso hacemos click en los “…” de la fuente de televisión tal como se indica en la siguiente imagen. iptv4 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

Y en la ventana que se abre indicamos cual es la que se debe utilizar.

iptv3 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

El siguiente paso es indicar qué canales queremos y de donde se obtendrá la guía de programas. Para ello, en la siguiente imagen, vamos a “Configuración del servidor” (1). Ahí vamos seleccionando en (2) los canales que queremos y los vamos añadiendo en (3). Si seleccionamos el grupo completo se añadirán todos. Aquí debéis seleccionar sólo aquellos que tenéis contratados o, incluso, solo los que no tenéis ya en TDT. En mi caso, por ejemplo, como ya tengo doble sintonizador de TDT, puedo grabar dos programas simultáneamente, así que no necesito añadir todos los canales de Imagenio, me limito solo a aquellos que no tengo por TDT. iptv5 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink A continuación nos vamos a la siguiente imagen, “Fuentes de EPG” (1) y vamos indicándole de donde sacaremos la guía para cada uno de los canales que seleccionamos anteriormente. Marcamos cada canal a la izquierda (2) y hacemos doble click en el canal que nos proporcionará la guía a la derecha (3).  En el punto marcado como (4) seleccionamos los distintos tipos de fuente de guía de canales.iptv6 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con DvblinkEl primer combo tiene los orígenes, XMLTV o la guía del Media Center.iptv7 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

El segundo combo tiene los distintos servicios que provee.

iptv8 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con DvblinkSimplemente asocia cada canal con la guía que quieres usar. Como os comenté anteriormente, que aparezca un canal en la guía del Media Center no quiere decir que tenga programación, a mi me venía vacía en algunos con lo que al final los configuré también con XMLTV. Es cuestión de probar. Una vez lo tengas todo configurado puedes cambiar los canales y sus guías en cualquier momento.

Guardamos la configuración y salimos de Dvblink, ya hemos terminado con él.

3) Configuración del Media Center

Ahora debemos configurar adecuadamente Windows Media Center. Como os comentaba, el funcionamiento se basa en hacerle creer a WMC que tenemos una sintonizadora satélite, así que eso es lo que haremos, buscar sintonizadoras satélite. Vamos a:

  1. Tareas -> Configuración -> TV -> Señal de TV -> Configurar señal de TV

Y seguimos los pasos que nos va presentando hasta que llegamos a una pantalla como la siguiente en la que indicamos que queremos configurar la señal satélite.

mc1 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

Ahora nos habrá detectado varias sintonizadoras satélite que no existen físicamente, las que virtualiza Dvblink. Las seleccionamos todas.

mc2 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

En la configuración del satélite dejamos cualquiera, no se va a utilizar.

mc3 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

Y el tipo LNB lo dejamos en universal.

mc4 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

Aceptamos la configuración y volvemos a la pantalla de inicio de Media Center. Ahora vamos a:

  1. Extras -> Biblioteca de extras

Donde nos aparecerá una nueva opción “Dvblink” que seleccionaremos.

mc5 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

A continuación daremos en “Sincronizar canales” y por arte de magia nos dirá que ha sincronizado aquellos canales que habíamos configurado anteriormente. En la imagen de abajo nos indica que ya estaban todos actualizados porque yo ya los había configurado icon razz Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink .

mc6 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

6) Actualización automática de la guía de canales.

Ya casi hemos terminado, solo nos queda un detalle. La guía de xmltv no se actualizará sola icon razz Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink . Debemos crear una tarea programada de Windows que la ejecute periódicamente.

Comenzamos abriendo el bloc de notas y creamos un nuevo documento con el siguiente contenido:

  1. cd c:\xmltv
  2. xmltv tv_grab_es_laguiatv > guiaxmltv.xml

Y lo guardamos como c:\xmltv\guiaxmltv.bat. Probamos a ejecutarlo con doble click para confirmar que funciona. Si todo va bien lanzará el proceso de actualización que vimos en el primer punto. Ahora vamos a:

  1. Inicio -> Todos los programas -> Accesorios -> Herramientas del sistema -> Task Scheduler

Y creamos una nueva tarea programada.

task1 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

En el primer paso le damos un nombre.

task2 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

En la pestaña “Descadenadores” le indicamos que la ejecute diariamente y la hora. Yo la tengo a las 5 de la madrugada que es cuando menos molesta icon razz Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink .

task3 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

En la pestaña “Acciones” indicamos “Iniciar un programa” y seleccionamos el archivo c:\xmltv\guiaxmltv.bat que acabamos de crear.

task4 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con DvblinkAceptamos y guardamos todo. Ya hemos terminado. Si todo va bien la guía de nuestros canales se actualizará automáticamente a la hora indicada.

6) Resultado final y últimos ajustes.

Así queda todo finalmente, nuestros canales Imagenio integrados en la guía del Media Center, lo que nos permite verlos, programar grabaciones, ver la información de los programas, etc…

mc7 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

mc8 Integra Imagenio o cualquier IPTV y la guía de programas en Media Center con Dvblink

Como último paso suelo configurar la guía de canales de WMC creando distintos grupos: canales favoritos, HD, Imagenio, radio, etc… así tengo accesos más directos a determinados canales sin tener que recorrerlos todos.

Como resumen diré que Dvblink me parece indispensable para los que tenemos un HTPC y televisión IP.

» Leer más, comentarios, etc...

Picando Código

Curso intensivo de Ruby On Rails de la Universidad de Berkeley

Octubre 28th, 2010 - [Enlace local]

Ruby on Rails

Desde hace aproximadamente 2 meses estoy concentrado en aprender Ruby On Rails. Obviamente motivado por RubyConf Uruguay, un evento que me tiene muy ansioso y al cual no quería asistir sin tener idea de Ruby. Desde entonces he ido buscando algunos recursos para ir leyendo y practicando.

Un recurso que me resultó sumamente interesante es este curso intensivo de la Universidad de Berkeley sobre Ruby On Rails: Ruby On Rails 1 day course. Se trata de un curso auto contenido cuyo objetivo es proveer una introducción técnica rápida a los conceptos claves de Ruby On Rails intercalados con ejercicios.

Pretende hacer que los asistentes conozcan el lenguaje y el framework, y la manera en que cambia la forma de pensar al escribir aplicaciones web. Se requiere conocimientos básicos de programación orientada a objetos y tener experiencia razonable en algún lenguaje de programación.

Cada sesión dura aproximadamente 1 hora, y podemos ver los videos de cada sesión en YouTube. Los videos están en inglés, y si no pueden leer bien las presentaciones, pueden descargarlas del sitio del curso (archivo zip de todas las ppt). A continuación los enlaces a los videos:

Todos los contenidos del curso se encuentran publicados bajo la licencia Creative Commons Attribution 3.0 License. Pueden encontrar los webcasts como rm para descargar en este enlace. Como dice el sitio del curso, si solo tienen 15 minutos pueden ver el screencast sobre cómo crear un blog en 15 minutos con Rails.

A mi me ayudó mucho para complementar la lectura que he venido haciendo. Tenía pensado llegar a RubyConf con alguna aplicación hecha en Rails, pero parece que el tiempo no está de mi lado… O al menos no lo estoy organizando bien como para poder dedicarme a esas cosas paralelas. Probablemente este fin de semana a todo Ruby On Rails me de lo necesario para empezar algo.

De todas formas el viernes comienza la jornada con algunos tutoriales. El domingo habrá un espacio de hacking Ruby para ver diferentes proyectos en CoworkingMVD, así que aprovecharé para ir y ver más código. ¡Mañana arranca RubyConf!

Comparte: Print del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com Tumblr Twitter

» Leer más, comentarios, etc...

Arragonán

Sobre el modelo anémico y la POO

Octubre 28th, 2010 - [Enlace local]

Ayer, unas horas después de leer el post de @kinisoftware, Modelos de dominio anémicos, POJOs y demás seres del lugar, me encontré una discusión en twitter a varias bandas(sitio que no es ni mucho menos el mejor para debates así… sigo echando de menos las conversaciones/discusiones que teníamos entre una micro-comunidad en jaiku, pero ese es otro tema) sobre el anti-patrón del modelo anémico.

Hablando del tema vi tuits de @kinisoftware, @albertovilches, @jmbeas, @genezeta, @jneira, @jlhuertas… y fijo que me pierdo a algunos más de gente que no sigo. Como es habitual, yo no me mojé demasiado :P . Por un lado soy un chaquetero, y por otro esta gente sabe mucho y me pueden dejar a la altura del betún en cualquier momento :D

Por resumir un poco esto del modelo anémico, viene a ser que el modelo está implementado con DTOs, cuya única responsabilidad es encapsular datos para transferirlos a otra parte(ej: de una base de datos a la vista de una app). Cosa que creo aún es bastante habitual en muchas aplicaciones que utilizan ORMs o similares(llámense Hibernate, ActiveRecord, GORM, Doctrine, MyBatis… o soluciones home-made)… Pues resulta que eso es un anti-patrón, más que nada porque por hacer eso probablemente estemos rompiendo el paradigma de programación orientada a objetos.

Recuerdo cuando me enseñaban POO(con Java) que una clase Rectangulo tenía un atributo base y otro altura con sus getters y setters y un método calculaArea() que devolvía su área(vale, y probablemente extendería de Poligono :P ). Vamos, que se supone que un objeto combina estado y comportamiento, por eso veo por ejemplo hablando una clase de dominio Noticia que tiene un atributo propietario puede tener un método del estilo:

public boolean esPropiedadDe(Usuario usuario){
   return propietario.equals(usuario)
}

La cosa es que en los frameworks MVC ese tipo de lógica la he visto(y sí, también la he puesto! XD) en la capa del controlador, cuando se supone que es una capa que debe ser lo más tonta posible en cuanto a lógica de negocio (o ya puestos, tonta del todo :D , skinny controller-fat model), y con la moda de las capas de servicio con los Spring & co(Grails como una de esas víctimas colaterales) ha resultado que esa lógica se pone en la capa de servicio para evitar ponerla en el controlador y seguir dejando a las clases de dominio como DTOs(o modelos anémicos).

¿Eso quiere decir que siempre pongo la lógica en las clases de dominio?
No, pero procuro hacerlo siempre que puedo identificar responsabilidades en una clase del dominio. Aún así, en ocasiones me encuentro con lógica que pasa a alguna clase en la capa de servicio, principalmente porque no consigo identificar qué clase debería ser la responsable, afecte a varias clases de dominio o simplemente sean comportamientos que no tienen que ver con la lógica de negocio pura y dura. Por supuesto teniendo en cuenta que esas decisiones sean cosa mía :D

De todas formas, ya se sabe que en esto del desarrollo de software todo depende de muchos factores(principalmente de los gustos y costumbres de los desarrolladores) y nadie tiene LA respuesta. Eso es lo que hace más interesante el mundillo, ¿o no? :D

sort()
Viñeta de Geek And Poke, como no ;)

PD: Disculpad que os tengáis que imaginar parte del código y el spanglish rarillo en los ejemplos, el código de verdad hace tiempo que procuro escribirlo siempre en inglés :P

» Leer más, comentarios, etc...

Variable not found

PDC2010 en streaming

Octubre 27th, 2010 - [Enlace local]

Microsoft PDC 2010EL PDC (Professional Developers Conference) es un eventazo de Microsoft destinado a desarrolladores, que suele levantar mucha expectación todos los años debido a que se desvelan y presentan tecnologías y herramientas que nos acompañarán en nuestro trabajo durante los próximos meses.



En esta ocasión tendrá lugar los días 28 y 29 de octubre (¡ya mismo!) en Redmond, pero, afortunadamente para los que nos pilla algo lejos, podremos seguirlo en vivo y en directo gracias al vídeo streaming.



El evento comenzará a las 18:00 (hora peninsular española) el jueves 28, y puedes seguirlo de forma gratuita y sin registro previo accediendo a la dirección:

http://player.microsoftpdc.com/session?refid=73301
También puedes ver la agenda de sesiones, y planificarte para asistir a los temas que más te interesen, e incluso acceder a partir del día siguiente las sesiones grabadas. Y para estar a la última, puedes seguir vía Twitter a @PDCEvent y usar el hashtag #PDC10.



Ah, que como no es mi caso casi se me olvida: si eres de Madrid, puedes ir también a las oficinas de MS a seguir en directo la sesión inaugural, eso sí, previo registro debido la lógica limitación de aforo.



Publicado en: Variable not found.



» Leer más, comentarios, etc...

Bitácora de Javier Gutiérrez Chamorro (Guti)

Sieve en C

Octubre 27th, 2010 - [Enlace local]

Después de Sieve en Javascript, o os dejo el mismo algoritmo, implementado en C, y generado con diferentes compiladores.

Como era de esperar, la velocidad de ejecución es francamente superior, por lo que para obtener resultados más precisos, he aumentado las iteraciones de 10.000 en la versión Javascript, a 50.000 en esta versión en C. Para los que no os hayáis leído la descripción del algoritmo, decir que su tiempo de ejecución es aproximadamente cúbico, es decir, 50.000 iteraciones no requieren 5 veces más cálculos que 10.000, sino 125 veces.

Todas las compilaciones se han hecho con el máximo nivel de optimización para velocidad en tiempo de compilación.

Compilador Plataforma Tamaño código (bytes) Tamaño ejecutable (bytes) Tiempo de ejecución (ms)
Digital Mars C++ 8.52 506 40.476 24.945
Embarcadero C++ Builder XE x86 1.331 75.264 27.236
Microsoft Visual C++ 2010 x86 10.589 47.616 23.636
Microsoft Visual C++ 2010 x64 10.614 54.784 23.659
MingW GNU C Compiler 3.4.5 x86 930 18.315 24.904
OpenWatcom C++ 1.9 x86 732 30.720 25.880
Pelles C 6.0 x86 1.004 30.720 35.233
Pelles C 6.0 x64 1.297 38.912 35.412


Sobre los resultados, Visual C++ está en primera posición. La versión x64, es infinitesimalmente más lenta, debido a que manejar 64 bits con el número de iteraciones aplicado, no aporta ninguna ventaja, y requiere a cambio usar apuntadores a memoria de 64 bits. El tamaño del código generado es enorme, por lo agresivo del inlining que hace, aunque luego el ejecutable final esté entorno a la mitad de la tabla.

Le siguen muy de cerca GCC, con el ejecutable más compacto del lote; y luego los tecnologicamente obsoletos DigitalMars C++ (basado en Symantec/Zortech/Zorland C++) que obtiene el código más pequeño de todos; y OpenWatcom C++ (basado en Watcom C++).

A algo más de distancia, tenemos a C++ Builder, y es que Borland nunca brilló en la eficiencia de su compilador de C/C++, y con el paso del tiempo, tampoco se han dedicado los recursos necesarios a mejorarlo.

En el vagón de cola, tenemos a Pelles C, tanto en su arquitectura de 32 como de 64 bits.

En todo caso, las diferencias entre el primero y el último clasificados, rondan solamente el 20%, lo que quiere decir que es un código lo suficientemente simple como para que el optimizador no tenga mucha libertad de movimientos.

Comparando estos resultados con los obtenidos en la versión de Javascript, vemos que aunque JIT ha dado mucha mejoría, está todavía distante del código nativo en tiempo de compilación en un factor de al menos 25x.

Como de costumbre, tienes todos los fuentes y los binarios, disponibles para descargar aquí (179 Kb. en formato ZIP).

» Leer más, comentarios, etc...

Bitácora de Javier Gutiérrez Chamorro (Guti) » Programación

Sieve en C

Octubre 27th, 2010 - [Enlace local]

Después de Sieve en Javascript, o os dejo el mismo algoritmo, implementado en C, y generado con diferentes compiladores. Como era de esperar, la velocidad de ejecución es francamente superior, por lo que para obtener resultados más precisos, he aumentado las iteraciones de 10.000 en la versión Javascript, a 50.000 en esta versión en C. [...]Artículos relacionadosSieve en Pascal
Sieve en BASIC
Sieve en Javascript

» Leer más, comentarios, etc...

MadeInFlex

Adobe AIR 2.5

Octubre 27th, 2010 - [Enlace local]

adobe_air_logo.thumbnail
Después del anuncio de Adobe AIR 2.5 en la keynote del MAX 2010, ya podemos descargar tanto el runtime como el SDK de AIR 2.5.
Os pongo a continuación el enlace AIR 2.5 para que podais disfrutar de él.

» Leer más, comentarios, etc...

Variable not found

Helpers locales MVC con Razor

Octubre 26th, 2010 - [Enlace local]

ASP.NET MVC A raíz de la publicación del post anterior, en el que comentaba el uso de helpers locales para simplificar el código de las vistas, un amigo de Variable not found ha dejado un comentario con una pregunta que considero interesante: ¿se puede utilizar esta técnica con el motor Razor, presente en el inminente MVC 3?



Los helpers locales descritos en el post anterior son y seguirán siendo válidos en MVC 1, 2, 3, y posiblemente todos los que vengan detrás, puesto que en realidad se trataba únicamente de aprovechar una característica del motor de vistas basado en formularios web, es decir, el Webforms View Engine, el mismo utilizado en las aplicaciones ASP.NET “clásicas”.



Por tanto, si en MVC 3 seguimos utilizando el motor de vistas Webforms, podremos crear helpers locales tal y como se describía en el post anterior. Sin embargo, si utilizamos el motor de vistas Razor, los bloques <script runat="server"> serán ignorados, al igual que otras características propias de formularios web.



Razor dispone de su propia sintaxis para definir funciones locales utilizando el bloque @functions, como puede observarse en el ejemplo mostrado a continuación:



image



En el interior del bloque @functions podemos crear tantas funciones como necesitemos, por lo que podemos conseguir exactamente lo mismo que con su equivalente Webforms.



Publicado en: Variable not found.



» Leer más, comentarios, etc...

MadeInFlex

Resumen de la Keynote 1 del MAX 2010

Octubre 26th, 2010 - [Enlace local]

La sesión de ayer se centró sobre todo en como la plataforma Flash potenciará la revolución del concepto multiscreen. Kevin Lynch nos presentó, junto a invitados especiales, las novedades que trae Adobe, a continuación las comentamos.

Adobe AIR 2.5

Adobe AIR 2.5 SDK estará incluido en televisores, tablets, smartphones y desktop. Samsung dará soporte a la integración de AIR 2.5 en las SmartTVs de Samsung; Acer, HTC, Motorola, RIM, Samsung y otros esperan instalar este runtime en sus dispositivos en el 2011.

Como parte de AIR 2.5, Adobe anunció que las tools de desarrollo como Flash Professional CS5, Flash Builder, Flash Catalyst y Flex framework, estarán también centradas en AIR 2.5 para potenciar el desarrollo multiscreen. El nuevo Flex framework nos permite programar tanto Webs, como desktop y aplicaciones mobile con el mismo framework y con la misma calidad.

Otra novedad es Adobe InMarket, un servicio que permite a los desarrolladores distribuir sus aplicaciones en diferentes app stores.

http://m.flash.com nos permite compartir nuestras sites o aplicaciones preferidas.

También podemos disfrutar de TV bajo demanda con http://tv.flash.com.

Cualquier desarrollador podrá crear aplicaciones AIR para que sean distribuidas en el the Android Market. También será posible crear aplicaciones para Google TV, que corre sobre Android.

Nuevo Flash Builder y nuevo Flex SDK

Se hizo la presentación oficial de la nueva versión de Flash Builder “Burrito”, con soporte para desarrollar aplicaciones mobile y multi-screen, y que nos facilitará el desarrollo con nuevas posibilidades de aceleración de código.

También se anunció la nueva release del SDK de Flex, llamada “Hero”, que nos permitirá crear aplicaciones multi-screen mediante los nuevos componentes pensados para los mobile devices.

Enterprise Applications

En este apartado se presentó el nuevo LiveCycle ES 2.5, lo vimos en directo cuando se mostró la aplicación eUnity, una aplicación de visualización de datos médicos que corre sobre Flash Player.
Vimos la aplicación anterior corriendo sobre la nueva BlackBerry PlayBook tablet, la UI de la cual está basada en AIR. Nos mostraron diferentes aplicaciones AIR sobre este dispositivo.

Nuevo Adobe AIR Launchpad con soporte para Mobile

Adobe AIR Launchpad dispone de soporte para el desarrollo de aplicaciones mobile. Tiene soporte para la versión actual de Hero. Esto nos facilitará la creación de aplicaciones para dispositivos móviles.

Video

Se están desarrollando nuevas funcionalidades para mejorar las experiencias basadas en video. La alta definición junto con AIR 2.5, permitirán contenido custom para TVs, por ejemplo, podremos navegar por nuestro contenido favorito de televisión con una aplicación Air.

Vimos el servicio de video en HD bajo demanda de Amazon, de GoogleTV, HBO Go HD video en una TV Samsung.

En FMS, tendremos muy pronto soporte para video encoding y soporte para video en P2P (la keynote fue retransmitida mediante streamed P2P).

3D Soporte 3D en Flash Player y AIR

Tras investigación en el campo del 3D para la plataforma Flash, Adobe ha lanzado el Proyecto Molehill, que proporciona un conjunto de APIs 3D para Flash player y Adobe AIR. Con ello saca el máximo partido a OpenGL y DirectX y la potencia de la GPU para renderizar 3D en el Flash Player. Le permite mover millones de triángulos con una facilidad extrema.

Gaming

Aprovechando la aceleración gráfica de los dispositivos, Adobe también está innovando en el ámbito de los juegos. Flash soporta el acceso a los dispositivos de entrada, como puede ser el mando de la XBox o PS3.

El 3D también se aplica de lleno en el mundo de los juegos, vimos una demostración de un juego 3D que sólo consumía entre 0-1% de CPU, increible. Con esto, la plataforma Flash quiere competir con otras tecnologías como Unity3D.

Web Publishing

A DreamWeaver se le han añadido nuevas funcionalidades para ayudarnos en la creación de webs, para que el diseño multi-screen y el control del CSS y Layouts sea más fácil. También se ha añadido soporte para HTML5 para soportar el futuro stándard.

Se presentó otra herramienta, SiteCatalyst NetAverages, que nos ayuda a ver las tendencias en internet para optimizar nuestros proyectos web.

Digital Publishing

A partir de Adobe SiteCatalyst, se ha creado una herramienta denominada Digital Publishing Suite para editores que quieren crear, producir, distribuir, monetizar y analizar su contenido.

Consulta más y síguelo en max online.

» Leer más, comentarios, etc...

MadeInFlex

Rome: lo nuevo de Adobe en creación de contenidos y publicidad

Octubre 26th, 2010 - [Enlace local]

El Project ROME de Adobe es una herramienta de creación de contenido y publishing. ROME permite usar la potencia de video, audio, fotos, gráficos, texto o animaciones en nuestro proyectos, presentaciones digitales y websites de manera sencilla. Además ROME es accesible mediante web o también tenemos la aplicación AIR para trabajar desde local.

ROME quiere usar la potencia del ámbito multimedia, mediante una interface limpia, sencilla y potente, para poder acercarse también a aquellos que no son diseñadores profesionales, pero que quieren expresar sus ideas con contenido digital.
descubridlo aquí.

» Leer más, comentarios, etc...

Picando Código

Anunciada la agenda para RubyConf Uruguay 2010

Octubre 26th, 2010 - [Enlace local]

RubyConf Uruguay 2010

RubyConf Uruguay 2010

Ya contamos con la agenda de la RubyConf Uruguay 2010.

Habrán tutoriales para practicar lo que se va aprendiendo, así que podemos llevar una laptop, o juntarnos alguien más que haya llevado una. Anuncian que habrán conexiones y wi-fi para todos.

Creo que mi laptop me va a acompañar en esta aventura :D

En los próximos días la voy a ir “acondicionando” para la ocasión, dejando Ruby, Git y Rails instalados. Además, veré de ir twitteando el evento.

Habrá traducción simultánea Inglés-Español para que todos puedan entender las charlas.

A continuación los días y horarios:

Viernes, 29 de octubre

09:00 – Registración y desayuno
09:45 – Bienvenida
10:00 – Tutorial: Ruby en Windows – Luis Lavena
11:00 – Coffee Break
11:15 – Tutorial: Ruby on Rails básico
13:15 – Almuerzo
14:30 – TreeTop – Juan Maiz
15:00 – Dry Code – David Chelimsky
15:30 – Introduction to Sinatra – Blake Mizerany
16:00 – Coffee Break – Cubox
16:15 – Ohm / Redis – Michel Martens
16:45 – Rubinius – Brian Ford
17:15 – Node.js – Federico Romero
17:45 – Coffee Break
18:00 – SCRUM: Getting Started Kit – Gabriel Ledesma
18:30 – Fun with Fibers in Ruby 1.9 – Aaron Patterson
19:00 – Lightning Talks

Sábado, 30 de octubre

09:00 – Registración y desayuno
09:45 – Bienvenida
10:00 – Tutorial: Git – Scott Chacon
12:00 – Coffee Break – Citrusbyte
12:15 – Clojure vs Ruby – Federico Brubacher
12:45 – Identity Map en ActiveRecord – Emilio Tagua
13:15 – Almuerzo
14:30 – The Hashrocket Way – Leo Soto
15:00 – HTML5, Websockets & Ruby – Ismael Celis
15:30 – jRuby – Charles Nutter
16:00 – Coffee Break – GitHub
16:15 – Patterns en Ruby – Ignacio Facello
16:45 – Mi viaje por RSpec – Carmen Diaz
17:15 – Metaprogramming – Santiago Pastorino
17:45 – Cofee Break
18:00 – Social Software for Robots – Blaine Cook
18:30 – Ruby (and others) on Android – Tim Bray
19:00 – Keynote – Evan Henshaw-Plath

¡Nos encontramos ahí!

Comparte: Print del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com Tumblr Twitter

» Leer más, comentarios, etc...

Variable not found

Helpers locales en vistas ASP.NET MVC

Octubre 25th, 2010 - [Enlace local]

ASP.NET MVC Los helpers son un mecanismo muy habitual para evitar el efecto “tag soup”, es decir, la mezcla de etiquetas HTML y bloques de código de servidor, en el interior de una vista. Sin dudarlo, cuando la legibilidad del código de la vista peligre o rompamos el principio DRY, estas pequeñas (y a veces no tan pequeñas) funciones nos permitirán aislar la lógica de presentación y simplificar las vistas.



Observad, por ejemplo, el siguiente código, en el que existe una lógica duplicada, y un gran número de aperturas y cierres de bloques que dificultan su lectura, y facilitan la introducción de errores:



Algo de sopa de etiquetas



Esto podría simplificarse un poco creando un helper como el siguiente:



 Código del helper



De esta forma, la vista quedaría como sigue; hemos ganado bastante en legibilidad y simplicidad de la misma respecto a la primera versión:



Código de la vista simplificado



Sin embargo, cuando andamos embarcados en un proyecto relativamente extenso, enseguida notaremos que los helpers empiezan a multiplicarse. En casi cualquier vista medianamente compleja  utilizaremos uno o más helpers, a veces difícilmente reutilizables entre ellas, y esto hace que al final tengamos que mantener una amplia colección de métodos extensores que en la práctica sólo utilizamos una vez.



En estos escenarios es donde suelo utilizar helpers locales, funciones incluidas en el mismo archivo .aspx, en el interior del tag <script runat="server">, como en los viejos tiempos:



Código de la vista con helpers locales



De esta forma podemos beneficiarnos de las siguientes ventajas:

Obviamente esta técnica sólo tiene sentido utilizarla cuando se trata de funciones de utilidad exclusiva en la vista donde se definen; si lo que queremos es reutilizar, sin duda los helpers tradicionales son una fórmula mucho más apropiada.



Publicado en: Variable not found.



» Leer más, comentarios, etc...

Fetishcode

Clonar maquinas virtuales con CloneVDI Tool.

Octubre 25th, 2010 - [Enlace local]

A

» Leer más, comentarios, etc...

MadeInFlex

Hero, Panini y Burrito en labs

Octubre 25th, 2010 - [Enlace local]

Así es, el día de hoy es posible descagar de labs las versiones preview de Flex SDK Hero con sus funcionalidades para dar soporte al desarrollo de aplicaciones móviles mediante Flex, Flash Catalyst Panini que entre sus aportaciones más destacadas tiene aplicaciones rescalables y componentes, un panel de componentes, línea de tiempo mejorada, algunos cambios en las interacciones y un flujo de trabajo más eficiente.


Y por último Flash Builder Burrito del que ya habíamos hablado en Made In Flex, que en esta versión sorprenderá a más de uno con desarollo móvil y de aplicaciones multi pantalla, programación acelarada de proyectos Flex y de ActionScript, mejoras en el flujo de trabajo con Flash Catalyst y una plataforma con mejor desempeño.

Así que no esperes más para descargarlos todos y compartir tu experiencia con nosotros!

» Leer más, comentarios, etc...

Variable not found

Enlaces interesantes 19

Octubre 24th, 2010 - [Enlace local]

Estos son los enlaces publicados en Variable not found en Facebook y Twitter desde el domingo, 17 de octubre de 2010 hasta el domingo, 24 de octubre de 2010. Espero que te resulten interesantes. :-)

Y no olvides que puedes seguir esta información en vivo y en directo desde Variable not found en Facebook, o a través de Twitter.



Publicado en: Variable not found



» Leer más, comentarios, etc...

Fetishcode

Windows xp en bucle de reinicio

Octubre 24th, 2010 - [Enlace local]

A

» Leer más, comentarios, etc...

MadeInFlex

Creación de componentes gráficos ligeros con Spark

Octubre 23rd, 2010 - [Enlace local]

Al crear componentes en Flex, siempre deberíamos tener en mente la optimización: un componente más ligero ocupará menos memoria y repercutirá positivamente en la respuesta de la aplicación. Es un punto importantísimo, aunque, a menudo, no lo tengamos en cuenta, posiblemente debido a que cada vez tenemos equipos más potentes.
Es necesario si queremos tender a una programación que no exija un consumo de memoria excesivo y que no perjudique la performance de la aplicación, y es imprescindible para desarrollar aplicaciones con Flex para mobile devices.

Distintos tutoriales de Flex 4 explican que para crear componentes custom, extendamos SkinnableComponent, le demos el comportamiento deseado, tratemos los eventos y estados del componente y que finalmente creemos la skin para tener la representación visual del componente.

Después de leer varios artículos he descubierto unas clases que pueden ayudar a la creación de componentes gráficos custom y que quisiera compartir con vosotros.

SpriteVisualElement

Una de las clases de las que quiero hablar en este post es SpriteVisualElement.

Comparación entre SpriteVisualElement y UIComponent

Comparando esta clase con UIComponent, que es la clase base que se suele usar para componentes visuales, tanto los interactivos, como los que no, vemos que SpriteVisualElement parece ser más light-weight, ya no sólo pro el número de líneas que contiene esta clase (2900 aprox. UIComponent tiene unas 13000), sino por el número de interfaces que deben implementar cada una (SpriteVisualElement implementa 3 interfaces, UIComponent implementa 16).

UIComponent aporta más características, pero si no las necesitamos, SpriteVisualElement es la clase base ideal.

En la página de SpriteVisualElement dentro de la Language Reference, se describe como la clase más ligera para las implementaciones basadas en Sprite de la interface IVisualElement y que los layouts Spark pueden gestionar objetos de este tipo.

Si usamos ActionScript para añadir un componente FXG a nuestra aplicación, éste debe ser de tipo SpriteVisualElement. IVisualElement proporciona las constraints de layout tal que height, width, top, right, bottom, left…

Otro punto importante es que al ser una clase hija de Sprite, tiene las características de cualquier Flash interactive object, es un Sprite que puede ser usado en arquitecturas Spark.

Creación de un Custom SpriteVisualElement component

El proyecto que adjunto viene a ser como un cronómetro: haciendo click sobre él, podemos ponerlo en marcha o pararlo.

Pasos en la vida del componente

Al crear custom components debemos tener muy en cuenta el ciclo de vida del componente, y en este caso las dimensiones y layout del componente, importante a la hora de redibujarlo. Durante el proceso de layout del componente, Spark hace una llamada a setLayoutBoundsSize(width, height, postLayoutTransform), que determina las dimensiones del componente en la disposición de éste, es decir, las dimensiones que usa para dibujarse.
La llamada a setLayoutBoundsSize puede afectar a la posición del layout. Podemos llamar setLayoutBoundPosition() después de haber llamado a setLayoutBoundSize() para reubicar el componente.
En el código de ejemplo la función setLayoutBoundsSize ha sido sobrescrita:

Cuando el componente cambie una propiedad que afecte a su distribución y repintado, debemos invalidarlo para que Flex lo redibuje. Lo haremos con invalidateParentSizeAndDisplayList().

Al producirse esta invalidación, Flex lanza la función setLayoutBoundsSize para repintar el componente con los nuevos cambios en las propiedades.


GraphicElement

Es una clase más ligera que SpriteVisualElement, poniéndose, en cuanto a jerarquía, al nivel de DisplayObject. Es la clase base para definir un elemento gráfico, como shapes, text o images. Al definir un objeto gráfico, debemos especificar las dimensiones del elemento, pero no nos permite usar una especificación de éstas en valores porcentuales.

En este ejemplo,el autor nos muestra un uso adecuado de esta clase.

Debemos tener claros dos conceptos: las fronteras que delimita un determinado objeto dentro del espacio de coordenadas del padre y las fronteras que delimita dentro de su propio espacio de coordenadas.

Para hacer transformaciones necesitamos la clase Matrix, lo que sobrescribe valores de transformación previamente definidos como rotation, scaleX, scaleY, x e y. Si setteamos transform.matrix o las propiedades de transformación en ActionScript, se usarán los últimos valores aplicados.

La responsabilidad de la clase GraphicElement y sus subclases es la de dibujar componentes gráficos Spark, componentes FXG que parten de GraphicElement.

No confundir GraphicElement con DisplayObject, ya que la primera no nos da ningún tipo de interacción. GraphicElement usa un DisplayObject interno para dibujarse. Dentro del mismo display object podemos dibujar varios elementos gráficos. Así reducimos sobrecarga y damos un mayor rendimiento.

Será necesario implementar ciertas interfaces como IVisualElement y IGraphicElement y así poder ser dibujada y dispuesta por Spark.

Puntos claves de GraphicElement:

Creación de un custom GraphicElement

Con FXG y el elemento Path, dibujamos la mayoría de elementos gráficos. Un Path se representa en un display object. A veces nos será más fácil crear elementos gráficos con GraphicElement, sobre todo cuando el elemento a dibujar es dinámico en cuando a cambio en su forma.

Al crear un GraphicElement custom debemos considerar lo siguiente:

Control del display object compartido

El control de los display objects asociados a un GraphicElement lo hace Flex. Si necesitamos manipular personalmente el DisplayObject en lugar de dejárselo a Flex, se nos ofrece diferentes vías:

Información legal y técnica