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

4 bits blog

mini, una biblioteca para procesar archivos INI

Febrero 28th, 2010 - [Enlace local]

Hace ya bastante tiempo en el trabajo me tocó lidiar con un programa (en C) que debía procesar la configuración de un archivo INI, para quién no lo sepa es un archivo de texto con un formato similar a este:

;Archivo INI

[sección]
clave1=valor1
clave2=valor2

En estos casos lo mejor es no reinventar la rueda, así que hice un par de búsquedas por internet, pero lo que encontré no me gustó, así que ni corto ni perezoso realicé mi propio cutre-parser que funcionaba bien para lo que quería, archivos INI creados a mano, pero no para todos los casos que podría tener un archivo INI.

Así que gracias a un poco de tiempo libre me he puesto las pilas un poco y he ido modificando aquel cutre-parser hasta algo más decente, aunque todavía le quiero dar un par de vueltas para dejarlo bien. De todos modos, el código que hay ahora mismo funciona bastante bien, así que he creado un repositorio para mini en github (por cierto, git mola mil), así no tenéis excusa para probarlo.

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

PROGRAMANDO EN .NET

Otro test de agudeza visual: ¿qué código es peor?

Febrero 26th, 2010 - [Enlace local]

Opción 1: Dim intVariable as Integer Try intVariable = LlamadaaMetodoQuePuedeDevolverNothing() Catch ex as Exception intVariable = 0 End TryOpción 2: Dim intVariable as Integer = 0 Try intVariable = LlamadaaMetodoQuePuedeDevolverNothing() Catch ex as Exception End TryRespuesta: la opción 2, que provoca un precioso "agujero negro de excepciones".PD: los 2 ejemplos están basados en hechos

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

Mal Código

The Scourge Project en Steam

Febrero 26th, 2010 - [Enlace local]

El videojuego "The Sourge Project" estara disponible a partir de marzo en Steam.Me alegro mucho por los ex-compañeros de TragnarionYa estoy deseando jugarlo.via: Pocs esments

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

carlosrovira.com

FlashDay, nuevo evento inspiracional

Febrero 26th, 2010 - [Enlace local]

El próximo 4 de marzo se celebra un evento ineludible. Se trata de FlashDay, un evento inspiracional, donde muchas de las grandes figuras del panorama español participan para ofrecer su visión y experiencia en todo lo relacionado con la Plataforma Flash.

flashday

El evento es idea de Xavi Beumala, de sobra conocido por todos y referencia internacional dentro de la Plataforma Flash, actualmente trabajando en Adobe. Otras muchas colaboraciones importantes como la de Joseba Alonso de Refr3sh, Enrique Duvos Adobe Evangelist o Joan Garnet de Codeoscopic, por nombrar algunos nombres, estarán ofreciendo sendas charlas inspiracionales ese día.

Por mi parte solo puedo morderme el labio y maldecir por tener obligaciones en Madrid que me impedirán el poder asistir. Si vosotros no tenéis ese problema, no os lo perdáis!! :) .

Del propio sitio:

FlashDay es un evento con carácter 100% inspiracional y participativo alrededor de la plataforma Flash.

Y qué entendemos por inspiracional? pues bien, mostrar aquellos proyectos, pruebas de concepto, labs e ideas que todos tenemos en mente y que han arrancado woows a usuarios, amigos, compañeros y clientes, proyectos que por su naturaleza apasionan. Cosas que Flash como plataforma permite hacer y que tanto nos gusta y divierte.

FlashDay es un entorno para entrar en contacto con gente con las mismas inquietudes, un entorno en el que compartir y mostrar todos esos proyectos en los que andas trabajando, un entorno en el que inspirarte y participar. Un entorno para creativos, desarrolladores, diseñadores, un entorno para todos.

A qué proyectos nos referimos? A todos aquellos proyectos en los que hayas trabajado, estés trabajando o vayas a trabajar; Visualizaciones creativas, Instalaciones, 3D, Audio, Aplicaciones RIA, Publicidad y campañas, Formación, Flash en dispositivos mobiles, Entornos colaborativos, Animaciones y Ilustraciones, Realidad aumentada, etc…

Y tienen que ser proyectos Flash? Sí, pero entendiendo Flash como una Plataforma que incluye Flash, Flex y AIR.

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

Joan Garnet :: Arquitectura y desarrollo RIA

FlashDay: evento inspiracional

Febrero 26th, 2010 - [Enlace local]

El próximo día 4 de Marzo tendrá lugar la primera edición del FlashDay, evento concebido y organizado por Xavi Beumala y Enrique Duvós como iniciativa personal fuera del ámbito de Adobe.
El evento tiene como objetivo ofrecer un entorno de encuentro en el que se pueda mostrar lo que la plataforma Flash permite hacer a nivel experimental o conceptual.
No se pretende mostrar código sino qué hace el código, además con la premisa de que lo que se muestre sea innovador e inspirador. Esto hace que sea un evento válido, no solo para programadores sino para cualquiera persona que esté interesada en la tecnología Flash como herramienta creativa.



