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

Variable not found

Parámetros opcionales: úsense con precaución

Mayo 31st, 2010 - [Enlace local]

.NET Los parámetros opcionales son una interesante ayuda que hace tiempo que está presente en otros lenguajes como Visual Basic .NET, y ha sido introducida en la versión 4.0 de C#, para alegría de muchos.



A grandes rasgos, esta característica nos permite especificar valores por defecto para los parámetros de nuestros métodos, ahorrándonos tiempo de codificación:



class Program
{
    public static void Main(string[] args)
    {
        Muestra();            // Imprime 1,1
        Muestra(8);           // Imprime 8,1
        Muestra(3,4);         // Imprime 3,4
        Console.ReadKey();
    }
 
    static void Muestra(int a=1, int b=1)
    {
        Console.WriteLine(a + "," + b);
    }
}


Desde siempre, ignorante de mí, había pensado que esto no era más que una triquiñuela del compilador, un azucarillo sintáctico destinado a facilitarnos la creación de sobrecargas de forma rápida, pero, ahora que lo he estudiado algo más a fondo, resulta que no es así. De hecho, los parámetros opcionales están soportados a nivel de plataforma, y funcionan de forma algo extraña (o al menos diferente a lo que podía esperarse), por lo que es conveniente conocerlos bien para no cometer determinados errores.



En primer lugar, me ha llamado la atención que la detección de la ausencia de parámetros en la llamada y la asignación de los valores por defecto no la realiza el método en el que se han definido. Es decir, sobre el ejemplo anterior, no es el método Muestra() el que comprueba si se han suministrado valores para los parámetros a y b, ni el que le asigna los valores por defecto en caso contrario. Esta "comprobación" se realiza en tiempo de compilación (!).



Esto lo demostramos muy fácilmente si descompilamos esta misma aplicación con ayuda del imprescindible Reflector, que nos mostrará el siguiente código:



class Program
{
    public static void Main(string[] args)
    {
        Muestra(1, 1);
        Muestra(8, 1);
        Muestra(3, 4);
        Console.ReadKey();
    }
 
    public static void Muestra([Optional, DefaultParameterValue(1)] int a, 
     [Optional, DefaultParameterValue(1)] int b)
    {
        Console.WriteLine(a + ", " + b);
    }
}


Como se puede observar, se ha generado un método Muestra() cuyos parámetros incluyen atributos que indican su opcionalidad y el valor por defecto en cada caso.



Pero lo curioso está en el método Main(), desde donde se hacen las llamadas, el que podemos observar que las invocaciones a Muestra() incluyen valores para todos los parámetros, como si se tratara de constantes especificadas directamente por el desarrollador.



Por tanto, no hay nada mágico en los métodos con parámetros opcionales, ni sobrecargas, ni código de comprobación o asignación insertado de forma automática. Es el propio compilador el que, en el momento de generar el código IL, extrae los valores por defecto de los parámetros no especificados en la llamada examinando los atributos presentes en la signatura y los introduce en la invocación.



Y es aquí justo donde hay que tener cuidado al utilizar los parámetros opcionales. Dado que el valor de los parámetros se determina en tiempo de compilación y se incluyen como constantes en el código IL generado, pueden producirse efectos no deseados si trabajamos con distintos ensamblados.



Veámoslo con un ejemplo, que, aunque poco real, creo que ilustrará un escenario donde los parámetros opcionales podrían jugarnos una mala pasada.



En el siguiente código, perteneciente al ensamblado LogicaNegocio.dll, vemos un método CalculaImporteconIva(), que retorna un importe aplicándole el impuesto (IVA) correspondiente:



public class LogicaNegocio
{
    public double CalculaImporteConIva(double importe, double iva = 0.16)
    {
        return importe + importe*iva;
    }
}


Así, podemos tener un ensamblado externo, pongamos ERP.exe, que haga uso de este método de la siguiente forma:



public void muestraDesglose(double importe)
{
    double importeTotal = logica.CalculaImporteConIVA(importe)
    // Mostrarlo...
}


En el momento de compilación de ERP.exe, la llamada anterior quedará en el ensamblado resultante igual que si hubiéramos hecho esta llamada:

 
    double importeTotal = logica.CalculaImporteConIVA(importe, 0.16)


Si ahora se produce una subida de IVA (como lamentablemente va a ocurrir en breve), acudiríamos a modificar el valor por defecto del parámetro iva en el método CalculaImporteConIva() y recompilaríamos LogicaNegocio.dll:



public class LogicaNegocio
{
    public double CalculaImporteConIva(double importe, double iva = 0.18)
    {
        return importe + importe*iva;
    }
}


Sin embargo, si no recompilamos ERP.EXE desde éste seguiríamos enviándole el valor anterior (0.16, recordad que este valor aparece como constante en el ensamblado), lo que podía provocar algún problema. Es decir, si queremos mantener la coherencia del sistema, nos veríamos obligados a recompilar todos los ensamblados que referencien LogicaNegocio.dll.



Conclusión: en métodos públicos, y especialmente en aquellos que serán consumidos desde ensamblados externos, es conveniente utilizar parámetros opcionales sólo cuando los valores constantes sean “verdades universales”, como las constantes matemáticas o datos que con toda seguridad no van a cambiar.  No es buena idea utilizarlos para reflejar valores variables o constantes de lógica de negocio, con posibilidades de cambio aunque sean remotas.



Por último, comentar que aunque este post está centrado en C#, todas estas precauciones son igualmente válidas para Visual Basic .NET.



Publicado en: Variable not found



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

Picando Código

Borro mi perfil en Facebook

Mayo 31st, 2010 - [Enlace local]

Hoy 31 de mayo es el “día de borrarse de Facebook”. Y para festejarlo, dejé una nota a mis “amigos en Facebook” titulada como este post, con este mensaje:

¡Abajo Facebook!

¡Abajo Facebook!

Los invito a leer porqué borrar su perfil de Facebook.

Si lo necesitan, no van a tener problema en contactarme. Los que quieran decirme algo tienen mi mail, los que quieran mostrarme una foto o video pueden subirla a algún otro servicio o mandarla por mail (como siempre se hizo).

Los que les interese saber en qué ando, vean mi blog o siganme en twitter o Identica.

Los veré de nuevo cuando terminen el proyecto Diaspora

¡Saludos!

Al menos una siguió el mismo camino. ¡Los invito a hacer lo mismo!

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

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

MadeInFlex

Usando Data Centric Development (DCD) en proyectos Flex/Java con WTP

