domingo, 16 de diciembre de 2007

¿Cuanto es ganar bien?

La revista mexicana SG Software Guru ha publicado su encuesta de salarios informáticos 2007. La encuesta fue contestada por mas de 2,300 profesionales de sistemas de toda latinoamerica (mayormente de México desde luego) y arroja unos datos dignos de leerse de principio a fin, imprimirlos por triplicado y dejársela en los escritorios a muchos jefes :)

Nada mas para empezar: ¿en que tipo de organización trabajan? ¿Como les pagan? ¿Que escolaridad tienen? ¿Que antigüedad tienen en su empleo actual? ¿Cuanto ganan? Los promedios de salario también están por estado de la república, por país, por función, por edad y por escolaridad.

Las que me llaman mas la atención son las gráficas de conocimientos por habilidades, es decir: ¿Que lenguaje/plataforma/base de datos/etc  saben? y cuanto ganan en promedio. También que promedio de ingreso tienen las certificaciones (Cisco, Oracle, SAP, Project Managment, Java, etc.)

La mayoría de los datos de la encuesta pueden ser consultados como articulo en el portal web de la revista. Recomiendo mil veces suscribirse (como $ 30 dólares el año, $ 20 si eres estudiante) pero SOBRE TODO LEERLA COMPLETA cada vez que llegue  :P

martes, 4 de diciembre de 2007

Delphi 2007 en Promoción para Latinoamerica

Andreano Lanusse de CodeGear acaba de terminar su presentación en Developer Days 2 en Español y Lisa Flores (encargada de ventas para LA) anuncio una promoción exclusiva para el evento, aquí algo que logré tomar como screenshot:

delphipromo  Después de todo no es tan fácil como estirar la mano :P pero definitivamente es un buen descuento (21% aproximadamente).

En este momento esta la presentación de José Castillo sobre BlackFishSQL (muy interesante por cierto).

NOTA: No tengo ninguna intención de hacerle el trabajo comercial a CG. En mi caso (y de muchos de los que leen), me interesa mucho el apoyo al mundo de habla hispana. Ojalá haya muchos que teniendo y queriendo esta oportunidad la podamo$ tomar :) pero lo mas importante es hacer lo posible (y lo imposible) para tener las ventajas competitivas.

lunes, 3 de diciembre de 2007

Todo listo para Developer Days en Español

Después de una gran semana de mucho trabajo, CodeGear presentara Developer Days en Español y quisiera poner algunos puntos en la lista para ayudar a los participantes (aunque probablemente es algo tarde ya que mañana comienza):

  1. Se necesitan dos registros para participar los dos dias (uno por día).
  2. Se debe instalar en la PC un cliente de Interwise (Participant) para poder ingresar. Existe una versión para Vista.
  3. Las bocinas (o audifonos) son necesarias para escuchar las conferencias.
  4. Un micrófono para participar en las sesiones de preguntas y respuestas.
  5. La agenda esta en el horario de California. Se añaden dos horas para el tiempo central de México (si dice que una conferencia es a las 11:00 a.m. entonces en México D.F. será a la 1 p.m.) Aquí esta una referencia rápida:
Lugares Ajuste Si la agenda dice 8:45 a.m. ahí serian las...
California (Pacifico USA),
Baja California Norte (México)
Nada 8:45 a.m.
Pacifico norte (México), Denver (Montañas USA) Suma 1 hora 9:45 a.m.
Centro y sur (México),
Guatemala, Belice, Honduras, El Salvador, Nicaragua, Costa Rica, Dallas y Chicago (Central USA)
Suma 2 horas 10:45 a.m.
Panamá, Colombia, Ecuador, Perú, Nueva York (Eastern USA)
Suma 3 Horas 11:45 a.m.
Venezuela, Bolivia, Chile, Paraguay, Manaus (Brasil) Suma 4 Horas 12:45 p.m.
Argentina, Uruguay, Brasilia (Brasil) Suma 5 Horas 1:45 p.m.
España Suma 9 Horas 5:45 p.m.

Muy buena suerte a todos y si tienen comentarios sobre mi conferencia, con toda confianza. Saludos.

domingo, 25 de noviembre de 2007

Congreso Virtual de Delphi en Español

Estoy por ser parte de un gran evento para nuestra comunidad latinoamericana de desarrolladores, especialmente (pero en definitiva no exclusivamente) para los que usamos herramientas de CodeGear (from Borland).

CodeGear organiza los Developer Day en Español los días 4 y 5 de diciembre, en donde habrá conferencias, presentaciones y demo en nuestro idioma. Normalmente mencionaría con mucho gusto este efectivo esfuerzo de CodeGear, pero ahora resulta aun mas especial para mi, ya que tendré la responsabilidad (y la fortuna) de exponer, hablarles sobre Generics y formas en que podemos usar y aprovechar esta nueva característica del lenguaje Delphi for .Net. Pero lo mejor es, que dicha característica, los Generics o clases de tipos parametrizados será la siguiente adición al lenguaje Delphi para Win32 nativo (que usamos en mayoría), como lo podemos ver en el RoadMap de Delphi (nombre clave Tiburon).

Aun mejor, existen otras excelentes ponencias:

  • Fabian Duron (nuestro buen FabianDeus del grupo de Programadores Delphi México) nos mostrara las nuevas caracteristicas del IDE en RAD Studio 2007
  • Norberto Martinez (de Gopac y antes de Smartware) hablara sobre algo que es extremo importante para competir: la calidad de las aplicaciones Delphi
  • Andreano Lanusse (CodeGear) expondrá sobre desarrollo de aplicaciones ASP.NET con AJAX en RAD Studio 2007.
  • Por no mencionar las de nuestros colegas Pablo Soligo de Argentina, José Castillo de Perú, David I y Nick Hodges!

En fin, no tiene caso que sustituya la pagina de CodeGear de REGISTRO para el evento.

