Saltar al contenido

Controlando fugas de memoria en Lazarus 1.0 (Memory Leaks)

27/03/2013

Las fugas de memorio o en inglés Memory Leaks, se producen cuando un programa se carga en la memoria, y crea v objetos, a los cuales se le asigna un espacio de memoria, y cuando el programa termina de ejecutartse no devuelve todo el espacio de memoria asignado al sistema operativo. Por tanto, si ejecutarmos una y otra vez ese programa, llegaría un momento que el sistema opertativo no tendría más memoria para ejecutar programas.

La solución a este problema en Lazarus, «sobre el papel», es muy sencillo. Cada objeto que cree el programador, debe encargarse el mismo programado en borrarlo de la memoria. Un ejemplo, tenemos un TStringList llamado Lista, deberíamos programar algo así:

Var

Lista : TstringList;

Begin

Lista := TstringList.Create;

….

FreeAndNil (Lista)

end;

El problema viene a que muchos veces los programas son muy grandes, las prisas, u día malo, etc puede pasar que te olvides de liberar el objeto.

Para eso Lazarus, pone a nuestra disposición un herramienta que analiza nuestro programa tras ejecutarse y nos dice dónde se han producido «Leaks memory». Para activarla vamos a opciones de proyecto en el menú proyecto (Shift+ctrl+F11) y en la opción «enlazado», seleccionamos «Usar unidad Headptr».

Ventana que muestra la opción HeadPtr activa.

Ventana que muestra la opción HeadPtr activa.

 

Activa esta opción, tras crear un proyecto nuevo con un botón en el centro. No añadas nada más, y ejecuta el proyecto. Tras abrirse el programa cierralo y Lazarus mostrará una ventana como esta:

Muestra el resultado del estado de la memoria antes y después de ejecutar el programa

Muestra el resultado del estado de la memoria antes y después de ejecutar el programa

Aunque pone Error, se puede ver que ha ido todo bien. Dice que hay cero bloques de memoria si liberar.

Ahora vamos a añadir el siguiente código al evento «OnClick» del botón:

 

var  i: Integer;
lista: TStringList;
begin
cadena := ‘hola’;
lista := TStringList.Create;
for i := 0 to 20 do
begin
lista.add (‘a’);
end;
end;

Ejecuta el programa, pulsa el botón, y cierrar el programa, verás una pantalla como esta avisando que hay un problema:

Se muestra un error de liberación de memoria. Leyéndolo con calma, se observa que nos dice que hay

Se muestra un error de liberación de memoria.

Con detalle, se observa que al final, indica que el problema se produce en la línea 55 del evento Click de un TButton. Además dónde antes decía cero bloques si liberarar ahora pone 2.

Así que tenemos un problema de Fuga de memoria o «Leak Memory». La solución es eliminar nuestra lista cuando ya no la necesitemos, para ello añadimos al final la instrucción «FreeAndNil(Lista);». Esta instrucción se encarga de comprobar si el objeto indicado entre parentesis reside en memory, y en tal caso lo libera.

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
lista: TStringList;
begin
cadena := ‘hola’;
lista := TStringList.Create;
for i := 0 to 20 do
begin
lista.add (‘a’);
end;
FreeAndNil(Lista);
end;

Compila y ejecuta de nuevo el programa, pulsa el botón de la ventana, y cierra el programa, verás que todo ha ido bien.

Saludos

/BlueIcaro

 

Repara holgura en Hotas Cougar de Thrustmaster

11/03/2012

Hace tiempo que mi hotas acusaba una holgura cada vez más grande en el eje Y (hacia los lados). Lo que hacía que volar era cada vez más complicado.
Así que me decidí a abrirlo a ver que pasaba y me encontré que una de las piezas acusaba un gran desgaste.
Las dos fotos siguientes muestran lo que me encontré:

Me llamó la atención el tipo de material «más pobre» con el que está construido, además que el movimiento es «metal contra metal», lo que unido a la baja calidad del mismo, produzca un desgaste mayor.
La verdad es que con lo que valen estos mandos, podían mejorar algo más la calidad de las partes «vitales». :boing:
Así que decidí evitar que le metal cochocara con metal, y reducir la holgura.

Con un rollo de cinta de teflón, de las que se usan para las tuberias, encinté el eje central, hasta que se redujo la holgura.

Y listo,tengo un hotas reparado y listo para volar, y espero que sin ese problema en una larga temporada, y si vuelve a las andabas, otras vueltas de cinta de teflón.

/blueIcaro
P.D. La idea original no es mía, la leí hace unas semanas en una página, la cual no recuerdo.

Añadiendo la ayuda a Lazarus

14/10/2011

Una de las cosas que más me llamó al atención, y quizás me molestaba de Lazarus, era que no tenia ayuda contextual. Eso que hace muchos programas, y editores de código, que seleccionas una palabra y le pulsas F1 y te muestra la ayuda.
Por lo cual cuando estaba programando,y no tenia conexión a internet no podía consultar la ayuda en línea.
Pero trasteando, encontré que la documentación de Lazarus se puede ser descargada. Desde la página oficial, accedemos a la sección «DownLoads» y de todas las opciones que aparecen, abajo de todo está la opción de descargar la documentación.

Seleccionamos «Lazarus Documentaion», y dentro de ella, la última versión de Lazarus disponible, ya que nos garantiza que tendremos la documentación actualizada.

De nuevo se muestran dos opciones, un paqueta con ficheros HTML, y otro con fichero CHM. Escogemos la primera.

Descargamos el fichero, y lo descomprimos. En mi caso lo descomprimí en dentro de la carpeta de lazarus, dónde cree  una carpeta llamada documetanción:

c:/lazarus/documentacion/

Ahora abrir Lazarus, y  dentro del menú herramientas, seleccionar opciones.

Seleccionamos la ruta dónde hemos guardados los ficheros. Ahora en Base de Datos, seleccionamos RTLUnits, y en el campo BaseURL, selecionamos la carpeta RTL que está dentro de la carpeta dónde hemos descomprimido la ayuda.

Hacemos los mismo para FLCUnits, y FPC Language Reference.

Por último solo nos queda indicar la ruta a nuestro navegador preferido. La cual hemos de introducir en el campo BrowsePath.

Y todo listo, con unos sencillos paso tendremos la ayuda de Lazarus en nuestro PC, sin necesidar de estar conectados a internet.

/BlueIcaro

Introducción a Lazarus (I)

06/04/2011

O bien esta serie de entradas se podría llamar, ¿Y ahora que hago después de instalar Lazarus?.

Lo primero que puedes hacer es probarlo, y ver como es capaz de crear una aplicación de windows, solo con pulsar una tecla, o un botón.

Para ello, solo tienes que pulsar la tecla F9, o sobre el Icono en forma de «Play» de color verde.

Muestra los botones de compilado y ejecuciónTras ejecutar verás que aparece un la ventana de un programa nuevo, y su icono en la barra de tareas.

C on esta nueva ventana, puedes hacer lo que quieras, puedes hacerla más grande minimizarla, maximizarla, cerrarla. Ojo que cuando la cierras, es como cualquier programa de windows, se cierra.

¿Cómo es posible, sino he escrito una línea de código?.

La explicación es muy sencilla. Lazarus gerenó todo el «esqueleto» de código necesario para tener una aplicación, y luego lo compiló, de manera que Windows pudiera entenderlo como un programa y ejecutarlo.

Si te fijas, Lazarus ha creado un fichero llamado unit1, en el cual está el siguiente código:

unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs; 

type
 TForm1 = class(TForm)
 private
 { private declarations }
 public
 { public declarations }
 end; 

var
 Form1: TForm1; 

implementation

{$R *.lfm}
end.

Sino has cerrado la ventana, házlo ahora. Bien cerrandola ccon el aspa, como cualquier programa de Windows, o bien pulsado el botón Stop, en la ventana principal de Lazarus, justo al lado del play que te mostré antes.

Ahora fíjate en la barra de controles, y en la pestaña Standard.

Aquí, encontrarás los controles más comunes de las aplicaciones. Selecciona TButton,  y pulsa de nuevo sobre cualquier parte del formulario de diseño llamado Form1. Sabrás que es el formulario de diseño porque está lleno de puntos.

Sino lo encuentras, prueba a pulsa F12, y aparecerá.  Ahora pulsa dos veces sobre el botón que acabas de poner, y Lazarus mostrá la ventana de código, algo así:

procedure TForm1.Button1Click(Sender: TObject);

begin

end;
Lazarus añadió este código,  y dentro de él irán las instrucciones que queremos que se ejecuten cuando hagamos click en el botón. Esto es un evento.

Los eventos, son situaciones determinadas que ocurren en un momento cualquiera. Cada componente que coloquemos, tiene sus eventos, muchos de ellos son los mismos o comunes entre ellos. Por ejemplo doble click, es un evento que se puede encontrar en el componente TPanel. También hay componentes que no tienen eventos.

Ahora, continuando con la programación, prueba a escribir lo siguiente, dónde Lázarus situó el cursos:

ShowMessage (‘Hola!!!!’);

Ahora vuelve a ejecutar el programa (F9), y verás tu programa que contiene un botón, prueba a hacer click sobre el botón.


Hasta aquí, hemos visto como se puede crear un programa para windows, muy sencillo, usando Lazarus. Solamente con una línea y nos «golpes» de ratón. En la próxima entrada, veremos como cambiarle el texto al botón, al formulario, y alguna cosa más.

Saludos

/BlueIcaro

Lazarus 0.9.30. Activar la opción «docking»

27/03/2011

Aunque, como comenté en otro post, Lazarus 0.9.30, tiene un entonro, dónde sus ventanas se puede acoplar o docking.
Por defecto cuando se instala, el aspecto del entorno es como el de las versiones anteriores.
Este es el aspecto:

Para tener el entorno dónde se pueden acoplar unas ventanas a otras, hay que cargar el paquete el paquete anchordockingdsgn.

Usando el menú Paquete, Instalar/Desisntalar Paquete. Nos saldrá una ventana con los paquetes que tiene Lazarus y los que hay disponibles para instalar.

Seleccionamos el paquete anchordockingdsgn, pulsamos Instalar selección, y después  Guardar y reconstruir el IDE

Saldrá un resumén de los paquetes, indicando que acción va a realizar con cada uno de ellos. Esta captura de imagen, se ve como va instalar anchordockingdsgn.


Lazarus empezará a compilarse, tras pulsar continuar.

Y tras reiniciar este es el resultado.

Ahora solo queda arrastrar y colocar las ventanas a nuestro gusto.

El menú Entorno, aparecen 3 nuevas opciones, en inglés, que nos permiten, por este orden:

  • Guardar la distribución de ventanas por defecto.
  • Guardar la distribución de ventanas a un fichero.
  • Cargar la distribución de ventanas desde un fichero.

/BlueIcaro

Lazarus 0.9.30 ya está aquí

24/03/2011

Lazarus 0.9.30 lanzado.

La última versión de Lazarus, ya está disponible en la página oficial del proyecto Lazarus. Aunque no hay anuncio oficial en la página, pero ya está subida a los servidores.
Este enlace lleva directamente a la página de descargas.

Numeración de versiones en Lazarus.

Lazarus, tiene un sistema de numeración de las versiones que es interesante conocer, para evitar confusiones. Las versiones pares, son versiones «estables» y las impares son usadas para implementar nuevas caracteristicas, mejoras, y correción de bugs, para llevar a una versión «par».

Instalación (en windows).

Una vez descargado el paquete, en este caso la versión de windows, se ejecuta, y el proceso de instalador es un simple asistente.

Lo primero que pregunta es el lenguaje que queremos usar durante la instalación

La siguiente pantalla, nos da la bienvenida.

Ahora, nos pide el directorio dónde queremos instalar Lazarus, es recomendable dejar el directorio por defector

Lo normal, es aceptar las opciones por defecto

A mi personalmente me gusta tener un acceso directo en el escritorio, por eso marco la opción, que por defecto viene desactivada.

Un resumen de la instalación, antes de empezar la instalación.

Inicio de la instalación de los archivos.

Tras copiar los archivos en el disco duro, el asistente termina.

Y con esto ya está lazarus listo para usar, solo queda ejecutarlo desde el acceso directo.

Aunque como se puede ver la opción su aspecto no ha cambiado mucho, por no decir que sigue igual. Pero si esconde algunas sorpresas, como comenté otra entrada. Una de ellas, es la capacidad de tener un entorno, donde la ventanas se puedan acoplar y crear un entorno a gusto de cada uno.

En la próxima entrega, os mostraré como.

 

Efectos Aero en Lazarus

28/02/2011

Creo que todo el mundo conoce Aero, pero para el que no lo conoce, aquí os dejo la definición sacada de la wikipedia:
«Windows Aero es la nueva interfaz gráfica incluida en Windows Vista y Windows 7 que sustituye a la Interfaz gráfica Luna utilizada en Windows XP. Aero apareció en las versiones finales el 31 de enero de 2007, día en el que fue lanzada la versión Release to Manufacturing (RTM) y algunos meses antes en las versiones Corporate

Leyendo el foro Oficial de Lazarus. encontré una entrada que hablaba de como hacerlo.
Podeis leer el post original aquí.
Para conseguir este efecto en Lazarus, podemos hacer uso de la siguiente unidad, extraida de aquí.

Para que funcione hay que añadir la cláusula «{$mode delphi} « debajo de la palabra interface.

Algo así:

unit glass; interface {$mode delphi} uses Windows, Forms, Graphics; (…)


Para probarlo, se puede hacer un ejemplo rápido.
Crear una nueva aplicación, añadir la unidad al proyecto, y en el evento oncreate del formulario poner este código:

procedure TForm1 .FormCreate (Sender :TObject );
begin GlassForm(Form1); end;
El resultado es este:

Espero que lo disfruteis.
Saludos
/BlueIcaro

Lazarus 0.9.30, está a punto de caramelo.

27/02/2011

La herramienta de desarrollo, para windows Mac0s y Linux, basada en FreePascal, ya está muy cerca de lanzar su próxima versión estable la versión 0.9.30.

Para los que no conozcan Lazarus, comentarle sque es un entorno de programación, el lenguaje es Object Pascal, y con esta herramienta, se pueden crear programas multiplatafromas. Osea, un programa creado en windows, puede ser compilado para linux, casi sin tener que «reprogramar nada más».

El aspecto del entorno, es un «IDE», dónde encontramos todas las herramientas necesarias,y de una manera visual podemos crear una aplicación para nuestro PC.

Entorno de programación Lazarus

Entorno de programación Lazarus

El aspecto de Lazarus, desde las primeras versiones que probé (0.9.26), hasta hoy, no ha cambiado. Pero si su estabilidad ha mejorado mucho, así como su capacidad para compilar código para multiples plataformas. Una de las cosas que más me gusta de Lazarus, es que se pueden crear aplicaciones para pocketPC (hasta la versión de windows ce 6), de una manera sencilla y rápida. Lo único que hay que hacer, es decargar el fichero: « cross-arm-wince-win32.exe/download».

Instalar Lazarus en windows, es muy sencillo, solo hay que descargar la versión que nos interese. Para windows hay dos versiones disponibles, la versión de 32 bits y la de 64 bits. Comentar que si se descarga la versión de 64 bits, esta solo funcionará en windows 64 bits (como era de esperar), y solo compila ejecutables de 64 bits.

Para instalar Lazarus, hay dos opciones. La primera es descargar la versión «estable», usando el enlace «Downloads« en la página principal del proyecto. La otra opción es usar una Daily Snapshots. La diferencia entre uno y el otro, es que la versión que encontramos en Download, es la última versión «estable», aunque no carante de Bugs, la versión Daily Snapshot, son versiones sobre las que están trabajando los desarrolladores, y son funcionales, muchas veces, han solucionado bugs que contiene la versión estable, pero puede que aparezcan nuevos (no suele ser el caso).

Desde la versión 0.9.28, han cambiado muchas cosas. En este enlace hay una descripción de los cambios. Uno de los cambios, que personalmente más esperaba, era la capacidad de crear aplicaciones «dockable», esto es las aplicaciones que, por ejemplo, tienen las barras de herramientas, que se pueden ajustar a cualquier lado de la ventana principal, o bien esta´flotando. Además pueden esconderse, y volver aparecer automaticamente, cuando el ratón pasa cerca de ellas. Además hay disponible un paquete que el IDE, o entorno, sea «Dockeable».

Solo queda esperar, ya que en la página oficial de lazarus, indican que ya se han realizado los últimos cambios, y los estan probando antes del lanzamiento de esta versión.

/BlueIcaro