Delphi For Android Sneak (Preview 2)

septiembre 10, 2010 en Delphi, Enlace interesante, Entrada Diario, Taller práctico, Videos

Hoy he añadido al blog el enlace de Lennie De Villiers. Y me visto muy gratamente sorprendido por el video, por lo que no he tardado demasiado a resaltarlo, tanto en el facebook, twitter como aquí mismo.

Aunque está en inglés, si yo me he enterado de la película, vosotros también…

:-D

Últimas promociones de compra de Delphi 2010

mayo 9, 2010 en Delphi Prism, Enlace interesante, Entrada Diario, Noticias, Noticias Delphi, Ofertas, Promociones

Para aquellos que pudieran tener pensamiento de adquirir Delphi 2010, no se si conocéis que se ha lanzado un promoción especial de compra, vigente desde el 26 de Abril hasta el 28 de Junio del 2010.  Esta promoción la podéis encontrar en:

http://www.embarcadero.com/radoffer

donde podéis ampliar la información sobre la misma. En principio parece interesante.

Básicamente, existen dos posibilidades a elegir:

1.- La compra de Delphi 2010 ó C++ Builder 2010, te permitiría adquirir RAD Studio incluyendo las tres personalidades (Dephi, C++ Builder y Delphi Prism).

2.- La compra de Rad Studio 2010 Enterprise, te permitiría adquirir RAD Studio Architect + DBOptimizer, que como sabéis es una de las herramientas de Embarcadero de optimización de las consultas de SQL.

Y en cualquiera de los dos casos, se recibirían también gratuitamente los controles TMS Smooth Controls y el libro Delphi 2010 Handbook de Marco Cantú

Existe un comentario al final de la entrada de Embarcadero sobre la fecha 15 de Julio, que sería, en principio, la fecha tope para acogerse a los bonus de compra de ambas ofertas.

También os aconsejo que leáis previamente las condiciones de compra, existentes en:

Términos y condiciones de compra

para no llevaros sorpresas.

Finalmente, y cambiando de tercio, he visto esta tarde en Twitter que está preparando Jim McKeet una interesante entrevista a Nick Hodges y requería de los lectores y seguidores de su blog que sugirieran preguntas interesantes.

http://www.delphi.org/2010/05/questions-for-nick-hodges/

Y a tenor de lo leído, puede ser una entrevista muy atractiva, que no deberíamos perder.

Entre las preguntas me quedo con una, planteada por Mihaela MJ, donde plantea la eterna pregunta de que nuestra herramienta tenga un sistema que haga sencilla la migración a otro equipo tanto del entorno como de los componentes/herramientas de terceros. Esa pregunta yo también me la he hecho… :-)  cada vez que he tenido que reinstalar Delphi tras el formateo de mi pc.

Estaremos atentos…

La gran división…

abril 14, 2010 en Código, Delphi, Enlace interesante, Entrada Diario, framework, Taller práctico

Suena bien el título… :-)  y aunque a primera vista, podamos pensar que la entrada va a tratar del paradigma clásico “Divide y vencerás”, en este caso concreto, se nos vuelve a hablar de un tema recurrente y ya conocido en el blog, como lo es la separación del interfaz del usuario de las reglas de negocio. Como el autor de la entrada nos dice, Cobus Kruger, justo al empezar, en las primeras lineas:

One of the most important principles in building complex software systems, is detaching  the business logic from the screens that allow users to view and edit information.

Esta introducción pertenece al blog Source Code Adventures y concretamente al artículo:

Inducing The Great Divide

escrito en Noviembre del 2009. A él nos vamos a referir en esta ocasión.

Además, por la cantidad de comentarios y lo leído en otra entrada posterior de su blog, me dió la impresión de que tuvo mayor repercusión de lo que él hubiera esperado, cosa que no era de extrañar, la verdad, porque su contenido es bastante sugerente, como veremos más adelante, ya que se apoya en la RTTI (Informacion de tipos) para vincular los controles de edición con la capa que soporta las reglas de negocio.

Pero realmente, la idea de citar el artículo y profundizar en su contenido, ha sido bastante accidental, como casi todo lo que nos ocurre en el blog. ;-)   Uno se sienta a media tarde a buscar información sobre el último update, con la sana idea de compartirlo con vosotros, y tras una búsqueda inutil en el sitio de Embarcadero (yo esperaba encontrar mas información sobre las referencias 274215, 275149 y 275253 citadas como identificadores en el readme del Hotfix que publica Tim DelChiaro) caí como hoja del arbol, otoñal, hasta la entrada ID: 27468, MvFramework and Sample, escrita por Leonardo M. Ramé en el CodeCentralde Embarcadero. Me equivoqué… jajaja pulsando sobre CodeCentral en lugar de Quality Central… por eso de que los dos acaban en Central… :-D