Mayo 30th, 2010 - [Enlace local]


  1. Introducción
  2. El problema
  3. La solución
  4. Conclusiones

La instalación de Flash Builder 4 plug-in incluye el paquete Ganymede de Eclipse, pero podemos optar por instalarlo sobre una distribución de eclipse alternativa (y mas reciente), como el paquete Galileo del Eclipse IDE for Java EE Developers, el cual incluye Web Tools Platform (http://www.eclipse.org/home/categories/index.php?category=enterprise).

Introducción

Instalar Flash Builder 4 como plug-in del paquete Galileo nos permite crear proyectos Flex y Java combinados, esto es, en un mismo proyecto tendremos el código fuente de la capa de presentación (Flex) y de la capa de negocios (Java), sin necesidad de dos proyectos por separado.

El problema

Al parecer existe un bug en la creación de un proyecto Flex/Java en cuanto al uso de las macros web.context y web.content que provoca que la los parámetros “serverContextRoot” y “serverRootURL” no tomen los valores adecuados y que funcionalidad DCD no funcione.

Al crear un proyecto Flex aparece la opción de crear un proyecto combinado Flex/Java

Creación de proyecto Flex/Java con WTP

Creación de proyecto Flex/Java con WTP


Al seleccionar la opción y oprimir “Next” pasamos a configurar el servidor J2EE. Si es la primera vez que creamos un proyecto de este tipo en el Workspace, debemos definir un nuevo servidor oprimiendo “New” y seguir los pasos del asistente. En caso contrario seleccionamos un servidor existente.

El valor del campo “Content Folder” (donde se almacenará la aplicación a desplegar luego en Tomcat) por defecto es “WebContent”, dejaremos este valor y luego veremos el efecto que trae. Debemos también indicar el lugar donde se encuentra el archivo “blazeds.war”, en este caso usamos el que viene en el paquete “blazeds-bin-4.0.0.14931.zip” (https://www.adobe.com/cfusion/entitlement/index.cfm?e=lc_blazeds). Oprimimos “Next” y luego “Finish”. Terminaremos con un proyecto con una estructura como esta:

Estructura de un proyecto Flex/Java

Estructura de un proyecto Flex/Java


Notemos que la carpeta “WebContent” tiene la estructura de una aplicación J2EE, como la que se despliega en Tomcat. Intentemos ahora utilizar la funcionalidad de DCD en este proyecto. Lo que haremos será crear una clase Java con un método público y la expondremos como destino remoto, configuraremos el servlet RDSDispatchServlet (encargado de descubrir las clases expuestas como destinos remotos y los métodos que éstas contienen) y veremos si Flash Builder 4 es capaz de encontrarlo.

La clase Java puede ser una como ésta:

Para hacerla disponible como destino remoto añadimos al archivo WebContent/WEB-INF/flex/remoting-config.xml lo siguiente:

Finalmente para configurar el RDSDispatchServlet añadimos lo siguiente al archivo WebContent/WEB-INF/web.xml

Compilamos el proyecto y desplegamos la aplicación (el contenido de WebContent) en Tomcat (el que tenemos en el WorkSpace u otro externo) y cuando en la vista “Data/Services” de la perspectiva “Flash Development” tratamos de conectarnos a un servicio/datos de tipo BlazeDS sin usar autenticación:

Conexión a un servicio/dato de tipo BlazeDS

Conexión a un servicio/dato de tipo BlazeDS

Obtenemos el siguiente error:

Error en la conexión al servlet  RDSDispatchServlet

Error en la conexión al servlet RDSDispatchServlet

Luego de verificar que lo que se indica en los puntos 1, 2 y 3 está correcto sólo nos queda verificar la configuración del proyecto.
La configuración del servidor para el proyecto según como se definió en la creación del mismo queda de la siguiente manera:

Propiedades del proyecto Flex/Java

Propiedades del proyecto Flex/Java

Pero al examinar el contenido del archivo “.flexProperties” que se encuentra en la raíz del proyecto notamos que el parámetro “serverContextRoot” está definido cómo

Sin embargo el parámetro “serverRootURL” tiene el valor:

De esa manera el servlet “RDSDispatchServlet” no podrá encontrar la clase que hemos definido como destino remoto, el parámetro “serverContextRoot” debe contener el nombre de la aplicación desplegada en Tomcat, en este caso “FlexWTPProject” (la última parte del url, sin el slash final).

Cuando se crea el proyecto, “serverContextRoot” toma el valor del campo “Content Folder”, y no hay modo de cambiar su valor luego en las propiedades del proyecto. Se pudiera modificar manualmente en el archivo “.flexProperties”, pero éste se genera nuevamente cuando se modifica alguna propiedad del proyecto y se perderían los cambios.

La solución

La solución es asignar al campo “Content Folder”, durante la creación del proyecto, el valor del nombre del proyecto, que a su vez forma parte del parámetro “serverRootURL”.

Configuración del servidor JEE en un proyecto Flex/Java

Configuración del servidor JEE en un proyecto Flex/Java

De esta manera, una vez desplegada la aplicación, cuando intentemos conectarnos a un servicio/dato a través de la vista “Data/Services” obtendremos lo siguiente:

Resultado de la conexión a un servicio/dato de tipo BlazeDS

Resultado de la conexión a un servicio/dato de tipo BlazeDS

Lo cual nos indica que el servlet “RDSDispatchServlet” ha encontrado la clase java que hemos definido como destino remoto. Seleccionamos el destino, indicamos el nombre de los paquetes y al oprimir “Finish” el asistente generará el código correspondiente (en este ejemplo en particular no se genera ningún valueObject ya que el tipo de dato de retorno del método es String, el cual es soportado nativamente por ActionScript).

Código generado por el asistente.

Código generado por el asistente.


Vista Data/Services luego de la generación de código

Vista Data/Services luego de la generación de código

La opción de nombrar al proyecto “WebContent” y aceptar el valor inicial propuesto para el campo “Content Folder” ni siquiera se contempla, por razones obvias ;-)

Conclusiones

Siguiendo los pasos que hemos explicado en este artículo podremos crear proyectos Flex/Java con WTP y explotar la funcionalidad del Data Centric Development introducido en Flash Builder 4, la cual representa sin dudas un gran paso hacia el objetivo de lograr un entorno de trabajo altamente productivo para el desarrollo de RIA con Adobe Flex y Java.

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

Fetishcode

Recomendaciones Literarias en ADF

Mayo 28th, 2010 - [Enlace local]

A

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

Picando Código

Un día en la vida de un programador – parte perdida

Mayo 28th, 2010 - [Enlace local]

One Day In The Life Of A Coder - The Lost Part

One Day In The Life Of A Coder - The Lost Part

- “A veces pienso que es injusto que nuestros usuarios siempre se quejen y nunca vean lo que hay de bueno en las aplicaciones que construímos”

-¡¡¡Qué IDE de porquería!!! ¿Quién ha hecho tal mierda?

-¿Qué te parece?

Tuve que publicarlo por sentirme tan identificado con el programador de azul… Cuando estoy trabajando, 4 de cada 5 cosas que digo en voz alta son para maldecir el IDE :P
A lo mejor deberíamos reconocer más el trabajo que otros programadores hacen en las herramientas que usamos. Excepto los de Adobe… que son responsables de Flex Builder… y Flex apesta… Ups, ahí se fue mi objetividad. ¿Alguien la vió? Si la encuentran me la mandan de vuelta…

Del cómic Geek and Poke
Original: One Day In The Life Of A Coder – The Lost Part

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

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

DGG

Convertir una aplicación web spring-web flow en portlet JSR-168

Mayo 28th, 2010 - [Enlace local]

Crear el archivo portlet.xml


	sample
	org.springframework.web.portlet.DispatcherPortlet
	
		text/html
		view
	
	
		Sample Portlet
	

Modificar archivo web.xml


    ViewRendererServlet
    org.springframework.web.servlet.ViewRendererServlet



    ViewRendererServlet
    /WEB-INF/servlet/view

Añadir los beans controladores de spring web-flow










































Modificar las jsps

Cada enlace tendrá que construirse de la forma:


  


Texto del enlace 

Formularios:


 
 



 

" type="submit"/>

Para más información consultar la documentación oficial de Spring MVC:

http://static.springsource.org/spring/docs/2.0.x/reference/portlet.html


Filed under: mini-tutorial Tagged: j2ee, jsr, spring

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

Picando Código

Aplicando Scrum cumple un año en línea

Mayo 28th, 2010 - [Enlace local]

Aplicando Scrum, mi blog sobre Scrum y metodologías ágiles, cumple hoy un año en línea.

Aplicando Scrum - 1 año

Aplicando Scrum - 1 año

Si bien no he posteado ahí tanto como hubiera querido, he juntado bastante material y experiencia interesante.

Pasen por el post 1 año Aplicando Scrum para leer un resumen de lo que fue este año con Scrum.

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

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

Buayacorp

Reiniciar auto_increment cada año en MySQL

Mayo 28th, 2010 - [Enlace local]

Alguna vez vamos a necesitar reiniciar el contador del auto_increment cada año. Por ejemplo si tenemos una tabla recibos quisieramos que el número de recibo empieze desde 1 el año siguiente.

Para esto hay un pequeño artificio en MySQL que nos puede ayudar:

SQL:
 
CREATE TABLE `recibos` (
  `anio` year(4) NOT NULL,
  `ID` int(5) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY  (`anio`,`ID`)
) ENGINE=MyISAM;
 

El truco está en que el campo primario debe ser la composición de dos campos; donde la columna con AUTO_INCREMENT es la segunda columna del índice.

SQL:
 
/* Ingresamos datos */
INSERT INTO `recibos` (`anio`) VALUES ('2010'), ('2010'), ('2010'), ('2011'), ('2011');
 
/* Mostramos los datos */
SELECT * FROM `recibos`;
 

El resultado sería:

CODE:
 
+------+----+
| anio | ID |
+------+----+
| 2010 |  1 |
| 2010 |  2 |
| 2010 |  3 |
| 2011 |  1 |
| 2011 |  2 |
+------+----+

La limitación es que este tipo artificio sólo funciona en tablas del tipo MyISAM.

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

Cerebro en la Sombra » Técnico

SAI Salicru bajo Linux con nut y monitorización en Cacti

Mayo 28th, 2010 - [Enlace local]

Recientemente he tenido que cambiar el SAI que tenía en casa desde hace unos años, un Powermust 1000 que me había dado muy buen resultado, sin embargo las baterías habían llegado a su fin. En App encontré uno con muy buena pinta, con puerto USB para monitorización, indicaban que soportaba Linux y, además, fabricado en España :| , el Salicru SPS 900 One, a un precio insuperable. Me lo llevo :P .

La decepción llegó al instalarlo. La monitorización se hace a través de una aplicación propia, algo que no me convencía ya que estaba acostumbrado a utilizar nut y a tenerlo integrado en Cacti.

Leyendo y probando algunos drivers encontré cómo hacerlo funcionar :) . Muy sencillo.

  1. ./configure –with-usb –with-snmp –with-cgi –prefix=/usr –with-cgipath=/path/to/cgi-bin/nut/
  2. make
  3. make install

