Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas

miércoles, febrero 06, 2013

Depura el envió de correos con "smtp4dev" [HERRAMIENTA]

Casi siempre que se hacen aplicaciones web, surge la necesidad de notificar al usuario por correo sobre algún suceso, ya sea registro, suscripción u otro. Así que como developer, siempre nos vemos en la necesitad de probar código para enviar correo. La practica nos enseña que no hay que esperar hasta último momento (ya en producción) para probar el envió de correos, pero usualmente probar estas funcionalidades es un dolor de cabeza, especialmente en Windows (¿quien ya ha configurado un servidor smtp en Windows?).

Pues para aliviar esta carga, les quiero compartir esta sencilla herramienta, que francamente me salvo la vida muchísimas veces para probar envíos de correo, se llama "smtp4dev".
Realmente no hay mucho que ver o explicar, smtp4dev es un sencillo programa que se aloja en el taskbar y escucha el puerto 25, por cualquier correo entrante.

"Bandeja de entrada de smtp4dev"

Entonces si usas Java Mail o la funcion mail() de PHP para enviar un correo, smtp4dev lo recibe y te despliega una notificación de recibido, el correo "recibido" lo pueden abrir con Thunderbird o Outlook sin mayor problema.

"Notificación de correo entrante"

Simple, funcional y open source ¿qué más se puede pedir?, pueden descargar smtp4dev acá:
http://smtp4dev.codeplex.com/
Espero que les sirva, tanto como me ha servido (y lo sigue haciendo!)
Saludos!

viernes, diciembre 16, 2011

Asegura tus Sitios Web con OWASP


"OWASP - Logo de la página oficial"


Uno de estos días estaba buscando en internet un par de técnicas para librarse de ataques XSS y SQL Injection cuando me topé con The Open Web Application Security Project, (OWASP). Un portal/wiki creado por una comunidad con filosofía libre en el cual encontré muchísimo material referente a las formas más populares de ataques en la web. Encontré tan valiosa información que tomé a bien compartirlo con ustedes.

La referencia y documentación sobre vulnerabilidades comunes en el diseño y técnicas de programación de aplicaciones web es muy extensa, descriptiva y variada, encontrando desde artículos en PDF hasta vídeos de youtube. Entre lo más valioso que encontré en este sitio fue ESAPI, Enterprise Security API. Este consiste en un conjunto de librerías desarrolladas por la comunidad de OWASP y liberadas bajo la licencia BSD en distintos lenguajes de programación las cuales encapsulan controles de seguridad para evadir las vulnerabilidades más comunes en los sitios web incentivando además al desarrollador a hacer uso de los patrones de diseño básicos recomendados por las comunidades de software.

Me tomé la libertad de descargar y probar la librería en su versión para Java 1.5 para jugar un rato con ella pero se ve un tanto compleja como para juzgarla a la ligera. Por tal razón me reservo mis comentarios de su uso y cuando haya podido implementarla actualizo con mis comentarios.

"Captura de pantalla del Read Me" 

Como ejemplo les dejo un vídeo en el cual narran de manera bastante comprensible las variantes y ejemplos de un ataque por Cross Site Scripting (XSS) así como consejos básicos de cómo proteger tus sitios ante este ataque:



"OWASP - Cross Site Scripting"


Pueden encontrar más información en el la página principal de OWASP.

viernes, diciembre 02, 2011

KendoUI: Mas Allá de jQuery

"Página principal del proyecto (Porqué esa tendencia de mezclar programación con artes marciales?)"

El día de hoy me entero del lanzamiento del framework denominado KendoUI el cual sale del beta privado para estar disponible al público con su doble licencia tanto comercial con soporte incluído y GPLv3.

Tal como menciono en el título de este post, KendoUI está construído sobre la base de jQuery pero lo extiende de tal manera que me recuerda mucho al framework Dojo con una sintaxis muy ordenada y complejos controles enriquecidos para la interfaz de usuario facilitando (o mas bien dicho, automatizando) las tareas de vincular estos controles con eventos y asociándoles repositorios de datos haciendo uso de HTML5 pero manteniendo la compatibilidad con los navegadores que aun no soportan esta versión del lenguaje de marcado.

"Showcase con los controles incluídos en el framework"


El día de hoy además fue presentado de manera extensiva mediante un webinar (link al vídeo en youtube) en el que el programador Todd Anglin explica en detalle las características de este nuevo framework.

"ThemeBuilder para colorear los controles en base a nuestra propia paleta de colores"

Como todo framework decente, posee su propio Showcase listando cada uno de los controles que posee este framework junto con la descripción de sus propiedades, eventos y código de ejemplo, además de un ThemeBuilder con el cual adecuar una paleta de colores como tema para dichos controles.

En mi opinión es un framework que desde que estaba en su beta cerrado me ha llamado la atención y espero poder utilizarlo en mi próximo proyecto que se me ocurra, media vez este cumpla con la licencia GPLv3 bajo la cual ha sido liberado el framework.

jueves, noviembre 10, 2011

Bootstrap: Tus Aplicaciones Web con la UI de Twitter

"Portada del Toolkit en Github"

Luego que twitter actualizara por fin su interfaz web, unos se dedicaron a hablar maravillas de la misma mientras que otros se dedicaron a acabársela con cuanto bug le encontraban. En lo personal, a pesar de la tradanza en su carga y falta de una que otra verbosidad, me parece muy bien diseñada y elaborada.

Recientemente buscaba un sitio para validar en línea expresiones regulares y me topé con este sitio en RegExPlanet, cuya interfaz me pareció muy similar pero no fue sino hasta que hurgué en su CSS y Javascript y busqué sus referencias que me topé con Bootstrap y fue cuando recordé la familiaridad del sitio, estaba basado en la UI de twitter haciendo uso del toolkit denominado Bootstrap.

Tal como lo mencionan en su portal de Github, Bootstrap es un conjunto de archivos CSS (Y sus respectivos LESS), HTML y Javascript con los cuales te ahorras mucho trabajo armando layouts, estilizando inputs y utilizando componentes un poco más complejos ya construidos a base de HTML como son el caso de la barra de menú (o barra de navegación, como quieran llamarle) en la parte superior con posición Fixed, tabs, formularios modales, tooltips, etc.

Pueden descargar este toolkit en su página de Github junto con la documentación la cual te explica lo fácil que es integrar esta UI en tus sitios web.

Basada completamente en la Apache License versión 2.0 lo cual significa que no tendrás que preocuparte por que alguien te quiera demandar por utilizar los mismos componentes UI con los que está hecha la interfaz actual de twitter.

Les adjunto además un ejemplo editable elaborado en JsBin mostrando cómo con solamente agregar el CSS de Bootstrap automáticamente estiliza los input y con algunos divs con clases específicas es posible construir el resto de la estructura básica de un formulario web.

jueves, octubre 13, 2011

RIP Dennis Ritchie

"Dennis MacAlistair Ritchie. 1941 - 2011"

