quinta-feira, 14 de fevereiro de 2013

Instalando o Lazarus no Raspberry PI

O primeiro teste com o Lazarus no Raspberry PI foi um sucesso. Abaixo está a foto de um pequeno exemplo estilo "Hello World".


Os seguintes comandos foram usados para instalar o Free Pascal e o Lazarus:

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install fpc
sudo apt-get install lazarus

Segui a dica do seguinte tópico:


Agora é meter a mão na massa e começar a desenvolver para ele.

[]'s,

Ericson Benjamim.


sábado, 13 de outubro de 2012

Tratando arquivos textos via TFileStream

Trabalhar com arquivos textos no Lazarus é bem fácil. Há várias maneiras de se tratar arquivos textos, desde o velho modo do Pascal (AssignFile/Reset/Rewrite/Append/CloseFile) aos métodos (LoadFromFile/SaveToFile) dos descendentes de TStrings. Mas para trabalhar com arquivos grandes é mais eficiente usar TFileStream.

Para demonstrar o uso do TFileStream montei um pequeno exemplo no Lazarus, como mostra a imagem abaixo.


O código do projeto acima encontra-se a seguir.


Bem, o projeto acima pode não demonstrar a eficiência do TFileStream, mas mostra a simplicidade de usá-lo. Basicamente a única coisa que precisamos nos preocupar é com o LineEnding que marca o fim de cada linha de um arquivo texto. Talvez um bom exemplo seja a gravação de dados em um arquivo de log de grande tamanho. Neste caso, o código para salvar as linhas ficaria bem parecido com o método ButtonSalvarClick, do exemplo acima. A única coisa que mudaria seria a linha abaixo:

FileStreamTxt := TFileStream.Create(SaveDialog1.FileName, fmCreate or fmShareDenyWrite);

A qual seria melhor substituída pelo seguinte trecho:

if FileExistsUTF8(SaveDialog1.FileName) then begin
  FileStreamTxt := TFileStream.Create(SaveDialog1.FileName, fmOpenWrite or fmShareDenyWrite);

  FileStreamTxt.Position := FileStreamTxt.Size;
end else begin
  FileStreamTxt := TFileStream.Create(SaveDialog1.FileName, fmCreate or fmShareDenyWrite);
end;

O trecho acima garante que o arquivo não tenha seu conteúdo anterior apagado caso o arquivo já exista no caminho indicado. Assim as linhas serão adicionadas ao arquivo, algo mais lógico para quem está gravando informações em um log que tem dias e mais dias de conteúdo previamente gravado.

Outra ressalva a fazer, no método ButtonAbrirClick, é que o comando TMemo.Lines.Add adiciona automaticamente o LineEnding, sendo necessário, neste caso, remover este da linha a ser inserida, usando o comando StringReplace. Se for tratar o arquivo diretamente no TFileStream talvez não seja necessário usar este recurso.

Esta dica deve funcionar no Windows, Linux e Mac. Mais informações em: http://wiki.freepascal.org/File_Handling_In_Pascal

[]'s,

Ericson Benjamim.

quarta-feira, 6 de junho de 2012

Form com área transparente no Lazarus/Windows

Recentemente precisei criar um form com área interna transparente no Lazarus. Pesquisando no Google, encontrei uma dica para Delphi que foi facilmente adaptado para meu caso.



Infelizmente esta dica funciona apenas no Windows (não esquecer de incluir a unidade Windows na cláusula Uses).

Adaptado a partir de Get transparent form - Forms - Tips & Tricks - Greatis Delphi Pages.

[]'s,

Ericson Benjamim.

sábado, 14 de abril de 2012

Introdução ao Pascal

Também resolvi fazer outro mirror de outro curso, muito bom, desenvolvido pelo REENGE, também da Unicamp.


Falta apenas colocar as respostas dos exercícios.

[]'s,

Ericson Benjamim.

Curso Aprendendo a programar em Pascal

Encontrei um curso de programação em Pascal no site da Unicamp e resolvi criar um mirror para ele:


É um curso muito interessante para iniciantes, que vai progressivamente aprofundando na linguagem. Pode ser usado o Lazarus como ambiente de teste do curso.

[]'s,

