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

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

¡Feliz 1293840000!

Diciembre 31st, 2010 - [Enlace local]

Según la convención de UNIX timestamp, definida como el número de segundos que han pasado desde el 1 de enero de 1970, el valor de 1293840000 corresponde ni más ni menos que a hoy, 1 de enero de 2011. Así que feliz año a todos.

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

Buayacorp

jQuery deshabilitará el hotlinking

Diciembre 31st, 2010 - [Enlace local]

La gente de jQuery nos informa (muy tarde) que desde el día de hoy desde el 31 de Enero del 2011 deshabilitará el hotlinking de sus archivos. Es decir que tienes que actualizar tus enlaces de jQuery o guardar una copia local:

Alternativas

Tenemos algunas alternativas que pueden servirte:

Usar el jQuery desde CDN

HTML:
 
 src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.4.4.js" type="text/javascript">

Usar el jQuery desde Google

HTML:
 
 src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript">

Usar desde Cached Commons

HTML:
 
 type="text/javascript" src="http://cachedcommons.org/cache/jquery/1.4.2/javascripts/jquery.js">

O simplemente puedes bajarte la última versión y guardarla en tu propio sitio.

También te puede interesar: Tres razones por las que dejar que Google hostee jQuery por tí.

Fuente | jQuery Blog

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

MadeInFlex

Flex Hero Mobile (III): ActionBar y Text Components

Diciembre 30th, 2010 - [Enlace local]

En este post hablaremos de la ActionBar, un componente que ayuda a la navegación de las aplicaciones Mobile hechas con Hero. También trataremos los TextComponents que nos proporciona el framework para tratar elementos de texto.

ActionBar

Descripción detallada

ActionBar es un SkinnableComponent que proporciona navegación, además de permitirmos añadir el título y las acciones relacionadas con el ViewNavigator.

ActionBar tiene las siguientes propiedades:

A continuación vemos las distintas partes de la ActionBar:
ActionBarDiagram

Title Group

Si el titleContent no es nulo, reemplaza a titleGroup. En caso contrario, ActionBar insertará el titleDisplay, si existe, como titleGroup.

Action Group

El actionContent es un proxy para el contenido del actionGroup. A diferencia de titleGroup, no tiene preferencias para el caso de contenido nulo.

Navigation Group

De la misma manera, navigationContent es un proxy para en contenido de navigationGroup.

Interacción entre la ActionBar, las vistas y el ViewNavigator

Tanto las vistas como el ViewNavigator definen proxies para las 6 propiedades de la ActionBar. Cuando el ViewNavigator añade una nueva vista, comprueba los valores para estas propiedades y da el contenido a la ActionBar. Si la vista activa no define estos valores, ActionBar da sus valores para estas propiedades. De esta manera los developers pueden determinar contenido por defecto en la zona del navigationContent, como puede ser el Home Button.

El ViewNavigator controla el contenido de la ActionBar cada vez que un evento de navegación ocurre. ViewNavigator escucha los cambios de las propiedades cuando una vista es activada, con la finalidad de actualizar la ActionBar. Cuando se desactiva la vista, ViewNavigator quita los listeners de la vista y escucha la nueva vista activa.

Debajo vemos diferentes modalidades de la ActionBar.
ActionBarExamples

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

Text Components

Descripción detallada

Tienen como objetivos los siguientes:

Características

Los componentes de texto para mobile, por motivos de rendimiento, extienden de TextField. Esto hará que la performance sea mejor, aunque si queremos optimizar al máximo en ciertos escenarios, como en la creación de item renderers, podemos mirar la especificación de estos elementos.

Además nos proporcionan:

Teclado y Focus

Los TextInput y las TextArea editables han sido pensadas para que pueda introducirse texto, de manera que no se permite que el teclado se superponga encima de ellos. Cuando uno de estos componentes recibe el foco, el típico rectángulo de color los envuelve.

Mas información aquí.

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

Picando Código

Primer encuentro de Wikipedistas en Uruguay

Diciembre 30th, 2010 - [Enlace local]

Paso la información del primer encuentro de Wikipedistas en Uruguay. Hay una comunidad de wikipedistas uruguayos que incluso ya han planteado la creación de Wikimedia Uruguay. Si les interesa el tema, es la oportunidad ideal para integrarse a la comunidad y empezar a colaborar.

Primer encuentro de Wikipedistas Uruguay

Primer encuentro de Wikipedistas Uruguay

Dónde y cuándo

Nos juntaremos el sábado 15 de enero de 2011, a las 19.00 hrs. El punto de encuentro será en Piriápolis, en el departamento de Maldonado. Para los que están en Montevideo, salimos de Terminal Tres Cruces para pasar el día. Más información pronto.

Objetivos

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

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

Buayacorp

WordPress 3.0.4 disponible

Diciembre 29th, 2010 - [Enlace local]

Me ha sorprendido que en menos de un mes se han liberado ya 4 actualizaciones de WordPress, hoy recibo la sorpresa de que está disponible la actualización urgente para WordPress 3.0.4.

Esta actualización arregla un bug en el Core de WordPress, específicamente en la librería de “sanitización” de HTML que permite ejecutar código arbitrario.

Si estás metido en esto de la seguridad, los chicos de WordPress te invitan a que le des una mirada a los cambios que se han hecho últimamente. Ahora si feliz año.

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

MadeInFlex

Flex Hero Mobile (II): ViewNavigator

Diciembre 29th, 2010 - [Enlace local]

En el segundo post de Hero en cuanto a Mobile veremos el componente ViewNavigator, que actúa como core del modelo de navegación de las aplicaciones mobile hechas con Hero.

Introducción

El concepto View y view navigator son conceptos del nuevo framework Hero que nos permite crear y navegar dinámicamente por el contenido de la aplicación. ViewNavigator es un componente que trata la creación y presentación de las vistas. ViewNavigator usa una pila de vistas, que hace que solo sea visible la que se situa en el top de la pila. El developer puede usar los métodos como pushView y popView para ir a una vista o retornar a una vista previa.

Objetivos

Relación con ViewStack

ViewNavigator es similar al componente mx:ViewStack: pueden cambiar rápidamente el contenido visual. La mayor diferencia entre ellos es el sistema de navegación: ViewStack solo puede cambiar entre estados predefinidos, mientras que ViewNavigator permite al developer activar dinámicamente un número de vistas y saltar rápidamente entre ellas, según el flujo que defina el usuario. Esto significa que ViewNavigator crea y mantiene un historial de navegación y representa mejor el modelo de navegación. Además ViewNavigator contiene un modelo de datos con la habilidad de persistir los datos y estados entre diferentes sesiones de la aplicación.

Relación con los States

ViewNavigator no se puede considerar un reemplazo de los States de Flex. Aún y así, las vistas y los states son similares en tanto que permiten al developer cambiar el contenido bajo demanda, pero hay diferencias: los states son un subsistema que se concentra en el cambio de subpartes de componentes y propiedades en el mismo instante de tiempo, controlados por un solo thread; mientras que las vistas centralizan toda la lógica y el contenido relacionado en un único componente, el cual es reemplazado totalmente al navegar a otra vista.

