Mostrando postagens com marcador Arquitetura. Mostrar todas as postagens
Mostrando postagens com marcador Arquitetura. Mostrar todas as postagens

3 de mar. de 2010

jQuery

Eu sei que este assunto já esta batido, mas acho interessante ressaltar alguns pontos.
Nos últimos anos o jQuery tem sido bastante utilizado por várias empresas. Mas o que o jQuery tem de diferente os outros Frameworks de desenvolvimento javascript? Por que o jQuery esta cada vez mais popular no mercado?

Introdução
A versão mais antiga do jQuery que consta no site oficial da comunidade (http://jquery.com/) data de 28 de agosto de 2006, uma época marcada por inúmeras atualizações e lançamento de navegadores no mercado, onde o padrão para nome de funções de javascript não eram seguidos e não possuíam nenhum padrão definido, e até os dias de hoje não possuem. Porém com o jQuery se torna mais fácil criar algoritmos e utilizar recursos com maior potencial de compatibilidade entre os browsers do mercado (conceito popularmente conhecido como cross-browser).

Esta biblioteca teve inicio com a idéia de selecionar objetos pelo seu estilo, ou nome, e então em agosto de 2005 John Resig escreveu um simples e maravilhoso artigo sobre Seletores o "Selectors in Javascript" (http://ejohn.org/blog/selectors-in-javascript/), e então em janeiro de 2006 o jQuery é apresentado na BarCampNYC, mas ainda como uma promessa de ser uma grandiosa ferramenta para os desbravadores da Web.

Então em agosto de 2006 a primeira versão estável é lançada na web, e nesse momento o sucesso é inevitável por ser uma biblioteca tão bem planejada, elaborada e documentada, começa a ser bastante utilizada por desenvolvedores, e logo na sequência grandes empresas como o Google, começaram a utilizá-la.

Onde usar

Que o jQuery é para ser usado no cliente e que é uma biblioteca na linguagem javascript, todas as matérias de revistas e blogs falam, mas ... onde posso usá-lo, em que momento devo usá-lo e por que usá-lo, são questões que geralmente não são feitas em alguns projetos. Por exemplo um sistema em que existem 2 usuários e que esses usuários estão interessados em executar suas tarefas de maneira simples, este sistema necessita do jQuery? Segundo as características do demonstradas do projeto não necessita, pois o sistema deve ser simples e para apenas 2 usuários, o custo para implementá-lo com o jQuery é um pouco maior, tornando inviável a implementação. Mas imagine uma empresa que tem como principal produto uma ferramenta de WebMail, será que vale a pena investir na implementação com o jQuery? Neste caso sim, pois a usabilidade do WebMail será um atrativo para os clientes, e neste caso é uma vantagem competitiva no mercado, os clientes poderão optar por usar este WebMail simplesmente porque ele não fica carregando a página toda hora que ele clicar em alguma coisa. Outros aplicativos que tem a necessidade de utilizar estes recursos são sites de e-commerce, aplicativos de comunicação, aplicativos de monitoramento, entre outros. Basicamente todas as ferramentas que necessitam de Navegabilidade e Usabilidade podem e devem usar o jQuery como um diferencial.

Tentamos definir aqui como escolher usar ou não usar o jQuery, e descobri que posso utilizá-lo no meu site, e ai onde que eu devo aplicá-lo no meu site?

Basicamente, o jQuary tem por objetivo para tratar objetos DOM, adicionar e remover eventos, mudar estilo, capturar objetos da página, entre outros.
É bastante aconselhável utilizá-lo quando o sistema é baseado em AJAX, aliás a própria biblioteca da suporte a implementação de chamadas assíncronas ao servidor (POST sem recarregamento), e é aconselhável usá-lo para tratar os objetos(DOM) e/ou o XML que irão receber do Servidor.
Mas ainda assim esta explicação não nos permite entender exatamente onde usá-lo.


O jQuery possui funções para inúmeras tarefas, funções prontas para serem usadas, como por exemplo métodos de suporte a AJAX, para trabalhar com estilo de objetos (CSS), tratamento de informações, fila, tamanho e posição de objetos, efeitos de animação de objetos, eventos de objetos, métodos de formulários como submição ou eventos, manipulação de objetos, seletor de objetos, além da iteração com plug-ins externos.

Portanto podemos usá-lo para mover objetos, aumentá-los de tamanho, carregar informações do servidor sem a  necessidade de recarregamento da tela, alterar a aparência da página, entre outros, e o grande diferencial é que não será necessária nenhuma alteração no código para que o mesmo execute em navegadores diferentes, o próprio jQuery realiza este tratamento.

Sem exagerar


Muitas pessoas tem a tendência de aplicar o que aprende em tudo aquilo que existe, para poder aprender melhor ou por estar iludida acreditando que somente aquele conhecimento basta para resolver o problema. Mas se fizermos isto com o jQuery em um momento as máquinas dos usuários não irão conseguir abrir o site. Porque a máquina do usuário tem uma configuração imprevisível, e imagine só, por exemplo, se o gMail tivesse uma configuração mínima de acesso? Não estamos falando de um jogo, nem de um sistema operacional, é uma página de internet, se ela demorar para carregar ou se ela não carregar por causa de configurações mínimas, você pode perder um cliente em potencial.
Não se deve carregar uma lista de 500 informações no browser dentro de um XML e ficar tratando com javascript, isso não é performático,  a principio pode parecer, mas não é. portanto se for carregar informações no lado do cliente, pense se não esta carregando informações a mais daquilo que você realmente necessita.
Tente não sobre carregar a página com inúmeras animações sem necessidade, se puder trocar a animação por uma imagem (gif), faça isso, e em alguns casos você pode estudar a hipótese de usar um objeto "Flash" ou até Silverlight.
O jQuery foi criado para ajudá-lo a se adequar a Web 2.0 e não para criar filmes em html e nem para desenvolver um processador de informações.

Conclusão
O jQuery realmente é uma biblioteca diferenciada no mercado, porém não é a unica, temos que avaliar se é realmente necessária a sua utilização ou se podemos dispensá-lo de nosso website.
Quando optarmos por utilizá-los, devemos aplicar apenas em locais relevantes e que realmente irá ser um diferencial. E por último temos que usá-lo com cautela para que o site não fique pesado.

Referências
Como meu intuito neste post não é explicar como implementar com o jQuery seguem algumas referências para que você possa saber mais sobre o assunto.
http://api.jquery.com/ - Documentação oficial
http://jquery.org/ - Site com todos os projetos jQuery
http://pt.wikipedia.org/wiki/JQuery - jQuery na wikipedia
http://visualjquery.com/ - Documentação

8 de jan. de 2010

Economia de memória com string.Empty


Muitas pessoas não compreendem o motivo de o atributo "Empty" existir na classe "String", pois é isto que vou discutir neste artigo!

Conceito Básico

Vou utilizar o exemplo do "string.Empty", pois este é extendido a todos os outros locais de onde este conceito pode ser aplicado.

Imagine que você tenha uma caixa de giz de cera ao seu lado com varias cores e cores repetidas, e que você esta fazendo uma pintura e uma cartolina, você irá iniciar a sua pintura.
Para pintar o céu você pega um giz de cera da cor azul, e inicia a pintura, sua pintura do céu fica maravilhosa e agora você deseja pintar aquele belo sol amarelo, então você pega um novo giz de cera amarelo e pinta o belo sol. Agora você deseja pintar o mar. Ah, e você quer que o mar seja belamente azulado com o mesmo azul do céu como sendo um reflexo, com apenas um horizonte entre os dois. E então sem perceber que o giz de cera azul esta em sua outra mão, junto com o giz amarelo, você simplesmente pega OUTRO giz azul e aquele mar fica belíssimo, e então vem o navio e é um grande navio, e cada janela deste navio vai refletir o céu ou o mar, e então você inicia a pintura da primeira janela, e então você novamente pega um OUTRO giz azul, a janela fica maravilhosa então você pega a cor cinza e para pintar o casco e ver que efeito irá ficar a janela com o casco cinza, fica uma maravilha, e então você parte para a próxima janela, e para o próximo giz azul, até sua mão ficar cheia de giz da cor azul e você não conseguir segurar nenhum outro giz na sua mão (estouro de memória).

Para entender o conceito de Singleton, que é usado no caso do string.Empty é preciso abstrair que cada giz é um objeto e que a mão é a memória que guarda este objeto, assim como uma caixa e uma mão a memória também tem um limite de capacidade.

Se o giz azul tem a mesma característica, tonalidade, tamanho, etc... para que pegar mais de um? O mesmo se aplica a objetos em seu computador.

Memória
A memória de um computador é como uma caixa ela também possui uma limitação 1Mb, 2Gb, etc... e quanto mais for utilizada fica mais complexo para o sistema operacional gerenciar a(s) memória(s), e isso é um risco a quaisquer aplicativo/sistema que necessite de uma relativa performance.

No caso, quando estamos chamando string.Empty em nosso código, estamos dizendo que precisamos do valor "" que fica em um lugar específico da memória, e este valor é alocado uma única vez.na memória
por exemplo :

string variavel = string.Empty;
isso significa que a variável "variavel" aponta para o valor de string.Empty, ou referencia a posição da memória onde o valor esta guardado.

string variavel = "";
isto significa que a variável "variavel" aloca um novo espaço na memória, aumentando seu uso.

Diferença sutil, mas para cada "" que é adicionado no código uma posição da memória é alocada.
Como na imagem abaixo :

Pense em que para todos os locais do seu aplicativo que referenciam "" uma área da memória é alocada.

Coletores de Lixo
Os coletores de lixo (Garbage Collector) não foram implementados para que o seu aplicativo tenha performance, mas sim para que as informações "inúteis" alocadas na memória sejam descartadas para dar espaço para o seu ou para outros aplicativos. Seu código não irá ganhar performance com isto, ele esta apenas se encarregando de limpar aquilo que você esqueceu de limpar, e isto tem um custo bastante alto para ser gerenciado, pois o Coletor possuí um algoritmo complicado de gestão de memória, existe o conceito de espaço de memória eliminado (o que não significa excluído, significa que apenas esta marcado como inútil), para que se o aplicativo venha a utilizar novamente este espaço o mesmo possa ser recuperado. Este mecanismo funciona por ciclos, o Coletor passa a primeira vez, e valida se aquele espaço da memória esta sendo usado, caso se passe uma quantidade determinada de ciclos e aquela área não é acessada ele marca a área como Eliminada, e após outros ciclos, caso a áreas não seja acessada, então o objeto é removido da memória.

Importância
Alguns desenvolvedores não se preocupam com a memória do servidor e muito menos com a dos clientes que irão utilizar seus aplicativos, e se justificam afirmando que o servidor não esta atendendo os requisitos de hardware do sistema, e que a mesma deve ser adaptada(comprar ou alocar recursos), com aquisição de memória e/ou disco rígido, mas na verdade seus códigos não utilizam boas práticas e muito menos reaproveitamento de memória.

Os jogos são em sua maioria desenvolvidos em C++, apesar de existirem algumas outras linguagens para se produzir jogos, quando um novo jogo é produzido ele é bastante realista com gráficos perfeitos e com cálculos mátemáticos para gravidade, atrito, entre outras leis da física, e tudo isso é feito com a ampliação do uso da memória, utilizando apenas o necessário para que seja apresentado o resultado em tela, se estas técnicas não fossem utilizadas, talvez hoje não existiriam jogos tão poderosos.

Lembre-se que quão mais limpo e leve seu software for produzido menor o custo da manutenção do mesmo. E que as memórias e discos rigidos, apesar de estarem mais baratos nos dias atuais, custão dinheiro, e talvez seu cliente/usuário não possa arcar com estes custos.

Afinal, produzimos softwares para reduzir o tempo e custo do cliente para realizar tarefas, ou análises e não para complicá-los e exigir a aquisição de novos recursos.


Conclusão
A utilização de padrões como singleton e a otimização de utilização de objetos e memória é bastante benéfico e saudável ao projeto, pois com eles conseguimos produzir códigos simples, sem todas aquelas variáveis repetidas e sem necessidade de estarem criadas.
Quando economizamos memória estamos garantindo que o único problema que poderia ocorrer no software é se o limite de utilização (nro. de acessos, nro. de conexões) ser ultrapassado. Outro ponto forte neste tipo de economia é que a escalabilidade, manutenibilidade e capacidade do software aumentará, aumentando também o tempo de vida do projeto, melhorando o retorno do investimento ao dono do projeto, e gerando mais lucro e menos problemas para a empresa.


21 de ago. de 2009

Multiple Upload IE8 (fakepath)

Bom estou escrevendo este artigo para detalhar um novo requisito da ferramenta Internet Explorer 8, mesmo por que eu procurei sobre o assunto, mas não encotrei muitas respostas, então acabei descobrindo um problema.

O IE 8 possui agora um item de segurança também existente no Opera Browser:A substituição do caminho do arquivo por um caminho falso.

Imagine que antes quando você selecionava um arquivo o caminho poderia ser capturado e enviado a um servidor, e via código seria possível acessar quaisquer arquivos existentes na sua máquina, até de maneira oculta, com isso o acesso a arquivo de senha gravadas para auto autenticação em sites e contas de e-mail, etc. Também é possível acessar cockies, entre outras informações. Lógico, quando se sabe o caminho em que estes arquivos estão gravados. Porém quando se tem a estrutura de pastas do sistema operacional(C:\ ou D:\) estes arquivos podem ser acessados, pois os locais de gravação seguem determinado padrão do próprio sistema operacional(e o SO pode ser identificado via javascript).

Mas como posso desenvolver um componente que funcione, sem que o usuário tenha que seguir procedimentos de adicionar o site como seguro, e etc? Tem como fazer isto?

Bom, o problema dos componente de Multi Arquivos da Web, é que eles criam os objetos de inputFile em tempo de execução, porém somente quando os arquivos devem ser realmente enviados. E geralmente a seleção dos arquivos é feita por apenas um componente input, e após isto o CAMINHO é gravado em uma lista, para que quando o arquivo for enviado um novo input seja criado e acessado pelo servidor.

O problema esta quando o componente tenta capturar o caminho do inputFile, agora quando o javascript tenta acessar o atributo "value" do inputFile o mesmo retorna o caminho falso, para que a segurança e integridade dos arquivos e senhas dos usuários seja garantida.


A solução é sempre que um arquivo tiver que ser selecionado, um novo objeto do tipo inputFile deve ser criado, pois com isso não iremos necessitar de nenhuma iteração com o caminho do arquivo, apresentando no máximo o nome do arquivo em uma lista.

Espero que as informações ajudem.

Multiple Upload IE8 (fakepath) (inglês)

(Translation done by Google Tradutor)
Well I am writing this article to detail a new requirement of the tool Internet Explorer 8, I even tried on the subject but not Choose from many responses, then I discovered a problem.

IE 8 now has a safety feature, also present in the Opera Browser: Replacing the file path for a false path.

Imagine that before when you select a file path could be captured and sent to a server, and via code would be able to access any existing files on your machine, even covertly, thus access to the password file written to auto authentication sites and email accounts, email, etc.. You can also access cockies, among other information. Sure, if you know the path where these files are saved. But when you have the folder structure of the operating system (C: \ or D: \), these files can be accessed, because the shooting locations follow certain standard operating system itself (and the OS can be identified via javascript).

But how can I develop a component that works without the User has to follow procedures to add the site as safe, etc? It aims to do this?

Well, the problem of component Multi Web Archive, is that they create inputFile objects at runtime, but only when the files should be actually sent. And usually the selection of files is done by only one component input, and after that the PATH is recorded in a list, so that when the file is sent a new input is created and accessed by the server.

The problem is when the component attempts to capture the path of inputFile, now when the javascript tries to access the attribute "value" of inputFile it returns the false path, so that the security and integrity of files and passwords of users is guaranteed.

The solution is whenever a file is to be selected, a new object of type inputFile should be created, because with this we will not require any interaction with the file path, with a maximum file name in a list.

I hope the information will help.

15 de jun. de 2009

Seu software economiza energia?

Segundo uma pesquisa realizada pela empresa Google Inc., 15.000 buscas significam, em emissão de CO2, a produção de 1 x-burguer.

Isso não é nada ?

Vamos fazer uma conta básica.

Quantas pessoas existem no mundo? Aproximadamente 6,6 bilhões.

Considerando que 1% da população faça pesquisas na internet a cada 1 hora.
6.600.000.000 x 0.01 = 66.000.000 de pessoas fazendo consultas por hora

Um estudo realizado pela "NUA Surveys" sugere que em 2000 existiam mais de 359 milhões de usuários nas maiores potencias econômicas do mundo

66.000.000 X 24 horas por dia = 1.584.000.000 de pessoas por dias.

se cada uma delas fizer 1 consulta teremos 1.584.000.000 de consultas.
1.584.000.000 / 15.000 = 105.600.000 de x-burguers.

Parece muito?
Consideramos apenas 1% da população por hora, imagina se avaliar a quantidade de consultas realizadas por hora que tenho certeza ser mais que 66 milhões, considere que pessoas pesquisam inúmeros assuntos durante seus dias de trabalho e que pela noite milhares de pessoas pesquisam sobre seus interesses.

É... descobrimos que a tecnologia pode ser altamente agressiva ao meio-ambiente.

Mas o que eu como desenvolvedor, arquiteto, analista ou líder de equipe posso fazer? O que eu tenho a ver com isso?

Bom, é um pouco complicado falar sobre este assunto pois precisaríamos de muitas evidências e estudos, mas tentarei aninhá-las aqui.

Black to the world


Quando desenvolvemos aplicativos com fundos escuros temos maior economia na utilização do monitor...
Dúvida?

Pensando exatamente nisso o site blackle foi criado, é uma ilustre iniciativa para um mundo de TI mais verde, limpo e econômico
http://www.blackle.com/ - Este site é uma interface que permite realizar consultas no google com maior economia, possui um contador que demonstra a quantidade de Watts economizados pelo site.
Tabela de Watts por cor
White - 74 Watts
Fuchsia - 69 Watts
Yellow - 69 Watts
Aqua - 68 Watts
Silver - 67 Watts
Blue - 65 Watts
Red - 65 Watts
Lime - 63 Watts
Gray - 62 Watts
Olive - 61 Watts
Purple - 61 Watts
Teal - 61 Watts
Green - 60 Watts
Maroon - 60 Watts
Navy - 60 Watts
Black - 59 Watts

Fonte: http://www.graphicsoptimization.com/diy/displaycolors.htm


Best Pratices

O que as melhores práticas tem a ver com a redução de consumo de energia?

Não encontrei nenhum estudo sobre isso, mas raciocinemos...

Quando eu utilizo singleton por exemplo, estou economizando memória, e por sua vez economizando a energia que seria gasta para alocar um novo objeto na memória.

Com a reutilização de código ganhamos em espaço em disco, em utilização de memória e processamento(Cache do processador).

Que coisa ... será que ainda existem dúvidas de que economizamos uma peque e singela parte do mundo com melhores práticas.

Green Leader

Acredito que onde mais podemos economizar energia é durante o desenvolvimento do software.

Os líderes de projetos de software não se preocupam com a questão ambiental, pois não é evidente que a função de um líder é avaliar o bem da sua equipe (comunidade)?

O bem para as pessoas também inclui se preocupar com a qualidade de vida do lugar onde elas vivem.

Existem inúmeras atitudes que podem fazer com que a equipe economize energia, algumas delas são:
    1. desligar o computador quando o integrante for embora, caso necessário somente desligar o monitor.
    2. reduzir o brilho dos monitores da equipe
    3. reduzir o consumo de copos plásticos, induzir o uso de copos individuais de porcelana ou vidro
    4. reduzir a intensidade da luz do ambiente da equipe
    5. evitar longas jornadas de trabalho
    6. em locais pouco movimentados conduzir as pessoas a apagarem a luz quando não houver ninguém.
    7. reduzir o número de documentos impressos e gravados
    8. reduzir a utilização de ar condicionado
Estas são apenas algumas atitudes.

Conclusão

Cada vez mais as corporações pensam em fazer com que suas atividades sejam cada vez mais alinhadas com os objetivos da sociedade e da sua comunidade, não penas por ser um ambiente favorável ao trabalho, mas também por ser um mundo novo onde clientes e usuários são mais experientes e extremamente mais exigentes, e assim forçados a se preocupar com o meio ambiente e as atividades sociais.
Com estes estudos conseguimos encontrar bases para iniciar a redução dos devidos consumos tanto de energia elétrica quanto de objetos que degradam o meio ambiente de forma letal.
Reconheço que faltam alguns pontos neste post mas tento aqui expor a preocupação das empresas e da sociedade e relacionar a Tecnologia de informação que pode ajudar tanto a diagnosticar problemas com o meio ambiente quando ajudar a recupera-lo.

7 de mai. de 2009

Importância da customização de controles(.NET)

Controles customizados, geralmente, são deixados de lado pelos arquitetos, pois nem sempre é evidente que futuramente, possa haver uma adição funcional no Control Padrão.

Com o avanço das tecnologias e a Orientação a Objetos, vemos a oportunidade de criar controles com certa simplicidade e produtividade.

Mas o que justificaria customizar controles já prontos, como o TextBox, ListBox, DropDownList?

Este é o assunto que irei abordar nesta postagem.

OBS: usarei aqui como base os controles do ".NET" como base, pois não tenho conhecimento a fundo de outras tecnologias.


Justificativas

Os controles do .NET são bastante funcionais e todos eles herdam de uma única classe base(Control).

Vamos usar o TextBox(WebControl) para exemplificar as justificativas.

Supondo que tenha desenvolvido um sistema que da e-commerce, e para isto eu tenha utilizado um controle do tipo TextBox para o que o usuário possa digitar a quantidade de em determinado item do pedido.
Que problemas podem ocorrer com o uso do TextBox do .NET?

Bom, este controle é ótimo, mas não possuí um bloqueio ou máscara para impedir o usuario de digitar um caracter inválido no conteúdo do componente. E que talvez este bloqueio fosse importante para os usuários(Clientes), até para que antes de clicar em comprar isto seja impedido ao invés de validado.

Quando isso for alterado, se não tiver sido criado um controle customizado, teríamos que criar uma função javascript e adicioná-la em cada página, seja com um arquivo js ou uma função adicionada diretamente na página, e ainda teríamos que, em todos os TextBox que necessitam desta validação, adicionar o atributo com a chamada para a função. E tudo isso com muita separação, dificultando a manutenção do código.

Desta maneira você gera mais demanda para a empresa ? Gera mais valor ? Pois é será que a manutenção de aplicativos é rentável? Esta é uma grande pergunta, mas também é assunto para outra postagem.

Mas para seguirmos as melhores práticas adotaremos a resposta de que não seria rentável.

E ai teríamos que criar um time ou uma quantidade de horas absurda para fazer a mesma alteração em lugares diferente, para uma evolução tão simples como mudar um campo de Texto que permita o tratamento de alfanuméricos.

Sendo que a criação de ou apenas a herança de alguns componentes é tão produtivo quanto é recomendável, vale a pena, principalmente, em um projeto de médio a grande porte a Customização de controles.

Abaixo alguns códigos de exemplo:
//Exemplo Simples
public class SimpleCompositeControlDesigner : CompositeControlDesigner
{
public override bool AllowResize
{
get
{
return false; }
}
}

//Exemplo simples de herança
public class SimpleText : TextBox
{
}

5 de abr. de 2009

Performance de Software

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.

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?

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



Enfim, neste artigo, falei o que muitos já sabiam, não quero "aparecer" escrevendo este artigo, mas com a quantidade de desentendimentos, que vejo, me senti obrigado a inaugurar este blog com este artigo, pois assim consigo passar a idéia geral do blog.
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.