8 de jun. de 2010

Liderança a Flor da pele

É assustador o número de projetos existente em empresa grandes e até em empresas pequenas, mas existe aquele projeto que a empresa tem um enorme orgulho em apresentar como seu grande diferencial, aquele projeto em que tudo deu completamente certo. Mas nem todas as empresas tem essa sorte de ter um projeto de sucesso, em sua maioria os projetos são extremamente complexos de serem concebidos.
Pode não parecer mas projetos podem ser cancelados ou fracassarem a qualquer momento. Mas... existe um meio de evitar ou de minimizar esta problemática?
É o que vamos tentar descobrir!
Uma pesquisa realizada pelo The Standish Group(instituto de pesquisa) em 2006, 35% dos projetos tinham sucesso, 19% fracassavam e 46% tiveram desafios para ser entregues, como estouro no orçamento ou nas horas de projeto. E apesar do número de sucesso ser crescente a cada ano, mas ainda é a minoria dos projetos.
Esta crescente se deve a grande divulgação de materiais sobre liderança e a criação de métodos e boas práticas de desenvolvimento de projetos, métodos que tendem a mitigar cada vez mais os problemas básicos dos projetos, como por exemplo as Normas ISO, PMBoK, Scrum, e outros.
Mas mesmo com estes métodos que ajudam muito no sucesso pleno de um projeto, ainda assim, existem projetos problemáticos.
A implantação de uma metodologia é cara, é demorada, e necessita de muita dedicação dos executores do projeto, assim como dos gestores.
Por isso nem sempre pode ser a melhor forma de lidar com os problemas do projeto. Entenda bem, não estou dizendo aqui que utilizar uma metodologia é ruim e não ajuda, muito pelo contrário, TODOS os projeto precisam de uma metodologia, por inúmeros motivos. Um projeto sem metodologia é como uma embarcação a deriva, a maré vai levando a embarcação e talvez o sentido desta maré seja direto para um temporal devastador, sem volta.
O que tento explicar aqui é que apenas a metodologia não vai garantir o sucesso de seu projeto, assim como a embarcação com apenas uma vela continuará sendo levada, mas agora pelo vento e ainda sem uma direção certa, correndo ainda um risco grande de estar sendo levada a tempestade.
É por este motivo que todas as embarcações tem um capitão, não ache que um capitão é um homem que grita como um marujo e que apenas mande nas pessoas enquanto esta controlando o remo, não, muito longe disso. O capitão tem várias maneiras de tratar os marujos, e os capitães atuais tem um senso de linderança muito mais apurado que muitos lideres de projetos empresariais ou industriais.
Imagine um capitão que não conhece o mar em que esta, ele começou sua carreira como capitão desde cedo, e esta com sua embarcação pesada e cheia, os marujos totalmente atarefados. E então uma tempestade é avisada pelo rádio, mas .... porque mudar o curso, é apenas uma tempestade.e uma tempestade leve, e já estam atrasados para entregar a carga... Vamos pela tempestade, e apenas vou avisar os marujos quando estivermos a caminho...
Bom ... o capitão havia esquecido que seus marujos já estavam a 95 dias no mar trabalhando durante horas todos os dias, muitos deles estavam adoecidos pelas atividades de grande esforço fisico e as condições do clima frio, também não analisou que a embarcação possuia algumas rachaduras leves no casco, nada que os impedisse de flutuar, mas que poderiam abrir como lata de sardinha rapidamente em condições extremas, seus marujos sabiam destas rachaduras, mas como o capitão não exigia muito do barco, isto talvez não fosse um problema...
Bom, e realmente foram... o resultado você pode imaginar... mas a questão é ...
Porque a tragédia aconteceu ou tem grandes chances de acontecer?
Você pode até pensar, porque o marujo não avisou o capitão sobre as rachaduras! Mas não... a função do capitão não é apenas manter o curso, é também cuidar da embarcação e ter a certeza de que os marujos não vão se rebelar ou brigar entre si, assim como cuidar da saúde e do bem estar de todos... simplesmente, por que ele tem grandes carregamentos a entregar do outro lado da tempestade...
Acho que conseguimos separar algumas coisas desta breve história...
Existia uma metodologia?
Todos os marujos estavam atarefados, e sabiam o que fazer, isto demonstra traços de certa organização, uma das premissas das metodologias, existia um ponto de chegada, isto demonstra planejamento não execelente e nem muito bom, mas existia, existia um meio de se locomover, isto demonstra o progresso das atividades.
O que aconteceu para que desse errado?
Bom, o capitão estava tão obsecado pelo resultado final (entregar a carga), que ele esqueceu que durante a viagem algo poderia acontecer com a carga e não tomou as devidas precauções para que nada acontecesse, portanto houve uma certa negligência na analise das condições gerais para o sucesso da entrega.
O que poderia ser feito?
Acho que esta resposta é um tanto pessoal, pois pode variar à cada líder (capitão).
Mas, mesmo sendo pessoal existem alguns pontos básicos que podem auxiliar nesta escolha de como agir.
Pontos como ambiente de motivação, ordem, organização, lealdade, entres tantos outros.
Com o intuito de discutir e abordar inúmeros aspectos relativos a liderança de pessoas, análise de processos, organização e tópicos relacionados, criarei uma seção aqui para expor minhas idéias e solicitar as pessoas que tem interesse em discutir, sugerir ou esclarecer assuntos relacionados a liderança a comentar os posts, e também a entrar em contato para pedir apoio em situações adversas.
Não sou nenhum mestre, e muito menos um perito na área, mas tenho alguns princípios baseado nas histórias de líderes mais bem sucedidos do mundo, e claro estou em constante aprendizado, assim como todos nós, seres humanos.
PMBoK, CMMi, Scrum, XP, ISO, Qualidade, Melhoria, Ambiente, Meio ambiente, estão entre os assuntos abordados, e também estou aberto a sugestões.
Obrigado pela valiosa atenção, espero que eu possa ajudá-lo e que você também me ajude a compreender como melhorar o nosso dia-á-dia.

25 de mar. de 2010

História da internet

A internet é a maior rede de computadores do mundo. Liga computadores de todos os tipos por meio de protocolos de transferência de dados.
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

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.


25 de nov. de 2009

Erro com o Cache-Control no Internet Explorer

Estava buscando justificativas para um erro que ocorria com o sistema de meu cliente, e o erro era muito diferente, do que eu havia visto até hoje.

Contexto


Tínhamos dois ambientes e os dois ambientes, um na intranet e outro na internet, possuíam a mesma versão de código fonte e bibliotecas, tudo absolutamente normal, porém em determinada página que o usuário acessava para fazer download na internet não funcionava, estava dando erro, dizia que não encontrava a página. Mas existia uma outra variável, esta página retorna um relatório, ela gera um array de bytes e envia para o cliente como arquivo para download, em inúmeros formatos como excel, html, pdf, entre outros, mas mesmo assim marcava como página não encontrada, e então iniciei minha análise. Eis que muito tempo analisando o ambiente na qual o aplicativo se estabelecia e o código fonte que gerava estes arquivos me deparei com alguns headers de definição de Cache na página, mas mesmo assim não me atentei a este detalhe, foi então que comecei a isolar a situação em um projeto demonstrativo e então consegui encontrar o erro em si.
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.ClearContent();
   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");

Mas até ai qual o problema de se dizer que uma página não será gravada no cache?

Bom para o Internet Explorer, não gravar no cache é uma coisa tão séria, que ele decide não gravar a página/arquivo em lugar algum (nem em uma pasta temporária), apenas o mantém em memória e renderiza isso na tela. Mas ainda não chegamos ao ponto central do erro, quando o IE decide fazer isso não sabe se a resposta é uma página html ou um excel, etc, ou melhor não verifica se o resultado é uma página, ou outra coisa.


No caso de um arquivo xls (Excel, ou qualquer outro formato), o Internet Explorer faz uma chamada para o método IPersistFile::Load de um ActiveX, mas quando o método tenta carregar, o arquivo não é encontrado, pois o Internet Explorer não gravou nenhuma cópia temporária do arquivo, para que ele possa ser aberto, portanto acontece um erro de arquivo não encontrado.


Mas devo alertar que este erro acontece apenas com o Internet Explorer e realizei o teste apenas com as verões 6 e 7, também realizei o teste com o Google Chrome, Opera e Mozilla Firefox, todos conseguiram baixar o arquivo com sucesso.

Solução

Encontrei uma nota de suporte da microsoft informando que este erro ocorre apenas com protocolos seguros SSL, mas no meu caso não tínhamos isso e mesmo assim o problema ocorreu.
Bom vamos aos fatos, na  nota de suporte da microsoft, é expresso que como solução do problema remover o "no-cache" do "Control-Cache", mas disso nem tudo é verdade. Porque tanto o "no-cache" quanto o "no-story" do "Control-Cache" apresentaram este problema no teste realizado, na nota também é expresso que o "no-cache" do "Pragma" apresenta problemas, mas não foi possível simular este problema no nosso teste, nos deixando assim com a incerteza de que o problema realmente exista com o "Pragma", mas de qualquer maneira a melhor saída para esta situação é :
  1. 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.
  2. 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.
Simular o erro no Projeto de exemplo
  1. Faça download do arquivo zip
  2. Descompacte o arquivo em qualquer pasta que desejar.
  3. Abra o Visual Studio 2008 (qualquer versão).
  4. Acesse o item de menu File > Open > WebSite.
  5. Selecione a pasta que foi descompactada com o nome de "AspNet ControlCache Error".
  6. Pressione F5 ou "Run".
  7. Uma página irá abrir com um botão, clique no botão.
  8. 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á.
  9. Para solucionar o problema comente as linhas:   
    this.Context.Response.AppendHeader("Cache-Control", "no-cache");
    this.Context.Response.AppendHeader("Cache-Control", "no-store");
  10. Pressione novamente F5 ou "Run" e execute o teste novamente.

Links

Caso os links do post não funcionem aqui segue a lista de links:
Nota de suporte da Microsoft: http://support.microsoft.com/default.aspx?scid=kb;en-us;316431
Projeto de Exemplo: http://www.easy-share.com/1908531596/AspNet ControlCache Error.zip

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.