Una imagen vale más que mil palabras

septiembre 23, 2011 en 64bits, Entrada Diario, Facebook, FireMonkey, Presentaciones, Recordatorio, Seminario web, XE2

No voy a decir nada más. Cualquier cosa que diga siempre hay quien dirá que si este es un fanático de delphi, que si yo que voy a decir, que si…   bla, bla, bla…

:-)

¡Simplemente disfrutad!, perded unos minutos con este vídeo que muestra las nuevas posibilidades que se abren con nuestro entorno de desarrollo. Lo vais a ver por vosotros mismos. ¡A mi no me hace falta entender la narración, para de un simple vistazo saber que vamos por buen camino!.

Estais viendo una de las versiones de Delphi mas comprometidas y ambiciosas de su historia.

Ahhhhhh… y nuestra Comunidad sigue creciendo.  Muchos compañeros estamos luchando por ella, no ya para nuestro beneficio personal, sino para tener un sitio donde hablar, discutir, compartir cosas. Únete a nuestra Comunidad y se parte activa de ella.

 

 

 

 

 

Aviso sobre el grupo de Facebook “Delphi Solidario”

septiembre 6, 2011 en Advertencia, Delphi, Entrada Diario, Facebook, Noticias, Recordatorio

Hola a todos:

Comentaros que finalmente tomé la decisión de volver a crear el grupo de Facebook, “Delphi Solidario” de acuerdo a la nueva estructura de grupos de esta red social  , (decisión que había demorado durante meses), y para ello, se ha hecho necesario dar de baja todas los miembros que formaban parte del antiguo grupo. Si observáis que ha desaparecido vuestra membresía ya conoceis la razón. ¡No vayáis a pensar que es por otro motivo!

Para poder eliminar un grupo antiguo hay que eliminar todos los miembros, momento en el que Facebook lo elimina del directorio de grupos. Podría haber simultaneado durante un tiempo ambos grupos e ir traspasando gradualmente a los miembros pero creo que no valía la pena, ya que no eramos tantos (aproximadamente unos 50 compañeros).

A los miembros que he podido dar de alta directamente, porque ya formaban parte del circulo de amigos, los he incluido (espero no haber olvidado a ninguno). Os pido, al resto, que os vayáis uniendo al grupo.

Esta es la dirección del grupo de facebook “Delphi Solidario”:




http://www.facebook.com/groups/delphisolidario/

(recordad que también existe el enlace en la barra lateral del blog)

Respecto al motivo del cambio al nuevo sistema de grupos, es básicamente por el sistema de publicación, que tiene mejoras respecto al antiguo sistema de grupos. Al final, eras mas las ventajas que los inconvenientes y creo que valía la pena.

Sed libres de participar en el grupo, añadiendo los enlaces y publicaciones que creáis conveniente resaltar. Es un grupo abierto y libre (con el respeto a unas mínimas normas de convivencia que todo el mundo ya conoce)

Un saludo y gracias por participar,

Salvador

 

 

 

 

Seguir la linea…

marzo 29, 2010 en ¿Sabías que...?, ¿Sabías que...? [Delphi], Delphi, Enlace interesante, Entrada Diario, Noticias, Noticias Delphi, Recordatorio

Espero que encontrarais interesante el artículo de Cary Jensen que compartimos en la entrada anterior y que resalté porque abordaba un tema que, aunque puede no ser crítico, no estaba de más conocerlo.

Shifting TFields in TDataSets Bound to TDBGrids…

Comentábamos que era uno de esos temas en los que se suele caer por accidente, y a veces ni siquiera se llega a ser consciente del problema, pues se tiene que dar la casualidad que al usuario le haya dado por alterar el orden de las columnas en un dbgrid y que justamente se haya escrito codigo que pueda acceder a través de un índice dentro del ClientDataset y que además no existan columnas persistentes… :-)  Quizás son demasiadas casualidades… pero seguro que si algún día se cruzan, será con fatalidad, en una de esas rejillas que tiene que salvar al mundo de una destrucción total:

-Atención sr. presidente… haga doble click en la rejilla para que los misiles destruyan el meteorito…
-Dios mio!!! Esto ha generado una excepción… Estamos todos perdidos…  Se ha bloqueado el sistema…
… (y se hizo el silencio en toda la Tierra… )  :-)

