Já tive algumas experiências um pouco atordoantes com relação a performance de Software e conforme estudamos sobre o assunto descobrimos que é muito difícil chegar a performance ideal, principalmente quando temos um "time" trabalhando no mesmo produto(software), mas como fazer com que seu software tenha uma performance aceitável?
Pare e pense quais são as opções, qual o custo-benefício de cada uma delas?
Imagine em seu caso o que será melhor?
Alguns pontos que podem fazer diferença para que seu software tenha performance são:
Otimização utilização de Memória
A utilização da memória pode ser uma questão bastante importante quando se necessita processar grandes massas de dados, pois a cada iteração podemos estar criando áreas na memória sem necessidade.
Criação de objetos, variáveis e iterações(linha de código) sem necessidade são as maiores causas da queda de performance.
Como por exemplo geração de "Log" do processamento, qual o custo benefício de deixar algumas linhas de código que escrevem em um arquivo, event log, banco, etc. será que um simples tratamento de erro não faça a captura das informações necessárias para a solução de um problema.
Utilização de "string", para cada "" ou "texto" referenciado em código é criada uma área na memória para armazenar a informação referenciada, por isso é importante usar o string.Empty ele é uma área única na memória que tem o valor "", com isso nenhuma área desnecessária será criada na memória. Outra questão é a concatenação dos textos, algumas linguagens oferecem opções de concatenação mais eficientes do que um simples (+), como no .NET a classe StringBuilder.
Remover todos os objetos e variáveis alocados em memória que não serão mais utilizados, com linguagens não gerenciadas isto soa como um pré-requisito, mas ainda assim existem muitos programas que deixam a memória alocada. Já com o código gerenciado a maioria dos desenvolvedores não se preocupam com isto, por que a máquina virtual possui uma ferramenta denominada como "Coletor de Lixo", esta ferramenta de em determinado período de tempo, vasculha a área da memória que é de sua responsabilidade e avalia se existem objetos/variáveis que podem ser removidos da memória, o grande problema nisto é que quando temos softwares para tratar muitos dados em sequência este tempo pode não ser suficiente para liberar o espaço na memória e é ai onde podemos obter grandes ganhos na performance, e por este motivo devemos forçar com que este espaço seja removido da memória.
A sequência de carregamento dos dados pode ser importante também, como por exemplo carregar uma árvore de informações, porém somente os primeiros itens da árvore aparecerão e de acordo com as iterações do usuário carrego os itens filhos. Para apoiar este conceito, na Web existe uma técnica de desenvolvimento denominada "AJAX" que é a junção de determinadas tecnologias para que as informações transmitidas sejam menores e carregadas de acordo com a necessidade.
Boas práticas de desenvolvimento(Design Patern)
Algumas boas práticas de desenvolvimento também podem ser utilizadas para ganhar performance.
Infelizmente o assunto é bastante extenso, mas com o tempo vou tentar abordar algumas das boas práticas aqui no blog, mas enquanto isso segue um link
http://pt.wikipedia.org/wiki/Padr%C3%B5es_de_projeto_de_software
Reutilização de código
A reutilização de código não reduz apenas as linhas de código no programa, também reduz o tamanho dos executáveis gerados, fazendo com que seu programa fique mais leve para ser carregado na memoria.
Conclusão
A performance de software pode ser obtida de várias maneiras, porém o ideal é avaliar os benefícios de cada opção para a sua situação.
Blog com informações de qualidade, baseado na Tecnologia de informação e no que ela agrega nas empresas e outras áreas de negócios.
5 de abr. de 2009
21 de ago. de 2008
Bug no Sistema da Anatel
Hoje falando com meu amigo Diego Plentz descobri que ele havia achado um Bug muito básico, porém extremamente perigoso no site da Anatel.
Esse bug é o seguinte eu consigo entrar no sistema de Ordem de Serviço deles, pegar informações pessoais de usuários como telefones, e-mails, dentre outras informações, assim como abrir nova ordem de serviço, como fazer isso? Muito simples bastava pegar o CPF e o e-mail do usuário que solicitou o chamado para a Anatel... mas como fazer isso? Bastava pegar essa URL: http://sistemas.anatel.gov.br/focus/FaleConosco/MostrarDetalheSolicitacao.asp?idtSolicitacao=7094111 sendo que o idSolicitacao é sequencial, ou seja, se eu continuar colocando outros números, vou pegar ordem de serviços de outras pessoas...
Uma falha grave, aparentemente a Anatel colocou em manutenção este sistema.
Caso queira visualizar a reclamação, leia o blog do Diego ou veja no GUJ a notícia.
Como nosso amigo Kumpera disse em seu blog sobre esse Bug:
Segurança como essa é inadmissivel para um órgão governamental. Isso é ridículo, é um afronte a nossa privacidade. Os amadores que fizeram esse sistema ignoraram todas regras básicas de segurança que qualquer desenvolvedor safo tem a obrigação de saber. Anatel, corrija isso com urgência e tome as devidas medidas administrativas para esse tipo de desastre não ocorra novamente. Por favor, a todos que lerem este texto, liguem já para a Anatel no 0800 33 2001, registrem uma reclamação formal e divulguem esse problema para o quanto antes ser solucionado.
Vejam: Java Anywhere e Blog do Diego Plentz e do Rodrigo Kumpera
Esse bug é o seguinte eu consigo entrar no sistema de Ordem de Serviço deles, pegar informações pessoais de usuários como telefones, e-mails, dentre outras informações, assim como abrir nova ordem de serviço, como fazer isso? Muito simples bastava pegar o CPF e o e-mail do usuário que solicitou o chamado para a Anatel... mas como fazer isso? Bastava pegar essa URL: http://sistemas.anatel.gov.br/focus/FaleConosco/MostrarDetalheSolicitacao.asp?idtSolicitacao=7094111 sendo que o idSolicitacao é sequencial, ou seja, se eu continuar colocando outros números, vou pegar ordem de serviços de outras pessoas...
Uma falha grave, aparentemente a Anatel colocou em manutenção este sistema.
Caso queira visualizar a reclamação, leia o blog do Diego ou veja no GUJ a notícia.
Como nosso amigo Kumpera disse em seu blog sobre esse Bug:
Segurança como essa é inadmissivel para um órgão governamental. Isso é ridículo, é um afronte a nossa privacidade. Os amadores que fizeram esse sistema ignoraram todas regras básicas de segurança que qualquer desenvolvedor safo tem a obrigação de saber. Anatel, corrija isso com urgência e tome as devidas medidas administrativas para esse tipo de desastre não ocorra novamente. Por favor, a todos que lerem este texto, liguem já para a Anatel no 0800 33 2001, registrem uma reclamação formal e divulguem esse problema para o quanto antes ser solucionado.
Vejam: Java Anywhere e Blog do Diego Plentz e do Rodrigo Kumpera
27 de mai. de 2008
Bug no Calc - Open Office
A Planilha de Cálculo do Open Office (Calc) que seria o Excel da M$ tem um Bug bem chatinho, primeiramente porque quando tenho 2 tabelas uma na Planilha 1 e outra na Planilha dois ele não entende como aplicar o auto-filtro nelas.
Experimentem: Criem uma planilha qualquer com um titulo e alguns valores na planilha 1, depois crie uma tabela na planilha 2, apliquem o auto-filtro na tabela da primeira planilha, vá para a segunda planilha e aplique o auto-filtro nela também, você verá que o auto-filtro da primeira planilha (que não tem ligação nenhuma com a segunda) desapareceu.
Experimentem: Criem uma planilha qualquer com um titulo e alguns valores na planilha 1, depois crie uma tabela na planilha 2, apliquem o auto-filtro na tabela da primeira planilha, vá para a segunda planilha e aplique o auto-filtro nela também, você verá que o auto-filtro da primeira planilha (que não tem ligação nenhuma com a segunda) desapareceu.
21 de mai. de 2008
Como preencher o JCP.
Coloquei em meu blog o Java Anywhere como faz para ficar membro do Java Community Process.
Muito interessante para quem tem vontade de ajudar no desenvolvimento Java.
Muito interessante para quem tem vontade de ajudar no desenvolvimento Java.
29 de jan. de 2008
Decisões
Hoje o desenvolvimento de software esta bem evoluído, temos muitos frameworks, padrões, metodologias, entre muitas outras ferramentas que visão a produtividade e a qualidade do desenvolvimento de software.
Mas com tantas opções qual devo escolher para desenvolver meu projeto?Qual é a melhor?
Mas com tantas opções qual devo escolher para desenvolver meu projeto?Qual é a melhor?
Infelizmente não existe a melhor!
Nem tudo deve ser seguido pela emoção, em alguns casos, em sua maioria, nos que envolvem dinheiro, devemos seguir a razão.
Mas isso eu tenho certeza que você já deve saber.
Então vamos nos avaliar!
Perguntas que precisamos responder para saber nosso tipo de perfil:
1. Quando aprendo uma nova tecnologia e estou envolvido em um projeto em andamento, e vejo que esta nova tecnologia é aplicável ao projeto, minha tendência é utilizar a tecnologia que aprendi?
2. Minha tendência é acatar as opções que já tenho experiência, mesmo que seja mais complicado e trabalhoso que outras opções?
3. Mesmo sabendo que algo já esta desenvolvido, acredito que devo fazer as coisas da minha forma, pois será mais fácil se um dia necessitar de uma manutenção, ou alteração?
4. Não peço apoio e nem opiniões de outras pessoas?
Enfim existem mais algumas perguntas que precisam ser elaboradas, mas estas aqui já conseguem, chegar a alguns dos pontos que fazem com que a decisão possa vir a ser objetiva e clara.
Esses pontos em questão, são a base para uma boa escolha, como uma gangorra, se pender para a emoção, podemos ter um abismo em nossos pés, mas também pode ser, em casos raros, que iremos parar em um chão duro. Se caso a gangorra pender para o lado da razão teremos a certeza de uma base sólida.Como é abstraido na figura abaixo.

O lado da razão é sempre o mais correto, a razão é construída pela consciência de certos riscos e habilidades.
Portanto para termos razão, é preciso conhecer bem daquilo que iremos analisar para decidir.
Na questão 1, pergunto pelo ponto do entusiasmo, geralmente, quando aprendemos algo novo, ficamos entusiasmados para ver na prática, mas o projeto que esta em andamento esta quase que totalmente pronto ou esta bem definido, deve-se avaliar, deixando de lado o fato de "simplesmente inovar" o sistema, por que as vezes tentando inovar podemos acabar comprometendo a arquitetura e a padronização do sistema.
Na questão 2, muitas pessoas tendem a usar aquilo que já conhecem ou que já tem experiência, isto é típico de uma pessoa conservadora, a maior parte das vezes devemos estudar entes de tomar uma decisão, para conhecer o novo, ou conhecer o outro lado da moeda.
Na 3, esta é a visão do descrente, não se esqueça que assim como você outras pessoas podem ter pensado e feito algo, bastante parecido, ou que atenda as suas necessidades, olhe pelo lado do custo de seu tempo, veja se vale a pena gastar mais tempo do que você tem, ou que você quer.
A última pegunta é para as pessoas que, não acreditam que outras possam ter boas idéias, ou tem medo de perder seu posto para aqueles que tem outras idéias. Não se esqueça, que se você esta em uma posição de tomar decisões, isto automaticamente, implica que, pedir opiniões de outras pessoas, principalmente de seus liderados, irá ajudar a sua vida e a vida da pessoa que lhe deu a idéia.
A razão é um bom senso entre o pessoal e o profissional.
Vamos supor que teremos, a opção de desenvolver um sistema Web, em Java ou em .NET, no caso deve-se haver um estudo para o caso, se o sistema necessitar de alta produtividade, pode ser que o .NET seja a melhor opção, mas se precisamos de baixo custo, temos Ferramentas de desenvolvimento Open Source/Freeware, para Java, na verdade (e aqui vai a palavra mágica da boa análise) depende, são algumas variáveis que vão fazer com que algum caminho seja seguido ou não.
E exatamente por pender mais para o lado da emoção que várias guerras são cravadas, como por exemplo:
- Linux X Windows
- Java X .NET
- Microsoft X Sun
- Google X MSN Search
- entre muitas outras, que nem chegam a ser da área de TI.
Conclusão do Autor
Não apenas estude, mas estude com consciência, não apenas critique, mas critique com a certeza.
Avalie bem todos os artigos que são escritos, pois um artigo é uma opinião de um autor. A expressão de uma opinião que nem sempre pode ser a mais indicada ou menos indicada.
Construa seus próprios conceitos, e tente quebrá-los para sempre se ter um aperfeiçoamento do conhecimento.
Caso não concorde comigo, não fique aflito, esta é apenas a minha opinião.
Marcadores:
Arquitetura,
Empreendedorismo,
Ferramentas,
Metodologia
24 de jan. de 2008
Para iniciar
Este blog foi criado para apresentar opniões e experiências de desenvolvedores de várias tecnologias e várias outras áreas como gerencia de projetos, arquitetura de sistemas, engenharia de software, entre outros.
Aqui você irá encontrar um conteúdo selecionado de vários profissionais, e com uma grande variedade de assuntos.
Aqui você irá encontrar um conteúdo selecionado de vários profissionais, e com uma grande variedade de assuntos.
Seja bem
vindo!
Assinar:
Postagens (Atom)