Y de igual forma, fue también casual que diera un problema la descarga del código fuente… Y como sabueso, al ver una referencia citando el artículo motivo de estas lineas, decidí saciar la curiosidad y ver que contenía “eso” que aparentemente hablaba de frameworks. Pensaba para mi… ¡hombre! ¡si está publicado en Embarcadero posiblemente sea porque aporte algo que pueda ser de interés!  :-)   y con ese espiritú proseguí la cacería intelectual.

El siguiente paso vendría a ser inspeccionar el blog http://leonardorame.blogspot.com/ de Leonardo M. Ramé, de Argentina. Y ya para finalizar esa sesión, aterrizaba vía google sobre la entrada original que nos habla de “la gran división”, entrada que había servido como base para la respectiva de Leonardo. Por cierto, permitidme antes de proseguir en esa linea, que os recomiende la lectura del blog deLeonardo, ya que he visto bastante contenido que tiene muy buena pinta. Me lo apunto en la agenda para volver a él más adelante…

Seguimos y nos centramos en lo que hoy nos ocupa:

Inducing The Great Divide (by Cobus Kruger)

Como otros muchos artículos que hemos compartido, éste también está en inglés y quizás por eso el remarcarlo, porque fácilmente se nos podría pasar inadvertido y resulta muy interesante  el tratamiento que le da al uso de la información de tipos, vinculando a través del nombre del control la propiedad adecuada a la que va a estar enlazado. El ejemplo que pone Cobus es bastante claro. Aunque, como todos los ejemplos, es eso… un ejemplo, una sugerencia, un punto de partida.

La única pega, es que este tipo de ejemplos, tal y como está presentado, suelen desanimar a muchos compañeros que están empezando, pues no suelen incluir el código fuente, sino que uno va extrayendo de los bloques leídos y montando en el editor de código lo comentado en la entrada. Así que no tenéis que desanimaros.

Venga, ya que no lo disponemos traducido, os ayudo un poco en esa tarea, porque una vez que lo veais en funcionamiento vais a comprender mejor el sentido de un uso inteligente de la información de tipos:

Abrid un nuevo proyecto. Cambiad el tamaño del formulario para que quede similar al que muestra Cobus en su artículo.

image

Como se puede ver, tenéis que añadir 2 componentes de la clase TEdit, 1 TComboBox, 3 TLabel, uno para cada uno de los editores de texto y finalmente, 3 botones, para lo que os puede servir 3 componentes de la clase TButton.  Cambiar los captions de las etiquetas y de los botones con un texto similar al que se ve en la imagen.

Luego nos propone añadir una instancia de TPerson. Lo vamos a hacer: pero tenemos que declarar previamente la clase y para eso, podéis poner en la sección de tipos del formulario entre la palabra reservada type y  el encababezamiento de la declaración del formulario, el interfaz de dicha clase.  Haced un copia y pega del bloque que nos propone (el bloque de código en el que figura la declaración de la clase TPerson y que contiene los campos Nombre, Edad y Ocupacion, con sus respectivas propiedades de lectura/escritura). Finalmente, podéis añadir las variable que nos va a servir para instanciar la clase, en la sección privada del formulario.

Otro requisito es que el nombre de los dos componentes TEdit (la propiedad Name) y del componente TComboBox tiene que ser asignado con el mismo nombre que hemos declarado las propiedades publicadas en la clase TPerson. Cobus permite varias alternativas ya prefijadas (o coincidir el nombre, o coincidir el nombre + ‘sufijo’ o finalmente coincidir un prefijo y el nombre). Mi consejo es que para no liaros con el ejemplo, tengan el mismo nombre.

Ahora añadid una unidad al proyecto para incluir la declaración de tipos de la clase estrella: TObjectBinding.

De nuevo copiamos y pegamos en su interior los distintos bloques que componen tanto la interfaz como la implementación.

Tenemos que incluir en la sección de uses (previa al tipo) la dependencia de otras unidades para que resuelva los tipos externos que contiene el código y que estan definidos lógicamente en otras unidades.

