viernes 9 de mayo de 2008

CodeGear y DatabaseGear

Como muchos, no he dejado de leer sobre el tema de la adquisición de CodeGear por parte de Embarcadero Technologies: blogs, newsgroups de la comunidad, noticias publicas, y cuanta fuente de información he tenido a la mano. No es que sea obsesivo , solo que es un tema que me interesa mucho.... :P

En fin, hasta ahora mi conclusión es, con el perdón de quien se ofenda por la expresión: ¡Que chingon! (que para ser mas internacional, tendría que decir ¡Super! o Cool!! )

Y son varias las razones, entre hechos y suposiciones:

  1. Emabarcadero Technologies parece ser una compañía seria. Su negocio no es hacer bases de datos, sino herramientas para desarrolladores de base de datos. No parece tenerle miedo a nadie en particular, ni parece estar casado con nadie en particular (y hablo de nadie).
  2. Embarcadero es una compañía que no teme innovar. Y parece tener una administración capaz de hacer decisiones TRASCENDENTALES bien pensadas. Eso no era precisamente la situación en Borland según vi los últimos años.
  3. Desde Enero de 2007, embarcadero tiene registrado el dominio DataBaseGear.com como lo muestra este registro de whois. Eso yo lo llamo estrategia. Se quedan con el nombre de CodeGear (eso parece ser un hecho) como su división de Herramientas de desarrollo... ¿y su herramientas de Base de Datos formaran su división DatabaseGear? (eso es una suposición mía)
  4. Embarcadero es una empresa privada (no tiene acciones por ahí volando), han comprado hasta a InstallShield, y tienen un buen de capital bien fundado y grandes planes de crecimiento que han demostrado en los últimos dos años y al parecer van por mas. Eso lo hace menos vulnerable y sinceramente, lo hace parecer mucho mas inteligente.

Falta mucho por saber y por quedar claro, pero hasta ahora puedo descansar sabiendo que esto no es "clipper reloaded" ni mucho menos por mas dramático que eso pueda sonar. Yo diría que esto no es una telenovela, y si lo es, parece ser un final feliz, y un gran principio directo hacia arriba, es mas, tengo una esperanza que siento bien fundada: Esto es muy probablemente lo que en la comunidad Delphi hemos estado esperando.

miércoles 7 de mayo de 2008

Borland, Inprise, CodeGear, Embarcadero Delphi.

Borland vendió Delphi, C++ Builder, JBuilder, Interbase, 3rd Rail, Delphi para PHP y cualquier otro producto de su división de herramientas de desarrollo CodeGear al vender esta misma a Embarcadero Technologies.

¿Que sucederá?  ¿CodeGear llego a buen puerto?  ¿Nuestro Delphi naufraga, encalla o seguirá surcando los mares (y no me refiero a andar de empresa en empresa ;) ?  Existe una enorme discusión sobre el tema en los grupos de noticias de Delphi, por supuesto se esta armando un revuelo impresionante.

De lo que he leído y sabido hasta ahora, algo muy interesante que menciona el mismo David Intersimone es:

...We will work together to integrate Delphi and some of their tooling as well as create new products. Don't fear - EMBT is excited about Delphi big time.
Some of their developers learned programming on Turbo Pascal. They are all developers just as we are. Stay tuned for things we will do together. Delphi can use more database design, development, and optimization tooling. The combined company, technologies, and products will move Delphi's database capabilities forward much faster than on our own...

Así parece ser. Existen un montón de recursos y noticias flotando por ahí en la web. Hay que estar pendiente para saber que deciden al revisar las tecnologías y componer la estrategia en conjunto CodeGear-Embarcadero.

domingo 27 de abril de 2008

Pascal Esencial

Aquí en México, y probablemente es lo mismo en otros países de Latinoamerica, ha existido un ENORME problema con el nivel de la educación en cuestiones de computación y programación (y en casi todo lo demás). Claro que esta no es noticia si tienes un rato en la industria o buscando empleo.

Uno de los comentarios mas comunes: "En la carrera universitaria solo me enseñaron a usar turbo pascal". ¡Esto se podría tomar como algo increíble cuando es todo lo que se les enseña a la próxima generación de programadores a estas alturas! ¿Que están tratando de hacer con nuestros países? ¿Mantenernos en el tercer mundo por siempre, acaso?