El día de hoy revisando los Trending Topics de twitter y luego confirmando en la Wikipedia me entero que hace justamente tres días, el 9 de octubre del presente año, falleció uno de los programadores más conocidos y respetados de la historia de la computación y sus lenguajes, Dennis Ritchie.

No me alcanzaría este post para listar y describir el gran legado que Dennis Ritchie nos ha dejado a lo largo de su trayectoria como programador pero entre las más conocidas podría mencionar al lenguaje C y el sistema operativo Unix.

El lenguaje C es la base y la inspiración para la mayoría de lenguajes de programación de alto nivel de nuestra época como C++, Objective-C, C#, Java, PHP y muchos más.

Unix, por si no lo conocían, es un robusto y seguro sistema operativo con una gran trayectoria en el cual se encuentran basados otros populares como Linux, Solaris, FreeBSD, MacOSX, entre otros.

Los grandes aportes de Dennis Ritchie a la comunidad de programadores me hacen sentir mucha pena el hecho que me haya enterado hasta hoy de su fallecimiento y a diferencia de otro personaje que falleció recientemente, este no haya tenido la misma notoriedad y homenaje.

Para rendirle un humilde homenaje a Dennis les dejo una recreación del tweet de @johnfoster:


/* for Dennis Ritchie  */

#include <stdio.h>

int main(void)
{
    printf("Goodbye World");

}

miércoles, septiembre 21, 2011

Galería de Tablas con Estilo CSS

Recientemente estaba en la tarea de diseñar un par de tablas para mostrar información semi-estática por lo que su poco esfuerzo no ameritaba utilizar librerías más elaboradas como flexigrid, jqgrid o componentes faces así que me dediqué a la tarea de empezar a escribir los respectivos tags <table>, <tbody>, <tr>, <td> y los demás necesarios.

Terminado el HTML me dispuse a pensar en la forma más eficiente de darle estilo a mi tabla para que se acoplara a los colores y formas del resto del sitio y buscando en internet me encontré con esta fuente de inspiración y recursos denominada CSS Table Gallery.

 "El sitio en cuestión, mostrando aplicado uno de los estilos sobre la tabla de estilos"

Cuenta con una tabla HTML con 67 diferentes estilos CSS aplicables los cuales no son tan increíbles que digamos pero son suficientes para escoger una idea de estilo o una paleta de colores para tu tabla.

Estos pueden ser aplicados a la misma tabla que muestra dichos diseños (a la inception) de manera que dando click a cada uno de ellos es posible previsualizarlo al instante y contiene su respectivo link para descargar un demo conteniendo el CSS. Los desarrolladores que ya conocen Firebug saben que sin necesidad de descargar el fuente pueden visualizar las reglas y estilos aplicados directamente en el sitio mientras se ríen como Yao Ming.

Aunque se ha deshabilitado la opción para aportar nuevos diseños, los existentes son lo suficientemente variados para buscar y encontrar uno adecuado para nuestro sitio. Como bien lo describen aquí, es como el CSS Zen Garden de las tablas. Espero les sea de utilidad cuando tengan que crear y estilizar tablas a mano.

martes, septiembre 13, 2011

Software Freedom Day 2011

Por medio de la lista de correo de los usuarios de Linux de la UES me entero que ya está programada la próxima reunión relacionada con el software libre y celebrada de manera simultánea en todo el mundo para conmemorar la revolución que el software de código abierto y distribuido libremente ha causado en la informática y el internet de nuestros días.

A continuación les dejo el afiche del evento en El Salvador y la agenda de charlas que se impartirán:


 Charlas:

Software Libre en el ámbito educativo. Aula 2.
09:30 - 10:30 Redes Sociales Educativas con Elgg (Carlos Molina)
10:30 - 11:30 Como elegir una distribución de GNU/Linux (William Díaz)
11:30 - 12:30 Iniciando en las aplicaciones web con Drupal (Wendy Xiomara Ruíz López)
13:00 - 14:00 Administración Académica con Drupal (Saúl Fernando Espinoza Castillo)
14:00 - 15:00 Software Libre Educativo en la Educación Parvularia (Hazel Lizeth Bonilla Calderón)
15:00 - 16:00 Software Libre para las matemáticas (Carlos Álvarez)

Software Libre en el ámbito gubernamental. Aula 6.
09:30 - 10:30 Software Libre en el GOES (Carlos Juan Martín Pérez)
10:30 - 11:30 Estandarización de Sitios Web institucionales con Joomla (Juan Francisco González y Luis Ponce)
11:30 - 12:30 Derechos de autor y software libre (Marta Cea Flores)
13:00 - 14:00Virtualización con Xen (Carlos Juan Martín Pérez)

Software Libre en el ámbito empresarial Aula 16.
09:30 - 10:30 Intranets empresariales con OpenAtrium (Saúl Fernando Espinoza Castillo)
10:30 - 11:30 Experiencias empresariales con productos de software libre/open source (Intelector)
11:30 - 12:30 Gestion de ventas, clientes y automatizacion de mercadeo con SugarCRM (Angel Magaña)
14:00 - 15:00 Lime Survey como herramienta de Sondeo de Mercado (Carlos Molina)
15:00 - 16:00 Respaldos automatizados con bacula (Manuel Flores)



En este mapa pueden encontrar los lugares en el mundo donde se celebrará de manera simultánea:

Mapa de Eventos SFD 2011

Mas información y actualizaciones en la página oficial del Software Freedom Day global y en la página oficial del evento en El Salvador.

lunes, septiembre 05, 2011

El Cliente Ideal de Control de Versiones

"Subversion Wallpaper, por Michael Pilato"

Desde que conocí el control de versiones este se ha vuelto una parte crucial de mis actividades de desarrollo de aplicaciones permitiéndome resguardar el código en un servidor pudiendo recobrar y comparar contra los cambios efectuados en el pasado así como llevar un control de las ramificaciones de mis aplicaicones y si aun no lo utilizan se los recomiendo enfáticamente y muy especialmente si (como es muy común) trabajan dentro de un equipo de desarrollo que en conjunto realizan cambios simultáneos a los mismos archivos de código fuente.

En su debido momento escribí un par de posts(parte 1 y parte 2) acerca del control de versiones en el cual explico de una manera un poco más detallada en que consiste el control e versiones, cuánto me ha servido en mi carrera y porqué considero que deberían utilizarlo. SVN es mi solución preferida de control de veriones. Es, en mi punto de vista, la evolución natural de CVS y se mantiene un tanto conservador comparado contra Git, Bazaar y Mercurial además de ser quizás el que tenga la mayor cantidad de clientes y documentación disponible. Me complica un tanto la vida al momento de incorporar cambios de una rama a otra pero hasta el momento he sobrevivido a ello.

