Grande notícia para o mercado de software mineiro!

A Accenture, empresa líder mundial em consultoria de gestão, serviços de tecnologia e outsourcing anunciou a incorporação da ATAN, empresa de automação e TI industrial sediada em Belo Horizonte.

Com 20 anos de existência, a empresa mineira especializou-se na integração das tecnologias de automação e informação, possuindo soluções que atuam desde o chão de fábrica até a integração com os sistemas ERP corporativos. A ATAN é uma forte liderança do segmento, possuindo 77% do mercado de alumínio no Brasil e 100% na Polonia.

O comunicado repercutiu em vários canais, como o Wall Street Journal, Yahoo! Finance e Portal de Economia do G1.

Accenture: www.accenture.com

Fontes

http://online.wsj.com/article/PR-CO-20080519-902741.html?mod=wsjcrmain

http://g1.globo.com/Noticias/Economia_Negocios/0,,MUL476491-9356,00.html


Dica de Blog

06Mar08

Não conheço a professora Ana Carolina Jaskulski. Ao que parece ministra disciplinas de programação e tem um blog com tutoriais, apostilas e outros materiais legais sobre C, PERL, PHP e outros assuntos relacionados à Tecnologia da Informação.

Há alguns dias vi um tutorial meu em seu blog. Em retribuição, fica aqui a dica do blog da professora, que em seu último post conta a história de que a logomarca da Apple é uma homenagem à Alan Turing.

Curioso? Leia mais no blog da Profª Ana Carolina Jaskulski.


Uma grande notícia da última semana foi a compra da MySQL AB pela Sun. A MySQL AB é a empresa responsável pela manutenção do mais popular banco de dados de código aberto.

“A Sun é um porto seguro para o MySQL. Ela conhece o Código Aberto” – Kaj Arnö, vice-presidente da MySQL AB.

A quantia de 1 bilhão investida pela Sun mostra o que pode ser um futuro de integrações mais fortes entre seus produtos e o MySQL.

Fonte: http://www.eweek.com/c/a/Infrastructure/Sun-Completes-1B-Buyout-of-MySQL/


Data Mining Comercial

Data Mining é um assunto que me atrai bastante, já tendo trabalhado alguns anos desenvolvendo sistemas que utilizam esta técnica para apoiar tomada de decisão.

Para ser mais exato, quando falamos de Data Mining, na maioria das vezes estamos nos referindo a um processo maior cujo nome original, em inglês é Knowledge Discovery in Databases – ou simplesmente KDD. Apesar de ser uma etapa do KDD, Data Mining acabou se tornando o nome popular do processo.

Em resumo, KDD é um processo utilizado para explorar uma quantidade grande de dados em busca de conhecimento intrínseco ao negócio de uma organização, que ela mesmo desconhece e na maior parte das vezes permanecesse adormecido nas tabelas e relacionamentos de bancos corporativos.

O caso clássico de uso bem sucedido de Data Mining foi um projeto da rede americana Wal-Mart, que após aplicar a técnica em busca de relações entre vendas e dias da semana, identificou algumas regras curiosas. Por exemplo, na sexta-feira a venda de bebidas aumentava proporcionalmente a venda de fraldas. A explicação é que quando os pais iam comprar fraldas para os filhos, sempre levavam a cerveja do fim de semana. Isto permitiu o reposicionamento da disposição dos produtos para aumento da venda dos mesmos.

Data Mining tem um potencial incrível nos mais diversos setores seja no comércio, indústria, governo e os outros. Mas diferente de seu “primo” Data Warehouse, o Data Mining ainda não “pegou” comercialmente. É claro que temos um certo número de ferramentas e alguns casos de uso em grandes corporações – Microsoft e IBM estão entre as empresas que possuem ferramentas. Mas ainda falta um atrativo comercial mais forte.

Parte dessa diferença entre o sucesso comercial do Data Warehouse e do Data Mining se deve ao tempo em que projetos de Data Mining tendem a gastar. Não é muito trivial se calcular o tamanho de um projeto de Data Mining, porque não existe uma fórmula ou ferramenta que ao se aplicar em qualquer banco de dados, se extrai conhecimento relevante.

A aplicação de Data Mining depende muito do conhecimento tácito do consultor, pois este deve se atentar aos por menores dos processos de uma organização para modelar corretamente o universo de dados sob o qual que irá atuar. Uma modelagem errada pode levar o projeto a meses de tentativas que podem não levar a descoberta de todo conhecimento desejado.

