10 Novembro 2009

Problemas na atualização para o Kubuntu 9.10

Atualizei o computador de minha casa com o Kubuntu 9.10 e vou postar minhas impressões sobre alguns pontos dessa nova versão e relatar alguns problemas que tive e que mais pessoas podem ter.


Como instalar o sistema do zero é algo muito trabalhoso, demorado, tem que se configurar tudo novamente, optei por fazer a atualização automática do sistema, mais prática e rápida... pelo menos era assim que eu pensava. Bom, já esperava uma demora para baixar as centenas de megabytes necessários, e depois de algumas horas de download finalmente o sistema começou a ser atualizado de fato, e alguns minutos depois, e somente um questionamento se eu queria ou não manter o antigo arquivo de configuração do MySQL e o aviso de que a versão instalada do gcc não era compatível com a nova versão do sistema, o sistema de atualização automática terminou o seu trabalho sem nenhum problema, ou quase nenhum. No geral o processo de atualização é fácil e rápido, sistema muito bem desenvolvido.

Após reiniciar o computador notei dois grandes problemas: o som estava mudo e a interface gráfica apresentava inconsistência, chegando a deixar a tela toda preta, algumas vezes nem mostrava a tela de login. Sobre o som eu procurei alguma solução na internet, mas como não tive sucesso com as dicas resolvi partir para resolução do problema de vídeo.

Tentei reinstalar o driver da nvidia, porém quando o sistema tentou compilar o módulo pro kernel atual deu uma mensagem de erro dizendo que a versão do compilador era incompatível com a versão do kernel atual. Achei muito estranho a mensagem e fui conferir a versão do kernel q estava rodando, e era a versão 2.6.28, porém a versão do kernel instalada no Kubuntu 9.10 é a 2.6.31. Foi ai que percebi que o grub não havia sido atualizado para dar boot pela versão mais nova do kernel, tarefa que era para ser realizada automaticamente pelo sistema de atualização. Bom, eu atualizei o arquivo \boot\grub\menu.lst adicionando uma entrada para o novo kernel e reiniciei o sistema. Antes de acessar o KDE eu reinstalei o driver da nvidia, dessa vez sem erro nenhum, depois voltei para a interface gráfica e fiz login no KDE... E olha só, todos os problemas resolvidos. Não sei se o que ocorreu comigo ocorreu com mais alguém exatamente da mesma forma, mas fica a dica para quem tiver um problema parecido.

Fora esse contratempo o sistema está ótimo. O visual mudou, saiu de um tema escuro para um tema mais claro, bem agradável. Mas o que me impressionou mesmo foi o tempo de inicialização do sistema. Em meu modesto computador (Athlon 64 de 2 GHz e 1 GB de RAM, quase quatro anos de uso) antes da atualização levava mais de um minuto desde o grub até a tela de login, agora o sistema inicializa num tempo entre 40 e 45 segundos!! Uma melhoria bem notável. Não utilizei muito o sistema desde a atualização, porém tive uma leve impressão que o sistema como um todo está mais rápido. Outro ponto interessante desta versão é a integração como o serviço Ubuntu One, que é um sistema de armazenamento de arquivos na internet (falarei mais dele num próximo post).

16 Outubro 2009

Blog "A Vez do Brasil"

Acabo de criar o blog "A Vez do Brasil". Este novo blog tem motivação política, e tem como objetivo a conscientização política dos brasileiros. Segue abaixo o link para o blog:

http://avezdobrasil.blogspot.com

01 Outubro 2009

Porque o mercado de TI brasileiro não decola?

Porque no Brasil não existem muitas empresas de TI que se destacam? Esse assunto vem me chamando atenção já faz algum tempo e essa semana tive duas oportunidades de discutir sobre isso, uma discussão no fórum do GUJ (não diretamente relacionado) e uma conversa com alguns amigos da faculdade.

Sim, eu acredito que o mercado de TI brasileiro está muito carente de empresas de destaque, e isso é notado facilmente se contarmos quantos softwares e sites (excluindo-se os de notícia) que usamos diariamente são mantidos por empresas nacionais. A maioria que fez essa conta deve ter descoberto que somente poucos são nacionais, isso se tiver um pelo menos. Outro ponto que é fácil notar é a pequena quantidade de empresas que desenvolvem software desktop e sistemas web visando como público alvo os usuários em geral, ou seja, sem mirar somente o meio corporativo ou nichos específicos de usuários. E ainda podemos notar que 80% das vagas  do mercado de trabalho para profíssionais de TI está concentrado em vagas para indústrias, comércio e em consultorias que prestam serviços para indústria e comércio (essa é minha estimativa e opinião pessoal, não me apoio em pesquisa nenhuma).

E qual a causa disso? Eu acredito que seja a cultura brasileira, uma cultura de comodismo, de buscar os caminhos mais fáceis, que é pregada na cabeça de cada um de nós desde que somos crianças. A maioria dos brasileiros estuda para poder encontrar um bom emprego que pague bem, ou que pelo menos tenha uma certa estabilidade no emprego. Casos mais graves são os que estudam exclusivamente para passar em concursos públicos e ficar "tranquilo" o resto da vida. O problema é que essas vagas não existem para todos do Brasil!! E qual a solução adotada? Simples, ficamos em empregos que não gostamos e que pagam pouco.

O parágrafo anterior pode ser adotado para todas as áreas de trabalho, mas vou me concentrar em TI.

Na discussão no fórum o autor do tópico fez uma pergunta "porque ainda existe a idéia de "operário" entre desenvolvedores de software?". Minha resposta: "Porque eles deixam, e querem isso", e essa resposta eu justifico no parágrafo acima.