lunes, 19 de noviembre de 2007

Llamada dinámica a métodos

No es dinámico como en "dinámico de Bajo nivel" sino llamar métodos por su nombre. La Run-Time Type Information (RTTI) es la forma en que Delphi se vuelve mucho mas poderoso al combinarse con herencia y polimorfismo, sin embargo es el punto ahora, el problema es distinto.

Digamos que queremos hacer un pequeño motor de script (básico para empezar). Podemos guardar las instrucciones del script en un archivo de texto, en un campo de una tabla, etc. Nuestro programa lee esas instrucciones y las va ejecutando una por una, haciendo diversas cosas. ¿Dinámico, no?

Bueno es fácil con Delphi. Los métodos tienen una dirección de memoria donde esta el código (las instrucciones en lenguaje máquina) y una dirección de memoria donde esta los datos (digamos el ambiente del método), en este caso son los datos de la clase a la que el método pertenece.

Ahora, ¿Como guardamos una dirección de memoria en Delphi? Un puntero es un tipo de variable que guarda una dirección de memoria, en dicha dirección puede haber cualquier cosa: una cadena, un numero, un arreglo, o... un método. Como toda clase deriva de la Clase TObject, y dicha clase TObject tiene un método llamado MethodAddress con el que obtenemos el puntero hacia un método que sepamos su nombre, entonces si tenemos una clase llamada MiClase que tiene un método llamado Alerta, obtenemos la dirección de memoria donde esta el código que ejecuta ese método de la siguiente manera:

MiClase.MethodAddress("Alerta");


Para representar un método, Delphi tiene una estructura llamada TMethod. Dicha estructura tiene dos componentes: Code y Data (Código y Datos como lo mencionamos antes). En Code va la dirección de memoria de el método, y en Data guardamos la dirección de memoria de la instancia de la clase (es decir, el objeto) a la cual pertenece el método.

Entonces para llamar ejecutar nuestro Script básico, necesitamos una clase que contenga métodos con el nombre de las instrucciones de nuestro script, y después crear una instancia de esa clase (crear un objeto de esa clase), leer nuestro script y por cada linea del script (una instrucción) crear un TMethod obteniendo el puntero hacia esa función. Lo codifíco aquí en un solo procedimiento por facilidad:

// EjecutaScript con el parámetro del nombre
// del archivo "script"
procedure TMiClase.EjecutaScript(ArchScript: string);
var
p:
procedure of Object; // Un puntero a un metodo
Script: TStringList; // Aqui cargaremos el script
instrucc: string; // para iterar por
// las instrucciones
begin
if FileExists(ArchScript) then
begin
Script :
= TStringList.Create();
try
// Si existe el archivo del script
// Cargamos el script a una lista de strings
Script.LoadFromFile(NombreArchivoScript);
// Por cada instrucción (una linea
// en el archivo):
for instrucc in Script do
begin
// Si la linea no es vacía
if trim(instrucc) <> '' then
begin
// Obtenemos la dirección del método y la
// asignamos al elemento Code de
// p como TMethod
TMethod(p).Code := Self.MethodAddress(instrucc);
// Asignamos el objeto mismo
// como Data del TMethod
TMethod(p).Data := Self;
// Si resulto asignado p (no apunta a nil)
if Assigned(p) then
begin
p();
// Ejecutamos p!!
end;
end;
end;
finally
FreeAndNil(Script);
// liberamos el TStringList
// Como debe de ser :P
end;
end;
end;

Ejemplo: Si tenemos un método llamado Alerta, un BorraCache y un Procesa en la clase TMiClase:

// Actualizado 20/nov/2007 - ver nota al pie
TMiClase = class
...
public
procedure EjecutaScript(ArchScript:
string);
...
published
procedure Alerta;
procedure Procesa;
procedure BorraCache;
...
end;


y nuestro script consiste en un archivo llamado por ejemplo 'haznuevo.txt' que contiene:


alerta
borracache
procesa


al invocar:
var
MiObjeto: TMiClase;
begin
MiObjeto :
= TMiClase.Create;
try
MiObjeto.EjecutaScript(
'haznuevo.txt');
finally
FreeAndNil(MiObjeto);
end;
end;

Entonces se ejecutaran los métodos Alerta, BorraCache y Procesa del Objeto MiObjeto (de clase MiClase :)

También hay forma de pasar parámetros, lo mostrare en un post mas adelante.


Actualización 20/nov/2007: Como bien lo señala Al Gonzalez (¡gracias Al!), el método MethodAddress solo funciona para obtener la dirección de métodos declarados como published!! por lo que declararlos en la sección private no funciona.

miércoles, 14 de noviembre de 2007

Delphi 1!? ok....

Tratando de medir el uso y experiencia en Delphi y sus versiones en nuestra comunidad (la comunidad de programadores a los que nos interesa mejorar) nuestro respetado Al González (que todos conocemos como administrador y principal contribuyente en el grupo Programadores Delphi México) ha abierto recientemente una encuesta sobre la versión (o revisión) del IDE de Delphi que usamos (Delphi 1 o 2 hasta Delphi 2007, no incluye Turbo Pascal - ese es aparte).

La encuesta esta en el sitio de Club Delphi en el siguiente URL:

http://www.clubdelphi.com/foros/showthread.php?t=46171


Si no tienes usuario en Club Delphi puedes ver los resultados de la encuesta hasta ahora y algunos comentarios, para contestarla registrate en el Club (GRATIS Y Definitivamente RECOMENDADO).

Por cierto, yo utilizo felizmente BDS 2006 (y no se que estoy e$$perando para cambiar a RAD Studio 2007) :P

miércoles, 31 de octubre de 2007

El Preclaro pensamiento de Borland

No quiero decir Preclaro como que estaba claro antes que los demás, más bien como que hicieron algo antes de tener claras las cosas: Y me refiero a Kylix una vez mas.

