28 de Dezembro, aniversário de Linus Torvalds (e o meu também)

28 de Dezembro, aniversário de Linus Torvalds (e o meu tambem)Hoje comemoramos uma data especial para o Linux. É o aniversário de Linus Torvalds!

Tambem é uma data especial pra mim: é meu aniversário, portanto:

“Salgadinhos para a festa: 60 reais.
Bolo para a festa: 80 reais.
Caixas de cerveja: 90 reais.
Comemorar no mesmo dia que Linus Torvalds: não tem preço!”

Posted in Linux. Etiquetas HTML:, , . 3 Comments »

Desabilitando o Network Manager no Ubuntu

Desabilitando o Network Manager no UbuntuRecentemente tive problemas para instalar um utilitário que me permite conectar em uma VPN devido ao “intrometimento” do Network manager do Ubuntu (algumas outras distribuições tambem tem este utilitário). Para quem não sabe, essa ferramenta configura e monitora as interfaces de rede no Linux, mas para quem é acostumado a “fazer na mão”, com certeza vai querer desabilitar a mesma.

Eu encontrei o exemplo abaixo em vários lugares na Internet, então não sei dizer quem é o autor, vamos lá:

Com 4 comandos você pode desabilitar o Network Manager e continuar a centralizar as configurações diretamente no /etc/network/interfaces.

1. Abra um terminal e execute os comandos abaixo:

sudo /etc/dbus-1/event.d/26NetworkManagerDispatcher stop
sudo /etc/dbus-1/event.d/25NetworkManager stop

2. Crie os dois arquivos abaixo:

touch /etc/default/NetworkManager
touch /etc/default/NetworkManagerDispatcher

3. Crie o script para desabilitar as funções no boot do SO:

echo “/etc/dbus-1/event.d/26NetworkManagerDispatcher stop” > /etc/init.d/networkmanager.disable
echo “/etc/dbus-1/event.d/25NetworkManager stop” > /etc/init.d/networkmanager.disable
chmod +x /etc/init.d/networkmanager.disable
ln -s /etc/init.d/networkmanager.disable /etc/rc2.d/S91NetworkManager.disable

Feito isso, verifique o arquivo /etc/network/interfaces, normalmente você poderá comentar algumas linhas referentes a Interfaces não utilizadas em seu computador. Se você utilizar dhcp em sua rede, deverá ter algo parecido com isso:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Se quiser fazer um teste, execute como root:

/etc/init.d/networking stop

/etc/init.d/networking start

Bom trabalho!

Reusabilidade de pesquisas na graduação de profissionais de TI

Reusabilidade de pesquisas na graduação de profissionais de TIAlgo que a um bom tempo constatei nas minhas visitas por faculdade e papos com alunos, e que vem me incomodando muito, é a falta de sincronização entre as pesquisas que estão sendo desenvolvidas com as pesquisas que já foram desenvolvidas na área de TI (acredito que não só em nossa área).

É comum ver professores solicitando pesquisas sobre determinados temas que já foram cansativamente explorados. É obvio que determinados temas, fazem parte da formação de um profissional, e devem ser pesquisados e re-pesquisados.

Muitos alunos tambem desperdiçam trabalhos de conclusão de curso(TCC) explorando temas que não vão agregar em nada, pois já foram muito explorados por outras pessoas.

Porém, existem temas que teriam evoluído imensuravelmente se os professores se dessem ao trabalho de utilizar o material de pesquisa já desenvolvido e pedissem para os alunos estenderem tal material, de inúmeras maneiras: aprofundando a pesquisa, criando novas utilidades, desenvolvendo documentação, implementando, etc.

Conceitos de “reusabilidade de pesquisa” parecem não fazer parte da comunidade acadêmica brasileira falando-se em formação de técnicos e bacharéis(a coisa muda pouco de figura falando-se em mestrados e doutorados).

A inovação vem da pesquisa. E não vamos inovar se ficarmos pesquisando o que já foi pesquisado. O índice de inovação das faculdades brasileiras é baixo se comparado ao de faculdades do BRIC. O número de patentes registradas é baixo!