Por mi parte he sido invitado para formar parte del grupo fijo de ponentes.
Si os fijáis en la Agenda del evento veréis que hay un tal Joan Llenas, ese soy yo. En esta ocasión dejaré el disfraz de Joan Garnet en el armario… :)
En mis 30 minutos de gloria voy a mostrar algunos ejemplos de lo que se puede hacer con las nuevas funcionalidades de generación dinámica de audio (a.k.a síntesis de audio) del Flash Player, un campo apasionante dentro del mundo de la programación del que desde hace bien poquito podemos sacar partido gracias a las nuevas APIs introducidas en el Flash Player 10.

Si estas por Barcelona el día 4 de Marzo no dejes de reservarte 5 horitas (de de 14 a 19h) para asistir al evento.
Y recuerda esto: No sirve de nada que te lo expliquen, tienes que venir!

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

Najaraba.com: Software libre, metodologías ágiles y más.

Conferencia Agile-Spain 2010 (CAS2010)

Febrero 25th, 2010 - [Enlace local]

Hoy tengo una gran noticia. Ya se ha dado el pistoletazo de salida para la primera conferencia sobre Ágiles en España. En Agile-Spain la estamos organizando: CAS2010.En la web podeis encontrar toda la información necesaria. En estos momentos están abiertos los procesos para la selección de sesiones, contribuiciones y talleres. Cualquier planteamiento relacionado con las prácticas y metodologías

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

Arragonán

Historia de los frameworks web

Febrero 24th, 2010 - [Enlace local]


By @mraible

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

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

Flash, no tan rápido

Febrero 23rd, 2010 - [Enlace local]

Como sabéis, la máquina virtual que usa Adobe Flash para el código ActionScript 3, está basada en el proyecto Tamarin de la Fundación Mozilla. Esto quiere decir, que aunque AS3 sea un superconjunto de Javascript, comparte gran parte de la base de código utilizada en TraceMonkey, que a su vez se usa por ejemplo en Firefox, para la ejecución de Javascript.

En Rendimiento Javascript vs VBScript, analizaba las diferencias de rendimiento que había bajo Internet Explorer a la hora de ejecutar el mismo código en VBScript y Javascript. Luego en Benchmark de CPU/FPU en Flash, hacía un análisis del rendimiento en lo que a cálculos se refiere desde Flash. Sin embargo quedaba un tema pendiente...

Dado que según se ha visto, la ejecución de código en la VM, es bastante común en Firefox y Flash, cabría pensar que a nivel de rendimiento fueran muy parejos. No obstante, también podríamos pensar que como históricamente Flash ha generado aplicaciones más complejas que Javascript, el equipo de FutureSplash/Macromedia/Adobe, hubiera realizado trabajos especiales en su optimización.

He aprovechado (otra vez), el código de cálculo de números primos en Javascript, VBScript, y ActionScript 3, y lo he ejecutado en diferentes entornos. Estos han sido los resultados:

- Javascript (Safari 4.0.4): 1044 ms.
- Javascript (Iron 4.0.280): 1906 ms.
- Javascript (Opera 10.50.3236): 2038 ms.
- Javascript (Firefox 3.7a1 20100121 x64): 2148 ms.
- Javascript (Firefox 3.7a1 20100121 x86): 2192 ms.
- Actionscript (Flash 10): 3586 ms.
- VBScript (Internet Explorer 8.0.7600.16385 x64): 5810 ms.
- VBScript (Internet Explorer 8.0.7600.16385 x86): 8080 ms.
- Javascript (Internet Explorer 8.0.7600.16385 x64): 8140 ms.
- Javascript (Internet Explorer 8.0.7600.16385 x86): 9230 ms.

Observamos, que el rendimiento, no es en absoluto parejo, y Flash 10 se muestra alrededor de 2 veces más lento que Firefox en cuanto a desempeño. Personalmente una gran sorpresa para mi, que he vivido en mis propias carnes las grandes mejoras de velocidad con la VM de AS3 comparada con la anterior de AS2.

Debemos aclarar que como cualquier benchmark sintético, puede no ser representativo de la realidad, aunque si que debe dar una idea clara de la velocidad a la que uno y otro pueden realizar cálculos puros. Ello no quiere decir que otras funcionalidades, en particular dibujo en pantalla, etc, puedan ser más eficientes en ActionScript 3 que en Javascript, aunque en todo caso, eso sería parte de un futuro artículo.

Puedes probarlo tu mismo descargando todostodos los fuentes aquí (6 Kb. en formato ZIP).

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

Variable not found

Modificar los mensajes de validación por defecto en ASP.NET MVC 2

Febrero 22nd, 2010 - [Enlace local]

ASP.NET MVC 2 El sistema de validaciones integrado en ASP.NET MVC 2, basado en la especificación de restricciones utilizando los atributos definidos en el espacio de nombres System.ComponentModel.DataAnnotations, permite la introducción de mensajes de error personalizados, como en el siguiente ejemplo:



[Range(100, 230, ErrorMessage="La altura debe estar comprendida entre {1} y {2}")]
public double Height { get; set; }


Y otra posibilidad es externalizar estos mensajes a archivos de recursos, y crear versiones localizadas de los mismos:



[Required(
    ErrorMessageResourceName="CampoObligatorio",
    ErrorMessageResourceType = typeof(Resources.Mensajes))]