Descripción detallada

Estructura del componente

A continuación vemos este componente:
viewNavigatorParts

La content area es el contenendor principal de la vista actual. Cuando se crea una vista, automáticamente es añadida a este contenedor. La ActionBar nos permite mostrar la información contextual a la vista actual.

Control de las vistas

Como hemos dicho, ViewNavigator usa una pila para controlar las vistas, concretamente tiene un vector de objetos llamado navigation stack, donde el primer elemento es el que estará activo y visible. ViewNavigator nos proporciona un sistema de push y pop de vistas. Es importante destacar que no proporciona ningún mecanismo para poder mostrar una vista específica de la navigation stack.

singleSectionNavigation
En la imagen anterior vemos como al seleccionar un elemento de la vista de búsqueda, accedemos a la vista de detalle. Esto provoca la destrucción de la vista de búsqueda y la vista de detalle pasa a ser la activa y visible.

Vistas

Una vista (View) es la clase base de todas las vistas de la aplicación y es una subclase de Group. Una vista tiene una propiedad data que será usada para representar su contenido y estado. Este objeto es automáticamente serializado, persistido y restaurado por el view navigator cuando una vista se activa o desactiva.

Políticas de destrucción

La implementación incial de ViewNavigator solo permite una vista visible. Cuando una vista pasa a ser activa, los componentes de la anterior se destruyen. De esta manera tenemos una mejor gestión de memoria.
También es cierto que en determinados escenarios es más costoso destruir una vista y volverla a crear cuando sea necesario. Para tratar esto, las vistas tienen una propiedad llamada destructionPolicy que determina que debe pasar cuando la vista es reemplazada en la pila. Por defecto se destruyen, pero podemos determinar que se mantengan en memoria.

Modelo de datos de la vista

Las vistas también tiene soporte para la persistencia de datos. Estos datos se guardan en un objeto y se settean a la propiedad data de la vista cuando se hace la llamada de pushView(). Des esta manera se asegura que la vista contenga los datos que necesita. Cuando una nueva vista se pone como activa, los datos de la anterior son guardados.

Ciclo de vida de una vista

ViewNavigator sigue el flujo típico de invalidación de las aplicaciones Flex para hacer la transición entre vistas. Así un developer puede ejecutar operaciones de navegación en un solo frame. Todas las operaciones de navegación pueden ser canceladas.

A continuación el diagrama de acciones y eventos que suceden cuando se solicita una nueva vista:
viewLifeCycle

Visibilidad de la ActionBar

Disponemos de dos layouts para la action bar dentro del navegador. El developer puede cambiar entre ellos usando la propiedad overlayControls de la vista y del ViewNavigator. Con overlayControls a false, la ActionBar usa como layout vertical. SI tiene valor true, el área de vista se expande al width y height del navegador. La ActionBar se pone encima aplicando un alpha determinado.
overlayModes

Orientación

ViewNavigator soporta las orientaciones de portrait y landscape. Debemos usar los siguientes skin states del ViewNavigator:

Transiciones

Podemos definir transiciones para pasar de una vista a la siguiente. Podemos pasar un objeto de tipo ViewTransition para determinar que transición queremos aplicar.
ViewNavigator tiene dos skin parts opcionales: defaultPushTransition y defaultPopTransition.

Más información y ejempos aquí.

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

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

Elegir el tipo de implementación Microsoft Dynamics

Diciembre 29th, 2010 - [Enlace local]

Como sabes existen 5 tipos de implementación para un proyecto de Microsoft Dynamis: Standar, Agile, Rapid, Enterprise y Upgrade, pero en que basarnos para elegir el mejor método de entrega, Sure Step Methodology nos proporciona la siguiente tabla:

Tipos de Proyecto

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

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

Trabajo on site–offshore Sure Step Methodology

Diciembre 29th, 2010 - [Enlace local]

SureStep Onsite

Para aquellos que implementamos Microsoft Dynamics y seguimos Sure Step aquí una guía sobre las actividades que se pueden realizar on site y aquellas que se pueden realizar offshore dentro del proyecto

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

MadeInFlex

Flex Hero Mobile (I): MobileApplication

Diciembre 28th, 2010 - [Enlace local]

Igual que hicimos comentando las novedades de Hero para desktop, vamos a postear una serie para explicar, a grosso modo, lo que nos ofrecerá Hero para Mobile. En este primer post veremos una visión global centrada en la clase MobileApplication.

MobileApplication

Esta clase permite crear aplicaciones enfocadas a dispositivos móviles. Una aplicación mobile típica se divide en diferentes vistas que se van mostrando u ocultando según el flujo de la aplicación. Este modelo de aplicación se conoce como view-based. Una aplicación mobile saca partido del componente ViewNavigator, que ya veremos, para gestionar estas vistas.

Por otro lado, una aplicación mobile debe estar integrada con los eventos que nos puede lanzar el dispositivo, como la gestión de teclado o el control de la orientación.

A continuación vemos el típico flujo de una aplicación mobile (click para ampliar):
applicationSession

La metodología usada para desarrollar aplicaciones mobile es diferente a la que usamos para aplicaciones desktop. Una aplicación mobile se suele usar durante poco tiempo y a menudo interrumpida por otras acciones: mensajes, llamadas u otras aplicaciones. Se espera que al abrir una aplicación mobile, se hayan guardado los datos y estado anteriores, lo que implica que debemos persistirlos cada vez que la usamos.

Para poder conseguir este objetivo, Flex Hero nos proporciona apis de persistencia de datos para guardar los datos de las vistas. Esto permite a los developers guardar de forma rápida y sencilla los diferentes datos y estados entre sesiones.

MobileApplication no está pensada para ser usada para aplicaciones desktop o web, requiere AIR 2.5 SDK y swcs exclusivos de Flex Mobile (mobileComponents y mobileTheme).

Objetivos de MobileApplication

Descripción

Creación de Interficíe de Usuario

La clase MobileApplication provee una manera fácil y rápida de crear UI para móviles. Este componente extiende a SkinnableContainer y contiene una estructura muy específica definida con skin parts opcionales. Los componentes estándar de la UI son:

Debido a que MobileApplication usa ViewNavigator para navegar a través de sus vistas, no podemos añadir directamente hijos al componente MobileApplication. El developer necesitará usar la propiedad firstView o invocar manualmente la llamada pushView() del navigator para definir que objeto visual se instancia al inicializar la aplicación.

Menú de aplicación

Muchos dispositivos móviles usan un menu de aplicación. Con este menu se muestran las acciones globales o contextuales relacionadas con cada estado de la aplicación.

Atajos de teclado

Se suelen usar en muchos dispositivos y también se ha aplicado a dispositivos que soportan Flex Mobile. La clase MobileApplication proporciona automáticamente un botón de retorno (back button) para gestionar la navegación principal de la aplicación. Cuando la tecla de retorno se pulsa, la clase MobileApplication comprueba cuantas vistas están en la pila. En el caso de que se esté gestionando más de una vista, mobile application llama el método popView() sobre el navigator para que muestre la vista anterior. Si no hay ninguna vista empilada o sólo se está gestionando la actual, al pulsar back retornamos a la vista principal de la aplicación.
La clase MobileApplication nos expone apis sencillas para que los developers puedan sobreescribir está funcionalidad si nos interesa otro comportamiento.