Esto instalará todo lo necesario y dejará los scripts para acceder vía web al estado del SAI en la ruta indicada.

No voy a entrar en detalles de la configuración, sólo indicar que el driver a utilizar es blazer_usb:

  1. cat /etc/ups/ups.conf
  2. [salicru]
  3. driver = blazer_usb
  4. port    = auto
  5. desc    = "Sai Salicru 900"

Con eso iniciamos los demonios upsd y si todo va bien  lo tendremos funcionando. Si vamos a la ruta donde dejamos los scripts web veremos:

ups0 SAI Salicru bajo Linux con nut y monitorización en Cacti

ups1 SAI Salicru bajo Linux con nut y monitorización en CactiPrimer paso preparado. Vamos ahora a configurar el monitor de avisos para que sepamos cuando el SAI cambia de estado (se va la luz en casa, vuelve, se queda sin batería, etc.). Esto lo controla el demonio upsmon. Como veis se monitoriza todo bien excepto el nivel de batería, este SAI no informa de ese dato, pero tampoco es algo crítico, los cambios de estado sí que funcionan correctamente, con eso es suficiente para nuestro propósito.

Primero preparamos la configuración.

  1. # cat upsmon.conf
  2. MONITOR salicru@localhost 1 monmaster momi master
  3. MINSUPPLIES 1
  4. SHUTDOWNCMD "/sbin/shutdown -h +0"
  5.  
  6. NOTIFYCMD /bin/avisoups
  7.  
  8. POLLFREQ 5
  9. POLLFREQALERT 5
  10. HOSTSYNC 15
  11. DEADTIME 15
  12. POWERDOWNFLAG /etc/killpower
  13.  
  14. NOTIFYMSG ONBATT "El SAI esta funcionando con bateria."
  15. NOTIFYMSG LOWBATT "La bateria del SAI esta muy baja"
  16. NOTIFYMSG SHUTDOWN "El servidor sera apagado inmediatamente"
  17. NOTIFYMSG ONLINE "EL SAI esta funcionando con alimentacion externa"
  18.  
  19. NOTIFYFLAG ONBATT WALL+EXEC
  20. NOTIFYFLAG LOWBATT WALL+EXEC
  21. NOTIFYFLAG SHUTDOWN WALL+EXEC
  22. NOTIFYFLAG ONLINE WALL+EXEC
  23.  
  24. RBWARNTIME 43200
  25. NOCOMMWARNTIME 300
  26. FINALDELAY 5