Con todas las bondades conocidas y publicadas acerca de SVN y su variedad de sabores de clientes, tanto de línea de comandos, de escritorio o integrados en el IDE he llegado a un punto en el que durante mis experiencias como programador  mis necesidades superaron a las características ofrecidas por estos clientes y necesito algo más para administrarlo. A continuación mis escenarios en los cuales no he podido encontrar un cliente de SVN que supla mis necesidades:

  • Fases posteriores al desarrollo. Resulta que en algunos flujos de desarrollo en los que he participado se realizan diferentes fases en las cuales el código fuente pasa por diferentes personas, desde mi persona como desarrollador hasta analistas de calidad y quienes despliegan en producción la versión final. En otras ocasiones he tenido que pasar mi código fuente por otros desarrolladores quienes realizan pruebas cruzadas de mi código. Aunque he encontrado SVN te permite explorar, graficar y generar reportes de las diferentes revisiones, no he encontrado alguna herramienta que me permita catalogar mi código en base a las fases por las que este atraviesa y en manos de quien se encuentra el código fuente lo cual permitiría una mejor administración del mismo cuando se desean, por ejemplo, obtener métricas de cantidad de cambios y tiempo/esfuerzo invertido durante una fase determinada.
  • Choque de versiones concurrentes. Me ha ocurrido ya demasiadas veces que me solicitan desarrollar una nueva funcionalidad para un componente pero me entero que alguien más también tiene en fase de desarrollo o pruebas otra versión de este mismo componente las cuales, como pasarán a producción antes que mi versión, yo debo procurar incorporarlas para que cuando yo pase mi versión a producción esta sea una combinación de ambas. Mediante la creación de una rama por cada versión concurrente he logrado solucionar el problema a nivel de control de cambios e incorporación de revisiones de una rama a otra y esta solución ha sobrevivido aún a escenarios más bizarros como cuando ambos componentes deben pasar a producción en una misma fecha o cuando estos cambian de prioridad para pasar a producción mientras ambos se encuentran en fase de pruebas de calidad. Aun así, hasta el momento no he encontrado un cliente de SVN que me permita ver de una manera gráfica y detallada (número de revisión, autor, mensaje añadido a la revisión, fecha y fase) de las ramificaciones hechas a la rama principal de la línea de tiempo de un componente, lo cual me parece muy importante para llevar un control de desarrollos concurrentes, manejo de prioridades y reportería para jefes inmediatos. Un gráfico y estadísticas similares a las de Ohloh pero visualmente más detallados y mayormente enfocados en la línea de tiempo, las fases y las ramificaciones.
"Línea de tiempo en Ohloh. Si tan solo mostrara más detalles y las ramificaciones"
  • Administración de usuarios y accesos a las ramas. Me encantaría contar con un cliente o herramienta de SVN un poco más orientado para un usuario administrador de repositorios, el cual, además de permitirte explorar el código fuente, los detalles de las revisiones y comparaciones entre una revisión y otra también te permitiera configurar usuarios y roles de acceso a una línea de tiempo y sus diferentes ramificaciones. Me encantaría especialmente poder configurar un repositorio para que los usuarios y sus permisos residieran en un servidor LDAP y no depender de un archivo de configuración de apache o nativo de SVN.
  • Notificaciones. Algunas herramientas  que he conocido me permiten generar un RSS feed de cada uno de los commits realizados sobre un repositorio pero alguien como un project manager o un team manager quizás no esté interesado en todo el detalle de un commit y le sea de mayor interés commits específicos como la creación de una nueva rama para un desarrollo concurrente, el cambio de fase de desarrollo a testing (y su correspondiente detalle como número de revisión, autor, fecha y descripción) o el merge de una rama a la línea de tiempo principal (que equivaldría a un evento como un paso a producción) lo cual complementaría mi necesidad mencionada en primer punto: el manejo o clasificación de revisiones por medio de fases. Como un plus me interesaría que además de notificar también requiera la autorización de un superior para la realización de un commit a una determinada fase, como por ejemplo, un cambio hacia la fase de testing o hacia la fase de producción.
Hasta el momento sigo buscando un cliente (o grupo de clientes, al menos) o herramienta que pudiera suplirme estas cuatro necesidades básicas que he llegado a requerir para trabajar con control de versiones con mis equipos de desarrollo pero debido al tiempo que llevo buscando y los pocos y desfavorables resultados obtenidos en mi búsqueda he llegado a considerar la alternativa de desarrollar mi propio cliente de SVN basado en algún cliente existente cuya licencia me permita expandir su funcionalidad y su código fuente pertenezca a un lenguaje que yo conozca. En caso de no encontrar un cliente existente me veré obligado a desarrollarlo desde cero lo cual considero que me llevará mas tiempo pero tendré una mejor oportunidad para adaptarlo a mis necesidades. En un post posterior relataré mi experiencia tratando de desarrollar mi cliente de SVN.

Dejo además abierta la invitación a mis queridos lectores para sugerirme clientes de SVN que ustedes conozcan y consideren capaces de suplirme alguna de mis necesidades aquí planteadas y de compartirme sus experiencias en sus equipos de desarrollo por si alguno se ha topado con inconvenientes similares a los míos y ha llevado a cabo alguna solución alternativa.

Saludos.

lunes, agosto 01, 2011

Ser o no ser... jefe?

"Imagen ligeramente inspirada en hechos reales xD"

"¿Cómo se proyecta usted en su futuro de acá a diez años?" preguntó la encargada de recursos humanos que se encargó de hacerme la entrevista laboral. "Como coordinador de equipos de desarrollo o subgerente de IT" fue mi respuesta, sabiendo que la evolución lógica de un programador es a convertirse en jefe de equipos de desarrollo o subgerente y eso además me hacía ver visionario y con metas propuestas. Desde entonces esa había sido mi meta personal o mi aspiración para mi próximo puesto de trabajo una vez ganada experiencia y de ser posible mayores grados académicos. Hoy en día me pongo a pensar ¿es eso lo que realmente quiero hacer dentro de diez años?

Según mi experiencia hasta la fecha, cuando se trabaja en IT, a diferencia de otros puestos de trabajo dentro de una empresa, no se cuenta con muchos puestos de trabajo a los que uno puede aspirar si uno se encuentra en el primer escalón (programador, analista de QA, técnico de redes, sysadmin, etc). Mas bien, en la mayoría de los casos solo se cuenta con una línea vertical de puestos de trabajo a los que se puede aspirar y esa es, la del jefe directo de cada uno.

Sabiendo que lo más probable es que nuestro próximo puesto de trabajo al cual aspirar es al de jefe de equipos de IT (llámese coordinador, arquitecto de software, manager, subgerente o gerente), ¿es realmente ese el puesto al que queremos aspirar?

Sin pensarlo podríamos decir que si, ya que este nuevo puesto conlleva a nuevas responsabilidades, un aumento de autoridad y un mejor salario y mejores prestaciones laborales pero recientemente caí en la cuenta que al ser promovido a un puesto más administrativo te alejas del área que te apasiona, que te ha causado esa satisfacción que experimentas cada día que regresas del trabajo.

En IT se experimenta un extraño sentimiento de pasión por lo que se hace, es como si lo hicieramos mas por satisfacción personal que por un salario y el salario fuera mas un bonus o un medidor de reputación. La gran cantidad de proyectos Open Source son prueba de ello y la cantidad de programadores jubilados que siguen desarrollando sistemas por simple pasatiempo.

