Archive

Archive for January, 2009

Proyección del Blog

January 27th, 2009 1 comment

Este blog ha tenido y tendrá claramente una orientación técnica, evitando la inclusión de información de tipo personal u otros temas diferentes a tecnología de desarrollo de Software y relacionados, eso es claro. Con el pasar del tiempo, luego de más de una semana desde mi primera publicación, van surgiendo ideas acerca de la orientación y objetivos del contenido. Concretamente me refiero al deseo de ir generando una mayor influencia social y cultural dentro de nuestro medio (Arquitectura y Desarrollo de Software).

Motivación

Mi padre siempre me ha repetido ese dicho que dice “el que enseña, aprende dos veces” y que cierto es, una vez uno explica un tema, está afianzando su conocimiento y si a eso le sumamos lo que decía Albert Einstein, "No entiendes realmente algo a menos que seas capaz de explicárselo a tu abuela", bueno, seguramente el nivel de los que lean estos artículos será muy superior al de una de nuestras abuelitas, pero el punto es que mis publicaciones están motivadas no solo por el deseo de compartir mi conocimiento, sino también el de aprender, crecer con mis lectores, pues la misma necesidad de escribirles me impulsa a investigar y explorar nuevos temas.

Otro de los motivos para esforzarme en una labor más social es mi reciente y cada vez más fuerte cambio de mentalidad, pues debo reconocer que antes pensaba demasiado cerrado, es decir, buscaba siempre hacer software comercial y que cada parte de él fuera desarrollado en casa. Hoy por hoy, debo decir que no soy ni muy Bill Gates ni muy Richard Stallman (el agua y el aceite), pues estoy abierto a escuchar muchas ideologías e influencias para no perderme de nada bueno por estar cerrado a la defensa y promoción casi religiosa de las tecnologías y productos de una organización o movimiento. Lo razonable es lograr un punto de equilibrio y no irse a los extremos, buscar la mejor productividad usando lo bueno de cada cual sin comprometerse demasiado. Sin embargo, debo aclarar de que sigo y seguiré girando entorno a .NET, uno debe escoger algo para ser bueno en eso y desde hace tiempo que uso .NET, me satisface y me motiva por su ritmo acelerado de crecimiento.

Específicamente, me atrae la idea de trabajar proyectos de Software Libre y Código Abierto, insisto, sin irme a los extremos; dejando un poco atrás el recelo por ocultar a y evitar el robo de nuestro código fuente, al mejor estilo de la receta de la Coca-Cola. Esto no solo me libera de una gran carga y temores infundados, sino que me abre las puertas a otras posibilidades de negocios más orientadas a los servicios y a la cooperación, pero de eso ya escribiré en otra oportunidad. Ha influido mucho en mi el gran éxito obtenido por cada vez más gurús, proyectos y comunidades, al emplear como estrategias la colaboración y retroalimentación que puedan ofrecer y recibir de sus lectores o compañeros de equipo, y ver que realmente funciona, obtienen productos de mucha calidad, amplia aceptación y porque no decirlo, buenos ingresos.

De mención especial es la influencia que ha ejercido en mi pensamiento Alberto Arroyo, cofundador de la organización codesol y fundador de la comunidad CslaNet.org, en la que actualmente también colaboro como miembro coordinador o administrador. Alberto ya lleva algunos años trabajando con la aplicación de tecnologías .NET a proyectos de Software Libre y Código Abierto, desde cuando hacerlo era todo un desafío, ahora juntos con un grupo de colaboradores cada vez más amplio, impulsamos la adopción del excelente Framework para objetos de negocio CSLA.NET.

Objetivos

Deseo contribuir con mis publicaciones y trabajo a las comunidades, grupos y organizaciones de desarrolladores de habla hispana en el incremento de la productividad de negocios. Es una realidad que en nuestra región se desconocen, debido a las brechas culturales o de idioma, excelentes recursos que ya se encuentran a nuestra disposición para desarrollar Software de calidad. Para esto considero muy importante el establecer alianzas de cooperación para impulsar la adopción y desarrollo de estos recursos.

Proceso