Además de definir los mensajes que queremos recibir, le indicamos también que en los cambios de estado llame al script /bin/avisoups.

  1. # cat /bin/avisoups
  2. #!/bin/bash
  3. /bin/echo "$*" | /usr/local/bin/gammu –sendsms TEXT 666666666
  4. echo "$*" | mail -s "Aviso del SAI" tu@tudominio.com

Este script se ejecutará en cada cambio de estado que se produzca en el SAI y recibirá como parámetro el texto correspondiente al nuevo estado. En mi caso me envío un email y un SMS a través de Gammu.

Levantamos el demonio upsmon y probamos a enchufar y desenchufar la alimentación externa del SAI. Si todo va bien recibirás un email y/o un sms con el aviso :) .

Cuando al SAI se le termine la batería apagará el servidor para evitar que se corte la alimentación de golpe. Si configuras la Bios para que arranque automáticamente cuando reciba alimentación, se reiniciará él solito en cuanto vuelva la luz :) .

Integración con Cacti

Para integrar la monitorización en Cacti podemos utilizar estas plantillas ya creadas.

Una vez instalada y creada en el host que hace de monitor debemos configurar el “Data source” correspondiente indicando el SAI que debe monitorizar, en mi caso salicru@localhost.

Cacti 1275046149348 SAI Salicru bajo Linux con nut y monitorización en CactiSi todo ha ido bien, comenzaremos a ver la gráfica de nuestro SAI. Tendremos sólo las líneas Input, Output y Load, la de Batteries, como he indicado, no se recibe en este SAI.

graph image SAI Salicru bajo Linux con nut y monitorización en Cacti

Ya tenemos nuestro SAI baratito bien instalado y configurado. A partir de ahora nos avisará cuando haya cortes de luz, apagará el equipo, se encenderá de nuevo automáticamente y, si lo configuramos todo bien, tendremos hasta un SMS en nuestro móvil. Y todo ello monitorizado a través de Cacti :) .

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

Picando Código

¡Feliz cumpleaños WordPress! 7 años

Mayo 27th, 2010 - [Enlace local]

WordPress
WordPress

Hoy WordPress el sistema encargado de este sitio y millones de sitios más en el mundo cumple 7 años:

Posted May 27, 2003 by Matt. Filed under Releases.

I am very happy to announce that the first release of WordPress is now available for download. A full change log is available, but here is a brief overview of the new features.

Así lo anunciaron en Twitter, con la frase “Fue hace siete años hoy”.

De parte de un fanático de WordPress ¡felicitaciones! Gracias a WordPress por simplificar la forma en que publicamos contenidos en la web, darnos trabajo, y horas de diversión programando plugins :)

Estén atentos ya que WordPress 3.0 está bastante cerca. Quedan pocos bugs por arreglar, así que veremos una Release Candidate dentro de poco.

http://wordpress.org

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

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

Variable not found

Cómo ejecutar paso a paso ASP.NET MVC framework

Mayo 27th, 2010 - [Enlace local]

ASP.NET MVC La mejor forma de entender y conocer los entresijos de cualquier código es ver sus interioridades en funcionamiento: poder introducir puntos de ruptura, ejecutar paso a paso, ver los valores de parámetros, de retornos… incluso retocarlo para ver lo que ocurre.



En sistemas relativamente complejos como el framework MVC, puede sernos de mucha utilidad además para entender qué está pasando en determinadas circunstancias, y ayudarnos a decidir la solución óptima a un problema.



Una posibilidad es configurar Visual Studio para utilizar los servidores de símbolos de Microsoft (aquí hay un buen artículo que explica paso a paso cómo conseguirlo). Esto nos permitirá realizar el seguimiento sobre todo el framework ASP.NET, MVC incluido.



Sin embargo, dado que el código fuente de ASP.NET MVC está disponible en Codeplex, es realmente sencillo estudiar su funcionamiento de esta forma. Sólo seguir estos pasos:

Y con estas sencillas operaciones, ya podemos comenzar a disfrutar de inolvidables sesiones de depuración y experimentación ;-)



Punto de ruptura en ASP.NET MVC



Publicado en: Variable not found

Hey, ¡estoy en twitter!



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

Picando Código

Actualización a GRUB 2 y doble booteo: Debian GNU/Linux y ArchLinux

Mayo 26th, 2010 - [Enlace local]

Debian + ArchLinux

Debian + ArchLinux

Venía usando Grub legacy como había comentado en mi post anterior sobre doble booteo con Debian y Archlinux. Debian Squeeze tenía instalado GRUB 2 desde hace tiempo, pero todavía no había migrado. Tras un tiempo sin reiniciar o apagar la computadora, cuando lo hice, booteó en Debian por defecto. Decidí que ya era momento de cambiar esto, ya que estoy usando ArchLinux todo el tiempo.

Aproveché que estaba en eso, para hacer un mantenimiento, borrando kernels viejos de Debian. Tenía desde la versión 2.6.26-2, y ahora Debian está usando 2.6.32-trunk. Borrados los kernels, ejecuté el comando de actualización de Grub Legacy a Grub 2:

upgrade-from-grub-legacy
0
Installation finished. No error reported.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-trunk-amd64
Found initrd image: /boot/initrd.img-2.6.32-trunk-amd64

(...)

GRUB Legacy has been removed, but its configuration files have been preserved,
since this script cannot determine if they contain valuable information.  If
you would like to remove the configuration files as well, use the following
command:

rm -f /boot/grub/menu.lst*

Como ven, ya podría borrar los archivos viejos de Grub. Pero ahí tengo la configuración del booteo en Arch que metí a mano. En Grub2, se usa el comando grub-mkconfig para crear el nuevo archivo de configuración. Al ejecutarlo, se detecta Debian pero no ArchLinux. Anteriormente había agregado un Windows a mano en el GRUB 2 de otra computadora usando Kubuntu, así que ya había aprendido cómo se hace.