uses Rtti, TypInfo, Generics.Collections, Controls, StdCtrls, SysUtils;

Y ya para finalizar, volvemos a la unidad del formulario y nos resta seguir sus recomendaciones al implementar los botones. Yo he escrito unas lineas de código siguiendo esas indicaciones:

procedure TFormularioPersona.bnCargarClick(Sender: TObject);
begin
  Binding.Load;
end;

procedure TFormularioPersona.bnLimpiarClick(Sender: TObject);
begin
  LimpiarFormulario;
end;

procedure TFormularioPersona.bnSalvarClick(Sender: TObject);
begin
 Binding.Save;
end;

procedure TFormularioPersona.FormCreate(Sender: TObject);
begin
  Person:= TPerson.Create;
  PreparamosDatosArticulo;
  Binding:= TObjectBinding.Create(Self, Person);
end;

procedure TFormularioPersona.FormDestroy(Sender: TObject);
begin
  FreeAndNIl(Person);
  FreeAndNil(Binding);
end;

procedure TFormularioPersona.LimpiarFormulario;
begin
  Name.Clear;
  Age.Clear;
  Occupation.Text:= '';
  Occupation.ItemIndex:= -1
end;

procedure TFormularioPersona.PreparamosDatosArticulo;
begin
  with Occupation.Items do begin
     Add('Programador');
     Add('Ama de casa');
     Add('Cocinero');
  end;

  with Person do begin
    Name:= 'Pedro';
    Age:= 34;
    Occupation:= 'Cocinero';
  end;

end;

end.

Y ya podéis compilar el proyecto y ejecutar la aplicación. ¡voila!

Si habeis obtenido exito al ejecutar la aplicación y habéis jugado con los botones, cargando y salvando los valores existentes, o sobrescribiendolos, estaréis de acuerdo conmigo en que el resultado final es un formulario bastante “limpio” de código y versatil, con una ruptura clara entre el interfaz del usuario y la capa lógica representada por la instancia de TPerson.

Es más, se produce la paradoja de que cuantos mas controles existan, mas claro será nuestro código respecto a otras unidades diseñadas mediante asignaciones directas entre los valores guardados por el controles y los campos que vinculados del objeto. Ya que toda la lógica de la relación de vínculos creados se almacena de forma trasparente por quien sabe realmente de ello: la clase TObjectBinding (apoyandose en la información de tipos)

Estoy completamente seguro, que tras la lectura, muchos compañeros habrán visto útiles algunos escenarios en los que puede aplicarse. Pero lo dicho: es un punto de partida, una sugerencia. El código es muy interesante y sobretodo didáctico.

Me gustaria que opinarais sobre la entrada de Cobus ¿que os parece?

Se que muchas de las personas que comienzan sus primeros pasos en el entorno, van a agradecer ese tipo de indicaciones, los comentarios, conocer por otro compañero la oportunidad de hacerlo o de no hacerlo. Así que tenéis la oportunidad de mojaros…  ;-)

¿Alguien opina?

O:-)

RAD Studio 2010 Hotfix 2

abril 13, 2010 en Entrada Diario, hotfix, Noticias, Noticias Delphi, updates

Aunque ya es algo conocido por bastantes compañeros, he querido incluirlo en una entrada para que quede guardado y pueda ser consultado por cualquiera mas adelante. Este último update (mas bien podríamos decir que es un pequeño parche) fue publicado por Tim DelChiaro con fecha 9 de Abril del 2010, quedando disponible para la descarga para los usuarios registrados de Delphi 2010, C++Builder 2010, Embarcadero RAD Studio 2010, y Embarcadero All-Access.

Descarga del Update en Embarcadero

También, escrito por Tim DelChiaro, tenéis a vuestra disposición una página de comentarios e instrucciones de la instalación en Readme (Léeme)

De las 3 correcciones que incluye, una afecta al dialogo de opciones de Delphi, otra a C++ y finalmente la tercera a DataSnap. Podéis ampliar la información accediendo al readme que se incluye.

Semana intensa

marzo 1, 2010 en Delphi, Entrada Diario, Eventos, Noticias, Noticias Delphi, Presentaciones, Seminario web, Videos

Se ha cerrado una semana muy intensa, donde hemos podido asisitir a la celebración de dos seminarios online, dirigidos respectivamente a la comunidad de Delphi en Brasil/Portugal (25/02) y a la comunidad de habla hispana (26/02), en los que, tanto en uno como en otro se han tratado un contenido similar.