Un amigo me explicó hace unos días que, aunque se podría pensar que la evolución natural en el ámbito laboral es aspirar al puesto de trabajo del jefe inmediato, no todas las personas poseen las aptitudes y actitudes para ejercer las labores administrativas de un puesto de esta naturaleza por más experiencia y conocimiento que tengan y aun si las tuvieran, carecen del deseo para esta aspiración o solamente lo hacen por la pura necesidad de un aumento salarial o porque a los de recursos humanos no tienen idea de otro tipo de incentivo que compense los años laborales que un empleado brinda a la empresa.

Es obvio entonces que necesitamos recibir incentivos que compensen la trayectoria de un trabajador en un puesto de trabajo y se supone que una promoción a un puesto administrativo es el incentivo natural pero deberían haber alternativas a esto si la persona no está capacidada o no posee el deseo de aspirar a un puesto superior.

En lo personal no me considero capacitado (aún) para desarrollar las funciones administrativas relacionadas con el siguiente escalón en mi jerarquía de puestos de trabajo y a sabiendas que estando en ese puesto probablemente no sentiré la misma satisfacción que siento al programar me he quedado pensando en este dilema en el cual debo decidir si seguir con la corriente de aspirar al siguiente escalón o quedarme con lo que me apasiona buscando incentivos alternativos que lo compensen. Por el momento pienso seguir la corriente e investigar cuan satisfactorio es el siguiente escalón en el sentido personal y profesional.

¿Aspiran ustedes a obtener el puesto de sus jefes en un futuro?

lunes, julio 11, 2011

Los 25 Errores de Software Más Peligrosos del 2011

"SQL Injection. Una de las más peligrosas y comunes vulnerabilidades en los sistemas"

Recientemente me entero de una comunidad online de programadores y especialistas en seguridad que cada año se encargan de enumerar las vulnerabilidades de sistemas informáticos que más daño han realizado y que más se han popularizado entre los sistemas para que cada uno tome las medidas necesarias al momento de desarrollar sus sistemas especialmente cuando manejamos datos que al ser vulnerados causarían pérdidas significativas de información en nuestra empresa.

Esta comunidad, denominada Common Weakness Enumeration, liberó recientemente la lista de los 25 errores de software que más se han utilizado y que más daño han causado durante el presente año de manera que podamos tomarlos en cuenta para evitar que nuestros sistemas sean atacados.

Además de la lista, en el sitio puedes encontrar información detallada del error, las variaciones que pudieran existir del mismo, código fuente de ejemplo de utilización del ataque y posibles alternativas de corrección a las vulnerabilidades que este aprovecha. Es una fuente bastante completa de ítems a tomar en cuenta al momento de diseñar la seguridad de nuestro sitio. De hecho, si en su equipo de desarrollo o calidad no poseen un checklist de vulnerabilidades a cubrir, les recomiendo usar este sitio como referencia.

Me remito a describir en español las tres primeras vulnerabilidades de la lista:

1. La inadecuada neutralización de comandos especiales utilizados en SQL (A.K.A. SQL Injection). La número uno de la lista. Tal como lo ilustra la imagen del post, si utilizamos SQL simple para validar nuestras páginas de login, algo como por ejemplo:

"SELECT * FROM SYSTEM.USERS WHERE NAME = '" + inputBox1.text + "' AND PASSWORD = '" + inputBox2.text + "'";

cualquiera podría escribir cualquier comando SQL dentro de los textboxes y con suficiente astucia obtener acceso total al sistema saltándose la validación del login o peor aún, obteniendo acceso total a la base de datos.

Esto me recuerda a una vieja ilustración que XKCD elaboró para el día de las madres:

"...'Little Bobby Tables' xD"

En el blog de El Rincon de Cisko pueden encontrar más información en español acerca de este tema.

2. La inadecuada neutralización de comandos especiales utilizados en un sistema operativo (A.K.A. OS Command Injection). Aplica el mismo principio que el SQL Injection pero en este caso nos referimos a comandos del sistema operativo. Pueda ser menos común que nuestros programas ejecuten comandos directamente sobre el sistema operativo pero aunque sea menos común, esta vulnerabilidad es mucho más peligrosa que el SQL Injection ya que en el sistema operativo pueden residir no solamente el servidor de aplicaciones, servidor web y servidor de bases de datos sino muchos otros servicios sin mencionar que una vez que el atacante ha logrado ingresar a un servidor, es mucho más fácil que este logre acceso a cualquier otro servidor dentro de la intranet, especialmente si nuestro servidor de aplicaciones posee privilegios de administrador (root) lo cual es mencionado en otro elemento de la lista: "11. Ejecución de aplicaciones/servicios con privilegios mayores a los necesarios".

3. Copia de búffers sin la comprobación del tamaño del dato de entrada (Buffer Overflow). Este es nuevo para mí. Según la documentación del sitio leo que aplica mayormente para lenguajes de programación que no poseen un manejo automático de la memoria utilizada, como por ejemplo C y C++ ya que estos no revisan previamente si la porción de memoria donde se están escribiendo los datos está reservada para su fin o si su tamaño excede lo esperado y termina escribiéndose información en la memoria reservada del sistema operativo, por ejemplo.

La recomenadación para evitar esta vulnerabilidad consiste en verificar previamente el tamaño de los búffers de entrada, utilizar librerías o frameworks que realizan esta comprobación por nosotros o utilizar lenguajes de alto nivel que poseen un manejo automático de la memoria a utilizar por aplicación o grupo de aplicaciones.

Les recomiendo nuevamente y con gran énfasis leer el resto de la lista de vulnerabilidades y sus respectivos detalles técnicos, causas y soluciones para que como programadores y administradores de sistemas podamos dormir bien por las noches sin preocuparnos porque el operador nos va a llamar en la madrugada avisándonos que vulneraron un server y robaron información confidencial y valiosa de nuestra empresa. Mas aún teniendo en cuenta los recientes ataques de LulzSec, AntiSec y Anonymus.

vía Java Code Geeks.

miércoles, mayo 18, 2011

NinjaUI - Componentes UI Prefabricados con jQuery

"Página principal de Ninja UI. Un muy prometedor proyecto basado en jQuery"

Recientemente me doy cuenta del lanzamiento de este pequeño set de componentes javascript basados en jQuery que prometen ahorrarnos trabajo al momento de construir interfaces de usuario html/css/javascript. Para aquellos que ya han trabajado con anterioridad con el framework jQuery, este les parecerá muy similar a como lo hacemos hoy en día con jquery-ui.

En la página de ejemplos podrán notar todo lo que podemos construir haciendo uso de estos componentes. En lo personal los he estado probando un rato y me han parecido bastante buenos dado que a penas se encuentran en su primer fase beta. Hasta el momento no he observado en el sitio ningún tutorial pero podemos apreciar su uso examinando el código fuente de la página de ejemplos utilizando, por ejemplo, firebug desde firefox y según mis observaciones nada más consiste en crear un par de divs/spans y asignarle las respectivas clases css según el componente que querramos construir, lo cual me parece bastante bueno ya que están utilizando el javascript de manera no intrusiva.