Para agregar entradas, la mejor opción es editar el archivo /etc/grub.d/40_custom, las entradas en este archivo se agregarán automáticamente cuando se ejecute grub-mkconfig.

Sin embargo, agregando a mano la entrada de ArchLinux, tampoco agarró la entrada de Arch. Empecé a buscar sobre GRUB2 en Debian, ya que por ahora es el GRUB que estoy usando, el configurado en Debian. Así que Buscando un poco más me encontré con la entrada sobre GRUB2 en la wiki de esDebian. Ahí encontré:

Si tenemos otros sistemas operativos instalados en la máquina será necesario instalar os-prober

apt-get install os-prober

Os-prober es un subproducto de debian-installer. Una de las características del instalador es que puede sondear los discos en el sistema buscando otros sistemas operativos, y agregarlos al boot loader, para que instalar Debian no complique el booteo de tus otros sistemas operativos instalados.

Una vez instalado, ejecuté os-prober, y detectó correctamente ArchLinux. Después un grub-mkconfig actualizó el grub.cfg y ya quedó todo pronto: Grub 2 con Debian y Arch. Lo único que me falta es ver cómo configurar para que ArchLinux sea el sistema operativo por defecto.

Como siempre, un excelente recurso de documentación a la hora de realizar este tipo de tareas en GNU/Linux es ArchWiki.

Lo otro que me estaría faltando es pasar mi laptop de Debian a ArchLinux. Pero como la uso para trabajar, todavía no me he animado. En verdad simplemente necesito contar con el tiempo y las ganas :P

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

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

Picando Código

Feliz día de la toalla – #towelday

Mayo 25th, 2010 - [Enlace local]

¡Feliz día de la toalla!

Hoy 25 de mayo es el Día de la Toalla,  celebración anual en honor a Douglas Adams (1952-2001) autor de la Guía del autoestopista galáctico.

Día de la toalla

Día de la toalla

Hoy andaré con mi toalla arriba, porque todo autoestopista galáctico debe llevar una. ¿Se animan a mandar fotos de sus toallas? ¿Se animan a aparecer en su trabajo con una toalla al hombro? Fotos o no lo creemos… :P

También aliento a aquellos que tengan blog, a publicar una entrada dedicada al día de la toalla en sus blogs.  Saludos, y: DON’T PANIC!
(Gracias xoulkat por recordarme el día de la toalla)

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

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

Picando Código

Facebook

Mayo 25th, 2010 - [Enlace local]

Facebook: Esto es un tema en el que no quería caer en el blog, ya que viene siendo nombrado en prácticamente todos los medios por Internet. Sin embargo, hay iniciativas al respecto que deberían darse a conocer y me siento en el compromiso de difundir.

Facebook

Facebook

Mi amigo Jorge escribió porqué cerró su cuenta en su blog: Facebook y su privacidad
En ese post encontrarán más información al respecto.

Han habido cientos de artículos y noticias explicando cuál es el problema de tener una cuenta en Facebook, así que espero no tener que explicárselo a mis lectores.

En fin, Facebook, como muchas otras, es una herramienta. Puede servir para ciertos propósitos y lo importante es que la gente conozca y sea conciente de lo expuesta que está su información y qué se hace con ella.

Una de las iniciativas interesantes respecto a la decadencia de la privacidad en Facebook es: QuitFacebookDay.com
Están organizando el “día en que abandonamos FacebooK” este 31 de mayo. Ya hay prácticamente 15.000 comprometidos a la causa. Explican:

¿Porqué lo dejamos?

Para nosotros se reduce a dos cosas: opciones justas y mejores intenciones. Desde nuestro punto de vista, Facebook no hace un buen trabajo en ninguno de los dos departamentos. Facebook te da opciones sobre cómo manejar tu información pero no son opciones justas, y mientras la carga está en el individuo de gestionar estas opciones, Facebook lo hace bastante difícil para el usuario promedio poder entender o gestionar esto. Tampoco pensamos que Facebook tenga mucho respeto por tí o tu información, especialmente en el contexto del futuro.

Para muchas personas, abandonar Facebook se centra en torno a la privacidad. Esto es una preocupación legítima, pero también creemos que los problemas de privacidad son un síntoma de una serie de cuestiones mayores. Los efectos acumulativos de lo que hace Facebook ahora, no jugarán bien en el futuro, y nos importa profundamente el futuro de la web como un lugar abierto, seguro y humano. No podemos ver la dirección actual de Facebook alineada con ningún futuro positivo para la web, así que lo abandonamos.

También comentan qué debería saber cada uno para formarse una opinión y estar conciente del problema.

¿Qué debería saber?
Parte de abandonarlo es entender la naturaleza del problema, y han habido muchos artículos recientes y posts que hace un mejor trabajo que nosotros articulando lo que está mal con Facebook. Te alentamos a leerlos y formar tus opiniones. Seguir adelante será más fácil cuando hayas tomado una decisión clara y conciente sobre porqué preferirías que tu vida en línea fuera libre de Facebook.

Y por último, explican las opciones entre las cuales se encuentra sin dudas la más importante: El proyecto Diaspora. Básicamente se trata de un “Facebook” descentralizado donde cada uno es dueño de sus datos y privacidad.

Diaspora

Diaspora

Justamente con Jorge hablábamos una vez sobre lo que nos imaginábamos del “futuro de la web”. Yo calculaba que los anchos de banda serían cada vez más grandes en las casas, el hardware cada vez más barato. Por lo tanto, no sería ilógico suponer que de acá a 5/10 años, cada hogar podría contar con su propio servidor, y las cosas apuntarían cada vez más a ser descentralizadas. Servicios como Twitter, Facebook, Picasa, Flickr, etc. serían reemplazados, y cada usuario contaría con un nodo en su computadora, desde donde distribuiría su contenido. Por ahí, creo, viene la idea de Diaspora. Y me suena más coherente.

Mantener el perfil en Facebook

Muchas personas usan Facebook como único medio de comunicación con algunos contactos. En fin, siendo conciente de los problemas, cada uno puede tomar una decisión más conciente de si borrar o no su cuenta. De todas formas, teniendo la cuenta activa en Facebook, hay varias cosas que podemos hacer para proteger nuestra privacidad. Una de las herramientas disponibles se encuentra en ReclaimPrivacy.org. Ahí pueden encontrar un script para agregar como marcador en su navegador web, y éste examinará sus configuraciones de privacidad.