En este momento estoy trabajando para incrementar el número y frecuencia de mis publicaciones técnicas, dándoles un orden lógico y progresivo, al tiempo que me brinda más experiencia. Paralelamente a esto, estoy trabajando en consolidar una organización más formal, de la cual este blog sería una parte, para realizar muchas de estas ideas a la vez que ofrezco servicios complementarios; por eso estoy definiendo una imagen apropiada (logotipo, lema, colores, diseño entre otros).

Reconozco que para que una sola persona no puede constituir un movimiento social, en este caso de orientación técnica por supuesto, se requieren alianzas estratégicas y por ello estaré adelantando contactos con algunas organizaciones en busca de promoción y colaboradores, luego estaré comentando de los casos que se vayan materializando. Por ahora he establecido un fuerte lazo de trabajo colaborativo con la comunidad CslaNet.org que tiene metas ambiciosas en las que ya se están trabajando proyectos comunes de gran envergadura; a propósito, aún se están reclutando miembros (para los interesados).

Contenido

Quiero hacer referencia a algunos tipos de material que iré incluyendo poco a poco como entradas en este blog.

  • Artículos:  Me apasiona el tema de la arquitectura de software, diseñar con calidad con lo mejor que conozca, es por eso que le daré prioridad sobre las herramientas de desarrollo y cuando me refiera a estas últimas, lo haré porque ayuda a aplicar alguna arquitectura en especial. Los Tips tendrán cabida, algunos fruto de mi experiencia profesional y otros que transmitiré de Gurús y Geeks, en estos casos trataré de hacer referencia a su fuente, pues soy respetuoso de los derechos de autor y que cada quien merece su reconocimiento.
  • Opinión:  soy muy estudioso, especialmente me gusta explorar libros, comunidades y grupos de usuarios, nuevas tecnologías y frameworks. Cuando me tomo la tarea de aprender sobre alguno de estos recursos no lo hago a ciegas, pues primero investigo bastante sobre las críticas y experiencias de expertos, luego las exploro y me formo mi propio criterio; entonces eso será lo que publicaré con el suficiente sustento de mi pensamiento.
  • Tutoriales:  Creo que todos, en el medio, sabemos lo que es un “Hola mundo”, bueno, pues ¿no es cierto que a veces nos cansan los Holamundos?, en realidad no es en si ese recurso, pues es muy útil al ser la entrada y primer contacto con algo que es nuevo para nosotros. El problema reside en que es común que no se continúe, no profundice y no sea aplicable en el mundo real, sino que ahí termine toda la explicación, nos dejan iniciados, y luego nos dirigen a una documentación compleja de APIs; un salto muy brusco entre sencillez y complejidad. Siendo consciente de esta problemática, deseo elaborar una serie de tutoriales encadenados en los que paso a paso se podrá ir escalonando de lo sencillo a lo complejo. En algunos casos incluiré videos y otros recursos didácticos pues la finalidad es que sean prácticos más que educativos y aplicables al mundo real en aplicaciones de negocios funcionales.
  • Proyectos:  Ya he mencionado mi orientación hacia el Software Libre y Código Abierto además del gran valor del trabajo colaborativo. En el momento estoy trabajando en la definición de algunos proyectos junto con CslaNet.org y seguramente vendrán muchos a medida que vayamos terminando los primeros, según lo vaya dictando la necesidad nuestros beneficiarios en prospecto. Eso si, puedo asegurar que en todos se aplicarán buenas prácticas y estándares con el fin de obtener Software sólido. Si alguno de los lectores desea relacionarse conmigo para este propósito, con gusto será bienvenido para considerar sus ideas.

Es conveniente enfatizar el carácter profesional de este blog, por eso trataré de no desviarme de lo meramente técnico, claro sin irme al extremo de ser demasiado rígido. En general, estoy abierto a la discusión y opiniones de los lectores de mis publicaciones, así como a la participación directa en algunos de mis materiales.

Conclusión

Finalmente quiero invitarlos a seguir este blog y a compartirlo con otros, para tal fin he agregado un nuevo plugin ShareThis que se puede encontrar al pie de cada entrada publicada, para que con él puedan enviar estas publicaciones a otras personas a quienes pudiera interesar y benefinicarse; también pueden suscribirse a mis Feeds (fuente web). Para mi es muy importante la retroalimentación, escribiendo sus comentarios pueden influir en la mejora de mi labor.

