João Emilio Dambroz. Tecnologia do Blogger.

Vencendo a Inércia

quinta-feira, 17 de outubro de 2013



Apenas se destaca na multidão indivíduos que através de suas ações e iniciativas transformam intenções em realidade, afinal de boas intenções o mundo está cheio.

Com a disseminação da informação através de diversos canais, e as origens destas informações sendo cada vez mais distinta, as pessoas tem começado a filtrar as informações que lhes é interessante, lapidando cada vez mais seus conceitos e sentimentos com relação a tudo que diz respeito ao seu modelo de mundo. O resultado disso é um senso critico cada vez mais apurado sem muito espaço para um meio termo entre o bom e o ruim. Se é bom você compartilha, dissemina, apóia, incentiva. Se não é você critica, desencoraja, repudia ou simplesmente ignora.
Porem o que fazer quando você percebe o problema em sua situação atual, mês após mês, convivendo com os problemas. Descontentamento com seu estilo de vida ou aparência, problemas ou interesses conflitantes em ambiente corporativo, incapacidade de alcançar suas metas e projetos pessoais. Pense em tudo o que foi feito neste ultimo ano. Agora responda a si mesmo qual foi o legado gerado? seja patrimonial, social, cultural, intelectual. Você esta feliz com isso? você atingiu suas metas para este ano que passou? Se você esta descontente com alguma das respostas que pensou para estes questionamentos você pode estar na inercia!

Segundo o wikipédia, "todos os corpos são preguiçosos e não desejam modificar seu estado de movimento: se estão em movimento, querem continuar em movimento; se estão parados, não desejam mover-se. Essa preguiça é chamada pelos físicos de Inércia e é característica de todos os corpos dotados de massa."

Em "A startup de $100" Chris Guillebeau faz referencia ao termo da seguinte forma: "Mais do que a concorrência ou outros fatores externos, a maior batalha é contra o seu próprio medo e inércia. Felizmente, isso também significa que temos o mais absoluto controle sobre esses fatores."

Realize seus sonhos, faça o que lhe da felicidade, mantenha contato com pessoas positivas e motivadoras, se afaste de pessoas negativas e que repudiam seus ideais, se mantenha informado, interaja com a sociedade, conheça outras culturas, tenha uma pessoa como referencia de sucesso, construa um legado maior que o desta pessoa, faça todo dia algo diferente, viva como se fosse morrer amanha.
Reveja seus conceitos, se mantenha consciente, pense se você realmente esta consciente e feliz ou se você não esta na mesma rotina a um bom tempo descontente e com respostas prontas para cada frase deste artigo.
Quando estiver descontente, mude, agite as coisas, busque mudança, tome as rédeas sobre a situação. Você é o responsável pelo seu sucesso ou infelicidade. Nunca é tarde para mudar e nem pense em arranjar desculpas para não mudar.

O que torna um sonho irrealizável é a inércia do sonhador

Java heap space, Profiler e Memory Leak

segunda-feira, 8 de julho de 2013

Memory Leak

Ou ainda vazamento de memória, é um fenômeno que acontece quando a memória alocada por algumas variáveis dentro do sistema não é liberada após sua utilização. Este problema é muito comum em sistemas em java que possuem más implementações de lists e hashmaps. Certamente com o tempo uma aplicação com este problema trará inviabilidade para o produto pois o mesmo terá uma longevidade reduzida por conta do erro de memória.

Profiler

São aplicações desenvolvidas com a finalidade de monitorar a utilização de recursos de infra-estrutura por parte das aplicações que estão operando em determinada estação. Por meio desta aplicação salvadora no meio arquitetural, é possível identificar em quais pontos do sistema é mais utilizada a memória, ou a capacidade de processamento, ou ainda a leitura de dados em disco.
É crucial o entendimento destes dois termos que mencionei acima, pois em função de memory leaks, e profilers, eu acabei resolvendo um dos problemas mais importantes que tive nestes últimos tempos.

Java heap space

Em certo momento, durante o desenvolvimento de uma aplicação em java, que já estava sendo testada em produção, me deparei com a seguinte situação: durante a apresentação de aceitação do cliente, em uma reunião que aconteceu duas semanas apos a utilização do sistema, fomos surpreendido por uma exceção  de ‘java heap space’  e na seqüência a aplicação deixou de responder. O produto de fato atendia muito bem ao cliente, logo a nossa única opção era, encontrar o problema a qualquer custo.
Fui alocado nesta tarefa que não só tomou meu tempo em corrigir os problemas na aplicação em horário de trabalho como em buscar novas formas de desvendar problemas de memória durante as madrugadas em que perdi o sono.
Deixei um sistema de profiler executando em ambiente de desenvolvimento com vários usuários utilizando para conseguir simular o ambiente de produção, este foi o primeiro passo para encontrar em qual funcionalidade do sistema estava o vazamento de memória. Quanto mais perto eu ficava do local onde ocorria o vazamento de memória parecia que mais longe eu ficava da solução, as classes onde ocorria o erro certamente eram as mais complexas do sistema, uma utilização genérica de classes e atributos em combinação com HQL dinâmica e views, não tive escolha se não descobrir para que servia cada linha de código. Foram nada menos do que três semanas full time analisando o código e debugando com o profiler.
Isso ajudou muito na refatoração do sistema, hoje o código esta muito bem documentado e qualquer um pode dar manutenção ou incluir novas funcionalidades, infelizmente não serviu para que eu pudesse encontrar o vazamento de memória.
A luta continuou por mais duas semanas onde eu havia deixado de lado a parte de back-end e partido para o front onde eu estava certo de que o erro ocorria. Identifiquei que o algoritmo que era utilizado naquela lógica obscura gerava um TreeNode, uma espécie de hash map do PrimeFaces responsável por fazer a ponte entre o java e o jsf. Este era utilizado como resultado de uma consulta de tree view que era exibido em tela.
O problema acontecia pois após gerar o TreeNode e mostrar em tela, a aplicação continuava referenciando os dados do TreeNode naquela variável. Assim toda vez que esta consulta era executada uma nova variável era criada e esta instanciava o resultado de uma nova consulta. Ai fica minha dica, se você utiliza o Primefaces cuidado com a utilização do TreeNode, até hoje não encontrei uma solução elegante para o problema, o pessoal do Primefaces também não
se pronunciou quanto ao assunto.
A solução encontrada foi utilizando a anotação @finalize em um método e atribuindo a variável do TreeNode como null, assim sempre que o usuário encerrasse a sessão a variável voltava a ser nula e a memória da aplicação voltava ao normal.

O detalhe é que no desenvolvimento desta aplicação o framework utilizado não tinha suporte aos componentes do Primefaces e nem mesmo as injeções de dependência do CDI, logo alem de me preocupar com o problema da aplicação, também tinha que pisar em ovos com as soluções que eram adotadas na aplicação para que o restante continuasse funcionando.

TDD – Test Driven Development

sábado, 6 de julho de 2013


O conceito do TDD prega que antes do desenvolvimento de qualquer algoritmo do seu sistema, seja efetuado uma carga de scripts de testes unitários para garantir que a solução solicitada pela aplicação tenha sido de fato implementada de forma a atender qualquer situação.programadores  programador avolvimentoe nforma possinta
Nos sistemas tradicionais, e até por questões culturais, a grande maioria dos profissionais responsáveis pelo desenvolvimento destes algoritmos deixa para efetuar seus testes após o desenvolvimento da solução, pior que isso algumas vez sem nem mesmo desenvolver os testes unitários, e ainda pode piorar, em algumas ocasiões nem mesmo fazendo testes básicos e de sintaxe, quebrando assim o build da aplicação.
Recentemente fui alocado em um grande projeto no qual tive experiência com grande parte das situações que levantei acima. No inicio do projeto a equipe num todo foi muito imatura, o ambiente e o projeto ao qual estávamos inseridos possuía constante mudança as quais tínhamos que nos adaptar, e isso resultou na não utilização desta pratica. Nesta ocasião após o sistema pronto foi iniciado um refactoring que contou com a implementação de testes para garantir a integridade do sistema durante o seu continuo ciclo de vida e versionamento.
Após esta experiência estava entrando em outro projeto, este de pequeno porte onde busquei estudar mais a fundo os conceitos do TDD e mudar minha forma de desenvolver. Foi sensacional!
Eu não precisava mais fazer deploy, subir a aplicação, simular aquela situação que tinha acabado de implementar, corrigir o erro, e iniciar o processo de deploy/aplicação todo novamente. Tudo isso já tinha sido feito antes mesmo de eu ter desenvolvido o algoritmo, e testado script a script durante o deploy da aplicação.

Tivemos perdas significativas em tempo de desenvolvimento, em especial nas primeiras semanas durante a adaptação porem o resultado valeu cada minuto investido nesta pratica. As informações disponibilizadas pelo sistema desenvolvido utilizando TDD são integras e muito precisas, e isso se da ao fato de o desenvolvedor ser forçado a imaginar todas as possíveis entrada de dados do seu método e em ambientes distintos antes de implementar a solução. Isso faz com que não saiam testes ‘viciados’ do sistema, testes óbvios em que o desenvolvedor se certificou de acertar o retorno.

Implementando hook script no redmine

terça-feira, 2 de julho de 2013

Redmine

O redmine é uma aplicação web de representação visual de projetos e seus deadlines. O código foi escrito inicialmente por Jean Philippe em Ruby on Rails e é mantido pela comunidade com código aberto.. Alem diso todo o sistema é multiplataforma e integra muito bem com SVN Git e Mercurial.

HookScript

HookScript são como 'gatihos' em aberto dentro da aplicação que possibilitam alterar um comportamento default, ou até mesmo fazer implementações de regras, chamada de web services, alteração de mensagens ou leiaute.

O problema

A algumas semanas tivemos a necessidade de integrar o redmine com outro departamento que utiliza um sistema chamado kayako fusion, depois de muita pesquisa acabamos convencidos de que a solução ainda não existia e teríamos que fazer esta ponte, tínhamos uma equipe muito forte em Java porem o Kayako Fusion foi desenvolvido em php, e como já falei o redmine em ruby, logo não tínhamos muito conhecimento do potencial das ferramentas que tínhamos em mãos.
Durante o processo de desenvolvimento a equipe estava muito interligada, todos sabiam de suas responsabilidades e onde queríamos chegar, o processo estava muito bem definido por parte da analise. Utilizamos a Arquitetura ESB com um barramento onde fizemos toda a manipulação de dados e implementamos as business rules. Nossa maior dificuldade ficou por conta dos hooks do redmine que faziam a ponte com o barramento. Como tive muita dificuldade em encontrar material para estudar o assunto, vou repassar o conhecimento e explicar melhor como desenvolvi a solução.

Solução

Criar o arquivo init.rb dentro do seguinte endereço (./redmine). Ele define que o redmine será executado com um plugin que aqui chamamos de "custom_hooks". Tem um exemplo pronto do arquivo no site do redmine.

Criar o arquivo hooks.rb dentro do seguinte endereço (./redmine/lib/custom_hooks) O arquivo hooks.rb define quais são os hooks existentes no nosso plugin, onde devem ser chamados, onde estão localizados dentro dos arquivos do redmine e quais os parâmetros de contexto.

Criar o arquivo com a implementação do hook dentro do seguinte endereço(./redmine/app/controllers/hooks/custom_hooks), aqui vale lembrar que a pasta controllers se refere somente a hooks de controle, para o redmine é possível implementar hooks nas três camadas do MVC, para mais detalhes acesse http://www.redmine.org/projects/redmine/wiki/Hooks

Criar um backup do arquivo Gemfile.lock(esta dentro do diretório redmine)

O arquivo Gemfile é onde são definidas as gem(são como libs no java) que serão utilizadas pela aplicação. Sempre que houver uma modificação neste arquivo deve ser executado o comando bundle install para que as gems sejam atualizadas. Ao executar este comando ele ira gerar o arquivo gemfile.lock que é como se fosse um ponteiro das gems para a aplicação.

Lean na oncast

domingo, 30 de junho de 2013

Lean na oncast



Olá pessoal, durante o TDC2013 em Floripa o Samuel havia feito esta mesma palestra sobre lean na trilha stadium de agile, sensacional o case da oncast e o produto em SinglePage.
Não encontrei a versão em português, e não ia mudar muita coisa já que foi a mesma apresentação..
A palestra foi muito bacana pois ele expõe como se deve adaptar as soluções ágeis ao seu ambiente e as suas necessidade. Como a interação, o foco e a comunicação entre todos os integrantes do projeto é crucial para a entrega de um produto de qualidade.
As premissas também me chamaram muita atenção já que na sua maioria não são voltadas a área de negócio e sim ao modelo do negócio. Na visão inicial da equipe o sistema deveria ser simples, de fácil utilização, arquiteturalmente elegante e ai sim totalmente funcional, assim todos os pontos foram tratados com igual importância.
Vejo pessoas reclamando dos processos burocráticos existente em suas empresas, que acabam extrapolando prazos de entrega, as vezes nem mesmo sabendo qual o motivo de tantos documentos e procedimentos, criticando o manifesto agile e fechando os olhos pra soluções já consagradas internacionalmente. Não seria hora de realmente abraçar a causa? Questionar-se qual a necessidade de tais documento e procedimentos e fazer uma limpa em tudo o que não é realmente útil ao processo de criação de um produto.

New features iOS7

sábado, 29 de junho de 2013


New features iOS7
Vai ser difícil distinguir quem tem cacuete de um MacFag..
Depois do polemico designe do MacPro, vulgo formato lixeiro de escritório, a Apple ataca novamente..
Piadas a parte quero salientar já no inicio deste post que admiro a iniciativa para pessoas com dificuldades motoras, porem para um usuário comum o recurso é sim inútil!
Conversava a algumas semanas com alguns amigos utilizadores de Smartphone Galaxy sobre como os recursos de 'Acessibilidade' disponibilizados pela Samsung tornaram o aparelho inferior performaticamente. O resultado não podia ser outro, grande parte atualmente está utilizando a versão pura do android.
Onde eu quero chegar com essa conversa?
Não estariam a grandiosa de SiliconValley Apple, e a Sul Coreana Samsung se desvirtuando de seu publico alvo?
Atualmente sou usuário android, e apenas sou pois a evolução do produto realmente me agrega valor a cada nova versão, será que este mesmo sentimento é partilhado pelos serviços disponibilizados pela Samsung e Apple? Antes de responder pense novamente sobre o que de novo você tem utilizado da sua ultima atualização.

Já dizia Jobs,
"we've always been shameless about? stealing"
"good artist copy, great artists steal"

Em um mundo cada vez mais monetizado e capitalista a criatividade tem sido ofuscada ou no minimo mal canalizada. Onde estão as ideias inovadoras com grandes slogans de 'make the difference' dos grandes players do mercado.
Sabe o que me parece? Falta de renovação..
 

Compartilhe

twitter facebook orkut linkedin email

Most Reading