Fuera de lo meramente anecdótico, la idea es seguir trabajando en esa linea e ir seleccionando de cuando en cuando algunas entradas para destacarlas y compartirlas con la comunidad hispana de programadores. Y si es posible, incluso aportar la traducción como ya ha sucedido en dos ocasiones. Aunque eso, os confieso que no resulta tan sencillo, ni disponemos siempre de tiempo suficiente, teniendo en cuenta además, que intentamos hacer las cosas correctamente y solicitamos permiso -previamente- para poder llevar a cabo cualquiera de estas iniciativas. Creo que sería bueno que entre todos, poco a poco fueramos derribando los muros que van aislando a las distintas comunidades, de forma que existieran ventanas y espacios abiertos entre ellas, que las pudieran comunicar y hacer converger.

A veces me pregunto si vamos por buen camino… :-)  Solo hay que seguir las señales.

Hoy he seleccionado a través de la lectura del Twitter, y concretamente del perfil de Malcon Groves, una referencia a la entrada WeakRefence in Delphi – solving circular interface references escrita por Vincent Parrett.  Es una entrada muy interesante, donde se reflexiona acerca de las interfaces y el recuento de referencias, desde un punto de vista enfocado en varios frentes que se interrelacionan: la posibilidad de que nuestra aplicación no libere correctamente la memoria reservada, los posibles errores de acceso o violaciones, que emergerían al acceder desde nuestro código a referencias no validas, y la problemática real que plantea el hecho de tener que evitar las referencias circulares, puesto que éstas, se prohiben expresamente desde nuestro entorno. Vicent Parret utiliza para explicar esta problemática y proponer una posible solución, un ejemplo muy sencillo basado en la relación padre-hijo, aunque entiende que pueda ser resuelta de una forma mas formal desde el mismo compilador:

I still think this is something that could be solved in a better way by the delphi compiler/vcl guys n girls.

Esa posible solución se apoya en la posibilidad de crear una clase TWeakReferencedObject, que le permite evitar la referencia circular y establecer la relación entre las clases padre e hijo. Las últimas lineas de código de su entrada, donde comenta los metodos Get/Set que permiten acceder a la clase padre desde la clase hijo (TChild), lo harían de forma segura.

Ahora mismo no es posible descargar el código completo del ejemplo, puesto que existe un pequeño problema en el fichero zip. Pero en breve, nos ha comentado que lo va a reponer para que pueda ser descargado. Creo que sería interesante darle un vistazo a ese código.

Por cierto, el hecho de que el comentario partiera de Malcon Groves, no es casual ya que, anteriormente, podemos encontrar en su blog varias entradas abordando aspectos relacionados con las interfaces. Concretamente en Casting an Interface Reference to the Implementing Class in Delphi 2010 de fecha 16 deAgosto de 2009, hace una referencia a una de las novedades introducidas en Delphi 2010, relacionadas con las interfaces, que tiene que ver con el operador Is y la posibilidad de que ahora pueda ser utilizado para evaluar si un interface es implementado por una clase especifica:

In Delphi 2010, you can now use the is operator to test to see if an interface type is implemented by a specific class, and if so, cast it to that type and reference any non-interface methods, properties, etc.

Así que si tenéis unos minutos, creo que lo escrito por Malcon Groves puede ser un buen punto de parada para detenerse.

Más cosas en el tintero… (cambiamos de tercio):

Hace unos días hacíamos mención a Intraweb, a raíz del Seminario del día 26 de Febrero. Recordais que hablábamos sobre ello en la entrada Próxima cita el 26 de Febrero haciendo un breve repaso de las sesiones y lo que nos había parecido destacable. En lo que hace referencia a Intraweb, ya tenemos disponibles los ejemplos que se vieron en el seminario y que pueden ser descargados desde la url:

Descarga ejemplos del miniscurso Desmitificando el Intraweb

También es posible acceder al video del curso a través del enlace existente en Embarcadero: Desmitificando el Intraweb

De igual forma, Eliseo González, en uno de sus comentarios anteriores, compartía con nosotros la dirección de descarga de el total de vídeos que componían el seminario del día 26. Comento esto porque fácilmente puede pasar su comentario inadvertido dado que no queda a la vista. Esta es la dirección de Embarcadero en la que podemos encontrarlos:

Delphi Developer Day IV – Vídeos del Seminario

Mas cosas…

Comentaros también que ya está disponible el número 10 de la revista Blaise Magazine, número que requiere la suscripción puesto que ha finalizado el plazo de disponibilidad gratuita para usuarios que hubieran adquirido Delphi 2010 o Rad Studio 2010. Muchos vais a encontrar muy interesante su contenido y por eso lo remarco. Ahora mismo, es una de las pocas publicaciones activas centradas en el Mundo de Delphi y se encuentra traducida a varios idiomas, aunque de momento no a español.