Exitem N medidas para serem tomadas a fim de melhorar o índice de reutilização do conhecimento, as mais simples que pensei no momento são as citadas abaixo:

  • Sincronização entre as disciplinas de um curso.
  • Criação de um repositório de conhecimento, como um WIKI. Algo tão fácil de se implementar e que traz tanto resultado.
  • Colaboração com a Wikipédia.
  • Pesquisa na internet antes de propor temas para TCC ou aprovar temas que alunos sugerirem, o tema pode já estar cansativamente explorado.
  • Pesquisa na Internet antes antes de solicitar um trabalho para alunos.

A WEB 2.0 está ai, e vai ajudar muito neste modelo de reutilização de conhecimento! Cabe a faculdade, disciplinar os alunos em como utilizar este modelo, mas como vai disciplinar o aluno, se a própria faculdade não o usa?

Fala-se tanto em reusabilidade no desenvolvimento de aplicativos, e os ganhos com isso são notáveis, por que não implementar no aprendizado?

Professores e coordenadores, vamos fazer a roda girar, pois ela já foi inventada!

Conte comigo nesta empreitada!

Leitura recomendada: Post do Taurion sobre Exploração do Open Source

Exemplos de Design Patterns em “não softwares”

Exemplos de Design Patterns em não softwares“Non-Software Examples of Software Design Patterns” - Encontrei este artigo que fala sobre design patterns aplicados em objetos da vida real. Pode ajudar muitas pessoas a entenderem alguns padrões com seus exemplos! O artigo foi escrito por Michael Duell, seu abstract é:

“Software design patterns have roots in the architectural patterns of Christopher Alexander, and in the object movement. According to Alexander, patterns repeat themselves, since they are a generic solution to a given system of forces. The object movement looks to the real world for insights into modeling software relationships. With these dual roots, it seems reasonable that software design patterns should be repeated in real world objects. This paper presents a real world, non software instance of each design pattern from the book, Design Patterns - Elements of Reusable Object-Oriented Software [13]. The paper also discusses the implications of non-software examples on the communicative power of a pattern language, and on design pattern training.”

Leitura recomendada para desenvolvedores Java, aqui!

Posted in JAVA. Etiquetas HTML:, . No Comments »

A importância do uso do Finally

A importância do uso do FinallyTenho visto muito código Java ultimamente nos quais não são utilizados finally.

Para quem não sabe, o bloco com finally sempre será executado quando existir, independentemente se ocorrer algum erro dentro do Try ou não. Usar finally é uma boa prática, o mesmo deve ser utilizado para fazer uma espécie de limpeza na aplicação, por exemplo: fechar alguma estrutura de dados e liberar memória, como no básico código abaixo:

try {
System.out.println(rs….);
} catch (Exception e) {
// tratamento de erro
} finally {
// código que será executado, independente se entrou no catch ou não
rs.close();
}

Um erro muito comum que encontro é este:

try {
System.out.println(rs….);
rs.close();
} catch (Exception e) {
// tratamento de erro
}

O desenvolvedor fecha a estrutura dentro to try, porém, se ocorrer um erro no momento do println, a estrutura não será fechada. Eu já vi servidores caírem ou o desempenho do sistema ficar inaceitável devido ao erro acima!

Algo muito importante, é procurar por “Throws” na documentação dos métodos que você está utilizando e pelas exceções lançadas por ele, assim, você trata todos os erros possíveis utilizando blocos catch, prevenindo-se assim, os possíveis erros em tempo de execução e informando os erros ao usuário de forma mais clara.

Lembre-se sempre de utilizar finally e fechar todas as estruturas de dados, arquivos, etc que seu código faz uso. É uma boa prática!

Maiores informações aqui.

Posted in JAVA. Etiquetas HTML:, , , , . No Comments »

Time do Samba recebe documentação de protocolos Microsoft

Time do Samba recebe documentação de protocolos MicrosoftBoa notícia!!!

Resumindo em bom português: A Microsoft assinou um acordo com a Protocol Freedom Information Foundation (PFIF) que estabelece que ela vai disponibilizar a documentação sobre seu protocolo de redes Windows para sofwares free, como o Samba.

Isso vai permitir que o time que fez o Samba, implemente melhor a integração com o Active Directory (AD), dentre outros.

Mais detalhes em: http://news.samba.org/announcements/pfif/

Para quem não está vivendo neste planeta nos ultimos 15 anos, Samba é o Free-Software que possibilita ao Linux operar em redes Windows, seja simplesmente compartilhando arquivos ou trabalhando como um servidor de redes Windows.

Boas práticas em SQL para desenvolvedores