Una frase que he repetido varias veces:
En Facebook no somos clientes, somos materia prima para su producto, la información (¡nuestra información!).

Origen de la foto: Gizmodo

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

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

Variable not found

¿Bug (sin importancia) en la plantilla de edición de MVC 2 con DateTime, decimal y double?

Mayo 24th, 2010 - [Enlace local]

¿Habéis observado que al generar una vista de edición tipada sobre una entidad que contiene propiedades decimales o de fecha, Visual Studio os genera una llamada extraña al helper TextBoxFor()?



Vamos a verlo en detalle. Partimos de una entidad del Modelo como la siguiente:



Entidad del Modelo
Generamos ahora el andamiaje con Visual Studio, utilizando la opción correspondiente del menú contextual, indicando que se trata de una vista de edición, sobre la entidad Persona:



Añadiendo una vista tipada de edición
El código generado por el entorno será el habitual. Sin embargo, si nos fijamos en el control de edición que Visual Studio ha generado para la propiedad FechaNacimiento, podremos ver que contiene un parámetro extraño:



TextBoxFor con propiedades de tipo fecha


Durante mucho tiempo no me ha llamado la atención probablemente por la costumbre de verlo en llamadas al helper TextBox(), donde el segundo parámetro se utilizaba para especificar el valor por defecto del <input>. Además, dado que la edición de fechas suele realizarse de forma algo más seria (en breve hablaremos de eso por aquí) y el código generado suele eliminarse, tampoco me había fijado demasiado.



Sin embargo, en cuanto observas un poco las distintas sobrecargas de TextBoxFor(), es fácil darse cuenta de que esta llamada no es correcta. De hecho, si observamos la porción del código fuente HTML generado relativa a la edición de esta propiedad, nos encontraremos con esto:



Etiqueta input mal generada
¿Ein? ¿Length=”15”? ¿Te suena esto a algo? Seguro que sí ;-)



Efectivamente, el atributo extraño de la etiqueta <input> no es más que la propiedad Length de la cadena que estamos pasando a TextBoxFor en su segundo parámetro, reservado en la  sobrecarga de TextBoxFor que encaja con la llamada para especificar los atributos HTML personalizados:



public static MvcHtmlString TextBoxFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    Object htmlAttributes
)


Curiosamente, el TextBoxFor() sólo es generado así en las vistas de edición (Edit), y sobre propiedades de tipo DateTime, decimal y double; en las vistas de creación (Create) no ocurre este problema, ni con otros tipos de datos.



Pero bueno, ya que tenemos el destornillador en la mano, cuesta muy poco trabajo dejar las cosas en su sitio ;-). Como vimos en otra ocasión, el código de las vistas que genera Visual Studio está basado en plantillas T4, y es realmente sencillo modificarlo, así que vamos a ello.



En primer lugar, acudimos a la carpeta del IDE donde se almacenan estas plantillas:

Siendo (IDE) el directorio raíz de Visual Studio, normalmente dentro de \Archivos de programa.



A continuación hacemos una copia de seguridad de la plantilla llamada Edit.tt (que más vale prevenir…), la abrimos con cualquier editor de texto y buscamos en su la cadena “TextBoxFor”, que encontraremos en una porción de código como la siguiente:



Porción de Edit.tt original
Ahora lo único que tenemos que hacer es eliminar la porción <#= property.Value #>, que es la que se encarga de emitir los atributos incorrectos. De hecho, sería simplemente dejar la línea tal y como ésta aparece en la plantilla de creación (Create.tt):



Porción de edit.tt modificada
Hecho esto, al generar de nuevo vistas de edición, ya las fechas y decimales aparecerán como deben:



Edición de una fecha con TextBoxFor, corregida
En fin, se trata de un pequeño detalle en las plantillas de edición que hacen que se genere un código incorrecto al cliente. Nada importante, pero sin duda una buena excusa para profundizar en los mecanismos de andamiaje del framework.



Publicado en: Variable not found.



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

Arragonán

Llega la Conferencia Agile-Spain 2010

Mayo 23rd, 2010 - [Enlace local]

Todavía no sé si podré escaparme para asistir a la Conferencia Agile-Spain 2010, en Madrid los días 10 y 11 de Junio. Seguramente casi hasta a última hora no sabré si puedo ir. Pero sólo ojeando el programa, se ve una pinta estupenda: testing, scrum, integración continua, kanban…

La inscripción a la conferencia cuesta 95€ para los 2 días con desayunos, comidas y cafés incluídos. Eso sí, si se quiere asistir a algún taller, se tiene que pagar por separado, en la misma web del evento aparecen la duración y precio de los talleres.

Conferencia Agile Spain 2010

Es una cita donde se encontrarán empresarios, desarrolladores, gerentes, investigadores, etc. Está enfocada principalmente a la industria de tecnologías de la información y consultoría tecnológica.

CAS2010 es una oportunidad para intercambiar experiencias y hacer contactos con otros profesionales del sector, además de examinar las últimas tendencias en el desarrollo del software ágil de mano de las figuras más representativas del panorama nacional.

Henrik Kniberg será el orador principal de la conferencia. Henrik es autor de “Scrum y XP desde las trincheras” y de “Kanban vs. Scrum – Obteniendo lo mejor de ambos”, además de ser Certified Scrum Trainer, miembro de la junta directiva de la Agile Alliance, y uno de los máximos divulgadores de la aplicación práctica de las metodologías ágiles internacionalmente.

Y aparte de las sesiones y talleres, seguro que vale la pena ir también para charlar con ponentes y otros asistentes, que suele ser de lo mejor en la mayoría de los eventos ;)

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

Variable not found

Enlaces interesantes 7

Mayo 23rd, 2010 - [Enlace local]

Estos son los enlaces publicados en Variable not found en Facebook desde el domingo, 18 de abril de 2010 hasta el domingo, 23 de mayo de 2010. Espero que os resulten interesantes :-)

Y no olvides que, si te interesa, 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...

Buayacorp

Un tema de Wordpress 3D con CSS 3

Mayo 23rd, 2010 - [Enlace local]

No muy práctico, pero funciona. Un tema de Wordpress en 3D con CSS3.

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

Picando Código

PETA crea licencia de software inofensiva para los animales

Mayo 22nd, 2010 - [Enlace local]

La organización por los derechos de los animales Personas por el Trato Ético de los Animales (PETA) (People for the Ethical Treatment of Animals) ha publicado una nueva licencia de software con el lema “Su licencia para matar ha sido revocada”.

Peta

Peta

Se trata de la Harm-Less Permissive License (HPL) o “Licencia Permisiva Inofensiva”:

La Licencia Permisiva Inofensiva (HPL) es una licencia de software permisiva no copyleft. Está basada en la licencia FreeBSD pero con una restricción adicional; la cláusula “inofensiva”. Previene que el software, licensiado bajo la HPL, se use para lastimar a humanos o animales.

Inspección porcina

Inspección porcina

Las corporaciones que se benefician de la explotación animal y humana dependen cada vez más del software como mecanismo para llevar a cabo su brutalidad. Desde las factory farms (granjas estilo fábrica donde los animales son abusados) y mataderos hasta los sonares y satélites para guiar la pesca masiva.

La licencia surgió del desarrollador Anders Sundman, quien ha estado cuidando a los animales en el frente tecnológico y se unió con PETA para crear la licencia. En principio usaba la licencia de manera personal pero decidió hacerla pública porque “habiendo visto imágenes de adentro de un matadero y buques de pesca modernos me resulta obvio lo dependiente que son estas industrias en la tecnología y el software”.

Supuestamente se trata de la primer licencia que prohibiría el uso del software de cualquier manera que dañe a humanos o animales. Sin embargo, no es la primera vez que se pone el tema sobre la mesa. Recuerdo haber leído ya en otras ocasiones, de crear una licencia que limite el uso del software moralmente.

En este momento no encuentro el artículo original, pero fue planteado específicamente cuando se dió el hecho de uno de los robots del ejército americano que asesinó a un civil. En Slashdot creo, comenzó la discusión, sobre agregarle cláusulas a las licencias para que el software no pudiera ser usado para dañar humanos. En fin, ya encontraré el enlace…

PETA alienta a los programadores a desarrollar bajo esta licencia, libre y de código abierto, para asegurarse que sus productos no se usen con propósitos dañinos. También alienta a que cada uno le de su propio golpe a la asesina industria de la carne volviéndose vegano.

Hay que tomar en cuenta que la HPL no es una licencia de software libre. Si bien, podemos decir que se rige también por principios morales y éticos, no cumple con la libertad cero:

la libertad de usar el programa, con cualquier propósito

Creo que en esencia, es una licencia con los mismos valores, agregando esa restricción. Digamos que toma en cuenta un valor más a la hora de compartir el software.

Pros y Contras

En la licencia podemos encontrar varios pros y contras que los propios responsables han enumerado:

A pesar de las contras, hay una fuerte razón ideológica para usar HPL. Quienes compartan la ideología y convicción moral de que causarle daño a otros es malo, probablemente no quiera contribuír a desarrollar productos que causen daño tampoco. Al hacer software libre, se invierte tiempo en hacer algo valioso pero también de forma inadvertida, se puede estar ayudando a otros a crear software que cause daño.

Hacen algunos comentarios más respecto a estas limitaciones (texto traducido de la página de la HPL):

Me resultó interesante la postura del desarrollador, sobretodo la parte en que habla de la “inconveniencia práctica”. Muchos recordarán esta misma postura en el mismísimo Richard Stallman cuando habla de usar software 100% libre a pesar de la incomodidad práctica que pueda ocasionar. Considero importante y respeto mucho que quienes defienden una postura lo hagan con convicción y sacrificio, lo que le da valor a su ideología.

Personalmente me parece una buena licencia, y es un arma más que se cuenta para defender los derechos de los animales (humanos y no humanos). Y como toda licencia, el desarrollador tiene la libertad de elegirla para sus productos o no.

Si les interesa saber más de PETA pueden conocer algunas de sus campañas:

McCruelty

McCruelty

Canada's Shame

Canada's Shame

Animal Liberation Project

Animal Liberation Project

O visitar el sitio de PETA en español.

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

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

Buayacorp

30 años de Pacman con Google

Mayo 21st, 2010 - [Enlace local]

¿Quién no ha jugado Pacman? Si quieres recordar Google te ayuda –> Insert Coin :) .

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

MadeInFlex

Prerelease de AIR para Android

Mayo 21st, 2010 - [Enlace local]

Se ha publicado el anuncio del programa de prerelease de AIR para Android. Los interesados en desarrollar aplicaciones para Android mediante la plataforma Flash, ya pueden acceder a la beta del SDK para Android.
Ahora pues, podemos empezar a probar aplicaciones AS3 como procesos nativos dentro del sistema operativo Android, mediante este SDK que podemos descargar.

Podeis encontrar más información en este link.

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

Buayacorp

Usando Google Font Api y Google Font Directory

Mayo 21st, 2010 - [Enlace local]

Google acaba de anunciar la creación de un directorio de Fuentes Open Source que se pueden utilizar en nuestros sitios mediante una API.

Bajo el lema “Haciendo hermosa la web” podemos por ahora usar una lista de 18 fuentes con sus respectivas variantes.

¿Cómo usarlo?

El ejemplo que nos dejan es muy sencillo. Primero agregamos esta línea entre las etiquetas :

HTML:
  rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Josefin+Sans+Std+Light" />

Y luego para que se vea en nuestra página agregamos el siguiente código CSS:

CSS:
		body {
			font-family: 'Josefin Sans Std Light', arial, serif;
			font-size: 48px;
		}

Donde el valor del parámetro family en el atributo href es la fuente que queremos usar. En el ejemplo escogí la fuente Josefin+Sans+Std+Light ya que es la fuente más parecida al logo de Buayacorp :) .

El resultado con alguito de color:

google-font-buayacor-white

Y añadiendo alguito de código:

CSS:
		body {
			font-family: 'Josefin Sans Std Light', arial, serif;
			font-size: 48px;
			text-shadow: 2px 2px 4px #aaa;
			letter-spacing: -5px;
			background: #4b4b4b;
		}

google-font-buayacor-gray

Ver el ejemplo >

¿Cómo funciona?

Básicamente lo que hace es usar la regla @font-face de CSS3. Revisando un poco el código veremos que estas fuentes funcionarán sólamente en en modo “screen” y no en impresión.

CSS:
@media screen {
@font-face {
  font-family: 'Josefin Sans Std Light';
  font-style: normal;
  font-weight: normal;
  src: local('Josefin Sans Std Light'), url('http://themes.googleusercontent.com/font?kit=doRWK9Qks0OQGenH-kW8nsnX9wMe89zs2uzox0MWMfk') format('truetype');
}
}

Vemos que tampoco funcionarán en navegadores antiguos.

Esperemos que con este tipo de ayudas, no se cometa el error del pasado de abusar como se hacía con la etiqueta .

Es cierto que se podría lograr maravillas usando esta regla, sin embargo no se debe abusar de su uso.

Enlaces

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

Buayacorp

Ejemplos y Demos de HTML5

Mayo 20th, 2010 - [Enlace local]

Si quieres saber más sobre HTML5, te presentamos un interesante sitio en el que nos muestran ejemplos y demostraciones de esta nueva versión de HTML

Ejemplos y Demos de HTML5 tiene los ejemplos básicos del uso de HTML5 y los soportes de los navegadores más conocidos. Entre ellos Internet Explorer, Mozilla Firefox, Safari, Opera y Google Chrome.

Sólo como ejemplo muestro un bloque del cual podemos editar el texto, mostrado en ContentEditable:

HTML:
 
id="editable" contenteditable="true">

¡Este texto se puede editar!

¿Por qué no lo intentas? Un párrafo cualquiera

  1. el primer ítem
  2. el segundo
  3. y el tercero
</section>  

Al añadir el atributo contenteditable="true" hacemos que ese bloque se pueda editar, como si estaríamos usando TinyMCE o FCKEditor. El código anterior funciona en todos los navegadores modernos.

Puedes ver el demo.

Reconozco que es el primer ejemplo de HTML5 que hago en mi vida, así que si me sirvió también te puede servir a tí :D .

Enlaces

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

Picando Código

Nueva era de video en la web

Mayo 20th, 2010 - [Enlace local]

Finalmente se confirmaron los rumores y Google anunció lo que muchos esperábamos: La liberación del códec de video VP8.

El contexto:

Con el desarrollo y evolución de internet, y las aplicaciones ricas, la siguiente revisión del lenguaje de la web HTML apunta a reducir la necesidad de tecnologías de empresas como Adobe Flash, Microsoft Silverlight y Sun JavaFX. HTML5 incluirá entre otras nuevas características el tag

Flash ha sido la tecnología más utilizada para reproducir videos en internet, por lo que se generó una dependencia en los usuarios. Sin embargo con este nuevo estándard HTML, no sería necesaria la instalación de este plugin (o ningún otro) para poder ver videos en internet.

Con la implementación, comenzó la guerra de los estándares de video. Si bien los navegadores pueden soportar el estándard que deseen, debía elegirse un estándard por defecto, que todos los navegadores soporten. Además de buena compresión y buena calidad de imagen, el códec estándar debía ser libre de patente y tener un decodificador por hardware.

En un principio, se hizo el borrador de la especificación del HTML 5 con el formato Ogg Theora, ya que no era alcanzado por ninguna patente. Pero tras algunas idas y venidas, el formato fue removido de la especificación y el tema quedó pendiente.

Aprovechando la situación, un códec comenzó a imponerse como estándar de facto: H.264/MPEG-4 AVC. Se amplió su uso, ya que cuenta con buena velocidad, compresión y decodificadores de hardware. Pero su mayor desventaja: está cubierto por patentes. Excepto en casos particulares, los usuarios de H.264 deben pagar licencias a la MPEG LA, un grupo de titulares de patentes que incluyen a Microsoft y Apple.

Las cosas se veían negras para la “web abierta”. YouTube y Vimeo comenzaron a ofrecer video con HTML5 en lugar de Flash, pero decidieron usar el códec h264. Solo Safari y Chrome podían reproducirlos en el momento. Mozilla decidió que Firefox no licenciaría el códec h264 por dos razones: su naturaleza de cerrado y los costos de licencia.

webm

webm

El comienzo de la revolución:

En febrero pasado, Google compra On2, una compañía de tecnología de compresión de video. La Free Software Foundation escribe una carta abierta a Google:

(…)Con tu compra de On2, ahora eres dueño de tanto el sitio de videos más grande del mundo (YouTube) y todas las patentes detrás de un nuevo códec de video de alto rendimiento — VP8. Solo piensa ¿cuánto puedes lograr liberando el códec VP8 bajo una licencia irrevocable libre de derechos y entregándosela a los usuarios en YouTube? Puedes terminar la dependencia de la web en formatos de video protegidos por patentes y software privativo (Flash). (…)

El mundo tendría un nuevo formato libre sin protección de patentes de software. Los espectadores, creadores de videos, desarrolladores de software libres, fabricantes de hardware — todo el mundo — tendrían otra manera de distribuir video sin patentes, cargos ni restricciones. El formato de video libre Ogg Theora ya era por lo menos lo suficientemente bueno para el video en la web como su competidor no libre H.264 (…)

Apple ha tenido la entereza de abandonar Flash para el iPhone y el iPad — aunque por razones sospechosas y usando métodos aberrantes (DRM) — y esto ha empujado a los desarrolladores web a hacer alternativas libres de Flash de sus páginas. Podrías hacer lo mismo con YouTube, por razones mejores, y sería un soplido mortal al dominio de Flash en el video en la web. (…)

Es interesante ver que unos meses después, la Free Software Foundation publica una declaración al respecto:

(…) hoy estamos contentos de felicitar a Google por hacer este pedido realidad.

A partir de hoy, los usuarios podrán descargar e instalar software libre para reproducir y codificar el nuevo formato WebM. WebM está basado en el formato contenedor Matroska — reemplazando a Ogg — y el códec de video VP8 que reemplaza a Theora.

Google anunció que todos los videos que sean de 720p o mayores subidos a YouTube después del 19 de mayo serán codificado en WebM como parte de su actual demostración actual demostración HTML5.

Es un buen momento para la web, ya que con tanto control que se puede ejercer sobre el usuario de mano de las grandes corporaciones, la tendencia hacia una web más abierta es cada vez más fuerte. Con este tipo de eventos, los usuarios pueden estar más al tanto de lo que sucede en torno a la tecnología que usan, y ser concientes de las amenazas que los acechan.

Opera, Chromium y Firefox ya tienen versiones disponibles con soporte para WebM (sigan los enlaces para descargar). Falta ver qué hace Apple al respecto.

Algunos otros enlaces interesantes:

Una excelente noticia sin duda, que asegurará el alcance del video a todas las computadoras de manera libre y gratuita :)
Es un buen tiempo para la web…

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

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

Blog del grupo SQUaC

Curso sobre usabilidad en Valencia

Mayo 20th, 2010 - [Enlace local]

Los próximos 31 de mayo y 2 de junio ofrecemos en el ITI (Valencia) un breve curso de introducción a la usabilidad de aplicaciones interactivas.

 Tenéis más información del curso (programa, precio, inscripción, etc.) en la web del ITI .

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

Información legal y técnica