Empreenda’07 no Porto: fomento à inovação

•dezembro 9, 2007 • 1 Comentário

IAPMEI - Feira de Ideias e Financiamento

“Dê força ao arranque do seu negócio!” Com esse slogan a feira de idéias e financiamentos Empreenda’07, realizada esta semana no Porto, acolheu nesta edição cerca de 44 projetos para exposição e apresentação a empresas portuguesas.

A participação nesta empreitada para mim começou com um folder no qual li as regras do concurso e mandei minha idéia em forma de relatório para avaliação ao IAPMEI – Instituto de Apoio a Pequenas e Médias Empresas, pertencente ao Ministério da Economia e da Inovação de Portugal. Concorri com o Umbrella Project, um Gerenciador Eletrônico de Documentos (GED) e fui selecionado para participar da feira e ter o trabalho publicado em brochura.

A oportunidade de participar desta feira trouxe para mim uma nova visão de mercado, da abertura de negócios, do pensar em soluções inovadoras e assim ir aos poucos vendo as alternativas de ser um empreendedor. Acho que é um bom caminho.

No evento, um dos projetos que mais chamaram atenção foi um que pretende desenvolver remédios contra o câncer a partir de testes com a mosca da fruta. E outro que faz o carregamento automático do marcapasso.

Web application using db4o

•dezembro 8, 2007 • 3 Comentários

It is perfectly possible to use db4o in web environment because its database always works in thread-safe mode. Servlets can be accessed by multiple threads, and the transactions against to the db4o core are made in a thread-safe manner.

Step by step

It is necessary to copy the db4o library to the directory WEB-INF/lib. This way your application will access the class responsible for the creation of the server and of the database client.

The same way that it works in desktop version, we don’t need to worry about how to map the process, neither with containers and other applications.

On the other hand, it is necessary to do some configuration. First of all, we have to configure the access to the database file and after this we must think in a way of creating only the ObjectServer for each application.

The great way for this to work is to create the ObjectServer in the startup of the application context and close the connection when the context is ended. To get it we need to elaborate a Listener class, which is not given by the db4o API.

Here you have an example code of a Listener that comes together with db4o tutorial:


package myproject.dao;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.db4o.Db4o;
import com.db4o.ObjectServer;

public class Db4oServletContextListener implements ServletContextListener {
public static final String KEY_DB4O_FILE_NAME = "db4oFileName";

public static final String KEY_DB4O_SERVER = "db4oServer";

private ObjectServer server = null;

public void contextInitialized(ServletContextEvent event) {
close();
ServletContext context = event.getServletContext();
String filePath = context.getRealPath("WEB-INF/db/"
+ context.getInitParameter(KEY_DB4O_FILE_NAME));
server = Db4o.openServer(filePath, 0);
context.setAttribute(KEY_DB4O_SERVER, server);
context.log("db4o startup on " + filePath);
}

public void contextDestroyed(ServletContextEvent event) {
ServletContext context = event.getServletContext();
context.removeAttribute(KEY_DB4O_SERVER);
close();
context.log("db4o shutdown");
}

private void close() {
if (server != null) {
server.close();
}
server = null;
}

}

It is very simple to visualize what this code does. When the context is started the db4oServer is instantiated. And when the context is stopped the connection with the database is ended. After that you have to configure the Listener to the application context of its application, inside the web.xml file that can be found in WEB-INF directory:


<listener>
<listener-class>meuprojeto.dao.Db4oServletContextListener</listener-class>
</listener>

Observe that it is necessary to describe the complete name of the class (to list the packet where the Listener is). Now we need to configure the db4o file path that will be used by Listener:


<context-param>
<param-name>db4oFileName</param-name>
<param-value>web.yap</param-value>
</context-param>

Observe that the constant KEY_DB4O_FILE_NAME of the Listener has the same value of the context parameter.I really appreciate this system.

db4o e Android? Sim, funciona.

•novembro 23, 2007 • Deixe um comentário

O Android é o novo sistema operacional desenvolvido pelo google para ser usado em dispositivos móveis. Possui uma Virtual Machine própria chamada Dalvik VM, que serviu somente para não pagar os direitos autorais da Sun :-)

A linguagem é “Java”, ou pelo menos se parece. Marketing utilizado para conquistar a massa javeira para a plataforma. Pelo pouco que vi, não se parece nem um pouco com JME e acredito que seja mais amigável inclusive (o que não é mais amigável que JME?).

Vi no blog do Carl Rosenberguer um post muito interessante, falando da integração do Android com o db4o e parece que deu tudo certo. Ele substituiu a camada de persistência default(sqlite) pelo db4o e criou um projeto chamado Android Password Manager, pode ser baixado em: http://developer.db4o.com/ProjectSpaces/view.aspx//Android_Password_Manager.

Maiores detalhes em:

Aplicação web com db4o

•outubro 14, 2007 • 14 Comentários

É perfeitamente possível utilizar o db4o em ambientes web porque o seu banco de dados trabalha sempre em modo thread-safe. Servlets podem ser acessados por múltiplos threads, e as transações chamadas ao core do db4o são feitas em thread-safe.

Copie as bibliotecas do db4o para o diretório WEB-INF/lib para que a sua aplicação tenha acesso às classes responsáveis para a criação do servidor e do cliente da base de dados. E da mesma forma que funciona na versão desktop, nós não precisamos ter preocupações com mapeamentos, containers e outras complicações. Mesmo assim é preciso configurar algumas coisas. Primeiro devemos configurar o acesso ao arquivo do banco de dados e depois pensar em uma forma de criar somente um ObjectServer para toda a aplicação.

O funcionamento ideal seria a criação do ObjectServer no startup do contexto da aplicação e o fechamento da conexão quando o contexto também fosse fechado. Para isto é preciso criar uma Listener class, que não é fornecida pela API do db4o. Abaixo segue um código de exemplo de um Listener que vem juntamente com o tutorial do db4o:


package meuprojeto.dao;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.db4o.Db4o;
import com.db4o.ObjectServer;

public class Db4oServletContextListener implements ServletContextListener {
public static final String KEY_DB4O_FILE_NAME = "db4oFileName";

public static final String KEY_DB4O_SERVER = "db4oServer";

private ObjectServer server = null;

public void contextInitialized(ServletContextEvent event) {
close();
ServletContext context = event.getServletContext();
String filePath = context.getRealPath("WEB-INF/db/"
+ context.getInitParameter(KEY_DB4O_FILE_NAME));
server = Db4o.openServer(filePath, 0);
context.setAttribute(KEY_DB4O_SERVER, server);
context.log("db4o startup on " + filePath);
}

public void contextDestroyed(ServletContextEvent event) {
ServletContext context = event.getServletContext();
context.removeAttribute(KEY_DB4O_SERVER);
close();
context.log("db4o shutdown");
}

private void close() {
if (server != null) {
server.close();
}
server = null;
}

}

É bem simples visualizar o que este código faz. Quando o contexto é inicializado o db4oServer é instanciado e quando o contexto é parado, a conexão com o banco é finalizada.Depois configure o Listener para o application context de sua aplicação dentro do arquivo web.xml que pode ser encontrado no diretório WEB-INF:


<listener>
<listener-class>meuprojeto.dao.Db4oServletContextListener</listener-class>
</listener>

Observe que deve ser descrito o nome completo da classe (listando o pacote onde o listener está). Agora precisamos configurar o path do arquivo do db4o que será utilizado pelo Listener:


<context-param>
<param-name>db4oFileName</param-name>
<param-value>web.yap</param-value>
</context-param>

Observe que a constante KEY_DB4O_FILE_NAME do Listener possui o mesmo valor do context parameter.Acho esse tema interessante e, por isso, quero dar continuidade no próximo post trabalhando com um servlet efetuando operações de persistência e consulta de objetos no banco de dados.

TDD – Test Driven Development

•outubro 10, 2007 • Deixe um comentário

É realmente bem estranho testar algo sem que ele exista. Mas é exatamente isso que esta metodologia ágil descreve. A filosofia do método é:

  • Escreva um pequeno teste (em alguns casos ele não vai compliar).
  • Rode este teste e veja quais foram os erros encontrados.
  • Faça uma pequena alteração para que o teste passe com sucesso
  • Efetue todos os testes e veja se o teste foi bem sucedido
  • Refatore e remova as duplicatas que foram feitas para que o teste passe

Além de escrever o teste antes da criação do código, o design incremental do seu código é outro item fundamental no TDD.Mas qual é o ganho em utilizar esta metodologia?

Código limpo, aumento da qualidade e da produtividade são os objetos da aplicação do TDD.

Nesta pequena introdução de desenvolvimento orientado a testes, pretendo descrever passo a passo como desenvolver uma aplicação para o calculo de IMC (Índice de Massa Corporal) que é feito da seguinte forma:

IMC = PESO / (ALTURA²)

Antes de começar verifique os pré-requisitos descritos abaixo:

  1. Uma IDE com suporte a refatoração (Vou utilizar o Eclipse)
  2. JUnit (preferência a versão 4.0 com suporte a annotations)

Vamos ao primeiro teste:

import org.junit.Test;

public class testIMC {
@Test
public void testCalculoIMC(){
IMC imc = new IMC (74.0f,1.80f);
assertEquals(22,8f,imc.getImcResult());
}

}

Estamos com alguns problemas aqui. O teste não compila porque a classe IMC não existe, muito menos o seu construtor e o atributo imcResult. Além disso estamos acessando o atributo de classe diretamente, o que não é conveniente.

Vamos então aos baby steps, corrigindo os erros com pequenas alterações até que o código do teste seja compilado e executado. Lembre-se de utilizar a IDE para facilitar a sua vida na geração das classes, métodos etc.

O primeiro passo é criar a classe IMC:


public class IMC{

}

Acrescente o construtor:


public class IMC{

public IMC(float peso, float altura){

}

}

Finalmente acrescente o atributo imcResult


public class IMC{

private float imcResult;

public IMC(float peso, float altura){

}

}

Neste momento o teste é compilado e roda com erros. O próximo passo é fazer com que a barra vermelha fique verde. Acrescente um método que retorne um valor que resulte o sucesso do teste e encapsule o atributo imcResult.


public IMC(float peso, float altura){

public float getImcResult(){

return 22,8f;

}

}

Neste momento o teste passa para verde, mas precisamos melhorar o nosso código refatorando e removendo a duplicação.Veja o código completo:


public class IMC {

private float imcResult;

public IMC(float peso, float altura) {
imcResult = peso / (altura * altura);
}

public float getImcResult() {
return imcResult;
}

}

Este post foi uma pequena introdução do que é o TDD e para que serve. Os “devotos” do desenvolvimento de software baseado em XP já estão bem acostumados com o TDD. Para um maior aprofundamento desta técnica acesse os sites:

http://dojofloripa.wordpress.com/category/tdd/

http://www.improveit.com.br/xp/praticas/tdd

Comentários sobre o post serão muito bem vindos!

Manutenção no Mac OS – MainMenu

•setembro 12, 2007 • 1 Comentário

Na minha última atualização do Mac OS o Onyx parou de funcionar. Eu julgava o Onyx o melhor programa de manutenção para o Mac OS. Mas a necessidade de procurar outro software semelhante me fez achar o MainMenu, que efetua praticamente todas as funcionalidades do Onyx e mais um pouco, além, é claro, de funcionar na atual versão do Mac OS que utilizo.

O programa pode ser baixado em http://www.santasw.com/cgi-bin/download.cgi?file=MainMenu. Roda nas versões 10.4 (Intel e PPC), 10.3.9 E 10.3. Agendar tarefas, corrigir problemas de permissão, limpeza de cache, logs, exclusão de arquivos DStore, ativar / desativar arquivos ocultos etc. Tudo isso com a licença free.

Tá aí a dica!

WiMAX – Sai ou não sai?

•setembro 10, 2007 • Deixe um comentário

Desde de 2005 que vejo uma certa movimentação, tanto das empresas quanto do governo, para a implementação do WiMAX no Brasil. Em termos bem simples, a WiMAX é uma tecnologia muito parecida com a do wi-fi (ambas sem fio). A grande diferença é o alcance e a velocidade entre essas redes. Em uma rede wi-fi o alcance do sinal é de 100m em média, com uma velocidade de 54 Mbps, enquanto na WiMAX o alcance é de até 50 km de raio, com uma velocidade de 75Mbps.

A primeira vez que ouvi falar dessa tecnologia e de uma futura implementação no Brasil foi na TV Câmara (acreditem, eu assistia!). No programa, o presidente da comissão de ciência e tecnologia, Julio Semeghini, do PSDB, falava sobre as vantagens de implementar a WiMAX no sentido da inclusão digital em áreas mais carentes, facilitando o acesso à Internet e a serviços que algumas cidades do interior que não possuem acesso ADSL poderiam adquirir com este projeto. Mas até agora eu não ouvi falar em uma previsão de lançamento da rede, muito menos quanto isto vai custar para o consumidor. Há poucos dias atrás li na Folha Online que a cidade de Nova Iorque estará com suporte a WiMax em 2008, onde a Sprint vai investir cerca de US$ 5 bilhões até 2010 para implementar a rede nos Estados Unidos.

Até isso sair no Brasil, vamos gastando o nosso dinheiro com conexões ADSL ridiculamente lentas a preços altíssimos e os provedores de acesso à Internet juntamente com as gigantes de telecomunicações se enriquecendo às custas do povo.

 
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.