Boas práticas em SQL para desenvolvedoresQuem nunca ouviu alguem reclamar: “o sistema está lento hoje!!!”? Nestes relatos de degradação de desempenho, frequentemente levantamos que esta degradação é decorrente de instruções SQL mal estruturadas ou ainda banco de dados mal planejado, o que, num efeito cascata, só é sentido conforme o sistema vai sendo utilizado, as tabelas sendo povoadas, etc. O SGDB começa a exigir muito processamento, memória e a gerar gargalos na rede, causando assim, efeitos no desempenho da aplicação e na rede!

Outro fato é que atualmente, boa parte dos desenvolvedores desenvolvem código SQL sem ter muito conhecimento sobre fundamentos de banco de dados. Tal falta de conhecimento gera a produção de código ineficiente e com baixa performance. É comum ver equipes de desenvolvimento que não tem um DBA, ficando assim, o desenvolvedor com a tarefa de criar um banco de dados.

Com estes problemas em mente, resolvi criar este post com algumas dicas para que os desenvolvedores tenham algum conteúdo básico e rápido e melhorem suas instruções SQL e a criação de banco de dados.

Tentarei ser o mais genérico possível para conseguir cobrir os bancos de dados mais utilizados atualmente (DB2, Oracle, MySql, Postgres, etc), porém, algumas dicas podem não ser aplicáveis a todos os bancos.

É importante lembrar que praticamente todas as dicas são “debatíveis” em diferentes cenários, portanto, fiquem a vontade para comentar.

Vamos lá:

1- Normalize seu banco de dados. Isso quer dizer básicamente, divida tabelas grandes em tabelas menores e remova redundancia, ou seja, que dados estejam duplicados sem real necessidade.

2. Em instruções select, evite usar “*”. Seja restritivo, traga somente os campos realmente necessários, isso alivia a memória do servidor, diminue tráfego na rede, etc. Algumas pessoas defendem que tambem não devem ser criados determinados campos, por exemplo, você tem A + B e pretende guardar C onde C = A + B. Ao invéz de criar uma coluna para armazenar C, passe a utilizar “select (A+B) AS C from tabela”. Esse pensamento pode não ser necessariamente válido para Dws. Vamos supor que você tem uma tabela enorme com dados sobre salário por ano. Você pode armazenar o percentual de ajuste e o valor ajustado, fazendo ai uma “desnormalização” para que o comando que vai recuperar os valores do salário não “frite” a CPU forçando-a a fazer muitas contas e perdendo muito desempenho.

3. Existe muito debate sobre essa: Não utilize seu banco de dados para armazenar imagens, ao invéz disso, armazene a URL. Vale lembrar que os bancos de dados atuais estão cada vez mais aprimorados na manipulação de imagens, portanto, aqui abre-se espaço para uma enorme discussão, benchmarck, etc.

4. Para obter maior performance, utilize chaves primárias numéricas ou ainda campos pequenos nas chaves.

5. Utilizando-se stored procedures e functions ao invéz de escrever código no seu programa, vai garantir maior desempenho e segurança para seu sistema como um todo.

6. Utilize o conceito de transações. Vários problemas podem ocorer, por exemplo, a rede cair. Aprenda sobre commit e rollback.

7. Use sempre o tipo de dados correto para armazenar os dados. Por exemplo, não armazene sexo, que vai ser M ou F em um campo Varchar, use apenas 1 caractere: CHAR(1).

8. Evite o uso de cursores, eles consomem muito tempo já que “navegam” registro por registro.

9. Otimize a clausula WHERE: Simples exemplos são o uso de “>” e “>=”. Se você quer retornar todas as pessoas de uma tabela que tem idade “> 3”, use no where “>=4”, dessa forma o banco não fará o scan das páginas até encontrar o 3. Esse princípio é válido desde que você tenha um índice na idade.

10. Quando possivel, crie instruções SQL idênticas, pois no momento da execução de uma instrução, o banco compila a mesma e a preserva em memória, na próxima execução, não vai precisar compilar novamente. Uma ótima técnica para fazer isso é utilizar variáveis nas suas instruções ao invés de passar parametros para o banco.

11. Utilize os mecanismos do banco de dados para persistência: Primary Key, Foreign Key, etc são feitos e otimizados para isso.

12. Quando possivel, trave (lock) uma tabela para executar alguma operação que vai demandar muito acesso a esta tabela, por exemplo, se você vai alterar a estrutura de uma tabela grande ou importar dados neste tabela (falando-se de tabelas realmente grandes).