public string Name { get; set; }


De esta forma, todos los atributos mediante los cuales podemos indicar restricciones del modelo permiten la especificación de un mensaje de error descriptivo.



Sin embargo, hay dos tipos de errores de validación en los que no es tan obvia la forma de indicar el texto del mensaje, debido a que no se generan por restricciones especificadas en atributos, sino basados en el tipo de la propiedad.



Por ejemplo, supongamos el siguiente código, perteneciente a una entidad de datos:



public class Entidad
{
  public DateTime Fecha { get; set; }
  public int Numero { get; set; }
}


Aunque no hayamos indicado ninguna anotación que limite el contenido de sus dos propiedades, sí que existen de forma implícita dos condicionantes: el primero de ellos, que al tratarse de tipos valor no se admitirán valores nulos (o vacíos, a nivel de controles de formularios); y el segundo, que los valores introducidos deben ser convertibles a los tipos DateTime e int, respectivamente.



La siguiente captura de pantalla muestra un formulario de edición de la entidad en los que se han producido estos errores de validación:



Editando la entidad


Propiedades implícitamente obligatorias

El mensaje “The XX field es required” es el texto de error por defecto para las propiedades de tipo valor, implícitamente obligatorias, y es el mismo que aparece cuando utilizamos la anotación [Required] sin especificar ningún mensaje de validación.



Para modificarlo basta decorar la propiedad con dicho atributo y especificar en él el contenido del mensaje, o la forma de localizar el texto en los recursos de la aplicación, de la misma forma que haríamos con un tipo referencia, como un string.



public class Entidad
{
   [Required(ErrorMessage = "Campo obligatorio")]
   public DateTime Fecha { get; set; }
 
   [Required(ErrorMessage = "Campo obligatorio")]
   public int Numero { get; set; }
}


Dado que este código es algo anti-DRY, todavía podemos mejorarlo un poco creando nuestro propio atributo personalizado:



public class Entidad
{
   [Requerido]
   public DateTime Fecha { get; set; }
 
   [Requerido]
   public int Numero { get; set; }
}
 
public class RequeridoAttribute : RequiredAttribute
{
   public RequeridoAttribute()
   {
      this.ErrorMessage = "Campo obligatorio";
   }
}


¿Problemas con el cambio de tipo?

El otro error, “The value XX is not valid for YY”, es algo más complicado  dado que no existe ningún atributo en el que podamos indicar de forma explícita el mensaje a utilizar, como hemos hecho en el caso anterior.



Para sustituir el mensaje por defecto es necesario utilizar un archivo de recursos en el que tendremos que introducir el texto que queramos utilizar en estos casos. Para ello, añadiremos en primer lugar una carpeta de recursos globales:



Añadir una carpeta de recursos globales



Y en su interior un archivo de recursos, llamado por ejemplo Mensajes.resx, en el que introducimos un string con el nombre PropertyValueInvalid, cuyo valor será el mensaje de error que queremos mostrar cuando se produzca un error de conversión:



PropertyValueInvalid



Observad que el interior del mensaje {0} será sustituido por el valor incorrecto, y {1} por la descripción de la propiedad que está generando el error.



El último paso para que ASP.NET MVC framework reconozca dónde debe buscar este recurso es indicar en la inicialización de la aplicación el nombre del archivo (o clase) que lo contiene:



 
protected void Application_Start()
{
   ... // Otras inicializaciones
 
   DefaultModelBinder.ResourceClassKey = "Mensajes";
}


Tras aplicar estos cambios, si ejecutamos la aplicación podremos comprobar que hemos conseguido nuestros objetivos:



Validaciones con mensajes personalizados




Publicado en: Variable not found

Hey, ¡estoy en Twitter!



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

Picando Código

La lucha de Sables Láser más grande del mundo

Febrero 22nd, 2010 - [Enlace local]

La lucha de sables láser más grande del mundo se realizó el pasado 13 de febrero en un centro comercial en Briston, Inglaterra. Cien guerreros, Jedi y Sith, se organizaron a través de la red social de Facebook para definir de una vez por todas quién tendría el poder absoluto sobre la galaxia. Una batalla épica sin precedentes:

Vía: Geekologie

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

Arragonán

Sobre el Spring2GX Day

Febrero 22nd, 2010 - [Enlace local]

El viernes tuvo lugar el Spring2GX Day en Madrid, evento organizado por Sergi Almar junto a javaHispano y SpringSource. La verdad es que me quedé muy sorprendido por el interés que generó el evento, con más de 400 inscritos, no sé cuál sería el número de asistentes finalmente, pero se vió bastante gente durante todo el día.

La sala de conferencias

Una de las cosas que más me gustan de estos eventos es tener la oportunidad de reencontrarte con viejos conocidos como Sergi, Nacho Brito, Álvaro Sánchez-Mariscal, Aitor Alzola, los paisanos de MasterD… además de con Martín y Jordi, por supuesto XD. Poner cara a gente con la que has mantenido algún contacto por internet como Tomás Lin, Raúl Expósito, Alberto Vilches o el mismo Graeme Rocher. Y por supuesto entablar conversaciones y conocer gente nueva durante el evento.