El Software Ideal, Software “LEGO”*

January 23rd, 2009 No comments

¿Han soñado alguna vez con disponer de un software que se pueda amoldar a casi cualquier tipo de negocio, al menos los más comunes, y que según vayan surgiendo nuevos requerimientos como un nuevo negocio, aplicación, módulo, ventana, proceso o lo que sea, simplemente tengan que desarrollar un(os) sencillo(s) bloques de software que utilicen los bloques que ya estaban hechos, quizá removiendo o remplazando algunos y que todos estos bloques integrados conformen una sola estructura estable y coherente?

Ahora permítanme hacer una analogía con algo muy sencillo para que me comprendan mejor. Recuerdo que en mi infancia, mi juego favorito era uno llamado Armotodo, un sistema de fichas tipo LEGO*, seguramente ustedes están familiarizados con dicho juego y por eso no es necesario que me extienda en su descripción, baste con decir que se compone de un conjunto de piezas o bloques de distintas formas y colores que se podían unir para conformar lo que uno quisiera; de hecho parte del Jingle (lema con melodía) decía “todas las figuras que tu quieras construir”.

Seguramente eso les dará una idea la idea tras este tipo de software, pero antes de detallar sus posibles características, analicemos algunos de los problemas y necesidades que trataría de subsanar. Frecuentemente a la hora de encararnos a un nuevo proyecto de desarrollo buscamos reutilizar lo que ya teníamos, recurriendo a copiar, pegar y modificar código, haciendo esto sucesivamente se va creando redundancia y el desarrollo se va haciendo inmantenible.

¿Qué hacer entonces?, bueno, volviendo al Armotodo, este sistema aplica muchas ideas y principios útiles que deben balancearse de manera equilibrada.

Principios

Cada clase de bloque del Armotodo (componente) es única, su forma, color, tamaño y otros, hacen que tenga un propósito definido y diferente o complementario a los demás. En el software, se requiere que los componentes sean fuertemente cohesivos, en su interior pueden suceder muchas cosas, pero al resto de componentes no les debe interesar esto, solo sus propiedades y comportamiento, esto es, un acoplamiento débil. Los bloques conservan una interfaz común (taches y hendiduras) Los componentes deben respetar un lenguaje común aplicando estándares materializados en interfaces efectivas.

Lo único constante es el cambio y eso se puede asimilar con dos cosas reutilización y extensión, el primero es claro, debemos lograr crear componentes no perfectos pero si muy estables, algunos de propósito común como la autenticación de usuarios, encriptación y así por el estilo, otros con una finalidad muy específica, pero siempre pensando en que sean un bloque que podamos volver a incluir en un sistema diferente o en otra parte del mismo para no perder el conocimiento que ya hemos desarrollado. en cuanto a la extensión, siempre deberíamos buscar, en lo posible, no alterar nuestros componentes, de la misma manera que un niño no buscaría aserrar sus bloques para conseguir lo que busca sino que más bien consigue el bloque con las características esperadas y lo agrega a su estructura, para nosotros, crear o mejorar nuestras aplicaciones debe implicar extender.

Los términos claves hasta ahora han sido componente, cohesión fuerte, acoplamiento débil, reutilización y extensión, pero esto necesariamente debe ir acompañado de mantenibilidad o capacidad de mantenimiento, volviendo otra vez a la analogía, seguramente hemos visto como algunos niños comienzan a apilar un bloque encima de otro hasta que la columna finalmente se descompone al caer; debemos vigilar como construimos nuestra estructura para que al tiempo que construimos la afiancemos para que en el futuro sea fácil y efectivo efectuar ajustes.

Cuidados

Hay que ser razonables y tener cuidado para no terminar armando un Sistema o software Frankeninstein, de la misma forma que algunos pueden construir obras de arte con piezas LEGO*, otros hacen cosas sin sentido, hay que tener cierto talento y organización para mantener coherencia y estabilidad en nuestros desarrollos, haciendo selección cuidadosa de cada plan de desarrollo de un nuevo bloque o integración.

Recursos