Ericson Benjamim.


terça-feira, 14 de junho de 2011

Livros sobre Lazarus

A comunidade Lazarus conta agora com excelentes opções de publicações sobre esta fantástica ferramenta. Confiram:

Lazarus - The Complete Guide - mais de 720 páginas
Autores: M. van Canneyt, M. Gärtner, S. Heinig, F. Monteiro de Cavalho, I. Ouedraogo.
Idioma: inglês e alemão
http://www.blaisepascal.eu/index.php?actie=./subscribers/lazarusbookinfoEnglish

Desenvolvendo Aplicativos com Lazarus - 346 páginas
Autor:
Jean Patrick
Idioma: português do Brasil
http://www.clubedeautores.com.br/book/33568--Desenvolvendo_Aplicativos_com_Lazarus
http://agbook.com.br/book/46758--Desenvolvendo_Aplicativos_com_Lazarus


Programando com o Lazarus - 64 páginas
Autor:
Vitor Amadeu Souza
Idioma: português do Brasil
http://www.clubedeautores.com.br/book/24590--Programando_com_o_Lazarus
http://agbook.com.br/book/44784--Programando_com_o_Lazarus


[]'s,

Ericson Benjamim.

quarta-feira, 8 de junho de 2011

Aplicação Lazarus Web para cálculo do MDC

Esta semana o meu sobrinho torrou minha paciência pedindo a todo instante que corrigisse seus cálculos do máximo divisor comum (MDC). Para não perder mais tempo acabei criando uma aplicação para fazer os cálculos necessários. A aplicação foi feita no Lazarus 0.9.31 com FPC 2.5.1 e componente fpWeb. E compila tanto em Windows quanto em Linux. Também foi testada com sucesso no Lazarus 0.9.28 com FPC 2.4.2.

O link para aplicação compilada, incluindo código-fonte, é:

http://fanzinepas.awardspace.com/mdc.html

Abaixo os screenshots da aplicação:



O MDC é exibido em vermelho:



Foi a minha primeira incursão no mundo Lazarus/Web com o componente fpWeb. Outro componente interessante para aplicações Web no Lazarus é o Free Spider. O Free Spider é mais simples de usar, mas o fpWeb é mais poderoso.

[]'s,

Ericson Benjamim.

sexta-feira, 6 de maio de 2011

Eliminando o efeito flicker do letreiro digital

Esta semana um de meus clientes reclamou do flickering ou efeito flicker (pisca-pisca) no letreiro digital de um de meus programas de painel eletrônico. Realmente havia um pouco de flicker, mas nada que atrapalhasse tanto. Porém ele afirmou que o efeito estava tornando a mensagem ilegível. Pesquisando um pouco descobri que alguns temas, como o Classic, do Windows 7 (S.O. do cliente), este efeito aparece bastante nos forms. Pedi para ele testar o tema Aero enquanto não encontrava uma solução. Mas com um pouco mais de pesquisa descobri uma propriedade que praticamente eliminou o efeito: DoubleBuffered.

Basta acrescentar o código abaixo no evento OnCreate do form:

Panel1.DoubleBuffered := true;
Label1.ControlStyle := Label1.ControlStyle + [csOpaque];

A propriedade ControlStyle também ajuda na eliminação deste efeito. Quando em true, DoubleBuffered vai requerer um pouco mais de memória, mas nada que comprometa o desempenho do sistema. A idéia por trás da propriedade DoubleBuffered é preparar a imagem da tela na memória, antes de sua exibição e então torná-la visível.

Fontes:

Picture Motion - Double Buffering
http://delphi.about.com/library/bluc/text/uc092700a.htm

GDI Graphics In Delphi
http://delphi.about.com/library/bluc/text/uc052102g.htm

[]'s,

Ericson Benjamim.

sábado, 16 de abril de 2011

Vencedor do Lazarus International Games Contest 2010

O vencedor do Lazarus International Games Contest 2010 foi Nathan Bartram, autor do jogo Connect 4 - um jogo muito curioso e divertido. Um bom desafio, pois o software joga muito bem e deixa bem pouco espaço para os adversários humanos.



Instalador do jogo (Windows): install_connect4.zip
Código-fonte: Connect4-2.zip