Eso sí, me quedé con mal sabor de boca por no haberme podido quedar hasta el final del evento, ya que hubo gente con la que no pude hablar o ni si quiera saludar, pero el tren de vuelta no esperaba :(

Algunos ponentes
Algunos de los ponentes, compartido por @sergialmar

Sobre las charlas no me voy a extender, Alberto Vilches y Tomás Lin han hecho unos resúmenes del evento estupendos, además, no creo que tarden mucho en publicarse los videos del evento :) .

Acerca de la presentación que hicimos nosotros sobre nuestra experiencia creando Jobsket con Grails y Java, Martín publicó ayer las transparencias que utilizamos. Parece que para bastante gente resultó interesante conocer de primera mano una experiencia concreta con estas tecnologías.


Martín hablando de nuestros números, foto de @jerolba

También me quedo con la sensación de que Groovy y Grails empiezan a calar en España. Tanto por interés a nivel particular de desarrolladores, como de algunas empresas y organizaciones que lo están empezando a adoptar o que están interesadas en conocer lo que les puede aportar.

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

Sergio Guerrero | Desarrollo web y Tiendas virtuales

Magento 1.4.0.1 – Cambios y Correcciones

Febrero 21st, 2010 - [Enlace local]

Magento 1.4.0.1Magento acaba de lanzar una nueva versión: Magento 1.4.0.1 con nuevos cambios y algunas correcciones interesantes. En esta nueva versión se corrige uno de los problemas que ya mencioné en la entrada sobre Magento 1.4.0 y que impedía actualizar desde Magento 1.3.x a Magento 1.4.x

Cambios:

Correcciones:

Notas de actualización:

Entradas relacionadas

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

avemundi, blog de un micro-isv » Desarrollo de software

próximas actualizaciones de programas en alanit

Febrero 20th, 2010 - [Enlace local]

En las próximas semanas voy a liberar nuevas versiones de mis programas Colossus y Findemes. Las nuevas versiones de estos programas están casi listas, aunque en el caso de Findemes tengo una duda respecto a una nueva funcionalidad que me lleva bastante mareado. La nueva versión de Colossus está terminada y la de Findemes está al 90%. Ahora sólo queda probar la comida para perros.

En la nueva versión de Colossus los cambios son principalmente internos, solucionando uno de los mayores problemas que tenían las versiones anteriores y que era el encriptado/desencriptado completo del fichero de claves. Hasta ahora, cuando se salía del programa la última operación era encriptar por completo los ficheros de datos para que la información no fuera accesible. Al arrancar el programa estos datos se desencriptaban y quedaban desencriptados mientras se ejecutaba el programa. Con la nueva versión los datos siempre permanecen encriptados y lo que hace el programa es aplicar el desencriptado para visualizar la información, pero sin llegar nunca a desencriptar por completo los datos. La verdad es que esta manera de mostrar las contraseñas es mucho más sencilla que lo que hacía hasta ahora, y mucho menos problemática. Hay algún cambio estético en el programa, como la rejilla de datos a la Windows 7 pero el aspecto del programa sigue siendo el mismo.

colossus450

Respecto a Findemes los cambios han sido mayores. En primer lugar he añadido gestión de cuentas corrientes al programa, que era una funcionalidad que la han pedido muchos usuarios. El tema es que a mi nunca me han gustado los programas de contabilidad personal que están basados en cuentas, pero al final he claudicado y he introducido esta funcionalidad en el programa. Sin embargo el uso de cuentas corrientes es opcional, se pueden seguir llevando el control de ingresos y gastos sin que obligatoriamente se tengan que reflejar en una cuenta corriente. La introducción de las cuentas corrientes ha afectado a los mantenimientos de apuntes y de apuntes periódicos, así que he tenido que retocarlos todos. También he hecho otros cambios menores, como un formulario que muestra un balance de ingresos y gastos por fechas sin tener que recurrir a un listado. Lo único que queda pendiente antes de liberar la nueva versión es el tema de traspaso entre cuentas corrientes. No se si añadir la opción de realizar traspasos entre cuentas corrientes en la gestión de apuntes o en un mantenimiento separado. Si hago lo primero tendré que añadir campos a la tabla de apuntes y a lo mejor enredo mucho la cosa. Pero hacer un mentenimiento separado no me convence, así que sigo dándole vueltas a la cabeza hasta que decida que hacer. Muchas veces los atascos en los programas consisten en no saber cómo implementar una determinada funcionalidad, no en no saber implementarla.

findemes2

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

carlosrovira.com

Hablemos un poco de Apple iPad, HTML 5 y Flash

Febrero 19th, 2010 - [Enlace local]

Con la salida de iPad y las declaraciones de Steve Jobs, estos días se está hablando mucho del futuro, de HTML 5 y de Flash. Por mi parte, me apetece dejar algunas reflexiones en este blog, pero antes de entrar en materia, he de decir que en los últimos años me he vuelto un consumidor de productos Apple. Tengo un MacBookPro, un iPhone, un Mac Mini y un Time Capsule entre otros. Por tanto se puede decir que sin llegar a ser un incondicional de Apple, en general me gustan sus productos. También soy defensor de la tecnología Flash, simplemente por que es la que hoy día me ofrece la mayor versatilidad, es la más avanzada y el 99% de los usuarios de la red pueden interaccionar con ella.

