Lazarus 0.9.28 en la calle!

Ya comentabamos hace poco mas de un mes que se estaba preparando el lanzamiento y ahora ya es oficial la nueva version estable de lazarus!

Se puede leer las notas de la version en el wiki y os los podeis descargar del sitio de siempre

lazarus_install_cheetah

Y el anuncio hecho por Mattias en la lista de correo internacional:

The Lazarus team is glad to announce the 0.9.28 release. This release
is based on fpc 2.2.4.

This release can be downloaded from the SourceForge download page:
http://sourceforge.net/projects/lazarus/files/

Highlights / Major changes:

LCL:
*LCL now uses gtk2 as default widgetset on Linux and BSD
*Windows CE: Implemented TCalendar, TFloatSpinEdit, TOpenDialog
 and TSaveDialog
*TFrame support. Visually nesting in the IDE.
*TMonitor class: multi-monitor support
*New components: TShellTreeView, TShellListView and TFilterComboBox
*Refactoring of LCL reduced minimum size of executables by about 15%

IDE:
*New IDE options dialog combines environments, editor, codetools,
 code explorer, debugger and help options.
*Application icon has been added to the Project Options
*Many source editor improvements like display of "double width" fonts
 (Eastern, Japanese, Chinese, Arabic, ...), better code folding,
 highlighting, syncro editing, persistent blocks ...
*Codetools: removing empty methods, block completion,
 update references when renaming a unit
*Debugger: assembler windows, easier exception handling,
 breakpoint properties

And thousands of fixes and smaller changes. The list of changes can be
found here:
http://wiki.lazarus.freepascal.org/Lazarus_0.9.28_release_notes

Known issues:
- Debian packages: the default lazarus directory is wrong.
  The IDE detects the right one and asks on first start.
  Just click Ok.
- When compiling a test application the compiler can not
  find project1.lrs. Workaround: save the project before
  compiling OR create an empty file /tmp/project1.lrs.

Share on Twitter

Se acerca Freepascal 2.4.0 / Lazarus 0.9.28

Como nos comenta el amigo Vincent Snijders en la lista de correo de lazarus en su version en ingles se han habilitado las ramas en el svn para centrar el esfuerzo en la correccion de errores.

La direccion para freepascal es :

http://svn.freepascal.org/svn/fpc/branches/fixes_2_4/

y para lazarus :

http://svn.freepascal.org/svn/lazarus/branches/fixes_0_9_28/

Tambien se pueden usar los snapshots si no se quiere usar el svn y reportar todos los errores que se encuentren para realizar una buena version estable ;)

ACTUALIZACION : Se me paso por alto comentar que Jesus Reyes hizo lo propio para la lista de correo en castellano

Share on Twitter

Dia to Lazarus : Reviviendo dia2pas

Para los profanos del lugar voy a hacer una pequeña introduccion para que nadie se pierda ;)

Dia es un programa para hacer diagramas que soporta UML. Despues de muchas divagaciones me he decantado por el ya que es multiplataforma, almenos para mi :) y por que a partir de el se puede generar codigo automaticamente.

Para generar SQL se puede usar tedia2sql (Dia UML Diagram –> SQL Converter ) y para generar Clases FreePascal se puede usar Dia to Lazarus (dia2laz). Aqui viene la razon del articulo.

Dia2laz es un proyecto que he empezado para el fin que comentaba antes, convertir automaticamente un diagrama UML a clases que pueden ser usadas en nuestros proyectos. Para tal fin no he partido de cero si no que he adaptado dia2pas y he creado una GUI para que sea mas amigable.

Quien quiera probarlo puede bajarselo del servidor subversion de alasombra.net como se muestra a continuacion:

svn co svn://alasombra.net/dia2laz Dia2Laz

Para el resto os dejo un screenshot :)

dia2laz

El siguiente paso seria generar las clases compatibles con tiOPF aunque esto no se si implementarlo en dia2laz o hacerlo a modo de “plugin” para lazdatadesktop

Share on Twitter

Nuevo screencast sobre LRUT

Hace nada he subido un screencast a mi espacio de esnips donde muestro rapidamente las nuevas features de LRUT

  • Autocompletado en la sentencia SQL
  • Exportacion del informe a PDF (aunque esta es gracias a lazreport + powerpdf O:)
  • Uso de variables en la sentencia SQL

Sobra decir el lavado de cara que ha recibido la aplicacion gracias a los silk icons de famfamfam y sin mas dilacion el enlace : LRUTWithNewFeatures!

PD: Esta vez he usado recordMyDekstop en su version GTK, realmente sencillo :)

Share on Twitter

Nominaciones para 2009 SourceForge Community Choice Awards!

Me entero mediante el foro oficial de lazarus de estos premios y como no voy a apoyar al proyecto Lazarus :)

Fechas importantes para seguir el evento:

  • May 6 – Nominations open
  • May 29 – Nominations close
  • June 22 – Finalists announced, voting opens
  • July 20 – Voting closes
  • July 23 – Winners are announced at OSCON

Mis votaciones han sido…

  • Lazarus for Best Tool or Utility for Developers
  • Lazarus for Best Project

¿Y tu? ¿Ya has votado?

Share on Twitter