¡Y es que Kylix (la idea de Delphi tras Linux) es algo fantástico ahora! En su momento sonó muy bien, con todo y las dudas: ¿Quien usa Linux? Ninguno de mis clientes o conocidos lo hacia realmente. De hecho solo tres o cuatro camaradas lo teníamos instalado y nos metíamos de vez en cuando o incluso sabíamos administrarlo (usuarios, NFS, Samba, SMTP, Bind, etc.).

Ahora la escena pinta muy diferente, es decir, Ubuntu u OpenSuse (no se diga Suse Enterprise) lo podría usar mi mamá con una mano atada a la espalda y no extrañaría mucho su Office ni su Messenger (bueno, la verdad mi mamá no es buen ejemplo porque es bastante inteligente y puedo tener un buen reto tratando de ganarle en Age of Empires cualquier día de estos) pero saben a lo que me refiero.

Linux no es el futuro escritorio necesariamente, pero si tiene un ENORME futuro como escritorio, mucho más grande del que nos imaginamos. Solo descarguen el ultimo Ubuntu desktop y cálenlo.

Y lo más importante, si hay un gran futuro en Linux, ¿Puede CodeGear explotarlo ahora sí, con gran capacidad y buen enfoque?

Solo hay que ver la creciente popularidad del proyecto Lazarus (freepascal).

jueves, 18 de octubre de 2007

Dia de la Revolucion Delphi 2007

Tuve el placer de asistir (por que realmente lo fue) a la presentación de CodeGear 2007 en Guadalajara, donde el nuevo representante en México de CodeGear, Gopac Soluciones Integrales, en conjunto con Andreano Lanusse (Product Line Manager para América Latina) y Lisa Flores (Comercialización para Latinoamérica de CodeGear) introdujeron los productos, soluciones y demostraron la voluntad que tiene CodeGear para crecer a nuestro Pais (y nuestra comunidad latina).

Realmente salimos motivados de esa reunión: primero de la presentación de Andreano Lanusse -que resulto ser un gran tipo, muy talentoso y verdaderamente apasionado por Interbase, Delphi y 3rd Rail (el nuevo IDE de CG enfocado en desarrollo con Ruby on Rails)- en la que nos mostro BlackFish y su manejo de triggers y Stored Procedures hechos en Delphi (hechos casi en segundos), Delphi 2007 con una gran, GRAN cantidad de mejoras en dbXpress 4, ECO VI, y en el IDE en sí.

En seguida gopacSI, que realmente tienen ganas de crear y apoyar a nuestra comunidad Mexicana de desarrollo. Muchos de los asistentes conocimos personalmente a su Director General (un Maestro en Sistemas especializado en Base de Datos que es una excelente persona) y a su Ejecutivo Técnico de CodeGear, el Lic. Norberto Martínez Rizo (norberto.martinez@gopac.com.mx) que rápidamente nos organizo a quienes fuéramos ya parte de la comunidad de Foros (como de Programadores Delphi México) para hacer mas sinergia y ponerse a nuestro alcance.

Desde aquí Felicito a todos ellos por su voluntad y profesionalismo, pero sobre todo por la pasión por lo que hacen, asi como a CodeGear por que esos pasos que estan dando son firmes hacia el mismo sentido que los desarrolladores vamos, y que sigan asi. Ahora sí, tenemos que poner todo de nuestra parte para ser una comunidad más dinámica y creativa, por nuestra sociedad Latinoamericana.

sábado, 13 de octubre de 2007

Luchando contra 500 años de Cultura del comerciante

Generalmente en México (me parece que en gran parte de América Latina) los dueños, jefes o "patrones" de empresas (incluso de empresas de tecnología) de la anterior generación tienen una cultura de negocios MUY ARRAIGADA en la que muestran una grave falta de interés por la inversión: les gustan los negocios fáciles, el dinero rápido, la fuerza del impulso antes de la inteligencia de la organización. Sus ideas nacen de la prioridad de ahorrar todos los centavos que puedan, para terminar gastando muchos pesos en la consecuencia de ese ahorro. ¿A quién le suena familiar?

En lo personal, he estado encontrando una infinidad de trabas en investigacion e innovacion en una empresa para la que trabajo como consultor y desarrollador, dicha empresa tiene un potencial enorme, pero simplemente parece no interesar a su dirección, tal vez por pensar que mientras mas grande menos podrá controlar. Y es que al parecer, eso es otro rasgo de la mencionada cultura: el control obsesivo e invasivo.

Y es que, si buscas gente inteligente para que trabaje contigo y para ti, esperas que usen esa inteligencia en resolver sus tareas de la mejor manera (en su justa medida y en su justo ámbito de responsabilidad) conscientes de los objetivos en común, o no? La dirección sirve de eso mismo: dirección de los esfuerzos. No contratas a gente con cerebro (la mayoría de los que trabajan para dicha empresa) para que sea solo una extremidad del cerebro de la dirección, o eso supongo yo.

Es probablemente un reflejo de algún complejo de superioridad/inferioridad del jefe, pensando que él y solo él debe saberlo todo, y que todos deben hacer todo exactamente como él lo haría, sino de seguro no está bien hecho. Pero al mismo tiempo, la misma dirección no les proporciona la información necesaria para que tomen las decisiones correctas, porque la desconfianza no se los permite, ni siquiera cuando están seguros que es GENTE PROFESIONAL y comprometida con los objetivos de la empresa.

En fin, hay tanto que hacer en nuestro país, tanto potencial de crecimiento, y tanta gente que entendemos ese potencial, que tenemos más conciencia de lo que es ser profesional y buscamos serlo día tras día y cada vez mejor, que lo tenemos tatuado en los huesos, junto con la pasión que sentimos por aquello que hacemos. Es una lástima que a pesar de que tratemos de cambiar las cosas visiblemente para crecer, hay quien busca administrar una empresa de desarrollo de software igual que administraria un abarrote pequeño, en el que puede ver, oír y controlar hasta su ultima decisión, y al mismo tiempo explotarlo como si fuera la gallina de los huevos de oro.

Pero eso no debe detener el crecimiento de nuestros países y la explosión de nuevas y mejores oportunidades de desempeño profesional.

Solo como muestra de lo que van a ser las cosas: Hay muchas empresas de tecnología que están cambiando, innovando, aprovechando (si bien de manera aun escueta) su potencial. Por ejemplo Sistemas GH, una empresa de desarrollo basada en Morelia, Michoacán, que con inteligencia privilegia la inteligencia y autonomía de la gente sobre la ambición desmedida, su mentor (y fundador del grupo Programadores Delphi México) Al Gonzalez, sabe que un desarrollador profesional es alguien que sabe lo que hace y que vale la confianza que se deposite en el (o ella). Digo, al fin y al cabo es un negocio: el principal objetivo son las ganancias, pero es una forma más inteligente, más consciente, responsable, duradera y sostenible de lograrlas, te encuentras con la lealtad y la motivación intrínseca de las personas que trabajan a tu alrededor, es decir, los demás hacen bien y cada vez mejor las cosas, por el simple hecho que querer ser buenos en lo que hacen y cada vez mejores, y de lograr los objetivos en común.

viernes, 21 de septiembre de 2007

Nuevo libro de Delphi de Marco Cantu

El nuevo libro de Marco Cantu ha sido liberado. Parece un libro excelente como todos los que ha escrito, aunque este esta dedicado 100% a actualizar nuestro conocimiento y dominio de Delphi hacia la versión 2007 con todas las novedades: Delphi 2007 Handbook.

Por lo pronto ya lo pedí. Por cierto que ahora el libro se vende a través de un novedoso servicio de impresión bajo demanda: El libro se imprime a medida que se compra, por lo tanto cuando no se hace una inversión exorbitante de entrada. Cualquiera que escriba algo o tenga algo escrito, que pueda ser vendido, se puede subir a este servicio llamada Lulu, se le pone precio y si se vende, pues que bien (claro que ayuda si es algo útil para alguien mas :P )

Cuando me llegue espero tener la oportunidad de escribir una reseña. Mucha suerte a Marco, aunque la verdad creo que no la necesita (El libro rompió toda expectativa de venta en sus primeros días)

miércoles, 25 de julio de 2007

Dinamic binding for properties in the VCL

There is something that I *REALLY* wish to have in RAD Studio that I think is a really nice idea from VS and could be taken even beyond: Dynamic binding of component's properties to any data source (XML, DB, INI files, Registry, Porperties from other components/controls, etc.)

This could be a major step for VCL, plus I guess that RTTI and maybe initialization code might be the core of this technology, so it's not far from there. Just think about it!

That is just the kind of ideas that I think should be part of RAD, don't you think?

sábado, 7 de julio de 2007

Empresa RADical con Delphi

El concepto RAD de Delphi es sorprendente. Ningún concepto me he hecho sentir mas cómodo programando pequeñas y medianas aplicaciones poderosas que el Rapid Application Develompent. Es tan fácil como jugar con Lego pero aquí puedes aprender a crear tus propias piezas y extenderlas hasta donde quieras, tus propios componentes y controles, así de sencillo, toma lo mejor de la programación orientada a objetos y lo aplica de manera pragmática. Sorprendentemente increíble y poderoso.

Lo que me pregunto es porque no he escuchado más de arquitectura y diseño de las aplicaciones creadas con Delphi más allá del RAD. No escucho o leo que alguien este aplicando o encontrando patrones de diseño aplicados al RAD. Parece que todos tendemos a confiar en el concepto atrás de la VCL y seguirlo pensando que es suficiente. En lo particular a mi me ha hecho sentir desorientado cuando trato de ir aun mas allá, hacer aplicaciones genéricas por ejemplo.

Digamos que quiero ser aun más productivo y crear un administrador de estilos gráficos (temas) para las aplicaciones, o un marco de persistencia (un Mapeador Objeto-Relacional por ejemplo) que pueda reutilizar de manera genérica.

Yo sé, estamos hablando de Delphi, no de Java. En Java hay muy interesantes conceptos que hacen a veces palidecer a Delphi en otros rubros: hablo de esfuerzos comunitarios bien apoyados como Spring, Hibernate, SWT; hablo de arquitectura ( Write-once-Run-everywhere del que la CLX fue un esbozo) y de sus aplicaciones empresariales, con transacciones distribuidas u orientadas a servicios (SOA).

¿Que nos impide usarlos con Delphi? Nada. ¿Que nos impide aplicarlos y mejorar aun mas el concepto RAD? De hecho nada, solo la finta de que Delphi es solo para aplicaciones GUI cliente/servidor. ¿Quien dijo eso? No sé, y no importa.

Quiero ver más de eso, quiero usar Delphi en un sistema ENORME, crear componentes reutilizables del tamaño de una aplicación mediana, que me permitan con unas líneas de código o de manera declarativa (mediante XML por ejemplo), unir mis clases con la base de datos y no preocuparme más por saber si la BDE esta descontinuada, la dbExpress mejoro, necesito comprar MyDAC o Borland le cambio el nombre de los componentes ADO a dbGo. Quiero poder hacer de manera sencilla transacciones que abarquen varios procedimientos y una forma fácil y eficiente de mantener la aplicación, aplicar temas, cambiar por completo la vista de mi aplicación sin impactar el estilo grafico sin que esto implique real esfuerzo, MAYOR DESACOPLAMIENTO.