E o que isso tem a ver com a carência do mercado de TI brasileiro? Oras, junte empresas que somente olham para o mercado empresarial e nichos específicos com profissionais que se acomodam como simples "operários" e temos a estagnação de um mercado que poderia ser bem maior em nosso país.

Não sei se estou sendo claro o suficiente, mas o que eu quero expor é que muitos profissionais de TI reclamam de seus salários e das empresas onde trabalham, porém o máximo que fazem é distribuir currículos para procurar outro emprego que pode ter as mesmas condições, isso quando não permanecem acomodados, porém não pensam em alguma iniciativa própria. E agora eu pergunto: como um povo que é considerado tão criativo permanece em tamanha acomodação tendo tantas oportunidades a explorar?

Vou dar exemplo da minha região, Vale do Paraíba no estado de São Paulo. Essa região eu considero com um potencial enorme por ficarmos no meio do eixo Rio-São Paulo, temos uma boa quantidade de indústrias, comércio e várias universidades, porém a região não deslancha, principalmente a área de TI. As vagas de TI aqui na região se concentram nas industrias, existem poucas vagas no comércio, e a maioria das empresas relacionadas a TI são lojas de informática que prestam serviços de manutenção e redes, também existem boas consultorias, mas são poucas. Além disso o mercado de trabalho de TI está saturado, com poucas vagas e as que existem em geral não são muito boas. E a conversa que tive com meus colegas da faculdade era exatamente sobre isso: falta de vagas, o baixo salário, os maus empregos, a falta de competência de alguns "profissionais" das prestadoras de serviços da região e a falta de empresas de TI especializadas em alguns assuntos, sendo necessário vir empresas de outras regiões para realizar alguns serviços.

Diante disso tudo cheguei a conclusão de que existem 4 opções para quem quer seguir uma carreira em TI aqui na região: 1- lutar (e esperar) por uma das raras vagas em alguma das boas empresas da região; 2- acomodar-se em qualquer emprego razoável que conseguir; 3- buscar uma oportunidade e mudar-se pra São Paulo (capital); 4- partir para uma iniciativa própria abrindo uma empresa.

A maioria das pessoas optam pela opção 2 e 3, justamente por serem as opções mais fáceis. A opção 1 é boa, porém em um mercado saturado por mais que uma pessoa se dedique, estude, seja bom, tem muita chance de somente se frustrar e partir para a opção 2. Já a opção 4, principalmente numa região com o potencial e a carência de boas empresas e vagas de trabalho que temos aqui, seria a melhor opção para quem quer um trabalho melhor e com um ganho financeiro maior, porém é a menos escolhida, e isso graças a questão cultural que abordei no 3º parágrafo.

Vamos fazer uma comparação: porque nos EUA de tempos em tempos se vê a notícia de uma nova startup de tecnologia abrindo e se dando bem? Ora, pois lá eles não suportam a ideia de serem simples operários de software (isso eles deixam para os estrangeiros, principalmente os indianos) e utilizam seus conhecimentos para criarem algo para si próprios e não somente para conseguir um bom emprego. Tudo bem que lá a política econômica e tributária ajuda o surgimento de novas empresas, totalmente ao contrário do Brasil, mas aqui não se vê quase ninguém nem mesmo tentando. Acredito que se houvesse mais iniciativa, mais ideias sendo postas em prática, e sobretudo mais ousadia teríamos mais empresas de software sendo criadas e se dando bem em nosso país. O problema é que o brasileiro está acostumado a reclamar, se indignar, e 10 minutos depois ignorar sua própria indignação e voltar ao velho comodismo.



Seria tão difícil assim olharmos a nossa volta, analisarmos a necessidades existentes e tentarmos resolver? Voltando ao exemplo de minha região, qual o motivos das pessoas verem as carências de bons prestadores de serviços na região e não investirem em cobrirem a carência?  E também temos que considerar que uma empresa que oferece serviços web pode ultrapassar facilmente as fronteiras de sua região e cobrir carências que existem no país inteiro, mas poucos investem nisso. O Brasil como um todo necessita de iniciativas para crescer. E essa falta de iniciativa alimentada pela cultura dos brasileiros em relação a trabalho está nos fazendo perder muito.

Está na hora de nós brasileiros olharmos com mais atenção para essa situação em que nos encontramos e começarmos a agir em vez de reclamar e depois voltarmos ao comodismo.

25 Agosto 2009

Lista de Compras Móvel

Certo dia fazendo compras com minha noiva, levando uma folha de papel e caneta nas mãos e vendo outros fazendo o mesmo pensei: por que não fazer um programa de lista de compras para celular?

Pois bem, nas 2 ultima semanas decidi relembrar como é programar para dispositivos móveis com Java Micro Edition (JME), e o resultado foi um pequeno e simples programa de lista de compras. Para quem quiser utilizar o programa é só acessar www.perludum.com.br, baixar e instalar em seu aparelho.

Confesso que só tive oportunidade de testar em meu N95 e no emulador, não foi testado em nenhum outro aparelho.

Aos que testarem, ficarei grato aos que derem retorno sobre problemas e dicas de possíveis melhorias no programa.

09 Agosto 2009

Econodin - Suas finanças em dia

Depois de meses de desenvolvimento, de trocar alguns frameworks, de voltar a usar alguns frameworks depois de tê-los abandonados, de trocar o visual do sistemas umas 3 vezes e, principalmente, depois de muito aprendizado sobre desenvolvimento web, posso dizer que o Econodin está pronto para uso, já que o sistema agora apresenta um mínimo de funcionalidades que creio serem as mínimas para seu uso. Isso me animou a iniciar uma divulgação maior do sistema.

Todas as funcionalidades presentes hoje no sistema são de uso gratuito e continuarão sendo gratuitas enquanto o sistema estiver no ar, e também não há nem haverá limitação para a utilização dessas funcionalidades. Já estou trabalhando em melhorias do que já existe e na implantação de novas funcionalidades, portanto minha pretensão é de que o sistema cresça.