"Examinando el código fuente de NinjaUI desde Firefox con Firebug"

Pueden descargar la versión Beta 1.0 (la ás reciente al momento de escribir este post) directamente desde la página principal o haciendo click aquí.

Mis expectativas para su próxima versión consisten en la posibilidad de venir con diferentes temas prefabricados y añadir aún más componentes como calendarios, popups modales y quizá explotar un poco mas los features de jQuery como draggable y animate.

Démosle una oportunidad y algo de tiempo y veamos hasta donde logra llegar este proyecto.

Visto en Kabytes.

lunes, abril 25, 2011

Maqetta, Nuevo IDE en la Nube


IBM presentó recientemente un nuevo IDE de desarrollo web con el cual pretende facilitarnos la vida al momento de diseñar el layout de nuestras aplicaciones y al mismo tiempo acercarnos a las nuevas bondades que el W3C nos ha traído con HTML5. Su nombre es Maqetta.

Lo mejor de todo es que, además de permitirte agregar y editar controles HTML de forma WYSIWYG, también incorpora controles visuales de librerías javascript populares como jQueryUI, Dijit (de Dojo) y YahooUI. Cuenta además con el reciente framework conocido como Dojox Mobile orientado, como su nombre lo indica, a los browsers de los dispositivos móviles.

"IDE Maqetta mostrando controles Dijit tanto en su forma WYSIWYG así como también en su versión código HTML" en paneles divididos horizontalmente"

Otras características importantes? El IDE está alojado en la nube lo cual nos evita tener que descargar muchos megabytes para contar con él lo cual también significa que nos consumirá una gran parte de la memoria RAM del equipo desde el navegador. Está construido haciendo uso del framework Dojo por lo cual la apariencia del IDE se les hará familiar para los que ya hayan ocupado este framework javascript. El proyecto está liberado bajo una licencia open source, la misma que posee el framework Dojo y pueden descargar su fuente de este link de github por si desean montar una copia local del IDE en sus equipos o en un server local.

Por el momento el proyecto aún se encuentra en una etapa bastante inicial por lo que no se asusten si se topan con uno que otro bug mientras lo prueban por lo que aun no es material para uso en los desarrollos de la vida diaria pero con un par de meses esperamos ver un producto un poco más usable.

Hay que tomar en cuenta que estamos hablando de un logro bastante ambicioso el que quieren alcanzar con este proyecto ya que como lo veo es básicamente lo que debió haber hecho Dreamweaver desde hace muchos años ya: incorporar para su diseño visual los controles javascript de las librerías más populares en la actualidad y la incursión de las novedades que vienen con HTML5 y CSS3.

"Demostración de las diferentes siluetas que se pueden utilizar para previsualizar las páginas web y la adaptación automática en la vista WYSIWYG"

Mas información en la página oficial del proyecto: maqetta.org

Puedes probar directamente el uso del IDE en este link.

sábado, abril 09, 2011

Google IO Live


Google IO es como las ya conocidas WWDC de Apple, donde se muestran las novedades en productos y desarrollos de esta empresa pero a diferencia de Apple, la conferencia de Google está orientada a todos aquellos desarrolladores que hacen uso de las APIs y frameworks que esta empresa provee y, aunque el ambiente no tiene a ese Steve Jobs mostrando la última maravilla del mundo, sí muestra a un grupo de desarrolladores de la empresa mucho más cercanos a su público y en un ambiente de comunidad y participación.

Fué sorprendente lo rápido que se agotaron las entradas a pesar de faltar un mes para el evento. Si no pudiste conseguir una entrada, Google nos permitirá asistir de forma virtual a la conferencia ofreciendo videostreaming durante la misma. Para ver la conferencia basta con entrar a la siguiente dirección durante el día del evento:


Como podrás ver, mientras no se llega el día del evento dicha página muestra una animación muy peculiar con la cuenta regresiva para el inicio del magno evento.

Además de la cuenta regresiva, en el vínculo anterior encontrarás toda la información que necesitas para entender un poco más en qué consiste Google IO, revisar la agenda de conferencias, mapa con la ubicación del lugar, entre otras cosas. Interesante ver que en la lista de sesiones el tema que más predomina entre todos es las novedades en Android y nuevas técnicas para su uso y extensión a otras plataformas.

sábado, enero 22, 2011

Una Imagen Vale Mas Que Mil Líneas de Código


Esta semana charlando con un colega de trabajo aprendí una importante lección sobre porqué unos programadores triunfan más que otros. Es cierto que existen muchos factores importantes para lograr un empleo decente como programador, ejemplo de ello son la experiencia, habilidad, conocimiento y persistencia pero hay un punto que he comprobado lo decisivo que puede ser para lograr el éxito: tu imagen profesional.

Él mismo me comentaba: "Yo no soy tan buen programador como X o Y pero sé muy bien como venderme ante mi jefe y eso me ha valido mas que mis habilidades". Comprendí que puedes ser el mejor programador pero si tu jefe no se da cuenta de ello, muchas veces tus esfuerzos son en vano o son aprovechados por otros más astutos.

A raíz de esta interesante charla elaboré las siguientes conclusiones:

Apropiarse de los sistemas que has desarrollado. Programaste un CRM tan user friendly que a los usuarios se les sube el autoestima al utilizarlo. Resolviste un bug de antaño en una aplicación que reduce significativamente sus tiempos de uso. Entregaste tus desarrollos con el tiempo suficiente para que e proyecto no saliera en rojo. Los usuarios están eufóricos porque dejaste sudor y lágrimas con tal de dejar hermoso ese sistema pero acaso ellos saben quien lo desarrolló? Quizá te estés perdiendo de muchas ovaciones porque nadie sabe que tu desarrollaste ese maravilloso sistema. Es importante apropiarse de lo que desarrollas. Así, aparte de recibir ovaciones si lo dejaste reluciente, sabrán a quién llamar cuando falle o requieran un cambio, lo cual visto desde el punto de vista positivo, te convierte en alguien fundamental para que dichos sistemas funcionen. Basta a veces con dejar tu autoría en el código fuente (ojo, no es lo mismo que aplicar copyrigths al código).

Evitar la apatía y el comportamiento antisocial. En los lugares de trabajo suelen existir grandes programadores, excelentes para encontrar bugs en horas, bugs que a todos los demás nos hubiera tomado semanas, grandes conocedores del lenguaje en el que programan pero a veces tienen un pequeño problema: los jefes no se dan cuenta de sus habilidades y su esfuerzo.Porque? porque llegan temprano, se sientan en su computadora, se encierran en su mundo y no escuchan más que a música que sale de sus audífonos, sin hablar con nadie mas. Almuerzan solos, nunca asisten a los eventos de convivencia ni se postulan como voluntarios para actividades extra laborales. Hacen su trabajo, lo hacen muy bien, sí, pero no hacen nada más que eso y poseen un comportamiento antisocial. Los charlistas y expositores motivacionales de hoy en día nos viven diciendo que hay que aprovechar la inteligencia emocional. Las emociones y el comportamiento del indivíduo son fundamentales para demostrar nuestra capacidad laboral. Es momento de escucharlos y aplicar sus consejos.