Hay muchos estándares, prácticas, principios, técnicas y metodologías que se relacionan con las ideas que he expuesto en esta publicación, pero quisiera hacer mención especial de los Frameworks, hay para todo, por eso hay que tener cuidado en su selección, pero un tipo de Framework indispensable es de Inyección de Dependencia (DI) pues lo que nos permite pegar los componentes y/o intercambiarlos según las necesidades, haciendo uso de interfaces efectivas. En cualquier caso, hay que seleccionar cuidadosamente que recursos se emplean, pues algunos son muy compatibles entre sí, mientras que otros chocan.

Hay bastantes modelos, obviamente muchos otros ya han abordado la necesidad de software integrado, para citar un solo caso, el trabajo del grupo P&P (Patterns and Practices) con proyectos como Enterprise Library, SCSF, WCSF, WSSF y más recientemente Prism, todos ellos con una estructura modular, que aplica algunas de las ideas comentadas aquí.

Finalmente, quiero mencionarles que si bien este artículo ha sido muy general, pues no ha entrado en detalles para describir algunas tecnologías referidas en esta entrada, estos temas los estaré tratando más adelante, uno por uno progresivamente al tiempo que voy desarrollando unos tutoriales que serán más que simples Holamundos.

*LEGO es una marca registrada

Categories: Arquitectura, Desarrollo, Diseño Tags:

Temas para Visual Studio

January 21st, 2009 2 comments

Para quienes pasamos horas y horas frente a la pantalla de nuestro PC y gran parte de ese tiempo desarrollando con Visual Studio, es conveniente aprovechar cualquier recursos para proteger nuestros ojos, la siguiente es una colección de temas que podemos usar, según nuestro gusto, para disponer de colores que sean más amigables con nuestra vista. En el subtítulo encontrarás el enlace al artículo o nota que describe el tema, seguido de un enlace directo a la descarga del archivo y un screenshot (pantalla de captura).

Zenburn

Enlace de descarga: http://www.codinghorror.com/blog/files/exported-font-and-colors-zenburn.zip

zenburn-scheme

DarkGrey

Enlace de descarga: http://geeks.ms/blogs/eortuno/Themes_IDE_VS.zip

2008-DarkGrey

BrianDiCroce

Enlace de descarga: http://www.briandicroce.com/_public/BrianDiCroce-VS2008-FontColors.zip

BrianDiCroce-VS2008-FontColors

jflam

Enlace de descarga: http://www.iunknown.com/files/jflam.vssettings

jflam

Oren Ellenbogen

Enlace de descarga: http://www.lnbogen.com/ct.ashx?id=fc104328-6299-4eb1-a203-84b686aa4c5b&url=http%3a%2f%2fwww.lnbogen.com%2fcontent%2fbinary%2fOrenEllenbogen_DarkSchema.rar

OrenEllenbogen_DarkSchema

Tanzim Saqib

Enlace de descarga: http://tanzimsaqib.com/wp-content/uploads/2008/11/TanzimSaqib-DarkTheme.zip

TanzimSaqib-DarkTheme

VibrantInk V2

Enlace de descarga: http://www.wekeroad.com/VibrantInk_V2_Export.zip

VibrantInk_V2_Export

CONCLUSION

Como pueden notar, hay mucho de donde escoger, si quieres más detalles y opiniones de expertos respecto a este tema y recursos relacionados, les recomiendo que visiten los siguientes enlaces:

Protege tus ojos con temas de Visual Studio
Visual Studio2008 Themes

También, si deseas unificar el aspecto visual con el de tu Windows XP (si es el que usas), puedes usar uno de los temas creados por Microsoft (no oficiales) para este sistema operativo. Son al menos tres temas para Windows XP Royale, Royale Noir y Zune, son muy similares a los temas para Visual Studio que relacioné en esta publicación, solo debes encontrar la combinación perfecta. Los enlaces de descarga, así como una breve descripción y guía para la instalación, los puedes encontrar en Unofficial Windows XP Themes Created by Microsoft.

Categories: Visual Studio Tags:

Compartiendo mi Blogroll

January 19th, 2009 No comments

Definitivamente, si queremos aprender, no solo desarrollo de software sino de cualquier cosa, la lectura es necesaria, y con Internet pues hay tanto material que nos puede abrumar y confundir. Si están iniciando en este cuento del desarrollo de software, desean mejorar o incluso si se consideran expertos, esta publicación te será muy útil.

Como lo indica el título de esta entrada, estoy compartiendo uno de mis grandes tesoros, mi selección de blogs y comunidades favoritos que leo y considero más importantes, de hecho no solo yo, sino gran parte de la comunidad especializada, en realidad tengo muchos, pero se puede decir que estos son la crema de la crema. Eso si, les garantizo que no encontrarán en estos sitios muchos chistes, revisiones sobre Gadgets, consolas de juego y todas esas cosas que a muchos nos pueden gustar, pero definitivamente los autores de estos sitios tienen muchas cosas más importantes sobre las cuales escribir y enseñarnos. Eso si, casi todos están en Inglés.

Bueno, sin más preámbulos, esta es mi lista con sus respectivas descripciones:

Martin Fowler

Es un gran mentor de la industria, ha definido y le ha puesto nombre a muchos de los patrones de diseño que usamos hoy día, por lo que frecuentemente es citado en muchos libros, conferencias y sitios Web de renombre.

Ayende Rahien

Es otro de los grandes gurús del medio como arquitecto y desarrollador. Se podría decir que es fanático de los frameworks, de hecho, ha desarrollado o contribuido en varios de código abierto, tales como NHibernate, Castle, Rhino Mocks, NHibernate Query Analyzer, Rhino Commons, etc. ¿ah, qué tal la listica?. Si quieres aprender de estas muy necesarias herramientas, debes leer su sitio.

Scott Hanselman

El es uno de los hombres fuertes de Microsoft, consultor  en muchos de sus productos, frecuentemente está haciendo análisis, revisiones y enseñando como usar muchos productos de esta plataforma.

Scott Guthrie

Vicepresidente corporativo del área de desarrolladores de .NET, por lo que es indiscutible su criterio para hablar acerca de estos temas. Obviamente, todo lo que escribe gira en torno a .NET.

Code Better, Devlicio.us, Los Techies

Son tres grupos de bloggers asociados, todos son prestigiosos desarrolladores de software, especializados en tecnologías Microsoft, particularmente .NET. Al tener numerosos escritores, publican bastante información de manera frecuente.

Object Mentor

Tiene un propósito muy similar al de Martin Fowler, pero en este caso no es una persona sino personas. Estos expertos de la industria del software proveen numerosos recursos y artículos sobre buenas prácticas de diseño de software.

Rockford Lhotka

Prestigioso arquitecto de software, creador de CSLA.NET (framework para capa de negocios) Ha escrito varios libros y artículos, así como webcast que no solo enseñan como usar su excelente framework, sino que también ayudan a comprender maneras eficaces de diseñar objetos.

Jimmy Nilsson

Autor del libro Applying Domain-Driven Design and Patterns, el cual es una biblia para el desarrollador de software, pues recoge un montón de buenas prácticas y herramientas. Por supuesto, todos los artículos publicados en su blog son de igual calidad.

Jeremy D. Miller

Reconocido por ser el creador del framework de Inyección de Dependencia StructureMap, el cual fue el primero para .NET y hoy es uno de los mejores. Pero él no solo escribe acerca de su framework, también lo hace acerca de muchos temas relacionados.

James Kovacs’

Este arquitecto y desarrollador de software se especializa en desarrollo ágil usando .NET Framework, usando técnicas como test-driven development (TDD), pruebas unitarias, mapeo objeto-relacional, inyección de dependencia, refactoring, continuous integration, y otras relacionadas.

DotNetSlackers, asp alliance, CoDe Magazine

Son tres distintos magazines en línea que tienen el mismo propósito, informar a sus lectores acerca de las novedades en el mundo de .NET y otros tópicos de tecnología.

CslaNet.org

Es una comunidad nueva de desarrolladores, de la cual soy miembro activo, como lo indica su nombre, está orientada al framework CSLA.NET, específicamente para impulsar su aprendizaje y adopción en la comunidad hispana. Últimamente, se están forjando allí interesantes proyectos de desarrollo de gran envergadura.

dnrTV

En este sitio se encuentran videos de entrenamiento (Demos) sobre tecnologías .NET, los cuales demuestran paso a paso como desarrollar aplicaciones, aplicar patrones de diseño, usar herramientas, etc. Si bien, los videos son hablados en Inglés, es muy fácil comprenderlos, pues solo hay que observar y seguir atentamente lo que ocurre en pantalla.