Steve Jobs viendo Fichas Azules de Lego en lugar del contenido Flash real

No obstante, y vistas las últimas declaraciones de Steve Jobs, creo que por mucho que me puedan gustar dispositivos como iPhone o el nuevo iPad, no seguiré apostando por ellos, por que estos dispositivos concretos está claro que van a limitar mi experiencia en internet como usuario.

Hasta hace poco la posibilidad de ver incorporados Flash u otros plugins a SafariMobile era todavía factible. Todos soñábamos con que tarde o temprano Apple permitiese la integración de Flash y nos dejase ver por fin determinados contenidos de la web que hoy día no son accesible desde iPhone o iPad. En estos momentos la posición radical de Steve Jobs ha cerrado todas las posibilidades y de su discurso se desprende que Apple quiere que sus dispositivos estén al 100% controlados por ellos.

El problema radica en que la experiencia de usuario en Internet, ahora y en el futuro, no será desarrollará solo por Apple, ni siquiera en un porcentaje elevado. Serán todos los avances de muchas empresas y particulares, los que irán conformando lo que será el futuro de la red. Con la estrategia actual de Apple, cualquier Plugin de SafariMobile (como es el caso de Flash) no será permitido, eliminando la capacidad de dichos dispositivos de ofrecer una experiencia de navegación total. Hoy en día el standard es Flash y el no soportarlo significa no poder navegar por la web sin ver montones de marcos rectangulares en blanco con una pieza de lego azul sustituyendo el contenido que se tendría que estar viendo (sea contenido Flash o cualquier otro).

Los motivos que Apple argumenta son absurdos. Culpar a Flash de colgar un Sistema Operativo no se sostiene, ya que es lo mismo que decir “mi SO se cuelga por culpa de un proceso”. En realidad todos los que trabajamos en esto sabemos que no es así, pero esta es solo una frase deliberadamente lanzada a los medios para que genere todo el ruido posible, ya que en general la gente se va a quedar con la idea en la cabeza de que Flash es capaz de colgar el Sistema Operativo. No sé vosotros, pero en mi caso Leopard nunca se ha colgado por culpa de Flash.

Con respecto a HTML5 pasa un poco lo mismo. Se trata de desacreditar Flash y hacer girar la mirada hacia otra tecnología abierta de la que Apple se pueda beneficiar como ya lo ha hecho antes con otras (como por ejemplo Linux).

En este caso y una vez analizado este tema con cierto detenimiento vemos que HTML5 es todavía un borrador de un standard que tiene todavía varios años (se habla de 6 o 7) por delante para evolucionar y llegar a ser realmente una especificación que podamos ver implementada en soluciones de dominio público. Teniendo en cuenta solo esto, creo que a muchos de nosotros ya no nos interesa mucho a día de hoy esta tecnología…quizá dentro de unos años cuando esté más madura habrá que tenerla en cuenta. Por otra parte, vemos también que lo que propone HTML5 esta a la altura de lo que ofrecía Flash en su versión 7 (hace 5 años). Por último, también se desprende, que lo que se intenta hacer con esta nueva especificación es justo lo que hemos conseguido evitar con Flash, la diversificación de implementaciones de un determinado standard. Es decir, dependiendo del navegador estamos viendo que el tag video se está implementando usando diferentes codecs. ¿Qué ocurre? ¿ya no recordamos la cantidad de dolores de cabeza que tuvimos en su época escribiendo diferentes versiones de un código para diferentes navegadores?.

Me podría extender mucho sobre este tema, pero creo que no merece la pena darle más importancia de la que tiene. Gracias a dios, Internet es muy grande y existen muchos fabricantes de tecnología, muchas empresas y muchos particulares. No tenemos que preocuparnos por lo que un Steve Jobs pueda decir en un momento dado. De hecho, sus palabras, una vez analizadas, parece que le desacreditan en cierta forma.

Lo importante es ver hacia donde se está dirigiendo la industria de forma global y, basándonos en esto, tomar los caminos que cada uno estime oportunos. Por mi parte, está claro que seguiré disfrutando con lo que la Plataforma Flash ya es capaz de ofrecerme hoy en día (y lo que estoy seguro que me ofrecerá en el futuro) y también disfrutaré de los productos de Apple que no intenten manipular mi forma de usar Internet y la tecnología.

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

Ingenieria de Software / Software Engineering

Mantener motivado al equipo de trabajo

Febrero 18th, 2010 - [Enlace local]

En mi experiencia una de los factores fundamentales para el éxito en los proyectos es la motivación del equipo de trabajo, la cual puede ser muchas maneras aquí Lider de Proyecto menciona 25 yo señalo 3 que para mí son las mas importantes:

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

Variable not found

TempData en ASP.NET MVC 2

Febrero 17th, 2010 - [Enlace local]

ASP.NET MVC 2TempData es un diccionario disponible a nivel de controladores y vistas del framework ASP.NET MVC que nos permite almacenar objetos de forma similar a la colección ViewData, pero, a diferencia de ésta, es capaz de mantener su contenido entre peticiones.