Exhibir tus logros y tu esfuerzo ante tu jefe. Quizá descubriste un bug antíguo en un programa que te tocó refactorizar y arreglar esto te tomó más tiempo que el estimado en tu plan de trabajo. Quizá hasta tuviste que quedarte horas extra o llegar los fines de semana con tal de cumplir con las fechas y al final nadie te dio ni siquiera un estimulante "gracias". Seguramente ni siquiera se dieron cuenta de tu sacrificio porque quizás ni siquiera les notificaste de ello. Es bueno siempre mantener informado a los superiores de los imprevistos pero no como "jefe, tenemos un problema" sino algo que suene mucho mejor y suene en beneficio de tu imagen, por ejemplo "jefe, ocurrió una catástrofe con el proyecto que hubiera impactado en las fechas de no ser porque con esfuerzo lo resolví durante el fin de semana...".

Considerar hacia dónde apuntar tu imagen. Pueda que seas el programador más respetado de las comunidades web de programadores locales pero seguramente tu jefe es un old-school a quien no le interesa qué tan famoso y respetado seas en la web y en tu lugar de trabajo nadie te conozca o a tus habilidades. Es importante que tu imagen brille donde más te convenga que lo haga. Si eres empleado, dala a conocer a tus colegas y superiores.

Darse a conocer sin perder la humildad. Todo se demuestra de mejor manera con hechos antes que con palabras. La iniciativa, la disposición para ayudar y la solidaridad son buenas herramientas.

Cabe mencionar que la recompensa de vender tu imagen no se verá de la noche a la mañana y a veces, si se tiene mala fortuna, el jefe no se interese en valorar y compensar a los mejores en su equipo pero la clave está en perseverar y si no basta con esto, buscar otro lugar donde sí valoren tu imagen como profesional.

Una Imagen Vale Mas Que Mil Líneas de Código


Esta semana charlando con un colega de trabajo aprendí una importante lección sobre porqué unos programadores triunfan más que otros. Es cierto que existen muchos factores importantes para lograr un empleo decente como programador, ejemplo de ello son la experiencia, habilidad, conocimiento y persistencia pero hay un punto que he comprobado lo decisivo que puede ser para lograr el éxito: tu imagen profesional.

Él mismo me comentaba: "Yo no soy tan buen programador como X o Y pero sé muy bien como venderme ante mi jefe y eso me ha valido mas que mis habilidades". Comprendí que puedes ser el mejor programador pero si tu jefe no se da cuenta de ello, muchas veces tus esfuerzos son en vano o son aprovechados por otros más astutos.

A raíz de esta interesante charla elaboré las siguientes conclusiones:

Apropiarse de los sistemas que has desarrollado. Programaste un CRM tan user friendly que a los usuarios se les sube el autoestima al utilizarlo. Resolviste un bug de antaño en una aplicación que reduce significativamente sus tiempos de uso. Entregaste tus desarrollos con el tiempo suficiente para que e proyecto no saliera en rojo. Los usuarios están eufóricos porque dejaste sudor y lágrimas con tal de dejar hermoso ese sistema pero acaso ellos saben quien lo desarrolló? Quizá te estés perdiendo de muchas ovaciones porque nadie sabe que tu desarrollaste ese maravilloso sistema. Es importante apropiarse de lo que desarrollas. Así, aparte de recibir ovaciones si lo dejaste reluciente, sabrán a quién llamar cuando falle o requieran un cambio, lo cual visto desde el punto de vista positivo, te convierte en alguien fundamental para que dichos sistemas funcionen. Basta a veces con dejar tu autoría en el código fuente (ojo, no es lo mismo que aplicar copyrigths al código).

Evitar la apatía y el comportamiento antisocial. En los lugares de trabajo suelen existir grandes programadores, excelentes para encontrar bugs en horas, bugs que a todos los demás nos hubiera tomado semanas, grandes conocedores del lenguaje en el que programan pero a veces tienen un pequeño problema: los jefes no se dan cuenta de sus habilidades y su esfuerzo.Porque? porque llegan temprano, se sientan en su computadora, se encierran en su mundo y no escuchan más que a música que sale de sus audífonos, sin hablar con nadie mas. Almuerzan solos, nunca asisten a los eventos de convivencia ni se postulan como voluntarios para actividades extra laborales. Hacen su trabajo, lo hacen muy bien, sí, pero no hacen nada más que eso y poseen un comportamiento antisocial. Los charlistas y expositores motivacionales de hoy en día nos viven diciendo que hay que aprovechar la inteligencia emocional. Las emociones y el comportamiento del indivíduo son fundamentales para demostrar nuestra capacidad laboral. Es momento de escucharlos y aplicar sus consejos.

Exhibir tus logros y tu esfuerzo ante tu jefe. Quizá descubriste un bug antíguo en un programa que te tocó refactorizar y arreglar esto te tomó más tiempo que el estimado en tu plan de trabajo. Quizá hasta tuviste que quedarte horas extra o llegar los fines de semana con tal de cumplir con las fechas y al final nadie te dio ni siquiera un estimulante "gracias". Seguramente ni siquiera se dieron cuenta de tu sacrificio porque quizás ni siquiera les notificaste de ello. Es bueno siempre mantener informado a los superiores de los imprevistos pero no como "jefe, tenemos un problema" sino algo que suene mucho mejor y suene en beneficio de tu imagen, por ejemplo "jefe, ocurrió una catástrofe con el proyecto que hubiera impactado en las fechas de no ser porque con esfuerzo lo resolví durante el fin de semana...".

Considerar hacia dónde apuntar tu imagen. Pueda que seas el programador más respetado de las comunidades web de programadores locales pero seguramente tu jefe es un old-school a quien no le interesa qué tan famoso y respetado seas en la web y en tu lugar de trabajo nadie te conozca o a tus habilidades. Es importante que tu imagen brille donde más te convenga que lo haga. Si eres empleado, dala a conocer a tus colegas y superiores.

Darse a conocer sin perder la humildad. Todo se demuestra de mejor manera con hechos antes que con palabras. La iniciativa, la disposición para ayudar y la solidaridad son buenas herramientas.

Cabe mencionar que la recompensa de vender tu imagen no se verá de la noche a la mañana y a veces, si se tiene mala fortuna, el jefe no se interese en valorar y compensar a los mejores en su equipo pero la clave está en perseverar y si no basta con esto, buscar otro lugar donde sí valoren tu imagen como profesional.

sábado, enero 08, 2011

Propósito de Año Nuevo: Un Nuevo Lenguaje de Programación.


Llegó el año nuevo y muchos suelen establecer propósitos que intentarán cumplir durante el nuevo año. Unos pueden proponerse hacer más ejercicio, conseguir un nuevo trabajo, procrastinar menos, etc. En esta ocasión les propongo como propósito aprender un nuevo lenguaje de programación.