Creo que nada mas por hoy.

Un saludo a todos.

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…


Colección de recursos “on line” sobre D2010 (Pawel Glowacki)

diciembre 7, 2009 en Enlace interesante, Entrada Diario, Noticias, Noticias Delphi, Recordatorio

Dejo la anotación: Con fecha 2 de Diciembre del presente año, publica Pawel Glowacki en su blog en Embarcadero, una colección de enlaces a recursos sobre nuevas funcionalidades en Delphi 2010.

Este es la dirección de la entrada:

http://blogs.embarcadero.com/pawelglowacki/2009/12/02/38849

He resaltado la pagina porque es interesante tenerla a mano, ya que recorre las distintas areas a modo de recopilatorio, con una breve reseña de lo que aporta el vínculo en cuando a  su aportación didáctica.

Así que dicho queda.

Dad le un vistazo porque es muy interesante no perder la dirección… Además, quizás estoy pensando que hasta sea interesante guardar dicha entrada con los vínculos visibles porque si conservamos solo el enlace a la página, esta puede un día ¿esfumarse?  :-)

No es tan extraño… Suele pasar…

¿Os imaginais? Toda la vida conservando un enlace como un tesoro y un dia por la razón que sea desaparece de la red…

Al mas listo se le queda cara de tonto en esos casos…  :-D

JEDI Version Control System (Anexo)

marzo 2, 2009 en Advertencia, Artículos, Ayuda, Consejo, Delphi, Entrada Diario, Recordatorio, VCS (Control versiones)

Suelo releer las entradas al día siguiente de escribirlas y casi siempre acabo corrigiendo algo de lo que escribí el día anterior. En realidad, es casi una pequeña manía mía, porque suelo llevar el máximo cuidado tanto a nivel de contenido como de la presentación del texto. No pasa nada pero creo que ese detalle de cuidar también la forma en la que nos expresamos, al final resulta agradecida por las personas que leen estas entradas. No…, no me refiero a que tengamos que hablar como Quevedo o Góngora sino que no es incompatible expresarnos correctamente con la valoración del contenido. Tambien existen otras razones, como que pueda existir algún párrafo que no me acabe de convencer o incluso otros motivos que tienen relación directa con el contenido, como puede ser alguna palabra mal escrita al teclear, algún acento que se escapa o simplemente que se han omitido las comas necesarias que hacen la lectura mas agradable.

En esta ocasión, he hecho una excepción ya que despues de releer la entrada anterior, he recordado un punto al hilo de lo comentado, que finalmente olvidé mencionar, y se prestaba a reabrir la entrada para ampliar esa pequeña nota. En su lugar, he preferido abrir otra entrada y calificarla como Anexo.

Es una tontería y nada mas empezar a trabajar con JediVCS se os hubiera planteado. No obstante no está de mas comentarlo.

Veamos…

Supongamos que dos usuarios estan compartiendo el proyecto y uno de ellos ha añadido un nuevo módulo. Como comentabamos en la entrada anterior, dicho módulo solo existiría en su repositorio local, que es donde nuestro programador está desarrollando. Así que de alguna forma, se le plantea en ese momento cual es el mecanismo que debe seguir para dar de alta el nuevo formulario dentro del sistema de control de versiones (supongamos que sea un formulario). Una opción posible podría ser abrir el cliente de JediVCS y añadirlo directamente (existe un boton en una de las barras superiores que permite añadir modulos al proyecto), de forma que al sincronizar los archivos su compañero, se detectaría y sería añadido también localmente. El problema es que, aunque puede compilar el usuario B, el hecho de que tenga el modulo añadido en su repositorio local no implica que exista en su archivo de proyecto, lo cual obligaría a añadir de forma manual en Delphi los nuevos módulos al proyecto.

En este caso concreto, creo que lo mas sencillo es que el usuario A , antes de añadir el nuevo módulo, haga un CheckOut de los archivos del proyecto (dpr, dproj), para que al finalizar la tarea de añadirlo, al ser devueltos también se sincronicen en el usuario B. Recordad que una vez añadido en el dpr y este archivo de proyecto exista en JediVCS, automaticamente se detectarían las nuevas unidades y se añadirían de forma automática al usuario B.

Como véis, se desprende de la mecánica misma de trabajo de nuestro servicio JediVCS y tarde o temprano hubiera surgido la necesidad de ampliar el proyecto. Así que conocerlo previamente no está de mas.