De hecho voy a hacer algunos experimentos con esto: Teoria de patrones de diseño con RAD, algún ORM 100% desacoplado de la tecnología de almacenamiento de datos tal vez, controles con vista 99% personalizable. Ya no estamos lejos (JediVCL, InstantObjects, repositorio de patrones del IDE, ECO, CLX) pero mi propuesta es esa: generar más conocimiento y practica, subirnos a la ola en lugar de intentar subirla y dejarla pasar, digamos Practica de Arquitectura y Diseño avanzado con Delphi.

viernes, 29 de junio de 2007

Patrones del exito

Muchos programadores han escuchado acerca de ó aplican de manera diaria en su trabajo el concepto de Patrón: una solución refinada y adecuada a un tipo de problema específico y bien identificado. Incluso existen los anti-patrones: supuestas soluciones o comportamientos, tendencias y reacciones comunes a determinados problemas, que terminan siendo un desastre por razones comprobadas a lo largo de la historia de la programación.

Ahora imaginemos la misma filosofía del patrón (ir mas allá de la simple resolución del problema), pero aplicada AL MISMÍSIMO COMPORTAMIENTO DEL PROGRAMADOR: los problemas a los que nos enfrentamos de manera constante, nuestro desarrollo profesional y todo nuestro trabajo diario analizados desde la perspectiva de programadores exitosos, con más de veinte años de experiencia y que se mantienen más que vigentes a la fecha, los patrones de comportamiento de los usuarios, de los jefes, pero sobre todo del programador en sí, con tips, consejos y sobre todo soluciones inteligentes llenas de pragmatismo.

Eso es exactamente lo que Andrew Hunt y David Thomas publicaron en un libro por demás excelente, titulado El programador pragmático (de hecho The pragmatic programmer: from journeyman to master ya que por supuesto, hasta donde yo se no ha sido publicado en español).

A pesar de haber salido en el año de 1999 (hace como 30 años-web ;) no deja ni dejara pronto de ser vigente en lo absoluto, de hecho esta gente se adelanto un poco al tiempo así que al contrario, yo diría que es más vigente que nunca, después de todo, la ciencia avanzara pero los humanos seguimos siendo humanos.

Los mismos autores mantienen un sitio web de su compañía: www.pragmaticprogrammer.com que junto con el libro ha sido un enorme éxito al mantener la mente de muchos programadores fresca y abierta para su uso continuo.

No hay forma de explicar mas el libro y la idea más que leerlo detenidamente y con verdadero "Análisis Critico" (tip no. 9 del mismo libro), pero basta decir que ha inspirado a la generación de programadores que ahora son líderes en la industria e innovadores como Martin Fowler (Refactoring), Kent Beck (Extreme programming), Alistair Cockburn (Crystal Clear) y un montón mas.

Por cierto, de acuerdo a wikipedia:

...la palabra pragmatismo proviene del vocablo griego praxis que significa acción. Para los pragmatistas la verdad debe ser medida de acuerdo con el éxito que tenga en la práctica. En el pragmatismo no existe el conocer por conocer. Si algo no tiene un fin o uso determinado no hay razón para que tal cosa exista.

El programador pragmático, por lo tanto se podría definir, pero solo en parte, como aquel que hace lo que funciona para lograr que las cosas se hagan, que piensa lo que está haciendo y no trabaja en automático, y tiene la experiencia y el uso de la inteligencia a su servicio todo el tiempo, se adapta al cambio y se mantiene actualizado.

martes, 26 de junio de 2007

Guia de Steve Trefethen para ser un guru de Delphi

En su ultima semana como empleado de CodeGear despues de 15 años, donde mejoro la VCL (la libreria de componentes y controles de Delphi para win32), Steve Trefethen nos proporciona unas muy interesantes listas de topicos tipo "mantra para la vida" que casi todo programador de Delphi deberiamos considerar.

Hasta ahora ha publicado la lista para la VCL asi como para RTL y object Pascal. Vale la pena pegar la lista enfrente del escritorio.

Actualizacion al 28 de junio 2007: Dos listas, igual de excelentes, se han añadido, una para el use del IDE de Delphi y otra muy, muy interesante titulada Delphi Community. Esta ultima contiene varios vinculos realmente indispensables.

lunes, 18 de junio de 2007

Nueva version del Gadget de Conexiones RDP

Existe una nueva version del gadget del SideBar de Windows Vista, ConexionesRDP. Agregué el soporte para conexiones en modo consola (permite conectar a la consola en lugar de una sesion comun de terminal server) ademas de algunos ajustes con la caja que muestra las conexiones. Otro ajuste es el soporte para sistemas en ingles en donde el tipo de archivo RDP no es "Conexion a escritorio remoto" sino "Remote desktop connection".

Muchas gracias a los comentarios y sugerencias de Hector Barranco.

lunes, 28 de mayo de 2007

Delphi: entre dos tierras

Desde tiempos inmemoriales (en tiempo informatico) el programar con Delphi ha sido un estandarte que muchos hemos portado con orgullo en todo el mundo, como una elección que tiene tres cuestiones principales, (1) una idea en principio inovadora y realmente funcional que muchos copiaron: el verdadero "Rapid Application Development", (2) el ir en contra de la corriente, de la masa que se deja arrastrar al lado oscuro del "monopolio perverso", y sentir que caminas por el lado correcto, el lado que conserva el viejo sentido de "La verdad os hara libres", mientras que, (3) no dejar de tener ganancias por eso, se sigue aprovechando el instinto de conservación, el seguir avanzando con paso firme hacia el mundo empresarial, es decir, sin que una de nuestras motivaciónes deje de ser el tener ganancias por nuestro desempeño profesional.

Ahora mismo, tengo la sensación de que ese ideal se ha desvirtuado por un exceso de expectativas, y que ahora ese concepto se muestra mas como un idea mediocre que como la opción del punto medio.