Posiblemente seas ya un master en .Net, ya conozcas todo lo que se debe saber sobre los foundation y hasta tengas tu certificación. Quizá tengas años de experiencia trabajando con java y sus stacks, quizá spring, faces, ejbs. Quizá seas uno de los mejores con Python o Ruby o quizá tengas un enorme portafolio de sitios elaborados con PHP en tu currículum. Es muy importante escoger un lenguaje de programación, aferrarnos a el y conocerlo a fondo pero no debemos quedarnos hasta ahí. Es importante seguir avanzando y no necesariamente en la misma rama que ya dominamos porque llegará un momento en el que nuestro lenguaje ya no sea el más popular o el mejor pagado en el mercado y sea hora de migrar a uno nuevo.

Lenguajes de programación hay muchos allá afuera, unos más populares que otros, unos más fáciles que otros, con mayor o menor soporte, con su única manera de abstraer el mundo real y expresarlo mediante su sintaxis y frameworks. Cada lenguaje tiene su especialidad y principal enfoque y pueda que nos sea una ventaja conocerlo en algún momento.

Para todo aquel programador Java que a veces siente que le hace falta un poco de scripting language pero no quiere soltar las bondades del JDK es un buen momento para animarse a aprender Groovy. Un lenguaje que te permite experimentar esa agilidad del "write less, do more" haciendo uso de las ya conocidas bondades del JDK de java.

Posiblemente seas un programador de backends y siempre te ha impresionado la calidad de las interfaces gráficas que se pueden desarrollar hoy en día mediante CSS y Javascript. Puede ser un buen momento de pasarse al lado de los frontends y aprender un poco de jQuery, Scriptaculous o Motools y sacarle provecho a lo que estos frameworks pueden hacer con el DOM y el CSS de tus sitios.

En lo personal, siempre me he sentido esa apatía por el SQL y he sufrido mucho cuando he tenido que realizar grandes consultas
con SELECT anidados, JOINs y CASEs pero a la vez he podido comprobar la ventaja de utilizar procedimientos almacenados escritos con PL/SQL por lo que espero poder aprender y poner en práctica este lenguaje en este año.

En conclusión, un nuevo lenguaje de programación te abre la mente a una nueva forma de abstraer el mundo, resolver tus problemas/necesidades de información y escribir su lógica mediante una sintaxis diferente. Además, agregas una nueva habilidad a tu currículum por lo que te vuelves un profesional más valioso y con un horizonte más amplio de oportunidades de empleo. Documentación existe de sobra en la red por lo que esto nunca será una excusa mucho menos un obstáculo para aprender. Además, los programadores tendemos a tomar esa buena costumbre de volvernos autodidactas por lo que en la mayoía de las veces no es necesario pagar por cursos presenciales para aprender.

Qué nuevo lenguaje de programación les interesaría aprender este año?

martes, octubre 19, 2010

jQuery Mobile Al Fin!

"jQuery Mobile desde mi iPod Touch"


Llegó el momento de la verdad con el tan esperado release de jQuery para Móviles.


Por el momento aún se encuentra en versión Alpha1 por lo que no es nada más para que los interesados puedan empezar a jugar con el y mediante el feedback brindado, logren reparar los bugs, agregar features deseados y luego lanzar el release estable.

En la web existen actualmente varias librerías para desarrollar aplicaciones basadas en móviles, la mayoría emulando la bien elaborada interfaz del iOS pero sin lograrlo completamente. El que mas convencía era jQtouch, un plugin para jQuery que transforma elementos HTML en componentes de UI para móviles, pero este plugin aún se queda corto en cuanto a features y documentación por lo que este proyecto de jQuery Mobile ha sido esperado con ansias por muchos de nosotros.

En este link podemos encontrar un demo navegable desde un dispositivo móvil y en este otro link podemos contribuir en forma de donaciones, feedback o aportes al código fuente. Recuerden que esa es la ventaja de los proyectos open source, que es elaborado de forma libre por comunidades, para comunidades.

jQuery Mobile Al Fin!

"jQuery Mobile desde mi iPod Touch"


Llegó el momento de la verdad con el tan esperado release de jQuery para Móviles.


Por el momento aún se encuentra en versión Alpha1 por lo que no es nada más para que los interesados puedan empezar a jugar con el y mediante el feedback brindado, logren reparar los bugs, agregar features deseados y luego lanzar el release estable.

En la web existen actualmente varias librerías para desarrollar aplicaciones basadas en móviles, la mayoría emulando la bien elaborada interfaz del iOS pero sin lograrlo completamente. El que mas convencía era jQtouch, un plugin para jQuery que transforma elementos HTML en componentes de UI para móviles, pero este plugin aún se queda corto en cuanto a features y documentación por lo que este proyecto de jQuery Mobile ha sido esperado con ansias por muchos de nosotros.

En este link podemos encontrar un demo navegable desde un dispositivo móvil y en este otro link podemos contribuir en forma de donaciones, feedback o aportes al código fuente. Recuerden que esa es la ventaja de los proyectos open source, que es elaborado de forma libre por comunidades, para comunidades.

jueves, septiembre 30, 2010

Programación Ágil con Eclipse

Muchas veces hacemos uso de un IDE tan poderoso como eclipse y no aprovechamos todas sus ventajas porque quizás no sabíamos que este las tenía. Desde la versión Galileo y ahora con la nueva versión Helios, el entorno de desarrollo Eclipse ha agregado muchas mejoras a su IDE para hacernos la vida más fácil a la hora de programar en Java, especialmente cuando tienes que realizar grandes y repetitivas porciones de código. A continuación describimos algunas de ellas:

Source > Generate Getters and Setters: Es una opción que se encuentra desde versiones anteriores de eclipse, quizá desde la versión Europa pero muchos quizá aun no la conocían. Al momento de elaborar sus clases java pueden escribir únicamente sus miembros privados y desde esta opción pueden generar automáticamente los getters y setters para estos miembros.

"Opción Generate getters y setters en Eclipse"

Source > Generate Constructor Using Fields: Similar a la opción anterior. Una vez tengan todos sus miembros privados de la clase y desean crear un constructor que reciba parámetros para inicializarlos, basta con acceder a esta opción del menú y este se crea automáticamente.

Source > Generate toString: Esta opción es nueva para mi y está disponible desde la versión Galileo de Eclipse. Muchas veces para efectos de logging queremos imprimir en pantalla todos los valores que poseen los miembros de una clase pero si esta clase tiene demasiados miembros es muy difícil escribir un método toString() para mostrarlos todos. Este método nos automatiza esta tarea.

"Source > Generate toString() genera un método toString() mostrando los valores de los campos de la clase"


Autocompletado: Siglas en lugar de nombres de clases: Muchas veces tenemos que escribir nombres de clases realmente largos y al escribir las primeras tres letras el autocompletado (Ctrl + espacio) nos da demasiadas opciones como para encontrar la que buscamos. Recientemente me enteré que puedo digitar las siglas de una clase Java y Eclipse te muestra las clases cuyas letras formen esas siglas. Por ejemplo, en lugar de digitar EntityManagerFactory, puedes escribir nada más EMF:

"Autocompletando el nombre de la clase EntityManagerFactory con sus siglas EMF"

Si tu autocompletado es demasiado lento y tienes muchas clases cargadas en tu classpath que nunca utilizarás, puedes filtrarlas para que tu autocompletado cargue más rápido. En las preferencias (Window > Preferences) selecciona Java > Appearance > Type filters y filtra los paquetes de clases que no deseas que te aparezcan en el autocompletado.

Export > Runnable Jar File: Ahora Eclipse nos permite exportar nuestros archivos Jar empaquetados (o enlazados, según configuración) con todas las dependencias necesarias disponibles para la ejecución del Jar a generar.

"Opciones para exportar el Runnable Jar"

Source > Surround With: Otra tarea mecánica es quizá agregar for, while, if o try/catch. Eclipse puede ayudarnos a encerrar sentencias de código en cláusulas for, while, if o try/catch mediante la opción Source > Surround With. Si se trata de un try/catch, el IDE generalmente nos remarca las líneas de código que puedan disparar una excepción y en un tooltip nos mostrará un vínculo directo a la opción Surround With Try/catch.

"Cuando una sentencia puede disparar una excepción, el IDE nos puede encerrar automáticamente esta sentencia en un bloque try/catch"

Atajos de Teclado: Eclipse es aun mas fácil de usar si te memorizas sus atajos de teclado. En este vínculo puedes descargar un PDF con los shortcuts más comunes para Eclipse desde la versión 3.0 en adelante. Algunos comunes son como por ejemplo:

  • Ctrl + T para búsqueda de una clase Java dentro de tu proyecto y buildpath
  • Ctrl + O para buscar un miembro dentro de una clase
  • Alt + Shift + X para ejecutar tu proyecto (con las variaciones J para proyecto java, T para unit test, R para ejecutar en servidor de aplicaciones, etc)
  • Alt + Shift + Z (teniendo seleccionadas las líneas a encerrar) para mostrar las opciones de Surround With
  • Ctrl + Shift + C para comentar una o varias líneas
  • F3 para ir a la declaración de una clase o un miembro de una clase

Además de las características propias del IDE, Eclipse tiene la ventaja de poseer una variedad de plugins para extender su funcionamiento. Un ejemplo de ello es el plugin para Grepcode, un buscador online para examinar código fuente de clases Java.

"Grepcode mostrando el código fuente de la clase EntityManager"

Programación Ágil con Eclipse

Muchas veces hacemos uso de un IDE tan poderoso como eclipse y no aprovechamos todas sus ventajas porque quizás no sabíamos que este las tenía. Desde la versión Galileo y ahora con la nueva versión Helios, el entorno de desarrollo Eclipse ha agregado muchas mejoras a su IDE para hacernos la vida más fácil a la hora de programar en Java, especialmente cuando tienes que realizar grandes y repetitivas porciones de código. A continuación describimos algunas de ellas:

Source > Generate Getters and Setters: Es una opción que se encuentra desde versiones anteriores de eclipse, quizá desde la versión Europa pero muchos quizá aun no la conocían. Al momento de elaborar sus clases java pueden escribir únicamente sus miembros privados y desde esta opción pueden generar automáticamente los getters y setters para estos miembros.

"Opción Generate getters y setters en Eclipse"

Source > Generate Constructor Using Fields: Similar a la opción anterior. Una vez tengan todos sus miembros privados de la clase y desean crear un constructor que reciba parámetros para inicializarlos, basta con acceder a esta opción del menú y este se crea automáticamente.

Source > Generate toString: Esta opción es nueva para mi y está disponible desde la versión Galileo de Eclipse. Muchas veces para efectos de logging queremos imprimir en pantalla todos los valores que poseen los miembros de una clase pero si esta clase tiene demasiados miembros es muy difícil escribir un método toString() para mostrarlos todos. Este método nos automatiza esta tarea.

"Source > Generate toString() genera un método toString() mostrando los valores de los campos de la clase"


Autocompletado: Siglas en lugar de nombres de clases: Muchas veces tenemos que escribir nombres de clases realmente largos y al escribir las primeras tres letras el autocompletado (Ctrl + espacio) nos da demasiadas opciones como para encontrar la que buscamos. Recientemente me enteré que puedo digitar las siglas de una clase Java y Eclipse te muestra las clases cuyas letras formen esas siglas. Por ejemplo, en lugar de digitar EntityManagerFactory, puedes escribir nada más EMF:

"Autocompletando el nombre de la clase EntityManagerFactory con sus siglas EMF"

Si tu autocompletado es demasiado lento y tienes muchas clases cargadas en tu classpath que nunca utilizarás, puedes filtrarlas para que tu autocompletado cargue más rápido. En las preferencias (Window > Preferences) selecciona Java > Appearance > Type filters y filtra los paquetes de clases que no deseas que te aparezcan en el autocompletado.

Export > Runnable Jar File: Ahora Eclipse nos permite exportar nuestros archivos Jar empaquetados (o enlazados, según configuración) con todas las dependencias necesarias disponibles para la ejecución del Jar a generar.

"Opciones para exportar el Runnable Jar"

Source > Surround With: Otra tarea mecánica es quizá agregar for, while, if o try/catch. Eclipse puede ayudarnos a encerrar sentencias de código en cláusulas for, while, if o try/catch mediante la opción Source > Surround With. Si se trata de un try/catch, el IDE generalmente nos remarca las líneas de código que puedan disparar una excepción y en un tooltip nos mostrará un vínculo directo a la opción Surround With Try/catch.

"Cuando una sentencia puede disparar una excepción, el IDE nos puede encerrar automáticamente esta sentencia en un bloque try/catch"

Atajos de Teclado: Eclipse es aun mas fácil de usar si te memorizas sus atajos de teclado. En este vínculo puedes descargar un PDF con los shortcuts más comunes para Eclipse desde la versión 3.0 en adelante. Algunos comunes son como por ejemplo:

  • Ctrl + T para búsqueda de una clase Java dentro de tu proyecto y buildpath
  • Ctrl + O para buscar un miembro dentro de una clase
  • Alt + Shift + X para ejecutar tu proyecto (con las variaciones J para proyecto java, T para unit test, R para ejecutar en servidor de aplicaciones, etc)
  • Alt + Shift + Z (teniendo seleccionadas las líneas a encerrar) para mostrar las opciones de Surround With
  • Ctrl + Shift + C para comentar una o varias líneas
  • F3 para ir a la declaración de una clase o un miembro de una clase

Además de las características propias del IDE, Eclipse tiene la ventaja de poseer una variedad de plugins para extender su funcionamiento. Un ejemplo de ello es el plugin para Grepcode, un buscador online para examinar código fuente de clases Java.

"Grepcode mostrando el código fuente de la clase EntityManager"

Sunsetting Sr. Byte.

El Sr. Byte ha estado más de 5 años inactivo. Digamos que estaba en " code freeze ". Pero ahora es el último release. Quizas no...