Delphi Conference Online – Brasil – dia 25 de fevereiro

Delphi Developer Day IV en Español – 26 de febrero

Os hago notar, que si accedeis al vínculo del primero, ya existen para la descarga los respectivos videos de las 6 sesiones y que en breve tiempo, según se comentó por el propio Andreano Lanusse, estarían tambien disponibles los del seminario español.

Yo, concretamente, pude asistir al seminario hispano y mi valoración en general del acto fue bastante positiva, muy positiva, si bien, estoy seguro que habrán compañeros que puedan pensar que el contenido de algunos de los temas, coincide basicamente con el recibido en otros anteriores. Pero es normal que sea así, puesto que nuevos programadores se incorporan a Delphi y éstos requieren tambien conocerlos y preguntar sobre ellos.

Así, temas como el de las nuevas capacidades sobre “touch y gestures”, que nos introduce en el mundo de las nuevas posibilidades de los dispositivos táctiles, sobre el nuevo Datasnap en lo que respecta a la gestión de datos, RTTI en lo que hace referencia a la información de tipos en tiempo de ejecución, o el soporte XML, se combinaron con otros menos frecuentes y en mi opinión interesantes, como el desarrollo de aplicaciones con Intraweb, (en una interviención muy valorable y altamente recomendable de Jackson Gomes), o la  que hacía referencia a la interopeabilidad de Delphi Prism con Mono en Linux, de Luis Felipe González Torres, o finalmente la que cerraba el seminario, que abordaba Linq dentro de las nuevas tecnologías que vienen de la mano de punto net. Marco Santin, compartía esta última conferencia.

Luis Alfonso Rey, de Danysoft, abordó un tema también interesante como es la modularidad de nuestros desarrollos en base a las librerias en formato propietario (bpls) frente a la generación de los ejecutables tradicionales, que las empaquetan. Es un tema en el que de seguro habrán muchas posturas enfrentadas y puntos de vista contrastados.

De todas, creo que me quedaría sin duda la que nos abría una puerta a Intraweb. Jackson Gomes estuvo fantástico en una hora intensa y didáctica. Os recomiendo, sobretodo a los que no han podido asisitir, que no os perdais el video cuando sea subido a la web de embarcadero.

Eso sí, reconozco que los programadores vinculados al mundo de linux,  casi con seguridad van a escoger el video  de Luis Felipe Gonzalez Torres. También es altamente recomendable si vais a trabajar con Delphi Prism y Mono.

Finalmente, quiero hacer una mención especial al video que hace referencia al trabajo con los componentes de impresión de Rave Reports. Este video pertenece a los seminarios de brasil del día anterior que compartia con la comunidad brasileña Alan Glein.

Me resta felicitar a Embarcadero. Creo que vamos por muy buen camino, y eso, a todos los que formamos parte de esta “familia” es algo que nos alegra y motiva.

Próxima cita el 26 de Febrero

febrero 8, 2010 en Advertencia, Delphi, Entrada Diario, Eventos, Noticias, Noticias Delphi, Recordatorio, Seminario web

No voy a hacerlo demasiado largo, ya que es un tanto tarde (madrugada del lunes en España) y como todo hijo de vecino tengo que levantarme temprano para trabajar, pero tenía pendiente comentar con vosotros que ya han confirmado la fecha del evento “Delphi Developer Day IV”, que va especialemente dirigido a la comunidad hispana: viernes, 26 de Febrero (2010).

En lo que respecta a la hora de inicio, según el formulario de respuesta que se lanza al registrarte al evento, figura las 7:00 AM (PST), que si no me equivoco y de acuerdo al último que pude asistir, vendrán a ser sobre las 4 pm (en España).

Recordad que en http://dn.embarcadero.com/article/40336 disponéis de mas información tanto del contenido del seminario web como de los expertos que van a participar. Os adelanto simplemente que serán 8 presentaciones, a la cual mas interesante  :-)

No deberías de perdértelo.

Por cierto: esta tarde no he podido dedicar tiempo al blog ya que estoy bastante absorbido con el aprendizaje de punto net y mi toma de contacto con Delphi Prism. Y al final, tienes que combinar lo mejor que se puede el tiempo de forma que en este caso, desgraciadamente el blog ha sido el sacrificado. No obstante, no quería acabar el día sin al menos dejar estas letras.

