Ferramentas para MatLab no Linux

26, Março 2009

Veja o artigo no meu novo blog.

Bem, mais um semestre começa no mestrado em Engenharia Elétrica na UnB. Esse semestre estou cursando as disciplinas de Sistemas Multiagentes (agentes inteligentes, agentes móveis, multi agentes, programação distribuída, inteligência artificial), Introdução a Sistemas Inteligentes (inteligência artificial, redes neurais, lógica fuzzy, algoritmos genéticos) e Processamento de Imagens.

Sem querer, todas as disciplinas envolvem álgebra relacional, que estou tendo que estudar novamente, pois vi isso a muito tempo na faculdade e não apliquei pra nada no meu curso de tecnologia (infelizmente). Por isso, o título do post, sobre MatLab. Inicialmente eu não estava querendo trabalhar com MatLab, eu queria implementar tudo em C ou Java. Até que um amigo me falou que algo que você faz em MatLab em segundos, você vai gastar muito mais tempo fazendo em outra linguagem. Depois disso, vi a necessidade e importância de se aprender MatLab, que no fim das contas não é nada difícil e agiliza muito o desenvolvimento dos trabalhos.

Para quem não sabe (como eu não sabia), o MatLab é ideal para trabalhar operações sobre matrizes, como somas, multiplicações, inversão e tudo o mais. Porém, esta é uma ferramenta proprietária e para Windows. No Linux temos duas ferramentas semelhantes: o Octave e o SciLab.

Inicialmente testei o octave, que baixei via apt-get. Ele é uma ferramenta de linha de comando (o MatLab nunca vi). O Octave tem uma interface gráfica chamada QtOctave (que usa a biblioteca gráfica Qt4). Acho que baixei ele também pelo apt-get. O SciLab possui uma interface gráfica simples, mas as principais tarefas nessas ferramentas são feitas a partir de comandos em uma tela semelhante a um terminal. No caso do SciLab, ele lhe permite executar comandos do sistema operacional de dentro dele. Os comandos linux que testei e funcionaram foram pws, cd e ls. Outros como rm não funcionaram. Ele permite também, depois que você digitou o inicio de algum comando, pressionar tab para exibir o recurso de autocompletar, válido também para completar nomes de arquivos e diretórios do sistema operacional.

Bem, a grande finalidade dessas ferramentas é facilitar a realização de operações com matrizes, como já citei. Para iniciar o Octave basta digitar num terminal a palavra octave e para o SciLab, digitar scilab. Testei inicialmente o Octave. Conseguir facilmente criar duas matrizes a e b (por exemplo, a = [1 2 3; 4 5 6], matriz de 2 linhas e 3 colunas), mas ao tentar multiplicar duas matrizes compatíveis (ou seja, a quantidade de linhas da segunda tem que ser igual a quantidade de colunas da primeira) não consegui. Tentei o operador padrão de multiplicação *, fazendo a*b, mas não funcionou. Tentei o help via linha de comando e nada. Obviamente se eu pegasse qualquer manual básico iria conseguir. Porém, parti logo para o SciLab pois não achei o octave intuitivo.

No SciLab, meu primeiro teste, a multiplicação de duas matrizes, funcionou de primeira. Assim, achei a ferramenta mais intuitiva, pois nunca tive contato com MatLab e sua linguagem, apenas instalei o programa e sem nenhuma consulta a manual algum, consegui fazer uma operação básica. Assim, recomendo o SciLab, que funciona em Windows, Linux e Mac.


Pegando o último valor de auto incremento inserido no mysql

2, Julho 2008

Bem, vamos ao post rápido de hoje.

No MySQL e em muitos bancos existe um recurso de auto incremento que é usado para campos chave primária das tabelas, impedindo que existam dois registros com o mesmo código.

No MySQL o usuário não tem como saber previamente, de uma maneira segura, qual o próximo valor que será gerado para o campo auto incremento de uma tabela. Apenas após inserir um registro na tabela é que podemos saber. Na linguagem PHP, por exemplo, existe a função mysql_insert_id que retorna o valor gerado para o campo auto incremento no último comando insert executado. Isto é útil quando precisamos incluir registros em outra tabela que serão relacionados com o registro que foi inserido, como por exemplo, quando temos uma tabela venda e outra item_venda. A tabela venda normalmente terá um campo cod_venda auto incremento. E ao registrar uma venda, precisamos incluir pelo menos um item de venda, que estará relacionado com a venda que foi inserida. Para fazer esse relacionamento, a tabela item_venda normalmente terá um campo cod_venda para fazer essa associação, assim, o cod_venda da tabela item_venda deve ter o valor do campo auto incremento cod_venda da tabela venda. Assim, para isso que usamos, em PHP, a função mysql_insert_id.

