carlosrovira.com
eFirmatic – Nuevo Producto AIR 2.0
Junio 30th, 2010 - [Enlace local]
Por fin el producto que terminamos poco antes del lanzamiento de Adobe AIR 2.0 está ya disponible para todo el público. Se trata de eFirmatic-Desktop, un producto de escritorio pensado para firmar documentos PDF y Facturae. Esta aplicación ha sido creada para la marca eFirmatic y Motor de Firma, partners de Codeoscopic.
La aplicación hace uso intensivo de las nuevas capacidades de AIR 2.0 para comunicarse de forma nativa con procesos del sistema operativo (NativeProcess API). Además ha sido diseñada pensando en la sencillez máxima: Simplemente basta con arrastrar los documentos que queremos firmar a la aplicación y hacer “click” en el botón firmar para tener todos los documentos firmados en pocos segundos.
Puedes descargar una versión de evaluación de 30 días del producto para Windows o Mac desde aquí.
» Leer más, comentarios, etc...
Blog del grupo SQUaC
“Haz fácil lo imposible”, de Steve Krug
Junio 30th, 2010 - [Enlace local]
"Haz fácil lo imposible" es la discutible traducción (casi de manual de autoayuda) del título del libro "Rocket Surgery Made Easy", la última obra de Steve Krug, anteriormente autor del popular libro de introducción a la usabilidad "No me hagas pensar" ("Don't Make Me Think ").

A diferencia del primer libro, que trataba sobre cómo pensar sobre usabilidad, en este Krug se ha centrado en cómo hacerla, poniéndose como objetivo conseguir que personas no expertas en usabilidad pueda hacer sus propias pruebas... [sigue ...]
» Leer más, comentarios, etc...
Variable not found
Saltarse las validaciones del lado cliente en ASP.NET MVC
Junio 29th, 2010 - [Enlace local]
Las validaciones automáticas de ASP.NET MVC son una fórmula muy útil y productiva de comprobar los datos introducidos por nuestros usuarios. Como sabemos, basta decorar las propiedades de las entidades del Modelo con atributos que indiquen las restricciones a aplicar en cada caso, y el framework MVC se encargará del resto, incluso en la capa cliente.
Como sabemos, el sistema de validación es capaz de generar scripts capaces de comprobar en cliente que los datos introducidos encajan con las restricciones introducidas en el modelo mediante anotaciones de datos.
Básicamente, el script comprueba los datos durante la pérdida de foco de los controles, y justo antes de realizar el submit de datos al servidor, no permitiendo el envío hasta que los campos contengan información correcta. Este automatismo, válido y conveniente la mayor parte de las veces, complica algunos escenarios.
Mirando el código del script MicrosoftMvcValidation.js he descubierto un pequeño truco para poder enviar los datos de un formulario omitiendo las validaciones en cliente, es decir, forzar el submit sean cuales sean los datos introducidos en los controles.
La cuestión está en indicar en el botón de envío que no debe realizar las validaciones, estableciéndole una propiedad llamada disableValidation. A lo bestia, bastaría con añadirle el atributo al botón como se muestra en el siguiente código:
Obviamente con el método anterior estaríamos introduciendo marcado incorrecto en la página. Si queremos pasar las validaciones W3C podemos conseguir lo mismo desde script, lo que haría innecesaria la aparición del atributo
disableValidation en el tag <button>:<script type="text/javascript">
document.getElementById("atras").disableValidation = true;
</script>
Publicado en: Variable not found
» Leer más, comentarios, etc...
Picando Código
Picando Código cumplió 3 años
Junio 29th, 2010 - [Enlace local]
El pasado 21 de junio (¡¡se me pasó!!) hicieron 3 años del “Hola mundo” de Picando Código que tanto ha evolucionado en el tiempo. El primer aniversario lo festejé, me saltié el segundo, y acá vamos por el tercero.
Hay gente que desde ese momento todavía sigue el blog y comenta cada tanto. Y a veces aparecen comentarios de usuarios que no veía en años. Creo que eso es lo más interesante de tener el blog, el intercambio. También a través de Twitter o Identi.ca, la conversación sigue por ahí y como que todo se hace parte de una sub red de contactos y conocimiento esparcido.
El panorama es bastante distinto en relación a hace 3 años… En primer lugar el uso y abuso de servicios de redes sociales como Facebook o Twitter, hacen que la conversación se haga cada vez más centralizada (en dichos servicios), y alejada de los nichos que solían formarse. Eso me da la impresión al menos.
Cambio de imagen
Después de 2 años con el primer tema hecho por mí, cambiamos la imagen totalmente, esta vez con ayuda profesional en la parte gráfica:
Por fin puedo decir que estoy orgulloso del diseño ![]()
Digamos que el blog ahora sí tiene una imagen definida, con logo y mascota.
Por otro lado en lo personal quiero comprarme esta remera:
Desde el año pasado estoy emancipado, lo que implica más responsabilidad y todo lo que implica vivir solo. Siguen habiendo muchas ideas de proyectos, trabajos, estudios, pero siempre con poco tiempo o poca organización.
En fin, el blog ha pasado por meses de práctico abandono, pero nunca dejo de escribir aunque sea algo para que vean que sigue acá.
Foro de Picando Código
El foro fue una idea bastante interesante en un principio, lleva más de dos años en línea. En un comienzo, tuvo bastante popularidad, muchos usuarios y muchos temas en poco tiempo, pero fue decayendo de a poco. Actualmente recibe algún tema cada tanto, pero su uso principal es como soporte para los usuarios de los plugins que he programado para WordPress. Si se les ocurre una idea para reflotarlo, o una utilidad más para darle, bienvenida sea. Los usuarios pueden darse una vuelta a mencionar que leyeron este post
Esto último puede haber sido influenciado también por la centralización de la que les comentaba antes, pero esto no son más que apreciaciones.
Otros blogs
Tengo otros dos blogs donde trato temas relacionados a los que se hablan en Picando Código, pero más específicos:
Conclusión
Ninguna, seguiré escribiendo por acá como referencia para mi mismo, compartiendo lo que aprendo, comentando lo que leo, etc. Espero ver algún olvidado del blog en los comentarios.
¡Saludos a todos y gracias por ayudarme con este proyecto!
Comparte:
» Leer más, comentarios, etc...
Arragonán
Collejeros viajeros
Junio 28th, 2010 - [Enlace local]
Porque alguien tiene que poner en su sitio a tanto gurú 2.0…