Es decir, esta Java, Delphi, C#, PHP, etc. que son referentes usados a nivel comercial y empresarial. Un graduado debería salir con un buen acervo, ya no uno, sino por lo menos dos lenguajes de diferentes estilos sin contar otros fundamentales como SQL y HTML, que les ayuden a salvar los muchos retos que se presenten (Bases de datos, Web, GUI, Modelado, tiempo real, etc.)

Delphi (siendo al fin y al cabo Pascal hiperevolucionado e hiperconstruido) es, en mi humilde opinión, uno de los mejores lenguajes, no solo para aprender a programar, también para crear cualquier tipo de aplicaciones y vencer incluso con excelencia casi cualquier reto profesional, pero para esto se debe comenzar por algo:

  1. aprender Pascal como fundamentos de programación,
  2. pasar a su evolución como Object Pascal para entender Programación Orientada a Objetos,
  3. seguir con el uso practico de las bibliotecas de funciones y objetos conocidas como frameworks: la VCL y el .NET,
  4. incluir en el momento adecuado el acceso a Base de Datos, y
  5. alternándolo con programación para Web (Stateless)

En diferentes momentos se debería apoyar el aprendizaje con SQL, HTML, JavaScript, XML, etc.

Hace tiempo que me ha llamado mucho la atención el bajísimo nivel al que llega la educación, limitándose a enseñar turbo pascal o java esencial y con solo eso lanzar al mundo a los nuevos "programadores", es como mandar a pelear a la tribu zulu de africa contra el ejercito norteamericano, por mas bravos que sean los zulus.

Por cierto Marco Cantu acaba de liberar su libro Essential Pascal para compra en lulu.com. Claro que el hecho que este en ingles no debería ser un obstáculo para ningún programador que se precie de serlo, pero por si las dudas, ¿Alguien que se anime a traducirlo?

lunes 21 de abril de 2008

Ejemplos de la presentación de Multicapa con Delphi.Net

Ya están arriba (en CodeCentral ) los ejemplos de mi presentación de Developer Days 3 acerca del Desarrollo multicapa en Delphi.Net. Son tres ejemplos:

  • .Net Remoting
  • DataSet y DataTable a través de Web services ASP.NET
  • Cliente DataSnap de la VCL.Net

Pueden descargarlos de CodeGear CodeCentral:

http://cc.codegear.com/item/25545

Muchas gracias a todos los asistentes en Latinoamerica y España! y gracias a Andreano Lanusse y a CodeGear por invitarme a participar en el evento y ayudar a la comunidad.

Me imagino que muy pronto los tutoriales y presentaciones estaran en linea para quienes deseaban estar y no pudieron.

Developer Days en español 3 y algunas mejoras en el blog

Mil disculpas por todo este lapso de silencio! espero poder seguir el ritmo que tenia antes, ademas de un montón de trabajo muy interesante que he tenido este tiempo, pronto habrá un cambio radical en el blog con el que espero poder publicar mas contenido técnico y muchas cosas que ayuden mas. Es sorpresa, pero estoy seguro que valdrá la pena.

Y muy tarde para comentarlo, pero ya que estamos a medio evento en línea de la tercera edición de CodeGear Developer Days en español (21 y 22 de abril) acaba de terminar la presentación de Pablo Soligo donde hizo un carrito de compras con ECO y ASP.NET y fue excelente. Espero con interes la presentación de Juan Antonio Castillo (Jachguate) sobre aplicaciones Delphi multi-hilo que seguro será muy buena e igual la de Norberto Martinez sobre IBAdmin, y mientras ¡¡ tengo problemas con el Internet !!

Después de Jachguate seguirá una presentación de su servidor sobre Técnicas Multicapa con Delphi .Net incluyendo Remoting. Espero que les agrade y les sirva de verdad, si tienen cualquier comentario, por favor no duden en hacermelo llegar.

Si tienen duda con los horarios del evento (que están en tiempo de California), hace tiempo hice una tabla sobre las equivalencias para América Latina y la madre patria España.

Saludos de nuevo!

jueves 28 de febrero de 2008

Delphi VCL es el ganador SG como mejor Librería/Framework

Alguna vez les he mencionado la maravilla que es la revista SG Software Guru. Desde mi punto de vista, la única publicación impresa (y web) de la industria del software en español que vale la pena leer de principio a fin trimestre tras trimestre (ahora es trimestral).

Esta revista mexicana, además de organizar un congreso sobre desarrollo de software cada año llamado SG conferencia y expo, ahora realiza una entrega de premios anuales a las mejores herramientas de desarrollo.