De hecho, es un recurso habitualmente utilizado cuando necesitamos enviar información desde una acción a otra tras realizar una redirección. Por ejemplo, ante una petición dirigida hacia la acción “Milestone” en un controlador como el siguiente:



public ActionResult Milestone() 
{
  TempData["Message"] = "He pasado por aquí";
  RedirectToAction("ShowMessage");
}
 
public ActionResult ShowMessage()
{
  return View();
} 


… podríamos tener en la plantilla de vista ShowMessage.aspx acceso directo a la entrada del TempData almacenada en la petición que inició la secuencia:



<p class="msg"><strong><%= TempData["Message"] %></strong></p>


Pues bien, la beta de ASP.NET MVC 2 introdujo en el comportamiento de este diccionario una serie de cambios que merecen ser comentados.



En primer lugar, ha sido modificado el ciclo de vida de las entradas existentes en el TempData. Ahora cada elemento del diccionario es analizado al finalizar la ejecución del controlador (concretamente su método ExecuteCore()); aquellos que estén “marcados” continuarán viviendo en el mecanismo de persistencia elegido (por defecto, en una variable de sesión del usuario) y el resto serán eliminados sin piedad.



Internamente se procede de la siguiente manera: al comenzar el proceso de la petición, se cargan en la propiedad TempData del controlador los valores almacenados en el proveedor de datos temporales,  un objeto que implementa el interfaz ITempDataProvider. La implementación por defecto utiliza la clase SessionStateTempDataProvider para almacenar la información en  la variable de sesión “__ControllerTempData”.



En este momento, todas las entradas presentes en el diccionario son marcadas como candidatas a ser conservadas.To be or not to be...



Si desde cualquier punto del código del controlador o la vista se obtiene el valor de una entrada del diccionario, como en el ejemplo de vista ShowMessage anteriormente mostrado, se eliminará la marca de supervivencia y pasarán a estar en la cuerda floja.



Al finalizar la ejecución del controlador, se recorren aquellas entradas del diccionario que no estén marcadas y se eliminan del diccionario. Finalmente, éste es salvado a través del proveedor de datos temporales actual.



Sólo hay una excepción para el caso anterior: las redirecciones. Éstas, en su método ExecuteResult(), incluyen una llamada al método Keep() del diccionario TempData actual, lo que provoca que todas las entradas del mismo sean marcadas para su conservación. Por tanto, una acción que retorne un tipo RedirectToRouteResult, siempre conservará el TempData intacto.



Como consecuencia, una forma de evitar la eliminación de una entrada y forzar su conservación al finalizar la petición actual es utilizando TempData.Keep(key), siendo key la clave de la misma,  o generalizando como en el caso anterior, TempData.Keep(), que salvará todas las entradas almacenadas.



Pero ojo, que esto puede provocar un efecto no deseado. Dado que por defecto las entradas al diccionario no van a eliminarse salvo que sean leídas, puede dar lugar a contenidos perennes en el estado de sesión del usuario. O en otras palabras, si introducimos en TempData una entrada con un objeto pesado y éste nunca es obtenido, permanecerá en la sesión del usuario hasta que ésta desaparezca... supongo que no es necesario comentar lo desastroso que puede ser esto, no? ;-D



Otro aspecto curioso es que cualquier consulta al TempData hará que la entrada sea marcada para su eliminación… incluso si estamos consultándola desde el depurador de Visual Studio. Por tanto, cuidado con esto, que puede provocar algún dolor de cabeza.



Aunque algo denostado, TempData sigue siendo una opción válida para el traspaso de información entre distintas peticiones, aunque siempre usado con moderación y sentido común. 



Publicado en: Variable not found.

Hey, ¡estoy en twitter!



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

4 bits blog

Jornadas técnicas del GUL-UC3M

Febrero 16th, 2010 - [Enlace local]

Como viene siendo habitual ya están listas las jornadas técnicas del GUL de mi antigua universidad (la Carlos III de Madrid), estas jornadas se realizarán en las dos primeras semanas de Marzo.

En mi opinión hay bastantes charlas con temas muy interesantes, por ejemplo: seguridad en servidores, BOINC, OpenGL, Python, Ruby, … Así que si os interesa algún tema de estos, pasaos por allí, la entrada es gratuita y no hace falta ningún tipo de registro.

Enlace original: Jornadas técnicas (Marzo 2010) del GUL-UC3M

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

4 bits blog

Android Developer Lab 2010 (Madrid)

Febrero 15th, 2010 - [Enlace local]

El sábado estuve en el Android Developer Lab 2010 de Madrid, y sí fui uno de los afortunados en conseguir un Nexus One gratis (se lo dieron a todos los asistentes).

En principio pensaba que el evento sería una especie de curso sobre cómo desarrollar una aplicación de Android, pero estaba equivocado, todo consistió en un poco de marketing de Android y luego las novedades de la nueva versión (la 2.1) de Android, para acabar con una ronda de preguntas de la gente.

En general, el evento no me gustó demasiado por no ser realmente técnico, pero que regalasen Nexus One hizo que valiese la pena. Y sí, en poco tiempo espero hablar por aquí de programación en Android.

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

