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.
25 de mar. de 2010
História da internet
A internet nasceu em 1969, nos Estados Unidos. Interligava laboratórios de pesquisas e se chamava ARPAnet (ARPA - Advanced Research Projects Agency). Era uma rede do Departamento de Defesa Norte-Americano.
Era o auge da guerra fria, e os cientistas uma rede que continuasse funcionando em caso de ocorrer um bombardeio
Surgiu então o conceito principal da internet, uma rede em que todos os pontos se equivalem, e não há um comando central.
O nome internet propriamente dito surgiu bem mais tarde, quando a tecnologia da ARPAnet passou a ser usada para conectar universidades e laboratórios.
Por isso não há um único lugar que "comanda" a internet. Hoje ela é um conjunto de redes no mundo inteiro. O que essas redes tem em comum são os protocolos TCP/IP (Transmission Control Protocol/ Internet Protocol).
Durante cerca de duas décadas a internet ficou restrita ao ambiente acadêmico e científico. Em 1987 pela primeira vez foi liberado seu uso comercial nos EUA.
Mas foi em 1992 que a rede virou moda.
Este post é baseado em uma aula que tive no meu colegial, postei apenas como informação cultiral, espero que agrade.
3 de mar. de 2010
jQuery
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://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!
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.
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.
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.
Diferença sutil, mas para cada "" que é adicionado no código uma posição da memória é alocada.
Como na imagem abaixo :
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.
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.
25 de nov. de 2009
Erro com o Cache-Control no Internet Explorer

No projeto demonstrativo consegui simular o erro, porém tenho que tentar acessar a página que gera o array de bytes diretamente.
Descrição do problema
O código fonte adicionava os seguintes headers:
this.Context.Response.ClearHeaders();
this.Context.Response.AppendHeader("Cache-Control", "no-cache");
this.Context.Response.AppendHeader("Cache-Control", "private");
this.Context.Response.AppendHeader("Cache-Control", "no-store");
this.Context.Response.AppendHeader("Cache-Control", "must-revalidate");
this.Context.Response.AppendHeader("Cache-Control", "max-stale=0");
this.Context.Response.AppendHeader("Cache-Control", "post-check=0");
this.Context.Response.AppendHeader("Cache-Control", "pre-check=0");
this.Context.Response.AppendHeader("Pragma", "no-cache");
this.Context.Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT");
- Caso seja realmente necessário não manter o conteúdo no cache, adicione o "no-cache" apenas do "Pragma", que apresentou uma probabilidade menor de apresentar erros.
- Caso perceba que não irá fazer diferença entre adicionar ou não em cache, opte pelo padrão, pois dessa maneira você evita que problemas com o Internet Explorer ocorra, não adicione nada.
- Faça download do arquivo zip
- Descompacte o arquivo em qualquer pasta que desejar.
- Abra o Visual Studio 2008 (qualquer versão).
- Acesse o item de menu File > Open > WebSite.
- Selecione a pasta que foi descompactada com o nome de "AspNet ControlCache Error".
- Pressione F5 ou "Run".
- Uma página irá abrir com um botão, clique no botão.
- Nesta primeira parte o download não ocorrerá pela sequência de eventos, mas substitua a url para a página na url " .../AspNet ControlCache Error/Download.aspx" , e ai sim o problema ocorrerá.
- Para solucionar o problema comente as linhas:
this.Context.Response.AppendHeader("Cache-Control", "no-cache");
this.Context.Response.AppendHeader("Cache-Control", "no-store"); - Pressione novamente F5 ou "Run" e execute o teste novamente.
Projeto de Exemplo: http://www.easy-share.com/1908531596/AspNet ControlCache Error.zip
21 de ago. de 2009
Multiple Upload IE8 (fakepath)
Multiple Upload IE8 (fakepath) (inglês)
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?
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
Existem inúmeras atitudes que podem fazer com que a equipe economize energia, algumas delas são:
- desligar o computador quando o integrante for embora, caso necessário somente desligar o monitor.
- reduzir o brilho dos monitores da equipe
- reduzir o consumo de copos plásticos, induzir o uso de copos individuais de porcelana ou vidro
- reduzir a intensidade da luz do ambiente da equipe
- evitar longas jornadas de trabalho
- em locais pouco movimentados conduzir as pessoas a apagarem a luz quando não houver ninguém.
- reduzir o número de documentos impressos e gravados
- reduzir a utilização de ar condicionado
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)
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
{
}