Tira cómica de Sinergia sin control, por supuesto.
» Leer más, comentarios, etc...
programania
¿PHP 5.4?
Junio 28th, 2010 - [Enlace local]
Tanto hablar de PHP 6… y puede que al final tengamos antes PHP 5.4. Y es que los problemas para hacer PHP 6 totalmente unicode han debido de ser demasiado grandes, y ahora se plantean separar la implementación de nuevas funcionalidades de la conversión a unicode. El reseteo también lo explican por aquí y por allá, los propios perpetradores.
Creo que, de la misma manera que PHP ha triunfado e irrumpido en la empresa porque ha conseguido copiar correctamente muchas de las ventajas de otros lenguajes sin perder las suyas propias, ha fracasado en dos aspectos:
- implementación de closures: nadie las está usando en PHP apenas porque no tienen las ventajas que tiene, por ejemplo, en Ruby.
- Avance iterativo e incremental de su propio producto, esto es: el propio PHP. Parece que se han marcado un escalón demasiado alto, y no han sido capaces de subirse a él…
Espero que se pongan las pilas pronto.
» Leer más, comentarios, etc...
programania
Algunos apuntes sobre NoSql
Junio 28th, 2010 - [Enlace local]
Puede que no-sql sólo sea una moda. Quizá no-sql, para los que no tenemos un problema de rendimiento extremo, suponga el avance que esperábamos de las bases de datos orientadas a objetos. Es lo que opina más de uno. No-Sql es una buena solución a alguno de los retos del almacenamiento de datos en la empresa. Quizá haya que combinar soluciones tradicionales de sql con otras no-sql. Para The Guardian es Not Only Sql. No-SQL no sería un sustituto, sino un complemento.
Enlaces generales:
- Análisis de las diferentes opciones de no-sql y sus características frente al sql.
- Presentación sobre no-sql
- Listado de enlaces rápidos sobre no-sql
- El fin del uso de mysql + memcached para sitios enormes.
- El no-sql es software libre y cloud.
- Comparativa de todas las posibilidades de almacenar datos.
- Dónde falla SQL y cómo lo soluciona No-SQL.
- Más de lo mismo: ventajas de no-sql.
- Otra opción: Volt DB.
- Modelado de dominio con No-Sql.
Opciones más populares:
CouchDB
Cassandra
MongoDB
- MongoDB para PHP
- Largo tutorial de MongoDB, incluye la forma de buscar y cómo hacer un no-join.
- MongoDB para .NET.
- Empezando con MongoDB y PHP
Guardar clave-valor
- Lawnchair, base de datos clave-valor en Javascript (con JSON).
- Utilizar Erlang para almacenar clave-valor en PHP.
- Clave-valor para PHP con Redis.
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
JS Noise
Junio 26th, 2010 - [Enlace local]
Como hice en 2007 con AS3 Fire, he reimplementando un algoritmo de los usados en las clásicas demos. El caso escogido esta vez es el efecto de ruido blanco, típico de las televisiones analógicas desintonizadas. El lenguaje, Javascript, haciendo uso del objeto canvas de HTML 5.
Para ser sinceros, la implementación es realmente más sencilla que el del fuego, lo cual he hecho a propósito por problemas de tiempo.
El código en cuestión, es especialmente cuidadoso a la hora de acceder a canvas, para ser compatible con las diferentes implementaciones, y tiene ciertas optimizaciones en cuanto a velocidad como es el uso de FastRandom. Por lo demás, no es un buen ejemplo en cuanto a optimización del código, ya que podría hacerse mucho más, y sobretodo, lo es menos en cuanto a elegancia.
Para verlo en acción, vas a necesitar un navegador que soporte canvas, entre otros, se ha probado con funcionará con al menos Opera 9, Safari 4, Firefox 3, Chrome 4, y supuestamente también con el futuro Internet Explorer 9.
Lo más sorprendente es que el desempeño que consigue es más que aceptable, sobretodo si hablamos de las versiones en desarrollo de Opera 10.60 y Chromium 6.
Lo puedes ver y descargar aquí (2 Kb. en formato HTML).
» Leer más, comentarios, etc...
Fetishcode
Groovy en ADF
Junio 25th, 2010 - [Enlace local]
A
» Leer más, comentarios, etc...
Arragonán
Conocer el próximo valor de un id AUTO_INCREMENT
Junio 24th, 2010 - [Enlace local]
Estoy con un pequeño trabajillo entre manos, una migración de una base de datos, y necesitaba conocer el próximo valor de un identificador AUTO_INCREMENT de MySQL. Por si a alguien le sirve(o tengo que echar mano en el futuro
), es tan sencillo como hacer una consulta a la tabla tables de information_schema.
select AUTO_INCREMENT from information_schema.TABLES where TABLE_SCHEMA='soy_la_db' and TABLE_NAME='y_yo_la_tabla';
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
GIMP
Junio 23rd, 2010 - [Enlace local]
GIMP (GNU Image Manipulation Program), es un programa de retoque fotográfico y de imágenes gratuito y de código abierto, disponible para la mayoría de plataformas *NIX, MacOS así como Windows, tanto en 32 como en 64 bits.
La cantidad de características que dispone es grandísima, aunque tampoco penséis en un Photoshop, y si más bien en un Fireworks o Paintshop Pro. Su apariencia es bastante cuidada, sobretodo en plataformas Linux GNOME.
Personalmente, lo encuentro muy sencillo de utilizar, y más rápido de cargar que otros productos, superando a alternativas más limitadas como Paint.NET. La interfaz SDI es más extraña al verla de lo que luego notaremos al trabajar con ella.
Está disponible en castellano de manera completa, y con buena calidad. La cantidad de formatos de imágen que soporta es aceptable, aunque podría ser mejor. El algoritmo de compresión PNG, no es tan bueno como el de Irfanview, XnView o Fireworks, pero es aceptable.
El consumo de recursos es contenido para lo que nos tiene acostumbrados este tipo de software. GIMP 2.6.8 x64 consume vacío 31 Mb. de memoria y 114 Mb. en disco, tardando en ejecutarse 3 segundos. Como comparación, Photoshop 12/CS5 x64 consume vacío 84 Mb. de memoria y 417 mb. en disco, necesitando para ejecutarse 7 segundos.
Si queremos todavía mayor rendimiento, todavía podemos mejorarlo eliminando pinceles, paletas, módulos, intérpretes y sobretodo plugins que vienen de serie y no necesitemos; no obstante esto no sería jugar limpio a la hora de compararlo, ya que de igual modo podríamos hacerlo con los otros.
Dispone de bastantes plugins, que aunque la mayoría de usuarios no necesitemos, expanden sus posibilidades.
En resumen, creo que GIMP es un producto que servirá para cubrir las necesidades en cuanto a edición de imágenes del 90% de los usuarios, sin importar su plataforma o el idioma que hablen, de forma totalmente gratuita. Vendría a ser como OpenOffice en el terreno ofimático, aunque en el caso de GIMP, menos posibilidades, no signifiquen menos rendimiento.