Ingenieria de Software / Software Engineering

SCRUM en toda la empresa

Febrero 15th, 2010 - [Enlace local]

Hace mucho que no hacía referencia a Navegapolis, pero ahorita me doy el tiempo para hacerlo y para resaltar el post de Scrum Manager: Campo de Scrum en toda la empresa, Como siempre que buen post Juan!!!

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

Sergio Guerrero | Desarrollo web y Tiendas virtuales

Cómo actualizar Magento

Febrero 14th, 2010 - [Enlace local]

Actualizar Magento

Actualizando Magento con un paquete completo o mediante SVN

A continuación presentaremos los pasos a seguir para actualizar Magento utilizando un paquete completo o mediante SVN (repositorio Subversion). Los pasos para actualizar mediante el Gestor MagentoConnect los veremos más adelante.

 

  1. Realizaremos una copia de seguridad de la base de datos
    1. Desde Magento: Admin, → Sistema → Herramientas → Copias de Seguridad
    2. También podemos realizar la copia de seguridad mediante PHPMyAdmin (esta opción puede fallar debido a los límites de ejecución en los scripts PHP)
    3. Podemos realizar una exportación vía Shell (SSH): mysqldump -u USER -p DBNAME > dump.sql
    4. Para volver a importar vía Shell, utilizaremos: mysql -u USER -p DBNAME < dump.sql
  2. Realizaremos una copia de seguridad de todos los archivos de código modificados y deberemos no olvidarnos de mantener el archivo original de instalación
  3. No olvidemos guardar una copia del directorio media, donde se guardan todas las imágenes de los productos y de las categorías
  4. Realizaremos una copia de seguridad del archivo app/etc/local.xml
  5. Descargaremos un nuevo archivo de instalación o realizaremos una actualización mediante SVN siempre y cuando hayamos verificado antes el repositorio de Magento
  6. Extraeremos todos los archivos del paquete y los subiremos a nuestro servidor
  7. Borraremos los directorios var/cache y var/sessions
  8. Accederemos a alguna de las páginas de la tienda mediante nuestro navegador
  9. La actualización de la base de datos se realizará automáticamente
  10. Ya hemos terminado!

Actualizando Magento mediante MagentoConnect

  1. Nos dirigiremos  a: http:///downloader
  2. Accederemos al Gestor MagentoConnect utilizando un usuario que tenga todos los permisos
  3. Debemos asegurarnos de marcar la opción "Limpiar todas las sesiones después de instalar o actualizar"

Cómo actualizar desde los paquetes fuente de instalación

Es posible que al acceder al Gestor MagentoConnect veamos que no existe ninguna extensión. Esto significa que acabamos de subir los archivos sin utilizar el sistema PEAR. En ese caso, introduciremos: magento-core/Mage_All_Latest dentro del campo Clave de la extensión y presionaremos el botón de instalar. Esto instalará las últimas versiones de los principales paquetes de MagentoConnect y permitirá realizar futuras actualizaciones mediante MagentoConnect.

Si justo después de completar la instalación y refrescar la página, obtenemos un error 500, y nos sucede lo mismo tanto al acceder a la página principal del admin, como a la parte frontal de la tienda, esto significa que debemos cambiar los permisos de algunos archivos PHP. Para cambiar los permisos de estos archivo, accederemos vía Shell (SSH) o vía FTP, navegaremos por los directorios de Magento y revisaremos los permisos de archivo index.php. Si durante la instalación se cambiaron los permisos de 644 (rw-rr) a 666 (rw-rw-rw), podemos utilizar el siguiente comando para cambiarlos los permisos de todos nuestros archivos .php a 644 (el parámetro -v hará que se muestren los detalles de los cambios que se realicen):

find -type f -name '*.php' -exec chmod -v 644 {} \;

Ahora, volveremos a abrir la página: downloader/index.php en nuestro navegador.

Cómo actualizar una extensión concreta

Por lo menos, deberemos tener una extensión marcada en amarillo, lo que significará que en el servidor MagentoConnect existe una versión superior. 

  1. Para cada una de las extensiones que queramos actualizar, deberemos seleccionar la opción "Update to X.X.X.X" en su correspondiente desplegable.
  2. Para actualizar la módulos del núcleo de Magento deberemos escoger los siguientes paquetes, y todas las dependencias requeridas serán actualizadas de forma automática:
    • magento-core/Interface_Adminhtml_Default
    • magento-core/Interface_Frontend_Default
    • magento-core/Interface_Install_Default
    • magento-core/Mage_Core_Adminhtml
    • magento-core/Mage_Core_Modules

Cómo actualizar el Gestor MagentoConnect

  1. El Gestor MagentoConnect no se instala, por defecto, como un paquete de PEAR . Si queremos actualizarlo, deberemos instalarlo como un paquete de PEAR.
  2. Introduciremos magento-core/Mage_Downloader en el campo para la Clave de la extensión y presionaremos sobre Instalar.
  3. Después de esta primera instalación, MagentoConnect podrá ser actualizado de la misma forma que lo hacemos para el resto de extensiones.

El Gestor MagentoConnect no puede ser desinstalado