Soporte para la orientación

Las clases MobileApplication y ViewNavigator tienen comunicación estrecha para controlar la orientación del dispositivo. El developer puede usar la propiedad de la clase MobileApplication llamada landscapeOrientation, que es solo de lectura, y permite determinar la orientación del dispositivo. Cuando cambia la orientación del dispositivo, la clase MobileApplication capturará la orientación del stage y automáticamente actualize esta propiedad. Para cambiar la orientación física del dispositivo debemos usar las apis de la clase Stage.
La clase ViewNavigator soporta los estados de landscape y portrait.

Propiedades de vista a nivel de aplicación

A continuación mostramos propiedades interesantes de la clase MobileApplication. Estas propiedades se usan como proxy para usarlas sobre la clase ViewNavigator que contiene los mismos valores y definirlos si no han sido setteados en la vista actual.

Propiedades de la ActionBar

Persistencia de datos entre las sesiones de la aplicación

Flex Mobile framework introduce un nuevo manager que nos permite guarda datos mediante una API muy sencilla. Este manager se llama PersistenceManager e implementa la interface IPersistenceManager. Nos da una lista de apis para que el developer pueda usar para guardar y tratar los datos de la aplicación.

Persistencia automática del estado de la aplicación

Usando PersistenceManager, la clase MobileApplication automáticamente guarda y restaura la información del estado de la aplicación para que dispongamos de ella cuando la aplicación se suspende y se relanza. MobileApplication tiene la propiedad sessionCachingEnabled que una vez habilitada hace que la aplicación guarde automáticamente su estado. Usa los siguientes parámetros para hacer este guardado:
versión de la aplicación, un timestamp para saber el momento es que se ha guardado y el estado de la navegación. Todo esto se guarda en la pila del navegador principal.

Debemos tener en cuenta que el objeto compartido que PersistenceManager usa para guardar los datos no está ni encriptado ni protegido. Se guarda con un formato fácilmente legible. Esto implica tener cuidado con lo datos que el developer guarda. El developer siempre tiene la posibilidad de implementar su propio manager de persistencia para crear una mejor manera de guardar los datos, si lo cree necesario.

Aquí encontrareis más información y ejemplos.

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

Buayacorp

Ejemplos de Webkit CSS (I)

Diciembre 28th, 2010 - [Enlace local]

Ejemplos de Webkit

Retomando nuestra costumbre de ayudarles con artículos de Diseño, presentamos ejemplos de como usar Webkit CSS y CSS 3, en esta entrega: Flexible Box Model, Box Sizing y Columns

Leer más, comentarios, etc...

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

Variable not found

Llega la Programación Gestual: Visual Studio Kinect Edition

Diciembre 28th, 2010 - [Enlace local]

Los desarrolladores, antes o después, acabamos sufriendo problemas físicos debido a nuestro trabajo. El hecho de estar sentados todo el día aporreando teclas como posesos lleva asociado una serie de males de espalda, manos, muñecas, brazos, hombros, cervicales… vaya, que a veces parece que sería mejor estar cargando bultos en el muelle ;-)



Tecnología GDMEsto han debido pensar  los equipos de trabajo de Kinect y Visual Studio en Microsoft, en conjunción con laboratorios MS Research, que se han unido para brindarnos lo que será la próxima revolución en el mundo del desarrollo de software, y que han decidido llamar “Gesvelopment” (Gestual Development, o tecnología GDM).



Visual Studio Kinect Edition es el primer producto de la casa que incorporará este nuevo paradigma. Básicamente, consiste en un sensor Kinect unido al PC de trabajo, en el que se instalará un Visual Studio tuneado con complementos capaces de interpretar movimientos y voz del desarrollador y trasladarlos a acciones en el editor y el propio entorno.



La tecnología GDM permitirá programar mediante movimientos, voz, posiciones y gestos del cuerpo, es decir, sin necesidad de tocar una tecla o el ratón para nada. Esto irá combinado con una serie de ayudas específicas permitirán aumentar nuestra productividad y, al mismo tiempo, mantenernos en una forma física envidiable.



Los interfaces de usuario podremos crearlos utilizando una herramienta al más puro estilo Minority Report: arrastrando virtualmente los elementos sobre la pantalla, redimensionándolos, abriendo sus propiedades, etc., siempre mediante movimientos de brazos, manos y piernas perfectamente sincronizados con lo que aparece en pantalla.

Activar formato cursiva (em) en HTMLEl código lo editaremos mediante un conjunto de movimientos y gestos preestablecidos, similares a los usados en el lenguaje de signos. Esto no implica, sin embargo, la aparición de un nuevo lenguaje para .NET. GDM monta una capa de abstracción sobre los lenguajes usados (C#, VB.NET, HTML, etc.), de forma que el mismo movimiento puede ser transformado a instrucciones del lenguaje activo, sea cual sea éste, siempre que se disponga de los drivers oportunos.



Así, por ejemplo, en lenguajes de programación clásicos, un movimiento circular con el brazo será interpretado como bucle, y será introducido en el código traducido al lenguaje actual, o un salto del programador será convertido en un jump, goto, o la estructura más cercana. O por ejemplo, en HTML podremos enfatizar texto (<em>) inclinándonos hacia la derecha (véase la imagen lateral), mientras que cerrar el puño con fuerza será útil para formatear en negrita (<strong>). La variedad de gestos y movimientos permitidos es enorme.



GDM también incluye un sistema de reconocimiento de voz con el que se podrán matizar y definir, por ejemplo, nombres de variables o instrucciones cuyos movimientos serían difíciles de ejecutar.



GDM: Cut textLas operaciones con el entorno (compilar, ejecutar, copiar, pegar, etc.) las realizaremos también con movimientos corporales explícitos. En el ejemplo de la derecha, podemos ver el gesto mediante el cual podemos cortar y enviar al portapapeles el texto seleccionado; podemos compilar apretando una mano contra otra, o ejecutar aplicaciones haciendo un gesto de decapitación con la mano derecha sobre nuestro cuello. Esto último denota algo de humor negro, sin duda, por parte de los desarrolladores del invento.



Dos desarrolladores trabajando con Visual StudioOtro aspecto realmente curioso e interesante es que dado que algunos dispositivos como Kinect son capaces de detectar y seguir los movimientos de más de una persona al mismo tiempo, será posible trabajar de forma colaborativa (pair programming), como se aprecia en la fotografía de la derecha, donde aparecen dos desarrolladores trabajando sobre una vista MVC.



Los afortunados poseedores del sensor Kinect podrán probar una edición limitada de GDM al instalar Visual Studio 2010 Beta 2, aunque el producto será distribuido oficialmente con Visual Studio 2012 (codename NutCracker), en una edición especial del producto.



Sin embargo, Microsoft no se ha centrado exclusivamente en sus tecnologías, jugando con abstracciones que hacen posible independizarse del dispositivo de detección de movimientos y reconocimiento de voz, e incluso del entorno de Eclipsedesarrollo. Así, aunque algo más tarde, también será posible desarrollar aplicaciones utilizando el mando de la Wii, y Move, el sensor de las consolas Playstation. También se están ya implementando drivers para todo tipo de entornos de desarrollo profesionales como Eclipse, Netbeans, o el block de notas.



Esto es posible gracias a su arquitectura modular, en la que se han previsto componentes que aíslan el software del hardware, y éstos a su vez del IDE y lenguaje utilizado:



GDM Technology Architecture



Está claro que antes de que se implante de forma generalizada deberán cambiar algunos aspectos en nuestro entorno y cultura empresarial, como:

En fin, aunque es una idea realmente atractiva, habrá que ver si las empresas son capaces de evolucionar hacia esta nueva organización, en la que las salas de desarrollo parecerán más bien de aerobic. No será fácil cambiar una mentalidad tan arraigada, donde los desarrolladores somos seres inertes, estáticos, y casi parte del mobiliario, pero sin duda aquellas que lo consigan se habrán puesto radicalmente por delante de su competencia en muchos aspectos.



Ya sabéis, id calentando, que GDM está cerca…



Publicado en: Variable not found.



[Actualizado 29/12]

Nota para despistados: obviamente la noticia no es real, se trata simplemente de una broma del Día de los Inocentes, así que tendremos que seguir siendo inertes, estáticos, parte del mobiliario, con dolores por todas partes y ganando peso. Bonito panorama para 2011, eh? ;-D




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

Picando Código

Yaourt: Instalando paquetes de AUR en ArchLinux

Diciembre 27th, 2010 - [Enlace local]

ArchLinux

ArchLinux

Yaourt es una herramienta que actualmente considero imprescindible en ArchLinux. Tras un tiempo de usar los repositorios AUR, gracias a un pique de @yrvn conocí Yaourt (Yet AnOther User Repository Tool). Combina las ventajas del repositorio AUR con la facilidad de instalación de pacman, el gestor de paquetes de ArchLinux. Ya en mi entrada de ArchLinux vs. Debian GNU/Linux comenté sobre AUR:

AUR es el Arch User Repository, un repositorio gestionado por la comunidad de usuarios de Arch. Contiene descripciones de paquetes (PKGBUILDs) que permiten compilar un paquete desde el código fuente con makepkg e instalarlo con pacman. Esto es una de las fortalezas de Arch. Así como si un programa existe para GNU/Linux, en algún lugar hay un .deb para instalarlo, probablemente también esté listado en AUR. Este repositorio tiene bastante movimiento, y sus paquetes pueden ser votados a través de aurvote para que se incluyan en el repositorio oficial de la comunidad.

La manera tradicional de instalar aplicaciones desde AUR es bastante “tediosa” si se quiere, aunque como todo en Arch, nos permite tener un control importante de lo que vamos a instalar. Hay que tomar esto en cuenta ya que el software disponible en AUR no tiene soporte oficial por parte de la distribución.

pacman

pacman

Antes de conocer Yaourt, tenía que buscar el tarball con el PKGBUILD y otros archivos necesarios (desde la interfaz web de AUR), extraerlo y ejecutar el comando makepkg sobre los archivos e instalar el paquete generado con pacman.

Yaourt es un wrapper para pacman que agrega acceso a AUR, permitiendo y automatizando la compilación e instalación de paquetes. Usa la misma sintaxis que pacman, por lo que no hay que aprender nuevas formas de mantener el sistema, y agrega opciones nuevas.

Sus características:

Para instalarlo, se recomienda instalar previamente el paquete básico de desarrollo para contar con las herramientas como gcc o make, entre otras:

pacman -S base-devel

Ahora, podemos agregar el repositorio de Yaourt en /etc/pacman.conf:

[archlinuxfr]
Server = http://repo.archlinux.fr/$arch

Siendo $arch la arquitectura: i686 o X86_64. Por último actualizar, sincronizar e instalar:

pacman -Syu yaourt

Una vez instalado, podemos buscar cualquier paquete en AUR y obtendremos una sintaxis coloreada mostrando los orígenes del software, las versiones y descripción.

Yaourt

Yaourt

Podemos usar yaourt para actualizar el sistema al estilo pacman: yaourt -Syu, se actualiza el sistema tal cual si usáramos pacman. Ahora, un tip que tuve que buscar, para actualizar también los paquetes de los repos AUR y devel, es agregarlos como parámetros:

yaourt -Syu --devel --aur

Personalmente uso muchos paquetes de AUR: Gimp, Amarok y otros traídos desde el repositorio GIT, además de varios paquetes de software como Opera, Firefox 4 beta y demás. Estos se van actualizando automáticamente con yaourt y no tengo que entrar a la interfaz web de AUR a preocuparme en ver qué paquetes instalé y cuáles tienen versiones nuevas.

En su momento me llevaba bastante tiempo hacer eso, y con yaourt se me facilitó enormemente el trabajo. Supuse que todos los Archers conocerían la herramienta, pero siempre hay algún nuevo/despistado como yo que no la conocía.

Más info:

http://archlinux.fr/yaourt-en
Comparte: Print del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com Tumblr Twitter

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

Arragonán

Screencasts de Mockito

Diciembre 27th, 2010 - [Enlace local]

Hace un poco que he empezado a trastear Mockito para utilizarlo en un proyectillo que llevo entre manos. Por si hay algún javero despistado, es una librería para ayudarnos a hacer mocks y stubs de las dependencias de código que queramos testear.

Pues hace unos días que encontré unos screencasts sobre Mockito que me resultaron muy aclaratorios de como puedo aprovechar la librería. Como me resultaron útiles, simplemente los comparto :) :

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

xailer.info (esp)

Xailer 2.1.5 Beta

Diciembre 24th, 2010 - [Enlace local]

Estimados usuarios de Xailer,

Como se comunicó hace días en los foros de noticias, tenemos el placer de presentar a modo de regalo de Papa Noel una nueva versión del IDE de Xailer que ha sufrido una tremenda transformación interior que ha sido necesaria para acometer importantes mejoras en la herramienta.
Debido a esta importante transformación hemos decidido publicar previamente el nuevo IDE en forma de Beta para que sea probada antes de realizar el salto a la versión 2.2 que incorporará el nuevo IDE. El periodo Beta va a ser muy corto. De hecho el IDE ha sido ampliamente probado por nosotros mismos y creemos que serán pocos los ‘bugs’ que se encuentren (cruzo los dedos).

El principal cambio que se ha realizado ha sido el soporte de múltiples proyectos, es decir, la posibilidad de tener abiertos varios proyectos a la vez controlando la dependencia entre ellos. Para poder realizarlo ha sido necesario modificar completamente el archivo XPJ que guarda la información del proyecto pasando de formato INI a formato XML que ofrece muchas más posibilidades. Cada vez que abra un proyecto antiguo con el nuevo IDE, éste le solicitará la conversión al nuevo formato. Si no lo realiza la gestión multi-proyecto no estará operativa. Obviamente, si realiza la conversión el proyecto no podrá ser abierto con versiones anteriores de Xailer por lo que es recomendable hacer una copia de seguridad del mismo por si acaso.