O estado da arte em KDD é riquíssimo, com pesquisadores brilhantes, mas falta uma visão mais comercial que simplifique as coisas e faça com que quem está de fora também acredite na sua eficácia.


O JavaFree é uns dos maiores portais de Java em língua portuguesa e tive o prazer de colaborar com algum material há um tempo atrás.

Uma dessas contribuições foi um tutorial muito bem recebido sobre Expressões Regulares em Java. Já se vão quatro anos e o pessoal continua movimentando o tópico, o que me deixa muito satisfeito.

Segue o texto como foi publicado na época. Para o original clique aqui.

Introdução a Expressões Regulares com Java
Por Tadeu R. A. Santos

A partir da versão 1.4 do J2SE, Java conta com um bom suporte a expressões
regulares. Este tutorial tenta servir de introdução a este conceito com aplicação
Java.

1. O que são expressões regulares?

Trata-se de um método formal para se especificar um padrão de texto.
O uso de expressões regulares na computação é abundante e praticamente
pré-histórico. Isto se deve pela facilidade de se fazer comparações, a fim de achar
uma dada palavra (ou parte dela) em um texto.

2. Aplicações

Quando, em um SO de modo texto, deseja-se listar todos os arquivos começados por J
em um determinado diretório, basta fazer:

ls J* (unix like) ou
dir J* (dos)

Neste caso, o uso do caractere * dá-se de forma especial, significando “qualquer
cadeia de caractere (String)”. Assim serão mostrados arquivos como:

Java.txt;
JavaFree.rox;
JavaDetona.net;
Entre outros começados com J.

Chamamos J*, então, de expressão regular.
Como esse exemplo, existem centenas de aplicações onde as expressões regulares
poupam um bom trabalho na implementação.

Para fim de exemplo didático, será mostrado um código simples para validar endereços
de email (hello world das expressões regulares :D ).

3. Gramática das Expressões Regulares

Antes do exemplo, porém, seria de bom tom o conhecimento dos caracteres especiais
usados em expressões regulares. Apesar de ser um assunto extenso, será abordado
somente alguns dos caracteres especiais mais usados e aceitos pela API do Java, a
saber: [\^]?*+-.

*
Qualquer cadeia de caractere.

Expressão Regular: J*Free // Qualquer coisa que comece com J e termine com Free

String comparada: JavaFree
String válida: sim

String comparada: JavaPago
String válida: não

[ ]
Um dos elementos do conjunto

Expressão Regular: [rgp]ato // Qualquer palavra com a primeira letra sendo ou ‘r’ ou
‘g’ ou ‘p’, e as letras seguintes sendo “ato”

String comparada: pato
String válida: sim

String comparada: gato
String válida: sim

String comparada: xato
String válida: não

^
Exclusão

Expressão Regular: [^rgp]ato // Qualquer palavra cuja primeira letra NÃO é ‘r’ nem
‘g’ nem ‘p’, sendo “ato” o resto da palavra

String comparada: rato
String válida: não

String comparada: xato
String válida: sim

-
Intervalo

Expressão Regular: [H-L]avaFree // A primeira letra da palavra deve está entre H e L
(inclusive H e L)

String comparada: JavaFree
String válida: sim

String comparada: RavaFree
String válida: não

.
Qualquer caractere

Expressão Regular: JavaFre.

String comparada: JavaFree
String válida: sim

\
Classe de caracteres pré-definidos. São eles:

\d : Um dígito,
\D : Algo que não seja um dígito,
\s : Um espaço em branco,
\S : Algo que não seja um espaço em branco,
\w : Qualquer letra, dígito ou underscore ( _ )
\W : Algo que não seja letra, dígito ou underscore

Expressão regular: \wJavaFree\s200\d\w

String comparada: _JavaFree 2004_
String válida: sim
?
Uma ou nenhuma vez, assim como ‘*’, ‘?’ é um elemento quantificador.

Expressão regular: a? // Uma ou nenhuma ocorrência de ‘a’

String comparada:
String válida: sim

String comparada: a
String válida: sim

+
Uma ou mais vezes, assim como ‘*’ e ‘?’, é um elemento [i]quantificador[i].

Expressão regular: a+ // Uma ou mais ocorrências de ‘a’

String comparada:
String válida: não