Utilizando acceso Shell (SSH)

  1. Para inicializar el registro de comandos PEAR de Magento, deberemos ejecutar el siguiente comando en la consola. Antes de ejecutarlo, deberemos asegurarnos de estar situados sobre directorio raíz de Magento:
  2. ./pear mage-setup .
  3. No olvidemos incluir el punto final en el comando anterior
  4. Seleccionaremos la versión de PHP (unix): MAGE_PEAR_PHP_BIN=/usr/local/bin/php; export MAGE_PEAR_PHP_BIN
    • Si nuestro hosting es 1and1.com, debemos utilizar el siguiente comando  PHP5: MAGE_PEAR_PHP_BIN=/usr/local/bin/php5; export MAGE_PEAR_PHP_BIN

Cómo actualizar desde los paquetes fuente de instalación

Si no hemos utilizado MagentoConnect o el sistema de comandos PEAR para instalar Magento, necesitaremos utilizar el siguiente comando para realizar la instalación inicial de los módulos del núcleo de Magento:

  1. ./pear install magento-core/Mage_All_Latest

Puede que antes de ejecutar este comando necesitemos actualizar las extensiones de PEAR mediante el comando que se expone en el siguiente punto.

Cómo actualizar todas las extensiones disponibles

  1. ./pear upgrade-all

Cómo actualizar una extensión concreta

  1. ./pear upgrade magento-core/Mage_Core_Modules magento-core/Mage_Core_Adminhtml
  2. ./pear upgrade magento-core/Interface_Adminhtml_Default magento-core/Interface_Frontend_Default magento-core/Interface_Install_Default

Cómo actualizar el Gestor MagentoConnect

  1. Si todavía no tenemos instalado el Gestor MagentoConnect como un paquete de PEAR:
  2. ./pear install magento-core/Mage_Downloader
  3. Una vez instalado, se actualizará como el resto de extensiones de Magento.

Entradas relacionadas

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

Sergio Guerrero | Desarrollo web y Tiendas virtuales

Magento 1.4 CE Estable

Febrero 13th, 2010 - [Enlace local]

Magento 1.4 CE Estable

Magento Communty Edition se actualiza a su versión 1.4.0.0 Estable con interesantes novedades desde su versión 1.3.

Entre las novedades incorporadas en Magento 1.4, cabe destacar las mejoras en SEO y con los módulos de PayPal que tantos problemas vienen produciendo. Interesante también la incorporación del sistema 3D Secure que permite verificar la identidad del comprador durante las operaciones on-line, consiguiendo de esta forma reducir el número de operaciones fraudulenta y por tanto, los costes financieros.

Novedades Magento 1.4.0:

Más información en el blog de Magento

Actualización – 13-02-2010

Parece que existe algún problema en la actualización a la versión 1.4.0.0 de Magento. El sistema indica que existe problemas con otros paquetes.

Entradas relacionadas

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

Picando Código

Frameworks = magia

Febrero 10th, 2010 - [Enlace local]

Magia

Magia

Pasan muchas cosas que no te enterás cómo pasan, simplemente pasan entonces hay mucha magia que no sabés de dónde viene

- Fernando Briano

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

carlosrovira.com

Formación Flex en el CEV

Febrero 9th, 2010 - [Enlace local]

Hace unos días el CEV, Escuela Superior de Comunicación, Imagen y Sonido, ha anunciado su acuerdo con Codeoscopic para la ofrecer formación especializada en Adobe Flex. Os dejo el comunicado oficial.

A su vez es de esperar que Made In Flex y CEV aprovechen los conocimientos del equipo de MIF en estas tecnologías y las estupendas instalaciones del CEV para ofrecer nuevos eventos para beneficio de toda la comunidad.

Os dejo la nota de prensa:

CEV Y CODEOSCOPIC: ACUERDO DE COLABORACIÓN

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

MadeInFlex

Formación Flex en el CEV

Febrero 8th, 2010 - [Enlace local]

Hace unos días el CEV, Escuela Superior de Comunicación, Imagen y Sonido, ha anunciado su acuerdo con Codeoscopic para la ofrecer formación especializada en Adobe Flex. Os dejo el comunicado oficial.

A su vez es de esperar que Made In Flex y CEV aprovechen los conocimientos del equipo de MIF en estas tecnologías y las estupendas instalaciones del CEV para ofrecer nuevos eventos para beneficio de toda la comunidad.

Os dejo la nota de prensa:

CEV Y CODEOSCOPIC: ACUERDO DE COLABORACIÓN

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

Picando Código

Afiches minimalistas de la galaxia de Star Wars

Febrero 8th, 2010 - [Enlace local]

Dagobah

Dagobah

Justin Van Genderen creó una serie de afiches de distintos sistemas en la galaxia de Star Wars. Hay afiches de: Dagobah, Endor, Tatooine, Hoth y Bespine. Están muy buenos, particularmente en mi caso uso el nombre de alguno de estos sistemas para cada una de mis computadoras, para algo los usaré:

fernando@dagobah
fernando@hoth
fernando@tatooine

Pueden ver el resto de la galería en Flickr. Visiten el sitio del autor para ver más diseños de su creación.

Hoth

Hoth

Vía: Laughing Squid

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

Información legal y técnica