» Leer más, comentarios, etc...
Picando Código
A descargar Eclipse Helios
Junio 23rd, 2010 - [Enlace local]
Como les comentaba en el post anterior sobre Eclipse Helios, hoy 23 de junio ya podemos descargar Eclipse Helios. La versión estable de Eclipse 3.6 está disponible en un lanzamiento que incluye 39 proyectos diferentes. Entre ellos se encuentran 12 paquetes de Eclipse orientados a distintos perfiles de desarrollo como Java EE, PHP, C/C++ y otros.
Algunas de las nuevas características destacadas son soporte para Git, desarrollo en GNU/Linux y JavaScript:
- Un nuevo paquete del IDE para la plataforma GNU/Linux. Con él los desarrolladores tienen a la mano un tool chain integrado para compilar aplicaciones C/C++ en el sistema operativo GNU/Linux. Incluye el nuevo proyecto Linux Tools el cual integra utilidades comunes de GNU y Linux como GNU Autotools, Valgrind, OProfile, RPM, SystemTap, GCov, GProf y LTTng. Un estudio reciente de Eclipse muestra que ha crecido el uso de GNU/Linux en los usuarios, y se espera ue este paquete ayude a acelerar la adopción de Eclipse en la comunidad GNU/Linux.
- El cliente para el Eclipse Marketplace provee una experiencia del estilo “app-store” donde encontrar e instalar plugins de Eclipse. El Marketplace es un catálogo de soluciones basadas en Eclipse, y habrán más de 100 disponibles desde este cliente para facilitar la búsqueda e instalación de soluciones para Eclipse.
- Soporte para Git, el popular sistema de control de versiones distribuido, por medio de los nuevos proyectos Eclipse EGit y JGit. La versión 0.8 de EGit incluye una nueva vista de repositorios Git y soporte para merging y tagging rápido. JGit 0.8 – el “motor” de EGit – ha mejorado su rendimiento hasta un 50% en repositorios grandes.
- El proyecto Web Tools Platform ha introducido soporte para crear, ejecutar y debuggear aplicaciones para las últimas especificaciones de Java EE (Java EE 6) incluyendo Servlet 3.0, JPA 2.0, JSF 2.0 y EJB 3.1.
- El proyecto JavaScript Development Tools para desarrolladores JavaScript ha mejorado el soporte, incluyendo un framework de debug de JavaScript que permite la integración con debuggers como Rhino y Firebug. Un nuevo paquete de IDE JavaScript ha sido creado para facilitar la instalación de un IDE basado en Eclipse a los desarrolladores JavaScript.
- Eclipse Xtext 1.0 es un framework para crear domain specific languages (DSL) con 80 nuevas características, incluyendo rendimiento y escalabilidad mejoradas hasta 30 veces respecto a versiones anteriores. Una nueva característica de indexación en memoria permite desarrollar DSL’s más sofisticados en Xtext.
- Un nuevo lanzamiento de Acceleo 3.0 implementa la especificación MLT Model-to-text OMG y provee características requeridas para un IDE generador de código. Este lanzamiento también provee herramientas entorno al diseño basado en base de ejemplos de generadores de código.
Pueden encontrar más información en Eclipse Helios, o dirigirse a los links de descarga.
Ya estoy descargando por Torrent la versión para Java EE, para probarla en el desarrollo diario. Desde ahí estrenaré la característica del Eclipse Marketplace a ver si logo instalar Subclipse y JBoss Tools. Después probaré el Eclipse clásico con Aptana Studio y PDT para desarrollos web con PHP, XHTML y CSS, o a lo mejor le instalo esos mismos plugins a la nueva versión para desarrolladores JavaScript.
Ya comentaré sobre las nuevas características que vaya descubriendo.
Comparte:
» Leer más, comentarios, etc...
Picando Código
Lanzamiento del 5to Concurso Nacional de Videojuegos – Uruguay
Junio 23rd, 2010 - [Enlace local]
Uruguay Gamer anunció el lanzamiento del 5to Concurso Nacional de Videojuegos. A ver si este año nos presentamos con nuestra producción y el mundo conoce al Carpincho Mutante. Les dejo la noticia:
Comparte:La espera fue corta y oficialmente fue lanzado el 5to Concurso Nacional de Videojuegos .
Ingenio y Proanima nuevamente auspician el concurso y Uruguay Gamer será el foro para responder consultas y mantener a los participantes informados de todos los eventos.
Como todos los años habrá una charla para presentar el concurso. Será el 14 de Julio a las 18:30 en las oficinas de Ingenio, dentro del LATU, de la mano de Gonzalo Frasca, co-fundador de Powerful Robot Games.
Para más información pueden visitar el sitio oficial y seguirnos a nosotros y al concurso en facebook para enterarse de todo.
» Leer más, comentarios, etc...
programania
sfGuard – Filtrar con campos del perfil de usuario
Junio 23rd, 2010 - [Enlace local]
Advertencia: Lo que cuento en este post sirve solo para la versión de sfGuard para Propel y usando su versión 1.5 que incluye clases Query.
Debo confesar que aun soy novatillo con el plugin sfGuard de Symfony. Este plugin aporta el modelo de datos y las herramientas necesarias para implementar y gestionar en cualquier proyecto Symfony una capa de usuarios bastante maja.
El plugin no se preocupa de los perfiles de usuario y si queremos manejar datos como nombre, emails, fechas de nacimiento, etc. tendremos que crear una estructura de datos para alojarlos y relacionarlos con nuestros usuarios. Con un poco de integridad referencial y un pequeño cambio de configuración en el archivo app.yml de vuestra aplicación sfGuard será capaz de vincular un perfil con un usuario del sistema (más info).
Además, tendremos a nuestra disposición una serie de CRUDs automágicos para realizar operaciones de alta, baja, modificación y gestión de privilegios y grupos. Sin embargo, las capacidades de filtrado de resultados del listado de usuario se limitan a los campos de la tabla de usuarios, excluyendo los del perfil que hayamos construido encima de ella.
Es una pena, porque al final siempre querremos poder buscar filtrar por campos como el nombre, email, etc. Vamos, igual que cuando se edita un usuario se pueden modificar estos datos del perfil, es de esperar que también se pueda filtrar el listado por ellos, pero no.
Después de buscar por ahí, no he visto a nadie quejándose de esto en particular (¿tan raro es?) y he deducido que podría ser por:
- Se trata de un comportamiento por defecto que, debido a alguna metedura de pata por mi parte, no me funciona (muy probable)
- sfGuard no soporta esta funcionalidad en el filtrado
Tras buscar un poquito más en el código del plugin he descartado la primera opción aunque, hey, no sería la primera vez que uno mete la pata, así que si alguien me corrige, yo agradecido.
De todos modos no me ha gustado la solución a la que he llegado que es correcta pero no del todo elegante, porque he tenido que tocar las clases del plugin. Aunque he tocado las clases “tocables” (las que extienden de las clases base) el hecho de que éstas estén en la estructura de ficheros del plugin, denota que algo falla en el modelo de plugins de Symfony (al menos con este).
Es decir, bajo mi punto de vista no se debería tocar el plugin sino extenderlo fuera de él. Sin embargo, me cuesta pensar la manera de hacer esto en el contexto y la arquitectura actual de plugins (por lo menos con sfGuard). Espero que con los bundles de Symfony 2 la cosa cambie a mejor.
Para conseguir filtar por los campos del perfil de usuario, primero me he fijado cómo lo hace Propel en el formulario de edición que, al fin y al cabo, hace precisamente esto:
plugins/sfGuardPlugin/lib/form/sfGuardUserAdminForm.class.php
class sfGuardUserAdminForm extends BasesfGuardUserForm { protected $pkName = null; public function configure() { [...] // profile form? $profileFormClass = sfConfig::get('app_sf_guard_plugin_profile_class', 'sfGuardUserProfile').'Form'; if (class_exists($profileFormClass)) { $profileForm = new $profileFormClass(); unset($profileForm[$this->getPrimaryKey()]); unset($profileForm[sfConfig::get('app_sf_guard_plugin_profile_field_name', 'user_id')]); $this->mergeForm($profileForm); } } [...] protected function getPrimaryKey() { if (!is_null($this->pkName)) { return $this->pkName; } $profileClass = sfConfig::get('app_sf_guard_plugin_profile_class', 'sfGuardUserProfile'); if (class_exists($profileClass)) { $tableMap = call_user_func(array($profileClass.'Peer', 'getTableMap')); foreach ($tableMap->getColumns() as $column) { if ($column->isPrimaryKey()) { return $this->pkName = call_user_func(array($profileClass.'Peer', 'translateFieldname'), $column->getPhpName(), BasePeer::TYPE_PHPNAME, BasePeer::TYPE_FIELDNAME); } } } } }
¿Qué estamos viendo aquí? Pues muy fácil: El método configure() busca en nuestro app.yml si hay referencia a una clase de perfil de usuario o si la de por defecto (sfGuardUserProfile) existe. Si es así, mergea su formulario y desactiva sus campos correspondientes al identificador de registro en ambas tablas. Sin más.
Si le echáis un vistazo a sfGuardUserFormFilter.class.php veréis que no hay nada de eso. Incorporando estos métodos y propiedades nuevas a nuestra clase sfGuardUserFormFilter bastaría para que los campos aparecieran en el formulario. La clase quedaría así:
plugins/sfGuardPlugin/lib/filter/sfGuardUserFormFilter.class.php
class sfGuardUserFormFilter extends BasesfGuardUserFormFilter { protected $pkName = null; public function configure() { unset($this['algorithm'], $this['salt'], $this['password']); // profile form? $profileFormClass = sfConfig::get('app_sf_guard_plugin_profile_class', 'sfGuardUserProfile') . 'FormFilter'; if (class_exists($profileFormClass)) { $profileForm = new $profileFormClass(); unset($profileForm[$this->getPrimaryKey()]); unset($profileForm[sfConfig::get('app_sf_guard_plugin_profile_field_name', 'user_id')]); $this->mergeForm($profileForm); } $this->widgetSchema['sf_guard_user_group_list']->setLabel('Groups'); $this->widgetSchema['sf_guard_user_permission_list']->setLabel('Permissions'); } protected function getPrimaryKey() { if (!is_null($this->pkName)) { return $this->pkName; } $profileClass = sfConfig::get('app_sf_guard_plugin_profile_class', 'sfGuardUserProfile'); if (class_exists($profileClass)) { $tableMap = call_user_func(array($profileClass . 'Peer', 'getTableMap')); foreach ($tableMap->getColumns() as $column) { if ($column->isPrimaryKey()) { return $this->pkName = call_user_func(array($profileClass . 'Peer', 'translateFieldname'), $column->getPhpName(), BasePeer::TYPE_PHPNAME, BasePeer::TYPE_FIELDNAME); } } } } }
Como veis, me paso por el forro las convenciones de estilo de Symfony. Me parecen una aberración y además no me preguntaron cuando las impusieron, así que a mi plim. Además, con un ctrl+alt+f, cada cual que lo ponga a su manera.
Con esto ya podemos tener los campos en el formulario. Recomiendo un repaso a la sección filter del fichero generator.yml para retocar la presentación del formulario de filtrado. Por ahora el formulario provocará una excepción al procesarse porque Propel no sabrá aun cómo filtrar por los nuevos campos que hemos incluido.
Aquí es donde más dudas tengo, por que al igual que con sfGuard, soy novato aun con Propel 1.5. Seguramente haya alguna manera de hacer lo que voy a poner a continuación de algún modo más “nativo” de Propel 1.5 o elegante. Lo que tenemos que hacer es añadir una serie de métodos a la clase Query de sfGuardUser.
plugin/sfGuardPlugin/lib/model/sfGuardUserQuery.php
class sfGuardUserQuery extends BasesfGuardUserQuery { public function filterByFirstName($firstName) { if ($firstName['text'] != null) { $this->useUserProfileQuery()->filterByFirstName($firstName['text'])->endUse(); } } public function filterByLastName($lastName) { if ($lastName['text'] != null) { $this->useUserProfileQuery()->filterByLastName($lastName['text'])->endUse(); } } public function filterByEmail($email) { if ($email['text'] != null) { $this->useUserProfileQuery()->filterByEmail($email['text'])->endUse(); } } }
Gracias a la magia del método useUserProfileQuery() nuestro formulario de filtrado podrá procesarse y además aceptará wildcards como * y %.
Eso es todo. Tampoco es que sea la pera limonera, por que al final solo he copiado lo que hace el formulario de edición de manera nativa y lo he portado al de filtrado. La moraleja quizá es que cuando Google no te da la respuesta que buscas, puedes tener la suerte de tenerla a mano en tu propio código
Happy coding!
» Leer más, comentarios, etc...
avemundi, blog de un micro-isv » Desarrollo de software
enlaces 23.junio.2010
Junio 23rd, 2010 - [Enlace local]
En el último año he sufrido un cambio en mi trabajo de día. He pasado de dedicarme básicamente a programar a pasar a dirigir un grupo de programadores. La verdad es que la tarea no es fácil, pues supone un cambio de mentalidad grande, así que me llaman la atención post dedicados a gestionar grupos de trabajo. Como estos:
- Lo importante es la gente, de Diario de programación que es uno de mis blogs preferidos sobre programación Java.
- La serie de posts de ‘Potencia tu equipo’ de Enrique Amodeo: (1) ¡ No al sistema de castas ! (2) Potencia a tu gente (3) ¿ Cómo estructurarlo ? (4) Evita jerarquías y especialistas
En otra temática, pero para mi relacionada, me ha gustado mucho este post de David Bonilla sobre gestión de información, sobre todo el párrafo que dice “Mi primera labor como CEO de una empresa siempre sería la misma: prohibir el Excel y derivados. El Excel puede ser una de las herramientas más dañinas para la actividad de una empresa y debería utilizarse únicamente como última solución y como herramienta de apoyo, nunca de trabajo “. Aunque suene un poco rádical, estoy completamente de acuerdo con el planteamiento.
» Leer más, comentarios, etc...
Picando Código
Walter Bender – fundador de SugarLabs – brinda charla en Montevideo
Junio 22nd, 2010 - [Enlace local]
Esta semana hay dos buenos eventos en la Facultad de Ingeniería en Montevideo. Además de la charla sobre Scrum, tenemos la siguiente:
Walter Bender, fundador de SugarLabs, estará dando una charla en Montevideo este Miércoles.
La charla será en inglés. En sus palabras:
In learning applications, it is not enough to be open, but we need to build affordances for the learner to understand the code.
Por supuesto que también hablará de las últimas versiones de Sugar y las novedades de la comunidad.
Miércoles 23 de Junio. 19:30hs. Salón de Actos, Facultad de Ingeniería (UdelaR).
Organiza: ceibalJAM!
¡Ahí estaré!
Comparte:
» Leer más, comentarios, etc...
Picando Código
Driver Radeon en Debian Squeeze y KMS
Junio 22nd, 2010 - [Enlace local]
A pesar de haberme pasado a ArchLinux en mi PC de escritorio, sigo usando Debian Squeeze a diario en mi laptop de trabajo. En ella estoy usando linux en su versión 2.6.32-trunk-686. La placa de video es una ATI Mobility Radeon:
01:00.0 VGA compatible controller: ATI Technologies Inc Radeon Mobility X1400
Hasta hace un tiempo usaba el driver fglrx en Debian. Pero ATI dejó de dar soporte a placas antiguas en las versiones más nuevas del driver, y el driver libre Radeon viene mejorando mucho en los últimos tiempos. Así que en algún momento decidí probar Radeon y quedarme con él en vez de usar versiones antiguas de Fglrx.
El fin de semana hice una actualización del sistema con un apt-get dist-upgrade. Cuando prendí la PC el lunes, noté que la aceleración de video 2D andaba demasiado lenta, igual que si el driver no existiera. KDE se volvió inusable, la decoración de ventanas era inservible, no había forma de trabajar así.
Por un rato me pasé a Openbox. Estaba instalado en mi computadora como recurso para usar Flex Builder para GNU/Linux, ya que éste consume todos los recursos de la máquina. Así que opté por usar un entorno de escritorio sumamente liviano para estas ocasiones. En Openbox podía usar más fluidamente las aplicaciones gráficas, pero aún tenía problemas. Así que mientras esperaba que mi código compilara, busqúe solución a mi problema.
Me fijé el log del servidor X, para ver si algo andaba mal:
cat /var/log/Xorg.0.log | grep EE
Las entradas del log que comiencen con “(EE)” significan error, por lo que filtramos las entradas con “EE” con el comando grep. Fue así que encontré el siguiente mensaje respecto al driver Radeon:
RADEON(0): [dri] RADEONDRIGetVersion failed because of a version mismatch.
Busqué un poco por los foros de Debian y me encontré con este post. Estoy usando la versión trunk del kernel 2.6.32, lo que según tengo entendido, sería la versión más reciente. (Trunk es la rama de desarrollo de un proyecto de software bajo control de versiones con Subversion). A partir de la versión 2.6.32-5 del kernel en Squeeze, se introduce el Kernel Mode Setting (KMS).
Esto implica que el código para establecer el modo (resolución y profundidad de color) de la pantalla en la tarjeta gráfica de la computadora pasa a estar dentro del núcleo Linux. Alguna de las ventajas que esto supone son una secuencia de booteo más limpia y rápida, soporte mejorado para suspender y resumir, y más.
Bastante lo nuevo que aprendí cuando me tocó arreglarlo. Algunas fuentes para leer más: Phoronix, WikiPedia…
En fin, si bien para algunos la transición es transparente, y no notan cambio alguno, en mi caso fue caótico. En ese mismo post del foro de Debian encontré la solución: deshabilitar KMS para el driver Radeon. Para esto, editar el archivo /etc/modprobe.d/radeon-kms.conf y cambiar el valor a 0.
Al reiniciar las cosas volvieron a la normalidad, con aceleración gráfica y demás. Uno de los comentarios que hacen en el foro de Debian que me pareció interesante:
Cada tanto, Linux toma un gran paso como hacer el cambio de XF86 a Xorg y de Grub a Grub2. Estas cosas siempre se acompañan de una buena cantidad de “dolores de crecimiento”. KMS parece ser uno de esos grandes cambios. Ha llegado para quedarse y necesitamos ajustarnos. A la larga, KMS parece ser una mejora mayor y necesitamos aprender cómo aprovecharlo.
Por ahora lo he desactivado, estaré atento a futuras versiones del kernel donde el driver Radeon funcione mejor con KMS. Eso si no migro a ArchLinux en la laptop también… o a Sid. Cuando Squeeze pase a ser la versión estable de Debian, pasaré a usar la versión de Debian 7, la que siga siendo testing. Pero últimamente me he venido cuestionando si pasar a Sid, o pegar el salto a ArchLinux…
Comparte:
» Leer más, comentarios, etc...
Arragonán
LipDub – Alaska – A quien le importa
Junio 21st, 2010 - [Enlace local]
Hace unas semanas misstechin hacía un llamamiento para participar en un LipDub en Zaragoza. No tenía muy claro si un domingo por la mañana iba a estar de humor
al menos para levantarme de la cama, pero al final hice el esfuerzo de ir y no me arrepiento para nada, me lo pasé muy bien y es otra de esas cosillas que ya he podido tachar de mi To Do-list
Por supuesto, que si os mola, no os olvidéis de votar el video para el concurso ese de fanta, el de community manager(se acaba de morir un gatito… social media!! ahí va otro XD).
Y lo dicho, que a quien narices le importa lo que yo haga y lo que yo diga
» Leer más, comentarios, etc...
Variable not found
Controladores todavía más automáticos
Junio 21st, 2010 - [Enlace local]
Hace unos días experimentábamos con controladores capaces de implementar automáticamente la lógica de acciones cuya misión era únicamente retornar la vista por defecto.
Así, partíamos de un controlador como el siguiente:
public class HomeController: Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Company()
{
return View();
}
public ActionResult Services()
{
return View();
}
public ActionResult Contact()
{
return View();
}
}
Y veíamos cómo simplemente heredando de la clase
AutoController que definíamos en el mismo post, podíamos omitir la implementación de las acciones anteriores, consiguiendo un código mucho más compacto:public class HomeController: AutoController
{
}
Está claro que utilizando como base la clase
AutoController hemos ahorrado mucha codificación, pero, perezosos como somos, seguro que todavía estamos escribiendo más de la cuenta. Si el único código que vamos a tener en un controlador es la definición de la propia clase, quizás podamos hacer algo para evitar incluso tener que codificar eso, ¿no? De la misma forma que hicimos con las acciones, seguro que podríamos crear un controlador por defecto para procesar las peticiones entrantes para las que no podamos encontrar un controlador específico.
¡A por la factoría de controladores!
La factoría de controladores es el componente de ASP.NET MVC encargado de localizar e instanciar el controlador apropiado para procesar cada petición entrante. Por defecto, este trabajo lo realiza la claseDefaultControllerFactory, pero como en otras ocasiones, la flexibilidad del framework MVC permite sustituir muy fácilmente este componente por otro que realice la tarea que nos interesa.Dentro de la factoría de controladores, el método GetControllerType() es utilizado por el framework para localizar el tipo (la clase) de controlador en función del nombre obtenido desde los parámetros de ruta. De hecho, este mismo método es el que utilizamos hace más de un año para saltarnos a la torera la convención de nombrado de controladores del framework.
De hecho, si heredamos de la factoría de controladores por defecto, basta con sobrescribir este método
GetControllerType() para conseguir el comportamiento que pretendemos. En primer lugar, ejecutamos la lógica por defecto; sólo en el caso de no encontrar un controlador utilizaremos por defecto el controlador AutoController que creamos en el post anterior, de forma que sea él el que se encargue de proporcionar la implementación automática de sus acciones:public class AutoControladoresControllerFactory: DefaultControllerFactory
{
protected override Type GetControllerType(RequestContext requestContext,
string controllerName)
{
return base.GetControllerType(requestContext, controllerName)
?? typeof (AutoController);
}
}
Ya lo último que necesitamos es indicar al framework la factoría de controladores que debe utilizar, la clase
AutoControladoresControllerFactory, introduciendo el siguiente código en el archivo global.asax.cs:protected void Application_Start()
{
// Establecemos la nueva factoría de controladores...
ControllerBuilder.Current.SetControllerFactory(
typeof(AutoControladoresControllerFactory)
);
// Y el código habitual en el Application_Start()
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
Y con eso, hemos terminado. A partir de ese momento, todas las peticiones cuyo controlador sea imposible localizar según el procedimiento estándar, serán procesadas por el controlador automático AutoController, que buscará para cada acción una vista y la retornará mágicamente al usuario.
Así, una petición de tipo
GET /Home/Services, que requeriría normalmente la existencia de una clase controlador HomeController y un método de acción Services(), podrá ser resuelta sin implementar ninguno de estos dos elementos, siempre que exista una vista definida en ~/Views/Home/Products.aspx. Ya en el post anterior comenté algunas contraindicaciones que podía tener la utilización de esta técnica. ¡No dejes de revisarlo si piensas emplearla en producción!
A modo de demo, he colgado en Skydrive un ejemplo (para Visual Studio 2010) en el que se ha eliminado directamente el controlador Home, y han sido añadidas diversas vistas a las que se puede acceder utilizando estos automatismos.Publicado en: Variable not found.
» Leer más, comentarios, etc...
Picando Código
Charla abierta sobre Scrum en la Facultad de Ingeniería
Junio 21st, 2010 - [Enlace local]
Este jueves voy a participar de una reunión junto a otros Scrum Masters. En ella expondremos varios temas entorno a Scrum, la metodología ágil de desarrollo, y cómo ha cambiado nuestra forma de trabajar.
Si están interesados en aprender un poco sobre Scrum desde la experiencia de otros, tienen dudas respecto al curso, etc. esta es la oportunidad para preguntarlas:
El 24 de junio a las 19.45 horas en el Salón Azul de la Facultad de Ingeniería de la República se desarrollará una charla abierta en donde profesionales de nuestro medio expondrán su experiencia en el uso de Scrum luego de haberse certificado como Scrum Master el año pasado.
El evento es gratuito pero hay cupos limitados, por inscripciones eventoscrum@aquait.com.uy
ACTUALIZACIÓN: La agenda del evento
19:40 – Inicio del evento, breve overview de Agile + Scrum (Gabriel Ledesma).
19:50 – Orador: Diego Garagorry
20:15 – Orador: Gabriel Centurión
20:40 – Orador: Fernando Briano
21:05 – Orador: Carlos Acle
21:30 – Cierre del evento, preguntas e intercambio general.
Va a ser algo dinámico, distinto, más parecido a Scrum, menos parecido a una típica conferencia técnica. No se lo pierdan.
Recuerden que en Uruguay, se va a realizar una nueva instancia para certificarse como Scrum Masters en julio. Más información en el enlace:
Nuevo curso de Scrum Master Certificado en Montevideo, Uruguay
» Leer más, comentarios, etc...
xperiments.es
AS3 Android Flash Components
Junio 21st, 2010 - [Enlace local]
Set de componentes Flash para el desarrollo de aplicaciones sobre la plataforma Android.
El paquete viene con todas las clases y fla para poderlos modificar a nuestro gusto.
Sitio web del autor:Kevin Hoyt
Descarga de los componentes:android-components






» Leer más, comentarios, etc...
Variable not found
Enlaces interesantes 10
Junio 20th, 2010 - [Enlace local]
Estos son los enlaces publicados en Variable not found en Facebook desde el viernes, 09 de abril de 2010 hasta el domingo, 20 de junio de 2010. Espero que te resulten interesantes. :-)
- Gestión de errores en ASP.NET MVC con Elmah.
Fecha: 17/06/2010 - Cadenas de texto seguras usando System.SecureString... ¿desde cuándo está eso ahí? :-D
Fecha: 17/06/2010 - Un vistazo rápido a jQuery. Muy bueno.
Fecha: 17/06/2010 - Maarten Balliauw ha publicado la versión 2.0 de su SiteMap Provider para ASP.NET MVC. Fecha: 16/06/2010
- Eduard Tomàs muestra detalladamente cómo crear validaciones personalizadas en ASP.NET MVC
Fecha: 16/06/2010 - Creación de un proveedor de caché personalizado para ASP.NET.
Fecha: 16/06/2010 - Jose Miguel Torres continúa recorriendo las colecciones de .NET. Segunda genial entrega de la serie.
Fecha: 16/06/2010 - Alfredo Fernández: JQuery 1.4.2 Cheat Sheet (.pdf)
Fecha: 15/06/2010 - Un vistazo de cerca al atributo [HiddenInput] en ASP.NET MVC.
Fecha: 15/06/2010 - Uso de LINQPad para realizar consultas a fuentes OData (con ejemplo práctico sobre StackOverflow).
Fecha: 14/06/2010 - Textbox con autocompletado usando anotaciones y plantillas de edición para MVC 2.
Fecha: 14/06/2010 - Eduard Tomàs "Sobre ir recorriendo enumerables" o también IEnumerable vs IEnumerator
Fecha: 11/06/2010 - Prevenir (al menos un poco) el copiado/pegado de texto en campos de un formulario web. Válido en Webforms, MVC o HTML.
Fecha: 11/06/2010 - Otra aportación de Microsoft a jQuery: Globalization Plugin.
Fecha: 11/06/2010 - Cómo detectar procesos que no responden.
Fecha: 11/06/2010
Publicado en: Variable not found
» Leer más, comentarios, etc...
xperiments.es
OSX Todos mis contactos Messenger aparecen como no admitidos
Junio 20th, 2010 - [Enlace local]
Una cosa rara le pasaba a mi messenger, resulta que hoy lo ha abierto y mi sorpresa ha sido que todos los contactos que tengo me aparacen como no admitidos. Parece que se le ha ido la cabeza al cielo a MSN y algo no funciona bien.
Buscando por la red he encotrado la solución.
Cerramos MSN y abrimos una ventana de terminal y nos movemos hacia este directorio:
1 | /Users/ <- NUESTRO USUARIO ->/Library/Preferences/Microsoft |
Alli encontraremos un archivo llamado:
Microsoft Messenger User Cache.plist
Lo que tenemos que hacer es renombrarlo a cualquier otra extension ( ej .bak ) para que una vez MSN reinicie vuelva a crear sus opciones de configuración.
Hacemos este proceso mediante:
1 | mv Microsoft\ Messenger\ User\ Cache.plist Microsoft\ Messenger\ User\ Cache.bak |
Reiniciamos MSN para ver que todo ha funcionado correctamente
» Leer más, comentarios, etc...
programania
Lo que los gurús nunca te cuentan sobre Kanban y SCRUM
Junio 17th, 2010 - [Enlace local]
A principios de año comencé un nuevo proyecto de migración de una extensa intranet. Un proyecto que me va a llevar todo un año y, por supuesto, una buena oportunidad para aplicar todo lo que he ido leyendo sobre métodos ágiles (y superar la vergüenza del desarrollo de software).
Realizar el Product Backlog no fue algo especialmente complicado. No se trata de un proyecto especulativo con un “escenario siempre cambiante”, las user stories básicamente se sacaban de “lo que hace la vieja intranet que lo haga la nueva”. Por supuesto nada es tan sencillo (cada user story tiene que tener el tamaño adecuado, etc.), pero no me pararé aquí.
La priorización de las user stories se hizo pensando en la mejor forma de ponerlas en marcha. Aquí hay una cosa clave: la puesta en marcha no es “desplegarla en el servidor de producción”, sino que los usuarios realmente se pongan a utilizarla y cumplan sus necesidades. Son dos cosas muy distintas.
Una vez definidas la user stories y priorizadas, solo quedaba decidir la manera de ir poniéndolas en marcha. Aquí teníamos dos posibles filosofías para seguir:
- scrum: cada X semanas poner en producción una serie de user stories y que los usuarios comiencen a utilizarlas (desactivando la posibilidad de hacerlo en la intranet migrada).
- kanban: cada vez que una nueva user story es terminada (desarrollada, testeada, nosecuantizada…) ponerla en marcha.
Aquí entra el factor humano. Ir poniendo una a una las user stories en producción introducía mucho ruido en los usuarios (“ahora te quito un botón de aquí y te lo pongo allá”), así que comenzamos haciendo unos sprints de 3 semanas, con un periodo inicial de puesta en marcha del proyecto.
Aquí todo normal. El escenario es bastante favorable para la aplicación de métodos ágiles. Quizá la única característica algo molesta es que el presupuesto era fijo. Pero dado que el alcance también era fijo, no era uno de los principales caballos de batalla: se aplicó un “pos se tienen que poder” y punto.
Bueno… ¿y qué es lo que los gurús nunca te cuentan sobre Kanban y SCRUM? Porque hasta ahora todo lo que he escrito es de manual.
Lo que los gurús nunca te cuentan es que para poder hacer todo esto necesitas tener un entorno de desarrollo EXCELENTE y un conocimiento TÉCNICO de ALTO NIVEL.
Detrás de tanta filosofada Lean hace falta que, a nivel técnico muchas cosas funcionen como un reloj:
- si quieres poner en marcha nuevas funcionalidades en periodos cortos (primero igual lo haces cada tres semanas, pero luego te das cuenta de que quizá sea mejor cada dos… finalmente y cuando el proyecto ya va como un tiro… ambicionas hacer kanban) necesitas un buen sistema de integración contínua TOTALMENTE AUTOMATIZADO.
- para automatizar algo, debes estar haciéndolo de manera manual. Si automatizas la ejecución de pruebas unitarias… pero no estabas haciendo pruebas unitarias… estarás automatizando la nada absoluta. A veces uno se pone como objetivo algo técnico “tener un hudson con un phing, que genere nosecuantas métricas inútiles y lo automatice toro toro toro”…
- integración continua implica TDD (o al menos pruebas unitarias), que implican una MUY BUENA orientación a objetos, que implica un buen uso de patrones (sobre todo de inyección de dependencias) y un conocimiento bastante profundo de los frameworks que utilizas (tanto para pruebas como para desarrollar).
- integración continua implica el uso de un repositorio de versiones (subversion, git, loquesea…). Pero no vale con hacer unos commits aquí y allá: seguramente vas a necesitar branches y los consiguientes merges. Y seguramente te van a surgir unos maravillosos conflictos que vas a tener que saber solucionar. El conocimiento de tu repositorio de versiones tiene que ser MUY BUENO.
- integración continua implica la división entre el servidor de desarrollo (probablemente uno para cada programador), el de pruebas y el de producción. Lo cuál implica una MUY BUENA gestión de configuraciones y que tu aplicación sepa en cada momento si está en pruebas y debe coger la configuración de pruebas o cuál. Esto me remite al punto 1: si tienes un sistema totalmente AUTOMATIZADO de integración continua capaz de desplegar tu aplicación en el servidor de pruebas o en el de producción como si no costara, estás triunfando. En caso contrario, prepárate a perder el tiempo a base de bien.
- integración continua implica desarrollo evolutivo del producto, lo cuál implica un MUY BUEN CLIENTE capaz de hacer piña contigo y que cuando los usuarios monten en cólera porque se sienten algo mareados al ver botones aparecer y desaparecer, al verse obligados a dar feedback, etc. esté contigo. También hace falta que tenga fe en que “la versión que hay ahora evolucionará para bien”. Si los puntos del 1 al 4 funcionan como un reloj, es posible que con el tiempo vayas ganando en credibilidad (porque al principio nadie te cree), sino prepárate para perder credibilidad hasta entre tus jefes….
O sea que necesitas un profundo conocimiento de la orientación a objetos, los patrones, las pruebas unitarias, subversion, hudson (y phing en mi caso), gestión de configuraciones, y un buen cliente. ¿Alguien da más?
A lo que voy es a que las metodologías ágiles sólo marcarán la diferencia cuando seas capaz de juntar la filosofía lean, con unas buenas prácticas de SCRUM o KANBAN y con una FORTÍSIMA CAPACIDAD TÉCNICA. Sin TÉCNICA no hay metodologías ágiles que valgan. Si cada iteración de dos semanas, tardas dos días en poner en marcha la nueva iteración, no vas a ningún lado. Tiene que ser algo AUTOMÁTICO y, para que sea automático, tiene que ser algo TÉCNICAMENTE MUY BUENO.
¿Pero entonces los métodos ágiles, la integración contínua, etc.. no valen la pena?
Valen la pena totalmente. Si te quieres a ti mismo como profesional hazlo, porque verás la luz y marcarás la diferencia.
¿Entonces primero debo ser un experto en todo eso que has dicho y luego ya me hago ágil?
No hay esa posibilidad. Intenta aplicar agilismo desde el principio en la manera en que te sea posible.
¿Entonces a dónde vas con este rant?
A que sepas que va a doler. Eso es lo que no te cuentan los gurús. Que el camino es doloroso. Podrás poner los medios para que el dolor se minimice. Vas a pasarte horas y horas pegándote con problemas técnicos porque eres incapaz de hacer un commit por un tree conflict, o porque hudson da un extrañísimo “segmentation error” a un comando de terminal que ejecutas (y que funciona de lujo en la propia terminal), y no te digo ya como te tomes Selenium en serio….
Dolerá aunque repito, vale la pena totalmente.
» Leer más, comentarios, etc...
Picando Código
NetBeans 6.9 y Eclipse Helios
Junio 16th, 2010 - [Enlace local]
Sin duda los dos entornos de desarrollo integrados que más han crecido en los últimos tiempos son Eclipse y NetBeans. Su comunidad de desarrolladores sirve como pilar para su crecimiento y evolución constante. El avance de las nuevas tecnologías, nuevos lenguajes y metodologías en el desarrollo del software hacen que lo nuevo quede viejo en poco tiempo. Esto presiona a los programadores a trabajar de manera más intensa agregando nuevas funcionalidades y perfeccionando sus productos en una competencia por ser el mejor IDE, donde los más beneficiados somos sus usuarios.
Es así que nos encontramos estos días con una nueva versión de NetBeans, el IDE idóneo para programar GUIs con Swing, y ahora con JavaFX.
Y por chocante que parezca, habrá que acostumbrarse, ahora hablamos de Oracle NetBeans.
Disponible NetBeans IDE 6.9
Paso a comentarles algunas de las novedades más destacadas de esta versión de NetBeans:
JavaFX Composer - La característica que más me llama la atención en este momento. Estoy trabajando en el campo de las aplicaciones ricas con tecnología Flex. Me encantaría poder migrar a JavaFX, pero habría que estar seguros que ya está apta para el reto. Han mejorado mucho el editor,y hay mucho por probar.
Otras características:
- Interoperabilidad OSGi para aplicaciones de la plataforma NetBeans, y soporte para bundles OSGi con Maven.
- Soporte para JavaFX SDK 1.3, PHP Zend Framework y Ruby On Rails 3.0.
- Mejoras en el editor Java, el Debugger Java, gestión de tareas (issue tracking) y más.
Ya estoy descargando la versión con JavaFX incluido. Prometo algún post al respecto cuando pruebe algo. Interesante como IDE para desarrollar en PHP al incluir soporte para Zend (no sé si lo hacía en versiones anteriores).
Usé NetBeans por un tiempo como IDE predeterminado para desarrollo PHP pero desde entonces no he hecho ningún desarrollo serio con él. Sigue primero en mi lista Eclipse, aunque a veces me saca un poco de quicio. Y hablando de Eclipse, para empezar quería compartir unos tips con ustedes que me resultaron bastante útiles. Se trata de una serie de posts de “tips & tricks” para Eclipse que publicaron en DZone y está dividio en tres partes: parte 1, parte 2 y parte 3. Algunos ya los conocía, pero otros veré de implementarlos hoy en el trabajo.
También destacable comentar que desde 2007 a 2010, ha habido un gran crecimiento en la cantidad de usuarios que usan GNU/Linux para desarrollar con Eclipse. Un 20% de usuarios de Eclipse que usaban GNU/Linux subió a 33%, bajando en Windows de un 74% a un 58%. En tanto Eclipse es la plataforma de desarrollo más popular en GNU/Linux con un 46% de usuarios.
Eclipse Helios
Helios es el nombre de la versión 3.6 de Eclipse. Si bien todavía no hay una versión final disponible, ya podemos descargar el RC4 de Eclipse 3.6. Algunas de las novedades que he leído se vienen para esta versión:
- Eclipse Marketplace – Desde el mismo Eclipse, podremos buscar plugins e instalarlos, sin necesidad de estar buscando el sitio web del plugin en el navegador, copiar el URL, agregarlo, etc.
- JavaDocs incluye ahora documentación de anotaciones.
- Drag & Drop de archivos desde el sistema operativo.
- Mejoras en la exportación de preferencias, con más opciones (bienvenida sea!
). - Totalmente relacionado con el comentario del crecimiento paralelo de Eclipse y GNU/Linux: Linux Tools.
- En algún lado también leí que esta nueva versión incluiría un ícono en la barra de tareas. Personalmente estaría más que agradecido por una característica así, me encanta
Pueden leer más sobre las nuevas características de Eclipse Helios en este enlace. Estén atentos, porque la versión final se espera para el 23 de junio.
Comparte:











