sexta-feira, 5 de março de 2010
Começo a reparar que estava tudo a correr bem demais...
...quando me deparo que há pessoal que ignora princípios básicos de Engenharia de Software para que as coisas corram bem no futuro ou simplesmente tiraram o curso por correspondência!
quinta-feira, 4 de março de 2010
sexta-feira, 5 de fevereiro de 2010
Fazer queries a um ficheiro Excel? É possível...
Estava eu certo dia a precisar de arranjar uma forma de extrair, de uma forma dinâmica, umas informações de um ficheiro Excel quando me pus a investigar o que haveria por ai.
Ora, aparentemente alguém com essa mesma necessidade decidiu desenvolver uma framework precisamente para este propósito. Designado por MetaModel esta framework, que segue a 3ª revisão da linguagem SQL, não serve necessariamente só para fazer queries a ficheiros Excel. Suporta também ficheiros CSV (comma separated values), access, SGBD's relacionais por JDBC, etc.
Isto é uma pequena peça de um grande puzzle chamado eobjects. Este site é dedicado ao desenvolvimento de soluções Open Source relacionadas com a temática de Business Intelligence e Data Warehousing. A sua estrela é sem dúvida o DataCleaner. Para mais informações consultar este link: http://eobjects.org/trac/wiki/DataQuality.
Voltando então às queries aos ficheiros Excel com um exemplo básico.
1- Supondo que tenho uma tabela em Excel com os seguintes dados:
Nomes
Talásio
Talassa
Taléia
Tales
Tália
Talásio
Tales
Tales
Talassa
Taléia
Tália
2- e com este pedaço de código:
3- temos este resultado com os nomes distintos da tabela anterior:
Fantástico não é? Ora tentem fazer isto com as funções do Excel...
Ora, aparentemente alguém com essa mesma necessidade decidiu desenvolver uma framework precisamente para este propósito. Designado por MetaModel esta framework, que segue a 3ª revisão da linguagem SQL, não serve necessariamente só para fazer queries a ficheiros Excel. Suporta também ficheiros CSV (comma separated values), access, SGBD's relacionais por JDBC, etc.
Isto é uma pequena peça de um grande puzzle chamado eobjects. Este site é dedicado ao desenvolvimento de soluções Open Source relacionadas com a temática de Business Intelligence e Data Warehousing. A sua estrela é sem dúvida o DataCleaner. Para mais informações consultar este link: http://eobjects.org/trac/wiki/DataQuality.
Voltando então às queries aos ficheiros Excel com um exemplo básico.
1- Supondo que tenho uma tabela em Excel com os seguintes dados:
Nomes
Talásio
Talassa
Taléia
Tales
Tália
Talásio
Tales
Tales
Talassa
Taléia
Tália
2- e com este pedaço de código:
public static void main(String[] args) {
DataContext data = DataContextFactory
.createExcelDataContext(new File(
"C:\\Documents and Settings\\Rafael\\workspace\\Apache POI\\wb.xls"));
Schema[] schemas = data.getSchemas();
for (int i = 0; i < schemas.length; i++) {
System.out.println("Existing schemas: " + schemas[i]);
}
Table[] sheets = schemas[1].getTables();
for (int i = 0; i < sheets.length; i++) {
System.out.println(sheets[i].getName());
}
Table table = data.getDefaultSchema().getTableByName("new Sheet");
Column colA = table.getColumnByName("Nomes");
Query q = new Query();
q.select(colA);
q.selectDistinct();
q.from(table);
DataSet dataSet = data.executeQuery(q);
while (dataSet.next()) {
System.out.println(dataSet.getRow());
}
}
3- temos este resultado com os nomes distintos da tabela anterior:
Existing schemas: Schema[name=information_schema]
Existing schemas: Schema[name=wb.xls]
new Sheet
Row[values={Talásio }]
Row[values={Talassa }]
Row[values={Tales }]
Row[values={Tália }]
Row[values={Taléia }]
Fantástico não é? Ora tentem fazer isto com as funções do Excel...
sábado, 28 de novembro de 2009
ubuntu + ssh + tunneling = (almost) total privacy
Quem nunca se viu privado de certos sites no seu local de trabalho? Ou até com receio de estarem a interceptar os seus dados e monitorizar os sites que consulta numa rede wireless aberta ou mesmo protegida (ex: sapo wifi) num aeroporto, ou até mesmo no local de trabalho?
Face a este problema decidi utilizar um computador velho que tenho aqui por casa e instalar-lhe Ubuntu. Porquê Ubuntu?
Vamos então por as mãos na massa e passar ao que interessa:
Face a este problema decidi utilizar um computador velho que tenho aqui por casa e instalar-lhe Ubuntu. Porquê Ubuntu?
- Primeiro porque me pareceu uma boa oportunidade de continuar a minha aprendizagem neste Sistema Operativo, que basicamente é a distribuição mais conhecida de Linux.
- Segundo porque é grátis, poupando assim dinheiro que teria de despender na aquisição de um SO proprietário.
- E por último, a possibilidade de instalação de servidor SSH. Não querendo entrar em muitos detalhes o SSH é um protocolo existente na camada de aplicação do TCP/IP. Este protocolo tem várias funcionalidades mas neste caso vamos utilizar especificamente o HTTP tunneling com encriptação de dados.
Vamos então por as mãos na massa e passar ao que interessa:
- Instalar uma distribuição qq de linux (recomendo Ubuntu porque não tem muito que se lhe diga e existe bastante info ai pela net). Está máquina irá ser o servidor que irá escutar pelos pedidos de ligação via SSH, portanto irá ter que estar 24h ligada. Há uma excepção a esta regra, para quem tiver uma placa de rede WOL (Wake On Lan) que assim que puder irei tentar por em prática e depois deixar aqui alguma info :).
- Instalar SSH.
sudo apt-get install openssh-server
- Criar uma cópia de segurança do ficheiro sshd_config.
- Editar o ficheiro sshd e mudar umas parametrizações de forma a que o servidor fique sem vulnerabilidades de segurança.
- Como o meu objectivo (e possivelmente de muita gente) é ligar-me a partir de um cliente windows (PC do trabalho, portátil, etc.) vamos ter que instalar o putty.
- De seguida vamos então gerar a chave com o puttygen.exe. Este processo pode ser feito usando a máquina cliente, usando portanto o Windows para executar-lo.
Clicar em "generate" para começar o processo de criação das chaves:
Passar o ponteiro do rato sobre a barra de progressão para ir gerando a chave aleatóriamente:
Chegando a barra ao fim o aspecto final é este: - Salvar a chave privada (carregar em save private key):
Muito importante! Atribuir uma password à chave privada. Assim se eventualmente alguém tiver acesso ao teu cliente e roubar a chave privada esta vai estar protegida com password. - Na máquina com o servidor SSH colar o que está na primeira caixa de texto
De seguida colar a chave publica no editor de texto e salvar:cd ~
sudo nano .ssh/authorized_keys
Finalmente fazer restart ao servidor SSH:sudo service ssh restart
E assim damos por terminado a configuração do servidor SSH - Vamos passar à configuração do PUTTY na máquina cliente:
Em primeiro definimos o hostname ou IP da servidor SSH (eu utilizo o dyndns para ficar sempre com o meu IP associado a um url).
Em segundo indicar a localização do ficheiro que contém a chave privada salva no ponto 7. do tutorial.
E finalmente configurar o "tunnel". Para o browser adicionei o porto 5555 como dynamic. O porto pode ser um qualquer, desde que não esteja a ser utilizado por mais nenhum serviço. Podem adicionar este como um número superior. Aqui podemos utilizar o tunnel para mais serviços como ligação remota. O porto 5900 por exemplo é para me ligar remotamente via VNC ao servidor SSH. - De seguida vamos configurar o firefox de acordo inserindo o porto adicionado no putty (Ferramentas>Opções>Avançado>Rede>Definições).
... e voilá, os dados que passam entre o cliente e o servidor ficam encriptados.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_backup
sudo nano /etc/ssh/sshd_config
Recomendo a alteração imediata destes parâmetros:
O porto 22 é convencionalmente utilizado pelos servidores SSH logo é o porto mais susceptível a ataques por outros utilizadores, logo é recomendável a utilização de outro que não esteja a ser utilizado por nenhum serviço (ex: 2222).
# What ports, IPs and protocols we listen for
Port 22
Penso que este opção esteja a "yes" por defeito. Tem de ser mudada para "no" para não permitir a autenticação através de password, mas somente por chave publica ou RSA
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no
Para mais informações sobre a melhores práticas consultar este site:
http://www.cyberciti.biz/tips/linux-unix-bsd-openssh-server-best-practices.html
Download aqui:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
É necessário fazer download do putty.exe (basicamente este é a aplicação que se vai ligar ao nosso servidor SSH) como do puttygen.exe (aplicação que vai gerar a chave pública e privada para encriptar os dados entre o cliente (nosso pc numa rede não amistosa) e servidor (ponto seguro)).
Se carregarem em "open", inserirem o username e password adicionada no puttygen aquando a geração da "private key" deverão ter acesso ao terminal do vosso servidor SSH.
Subscrever:
Mensagens (Atom)