String comparada: aaa
String válida: sim

Pode-se ainda combinar todos esses caracteres especiais em uma só expressão regular,
formando uma busca mais restringente.

4. Java API

Java dispõe de mecanismos muito bons para o tratamento de expressões regulares no
pacote java.util.regex . Para um melhor aproveitamento, é aconselhável o estudo da
documentação deste pacote disponível em:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/package-summary.html

Um objeto da classe Pattern contém a expressão regular desejada que será usada em
uma comparação. Já um objeto da classe Matcher contém os métodos que validarão nossa
String, dada uma expressão regular.

Ex.:


1. Pattern padrao = Pattern.compile("Java*");
2. Matcher pesquisa = padrao.matcher("JavaFree");
3.
4. if (pesquisa.matches())
5. {
6. System.out.println("JavaFree Rox");
7. }
8. else
9. {
10. System.out.println("Hum..?");
11. }

Pattern padrao = Pattern.compile(”Java*”); Matcher pesquisa = padrao.matcher(”JavaFree”); if (pesquisa.matches()) { System.out.println(”JavaFree Rox”); } else { System.out.println(”Hum..?”); }

O exemplo acima poderia, ainda, ser feito somente com o uso do método boolean
matches(String regex, CharSequence entrada) da classe Pattern, da seguinte
forma:


1. if (Pattern.matches("Java*", "JavaFree"))
2. {
3. System.out.println("JavaFree Rox");
4. }
5. else
6. {
7. System.out.println("Hum..?");
8. }

if (Pattern.matches(”Java*”, “JavaFree”)) { System.out.println(”JavaFree Rox”); } else { System.out.println(”Hum..?”); }

Estes exemplos mostram que é bem fácil trabalhar com expressões regulares em Java.

5. Exemplo: Validar um Endereço de Email

Fica bem simples, agora, validar um endereço de email (ou outro dado qualquer).


1. /* Exemplo prático
2. *
3. * Verifica se um endereço de email é válido
4. *
5. * Compilar: javac ValidarEmail.java
6. * Executar: java ValidarEmail [url="mailto:teste@meuemail.com"]teste@meuemail.com[/url]
7. */
8.
9. // --------------------------------------------------------------- classes nativas
10. import java.util.regex.*;
11.
12. // --------------------------------------------------------------- nossa classe
13. class ValidarEmail
14. {
15. public static void main (String[] args)
16. {
17. if (args.length < 1) // Falta argumentos de execução
18. {
19. System.out.println("Uso: java ValidarEmail ");
20. }
21. else
22. {
23. // Email válido é na forma [url="mailto:usario@endereco.com"]usario@endereco.com[/url] , [url="mailto:usario@endereco.com.br"]usario@endereco.com.br[/url], etc.
24. // Tente fazer um expressão mais restringente :D
25. Pattern padrao = Pattern.compile(".+@.+\\.[a-z]+");
26.
27. Matcher pesquisa = padrao.matcher(args[0]);
28.
29. if (pesquisa.matches())
30. {
31. System.out.println("O email " + args[0] + " eh valido!");
32. }
33. else
34. {
35. System.out.println("O email " + args[0] + " nao eh valido!");
36. }
37. }
38. }//end main()
39. }//ValidarEmail.class

Vale sempre estudar a documentação das classes. O exemplo dado aqui é bem trivial,
exitem mais métodos com outras funcionalidade muito boas no pacote.

6. Referências

[1] Sun Microsystems Inc, The Java[tm] Tutorial Lesson: Regular Expressions
[java.sun.com/docs/books/tutorial]
[2] JARGAS, Aurélio Marinho, EXPRESSÕES REGULARES
[guia-er.sourceforge.net/guia-er.html#toc1, 25 abr, 2003]
[3] SHAH, Hetal C. , Regular Expressions in J2SE [onjava.com, 26 nov, 2003]

Até o próximo,

Tadeu R. A. Santos


Há tempos que planejo este blog. Um lugar para trocar experiências exercitando um pouco a criatividade.

Já tentei criar este blog por duas ou três vezes, mas as ferramentas que tive a oportunidade de testar me frustraram bastante.

Desta vez sinto que o WordPress é a solução para meus problemas. Quem sabe dê certo. Aqui vamos conversar sobre desenvolvimento de software em geral incluindo Metodologias ágeis, certificações, Java, .NET e Data Mining – áreas que me sinto mais confortável.