Pareciera que el mundo decidió abandonar el ideal y radicalizarse, tomar partido y volverse de algún bando: por un lado la corriente Open Source, que conjunta esfuerzos individuales en una gran concierto que genera soluciones para todos gustos tendientes a la innovación, y por otro lado, la corriente menos innovadora pero mucho mas disciplinada, motorizada por el capital de la empresa mas grande y fuerte mas que por el mismo desarrollador. De repente Delphi se ve ahogándose entre estas dos corrientes, pues su compañía (al menos su ex-compañia Borland) parece destinada a no aprovechar ni la fuerza de la masa, ni la masa de la fuerza.

En lo particular, pienso que CodeGear (la nueva compañia de Delphi, engendro renovado de Borland) debe radicalizar el concepto de Delphi, y atacar desde alguna trinchera, no puede quedarse a fuego cruzado, esperando tener éxito por su sola disposición hacia el desarrollador.

viernes, 4 de mayo de 2007

Gadget del sidebar de Windows vista para Conexiones RDP

Esa nueva onda de los gadgets (o widgets en Mac y X) me parece interesante en cuanto a la usabilidad del sistema. En Mac se ven impresionantes cuando se aparecen y desaparecen, y aunque en Windows Vista no es tan asi, pues parece que funcionan bien.

Lo que mas llama la atencion es que el API del Sidebar de Vista sea abierto y se siga el mismo concepto que los google gadgets. Por otro lado, particularmente tengo la necesidad de entrar a una cantidad de servidores de Terminal Services de Windows y tengo una serie de archivos .RDP (que usa y guarda el cliente de terminal services MSTSC.EXE) para cada una de las aproximadamente 60 conexiones. En windows XP hice una barra de herramientas en la barra de tareas, la saque de ahi y la empotre (dock) en la parte superior de la pantalla, de manera que cuando subia el cursor aparecian todas mis conexiones y con un click conectaba a la que necesitara.

Resulta que en Vista no puedes descolgar barras de herramientas desde la barra de tareas (o por lo menos no encontre como hacerlo), por lo que vi una oportunidad de justificar la invesitgacion sobre la creacion de gadgets del sidebar. Por lo menos hacer un gadget que me muestre mis conexiones RDP y pueda accesar a ellas como lo hacia con XP (que ironia). En fin, el resultado es este gadget de Conexiones RDP que pueden descargar del Windows Live Gallery.

Si le resulta util a alguien mas, me alegraria mucho algun comentario para mejorarlo. Ya existian algunos gadgets para manejar conexiones, pero ninguno usaba archivos RDP, la ventaja de usar archivos RDPs me parece que es clara: puedes configurar cuantas sean, con todos los parametros que el cliente MSTSC.EXE te permite, y no se pierde la configuracion de las conexiones al perder la instancia del Gadget. Ni siquiera la configuracion de la carpeta de las conexiones se pierde pues mejor use el registro para guardarla, en lugar de los settings efimeros del API del Sidebar.

Para los que les interese, en el mismo sitio de Windows Live Gallery existe una seccion con recursos para desarrollar tus gadgets. Particularmente les recomiendo la referencia del Sidebar en MSDN.

jueves, 5 de abril de 2007

Usando Crystal Clear -parte 2- Las Propiedades

Las propiedades de una metodologia son su codigo genetico, lo que la distingue de otras y le da cuerpo. Las propiedades de Crystal Clear son guias que al seguirlas, nos ayudan a llevar nuestros proyectos a una zona segura.

Crystal Clear es un Metodologia de desarrollo de software creada por Alistair Cockburn

Primero, debo resaltar que Crystal Clear, es una metodologia que se centra en una forma de pensar flexible y una filosofia de SEGURIDAD-HABITABILIDAD-EFICIENCIA hecha para adaptarse y mejorar, iteracion tras iteracion.

Las propiedades de Crystal Clear son 7. Las primeras 3 son obligatorias si se quiere seguir la metodologia, las siguientes son muy importantes y sirven para llevar el proyecto aun mas adentro en la zona de seguridad.

Propiedad 1: Entregas Frecuentes
Entregar código ejecutable, probado y usable a los usuarios, por lo menos una vez cada tres meses, si es cada uno o dos meses, mejor.

Al hacer esto aseguramos que nuestro proyecto no se despegara mucho de lo que el cliente necesita realmente, pues cada entrega formal, resultara en correcciones a los malentendidos que surgen continuamente en el analisis del sistema.

Ademas, si nos interesa entregar algo util para nuestros clientes -un software que realmente le genere valor- de esta manera le damos la oportunidad al usuario a que critique nuestra interfaz de usuario y el funcionamiento general del sistema antes de que continuemos creando mas codigo que podria terminar en la basura cuando nos digan "Esto no es lo que yo pedi."

Propiedad 2:Mejora reflexiva
Reunido por lo menos una vez en cada tres meses, durante media hora, una hora o medio día, para comparar notas, reflexionar, discutir nuestros hábitos de trabajo, y descubrir lo que nos acelera y lo que nos detiene y lo que podríamos mejorar.

Eso se llama hacer un "Taller de reflexion", obteniendo una lista de practicas o habitos de desarrollo que nos gustaria mantener, una lista de lo que nos gustaria intentar, y probablemente, una lista de lo que queremos evitar, todo esto escrito y publicado de alguna manera, a la vista de todos.

Esto nos genera una mejora continua en nuestro proyecto y nos da el tiempo para corregir el camino, acelerar el desarrollo y mejorar nuestros habitos y conocimiento de desarrollo.

Propiedad 3:Comunicación osmótica
La colocacion fisica del equipo de desarrollo es de lo mas importante, y la comunicacion osmotica se refiere a llevar la comunicacion al maximo nivel: Nos debe tomar menos de 30 segundos llevar nuestras dudas a los ojos u oídos de quien puede resolvérnoslas, debemos sentarnos en el mismo cuarto o en cubiculos contiguos. Captar algo relevante de la conversación entre otros miembros del equipo al menos cada pocos días.