Porém, em outras linguagem como o Delphi, não existe uma função semelhante a mysql_insert_id do PHP, logo, como fazer para retornar o valor auto incremento gerado pelo último insert? Simples, use a instrução sql select LAST_INSERT_ID(); . Independente da linguagem de programação que você usa, isto vai funcionar. Você pode até criar uma função de nome mysql_insert_id na linguagem de programação que desejar, para executar a sql mostrada acima e assim, apenas chamar a função quando desejar. Veja exemplo em Delphi utilizando os componentes DBExpress:

function mysql_insert_id(SQLConnection: TSQLConnection): Integer;
var SqlDataSet: TSqlDataSet;
begin
result:= 0;
SqlDataSet:= TSqlDataSet.Create(nil);
try
SqlDataSet.SQLConnection:= SQLConnection;
SqlDataSet.CommandText:= ’select LAST_INSERT_ID()’;
SqlDataSet.Open;
result:= SqlDataSet.Fields[0].AsInteger;
SqlDataSet.Close;
finally
SqlDataSet.Free;
end;
end;

Para chamar a função deve-se passar um objeto da classe TSQLConnection por parâmetro, que representa a conexão com o banco de dados.

Espero que seja útil, como foi pra mim.

T+


Eu no YouTube

13, Janeiro 2008

Hoje estava navegando no YouTube e encontrei duas das video-aulas que publiquei no site da revista Active Delphi.
Pena que a pessoa que publicou não colocou informações detalhadas sobre as video-aulas e nem mesmo incluiu meu nome ou o site da revista, mas está lá para quem quiser ver, juntamente com várias outras video-aulas de delphi de diversos autores.

Os links são estes: Criando Objetos Dinamicamente em Delphi e Aplicação de Cadastro com arquivo XML.


Desenvolvimento de aplicações para Compact Framework com BDS2006 e CF Build Helper

6, Janeiro 2008

Veja o artigo no meu novo blog.

Quem está desenvolvendo aplicações para dispositivos móveis Pocket PC ou Smartphones com o Borland Developer Studio 2006 utilizando o plugin Compact Framework Build Helper pode se deparar com o erro ILLK3860 no momento da compilação da aplicação. Procurando na internet encontrei apenas uma resposta indicando que este erro poderia ser do compilador do Delphi ou do Plugin. Já comecei a me desesperar. Porém, meu projeto estava compilando antes, então, tentei lembrar o que tinha feito de diferente para ele deixar de compilar. Aí lembrei que tinha incluído um arquivo AssemblyInfo no projeto, para adicionar informações sobre a versão da aplicação. Assim, descobri que isto foi a causa do erro quando removi o arquivo do projeto. Em projeto para .NET Compact Framework (deve valer para aplicacações Windows Forms com o.NET Framework), as informações de versão devem ser incluídas diretamente no arquivo dpr.


POG – Programação Orientada a Gambiarras

2, Dezembro 2007

Para quem não conhece esse antigo e bastate utilizado paradigma de desenvolvimento de sistemas, segue link com informações: http://desciclo.pedia.ws/wiki/POG

Mantenha-se atualizado e aprenda a programar Orientado a Gambiarras hoje mesmo. :)


Meu primeiro artigo na ClubeDelphi

1, Novembro 2007

É com grande satisfação que venho informar que, finalmente, meu primeiro artigo na revista ClubeDelphi foi publicado. Tive uma grande decepção pois me prometeram que o artigo seria de capa e não sei porque não foi. Como disse o próprio Guinther Pauli (editor geral da revista, maior desenvolvedor delphi do país e meu ídolo do Delphi): o artigo desvenda do início ao fim o desenvolvimento de aplicativos móveis para PocketPC com Delphi. O artigo foi dividido em duas partes. A primeira parte saiu na edição 89, que ainda não chegou às bancas, chegou apenas para os assinantes da revista.