El cambio del XPJ a  formato XML nos ha permitido mejorar el proceso de compilado de cada fichero en particular siendo posible cambiar para un determinado fichero sus condiciones de compilación. Una imagen vale más que mil palabras:

Hemos incluido en el editor de código una colección de barras de botones para facilitar las operaciones de edición, como son:

Cada una de las barras puede ser ocultada desde la configuración del editor.

Realmente el gran cambio en el IDE de Xailer se ha producido en su interior. Sin el cambio que se ha realizado era imposible acometer muchas mejoras que teníamos pendientes y otras muchas que aún nos quedan por hacer.  Esperamos que en futuro podáis ver avances en el IDE con muchísima más agilidad.

Aprovechamos también el lanzamiento de Xailer 2.1.5 Beta para daros a conocer el nuevo gestor de descargas que hemos puesto en marcha en:

http://www.xailer.com/download

Como podréis ver el archivo consiste únicamente en el ejecutable del IDE. Os recomiendo que simplemente copiéis el archivo a vuestro directorio \Xailer\Bin y hagáis un enlace directo al mismo para de esta forma utilizar indistintamente el IDE 2.14 o éste nuevo. Es importante que tengáis en cuenta que si arrancáis el proyecto desde el explorador de archivos se arrancará la versión antigua de Xailer.

El nuevo gestor de descargas está pensado para que sea utilizado por todos vosotros como repositorio de cualquier fichero útil para el desarrollo de software con Xailer. Os animamos a que contribuyáis con vuestras propias rutinas, clases, ejemplos, documentos o incluso aplicaciones finales.

No intente utilizar esta versión Beta si no tiene actualmente registrada una versión de Xailer 2.1.

Un cordial saludo,

[El equipo de Xailer]

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

Variable not found

¡Felices fiestas y nuevo año!

Diciembre 24th, 2010 - [Enlace local]

Feliz NavidadDesearos a todos unas muy felices fiestas en compañía de todos los que os importan, y un próximo año lleno de dicha, salud y prosperidad. Puestos a pedir, a ver si incluso puede ser un poquillo mejor que el que dejamos atrás ;-)



Nos vemos por aquí.



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

Buayacorp

D0z.me acorta urls y hace ataques DDoS a la vez

Diciembre 23rd, 2010 - [Enlace local]

Con la creciente ola de ataques que ha generado Wikileaks, especialmente ataques DDoS a varios sitios conocidos, se han inventado muchas herramientas para “ayudar” a hacer estos ataques.

d0z.me

D0z.me es un acortador url como tantos, pero su particularidad está en que al acceder al enlace, se genera un iframe invisible que es el que empieza a hacer el ataque DDoS. El ataque seguirá mientras el usuario esté en el navegador.

El creador de esta herramienta es Ben Schmidt que nos advierte sobre utilizar los acortadores de url y el peligro que pueden generar a internet el creciente número de estos acortadores.

Enlace | D0z.me

Fuente | Fayerwayer

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

MadeInFlex

Servicios Personalizados de Pimento

Diciembre 22nd, 2010 - [Enlace local]

En los artículos anteriores dedicados a Pimento Data Service exploramos el uso de la clase EntityManager para invocar operaciones CRUD y la funcionalidad de “lazy loading”. Esta vez vamos a tratar el uso de los servicios personalizados y lo haremos como siempre a través de un ejemplo.

  1. El ejemplo
  2. Conclusiones

Habiamos mencionado en el primer artículo que Pimento Data Services ofrece dos modelos de programación, uno basado en la clase EntityManager y el otro basado en los servicios personalizados. Con este último se crean clases de Java que asemejan a la capa de servicios de una arquitectura multicapa, y se exponen como servicios remotos de Cinnamon, el framework que implementa AMF y que soporta tareas “ant” que facilitan la creación de “proxies” en ActionScript de estas clases Java.

El uso de este modelo de programación permite también aprovechar las facilidades de Pimento en cuanto a que entidades que hayan sido cargadas por un servicio personalizado pueden ser gestionadas por el framework, o sea, se cargarán en el “cache” del cliente, se gestionará su llave primaria cuando se haga persistente una nueva instancia, etc. Esto quiere decir que los dos modelos se pueden complementar entre sí para adaptarse a los requerimientos.

El ejemplo

El ejemplo que desarrollaremos será el mismo que en el artículo dedicado al “lazy loading”, pero en este caso, en vez de hacer la carga inicial de la entidad “Project” utilizando la clase EntityManager lo haremos utilizando un servicio personalizado, la asociación “One To Many” la cargaremos a través del método “initialize”, de EntityManager, lo que probará la integración de ambos modelos de programación.

Lo primero será descargar el framework de aquí. Luego creamos un proyecto de tipo “Dynamic Web Project” con las siguientes características:

Una vez creado el proyecto copiamos el contenido de la carpeta “server/web/WEB-INF/lib” de la distribución del framework en “WebContent/WEB-INF/lib” de nuestro proyecto. Sustituimos el archivo de HSQLDB por el controlador JDBC de MySQL, y copiamos de la carpeta “server/release” los archivos “cinnamon-core”, “cinnamon-reflect”, “pimento-core” y ”pimento-generator”. Necesitamos copiar también “freemarker” y “paranamer” de la carpeta “server/lib” y el paquete “javassist”, este lo podemos encontrar en la distribución de Spring con dependencias. La carpeta “generatorTemplate” la copiamos en la raíz del proyecto.

Creamos una carpeta denominada “config” dentro de “WebContent/WEB-INF” de nuestro proyecto y copiamos los archivos “jpa-spring.xml” y “pimento-spring.xml” en “server/web/WEB-INF/config” en la distribución del framework; también copiamos el archivo “dp.properties.template.mysql” de “server/web/WEB-INF/config/db-templates” como “db.properties” en “WebContent/WEB-INF/config” de nuestro proyecto y ajustamos los valores de la conexión a la base de datos. Como estamos en fase de desarrollo ponemos “hibernate.hbm2ddl.auto=update”.

Finalmente el archivo “web.xml” de nuestro proyecto queda así:

En este caso el servicio personalizado se define en el archive service-spring.xml, cuyo contenido es el siguiente:

Las entidades con que trabajaremos son:

Project:

Task

Estas son entidades de JPA con anotaciones del framework que indica que serán gestionadas por éste.

El servicio personalizado se concibe como una clase que implementa una interface donde se definen todas las operaciones. El código es el siguiente:

ProjectService

Nótese aquí la anotación “@CinnamonService” que indica un servicio a ser invocado remotamente.

ProjectServiceImpl

Esta es una clase que utiliza JPA del modo tradicional donde de realiza la carga de la entidad Project. Para poder utilizar esta clase desde Flex a través de Pimento debemos generar el “proxy” para ActionScript, lo cual haremos mediante las tareas “ant” suministradas por el framework para esto:

Antes de proseguir con el cliente cargaremos algunos datos iniciales en la base de datos:

Creamos un proyecto Flex con las siguientes características:

Nuestra interface de usuario será la misma que en el artículo anterior:

1