El hecho de tener que levantarnos de nuestro escritorio, cruzar el pasillo y abrir una puerta, con toda seguridad nos distrae de nuestro tren de pensamiento. Irrumpir en la oficina de otro miembro del equipo y hacerle preguntas, a si sean de lo mas simple, terminara por retrasar bajar nuestra productividad de manera critica.

Comparado con hacer una pregunta a una persona que esta constantemente conectada en nuestro mismo tren de ideas, nos da la diferencia entre comunicacion cerrada y la mejor, comunicacion osmotica.

Propiedad 4: Seguridad personal

¿Podemos confesar a los demás que equivocamos nuestras estimaciones por mas del 50% o que hemos recibido una tentadora oferta de trabajo? ¿Podemos expresar nuestro desacuerdo con cualquiera respecto a la agenda en una reunión del equipo? ¿Podemos terminar largos debates sobre los diseños de otro miembro con un desacuerdo amistoso?

Fomentar la confianza y el respeto entre el entre el equipo, de manera que todos tengan claro que lo importante es lograr los objetivos del proyecto de manera conjunta. Asi, las equivocaciones e incapacidades de unos, pueden ser cubiertas por los demas, los miembros no temen exponerse, y el equipo respeta estas exposiciones.

Tres exposiciones en particular son importantes
  • Revelar nuestra ignorancia
  • Revelar nuestros errores
  • Revelar nuestra incapacidad en una tarea asignada


Propiedad 5: Enfoque

Cada quien debe saber cuáles son los dos elementos de mas alta prioridad sobre los cuales trabaja en todo momento. Ademas, deberiamos tener garantizado todos por lo menos dos días seguidos y dos horas ininterrumpidas por día para trabajar en un proyecto.

Esto tiene una base demostrada y fundada en lo siguiente:
  • Nuestro trabajo exige una alta concentracion en lo que hacemos para evitar errores y producir mas.
  • Un problema que se puede resolver en un minuto de concentracion, nos puede llevar una hora o mas de manera dispersa.
  • Una distraccion media, que nos hace llevar nuestro pensamiento a otro lugar, puede llevarnos a perder de diez a quince minutos de productividad.
  • El "switchearnos" de un proyecto a otro nos lleva al menos entre una y dos horas.
  • Despues de que un desarrollador esta sometido a constantes distracciones, el desgaste de energia mental termina por hacer que el desarrollador prefiera hacer cosas vanas (como chatear o navegar) entre una distraccion y otra. Lo mismo tiende a pasar con desarrolladores involucrados en tres proyectos o mas.


Propiedad 6: Acceso fácil a usuarios expertosNos deberia de tomar menos de tres días en promedio, desde que surge una duda respecto al uso del sistema, hasta que un usuario experto la resuelve. Inclusive lo deseable, es poder obtener las respuestas en unas cuantas horas cuando mucho.

Si surge una duda sobre en el desarrollo de la funcionalidad, y podemos levantar el telefono para comunicarnos con el usuario experto en el dominio, hacerle algunas preguntas y seguir con el desarrollo, entonces estamos del otro lado. Esto no es siempre posible, pero por lo menos sera importante poder agendar una cita para visitar o ser visitado por nuestro usuario experto.

Propiedad 7: Ambiente de desarrollo con Pruebas automáticas, Administracion de la configuración e integracion frecuente.

Poder dejar corriendo las pruebas de nuestro desarrollo hasta el final sin estar físicamente presente nos ahorra el tiempo que no tenemos, sin mencionar las ventajas de depuracion inmediata y de probar el codigo indiscriminadamente.

Todos los desarrolladores deberian ingresar el codigo en el que trabajan en un sistema de administracion de la configuración, de manera que este se encarge de llevar el control de versiones, documentos, etc. y escribir una nota útil sobre el código cuando lo ingresan.

El sistema se deberia integrar por lo menos dos veces a la semana, juntando el codigo de todos, compilandolo, y haciendolo pasar por todas las pruebas automaticas posibles, y obteniendo de esta manera codigo ejecutable constantemente.

El sistema funciona mas o menos asi: Se diseñan los test antes del desarrollo. El sistema se integra frecuentemente en el sistema de manejo de configuracion (ejemplo CVS) y se pasa por todos los test, mostrando los resultados de inmediato.

En los siguientes articulo sobre Crystal Clear expondre algunas tecnicas y estrategias sugeridas que nos ayudaran a lograr estas propiedades y las refuerzan.

lunes, 2 de abril de 2007

Usando Crystal Clear en la PyMe de software (Introduccion)

Mejorar nuestras metodologias de desarrollo puede ser el paso mas firme que podemos dar como equipos de desarrollo de software.

Muchos programadores estamos aun acostumbrados a usar un metodo de desarrollo en Cascada (analizar todo el sistema > diseñar todo el sistema > programar todo el sistema -> depurar etc.) o peor aun: nos exponen el problema, y mal nos lo terminan de explicar, ya tiramos unas lineas de codigo -al menos mentalmente-, o tomamos la primer idea que parece cuadrar con el problema como si fuera la iluminacion venida de nuestra propia mente sobreestimada.

Esa "metodologia" se ha ido dejado atras en las potencias en desarrollo de software (India, Alemania, Japon, EUA, etc) desde hace bastante tiempo, incluso en algunos casos desde los 70's u 80's. No esperemos encontrar en estos tiempos una empresa de desarrollo de software de nivel internacional que use esta forma de hacer las cosas, pues es considerada una mala practica que lleva a un software inutil, retrasos exorbitantes, y disgusto en el cliente (sistemas de pesima calidad).

Por otro lado, precisamente a raiz de que los clientes -que antes muy probablemente no tenian una idea clara de lo que esperaban de un sistema- ahora comienzan a saber exigir calidad y saben con mucha mayor precision lo que un sistema puede hacer por ellos. Tambien esperan mucho mas profesionalismo ya que, con todo y pena debo mencionar, historicamente los agentes libres y las PyMEs de informatica en Latinoamerica se han portado como estrellas de rock cuando se trata de servicio al cliente.