Lazarus 0.9.26 en la calle!

Vincents comentaba hace un par de semanas que se estaba preparando el lanzamiento y ahora ya es oficial la nueva version estable de lazarus!

Se puede leer las notas de la version en el wiki y os los podeis descargar del sitio de siempre

Hay que comentar que aun no se ha hecho el anuncio oficial en la lista de correo pero es que no me podia aguantar mas! ;)

Ya tenemos el anuncio de Mattias Gaertner a la lista de correo, a continuacion un pequeño extracto de los cambios mas importantes :

- The LCL now uses Unicode strings UTF-8 encoded on all platforms.
There are docs, tools and functions to help converting old code.
- The LCL internal graphic system was rewritten for more consistency,
more flexibility, better Delphi compatibility, icon support, native
image lists.
- Lazarus now runs native under Mac OS X using the ‘carbon’ widgetset.
- The IDE designer now allows to connect form components, like
databases on TDataModule.

powered_by

Share on Twitter

Video evolucion de Lazarus con code_swarm

Me enteré via /. de la existencia de code_swarm y la verdad es que me dejó sorprendido.

Para quien no sepa que es podeis visitar la pagina del proyecto, en la que aparecen varios ejemplos, o la web del autor ( Michael Ogawa )

Sin mas dilacion el video sin audio ( no soy tan manitas con los temas multimedia ;) ) :

PD: va un poco rapido pero es que hay que resumir mas de 8 años de desarrollo ;)

Share on Twitter

Lazarus, MS Access y uso de imagenes (Bitmap)

MS Access guarda las imagenes en campos de tipo objeto OLE. La informacion que guarda es el stream del archivo .bmp con una cabecera que contiene la aplicacion con la que tiene que abrir el stream. El stream entero es inservible para trabajar directamente con freepascal/Lazarus asi que lo que viene a continuacion es una manera de usar ese objeto OLE para incrustarlo en un Dbf y poder trabajar mas agilmente en Lazarus.

A continuacion vamos a mostrar distintos contenidos de streams para entender que vamos haciendo.

Archivo BMP :

streambmp

Como se puede ver “BM” marca el inicio del stream.

Archivo BMP incrustado en un campo de tipo objeto OLE de MS Access :

streammdb

Aqui se puede observar la cabecera que comentabamos antes.

Archivo BMP incrutado en un campo de tipo BLOB en un Dbf :

streamdbf

Observamos que la cabecera se reduce en comparacion al objeto OLE.

Para conseguir nuestro objetivo lo primero que tenemos que hacer es determinar la posicion del “BM” para poder extraer la informacion que nos interesa, para este fin usamos la siguiente funcion:


function buscaPosicionBM(STmp : TStream) : Integer;
var
  i : Integer;
begin
  STmp.Seek(0,0);
  for i:=0 to 100 do
    begin
      if STmp.ReadByte = 66 then
        if STmp.ReadByte = 77 then
          buscaPosicionBM:=STmp.Position-2;
    end;
end;

Y a continuacion toda la chicha, o sea, cargamos el objeto OLE en un stream, le quitamos la informacion innecesaria para nosotros y lo metemos en un campo blob de un Dbf.

procedure carga;
var
  Stream, StreamClean : TStream;
  FieldStr : String;
  PFieldStr : PChar;
  posicion : Integer;
begin
  // Cargamos el objeto OLE al Stream
  Stream := TMemoryStream.Create;
  Stream := q.CreateBlobStream(q.FieldByName('DIBUJO'), bmRead);

  // Conseguimos la posicion del "BM"
  posicion :=buscaPosicionBM(Stream);

  // Creamos el stream para añadir despues al Dbf
  StreamClean := TMemoryStream.Create;

  // Añadimos la cabecera para el Dbf
  StreamClean.WriteByte(3);
  StreamClean.WriteByte(0);
  StreamClean.WriteByte(0);
  StreamClean.WriteByte(0);
  StreamClean.WriteByte(98);
  StreamClean.WriteByte(109);
  StreamClean.WriteByte(112);

  // Nos posicionamos correctamente y copiamos la informacion necesaria
  Stream.Seek(posicion, soFromBeginning);
  StreamClean.Position:=7;
  StreamClean.CopyFrom(Stream,Stream.Size - posicion);
  StreamClean.Seek(0,0);
  SetLength(FieldStr, StreamClean.Size);
  PFieldStr := PChar(FieldStr);
  StreamClean.Read(PFieldStr^, StreamClean.Size);

  // Volcamos el Stream creado al Dbf
  reportDbf.Append;
  reportDbf.FieldByName('Codigo').Assign(q.FieldByName('Codigo'));
  reportDbf.FieldByName('descripcion').Assign(q.FieldByName('descripcion'));
  reportDbf.FieldByName('dibujo').Value := FieldStr;
  reportDbf.Post;

  // Liberamos recursos
  Stream.Free;
  archivoLog.Free;
end;

Comentar que q es un TSQLQuery de SQLdb, reportDbf es un TDbf y he usado el programa Hexplorer para ver los entresijos de los streams.

Si algo no ha quedado muy claro me dejais un comentario e intentare explicarme lo mejor que pueda O:)

Share on Twitter