Fonte: http://lazarusbrasil.org/contest.php

[]'s,

Ericson Benjamim.

terça-feira, 5 de abril de 2011

PasToHtm

Procurando por um conversor de vídeo acabei encontrando um programa muito útil para nosso meio: um conversor de código Pascal para HTML. Sei que há alguns perdidos pela Internet, mas gostei especialmente deste pela facilidade em configurá-lo (via arquivo INI).

PasToHtm:

http://www.pazera-software.com/products/pas-to-htm/

Exemplo:

http://www.pazera-software.com/products/pas-to-htm/example.html

Em breve pretendo fazer uma interface gráfica (com o Lazarus) para ele.

[]'s,

Ericson Benjamim.

quinta-feira, 17 de março de 2011

Lazarus no Linux

Apesar de levantar a bandeira de multiplataforma a um bom tempo com o Lazarus, pouquíssimas vezes precisei compilar meus programas no Linux. Esta semana um de meus clientes solicitou o executável de uma de minhas aplicações compatível com o Linux. A antiga receita de bolo que tinha (converter rpm para deb via alien) não deu certo no Ubuntu 10.10. Após uma pesquisa na Web, descobri uma wiki bem legal mostrando como instalar o Lazarus no Ubuntu.

A wiki contem o script abaixo que baixa e instala o Lazarus de maneira automática:


Seguindo a wiki, colei o conteúdo do script acima em um arquivo (getlaz) no diretório home. Depois executei os seguintes comandos:

chmod +x getlaz
./getlaz

A versão baixada foi a 0.9.28 com FPC 2.4.0.

[]'s,

Ericson Benjamim.

quinta-feira, 20 de janeiro de 2011

Lazarus - Error while compiling resources

Depois de instalar o Lazarus 0.9.31 com FPC 2.5.1, abri um antigo projeto que havia iniciado na versão 0.9.26 do Lazarus. O primeiro problema que enfrentei foi a ausência do componente TNotebook, resolvido com a substituição deste pelo TPageControl. Após esta ocorrência o projeto compilou sem problemas. Após editar as informações de versão (menu Project / Project Options / Version Info) o projeto começou apresentar o erro abaixo:

project1.lpr(42,1) Error: Error while compiling resources
project1.lpr(42,1) Fatal: There were 1 errors compiling module, stopping

Parti para a pesquisa no Google e encontrei algo falando dos arquivos de recursos. Acabei descobrindo uma solução para meu caso: removi a seguinte linha de código do arquivo project1.lpr:

{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}

Meu projeto voltou a compilar corretamente. Outra coisa que precisei editar manualmente foi a inclusão das seguintes tags no arquivo project1.lpi, dentro da tag CompilerOptions:



Neste último caso foi para definir o nome do aruivo compilado.

[]'s,

Ericson Benjamim.

segunda-feira, 6 de dezembro de 2010

Exibindo strings associadas a números no MySQL

Em uma aplicação Lazarus acessando MySQL criei um campo estado civil para armazenar tal informação em forma de número. Ou seja, para cada estado haveria um número correspondente:

0 - solteiro
1 - casado
2 - união estável
3 - separado
4 - divorciado
5 - viúvo

Por preguiça de criar uma tabela para armazenar estas descrições (e também por conta da simplicidade da aplicação), resolvi exibir tais descrições em tempo de execução da consulta. Após uma googlada descobri um comando que resolveria meu caso: MAKE_SET. Este comando cria um conjunto de strings e exibe a que está associada à determinada posição neste conjunto. Porém, o comando MAKE_SET usa um operador binário. Como o meu campo armazenava valores decimais precisei usar a função POW para converter os números para os correpondentes binários. Por exemplo, usando a associação representada na tabela acima minha consulta ficou assim:

SELECT cliente.*, MAKE_SET(POW(2, estado_civil), "solteiro", "casado", "união estável", "separado", "divorciado", "viúvo") AS EstadoCivil FROM cliente

A função POW, no caso acima, eleva 2 a potência armazenada no campo estado_civil. E converte o número ao equivalente necessário para pegar corretamente a descrição no conjunto criado pelo MAKE_SET. Infelizmente somente encontrei referência para este comando no MySQL.