Já tive o feedback de alguns alunos meus que leram o artigo e elogiaram. Espero que todos gostem.


FeneInfo 2007

20, Junho 2007

De 19 a 22 de junho de 2007 acontecerá a primeira FeneInfo – Feira de Tecnologia da Informação do Tocantins. Um evento organizado por várias instituições de ensino superior da capital Palmas, onde serão feitas palestras, amostras, discussões, apresentação de produtos e de novas tecnologias. A Escola Técnica Federal de Palmas, onde leciono, é uma das parceiras.

Na quarta-feira, dia 20, as 14:00 horas, estarei ministrando a palestra “Aplicações para Dispositivos Móveis”, falando sobre o desenvolvimento de aplicações para Pocket PC e Smartphone, utilizando o .NET Compact Framework e o Borland Developer Studio 2006 com a linguagem Delphi.NET

O site oficial da feira é http://www.site.uft.edu.br/feneinfo/


PowerPoint??? Sou desenvolvedor, não mecho com isso.

22, Maio 2007

A algum tempo venho prestando serviço em uma universidade aqui do estado, para a implantação de um software para editoração eletrônica de apostilas. Não conhecia o software, o Open Journal Systems. Este é um projeto OpenSource, desenvolvido em php, por uma universidade do Canadá. No Brasil ele é conhecido como Sistema Eletrônico de Editoração de Revistas, sendo que o pessoal do Instituto Brasileiro de Informação em Ciência e Tecnologia – IBICT dá suporte ao sistema aqui no Brasil, fazendo tradução para o portugês, elaborando documentação em português, gerenciando um fórum e outras coisas. O sistema foi batizado pelo IBICT de Sistema Eletrônico de Editoração de Revistas – SEER. Na universidade onde estou implantando e customizando o sistema, ele será usado para editoração eletrônica de apostilas para cursos superiores.

Como não conhecia o sistema, tive muito trabalho até aprender a utilizá-lo, depois veio a fase mais difícil, entender o código fonte e encontrar as coisas que desejava alterar lá dentro. Mas agora já peguei as manhas e o sistema está todo customizado para as necessidades da universidade. O grande problema numa tarefa de customização como esta, é que ficará muito difícil fazer uma atualização para uma nova versão do software, pois, já alterei tanta coisa, que ficará complicado. Mas o software livre é pra isso, para que você possa alterar à vontade.

Como criar outro software como aquele seria bastante complicado, demandaria muito tempo e a universidade desejava utilizar aquele em específico, por ser hoje um padrão bastante utilizado para editoração eletrônica, onde o processo de avaliação dos documentos submetidos envolve várias pessoas, que podem colaborar on-line, a partir de qualquer lugar do mundo, então, a solução foi adaptar o sistema atual.

O sistema está em fase de testes e entrará em produção em breve. Foi um trabalho de pesquisa e muitas descobertas, pois não conhecia a estrutura do software em questão, mas os resultados foram excelentes.

Agora, você deve estar se perguntando: O que o PowerPoint tem a ver com isso?
Bem. Depois que fiz todas as modificações necessárias no código fonte e na interface do sistema, os manuais existentes não serviam mais para serem utilizados nesta nova versão, pois as modificações nas páginas foram muitas. Assim, tive que elaborar novos manuais de usuários do sistema. Na instituição existem sete tipos de usuários que acessam o sistema, logo, foi necessário criar sete manuais diferentes, pois cada usuário tem funções distintas, tendo acesso à páginas bem diferentes dos outros usuários.

Assim, lá vou eu fazer PrintScreen nas páginas do sistema para criar sete manuais de usuário em PowerPoint. São coisas que você possa detestar fazer, mas as vezes não tem como fugir. Poderia ter feito os manuais no Word, mas ficaria muito sem graça, sem vida, desinteressantes para o usuário. Levante a mão quem já leu o manual de um software, heheheh.

No final, terminei os sete manuais e ficaram ótimos, com aquelas animações e tudo do PowerPoint, que sempre desprezei, acabei aprendendo a utilizar não somente as funções básicas e os usuários gostaram bastante.

Então, profissional de informática tem que saber um pouco de tudo (para se sair bem em qualquer situação) e tudo de alguma coisa (para ter um diferencial no currículo).