A medida em que os trabalhos evoluam postarei novidades.

29 Junho 2009

Erro HTTP 411

Desde algum tempo atrás quando comecei a testar o Econodin no Windows, já acessando o site hospedado na internet, percebi que ocorria um erro quando acessava o sistema onde trabalho. A particularidade é que somente ocorria o erro utilizando o Firefox no Windows (o Internet Explorer não tem esse problema, e não testei outros), e somente no trabalho, no computador de minha casa funciona perfeitamente. O erro apresentado em um alert do JavaScript era "411: Length Required", e sempre ocorria quando eu acessava 2 funções JavaScript que fazem um request no servidor.

Sem idéia alguma do que poderia estar ocorrendo, fiz uma pesquisa na internet e encontrei essa pequena discussão no fórum do Mentawai: http://forum.mentaframework.org/posts/list/2271.page. Resumindo, o problema ocorre por estar acessando o sistema através de um proxy, sendo que alguns proxys necessitam que sejam passados parâmetros no request caso contrário retornam o erro 411, e no caso dessas 2 funções que estavam dando problema nenhum parâmetro erra passado.

A solução desse caso é inserir um parâmetro qualquer para o request, por exemplo,

req.addParameter("qualquercoisa", "qualquercoisa");
Pronto, isso é o bastante para resolver o problema.

Porém ainda ficou uma coisa no ar: por que o IE não apresenta esse problema? Essa resposta eu não consegui ainda.


De volta ao JQuery

Conforme postei aqui passei a utilizar o YUI no Econodin. Porém, após algum tempo desenvolvendo com Yahoo UI cheguei a conclusão de que para mim a melhor opção é mesmo o JQuery. O trabalho de portar o sistema para YUI e depois portar novamente para JQuery foi grande, porém valeu muito pela experiência e aprendizado.

O motivo que me levou a utilizar o YUI foi o que muitos consideram o grande diferencial do JQuery: a grande quantidade de plugins. Porém eu não achava esse diferencial do JQuery tão bom assim, já que essa grande quantidade acaba por confundir quem não tem experiência, e foi isso que aconteceu comigo. Comecei a utilizar vários plugins do JQuery, muitos eu realmente precisava e outros não tinha necessidade nenhuma, e isso acabou me complicando um pouco. Decidi utilizar o YUI pois ele já traz uma grande quantidade de componentes oficiais, com vasta documentação e seu estilo padrão é bem agradável, sendo que eu não precisaria mexer com CSS dos componentes.

Porém algo que não me agradava desde a primeira vez que o testei o YUI é sua complexidade e curva de aprendizado alta. Umas das coisas chatas que percebi é que a ordem das funções importam para ele, ou seja, se a função X chama a função Y então a função Y deve ficar antes da função X, caso contrário a função X não reconhece a função Y. Também não consegui para YUI nada que substituísse alguns plugins do JQuery, então tentei sanar isso utilizando os dois frameworks ao mesmo tempo, o que achei bem complexo. Com isso tudo, resolvi voltar de vez para JQuery, após ter pesquisado um pouco sobre outros frameworks JavaScript.

Algo que aprendi com esse retorno ao JQuery é que, apesar de haverem plugins para quase tudo o que se possa imaginar, algumas coisas é melhor fazer sem utilizar um plugin. Na primeira versão do sistema utilizando o JQuery eu utilizava um plugin para tabelas que funcionava bem, porém eu não estava totalmente satisfeito com ele já que o mesmo tinha várias funções que não utilizava e algumas outras que eu gostaria não estavam presentes, então desta vez procurei algum outro plugin, sem sucesso. Com isso escolhi controlar as tabelas diretamente, se a ajuda de um plugin específico e isso me deu mais flexibilidade para controlar a tabela.

Bom, continuo desenvolvendo o sistema Econodin agora utilizando JQuery de uma forma mais racional, graças a experiência de ter trocado duas vezes de fremework JavaScript.

03 Junho 2009

Mudança de nome e disponibilização

Mudei o nome do sistema Controle Financeiro Pessoal para um nome mais simples. O novo nome é Econodin. Nunca achei que um nome tão grande quanto Controle Financeiro Pessoal fosse um bom nome, então dediquei algum tempo para a criação de um novo nome.

Além do novo nome outra novidade é que o sistema está disponível novamente na internet, junto com o site Perludum, ainda não numa versão final do sistema mas as funções principais do sistema estão funcionando corretamente, além de um visual novo.

Os endereços são:
Site: www.perludum.com.br
Sistema: www.perludum.com.br/econodin
Aos interessados em testar e utilizar o sistema basta fazer um cadastro simples no site e começar a utiliza-lo.

Como disse acima, o sistema não está em uma versão final, faltando muito trabalho ainda para realizar melhorias e adicionar algumas outras funcionalidades básicas, como relatórios. Mas aproveitarei as férias da faculdade para adiantar esse trabalho, e assim espero que até o final de Julho de 2009 eu consiga fazer as melhorias necessárias. Mas as funções atuais estão funcionando, sendo que eu já a utilizo fazem uns 3 meses.

Nas próxima semanas eu trarei mais novidades.

20 Abril 2009

E a Oracle compra a SUN

Acabei de ver no GUJ que após a tentativa da IBM comprar a SUN quem levou mesmo foi a Oracle. Bom, não chega a ser tão surpreendente pois já era noticiado que caso não houvesse acordo com a IBM, a SUN poderia negociar com outras empresas, entres elas a Oracle. A notícia já está disponível no site das duas empresas (http://www.sun.com/third-party/global/oracle/index.jsp e http://www.oracle.com/sun/index.html).

Em minha opinião gostei mais desta notícia do que se fosse a IBM que fizesse a aquisição, apesar de nem saber direito o motivo, mas acredito que os produtos da SUN tem mais chances de terem continuidade nas mãos da Oracle.

Algumas pessoas já se demonstraram preocupadas com o futuro do Java, do MySQL, do Open Solaris, etc. mas eu acredito que não haverão mudanças drásticas nesses produtos. O JDK da SUN pode se fundir como o da Oracle, aproveitando os melhores recursos de cada um. O Solaris pode ser uma boa plataforma para que a Oracle ofereça seus produtos. Já o MySQL acredito que não tenha quase nenhuma mudança em relação ao modelo de negócios que a SUN usa para esse produto. Com o MySQL a Oracle pode chegar a mercados onde é difícil de chegar com o seu BD mais famoso.

Agora é esperar para ver o que acontecerá a médio e longo prazo.

12 Abril 2009

GPS no celular - Nokia Maps x Google Maps Mobile

Quando comprei o N95 em dezembro do ano passado, a função que mais me atraiu para a compra foi o GPS. Na verdade, após duas viagem onde tive desvios de rotas involuntários, achei que seria uma boa coisa a compra de um aparelho GPS, e como estava querendo trocar o celular uni o útil e o agradável e optei pelo N95. Ainda na compra do aparelho fiquei sabendo que a Nokia oferecia 6 meses gratuitos de navegação com assistência por voz.

Não fiz grandes viagens após a compra do aparelho, porém fiz alguns pequenos testes com o GPS e o aplicativo Nokia Maps 2.0 em rotas já conhecidas, na região do Vale do Paraíba - SP, principalmente nas cidades de Caçapava, Taubaté e São José dos Campos. Só que nesses pequenos testes não tive sucesso, pois o programa, apesar de apresentar mapas completos, nunca calculava as rotas, logo o software somente servia para consultas. Em uma pesquisa na net descobri que na região do Vale do Paraíba apenas existem mapas não navegáveis. Na verdade até versão 2 do Nokia Maps poucas cidades do Brasil possuem mapas navegáveis. Isso me desmotivou um pouco em relação ao aplicativo e, por falta de tempo e sobra de preguiça, deixei a função GPS do aparelho um pouco esquecida.

Porém nessas últimas semanas resolvi procurar um novo software para celular para navegação GPS. Entre os que encontrei somente o Google Google Mobile possui mapas navegáveis para praticamente todo o Brasil (pelo menos é isso que aparenta).

Para testar o Google Maps Mobile o trecho escolhido foi a partir da cidade de Aparecida até Campos do Jordão, passando por dentro de Pindaminhangaba. O software da Google trabalha somente online baixando os mapas a medida em que vamos precisando deles, logo uma conexão à internet é necessária. O primeiro teste foi o de localizar os locais e calcular a rota, o que foi realizado sem maiores problemas, mas opções como a de evitar rodovias e pedágios presentes no site do Google Maps foi sentida. Porém 2 problemas apareceram com a utilização.

O primeiro a aparecer foi o da falta de precisão dos mapas. Enquanto estava rodando na Via Dutra o software me mostrava em uma avenida marginal a rodovia, coisa que o software da Nokia apresentava precisão quase perfeita, mesmo não tendo mapas navegáveis. Só que o pior problema do software da Google se apresentou pouco mais a frente. Ao sairmos da Via Dutra e pegarmos um acesso para Pindamonhangaba, andamos pouco mais de 1 Km e o celular deu um bipe avisando de que não avia mais sinal de celular e que o programa não poderia funcionar sem uma conexão de celular, mesmo eu tendo baixado previamente os mapas da região. Ainda bem que estávamos em um trecho conhecido, senão a viagem teria se complicado um pouco.

Após essa experiência com o Google Maps para celulares, voltei a procura de um software de navegação para celulares. Estava quase perdendo a esperança de encontrar um bom programa quando me lembrei que faz algum tempo vi uma notícia do lançamento do primeiro beta do Nokia Maps 3, que trazia melhorias visuais e de desempenho, novos recursos e, o mais importante para mim, mapas atualizados porém na época da notícia só havia sido liberado o beta para aparelhos Symbian S60 3° Edition FP2, mas os N95 possuem somente o FP1. Como já havia se passado um bom tempo resolvi verificar se tinham liberado alguma versão para sistemas com FP1. Constatado a liberação, baixei os softwares necessários, atualizei o Nokia Maps para a versão 3 e baixei os novos mapas e os arquivos de áudio. Site do Nokia Maps 3 com instruções para baixar os softwares necessários e para instalação aqui.

A grata surpresa veio ao calcular perfeitamente uma rota de teste entre Caçapava e Campos do Jordão, percurso que nem tinha conseguido calcular a rota na versão 2. Testei outras rotas aqui da região e tudo funcionou perfeitamente. Para finalizar o teste, resolvi testar o software em campo, ou seja, escolhi minha posição atual, escolhi minha posição final e entrei no modo de direção (novamente no trecho de Caçapava - Campos do Jordão). O sistema desta vez funcionou perfeitamente, informando cada acesso que deveria pegar com precisão.

Conclusão: O Google Maps Mobile possui uma falta de precisão que pode atrapalhar bastante, e principalmente a incapacidade de trabalhar offiline dificulta muito sua adoção. Mas para quem não tem outra opção de software de navegação ele pode ser bem útil, desde que uma conexão pelo celular esteja disponível.

Já o Nokia Maps 3 está muito bom, tendo como principal vantagem sobre o software da Google o funcionamento offiline, já que os mapas são baixados no cartão de memória do celular. A desvantagem é que ele só está disponível para alguns modelos de celulares da Nokia.

É bom salientar que o modo de direção do Nokia Maps que utilizei é um serviço pago (somente esse modo, a utilização do programa em si é gratuito), que só estou tendo a oportunidade de utilizar pois peguei uma promoção de uso gratuito de 6 meses quando comprei o N95. Quando expirar o prazo só poderei usar o software para simulação de rotas, função igual ao Google Maps. Sobre o preço do serviço, digamos que é alto o suficiente para desmotivar a contratação por quem não o utiliza com frequência.

18 Março 2009

Integrando Apache HTTP Server com Apache Tomcat

Com o objetivo de ter um ambiente aqui em casa mais parecido com o ambiente que encontramos num serviço de hospedagem java, decidi integrar o Apache HPPT Server com o Apache Tomcat.

O objetivo mais comum para essa integração é a transparência obtida no acesso aos sistemas, ou seja, permitir que se acesse os sistemas que estejam rodando no Tomcat pela porta 80 em vez da porta 8080 que é utilizada por padrão pelo Tomcat. Um exemplo prático para isso é caso você precise rodar sistemas PHP com sistemas JEE no mesmo servidor utilizando a porta 80 para os dois casos.

Existem vários artigos explicando como se fazer essa integração utilizando-se do mod_jk para isso, porém existe um módulo do apache http que torna essa configuração mais simples, o mod_proxy_ajp. Esse módulo já vem incluso no apache http server, bastando apenas ativá-lo. Aqui estou utilizando o Ubuntu 8.10, mas acredito que não deva haver diferenças para outras distribuições linux.

Partindo do princípio de que ambos os servidores estão instalados, a primeira configuração a se fazer é no arquivo $TOMCAT_HOME/conf/server.xml. A alteração é para habilitar o conector do AJP 1.3, que deve ficar da seguinte forma:
< port="8009" style="font-weight: bold;">enableLookups="false" protocol="AJP/1.3" redirectPort="8443" />
Após isso precisamos configurar o Apache HTTP Server. A maneira como fiz aqui foi criar um host virtual para direcionar as requisições para o tomcat. Para isso adicionei no arquivo /etc/hosts mais uma entrada, ficando da seguinte forma:
127.0.0.1 localhost
127.0.0.1 servidorvirtual
Após configurar os hosts vamos habilitar o módulo mod_proxy_ajp:
# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/proxy_ajp.load proxy_ajp.load
E caso não esteja habilitado, fazemos o mesmo procedimento para o módulo proxy, que é uma dependência do mod_proxy.ajp:
# ln -s ../mods-available/proxy.load proxy.load
# ln -s ../mods-available/proxy.conf proxy.conf
Habilitado os módulos, vamos configurar o servidor virtual que redirecionará as requisições ao Tomcat acrescentando ao arquivo /etc/apache2/sites-available/default a seguinte configuração:

ServerName servidorvirtual
ErrorLog /var/log/apache2/ajp.error.log
CustomLog /var/log/apache2/ajp.log combined


AddDefaultCharset Off
Order deny,allow
Allow from all


ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
Pronto, agora é só reiniciar o Apache HTTP Server e o Tomcat. O resultado é que ao acessar http://localhost você estará acessando o servidor HTTP diretamente, e ao acessar http://servidorvirtual o HTTP Server redirecionará a requisição paro o Tomcat.

17 Março 2009

Voltando a postar

Após o primeiro post deste ano deixei o blog juntando teias de aranha novamente. Mas agora pretendo cumprir mais um dos objetivos que citei no blog anterior: escrever mais no blog - o que seria o terceiro objetivo a ser buscado, já que iniciei o curso de inglês e implementei algumas coisas novas no Controle Financeiro Pessoal (preciso escolher um nome melhor pra ele).

Quanto ao Controle Financeiro, estou repensando algumas coisas sobre ele, principalmente sobre sua interface que devo trocar o JQuery pelo YUI. O certo mesmo é que iniciarei agora uma fase de ajustes no sistema e refatoração do código fonte para que possa deixá-lo estável o suficiente para disponibilizá-lo novamente. As metas principais são:

- Implementar segurança no sistema - na pressa de ter algo "usável" não me preocupei com isso, então agora é a hora;

- Melhorar a interface como usuário quanto a aparência e a usabilidade;

- Criar uma pequena página de introdução ao uso do sistema;

- Refatorar o código fonte que está muito mal escrito, eu admito.
Para acertar esses pontos levarei algum bom tempo ainda, mas tão logo termine esses trabalhos irei disponibilizar novamente o sistema para uso na internet.

05 Janeiro 2009

2009

Bom, mais um ano que começou. Mais um ano que temos pela frente para corrermos atrás de nossos objetivos. E por falar em objetivos, vou expor aqui meus objetivos profissionais para este ano:

  • Iniciar novamente um curso de inglês. Na verdade já era para ter iniciado, mas ainda esta em tempo;
  • Acelerar o desenvolvimento do Controle Financeiro Pessoal, que deixei parado mês passado para descansar um pouco;
  • Me dedicar mais na faculdade. Esse ano parece que as matérias serão mais interessantes, resta ver se os professores irão ajudar;
  • Iniciar o TCC da faculdade o quanto antes. No TCC pretendo levar adiante a ideia do programa de backup, que já mencionei aqui no blog;
  • Ler mais livros técnicos;
  • Escrever mais neste blog;
  • Aprimorar conhecimentos sobre controle de versão;
  • Aprender Ruby ou JRuby;
  • Iniciar os estudos sobre desenvolvimento ágil.
Bom, essa é uma lista básica das coisas mais importantes que pretendo fazer esse ano, e em relação ao Controle Financeiro Pessoal pretendo der um foco grande para ele.

17 Dezembro 2008

Como se aperfeiçoar como programador

Encontrei faz um tempo atrás em um blog que acompanhava dois postes muito interessantes sobre como ser aperfeiçoar como programador. O primeiro apontava pra um outro post (em inglês) que sugere exercícios para se aperfeiçoar em programação Orientada a Objetos. O outro post fala um pouco sobre como melhorar seu código e muito sobre como se melhorar como programador. Aqui eu vou falar um pouco sobre esses dois posts, das coisas que mais me chamaram a atenção e que eu achei mais interessante. Porém eu recomendo que leiam os posts originais, pois ambos são muito bons, além de encontrarem mais referencias sobre o assunto.

O primeiro post é como se fosse um manual com 9 exercícios a serem praticados para se aperfeiçoar com programador OO, que por sua vez é um resumo de um capítulo de um livro (mais detalhes no post original). O título traduzido deste post seria Aperfeiçoando Pequenas Classes e Métodos Curtos Orientados a Objetos. A proposta é que se escreva um programa de 1000 linhas com as restrições listadas, restrições que devem ser seguidas a risca. Abaixo uma pequena tradução das regras (me perdoem erros na tradução):

1. Use somente um nível de identação por método. Se você precisar mais do que um nível, você precisa criar um segundo método e chamá-lo a partir do primeiro. Esta é uma das mais importantes das restrições no exercício;

2. Não use a palavra reservada 'else'. Teste a condição com o 'if' e saia da rotina se não for satisfeito. Isto previne um encadeamento 'if-else'; e nenhuma rotina merece esta coisa;

3. Encapsule todas as primitivas e strings. Isto direciona diretamente para "obsessões primitivas". Se você quer usar um integer, você primeiro tem que criar uma classe (até mesmo uma classe interna) para identificação do verdadeiro papel. Portanto o endereço é um objeto e não um integer, por exemplo. Isto produz códigos mais claros e testáveis;

4. Use somente um ponto por linha. Este passo impede você de atingir profundamente em outros objetos para pegar campos ou metodos, e conceitualmente quebrar o encapsulamento. Exemplificando, não faça isso:
Order order = new Order(orderId);
string stateId = order.Customer.Address.StateId;
5. Não abrevie nomes. Isto evita a verbosidade processual que é criado por certas formas de redundância - se que você tem que digitar o nome completo de um método ou variável, é provável que você passa mais tempo pensando em seu nome. E você vai evitar objetos chamados Ordem com métodos intitulado shipOrder(). Em vez disso, seu código terá mais chamadas, como Order.ship().

6. Mantenha as entidades pequenas. Não escreva mais do que 50 linhas por classe e não mais do que 10 classes por pacote. A regra 50 linhas por classe é crucial. Isto não somente força a concisão e mantém o foco da classe, mas também mantém a maioria das classes visíveis em somente uma tela do editor/IDE.

7. Não use nenhuma classe em mais do que 2 variáveis instanciadas. Mais de duas instâncias de variáveis de uma mesma classe é certamente a razão para sub-agrupar essas variáveis em uma classe separada.

8. Use primeiramente classes de coleções. Em outras palavras, qualquer classe que contém uma coleção não deveria conter qualquer outra variável membro. A ideia é uma extensão da obsessão primitiva. Se você precisar que uma classe agrupe coleções, então a escreva desta forma.

9. Não use setters, getters or propriedades. Esta é uma abordagem radical para fazer cumprir o encapsulamento. Isto requer a implementação da abordagem de injeção de dependência e adesão máxima ao "Teel, don't ask" (definido em alguns lugares por "Mande, não peça").
Já o segundo post é uma apresentação de Ryan Davis, e eu acho interessante dividi-lo em 2 partes.

Na primeira o autor fala sobre machucar código, mas o que seria machucar código? Bom, basicamente seria modificar totalmente um código legado que tenha sido mau escrito. Imagine aquele código onde quem codificou gosta de complicar as coisas, escreve um código que somente ele entende, cria rotinas desnecessárias... Imagine agora que você passe a ter que cuidar desse código.

É nesse caso que autor prega que devemos machucar o código, reescrever tudo o que não está bem feito, mudar o design se preciso, em fim, melhorar o sistema de uma forma geral. Eu gostei desta filosofia, e a apoio. Pena existirem lugares onde você não tem liberdade para tal.

Já a segunda parte da apresentação fala sobre como se melhorar como programador, pregando basicamente a auto-disciplina para se manter focando no que é necessário fazer e abstenção de distrações que possam atrapalhar seu trabalho. Levando-se isso em conta, isso serve não só para programadores como para qualquer profissional.

Uma coisa muito importante que é mencionado nessa apresentação é que é necessário "entender a sim mesmo tão bem quanto se entender o código" para se chegar a um auto nível como desenvolvedor, e sugere que você se faça constantemente as seguintes perguntas:
  • Como eu faço melhor?
  • Como eu não vi aquele bug?
  • Onde eu estou perdendo em clareza?
  • Como eu posso usar melhor minhas ferramentas?
  • Onde eu desperdiço meu tempo?
  • Como eu me foco melhor?
  • Onde eu estou me segurando?
  • Onde eu estou errando?
Bom, existe muitas coisas importantes nessa apresentação, aqui a intenção foi dar somente um gostinho para vocês sentirem, e se gostarem não deixem de ver a apresentação.

22 Outubro 2008

Nova versão do Controle Financeiro

Após quase 1 mês e meio, volto aqui para informar que a nova versão do Controle Financeiro Pessoal já está disponível. O sistema é praticamente o mesmo, porém com uma interface diferente , na minha humilde opinião melhor que a versão anterior, mas ainda tem que melhorar muito. As mudanças nas funcionalidades são:
  • - Inicialmente são mostrados somente os lançamentos do mês atual;
  • - Abaixo da tabela de lançamentos há um seletor de mês que, ao ser alterado, busca os lançamentos do mês selecionado;
  • - Um filtro melhorado, mais prático de se usar e de desabilita.
Bom, como disse, as funcionalidades quase não se alteraram, ficando a novidade maior por parte da aparência nova. O objetivo agora é acertar uns pequenos detalhes que estão faltando, criar um pequeno help para explicar o funcionamento do sistema, e após isso acrescentar novas funcionalidades. Também tentarei refinar um pouco mais a interface, só que ainda to brigando um bocado com HTML e CSS...

Aos que tiverem interesse em visualizar como está o sistema, é só utilizar o usuário "convidado" e a senha "convite01". E aos que quiserem utilizar o sistema (ta certo, não esta muito "usável" ainda, mas já quebra um galho) é só enviar e-mail para tiago_stos at yahoo.com.br.

09 Setembro 2008

Mudança de arquitetura

Algumas notícias sobre o sistema Controle Financeiro Pessoal. Primeiro, agora temos um domínio próprio, www.perludum.com.br, o sistema podendo ser acessado no link www.perludum.com.br/cfp, o link anterior ainda esta ativo. A outra notícia é mais técnica, relacionado a arquitetura utilizada.

Sim, estou mudando totalmente a arquitetura do sistema, e com isso também toda a parte visual. Os motivos que me levaram a troca de arquitetura são:

  • - o modo de desenvolver páginas web com o GWT acaba gerando bastante trabalho para mudanças, tendo que compilar mesmo para alterações minúsculas na interface, já que tudo é código Java;
  • - não é muito fácil encontrar informações para resolver algumas dúvidas sobre desenvolvimento com GWT;
  • - estava procurando uma arquitetura onde pudesse ter uma produtividade melhor e fosse mais simples.
Com base nisso e em algumas pesquisas, a arquitetura escolhida foi o framework MVC Mentawai e a biblioteca JavaScript/Ajax JQuery. Com base com o que desenvolvi até agora com essa nova arquitetura, acredito que acertei na escolha.

O Mentawai se propõe ser um framework bem simples e fácil de se utilizar, sem a necessidade de muita configuração para faze-lo rodar, e nesse ponto ele cumpre muito bem o que promete. Porém, apesar de ter uma configuração simples, ele me parece ser um framework robusto e maduro. Não tenho parâmetros para compará-lo com outro framework, mas pelo que já vi dele estou adorando ;-)

O JQuery é a biblioteca JS que, segundo o que dizem, é a mais prática de se utilizar, por usar uma sintaxe mais limpa, além de ser bem leve. Porém por ser bem leve também é uma biblioteca básica, o que pode ser rapidamente resolvido utilizando plugins para as mais variadas finalidades.

O único problema dessa mudança de arquitetura é que os conceitos entre programar utilizando GWT e utilizando essa nova arquitetura (mais de acordo com o padrão de programação para web, acredito eu) é que, para quem só começou a se aventurar agora em desenvolvimento web, são completamente diferentes. Com GWT o desenvolvimento é bem mais parecido com a programação para desktop, talvez isso explique ele ter sido minha primeira opção quando resolvi desenvolver para web. Mas foi muito bom ter iniciado com o GTW, assim pude assimilar alguns conceitos de programação para web mais facilmente.

Por hora estou desenvolvendo essa nova versão do sistema. Acredito que até o final da semana que vem devo ter algo para mostrar.

22 Agosto 2008

Disponibilização do sistema Controle Financeiro Pessoal

Este post é para informar que o Controle Financeiro Pessoal esta disponível em http://tiagosantos.nasua.net/cfp/ para quem quiser ver como esta. O usuário disponível é "testando" e a senha é "1234" (sem aspas, claro :). Porém essa localização é temporária, e por hora o sistema é só para testes mesmo, mas se alguém tiver interesse em testar mais a fundo, é só se manifestar nos comentários.

Ainda existem muitas melhorias a serem feitas para que o sistema fique "usável", e seria bem interessante receber feedback sobre o que já esta pronto, sobre melhorias necessárias e sobre recursos desejáveis.

01 Agosto 2008

Controle Financeiro Pessoal

Conforme postei a algum tempo (aqui e aqui), dei início a um projeto chamado Controle Financeiro Pessoal, que visa ser um sistema para controle de finanças pessoais, como se fosse um simples fluxo de caixa. Já existe alguma coisa pronta, bem básico mas utilizável.

Como dito, é um sistema Web, porém das ferramentas e frameworks que pretendia utilizar inicialmente só restou o Hibernate. Estou utilizando basicamente o GWT com Hibernate no projeto, já que foi a forma mais simples para mim, que nunca havia programado para Web, começar o desenvolvimento deste pequeno projeto.

O que esta pronto no sistema atualmente é o login e adição/alteração/exclusão de lançamentos. Tudo bem básico ainda, porém pretendo melhorar bem mais o sistema. Os próximos passos serão:

- Melhoria na interface principal do programa;
- Desenvolvimento de consultas para visualização na tela;
- Repetição de lançamentos, para despesas/receitas que existentes em vários meses;
- Cadastro de usuário (atualmente é feito diretamente na base de dados).

Essas são as melhorias que, acredito eu, sejam as mais urgentes a serem feitas, mas tenho planos maiores para o sistema.

Um problema que estou tendo é o de encontrar uma hospedagem que seja barata e boa. Tentei a www.hosted.com.br que oferece hospedagem JSP por pouco mais de R$ 13,00, porém não se demonstrou muito útil já que não consegui colocar o sistema para rodar lá, e também o suporte da hosted se negou a me dar qualquer ajuda sobre o assunto. Ainda não cancelei o plano da hosted, ficarei até o final do mês, q esta pago... Até lá pretendo fazer ainda algumas tentativas para rodar o sistema na hosted. Se alguém tiver alguma informação sobre como colocar o sistema para rodar na hosted, ficarei grato se fosse me passado.

26 Junho 2008

Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!

…e também a pen drives, card drives, camisetas geeks, livros e mais! O BR-Linux e o Efetividade lançaram uma campanha para ajudar a Wikimedia Foundation e outros mantenedores de projetos que usamos no dia-a-dia on-line. Se você puder doar diretamente, ou contribuir de outra forma, são sempre melhores opções. Mas se não puder, veja as regras da promoção e participe - quanto mais divulgação, maior será a doação do BR-Linux e do Efetividade, e você ainda concorre a diversos brindes!

29 Maio 2008

Ensino e mercado de trabalho

O link abaixo é sobre uma pesquisa realizada sobre demanda de mão de obra e qualidade ensino. Algumas das coisas que a pesquisa fala eu comentei aqui, outras completam o assunto. Leitura muito interessante.

http://www.inovacaotecnologica.com.br/noticias/noticia.php?artigo=pesquisa-mostra-que--apagao-de-engenheiros--e-iminente

27 Maio 2008

Rede Social Acadêmica

Hoje acabei tendo uma ideia um tanto quanto interessante. Depois de uma conversa com minha namorada sobre a faculdade EAD que ela cursa, juntando a experiência (não muito boa) que estou tendo na faculdade presencial e o post que escrevi sobre inovação na educação pensei: "Por que não fazer uma rede social voltada para fins acadêmicos?". Hoje em dia existem redes sociais para quase todas as finalidades, desde redes para pessoas que se gostam muito até para pessoas que se odeiam. A maioria dessas redes são utilizadas para fins inúteis, somente perda de tempo.

A princípio havia pensado apenas em um sistema para ensino que possibilitasse a iteração remota entre alunos e professores, isso totalmente em tempo real. Seria algo para vencer as barreiras das distâncias geográficas, sem ser aquela chatice que se vê em alguns cursos EAD, onde o professor fica em um telão explicando a matéria e a única iteração se da na forma de um chat, nada prático quando se esta em curso. Acho que se pode ir além. O ideal seria essa iteração ser por voz. Uma vídeo conferência com voz seria o ideal, onde os alunos pudessem conversar em tempo real com o professor e também com demais alunos. Tecnologia para isso existe... Você pode pensar "isso seria ótimo mesmo para cursos EAD", mas eu digo que cursos presenciais podem se beneficiar muito disso.

Imagine o seguinte cenário, pegando como exemplo o curso de ciência da computação: existem matérias que todo aluno deve cursar, porém algumas matérias são mais específicas, matérias que direcionam os alunos para certas áreas da informática (desenvolvimento, infra-estrutura, banco de dados, gestão...). Na minha opinião deveríamos poder escolher quais matérias cursar, porém para uma universidade dar essa escolha para o aluno ficaria inviável. E é aqui que entra o sistema citado acima. A universidade matéria cada matéria centrada em uma unidade (caso a universidade em questão tenha várias unidades), transferindo as aulas via vídeo conferencia. Sim, teria um gasto com isso, porém menor do que manter professores extras.

Essa foi a primeira parte da ideia que tive. Talvez ela não seja tão boa quanto pensei que fosse, e talvez eu não tenha conseguido descrever ela tão bem quanto a forma com a qual eu desenvolvi ela em minha cabeça. Porém a ideia evoluiu, e junto com ela evoluiu a complexidade. E aqui entra a parte de rede social acadêmica. E aqui novamente eu talvez não consiga detalhar tão bem como a forma que imaginei.

Do início desse século até agora vimos a tecnologia evoluir e se transformar muito, e muito rapidamente, e notamos isso principalmente quando olhamos para a Internet. Redes sociais foram criadas e se multiplicaram como coelhos, apareceu a Web 2.0 e as novas formas de compartilhamento da informação, a cada dia aumenta o número de pessoas que acessam a Internet... Enfim, aparentemente tudo gira em torno da Internet hoje em dia, porém a educação, algo tão importante, esta ficando de fora dessa evolução. Apesar da Internet ser um ótimo meio de pesquisa, quase todo conhecimento humano estar disponibilizado espalhado por sites, a evolução da tecnologia e da Internet ainda não atingiu a educação de forma satisfatória. Sei que existem empresas empenhadas em informatizar a educação, criar meios transmissão de conhecimento, aperfeiçoar aulas a distâncias, mas ainda não vi nada que use toda essa tecnologia apresentada hoje na Internet.

A minha imagem de uma rede social acadêmica englobaria (basicamente):
  • Aulas em vídeo conferência;

  • Iteração direta entre aluno, professor e demais alunos;
  • Aulas armazenadas para consulta posterior em uma área de vídeos;
  • Podcasts sobre aulas, matérias, assuntos disponibilizados tanto pelos professores quanto por alunos;
  • Listas de discussão e fóruns;
E o que temos disponível, em se tratando de tecnologia, par se construir tal rede social? Bom, vejamos:
  • Redes sociais por si só são iguais a mato, todo lugar tem;
  • Para aulas em vídeo conferência poderia ser utilizado algo como o Yahoo! Live;
  • Armazenamento de vídeos: You Tube;
  • Podcast: se vídeo não é problema, som também não é problema;
  • Lista de discussão e fórum: Google Groups, Yahoo Grupos;
Bom, esse é só um pequeno exemplo para mostrar que tecnologia par tal rede existe. Talvez algumas coisas precisem ser melhoradas em muito, como vídeo conferencia, mas acredito que o maior desafio esteja mesmo em integrar todas essas tecnologias.

Como disse, não consegui descrever tudo o que imaginei sobre o assunto. Na verdade o que escrevi é somente uma pequena fração, e a cada linha que escrevo a ideia cresce mais. Mas por hora eu fico por aqui.