El premio se llama La Pila de Software Guru. Algunos de los ganadores este año:

Mejor herramienta de...

...GESTION DE REQUERIMIENTOS:  Rational RequisitePro
(seguida por Borland Caliber)

...IDE (Ambiente Integrado de Desarrollo): Visual Studio 2005
(seguido por Eclipse y seguido muy de cerca por Delphi 2007 para win32 en tercer lugar)

...CONTROL DE VERSIONES:   Rational ClearCase
(seguido por Borland StarTeam y despues Subversion en tercer lugar)

...LIBRERIA O FRAMEWORK:   Delphi VCL
(Seguido de Apache Commons)

...SISTEMA OPERATIVO:   Windows 2003
(los siguientes fueron RedHat Linux, Solaris, SUSE Linux y Debian) Al parecer sumando los votos de las tres plataformas Linux (RedHat, SUSE y Debian), Linux supero a Windows 2003.

...PORTAL PARA DESARROLLADORES:   MSDN
(y java.net)

...PORTAL PARA DESARROLLADORES EN ESPAÑOL:  Club Delphi


¡Felicidades a todos los ganadores!

En lo particular especialmente felicito al equipo de desarrollo de la VCL de Delphi en CodeGear y a toda la comunidad Club Delphi por recibir tal reconocimiento, ¡por cierto bien merecido!

En el sitio de la revista (www.sg.com.mx) Se puede leer la introducción a los premios y el resumen de los ganadores además de los premios para Gurus y premios para Libros y Mas en donde esta el de la comunidad.

Con los cambios que vivimos en la industria, Todo puede pasar para el próximo año.

martes 19 de febrero de 2008

Dime en que programas... :P

Me he dado cuenta, como muchos antes de mi, que la herramienta se convierte en uno. Parece que en algún momento perdemos la capacidad de ver cual es nuestro negocio como desarrolladores: tener la capacidad de analizar, diseñar y programar un sistema nos envuelve y creemos que ese es nuestro negocio.

Nuestro negocio debería ser vender esos sistemas, aplicarlos en forma practica, buscar alternativas de mercado.

Pero, ¡peor aun! y ese es el punto: Nos convertimos en la herramienta que usamos.

No me malentiendan por favor, Delphi es la gran herramienta que me lleva a lograr mi trabajo con precisión, rapidez y poder y quien lea regularmente este blog sabe que me siento afortunado de no ser de los "desarrolladores" que se van con la primer luz que se les para enfrente.

Sin embargo, Delphi no deja de ser una herramienta. Un herramienta que sirve para desarrollar. Creo firmemente que nadie en sus cabales debe de atar su destino a un producto.

De repente hay quienes se han especializado tanto en una herramienta, una plataforma o un proyecto en particular, que terminan perdiendo el punto por completo. Si la herramienta pasa por un etapa de transición como lo hizo Delphi hace un par de años, entonces sienten pasos en la azotea: temen perder su poder para hacer lo que han venido haciendo.

Hay quienes huyen, hay quienes convierten en un culto, casi religioso, la veneración a su plataforma o herramienta. Esto no solo sucede en esta industria, si no en cualquier área del desarrollo humano, por ejemplo, hay médicos que defienden la alopatía o la homeopatía por ser la forma que conocen, no necesariamente la mejor, por que es el camino que escogieron y sienten que no hay vuelta atrás.

En lo particular uso Delphi por que me proporciona lo mejor de todos los mundos hasta ahora. El futuro lo dirá, Delphi actualmente como TODOS los demás lenguajes hasta donde se, están seriamente limitados en tres aspectos del futuro de la computación:

  • código de 64 bits
  • Aprovechamiento de los procesadores de mas de un núcleo (paralell processing si quieren verlo así)
  • Programación de dispositivos móviles

Y el mundo esta ahí o se dirige hacia allá con pasos firmes. CodeGear/Delphi esta haciendo su mejor esfuerzo y yo creo que lleva las de ganar al quedarse con la plataforma nativa, sin embargo todo esta por verse.

No perdamos el punto. Como me dijo mi buen amigo Ramiro Corona: "nosotros debemos estar mas allá del bien y el mal".

miércoles 13 de febrero de 2008

Opinión sobre el futuro de Delphi

Si desarrollas en Delphi y te interesa lo que haces, cualquiera que sea tu opinión sobre el futuro del desarrollo, yo creo que es muy importante que se tome en cuenta tu punto de vista, tu situación actual, tus deseos y tus inquietudes, como parte de la comunidad Delphi en español.

La mejor oportunidad que tendremos para eso es dedicar un tiempo (a mi me tomó alrededor de una hora con pausas) para llenar con toda sinceridad la Encuesta Delphi 2008 de CodeGear. Es como votar, si no votamos mejor no nos quejamos :-$

Claro que hay una pregunta sobre el País en el que estas, e incluso hay una pregunta sobre el precio que me parece justo a pagar por la nueva versión/actualización de Delphi.

martes 5 de febrero de 2008

70,000 PCs para Linux

Solo un pequeño comentario-paréntesis:

La policía francesa ha decidido migrar sus 70,000 computadoras para que usen ubuntu linux.

Ellos han usado OpenOffice en lugar de MS Office desde hace dos años y FireFox en lugar de IE desde hace un año.

Se puede leer la noticia en DiarioTI en:
http://www.diarioti.com/gate/n.php?id=16548

¿Será que esto es un pequeño paso para el policía francés, pero una tendencia para la industria del software?

P.D. Felicidades a CodeGear por el millón de licencias académicas de Delphi vendidas a Rusia. Eso es lo que llamamos "Fertilizar el mercado".

Tomen eso autoridades de educación latinoamericanas, ahora competiremos en serio con India, China, Brasil, Polonia, Irlanda y por si fuera poco, Rusia. Se me van poniendo las pilas, no quiero ni pienso redefinir el termino tercer mundo.

martes 29 de enero de 2008

Nuevo en Delphi #2: Sobrecarga de operadores

Esta característica, aunque no añade funcionalidad, es simple pero poderosa en la legibilidad del código. La sobrecarga de operadores solo funciona en Records en Delphi win32 y para Records y Classes en Delphi.Net.

La sobrecarga de operadores consiste en poder definir un metodo de clase declarado como class operator, que se ejecuta cuando se utiliza dicho operador con ciertas clases como operandos, es decir que si definimos:

var
TTequila
= record
public
VolumenMiliLitros: integer;
GradoAlcohol: Single;
class operator Add(
TeqA, TeqB: TTequila): TTequila;
class operator GreaterThan(
TeqA, TeqB: TTequila): Boolean;
end;

class operator TTequila.Add(
TeqA, TeqB: TTequila): TTequila;
var
porcentAEnMezcla, porcentBEnMezcla: single;
begin
// Al mezclar (sumar) dos tequilas se obtiene
// la suma de su volumen liquido...
Result.VolumenMiliLitros :=
TeqA.VolumenMiliLitros
+TeqBVolumenMiliLitros;
// ...pero se promediaria su grado de alcohol
// en proporcion al volumen (en teoria)
porcentAEnMezcla :=
TeqA.VolumenMiliLitros
/Result.VolumenMiliLitros;
porcentBEnMezcla :
=
TeqB.VolumenMiliLitros
/Result.VolumenMiliLitros;
Result.GradoAlcohol :
=
(TeqA.GradoAlcohol
* porcentAEnMezcla) +
(TeqB.GradoAlcohol
* porcentBEnMezcla);
end;

class operator TTequila.GreaterThan(
TeqA, TeqB: TTequila): Boolean;
begin
if TeqA.GradoAlcohol > TeqB.GradoDeAlcohol then
Result :
= True
else
Result :
= False;
// Tambien podria ser:
// Result := (
// TeqA.GradoDeAlcohol > TeqB.GradoDeAlcohol);
end;


Entonces cuando tuvieramos algo como esto:


var
Jimador, Cazadores: TTequila;
MezclaChafa: TTequila;

begin
Jimador.VolumenMiliLitros :
= 750;
Jimador.GradoDeAlcohol :
= 30;

Cazadores.VolumenMiliLitros :
= 1000;
Cazadores.GradoDeAlcohol :
= 36;

if Cazadores > Jimador then
begin
MezclaChafa :
= Jimador + Cazadores
end
else
begin
MezclaChafa.VolumenMiliLitros :
= 0;
MezclaChafa.GradoDeAlcohol :
= 0;
end;

WriteLn(
'Mezclado ');
WriteLn(
'Volumen: ',
IntToStr(MezclaChafa.VolumenMiliLitros));
WriteLn(
'Grado De Alcohol: ',
FloatToStr(MezclaChafa.GradoDeAlcohol));
end;


El resultado seria:


Mezclado
Volumen: 1750
Grado De Alcohol: 33.4285


Ya que el operador Mayor Que > (GreaterThan) fue sobrecargado para que cuando se desea saber si un TTequila es mayor que otro TTequila (los dos parámetros del operator son TTequila) entonces devuelve Verdadero si el primer TTequila tiene un GradoAlcohol mayor que el otro.


De igual manera, el operador Adición, o Suma + (Add) fue sobrecargado para que cuando se "suman" dos TTequila, el resultado sea otro TTequila con la suma de los volumenes y el proporcional del grado de alcohol de cada uno según el volumen que aportan.


NOTA IMPORTANTE: Otra relativamente "reciente" característica de Delphi es precisamente que los tipos record pueden tener métodos como las clases, con la diferencia que los record son pasados por valor (una copia de ellos) y las clases por referencia (una copia del apuntador hacia la clase).

lunes 14 de enero de 2008

Nuevo en Delphi #1: Datos de Clase

Primero, una disculpa por esperar tanto para comenzar con la serie de Lo nuevo en Delphi, esta semana pasada fueron días interesantes en los proyectos y el tiempo fue lo primero que se acaba.

Quiero empezar a mencionar las nuevas características de Delphi, abarcando 2006 y 2007, ya que muchas de estas se iniciaron en Delphi 2006 pero se consolidaron en Delphi 2007. El objetivo es analizarlas, saber que tan útiles podrían ser y en donde aplicarían.

Una de las que mas me llamo la atención de inicio son los datos de clase (o Class Data).

Tener datos de clase consiste en tener variables que existen desde que la clase existe (no por objeto o instancia de la clase). Hasta ahora Delphi contaba solo con Métodos de clase.

Los campos/datos/variables de clase pueden ser accesados por todos los objetos de esa clase y pueden ser declarados con los mismos restrictores de acceso (private, public, protected, etc.) de los datos de objeto.

Estos datos compartidos por todas las instancias de una clase son parte de la sintaxis de muchos otros lenguajes pero mas que nada es una técnica cercana de Programación orientada a objetos (POO). Puede usarse, por ejemplo, para controlar datos variables entre muchos threads de cierta clase o heredadas de la misma clase, semáforos, o conteo de instancias y muchas otras cosas.

Claro que podemos usar variables globales para eso desde siempre. Aun así, esta nueva forma del lenguaje hace el código mas legible y mejora la estructura ya que la variable tiene relación explicita directa con la clase. Al final, la ventajas de esta nueva característica es hacer el código Delphi win32 mas cercano al de Delphi.Net, además de acercarnos a una mejor estructura de POO.

La forma de declarar variables de clase es usando la sección opcional class var en loa declaración de la clase. Un ejemplo podría ser el siguiente:

TCualquierClase = class
private
FiDato: integer;
FsNombre: string;
class var
Control: integer;
//Dato de clase
OtroDato: TStringList; //Otro dato de clase
public
Nombre: string;
...
end;


En este caso, el valor de Control y OtroDato serán datos compartidos por todas las instancias de TCualquierClase mientras que FiDato, FsNombre y Nombre son datos particulares de cada instancia.



En un futuro (yo espero y ruego) mediante esta característica también seria mas fácil y claro implementar soporte multihilo (multithread-safe) en todo el lenguaje y la VCL, así como tiene actualmente Java en su respectiva, pero sin que sea necesario correr los programas dentro de un ambiente "controlado" y restringido como la máquina virtual.

jueves 3 de enero de 2008

¡¡ Lo nuevo en Delphi 2007 !! ;)

CodeGear ha estado muy ocupado últimamente haciendo un gran hincapié en "las nuevas características de Delphi en Delphi 2007".

La comunidad internacional, y me refiero a Europa, EUA y quienes ya pudieron acceder a Delphi 2006 o 2007, han tenido diversas reacciones a estas características, en algunos casos tratando de englobarlas de dos maneras: Por un lado algunos opinan que "llevan a Delphi al nuevo siglo" o algo así, mientras que otros concluyen que "son características innecesarias que agregaron solo por que otros lenguajes las tienen y muchos las querían ver en Delphi para no sentirse atrasados". Cualquier polémica por mas ligera que sea, genera alguna opinión radical contrastante.

Voy a comentar algunas de esas características aquí en el blog en los siguientes días, sobre todo las adiciones al lenguaje que son las que mas me han llamado la atención, y de esa manera podemos hacernos una opinión mas concreta.

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.