13. Sempre utilize o nome das colunas em instruções SELECT, INSERT, UPDATE evitando utilizar “*”.

14. Evite utilizar o operador “LIKE”, ele pode facilmente fazer o desempenho de um banco de dados ruir!

15- Utilize EXISTS ao invéz de COUNT para verificar se existe um determinado registro em uma tabela. É comum ver desenvolvedores fazendo um “select count(X) from Y” para verificar se o COUNT é maior que 0. Utilizando-se EXISTS, o sgbd vai parar no primeiro registro encontrado, se utilizar count, o banco vai varrer toda a tabela.

16- Em joins de tipos de dados diferentes, o SGBD vai ter que converter o tipo hierarquicamente inferior para o outro tipo a fim de efetuar a comparação, e assim, não vai utilizar um índice caso exista.

17. Sobre índices:

  • Não crie indices em campos que são alterados constantemente, pois o banco vai ter que atualizar toda sua estrutura de índices em qualquer update feito no campo.
  • Prefira criar os indices em chaves primárias e estrangeiras, e em suas queries, utilize estes índices.
  • Não tenha muitos índices em seu banco, só o necessário: uma breve explicação sobre o motivo disso, é que o banco de dados mantem toda uma estrutura para gerenciar os índices, então, quanto mais índices, mais tempo/processamento o SGBD vai utilizar para a manutenção dos mesmos.
  • No momento de importação/importação de uma base de dados, não exporte/importe índices. Isso vai consumir mais tempo/processamento. Tambem pode-se não fazer backup de índices.
  • Não crie índices em colunas que possuem pouca variação de valores.

18. Entenda os fundamentos de banco de dados. Uma ótima leitura é o livro “Sistema de Banco de Dados”, de Abraham Silberschatz, Henry F. Korth e S. Sudarshan lançado no Brasil pela Editora Elsevier.

O bookmark sobre WebSphere

O bookmark sobre WebSphereEncontrei “O Bookmark” sobre WebSphere Application Server, tem muito material desde o básico sobre sua arquitetura até o desenvolvimento de aplicações avançadas, integração, WebServices, migração de servidores, etc! Para quem quer tirar certificação, vai ajudar muito.

A descrição da página é “Learn about using Java™ 2, Enterprise Edition (J2EE™) and IBM® WebSphere® Application Server with this list of essential reading, compiled for customers, consultants, and other technical specialists by IBM Software Services for WebSphere” .

Recomendadíssimo!

Segue o link: http://www-128.ibm.com/developerworks/websphere/library/techarticles/0305_issw/recommendedreading.html

Use e divulgue o Open Document Format (ODF)

Motivado por criticas construtivas feitas por pessoas que viram meu post sobre Linux disponibilizando uma apresentação em PPT, resolvi criar este post bem básico, sobre ODF. Espero que colabore para que leigos conheçam o padrão e ajude na sua adoção. Desde já estou aberto a críticas e sugestões. Boa leitura!!!

Cada vez mais nós (governos, contribuintes, empresas, etc) estamos deixando de armazenar documentos em papel e armazenando em meio eletrônico. Isso é fato. O grande problema que surge neste contexto, é que a forma que uma pessoa armazenou o dado, pode não ser acessível para outro devido ao seu formato. Hoje estamos numa situação como ilustra a figura abaixo:

today.jpg

Documentos sendo criados pelo aplicativo X, só são lidos pelo aplicativo X, documentos criados pelo aplicativo Y, só são lidos pelo aplicativo Y. Se o governo trabalha com o aplicativo X, e você retira este documento do governo, logo tem que ter o aplicativo X para poder abrir o mesmo!

Outra situação é, se o fabricante do aplicativo X efetua uma atualização nele. Os documentos criados a partir dos aplicativos atualizados, podem não ser abertos por todos que tem a versão não atualizada do aplicativo X, sendo assim, serão forçados a gastar dinheiro e tempo com a atualização do mesmo.

Tendo em vista esta situação, por que não criarmos um padrão único que possa ser aberto e alterado por todas as aplicações do mercado? Eis que surge o ODF!

Open Document Format (ODF)

O Open Document Format, é uma especificação desenvolvida pelo comitê técnico Open Office XML da OASIS (Organization for the Advancement of Structured Information Standars) baseada em XML, que, pode ser utilizada para criarmos o contexto ideal ilustrado pela figura abaixo:

tomorrow.jpg

Dessa forma, não dependemos mais de nenhum fabricante ou do software que alguém utiliza para podermos trabalhar com um documento. Qualquer aplicativo compatível com a especificação do ODF vai ser capaz de manipular documentos neste padrão.

Uma relação entre as extensões dos documentos salvos em aplicativos MS com os documentos salvos em ODF é:

doc odt
xls ods
ppt od

Então, uma apresentação salva num aplicativo compatível com a especificação ODF, vai ter a extensão ODP. Uma planilha salva no mesmo aplicativo, vai ter a extensão ODS, e finalmente um texto salvo, vai ter a extensão ODT. (P = Presentation, S=Spreadsheet e T= Text)

Mais detalhes sobre ODF podem ser obtidos aqui http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=office#overview

A Infowester tem uma matéria bem detalhada sobre ODF aqui http://www.infowester.com/odf.php

Iniciativa para incentivar ODF

Uma ótima iniciativa no Brasil e no mundo é a Aliança ODF. Seu site em português é ODF Alliance no Brasil.

Esta Aliança “atua globalmente para educar os elaboradores de políticas, administradores de TI e o público em geral sobre os benefícios e oportunidades do OpenDocument Format, visando garantir que as informações, registros e documentos governamentais sejam completamente e nativamente accessíveis através de diversas plataforma e aplicações, mesmo quando a tecnologia muda.”

É muito legal divulgar este Link e cadastrar sua empresa na aliança, passando assim a utilizar ODF no seu dia a dia a fim de colaborar com a adoção de um formato único e não “caindo” nos problemas de incompatibilidade de documentação citadas no começo do post ou ainda ficando nas mãos de uma fornecedora.

Algo bem importante a ser citado é que empresas grandes incentivam ODF, dentre elas IBM, RedHat, Google, Sun, Novell, Oracle, etc.

Softwares para trabalhar com ODF

Como esperado, o Microsoft Office não salva documentos utilizando este padrão, portanto eu sugiro abaixo dois aplicativos, GRÁTIS, que trabalham com ODF e são ótimos!

O primeiro é o IBM Lotus Symphony, que agora em sua versão 3 está em português, seu site é http://symphony.lotus.com, tem um manual de instalação bem detalhado, eu utilizo ele.

O segundo é o Open Office, mais amplamente utilizado. Pode ser baixado de http://www.openoffice.org/.

O Open Office tem uma “localização” brasileira, é o BR-Office. Pode ser obtida aqui http://www.broffice.org/.

Mais…

Existe um outro formato, o OpenXML, que é uma proposta da ECMA(http://www.ecma-international.org/) e Microsoft, que “disputa” com o ODF para ser o padrão de mercado. Podemos encontrar facilmente em inúmeras páginas, pessoas fazendo uma guerra entre OpenXML e ODF e transformando isso em um IBM X Microsoft, algo que é totalmente errado. Meu escopo aqui não é falar sobre essa “batalha” e bem entrar em algo mais técnico, meu foco é simplesmente apresentar o padrão para leigos. Talvez futuramente eu escreva algo mais técnico com algum comparativo.

Uma ótima leitura, é um post do grande mestre Cézar Taurion em http://www.ibm.com/developerworks/blogs/page/ctaurion?entry=odf_em_2008, ele fala sobre ODF e as perspectivas para 2008.

Outra pessoa que falou algo interessante sobre ODF é Avi Alkalay, seu blog: http://avi.alkalay.net/2007/12/odf-ooxml-liberdade-de-escolha.html

Então é isso! Espero ter esclarecido um pouco e dado alguns pontos de referência.

Agora, use e divulgue o ODF! :-)

Perfil do Profissional de TI em tempos de mundo plano

caderno A apresentação abaixo é referente a palestra que o Marcelo Vessoni ministrou na FEMA-Assis no dia 30 de novembro de 2007 as 20 horas cujo tema é “O perfil do Profissional de TI em tempos de mundo plano”.

A apresentação mostra o contexto atual do mercado global de TI, e apresenta as qualificações desejadas para quem está se formando ou já está no mercado.

É interessante ver como JAVA e .NET definitivamente empregam muito, porém, existe muita demanda para Mainframe!

Enfim, clique aqui para baixar!

Enjoy!