Esperando sinceramente -y creyendo- que esos tiempos estan quedando atras, debemos buscar un metodologia que llene nuestras espectativas y con nos guste trabajar (habitabilidad), que nos ayude a asegurar que el software que desarrollamos llena las expectativas de nuestros clientes (seguridad), y nos permita trabajar en equipo una y otra vez, refinando con cada proyecto nuestras practicas y conocimiento (eficiencia).

Personalmente mi recomendacion es Crystal Clear, una metodologia agil muy flexible creada por Alistair Cockburn, que tiene precisamente estos tres conceptos como principios de la metodologia
  • HABITABILIDAD
  • EFICIENCIA
  • SEGURIDAD PARA EL PROYECTO

La metodologia esta basada en ver al desarrollo de software como:

un juego economico de cooperacion, basado en objetivos, buscando un equilibrio entre la ambicion (terminar el proyecto pronto) y la inversion(actividades pensando en el futuro).

Explicando brevemente, por "un juego economico de cooperacion" se refiere a que es una actividad con reglas establecidas, que se practica en equipo y con el objetivo economico, un negocio. Se basa en realizar objetivos claros en los que cada en decision se determina un equilibrio entre terminar el software lo mas pronto posible (usar menos recursos) y las realizar las actividades que ayudaran a asegurar, mantener y posiblemente crecer en un futuro el sistema (invertir para el futuro).

En el siguiente articulo, expondre las Propiedades particulares de esta metodologia, que es la escencia del trabajo diario con ella.

jueves, 29 de marzo de 2007

El programador serio

Como muchos compañeros de aventura sabemos, el ser programador en nuestros paises en vias de desarrollo, como muchas otras carreras de inovacion y creatividad, tiene por supuesto una gran carga de obtaculos y riesgos, asi como de recompensas y satisfacciones. Un riesgo en particular, es el de convertirse en el tuerto que es rey en tierra de ciegos.

ah caray! ya te crees tanto!? pues no, por que cuando al tuerto le quitan el telon de su teatrito, entra al mercado profesional a competir, suele suceder que se da cuenta que hay muchos mas tuertos, y mas aun, existen muchos mas quienes tienen una vision clara, producto de programas educativos y motivadores de primer nivel de paises que han optado por ponerse a competir en serio con otros en lugar de agandallarse a si mismos.

OK, no quiero usar a los politicos mexicanos de pretexto, de hecho no tiene caso ningun pretexto: ¿Podemos salir avante en Mexico? La respuesta es SI, y ¿que implica? pues trabajarle duro. ¿Estamos dispuestos en esta generacion a hacerlo? En lo particular, y hablo por quien yo conozco: Claro que si! Por lo tanto, ¿En donde empezamos? Bueno, ahi es a donde quiero llegar inmediatamente.

Ser hombre es ser profesional

Y ser profesional es dejarse de pretextos, es mas ¿Que es un pretexto? No se ni quiero saber y espero que nadie en mi pais quiera saberlo. Hace doce años, no sabiamos ni de que libro agarrarnos, bueno, les paso una liga: http://www.amazon.com, ahi hay todos los libros que se te ocurran y los que no se te ocurren tambien (para nuestro caso, muy importantes). ¿Que estan en ingles? No importa, comprate uno y leelo como si no hubiera un mañana para aprender, en el camion, caminando o en el baño siempre hay tiempo, mientras comes, desayunas o cenas pacificamente puedes aprender mucho. Practica un rato de noche, y todo lo que te interese se abrira a tu paso.

Busca las oportunidades, entiende tus errores y vive para mejorar y llegar a ser quien quieres ser. Ayuda a los demas, enseña y vas a vivir lo que aprendiste cuando encuentres un modo efectivo de explicarlo.

Lo mas importante, no hay obstaculo a tu alrededor cuando hay algo que te apasiona en serio. La programacion (como TODA actividad) necesita pasion de parte de quien la practica.

La pasion es esa fuerza que te lleva mas alla de lo que los desapasionados consideran un limite, en todo ambito. Si te apasiona algo productivo, que mejor. ¿Suena nerd? No lo creo, lo nerd es algo que no existe, lo nerd es algo que invento alguien que le sacaba al aprendizaje por que no entendia que es el camino para entender su medio ambiente y mejorarlo en serio.

Un profesional es simplemente alguien que vale desde un punto de vista productivo. Alguien que es capaz de producir o ayudar a producir mas y de mejor manera, sin pretextos.

Describiria a un programador en serio simplemente como alguien que:
  • Se dedica a programar, claro!
  • Siente cierta pasion por aprender a resolver problemas mediante la programacion
  • Sabe que hay mucho por aprender
  • Busca -y encuentra- el tiempo para aprender mas y usar este aprendizaje para mejorar su programacion.
  • Es profesional
  • Es seguro de si mismo con respecto de lo que sabe, y mas importante, de lo que no sabe.
  • Es practico y no aprende por sentirse mas, si no por tener mas armas para resolver mas problemas y por lo tanto, ser mas valioso.

La cuestion -y la actitud- es que, siempre hay un camino por donde avanzar hacia donde queremos llegar, y depende de querer avanzar.

viernes, 9 de febrero de 2007

The Kylix paradox

I still can't understand why the Kylix concept wasn't such a success from the business point of view.

I personally know a company and some developers that started to use Delphi because they needed to evolve in some point to a more modern tool. The main reasons were:
  • Modern IDE although familiar language
  • The Multiplatform promise

Then, those ideas were enough to make their minds, and the powerful Borland's (now CodeGear's) RAD concept happens to be enough to have no regrets about this decision.

The thing is, now some of them are flirting with Java, while others are likely to become pure .Net developers, using VisualStudio of course :(