Inicialmente cargaremos una instancia de Project, pero esta vez utilizando el servicio personalizado, e inspeccionaremos el contenido de su propiedad “tasks”, luego cargaremos las instancias de “Task” asociadas mediante el método “initialize” de la clase EntityManager, las cuales mostraremos en el “DataGrid”.

Para estructurar mejor el proyecto nos auxiliaremos del framework Robotlegs. Lo primero que haremos será incluir en el proyecto las librerías del framework Pimento y Cinnamon. Copiamos en la carpeta “libs” del proyecto los archivos “cinnamon-1.1.0.swc” y “pimento-1.1.0.swc” que se encuentran en la carpeta “client\release” de la distribución, incluimos también “spicelib-core-2.0.1.swc” y “spicelib-reflect-2.0.1.swc” de la carpeta “client\lib” y la librería del framework Robotlegs.

Creamos luego las clases en ActionScript que representan las entidades:

Project

Task

La configuración del framework en el cliente comienza con la creación de una instancia de la clase “PimentoConfig”, a través de la cual podemos obtener el “EntityManager” que usaremos para invocar las operaciones de persistencia. La clase PimentoConfig necesita conocer el URL de la aplicación JEE que a través de Cinnamon recibirá las solicitudes del cliente para invocar las operaciones de persistencia, específicamente el URL al servlet “service”. En nuestro caso cargaremos esta información de un archivo xml externo. El comando que hace todo esto y además carga la instancia de “Project” que insertamos en la base de datos es el siguiente:

Para configurar el servicio personalizado creamos una instancia de ProjectServiceImp y lo registramos en el framework a través del método “addService”. Al final cargamos la entidad basado en su Id.

Una vez cargada la instancia de Project, ante el evento “Click” del botón se ejecuta el comando que carga los datos de la asociación:

El código fuente del proyecto se puede descargar desde aquí.

Conclusiones

Hemos visto el modelo de programación de Pimento que permite utilizar servicios personalizados, que no son más que clases de Java expuestas como destinos remotos que toman entidades como parámetros o devuelven entidades como retorno. Estas entidades pueden ser gestionadas por Pimento lo que permite que este modelo coexista con el otro que se basa en la clase EntityManager, dando gran flexibilidad a la aplicación.

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

programania

Orgullo sin autocomplacencia y propósitos de año nuevo

Diciembre 21st, 2010 - [Enlace local]

Tras vergüenza y dolor, no todo va a ser malo: me apetece escribir con un poco de orgullo (intentando evitar la autocomplacencia).

Cosas que he hecho durante el 2010

Cosas que quiero hacer durante el 2011


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

Cerebro en la Sombra » Técnico

Modificando la infraestructura web de un servidor con Nginx para servir contenido estático y como proxy de Apache

Diciembre 21st, 2010 - [Enlace local]

Es la moda icon smile Modificando la infraestructura web de un servidor con Nginx para servir contenido estático y como proxy de Apache , y con este comentario no quiero decir que no sea una buena idea.

La explicación es sencilla. Solemos utilizar Apache para servir cualquier tipo de contenido a través de una petición HTTP, pero en Apache cargamos habitualmente muchos módulos necesarios para que nuestras aplicaciones funcionen correctamente, empezando por el mismísimo PHP, pero que no necesitamos para servir contenidos estáticos (imágenes, archivos css o javascript, archivos comprimidos…). Si pudiésemos separar de una manera sencilla las peticiones de estáticos de las de dinámicos podríamos redirigirlas a distintos servicios y conseguiríamos que las estáticas consumiesen muchos menos recursos ya que las podríamos hacer con un servidor mucho más ligero que Apache. ¡Podemos!

Este sería el escenario tradicional de un servidor web:

http Modificando la infraestructura web de un servidor con Nginx para servir contenido estático y como proxy de ApacheLas solicitudes HTTP llegan al servidor web desde Internet y éste lee los archivos en disco necesarios para servirla. Nada nuevo.

Este es el escenario al que queremos migrar:nginx Modificando la infraestructura web de un servidor con Nginx para servir contenido estático y como proxy de Apache

Todas las peticiones HTTP son recibidas en el puerto 80 por un servidor mucho más ligero que Apache (nginx, lighttpd) que se encarga de servir directamente los contenidos estáticos desde el disco y de redirigir las solicitudes dinámicas al Apache de siempre que ahora escucha en el puerto 8080, es decir, el servidor ligero actúa como proxy para las peticiones de contenidos dinámicos.

Para el caso que nos ocupa, el servidor a migrar tiene varios virtual hosts definidos de distintos sites y se pretendía dejar los que tienen poco tráfico tal y como están ahora, es decir, que Apache lo sirva todo, y cambiar sólo aquellos donde el tráfico es elevado para que Nginx sirva los estáticos.

El primer paso es, por tanto, instalar y configurar Nginx para que actúe como proxy completo. Deberemos modificar también Apache para que deje de escuchar en el puerto 80. Empecemos por esto último.

Tendremos que cambiar el fichero de configuración httpd.conf para que escuche en el nuevo puerto, en mi caso el 8080. Cambiaremos la línea correspondiente para que quede así:

Listen 8080

Pero esto no es todo. Tenemos que modificar también los virtual hosts definidos para que escuchen en el nuevo puerto. Al final del mismo archivo cambiaremos la línea correspondiente por esta (la tuya será similar, quizás en vez del asterisco tenga la ip de tu máquina):

NameVirtualHost *:8080

En mi Centos5 la configuración de los virtual hosts se guarda en /etc/httpd/httpd.d. Desde ahí lanzamos este comando que nos los actualizará todos de un tirón:

for i in `dir .`; do sed -i s/*:80/*:8080/g $i; echo  $i; done

Menos mal, sino habría que cambiarlos a mano uno por uno icon razz Modificando la infraestructura web de un servidor con Nginx para servir contenido estático y como proxy de Apache .

Ahora instalamos nginx:

yum install nginx

y hacemos la primera configuración que nos permitirá, de momento, que sea proxy completo de Apache, es decir, que lo redirija todo a Apache.

Creamos el archivo /etc/nginx/proxy.conf

resolver 127.0.0.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 128m;
client_body_buffer_size 256k;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffers 32 256k;
proxy_busy_buffers_size 512k;
proxy_temp_file_write_size 512k;

La primera línea será la ip del servidor DNS.

Ahora añadiremos a la configuración de nginx lo siguiente dentro del “server” por defecto.

/etc/nginx/nginx.conf

server{
	listen       80;
	location / {
		proxy_pass http://$host:8080;
		include /etc/nginx/proxy.conf;
}

El primer paso debería estar terminado. Levantamos los servicios de Apache y nginx y probamos a navegar por los virtual hosts del servidor. Si todo ha ido bien debería funcionar correctamente, pero si analizamos las cabeceras que se reciben en la respuesta, por ejemplo con el plugin livehttpheaders de Firefox, veremos como añade la siguiente línea a todas las solicitudes:

Server: nginx/0.8.53

Prueba 1 superada. Vamos ahora a configurar determinados virtual hosts para que el contenido estático lo sirva nginx.

/etc/nginx/conf.d/virtual.conf

server {
	listen  80;
	server_name www.tudominio.com;
	location ~* ^.+\.(jpg|js|jpeg|png|ico|gif|txt|js|css|swf|zip|rar|avi|exe|mpg|mp3|wav|mpeg|asf|wmv|flv)$ {
		root /var/httpd/www.tudominio.com;
		expires 30d;
	}
	location / {
		proxy_pass http://www.tudominio.com:8080;
		include /etc/nginx/proxy.conf;
	}
}

Con esto le decimos que todos los archivos estáticos los sirva nginx directamente y que las demás peticiones las redirija a Apache. Debemos crear un “server” por cada virtual host que queramos configurar de esta manera. Básicamente lo que hacemos es configurar la misma ruta en disco para los archivos estáticos que la que teníamos en Apache, de esta manera no tendremos que cambiar absolutamente nada. En muchos sitios proponen crear un host static.tudominio.com, pero esto implicaría modificar físicamente todas tus aplicaciones web, y eso no es lo que se pretende icon razz Modificando la infraestructura web de un servidor con Nginx para servir contenido estático y como proxy de Apache .

Sólo nos queda reiniciar nginx. ¿Cómo sabemos si funciona? Sencillo, revisando los logs de Apache y nginx. Si lo hacemos veremos cómo este último sirve los archivos estáticos y Apache todos los demás icon smile Modificando la infraestructura web de un servidor con Nginx para servir contenido estático y como proxy de Apache .

Finalmente tendremos un pequeño problema. Desde Apache se verán todas las solicitudes HTTP como si vinieran de la propia máquina ya que, en efecto, vienen de nosotros mismos a través del proxy. Esto puede ser un problema para analizadores de tráfico pero también si tienes algún sistema que controla las ip’s de los usuarios. Para solucionarlo tenemos mod_rpaf para Apache (reverse proxy add forward module) que nos reemplazará las cabeceras adecuadamente de manera que la IP remota que veamos sea la de nuestro cliente. Lo descargamos, lo instalamos y lo configuramos:

/etc/httpd/conf.d/rpaf.conf

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Forwarded-For

Con esto conseguiremos que se reemplace la IP del cliente que se recibe en Apache con la que viene en la cabecera “X-Forwarded-For” que es donde nginx nos deja la original.

Eso es todo. Si reiniciamos el servidor Apache veremos que en los logs comenzará a verse la IP real del usuario y no la de nuestra máquina local.

Como siempre, un último detalle. Integremos nginx con Cacti para hacer un seguimiento icon smile Modificando la infraestructura web de un servidor con Nginx para servir contenido estático y como proxy de Apache .

Las plantillas están aquí, pero a mi no me funcionaron bien, las cambié un poco por estas otras.

Añadimos en la configuración inicial de nginx las siguientes líneas:

location /nginx_status {
	stub_status on;
	access_log   off;
	allow IP_DE_TU_SERVIDOR_CACTI;
	deny all;
}

Con esto podrás acceder al estado del servidor nginx desde http://IP_DE_TU_SERVIDOR/nginx_status.

Dentro del zip hay cuatro archivos, dos scripts perl que debes copiar en el directorio scripts de tu instalación de cacti y dos xml que debes importar desde la propia herramienta. Ya está todo preparado. Desde la configuración de cacti del servidor donde has instalado nginx añades las nueves fuentes de datos y los gráficos. Al configurarlo te pedirá la url de acceso que veíamos hace un momento.

nginx0 Modificando la infraestructura web de un servidor con Nginx para servir contenido estático y como proxy de Apache nginx1 Modificando la infraestructura web de un servidor con Nginx para servir contenido estático y como proxy de Apache

Y hasta aquí hemos llegado. En muy poco tiempo hemos conseguido modificar toda la estructura de nuestro sistema web sin pérdida de disponibilidad y, lo mejor de todo, hemos creado un sistema mucho más eficiente y robusto. En condiciones de tráfico medio no notarás mucha diferencia de rendimiento, pero tendrás un sistema mucho más preparado para hacer frente a picos y efectos “barrapuntoicon smile Modificando la infraestructura web de un servidor con Nginx para servir contenido estático y como proxy de Apache .

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

Variable not found

Cambios en la validación de peticiones en ASP.NET MVC 3

Diciembre 21st, 2010 - [Enlace local]

ASP.NET MVC 3Hace no demasiado tiempo escribía sobre las formas de evitar el error “Request.Form peligroso”, mostrando distintas técnicas para controlar la forma en que ASP.NET defiende nuestras aplicaciones de ataques de inyección de script evitando la entrada de campos de formulario, cookies o parámetros del querystring con contenidos HTML. En ese post cubría hasta la versión 2 de MVC, Webmatrix, y ASP.NET Webforms.



Ahora, por fin la RC 2 de ASP.NET MVC 3 estabiliza por fin algo que ha sufrido varios cambios durante toda la fase de pruebas del producto, y que nos estaba volviendo algo locos por el cambio de denominación de atributos, o la aparición y desaparición de propiedades.



En ASP.NET MVC 3, por defecto, todos los parámetros de entrada serán sometidos a las comprobaciones oportunas para evitar la aparición de etiquetas y entidades HTML. En caso de detectar la aparición de algún texto peligroso, aparecerá el mismo error de siempre:



Se detectó un posible valor Request.Form peligroso


Sin embargo, a diferencia de versiones anteriores, la desactivación de la validación se puede realizar ahora de forma mucho más detallada, únicamente sobre los campos que nos interesen, evitando así los problemas derivados del enfoque previo, según el cual se validaban todos los campos o no se validaba ninguno.



Para ello, se ha introducido el atributo [AllowHtml] (definido en System.Web.Mvc), que aplicado sobre una propiedad del modelo, permite que ésta contenga etiquetas y otros elementos que podrían ser considerados peligrosos durante el proceso de binding. El siguiente ejemplo muestra una entidad que permitiría contenido HTML en la propiedad Texto, pero no en el Titulo:



El atributo AllowHtml



Un aspecto importante es que con MVC 3 ya no será necesario introducir el atributo requestValidationMode="2.0" en el elemento <httpRuntime> del web.config, ni ningún otro cambio en el archivo de configuración. Simplemente, el anterior código funcionará :-)



Y por otra parte, comentar que desde la RC de MVC 3 no se acepta el parámetro Exclude del atributo [ValidateInput], que se utilizaba para indicar a nivel de controlador las propiedades o campos a omitir del proceso de validación. Por esta razón, dicho atributo será posible utilizarlo únicamente como siempre, para activar o desactivar la validación a nivel de acción, es decir, para todos los valores de la entrada; por ejemplo, en el siguiente código, se indica que los parámetros de entrada a la acción Edit  no deben ser validados:



El atributo ValidateInput



Hey, todo esto está muy bien, pero… ¡AllowHtml no me funciona!

Ya, pero que no cunda el pánico ;-D



Todo lo que he dicho anteriormente es verdad, salvo por un pequeño detalle. Debido a un bug de la Release Candidate 2 de ASP.NET MVC 3, ya comentado por ScottGu hace unos días, el atributo [AllowHtml] no funcionará directamente a no ser que introduzcamos el siguiente código en el global.asax:



image



Obviamente, la versión final de MVC 3 vendrá con este problemilla solucionado.



Publicado en: Variable not found.



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

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

Team Foundation Server 2010, Microsoft Solution Framework y SCRUM

Diciembre 21st, 2010 - [Enlace local]

 

MSF Agile

Me da gusto saber que Microsoft ha invertido para que sus productos consideren SCRUM, si bien hace algunos años era una Utopía SCRUM y todo el tema de Agilidad ahora tiene tal madurez que los grandes corporativos (IBM, Microsoft etc) lo adoptan o aplican a sus productos.

Algunos links interesantes sobre herramientas de Microsoft y SCRUM

Scrum with Team Foundation Server 2010

MSF for Agile Software Development v5.0

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

xailer.info (esp)

Xailer 2.1.4

Diciembre 20th, 2010 - [Enlace local]

Estimados usuarios de Xailer,

Hoy publicamos una pequeña actualización de Xailer con número de versión 2.1.4. (también accesible por el sistema de actualización automática)

La próxima revisión de Xailer incorporará grandes cambios que seguro os gustaran. Esperamos poder presentaroslo antes de Navidad, es decir, an apenas un par de días.

No intente actualizarse a esta versión hasta que tenga absoluta certeza de que tiene derecho a recibirla.

Un cordial saludo,

[El equipo de Xailer]

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

Variable not found

Enlaces interesantes 24

Diciembre 20th, 2010 - [Enlace local]

Estos son los enlaces publicados en Variable not found en Facebook y Twitter desde el domingo, 12 de diciembre de 2010 hasta el domingo, 19 de diciembre 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...

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

CRM y BPM

Diciembre 20th, 2010 - [Enlace local]

Cuales son los principales problemas dentro de una estrategia de CRM y como puede ayudar a resolverlos BPM, el el siguiente artículo se menciona estos 2 temas, resalto lo siguiente

1) Ofrecer respuestas adecuadas y en el tiempo adecuado a los clientes

2) Automatizar los procesos de CRM sin ser necesario accesar a varias fuentes de información

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

MadeInFlex

Flex Hero: Size Report, OSMF y RSLs

Diciembre 19th, 2010 - [Enlace local]

Acabaremos esta serie de Hero para desktop con este post, hablando de estos tres aspectos importantes: Size Report, Open Source Media Framework (OSMF) y mejoras en cuanto a las Run Shared Libraries (RSL).


Hero Size Report

El tamaño final de las aplicaciones siempre es un aspecto determinante para cualquier proyecto. En este apartado veremos las mejoras que ha realizado Hero en este ámbito.

El compilador de Flex 3.x y 4.0 nos proporciona la opción -link-report , que genera un report XML, detallando el tamaño aproximado en bytes todas las clases ActionScript incluidas en el SWF final. Nos puede ayudar a ver durante el desarrollo, las areas que contribuyen, en mayor mesura, a tener una película demasiado pesada.

También disponemos de la utilidad swfdump utility, que proporciona un report de alto nivel, pero no lo suficientemente adecuado para ver las áreas problemáticas relacionadas con el tamaño de la película.
Flex 4.5 mejora la opción -size-report para tener un total del peso de cada tipo dentro del SWF (script, media, fonts, etc).

Uso

Cuando usamos mxmlc o compc -size-report , se obtiene un reprot XML como podría ser el siguiente:

El tag principal report, contiene un subtag llamado swf que nos da el tamaño en bytes del SWF, tanto comprimido como no comprimido.

Otra información

Este report también nos da información importante como puede ser:

Más información sobre esta característica aquí.


Integración de OSMF 1.0

Flex Hero actualiza la version de OSMF a 1.0. Con esta actualización se añado soporte para HTTP Streaming. Podemos usar esta funcionalidad para proporcionar recursos bajo demanda, como streamming dinámico mediante el componente Spark VideoPlayer.

Dos enlaces para más información:
HTTP Streaming
Información


Mejoras de Hero en cuanto a RSLs

Se ha hecho un esfuerzo para poder usar las RSLs de manera mucho más fácil y más efectiva.
El uso de las RSLs en la caché de Flash Player se introdujo en Flex 3. Flex 3 solo tenía 3 RSLs y solo se cargaba por defecto la RSL del framework. La opción RSL linkage estaba desactivada por defecto.
En Flex 4 se hizo el cambio para que se cargaran todas las RSLs y para permitir que pudieran ser debuggadas, aunque no se cambió la manera de cómo se configuraban y cargaban. Se cargaban 6 RSLs para cada aplicación.
Las RSLs se definieron de manera muy simple: especificando el SWC que se quiere como librería externa y luego cargando la RSL desde la URL que contiene todas las clases necesarias para que la aplicación funcione.

Historial de las RSLs

1. El número de RSLs aumentó en el paso de Flex 3 a Flex 4. La carga de todas las RSLs retarda el inicio de la aplicación, ya que las RSLs deben cargarse aunque no se usen en la aplicación.

2. En Flex 4 se espera que las sub-aplicaciones y modules usen las RSLs cargadas por la aplicación primcipal. Pero hay módulos que necesitan custom RSLs. Podemos pensar que la aplicación principal cargará estas custom RSLs, pero no es así.

3. Podemos crear RSLs para sobreescribir clases de las RSLs del SDK, pero el proceso es complicado.

4. Se está creando un set de componentes Spark como análogos de los componentes mx. En muchos casos no hace falta usar componentes mx. Si incluimos la RSL del framework, se cargan todos los components mx y provoca más consumo de memoria.

En relación a todo esto, Hero aplica las siguientes soluciones:

1. El compilador elimina las RSLs que no son usadas por la aplicación, usando una nueva opción de compilación: “remove-unused-rsls”.

2. Si una sub-aplicación o módulo intenta cargar una RSL que ya ha sido cargada, la ignora.

3. Para poder sobreescribir RSLs, podemos incluir una opción de compilador para que incluya sólo la herencia de dependencias en un SWC que serán usadas por la RSL sobreescrita.

4. Se han movido los componentes mx a una RSL separada para poder descartarla si no la usamos.

Rendimiento

El rendimiento usando RSLs ha mejorado en Flex 4.5 comparado con Flex 4.0. Las mejoras se deben a no cargar las RSLs que no se necesitan y la reducción de tamaño de la RSL del framework.
Se han hecho tests con una aplicación simple, la típica “Hello World” para demostrar las mejoras de rendimiento.
La aplicación ha sido complada en 4.0 y en 4.5 con la opción de compilador “remove-unused-rsls”. El resultado es que se han quitado RSL que no se usan, como osmf o rpc y se ha conseguido reducir el tamaño de la RSL del framework de 608 KB a 310 KB.
Con una velocidad de bajada de 1500 kbps, se optienen estos resultados:
para la versión de SDK 4.5 el tiempo de inicialización es de 9 segundos y la memoria de sistema necesaria es de 14 MB, mientras que para el SDK 4.0 se precisan 15 segundos de inicialización y 17.4 MB de memoria.
Así observamos que hay una reducción considerable en cuanto a tiempo y a memoria.

Más info en estos dos links:
RSL enhancements
Linking RSLs

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

Información legal y técnica