[]'s,

Ericson Benjamim.

terça-feira, 30 de novembro de 2010

Letreiro Digital em Lazarus

Em alguns de meus programas comerciais há um letreiro digital, similar àqueles eletrônicos feitos com LEDs vermelhos. Mas meu mecanismo para mover o texto pelo form era muito grosseiro. Um dos meus clientes questionou sobre o letreiro e resolvi pesquisar para ver se encontrava algo pronto. Rapidamente encontrei uma dica em Delphi que quase me atendia. Na realidade precisei adaptar o código para que a mensagem rolasse para o lado contrário. Rapidamente alterei o código para que me atendesse e está aí o resultado:



[]'s,

Ericson Benjamim.

Código-fonte: letreiro_digital.7z

sábado, 24 de julho de 2010

Teste Free Spider / Lazarus / Ajax

O primeiro teste que fiz com Ajax e Free Pascal não foi lá muito prático. Desde então senti-me na obrigação de refazer tal teste, mas com um exemplo mais didático e prático. Como minha incursão neste novo mundo do Ajax e da Web 2.0 ainda é muito inicial, senti necessidade de apoio didático e acabei comprando um livro para aprender mais sobre o assunto. O livro é "Web Interativa com Ajax e PHP", ISBN 978-85-7522-126-6, de Juliano Niederauer, editora Novatec - excelente, por sinal. Logo ao ler o primeiro exemplo (páginas 105 e 106) resolvi adaptá-lo para o Lazarus. No teste usei o Free Spider, escolhido pela sua simplicidade em criar aplicações Web e o qual estou usando em um projeto de porte significativo.

As adaptações foram pouquíssimas e o programa em Lazarus/Free Spider que substitui o programa em PHP é muito simples. A primeira coisa que fiz foi digitar o código HTML que contem as funções em JavaScript e fazer uma pequena adaptação destacada em vermelho no código abaixo:



Como pode ver, o código é bem simples (talvez as funções em JavaScript pareçam um pouco complicado aos olhos dos iniciantes). A parte em Lazarus / Free Spider é mais simples ainda. Vejam:


O código em Lazarus / Free Spider recebe os campos através do método POST e envia uma resposta em texto bem simples à função JavaScript da página, a qual atualiza o campo "resultado" do form. Seria possível fazer coisas bem sofisticadas como carregar uma lista de cidades ao se escolher uma determinada UF e sem recarregar a página ou poluir o HTML com JavaScript desnecessário. Fico aqui com a dívida de fornecer um exemplo similar com banco de dados.

E um exemplo da saída é:



Para quem não conhece o poder do Ajax, ele permite que a página requisite dados sem que seja exigido um carregamento completo de todo o código.

O código (HMTL + Lazarus) pode ser baixado a partir de: teste_ajax.7z

Os testes foram feitos no XP SP2 com servidor Web Server2Go.

[]'s,

Ericson Benjamim.

domingo, 20 de junho de 2010

Vídeo-aulas Aplicação Lazarus com SQLite / Zeos

Já faz algum tempo que criei estas vídeos-aulas, mas somente agora encontrei um lugar bom para hospedá-las. As aulas são um tutorial que mostram como criar uma aplicação de banco de dados usando o Lazarus e o componente Zeos 7. O banco de dados usado foi o SQLite.

Usando o SQLiteStudio para criar o banco de dados:
http://fanzinepas.ueuo.com/aulas/eb-01-db_sqlite.htm

Tutorial Banco de dados com Lazarus/Zeos/SQLite - parte 1:
http://fanzinepas.ueuo.com/aulas/eb-02-app_laz_zeos_sqlite3.htm

Tutorial Banco de dados com Lazarus/Zeos/SQLite - parte 2:
http://fanzinepas.ueuo.com/aulas/eb-03-app_laz_zeos_sqlite3.htm

Quem quiser baixar as aulas para assistir em modo offline pode fazê-lo a partir de:
videos-aulas_lazarus-zeos-sqlite.7z

As vídeo-aulas foram criadas com o software Wink.

Também estou montando um curso nos moldes de ensino a distância (EAD) em:
http://www.educacaonanet.com.br/...

[]'s,

Ericson Benjamim.

sexta-feira, 11 de junho de 2010

Teste com protocolo SNMP / Synapse + Free Spider Web Development

Como havia comentado no post anterior, uma das linguagens sugeridas para desenvolver o sistema para coletar dados via SNMP foi PHP. A primeira aplicação de teste foi orientada para desktop, mas seria muito interessante que o sistema funcionasse pela Web. A primeira solução na vista foi o componente Free Spider, o qual gera aplicações CGI. Mais um teste rápido com este componente e o Synapse e outro sucesso.

Link do Free Spider: http://motaz.freevar.com/freespider.htm

Código fonte: lazsnmpweb.7z

Screenshots:





Em ambos os testes precisei incluir a string abaixo na opção Projeto - Opções do Compilador - Outros arquivos de unidade:

$(LazarusDir)\components\synapse39\source\lib\

Claro que fui eu que convenientemente gravei o synapse nesta pasta.

quarta-feira, 9 de junho de 2010

Teste com protocolo SNMP / Synapse

Recentemente iniciei a negociação com um colega de um projeto de um sistema que coletará dados de equipamentos em rede usando o protocolo SNMP. Meu colega propôs que o sistema fosse desenvolvido em PHP. Gostei da idéia, pois sou fã desta linguagem, mas uma dúvida surgiu: e a proteção de nosso código? Após um breve debate, ficamos de avaliar como proteger o código, já que o sistema seria instalado no servidor do cliente. Mas aí surgiu-me a idéia: desenvolver em CGI / Lazarus - portável, rápido e com o código muito bem protegido, já que o o programa é compilado. Mas daí apareceu a dúvida: que componente usar? Já tinha usado o LNET com excelentes resultados em comunicações via TCP/IP, mas não vi nenhum componente deste pacote para trabalhar com SNMP. E o Indy? Pelo que soube foi descontinuado. Bem, li algo sobre o Synapse algum tempo atrás. Fui verificar e para minha felicidade achei no meio dos arquivos do Synapse uma unidade para trabalhar com SNMP. Corri atrás dos demos, mas somente encontrei em Delphi (O Synapse pode ser usado no Delphi/Lazarus/Free Pascal). Mas ao abrir o demo verifiquei que o mesmo é bem simples e poderia ser facilmente reescrito no Lazarus. Após alguns minutos já tinha o exemplo pronto. Foi mais complicado achar um OID para fazer um teste, mas meu colega, mais experiente em redes do que eu, forneceu-me um e pude comprovar a funcionalidade do Synapse.

Teste de SNMP com Synapse: lazsnmp.7z
Gerado e compilado no Lazarus 0.9.29 FPC 2.3.1 Win32

Link do Synapse: http://synapse.ararat.cz


Screenshot do teste

sábado, 22 de maio de 2010

Jogo LazSenha

Também conhecido como Mastermind, este pequeno jogo de tabuleiro fez parte de minha infância, o qual costumava jogar com meu irmão (dono do jogo). Resolvi criar uma versão para computador que permitisse que o criador das sequências fosse a máquina.

http://code.google.com/p/lazsenha/

Ficou bem interessante, pois implementei o arrastar-e-soltar para jogar os pinos de diversas cores nos locais devidos. Compila no Lazarus para Windows e Linux.


Jogo LazAnimais

Este mês re-codifiquei um jogo que tinha feito a muito tempo em BASIC: LazAnimais. A primeira versão que codifiquei foi no meu velho TK 3000//e, em BASIC Applesoft, perdida a muito. A segunda versão foi para Rapidq BASIC - para Windows. Esta nova versão foi feita em Lazarus com componente Zeos acessando um pequeno banco de dados em SQLite. Mas o jogo foi inspirado em uma versão publicada na Micro Sistemas em BASIC Sinclair ZX-81.

http://code.google.com/p/lazanimais/

O jogo simula o comportamento de um programa que aprende a cada jogada, o nome dos animais e as características deste. Esta versão ficou um pouco diferente das anteriores mas acaba fazendo a mesma coisa: aprender mais e mais sobre os animais. A nova versão pode ser compilada tanto no Windows como no Linux.