Ha sido una tarde tranquila, recreandome y “jugando” con el entorno, e intentando poner en práctica el ejemplo de desarrollo que propone Marco Antonio Santín en su video del “Curso de Desarrollo de aplicaciones de escritorio y acceso a datos con Delphi Prism”. A medida que voy siguiendo los pasos, comparo mentalmente con las estructuras que uso habitualmente desde mis desarrollos y amplío las ideas comentadas, intentando encontrar puntos similares, que me sirvan de referencia.

Así por ejemplo, he intentado encontrar mis clases Ancestro y Browser como base de las propuestas del curso y he acabado traduciendo la llamada principal “Mostrar” a punto net, para ver que tal quedaba. (Mostrar era un método de clase de la clase base TAncestro).

Tras un buen rato, el método original

class function TAncestro.Instancia: TAncestro;
var
  I: Integer;
begin
  for I := Screen.FormCount - 1 downto 0 do
  begin
    TForm(Result) := Screen.Forms[I];
    if Result.ClassType = Self then Exit;
  end;
  Result := nil;
end;
class function TAncestro.Mostrar: TAncestro;
begin
  Result := Instancia;
  if Assigned(Result) then
  begin
    if Result.WindowState = wsMinimized then
      ShowWindow(Result.Handle, SW_RESTORE);
    Result.BringToFront;
  end
  else
  begin
    Result := Create(Application.MainForm);
    Result.RegistroLeer;
    Result.Show;
  end;
end;

quedaba reescrito como:

class method TAncestro.Instancia(FormType: System.Type): TAncestro;
begin
   Result:= Nil;
   for each f: Form in Application.OpenForms do
   begin
      if (f.GetType() = FormType) then
      begin
        Result:= TAncestro(f);
        Exit;
      end;
   end;
end;

class method TAncestro.Mostrar(FormType: System.Type): TAncestro;
begin
  Result:= Instancia(FormType);
  if Assigned(Result) then
  begin
    if Result.WindowState = FormWindowState.Minimized then Result.Show;
    Result.BringToFront;
  end
  else begin
    var Prototipo: Object := Activator.CreateInstance(FormType);
    Result:= TAncestro(Prototipo);
    Result.MdiParent:= ActiveForm;
    Result.Show;
  end;
end;

Y la llamada desde el menu principal había cambiado también. Inicalmente escribía:

TModelos.Mostrar;

y ahora, tenía que añadir algunas lineas mas (aunque no demasiadas más). En la primer aproximación hacia algo como:

  var fModelo: TModelos := New TModelos();
  var Prototipo: System.Type;
  Prototipo := fModelo.GetType();
  TModelos.Mostrar(Prototipo);

Luego me he dado cuenta de que no tenia demasiado sentido instaciar dos veces el objeto por lo que tras otro buen rato, escribo finalmente:


  var Prototipo: System.Type;
  Prototipo := System.Type.GetType("Empresa12.TModelos");
  TModelos.Mostrar(Prototipo);

Lo cual parece mas razonable y ademas funci0na…  :-)

Como primer punto de encuentro está bien (imagino que en próximos días encontraré formas de simplificar esas llamadas)  y doy por bien empleada la tarde. Pero es difícil evitar sentirse extraño y no hacer algunas comparaciones, de cosas que he podido echar en falta. Por ejemplo en el editor de código: Es imposible no darse cuenta de que el editor no es mas cómodo ni usable por tener una pestaña adicional (una para el código y otra para el diseñador del formulario). Así pues, mientras Delphi trabajaba entre bastidores, me he encontrado con sorpresa que algunos cambios manuales en el nombre de la clase o del ascendente en el tipo, ocasionaba errores de lectura en la carga del formulario en tiempo de diseño, fruto de que no se habian modificado los modulos que llevan la referencia “XXX.designer.pas”. Y he tenido que ir repetidamente a ese modulo de diseño de formulario y abrirlo con un editor de texto plano y modificar manualmente los nombres para que fueran correctos y se solucionara el error. :-(  ¡Cosas un tanto extrañas que te hacen el trabajo mas farragoso!

Tampoco entiendo el por qué no han puesto un filtro en la paleta de componentes de forma que puedan ser fácilmente encontrados a la hora de buscar uno en concreto. Delphi lo resolvió en las ultimas versiones, tanto a nivel de la paleta de componentes como de busquedas mas generales a nivel de ide y opciones de configuración.

Existen algunos detalles mas pero parece aconsejable dejarlos para otro día dada la hora que es…  :-)

Mañana será otro día. Por hoy yo tengo bastante…