Este es mi Top en sitios web para mantenernos informados de cada movimiento de nuestro mundo .NET. Por supuesto, también recomiendo que se suscriban a este Blog, el cual irá creciendo para enseñarte cosas que me han sido muy útiles y otras que estoy aprendiendo, con este enlace http://feeds2.feedburner.com/GambasoftNet.

Bienvenida, primera entrada

January 13th, 2009 No comments

El mes pasado comencé a alistar lo necesario para alistar este Sitio Web y es que uno cuando va llegando al tercer piso (los 30 años) comienza a preguntarse qué ha hecho hasta este momento de la vida, profesionalmente en este caso, más importante aún, qué ha dejado o aportado. Bueno, pues este sitio nace del deseo de compartir parte de mi experiencia en el desarrollo de software, software de calidad.

Estoy programando prácticamente desde los 12 años, cuando descubrí gwBasic, cuando aún reinaban D.O.S., WordStar, Lotus 123 y así por el estilo. Ya avanzando el tiempo, he trabajado con empresas de servicios públicos, casas de software y asesor independiente en tecnologías de información. Finalmente me he quedado en esta última ocupación proveyendo servicios y productos, principalmente de software.

En unos meses estaré abriendo otro sitio web paralelo, pero esta vez comercial, de eso hablaré en su debido momento, sin embargo este sitio (www.jorgegamba.com) siempre se mantendrá abierto a la comunidad de desarrolladores interesados, pensando en contribuir, compartir, enseñar, aportar, colaborar, etc.

La necesidad parte de mi propia experiencia, comprendiendo éxitos y fracasos, tal vez se identifiquen conmigo cuando digo que en mis inicios mi circulo de conocimiento solo cubría los PC, plataforma Windows (todo lo que proviniera de Microsoft), hacíamos programitas de escritorio en Visual Basic 6.0 con una basecita de datos en Access (.mdb), metíamos todo nuestro código de cientos de líneas por subrutina, muchas veces hardcodeado, en el mismo formulario (porque ni sabíamos qué era una clase). Ah? qué tal? tal vez algunos de los lectores pasaron por esto hace mucho tiempo como en mi caso o tal vez aún estén sufriendo de algunas de estas dificultades, pues precisamente a todas estas personas es que quiero llegar, que sean o deseen ser desarrolladores. No se confundan, el sitio no tiene una orientación hacia un nivel principiante, simplemente es uno de sus niveles, pues también incluiré, incluso tal vez más frecuente, temas de los niveles intermedio y avanzado.

Si bien no estoy casado con un tipo de tecnología específica, lo que mejor manejo gira en torno a .Net con lenguaje C#. Tengo el principio de, en lo posible, siempre emplear tecnología de punta, pero una vez esta ha logrado estabilidad y amplio reconocimiento de especialistas. Es así como incluiré herramientas, frameworks, patrones, prácticas y principios, con sus respectivas revisiones y recomendaciones. Estaré haciendo frecuente referencia al pensamiento, opiniones y discusiones de respetados gurus y comunidades de nuestro medio, poco a poco se los iré presentando en algunas publicaciones de este sitio.

Algunos de los temas que iré cubriendo y que a la vez son las categorías iniciales para organizar mis publicaciones, son:

  • Arquitectura
  • Diseño
  • Libros
  • .NET
  • ALT.NET
  • Agile
  • Pruebas Unitarias
  • Test Driven Development (TDD)
  • Inyección de Dependencia (DI)
  • ORM
  • Bases de Datos
  • Visual Studio
  • C#
  • CSLA.NET
  • NHibernate
  • Prism V2
  • Silverlight
  • WPF

Como hice referencia antes, este sitio está totalmente abierto, a la opinión y participación de cualquier persona, quiero tal vez ahorrarle trabajo a algunos, aprender de otros, en fin, es muy valiosa para mi la opinión de ustedes y seguramente lo será para muchos también. Trataré de ser muy breve y conciso en las publicaciones que sucederán a esta.

Finalmente, los invito a que manifiesten sus comentarios y que se suscriban a mis publicaciones RSS, o si lo prefieren mediante correo, también en la barra superior derecha lo podrán hacer.

Categories: General Tags: