Este é o meu Blog pessoal onde pretendo publicar minhas observações sobre as mais diversas tecnologias e recursos existentes hoje na internet. Meu objetivo é compartilhar observações, dicas, e conhecimento de uma forma geral.
quarta-feira, 21 de julho de 2010
Coolite - configurações no web.config
Em razão do código de tags não ser exibido corretamente no blogger tive que publicar este conteúdo em meu perfil no spaces, no endereço http://eryxjose.spaces.live.com/blog.
terça-feira, 25 de maio de 2010
Aviso de problema com GodMode em Window 64bits
Pra quem não sabe, NÃO utilize este GodMode em windows 64bits. Caso você não tenha visto esta mensagem antes e tenha tentado usar, seu computador está travando o windows e você não consegue fazer nada. Para solucionar o problema acesse o windows em modo de segurança com prompt de comando, vá para a pasta onde você criou o dito cujo (ex: cd c:\users\nomedeusuario\desktop), e em seguida apague a pasta GodMode com o comando a seguir: rd /s “GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}”
terça-feira, 27 de abril de 2010
NOVIDADES NO .NET FRAMEWORK 4
SEGURANÇA
Existem duas grandes alterações na segurança do .net framework versão 4: As politicas de segurança Machine-wide foram eliminadas, embora o sistema de permissões permaneça no lugar; e o Security Transparency tenha se tornado o mecanismo de reforço.
WEB
O ASP.NET versão 4 introduziu novos componentes nas seguintes áreas:
- Serviços Core, incluindo uma nova API que permite a você extender o caching, suporte a compressão de dados no session-state, e um novo gerenciador de preload de aplicação (componente autostart).
- Web Forms, incluindo suporte mais integrado para rotinas ASP.NET, melhoramentos para padrões web, atualização de suporte a browser, novos componentes para controles de dados, e novos componentes para o gerenciamento do View State;
- Contoles Web Forms, incluindo um novo controle de Chart;
- MVC incluindo novos métodos de ajuda para visualizações, suporte para aplicações MVC particionadas, e controladores assincronos;
- Dados Dinâmicos, incluindo suporte para aplicações web existentes, suporte para relacionamentos muitos para muitos e herança, novos Field Templates e atributos, e filtragem de dados melhorada;
- Microsoft AJAX, incluindo suporte adicional para aplicações AJAX client-based na biblioteca ajax;
- Visual Web Developer, incluindo Intellisense melhorado para JScript, novos Snipets auto-complete para html e markups asp.net, e compatibilidade de css melhorada;
- Deployment, incluindo novas ferramentas para automatizar tarefas de deployment típicas;
- Multi-Targeting, incluindo filtrs para componentes que não estão disponíveis em verões destino do Asp.Net Framework;
Existem duas grandes alterações na segurança do .net framework versão 4: As politicas de segurança Machine-wide foram eliminadas, embora o sistema de permissões permaneça no lugar; e o Security Transparency tenha se tornado o mecanismo de reforço.
WEB
O ASP.NET versão 4 introduziu novos componentes nas seguintes áreas:
- Serviços Core, incluindo uma nova API que permite a você extender o caching, suporte a compressão de dados no session-state, e um novo gerenciador de preload de aplicação (componente autostart).
- Web Forms, incluindo suporte mais integrado para rotinas ASP.NET, melhoramentos para padrões web, atualização de suporte a browser, novos componentes para controles de dados, e novos componentes para o gerenciamento do View State;
- Contoles Web Forms, incluindo um novo controle de Chart;
- MVC incluindo novos métodos de ajuda para visualizações, suporte para aplicações MVC particionadas, e controladores assincronos;
- Dados Dinâmicos, incluindo suporte para aplicações web existentes, suporte para relacionamentos muitos para muitos e herança, novos Field Templates e atributos, e filtragem de dados melhorada;
- Microsoft AJAX, incluindo suporte adicional para aplicações AJAX client-based na biblioteca ajax;
- Visual Web Developer, incluindo Intellisense melhorado para JScript, novos Snipets auto-complete para html e markups asp.net, e compatibilidade de css melhorada;
- Deployment, incluindo novas ferramentas para automatizar tarefas de deployment típicas;
- Multi-Targeting, incluindo filtrs para componentes que não estão disponíveis em verões destino do Asp.Net Framework;
SEGURANÇA - TRANSPARENT CODE
A segurança no .net framework 4 envolve três partes que interagem: sandboxing, permissions, e enforcement. O Sandboxing refere-se a prática de criar dominios isolados onde alguns códigos são tratados como totalmente confiáveis e outros códigos são restritos as permissões do conjuneto garantido para o sandbox. O código da aplicação executada dentro da garantia de configuração do sandbox é considerada transparente; isto é, ele não pode executar nenhuma operação que pode afetar a segurança. O conjunto garantido para o sandbox é determinado pela evidence. Evidence identifica quais permissões específicas são requeridas pelo sandbox, e quais tipos de sandbox podem ser criados. Enforcement refere-se a permitir código transparente a ser executado apenas dentro de seu conjuento de garantias.
Importante: Políticas de segurança foram um componente chave nas versões anteriores do .net framework. Mas a partir da versão 4 do framework foi tornada obsoleta. A eliminação das políticas de segurança é separada da security transparency.
Proposta do Transparency Model
Tranparency é um mecanismo de reforço que separa o código que executa como parte da aplicação do código que executa como parte da infraestrutura. A Transparency desenha uma barreira entre o código que faz coisas com privilégios (código crítico), como chamar código nativo, e código que não pode (transparent code). Código transparente pode executar comandos dentro dos limites do conjunto de permissões que está operando, mas não podem executar código crítico.
O primeiro objetivo da transparency enforcement é fornecer um mecanismo simples, mas efetiva para isolar diferentes grupos de código com base em privilégios. Dentro do contexto do moddelo sandboxing, estes grupos de privilégios são fully trusted (sem restrições) ou partial trusted (restrito as permissões do sandbox).
Importante: O modelo transparency transcende segurança de acesso do código. A Transparency é reforçada pelo compilador just-in-time e permanece ativo idependente do conjunto de garantias para um assemble, incluindo full trust.
Transparency foi introduzido no framework 2.0 para simplificar o modelo de segurança, e para tornar mais fácil escrever e distribuir bibliotecas seguras e aplicações. O código Transparency também é usado no Silverlight, para simplificar o desenvolvimento de aplicações partially trusted.
Especificando o Transparency Level
O Atributo SecurityRulesAttribute em nivel de assemble, determina as regras do SecurityRuleSet que o assemble irá seguir. As regras são organizadas sob um nível numérico do sistema, onde níveis mais elevados significam super reforço das regras de segurança.
Os níveis são:
Level 2 - regras de transparencia do framework 4;
Level 1 - regras de transparência do framework 2.0;
A primeira diferença entre os dois níveis é que o nível 1 não reforça as regras de transparência para chamadas de fora do assemble e é usada apenas para compatibilidade.
Importante: você precisa especificar o nível 1 apenas para compatibilidade; isto é, especifique o nível 1 apenas para código que foi desenvolvido no framework 3.5 ou anteriores que utilizam o atributo AllowPartiallyTrustedCallersAttribute, ou não usa modelo de transparency. Por exemplo, utilize o level 1 de transparencia para assembles .net framework 2.0 que chamam de chamadores partially trusted (APTCA). Para código que foi desenvolvido no .net framework 4 sempre utilize o level 2.
Level 2 Transparency
O level 2 transparency foi introduzido no .net framework 4. Os três princípios deste modelo são código transparente, código security-safe-critical, e código security-critical.
Importante: Políticas de segurança foram um componente chave nas versões anteriores do .net framework. Mas a partir da versão 4 do framework foi tornada obsoleta. A eliminação das políticas de segurança é separada da security transparency.
Proposta do Transparency Model
Tranparency é um mecanismo de reforço que separa o código que executa como parte da aplicação do código que executa como parte da infraestrutura. A Transparency desenha uma barreira entre o código que faz coisas com privilégios (código crítico), como chamar código nativo, e código que não pode (transparent code). Código transparente pode executar comandos dentro dos limites do conjunto de permissões que está operando, mas não podem executar código crítico.
O primeiro objetivo da transparency enforcement é fornecer um mecanismo simples, mas efetiva para isolar diferentes grupos de código com base em privilégios. Dentro do contexto do moddelo sandboxing, estes grupos de privilégios são fully trusted (sem restrições) ou partial trusted (restrito as permissões do sandbox).
Importante: O modelo transparency transcende segurança de acesso do código. A Transparency é reforçada pelo compilador just-in-time e permanece ativo idependente do conjunto de garantias para um assemble, incluindo full trust.
Transparency foi introduzido no framework 2.0 para simplificar o modelo de segurança, e para tornar mais fácil escrever e distribuir bibliotecas seguras e aplicações. O código Transparency também é usado no Silverlight, para simplificar o desenvolvimento de aplicações partially trusted.
Especificando o Transparency Level
O Atributo SecurityRulesAttribute em nivel de assemble, determina as regras do SecurityRuleSet que o assemble irá seguir. As regras são organizadas sob um nível numérico do sistema, onde níveis mais elevados significam super reforço das regras de segurança.
Os níveis são:
Level 2 - regras de transparencia do framework 4;
Level 1 - regras de transparência do framework 2.0;
A primeira diferença entre os dois níveis é que o nível 1 não reforça as regras de transparência para chamadas de fora do assemble e é usada apenas para compatibilidade.
Importante: você precisa especificar o nível 1 apenas para compatibilidade; isto é, especifique o nível 1 apenas para código que foi desenvolvido no framework 3.5 ou anteriores que utilizam o atributo AllowPartiallyTrustedCallersAttribute, ou não usa modelo de transparency. Por exemplo, utilize o level 1 de transparencia para assembles .net framework 2.0 que chamam de chamadores partially trusted (APTCA). Para código que foi desenvolvido no .net framework 4 sempre utilize o level 2.
Level 2 Transparency
O level 2 transparency foi introduzido no .net framework 4. Os três princípios deste modelo são código transparente, código security-safe-critical, e código security-critical.
terça-feira, 20 de abril de 2010
Uma visão sobre usabilidade na web - Parte 2
Quando criamos um web site, precisamos pensar sobre organização, navegação, personalidade, e limites no uso do site. Analisando exaustivamente estes assuntos antes de entrar na fase de produção pode salvar muito do tempo de trabalho e garantir que o site irá falar a lingua de sua audiência.
A organização do site ajuda a comunicar sua proposta ou mensagem. Ao acessar um site onde as informações estão agrupadas em categorias como peixes, cães, gatos, passaros, etc. Temos a impressão de estarmos em uma loja de petshop. A organização em categorias também ajuda a localizar facilmente os produtos que queremos encontrar.
Ao categorizar a apresentação do conteúdo de seu site é preciso ter em mente as expectativas de sua audiência. Eles são familiarizados com os termos que você utilizou? Eles associam os termos que você utilizou com o conteúdo em cada categoria? Evite termos que possam fazer sua audiência pensar sobre o que significam, ou sobre o que será que vão encontrar naquele tópico. Sua audiência e respectivos objetivos devem determinar como categorizar suas informações.
Quando conseguimos compreender a audiência do site e seus respectivos objetivos, teremos uma boa idéia de como eles esperam que as informações estejam organizadas. Com o objetivo de verificar se acertamos, é importante observar uma pessoa de sua audiência ou alguém de fora utilizando o site e analisar seus comentários.
Um teste simples que você pode fazer é pedir para membros de sua audiência organizarem cartões da maneira como lhes parecer mais lógia e comparar os resultados com o seu planejamento.
Quando você passa algum tempo na web pesquisando sobre os labels utilizados para apresentar categorias, você verá que os mais utilizados e auto-explicativos são utilizados em diversos sites. Alguns deles são "Portifólio", "Produtos", "Suporte", "Loja" e "Quem Somos". A pergunta que você pode fazer é "Como posso manter minha empresa única e ainda ter labels compreensívos e claros?". A resposta está na apresentação visual.
Os labels podem ser criados com base em tópicos, como tarefas do usuário, metáfora utilizada no site, audiência específica, ou ainda em sequência linear.
Depois de organizar será necessário informar a sua audiência sobre o conteúdo do site através dos elementos de navegação. Alguns elementos de navegação são: caixas de busca, menus horizontais e verticais, índices, tabelas de conteúdo, mapas do site, diretórios, gráficos, links, e links âncora. Estes elementos podem ser globais (existentes em todo o site) ou locais (existentes em subseções ou em uma página individual do site). Independente dos elementos que você utilize em seu site, eles terão o mesmo objetivo: orientar o acesso ao site.
Com uma navegação bem organizada e apresentada seus visitantes saberão onde estão, como chegaram onde estão, e onde eles podem ir em seguida.
Elementos de navegação que precisam estar presentes em todas as páginas do site: Link para página inicial, Identificação do site, Links de navegação principal, ferramentas de navegação no comprimeito horizontal, Utilitários no comprimento horizontal, Informações de contato.
A organização do site ajuda a comunicar sua proposta ou mensagem. Ao acessar um site onde as informações estão agrupadas em categorias como peixes, cães, gatos, passaros, etc. Temos a impressão de estarmos em uma loja de petshop. A organização em categorias também ajuda a localizar facilmente os produtos que queremos encontrar.
Ao categorizar a apresentação do conteúdo de seu site é preciso ter em mente as expectativas de sua audiência. Eles são familiarizados com os termos que você utilizou? Eles associam os termos que você utilizou com o conteúdo em cada categoria? Evite termos que possam fazer sua audiência pensar sobre o que significam, ou sobre o que será que vão encontrar naquele tópico. Sua audiência e respectivos objetivos devem determinar como categorizar suas informações.
Quando conseguimos compreender a audiência do site e seus respectivos objetivos, teremos uma boa idéia de como eles esperam que as informações estejam organizadas. Com o objetivo de verificar se acertamos, é importante observar uma pessoa de sua audiência ou alguém de fora utilizando o site e analisar seus comentários.
Um teste simples que você pode fazer é pedir para membros de sua audiência organizarem cartões da maneira como lhes parecer mais lógia e comparar os resultados com o seu planejamento.
Quando você passa algum tempo na web pesquisando sobre os labels utilizados para apresentar categorias, você verá que os mais utilizados e auto-explicativos são utilizados em diversos sites. Alguns deles são "Portifólio", "Produtos", "Suporte", "Loja" e "Quem Somos". A pergunta que você pode fazer é "Como posso manter minha empresa única e ainda ter labels compreensívos e claros?". A resposta está na apresentação visual.
Os labels podem ser criados com base em tópicos, como tarefas do usuário, metáfora utilizada no site, audiência específica, ou ainda em sequência linear.
Depois de organizar será necessário informar a sua audiência sobre o conteúdo do site através dos elementos de navegação. Alguns elementos de navegação são: caixas de busca, menus horizontais e verticais, índices, tabelas de conteúdo, mapas do site, diretórios, gráficos, links, e links âncora. Estes elementos podem ser globais (existentes em todo o site) ou locais (existentes em subseções ou em uma página individual do site). Independente dos elementos que você utilize em seu site, eles terão o mesmo objetivo: orientar o acesso ao site.
Com uma navegação bem organizada e apresentada seus visitantes saberão onde estão, como chegaram onde estão, e onde eles podem ir em seguida.
Elementos de navegação que precisam estar presentes em todas as páginas do site: Link para página inicial, Identificação do site, Links de navegação principal, ferramentas de navegação no comprimeito horizontal, Utilitários no comprimento horizontal, Informações de contato.
segunda-feira, 19 de abril de 2010
Uma visão sobre usabilidade na web
Existem três áreas que contribuem para uma experiência de qualidade superior na web, são elas: técnica (como o site é construído), estrutural (como o site é organizado), e visual (como o site aparece para sua audiência.
A apresentação visual de um site faz muito mais do que ser bonito. Ela organiza informações de uma maneira indicativa de suas funções, engaja e direciona seus visitantes, cria uma personalidade distinta e apropriada, fornece impacto emocional e relacionado.
Na fase de planejamento é necessário ter em mente que o site tem o objetivo de comunicar, você precisa saber o que vai ser dito, para quem, e como. As respostas a estas questões fornecem um guia para seguir através do processo de design do web site.
A comunicação, de uma maneira geral, acontece através da linguagem, gestos, expressões faciais, entonações, espaço, tempo, cultura, imagens, ações, silêncio, interatividade, e outras.
Na web é preciso mais do que uma comunicação com palavras, significa pensar sobre como imagens, texto, organização, interação, movimento e som podem trabalhar juntos para criar apresentações bem sucedidas.
A web é um meio de comunicação e portanto, designs eficiente acontece com comunicação eficiente, e podemos pensar nos desafios de usabilidade como desafios de comunicação.
Para criar um web site que efetivamente transmite a mensagem desejada, é necessário começar fazendo algumas perguntas: qual é o objetivo do site? quem é a audiência do site? como será feita a comunicação? e assim por diante.
Para criar a presença de seus clientes na web significa compreende-los, o que fazem, o que querem, e como eles esperam que seja feito. Sabendo que seus clientes, podem ser você mesmo, ou um departamento da empresa em que trabalha.
Conhecer seus clientes envolve alguma leitura e muita conversa, especialmente muitas questões a serem respondidas. Assim antes de começar a "conversar" com seus clientes, você precisa aprender o que eles querem dizer. O primeiro passo envolve a leitura de documentos e brochuras sobre seus negócios. Examinar planos de negócio e plano de marketing, verificando os produtos comercializados, ou pesquisando concorrentes e desafios na industria em que eles estão inseridos. É necessário entender os clientes, suas intenções e seu fóco, assim como suas limitações. Sempre trará benefícios, sentar com alguns empregados da empresa para obter as suas descrições pessoais, com suas palavras, saber suas opinições sobre a empersa. E não tenha medo de fazer muitas e muitas perguntas, porque apenas com uma clara visão sobre os objetivos e perfil do seu cliente você poderá falar com e para eles. A resposta mais importante para "Quem é seu cliente?" é entender o que seu cliente faz, para quem, e porquê. Quando chegar a hora de se comunicar com seus clientes, tenha certeza de que esta informação esteja clara.
Depois de saber mais sobre a empresa do Johnn do que ele mesmo, você precisará compreender porque a empresa dele precisa estar na internet. Ao desenvolver o design para uma empresa, é seu trabalho compreender suas intenções e direção. Você precisa definir o problema.
A pergunta principal é "Qual necessidade o site irá resolver?". Emitir informações e suporte técnico para um produto? Fornecer ferramentas educacionais para uma escola? Promover a carreira solo de um músico? O designer precisa determinar a melhor maneira para atender as necessidades de seus clientes, e acredite ou não, esta maneira pode ser diferente do que o cliente acredita que é necessário. E esta é a razão pela qual é importante conhecer as necessidades dos clientes independente da internet. Quando você começa a falar sobre elementos do web site, você já estará pensando sobre possíveis soluções.
"Quem é sua audiência?" não é apenas uma questão. É uma série de perguntas que precisam ser respondidas para que o designer saiba com quem o site irá se comunicar. As respostas para esta pergunta também fornecerão ajuda para conhecer os indivíduos que farão parte da sua audiência. Algumas perguntas a serem respondidas são: Qual é a idade da audiência pretendida? Que tipo de experiência eles terão? Quanto eles conhecem a empresa de seu cliente? Quanto de experiência eles tem com a web? Qual tipo de cultura compartilhada eles tem como uma audiência? Quais são seus objetivos? A resposta a estas e outras perguntas irá ajudar você a determinar o conteúdo necessário dentro do seu web site, e mais importante, irá ajudar a determinar qual conteúdo você não precisará no seu site.
Talvez a questão mais importante sobre a sua audiência seja "Qual é sua proposta para vir ao seu site?". Pense no que eles querem fazer, e como suas necessidades serão atendidas. Os visitantes do seu site podem querer encontrar informações sobre o uso dos produtos, ou podem querer saber quem foi o artilheiro no último jogo de futebol da noite anterior. Antecipando estas questões, você pode criar sites que atendem e superam as expectativas de seus visitantes. Não basta somente atender as expectitivas de seus visitantes, mas também é necessário entender como eles esperam fazer uso do site.
Outro fator importante é saber como é a linguagem de comunicação utilizada pela sua audiência. Por exemplo, a conotação da cor vermelha para o publico relacionado a finanças é associado com resultados negativos, e investidores podem facilmente interpretar a cor vermelha no texto como uma notícia ruim.
Saiba o que entende como útil e efetivo, e apresente as informações desta maneira. Algumas questões relacionadas são: "Os clientes precisam de mais imagens para entender conceitos apresentados ou eles estão mais inclinados a informações apresentadas em formato tabular?". Outra questão importante neste ponto é saber se sua audiência sente-se confortável com o uso da internet? Quais os tipos de operações que eles fazem tipicamente na internet? O que eles irão esperar do site? Pode ser útil examinar outros sites em segmentos similares e ver como a apresentação para clientes é conduzida.
Outra técnica frequentemente utilizada para melhor compreender sua audiência é o uso de cenários. Um cenário é um esboço de porque os integrantes de sua audiência visitarão o site. O cenário inclui informações como, objetivos dos visitantes, a melhor maneira de realizar o objetivo, e o resultado ideal para o visitante. Podemos imaginar um site de receitas, onde existe uma diversidade de cenários possíveis: o visitante precisa criar um registro para o casamento que acontecerá, um visitante com conhecimentos que busca utensílios específicos, um visitante que está procurando um presente para um amigo, ou um visitante que recebeu uma indicação para o site e quer conhecer a empresa.
Os cenários são úteis para enxergar segundo os olhos dos usuários do site. Quando uma decisão de design precisa ser tomada, você pode perguntar, "Como a Amanda espera que isto aconteça?". Quando mais específico for o cenário, mais fácil será responder a esta pergunta. Veja o exemplo abaixo:
Perfil:
Nome: Amanda Santos
Sexo: Feminino
Idade: 28
Residência: Apartamento pequeno no bairro Jardim da Penha
Hobies: Revistas e publicações, Teatros no centro da cidade, cozinhar as vezes
Razão para visitar o site:
Ela quer construir um livro de receitas de alta qualidade, porque está cansada da baixa qualidade das receitas atuais.
Expectativa:
Ela quer ter acesso aos produtos de maneira organizada por ingredientes, ou custo, e quer ver uma descrição destes materiais, especialmente sua durabilidade
Resultado Ideal:
Ela quer comparar produtos da maneira como escolheu e comprá-los facilmente
Ao criar design para oferecer diversas opções, você pode fornecer acesso a uma seção de talheres, para uma seção de idéias de presentes, entre outras.
Em breve publicarei mais posts relacionados a design de web sites.
A apresentação visual de um site faz muito mais do que ser bonito. Ela organiza informações de uma maneira indicativa de suas funções, engaja e direciona seus visitantes, cria uma personalidade distinta e apropriada, fornece impacto emocional e relacionado.
Na fase de planejamento é necessário ter em mente que o site tem o objetivo de comunicar, você precisa saber o que vai ser dito, para quem, e como. As respostas a estas questões fornecem um guia para seguir através do processo de design do web site.
A comunicação, de uma maneira geral, acontece através da linguagem, gestos, expressões faciais, entonações, espaço, tempo, cultura, imagens, ações, silêncio, interatividade, e outras.
Na web é preciso mais do que uma comunicação com palavras, significa pensar sobre como imagens, texto, organização, interação, movimento e som podem trabalhar juntos para criar apresentações bem sucedidas.
A web é um meio de comunicação e portanto, designs eficiente acontece com comunicação eficiente, e podemos pensar nos desafios de usabilidade como desafios de comunicação.
Para criar um web site que efetivamente transmite a mensagem desejada, é necessário começar fazendo algumas perguntas: qual é o objetivo do site? quem é a audiência do site? como será feita a comunicação? e assim por diante.
Para criar a presença de seus clientes na web significa compreende-los, o que fazem, o que querem, e como eles esperam que seja feito. Sabendo que seus clientes, podem ser você mesmo, ou um departamento da empresa em que trabalha.
Conhecer seus clientes envolve alguma leitura e muita conversa, especialmente muitas questões a serem respondidas. Assim antes de começar a "conversar" com seus clientes, você precisa aprender o que eles querem dizer. O primeiro passo envolve a leitura de documentos e brochuras sobre seus negócios. Examinar planos de negócio e plano de marketing, verificando os produtos comercializados, ou pesquisando concorrentes e desafios na industria em que eles estão inseridos. É necessário entender os clientes, suas intenções e seu fóco, assim como suas limitações. Sempre trará benefícios, sentar com alguns empregados da empresa para obter as suas descrições pessoais, com suas palavras, saber suas opinições sobre a empersa. E não tenha medo de fazer muitas e muitas perguntas, porque apenas com uma clara visão sobre os objetivos e perfil do seu cliente você poderá falar com e para eles. A resposta mais importante para "Quem é seu cliente?" é entender o que seu cliente faz, para quem, e porquê. Quando chegar a hora de se comunicar com seus clientes, tenha certeza de que esta informação esteja clara.
Depois de saber mais sobre a empresa do Johnn do que ele mesmo, você precisará compreender porque a empresa dele precisa estar na internet. Ao desenvolver o design para uma empresa, é seu trabalho compreender suas intenções e direção. Você precisa definir o problema.
A pergunta principal é "Qual necessidade o site irá resolver?". Emitir informações e suporte técnico para um produto? Fornecer ferramentas educacionais para uma escola? Promover a carreira solo de um músico? O designer precisa determinar a melhor maneira para atender as necessidades de seus clientes, e acredite ou não, esta maneira pode ser diferente do que o cliente acredita que é necessário. E esta é a razão pela qual é importante conhecer as necessidades dos clientes independente da internet. Quando você começa a falar sobre elementos do web site, você já estará pensando sobre possíveis soluções.
"Quem é sua audiência?" não é apenas uma questão. É uma série de perguntas que precisam ser respondidas para que o designer saiba com quem o site irá se comunicar. As respostas para esta pergunta também fornecerão ajuda para conhecer os indivíduos que farão parte da sua audiência. Algumas perguntas a serem respondidas são: Qual é a idade da audiência pretendida? Que tipo de experiência eles terão? Quanto eles conhecem a empresa de seu cliente? Quanto de experiência eles tem com a web? Qual tipo de cultura compartilhada eles tem como uma audiência? Quais são seus objetivos? A resposta a estas e outras perguntas irá ajudar você a determinar o conteúdo necessário dentro do seu web site, e mais importante, irá ajudar a determinar qual conteúdo você não precisará no seu site.
Talvez a questão mais importante sobre a sua audiência seja "Qual é sua proposta para vir ao seu site?". Pense no que eles querem fazer, e como suas necessidades serão atendidas. Os visitantes do seu site podem querer encontrar informações sobre o uso dos produtos, ou podem querer saber quem foi o artilheiro no último jogo de futebol da noite anterior. Antecipando estas questões, você pode criar sites que atendem e superam as expectativas de seus visitantes. Não basta somente atender as expectitivas de seus visitantes, mas também é necessário entender como eles esperam fazer uso do site.
Outro fator importante é saber como é a linguagem de comunicação utilizada pela sua audiência. Por exemplo, a conotação da cor vermelha para o publico relacionado a finanças é associado com resultados negativos, e investidores podem facilmente interpretar a cor vermelha no texto como uma notícia ruim.
Saiba o que entende como útil e efetivo, e apresente as informações desta maneira. Algumas questões relacionadas são: "Os clientes precisam de mais imagens para entender conceitos apresentados ou eles estão mais inclinados a informações apresentadas em formato tabular?". Outra questão importante neste ponto é saber se sua audiência sente-se confortável com o uso da internet? Quais os tipos de operações que eles fazem tipicamente na internet? O que eles irão esperar do site? Pode ser útil examinar outros sites em segmentos similares e ver como a apresentação para clientes é conduzida.
Outra técnica frequentemente utilizada para melhor compreender sua audiência é o uso de cenários. Um cenário é um esboço de porque os integrantes de sua audiência visitarão o site. O cenário inclui informações como, objetivos dos visitantes, a melhor maneira de realizar o objetivo, e o resultado ideal para o visitante. Podemos imaginar um site de receitas, onde existe uma diversidade de cenários possíveis: o visitante precisa criar um registro para o casamento que acontecerá, um visitante com conhecimentos que busca utensílios específicos, um visitante que está procurando um presente para um amigo, ou um visitante que recebeu uma indicação para o site e quer conhecer a empresa.
Os cenários são úteis para enxergar segundo os olhos dos usuários do site. Quando uma decisão de design precisa ser tomada, você pode perguntar, "Como a Amanda espera que isto aconteça?". Quando mais específico for o cenário, mais fácil será responder a esta pergunta. Veja o exemplo abaixo:
Perfil:
Nome: Amanda Santos
Sexo: Feminino
Idade: 28
Residência: Apartamento pequeno no bairro Jardim da Penha
Hobies: Revistas e publicações, Teatros no centro da cidade, cozinhar as vezes
Razão para visitar o site:
Ela quer construir um livro de receitas de alta qualidade, porque está cansada da baixa qualidade das receitas atuais.
Expectativa:
Ela quer ter acesso aos produtos de maneira organizada por ingredientes, ou custo, e quer ver uma descrição destes materiais, especialmente sua durabilidade
Resultado Ideal:
Ela quer comparar produtos da maneira como escolheu e comprá-los facilmente
Ao criar design para oferecer diversas opções, você pode fornecer acesso a uma seção de talheres, para uma seção de idéias de presentes, entre outras.
Em breve publicarei mais posts relacionados a design de web sites.
domingo, 18 de abril de 2010
Microsoft Expression Blend - Silverlight Application - Apresentação 1
Ao criar um novo projeto Silverlight + Website no Blend, será criada uma solução contendo dois projetos:
- Silverlight Application1 e SilverlightApplication1Site. No projeto SilverlightApplication1 serão criados os seguintes arquivos e pastas:
- Pasta Reference
- Pasta Properties
- Arquivo App.xaml
- MainPage.xaml
Vamos ver agora uma descrição do código gerado automaticamente, e inserido pelo Blend na página MainPage.xaml.
A primeira linha é a tag de abertura para um elementro UserControl, e estará presente em todas as aplicações Silverlight.
A segunda linha define o namespace usado pelo XAML.
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
O namespace xmlns:x contém informações que controlam a forma como os controles XAML interagem com o framework .NET.
A linha seguinte identifica este arquivo XAML como uma classe de objeto dentro da aplicação que foi criada junto com o projeto.
x:Class="SilverlightApplication1.MainPage"
E por último, algumas propriedades auto-explicativas.
Width="640" Height="480"
quinta-feira, 25 de março de 2010
O comando Split em C#
O comando Split no C# é utilizado para separar uma string de acordo com um caracter especificado. Este comando possui diversos overloads, mas não é o foco desta dica apresentá-los. Pretendo apenas alertar que a definição do caracter que será o parâmetro precisa estar entre aspas simples e não aspas duplas. O uso das aspas duplas causará um erro.
Como alterar o atributo background de um div com JavaScript
Sem blablabla...
document.getElementById("divBannerCabecalho").style.backgroundImage = "url(images/banner3.png)";
document.getElementById("divBannerCabecalho").style.backgroundImage = "url(images/banner3.png)";
terça-feira, 23 de março de 2010
Como modificar o método de inserir em um DataSet para recuperar o identificador do registro criado
A primeira coisa a fazer, contando que você já tenha criado o DataSet, contendo o comando Insert, gerado por padrão durante a sua criação, é modificar a query, incluindo o comando "SELECT SCOPE_IDENTITY();" ao final do comando de insert, depois do ponto e vírgula.
Exemplo:
NorthwindTableAdapters.ProductsTableAdapter productsAdapter = new NorthwindTableAdapters.ProductsTableAdapter();
// Add a new product
int new_productID = Convert.ToInt32(productsAdapter.InsertProduct("New Product", 1, 1, "12 tins per carton", 14.95m, 10, 0, 10, false));
// On second thought, delete the product
productsAdapter.Delete(new_productID);
Exemplo:
NorthwindTableAdapters.ProductsTableAdapter productsAdapter = new NorthwindTableAdapters.ProductsTableAdapter();
// Add a new product
int new_productID = Convert.ToInt32(productsAdapter.InsertProduct("New Product", 1, 1, "12 tins per carton", 14.95m, 10, 0, 10, false));
// On second thought, delete the product
productsAdapter.Delete(new_productID);
Diferença entre usar @@identity e scope_identity()
Em diversas fontes de informações sobre como recuperar o campo chave primária de um registro inserido em uma tabela, encontramos a sugestão de usar @@identity (Ex: SELECT @@IDENTITY AS [@@IDENTITY] GO) para recuperar o valor do campo de chave primária do registro. No entanto, este comando efetivamente recupera o identificador gerado, sem levar em consideração o contexto da inclusão, e consequentemente pode obter o identificador na tabela de replicação, dependendo do caso. Por exemplo, se o banco executar alguma operação de inclusão através de uma trigger, durante a execução do software, o retorno de @@identity estará incorreto. A utilização do comando scope_identity() sempre retornará o valor do identificador criado na tabela em que o registro foi inserido.
Exemplos:
USE AdventureWorks;
GO
INSERT INTO Person.ContactType ([Name]) VALUES ('Assistant to the Manager')
GO
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
GO
SELECT @@IDENTITY AS [@@IDENTITY]
GO
Exemplos:
USE AdventureWorks;
GO
INSERT INTO Person.ContactType ([Name]) VALUES ('Assistant to the Manager')
GO
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
GO
SELECT @@IDENTITY AS [@@IDENTITY]
GO
Sql Server T-SQL - Alguns links de referências
Segue abaixo uma lista de links no site MSDN, de referência aos comandos:
Sql Server T-SQL
Veja abaixo um exemplo de como criar um base de dados, seguido de exemplo de como criar uma tabela usando T-SQL.
Para criar um database que irá armazenar os objetos de dados, como tabelas, consultas, etc. Entre com o seguinte código:
- USE master;
GO
--Delete the TestData database if it exists.
IF EXISTS(SELECT * from sys.databases WHERE name='TestData')
BEGIN
DROP DATABASE TestData;
END
--Create a new database called TestData.
CREATE DATABASE TestData;
Press the F5 key to execute the code and create the database.
Para acessar a nova base de dados criada, entre com o seguinte código:
- USE TestData
GO
Para criar uma tabela na base de dados ativa, entre com seguinte código:
CREATE TABLE dbo.Produtos
(
ProdutoID int PRIMARY KEY NOT NULL,
ProdutoNome varchar(25) NOT NULL,
Preco Money NULL,
ProdutoDescricao text NULL
)
domingo, 21 de março de 2010
Como copiar um arquivo utilizando a classe FileInfo
Além de acessar dados sobre o arquivo, o objeto FileInfo permite operações a serem executadas em no arquivo. Novamente, uma vez que um objeto FileInfo válido é obtido, tudo que você precisa fazer é chamar o método CopyTo, para fazer uma cópia de seu arquivo, como o código abaixo demonstra:
//C#
FileInfo ourFile = new FileInfo(@"c:\teste.txt");
ourFile.CopyTo("c:\teste.bak");
Como obter informações sobre um arquivo
Para obter informações sobre um arquivo específico, faça o seguinte:
- Crie um objeto FileInfo passando como parâmetro o caminho do arquivo;
- Acesse as propriedades do objeto FileInfo;
Exemplo:
// C#
FileInfo ourFile = new FIleInfo("c:\teste.txt");
If (ourFile.Exists)
{
Console.WriteLine("Filename: {0}", oufFile.Name);
Console.WriteLine("Path: {0}", ourFile.FullName);
}
sexta-feira, 19 de março de 2010
Tabela de conversão de tamanhos de fontes
Nem todos os programas oferecem a opção de alterar a unidade de medida das fontes. Encontrei na internet a tabela abaixo mostrando a equivalência de tamanhos de fonte em pontos, pixels, Ems e percentual.
Points Pixels Ems Percent
6pt 8px 0.5em 50%
7pt 9px 0.55em 55%
7.5pt 10px 0.625em 62.5%
8pt 11px 0.7em 70%
9pt 12px 0.75em 75%
10pt 13px 0.8em 80%
10.5pt 14px 0.875em 87.5%
11pt 15px 0.95em 95%
12pt 16px 1em 100%
13pt 17px 1.05em 105%
13.5pt 18px 1.125em 112.5%
14pt 19px 1.2em 120%
14.5pt 20px 1.25em 125%
15pt 21px 1.3em 130%
16pt 22px 1.4em 140%
17pt 23px 1.45em 145%
18pt 24px 1.5em 150%
20pt 26px 1.6em 160%
22pt 29px 1.8em 180%
24pt 32px 2em 200%
26pt 35px 2.2em 220%
27pt 36px 2.25em 225%
28pt 37px 2.3em 230%
29pt 38px 2.35em 235%
30pt 40px 2.45em 245%
32pt 42px 2.55em 255%
34pt 45px 2.75em 275%
36pt 48px 3em 300%
Points Pixels Ems Percent
6pt 8px 0.5em 50%
7pt 9px 0.55em 55%
7.5pt 10px 0.625em 62.5%
8pt 11px 0.7em 70%
9pt 12px 0.75em 75%
10pt 13px 0.8em 80%
10.5pt 14px 0.875em 87.5%
11pt 15px 0.95em 95%
12pt 16px 1em 100%
13pt 17px 1.05em 105%
13.5pt 18px 1.125em 112.5%
14pt 19px 1.2em 120%
14.5pt 20px 1.25em 125%
15pt 21px 1.3em 130%
16pt 22px 1.4em 140%
17pt 23px 1.45em 145%
18pt 24px 1.5em 150%
20pt 26px 1.6em 160%
22pt 29px 1.8em 180%
24pt 32px 2em 200%
26pt 35px 2.2em 220%
27pt 36px 2.25em 225%
28pt 37px 2.3em 230%
29pt 38px 2.35em 235%
30pt 40px 2.45em 245%
32pt 42px 2.55em 255%
34pt 45px 2.75em 275%
36pt 48px 3em 300%
quarta-feira, 17 de fevereiro de 2010
Como alterar o texto do comando Select do GridView
Para alterar o texto do comando Select do GridView que é exibido automaticamente quando modificamos a propriedade AutoGenerateSelectButton="True", faça o seguinte:
1) Modifique o parametro de AutoGenerateSelectButton para False
AutoGenerateSelectButton="False"
2) Inclua a seguinte tag dentro de
1) Modifique o parametro de AutoGenerateSelectButton para False
AutoGenerateSelectButton="False"
2) Inclua a seguinte tag dentro de
quinta-feira, 4 de fevereiro de 2010
Solução simples para problema de exibição do web control asp:menu
Para resolver o problema de exibição do controle asp:menu quando visualizado através do navegador Internet Explorer 8. Existem dois públicos diretamente envolvidos com este problema: os visitantes das páginas que utilizam este browser; e os criadores do site.
A solução para os visitantes do site
Quando estamos visualizando as páginas a única maneira de contornar o problema é clicar no botão Modo de Compatibilidade (localizado ao lado direito da barra de navegação). Ao clicar neste botão a página será recarregada mas desta vez o Internet Explorer 8 está funcionando como se fosse a versão 7.
A solução para os desenvolvedores de web sites
A solução é simples: crie um estilo que atribua o valor 1 a propriedade z-index do web control (asp:menu). Como no exemplo abaixo:
.adjustedZIndex
{
z-index: 1;
}
E em seguida atribuir o nome do estilo (adjustedZIndex) à propriedade CssClass do controle asp:menu. Como no exemplo abaixo:
A solução para os visitantes do site
Quando estamos visualizando as páginas a única maneira de contornar o problema é clicar no botão Modo de Compatibilidade (localizado ao lado direito da barra de navegação). Ao clicar neste botão a página será recarregada mas desta vez o Internet Explorer 8 está funcionando como se fosse a versão 7.
A solução para os desenvolvedores de web sites
A solução é simples: crie um estilo que atribua o valor 1 a propriedade z-index do web control (asp:menu). Como no exemplo abaixo:
.adjustedZIndex
{
z-index: 1;
}
E em seguida atribuir o nome do estilo (adjustedZIndex) à propriedade CssClass do controle asp:menu. Como no exemplo abaixo:
domingo, 10 de janeiro de 2010
Atribuindo Parametros a um DataSource Programaticamente
Utilizo a rotina abaixo para atribuir parâmetros a um DataSorce (ex: AccessDataSource) programaticamente. Neste exemplo estou passando o texto localizado na célula e.Row.Cells(0).Text do GridView.
Protected Sub GridView2_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView2.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim s As SqlDataSource = CType(e.Row.FindControl("DS_Produtos"), SqlDataSource)
s.SelectParameters(0).DefaultValue = e.Row.Cells(0).Text
End If
End Sub
Protected Sub GridView2_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView2.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim s As SqlDataSource = CType(e.Row.FindControl("DS_Produtos"), SqlDataSource)
s.SelectParameters(0).DefaultValue = e.Row.Cells(0).Text
End If
End Sub
sexta-feira, 8 de janeiro de 2010
Usando IDictionary Para Listar Itens
Esta é uma das possíveis maneiras de criar uma lista de itens não repetidos de uma classe.
// Abaixo é definida a propriedade que "seta" os valores para o controle
// na interface
public IDictionary ListaDocumentos
{
set
{
this.dlDocumentos.DataSource = value;
this.dlDocumentos.DataBind();
}
}
// Aqui é criada a propriedade listaDocumento do tipo Dictionary
// contendo chave (long) e o respectivo conteúdo (Documento)
private Dictionary listaDocumento = new Dictionary();
public Dictionary ListaDocumento
{
get { return listaDocumento; }
}
// Abaixo está a rotina para atribuir os valores ao dicionário de
// Documentos
// Lista Documentos
foreach (Servico itemServico in req.ListaServico)
{
foreach (Documento itemDocumento in itemServico.ListaDocumento)
{
if (!this.ListaDocumento.ContainsKey(itemDocumento.Id))
{
this.ListaDocumento.Add(itemDocumento.Id, itemDocumento);
}
}
}
// E para atribuir a lista de documentos
UcImprimirRequerimentoProfissional.ListaDocumentos = this.ListaDocumento;
// Abaixo é definida a propriedade que "seta" os valores para o controle
// na interface
public IDictionary
{
set
{
this.dlDocumentos.DataSource = value;
this.dlDocumentos.DataBind();
}
}
// Aqui é criada a propriedade listaDocumento do tipo Dictionary
// contendo chave (long) e o respectivo conteúdo (Documento)
private Dictionary
public Dictionary
{
get { return listaDocumento; }
}
// Abaixo está a rotina para atribuir os valores ao dicionário de
// Documentos
// Lista Documentos
foreach (Servico itemServico in req.ListaServico)
{
foreach (Documento itemDocumento in itemServico.ListaDocumento)
{
if (!this.ListaDocumento.ContainsKey(itemDocumento.Id))
{
this.ListaDocumento.Add(itemDocumento.Id, itemDocumento);
}
}
}
// E para atribuir a lista de documentos
UcImprimirRequerimentoProfissional.ListaDocumentos = this.ListaDocumento;
Exemplo de Uso do Comando switch no C#
No exemplo abaixo é realizado um teste se DadosCadastrais é Masculino ou Feminino para em seguida atribuir o respectivo texto em letras maiúsculas.
string sexo = string.Empty;
switch (req.DadosCadastrais.Sexo)
{
case DadosCadastrais.Masculino: sexo = "MASCULINO" ; break;
case DadosCadastrais.Feminino : sexo = "FEMININO" ; break;
}
string sexo = string.Empty;
switch (req.DadosCadastrais.Sexo)
{
case DadosCadastrais.Masculino: sexo = "MASCULINO" ; break;
case DadosCadastrais.Feminino : sexo = "FEMININO" ; break;
}
Configurando uma propriedade como nullable
Segue abaixo um exemplo de como determinar uma propriedade como nullable.
public DateTime? DataExp
{
set {
if (value.HasValue)
lblDataExp.Text = value.Value.ToString("ddMMyyyy");
}
}
public DateTime? DataExp
{
set {
if (value.HasValue)
lblDataExp.Text = value.Value.ToString("ddMMyyyy");
}
}
DotNetNuke – Skin Package (Pacote de Skin)
Um pacote DNN Skin é um arquivo zipado contend uma coleção de arquivos HTML,CSS, Imagens e arquivos XML que podem ser instalados em um web site Dotnetnuke e fornece os elementos de design, e opções de layout para o conteúdo do website. Qualquer design de site que pode ser criado com HTML & CSS pode também ser convertido para um DNN Skin, transformado o site de estático em um gerenciável, escalável e dinâmico.
Um pacote skin básico precisa conter:
1. SkinName.html – Um arquivo HTML contendo os elementos de layout e o posicionamento dos sking tokens para o skin Dotnetnuke.
2. Skin.CSS – Um arquivo CSS global que é aplicado no skin do portal e admin do pacote. Skins CSS específicos podem ser incluídos em arquivos separados SkinName.CSS.
3. Skin.XML – Um arquivo XML global com as configurações para o DNN skin tokens. Configurações específicas podem ser especificadas em arquivos separados, como SkinName.xml, para configurações individuais.
4. SkinName.doctype.xml – Um arquivo XML contendo o doctype para o skin. (Caso não seja incluído será utilizado o doctype default).
Um pacote skin básico precisa conter:
1. SkinName.html – Um arquivo HTML contendo os elementos de layout e o posicionamento dos sking tokens para o skin Dotnetnuke.
2. Skin.CSS – Um arquivo CSS global que é aplicado no skin do portal e admin do pacote. Skins CSS específicos podem ser incluídos em arquivos separados SkinName.CSS.
3. Skin.XML – Um arquivo XML global com as configurações para o DNN skin tokens. Configurações específicas podem ser especificadas em arquivos separados, como SkinName.xml, para configurações individuais.
4. SkinName.doctype.xml – Um arquivo XML contendo o doctype para o skin. (Caso não seja incluído será utilizado o doctype default).
Singleton Pattern (Padrão Singleton)
Na engenharia de software, o padrão singleton é um padrão de design (design pattern) que é usado para restringir a instancia de uma classe para um objeto. Isto é útil quando apenas um objeto é necessário para coordenar ações pelo sistema. O conceito é algumas vezes generalizado para sistemas que operam de maneira mais eficiente quando apenas um objeto existe, ou aqueles que restringem as instancias a um certo número. Alguns consideram ele um anti-pattern, julgando que ele é super-utilizado (overused), e introduz limitação desnecessária em situações onde uma instância única de uma classe não é realmente necessária, e introduz global state dentro da aplicação.
// Exemplo Singleton C#
using System;
using System.Collections.Generic;
using System.Text;
using DAO;
using BEL;
using Utilitarios;
namespace BLL
{
public class InscricaoBLL
{
private static InscricaoBLL instancia = null;
private InscricaoBLL() { }
public static InscricaoBLL getInstance()
{
if (instancia == null) instancia = new InscricaoBLL();
return instancia;
}
public void inserirInscricao(Inscricao inscricao)
{
InscricaoDAO.getInstance().InserirInscricao(inscricao);
}
// Continua o código ...
}
}
// Exemplo Singleton C#
using System;
using System.Collections.Generic;
using System.Text;
using DAO;
using BEL;
using Utilitarios;
namespace BLL
{
public class InscricaoBLL
{
private static InscricaoBLL instancia = null;
private InscricaoBLL() { }
public static InscricaoBLL getInstance()
{
if (instancia == null) instancia = new InscricaoBLL();
return instancia;
}
public void inserirInscricao(Inscricao inscricao)
{
InscricaoDAO.getInstance().InserirInscricao(inscricao);
}
// Continua o código ...
}
}
Mensagens de Erro do ASP no IIS 7.5 do Windows 7
Esta postagem é para quem já teve problemas em exibir as mensagens de erro geradas pelo IIS 7.5 no Windows 7, ao desenvolver Web Sites na plataforma ASP.
Em primeiro lugar a localização do IIS no Windows 7 é a pasta Ferramentas Administrativa, em Todos os Programas; Selecione Gerenciador do Serviços de Informações da Internet (IIS) e repare na seção IIS, o ícone de acesos as configurações ASP. Ao abrir este item de configuração, serão exibidas três seções de configuração para aplicações ASP: Compilação, Comportamento e Serviços. Na página de configurações ASP, podemos definir as seguintes opções de configuração:
Elementos da Página do Recurso
Nome do elemento Descrição
Página Código [codePage]
Especifica a página de código padrão de um aplicativo ASP.
Habilitar Armazenamento em Buffer [bufferingOn]
Especifica se a saída de um aplicativo ASP deve ou não ser armazenada em buffer. O padrão é True.
Habilitar Codificação em Partes [enableChunkedEncoding]
Especifica se a codificação de transferência em partes HTTP 1.1 está ou não habilitada para o serviço de publicação na World Wide Web (serviço WWW). O padrão é True.
Habilitar Fallback HTML [enableAspHtmlFallback]
Controla o comportamento do ASP quando a fila de solicitações está cheia. Quando definido para True, o ASP pesquisará um arquivo HTML que tenha _asp adicionado ao nome do arquivo e retornará o arquivo, se ele for encontrado. Por exemplo, se o nome do arquivo .asp solicitado for Hello.asp, o nome do arquivo .htm retornado será Hello_asp.htm. Se o arquivo não for encontrado, um erro 500.13 (Servidor muito ocupado) HTTP será retornado ao cliente. O erro também será retornado se o valor for definido para False. O valor padrão do atributo é True.
Habilitar Caminhos Pai [enableParentPaths]
Especifica se uma página ASP permite ou não caminhos relativos ao diretório atual (usando a notação "...\") ou acima do diretório atual. O padrão é False.
Intervalo de Teste da Conexão Cliente [queueConnectionTestTime]
Especifica o período de tempo em que uma solicitação deve ser enfileirada. Caso a solicitação seja enfileirada além do tempo especificado, o ASP determina se o cliente ainda está conectado antes da execução da solicitação. Se o cliente não estiver mais conectado, a solicitação não será processada e será excluída da fila. O padrão é 00:00:03 segundos.
Limite Máximo do Corpo de Solicitação [maxRequestEntityAllowed]
Especifica o número máximo de bytes permitidos no corpo da entidade de uma solicitação ASP. O padrão é 200000 bytes.
Comprimento da Fila [requestQueueMax]
Especifica o número máximo de solicitações ASP simultâneas permitidas na fila. O padrão é 3000.
Tempo Limite da Fila de Solicitações [queueTimeout]
Especifica o período de tempo durante o qual um uma solicitação de script ASP tem permissão para aguardar na fila. O padrão é 00:00:00 (infinito).
Limite de Armazenamento em Buffer da Resposta [bufferingLimit]
Define o tamanho máximo do buffer ASP. Se o buffer de resposta estiver ativado, essa propriedade controlará o número máximo de bytes que uma página ASP poderá gravar no buffer de resposta antes que ocorra uma liberação. O padrão é 4194304 bytes.
Tempo Limite do Script [scriptTimeout]
Especifica o tempo padrão durante o qual as páginas ASP têm permissão para serem executadas antes da tentativa de parada do script e de gravação de um evento no log de eventos do Windows. O padrão é 00:01:30 minutos.
Limite de Threads por Processador [processorThreadMax]
Especifica o número máximo de threads de trabalho por processador que o IIS pode criar para executar solicitações ASP. O padrão é 25.
ID da Localidade [lcid]
Define o identificador da localidade padrão (LCID) de um aplicativo. Os LCIDs definem quais serão os formatos de data, hora e moeda. O padrão é 1033, que representa inglês dos EUA (en-us).
Reiniciar ao Alterar a Configuração [enableApplicationRestart]
Determina se um aplicativo ASP pode ou não ser reiniciado automaticamente quando é feita uma alteração nas propriedades de configuração críticas do aplicativo. O padrão é True.
Calcular Números da Linha [calcLineNumber]
Especifica se o ASP deve ou não calcular e armazenar o número de cada linha de código executado para que o número possa ser fornecido em um relatório de erro. O padrão é True.
Capturar Exceções do Componente COM [exceptionCatchEnable]
Especifica se as páginas ASP interceptam exceções acionadas por componentes. Caso definida para False, a página ASP não captura exceções acionadas pelo componente. Isso pode ocasionar a manipulação da exceção por outra camada do processo, como VB Script ou o processo de trabalho do IIS (que normalmente encerra o processo de trabalho). O padrão é True.
Habilitar Depuração no Lado do Cliente [appAllowClientDebug]
Especifica se a depuração no lado do cliente ASP está habilitada. O padrão é False.
Habilitar Solicitações de Erro em Log [logErrorRequests]
Controla se o servidor Web grava erros ASP na seção do aplicativo do log de eventos do Windows. Por padrão, os erros ASP são gravados no navegador cliente e nos arquivos de log do IIS. O padrão é True.
Habilitar Depuração no Lado do Servidor [appAllowDebugging]
Especifica se a depuração ASP está habilitada no servidor. O padrão é False.
Registrar Erros no Log do NT [errorsToNTLog]
Especifica se os erros ASP são gravados no log de eventos do Windows. Por padrão, os erros ASP são gravados no navegador cliente e nos arquivos de log do IIS. O padrão é False.
Executar ao Encerrar Funções Anonimamente [runOnEndAnonymously]
Especifica se as funções SessionOnEnd e ApplicationOnEnd ASP globais devem ser executadas como usuário anônimo. Caso definidas para False, as funções não são executadas. O padrão é True.
Criar Script para Mensagem de Erro [scriptErrorMessage]
Especifica a mensagem de erro a ser enviada para o navegador caso nenhum erro de depuração específico seja enviado ao cliente. A mensagem padrão enviada é "Erro no servidor ao processar a URL. Contate o administrador do sistema."
Enviar Erros para Navegador [scriptErrorSentToBrowser]
Especifica se o servidor Web grava as especificações de depuração (nome do arquivo, erro, número da linha, descrição) no navegador do cliente, além de registrá-las no log de solicitações do IIS. O padrão é True.
Linguagem do Script [scriptLanguage]
Especifica a linguagem do script padrão para todos os aplicativos ASP executados no servidor Web. O padrão é VBScript.
Caminho de Diretório do Cache [diskTemplateCacheDirectory]
Contém o nome do diretório usado pelo ASP para armazenar modelos ASP compilados no disco depois do estouro do cache da memória. O padrão é raiz_do_sistema\inetpub\temp\Modelos ASP Consolidados.
Habilitar Armazenamento em Cache da Biblioteca de Tipos [enableTypelibCache]
Especifica se as bibliotecas de tipos são armazenadas no servidor. O padrão é True.
Máximo de Arquivos Armazenados em Cache no Disco [maxDiskTemplateCacheFiles]
Especifica o número máximo de modelos ASP compilados que podem ser armazenados. O padrão é 2000.
Máximo de Arquivos Armazenados em Cache na Memória [scriptFileCacheSize]
Especifica o número dos arquivos de script previamente compilados em cache. Se for definido como 0, nenhum arquivo de script será armazenado em cache. Se estiver definido para 4291967295, todos os arquivos de script solicitados serão armazenados em cache. A propriedade é usada para ajustar o desempenho, dependendo da quantidade de memória disponível e do volume de tráfego dos arquivos de script. O padrão é 500.
Máximo de Mecanismos de Script Armazenados em Cache [scriptEngineCacheMax]
Especifica o número máximo de mecanismos de script que as páginas ASP manterão em cache na memória. O padrão é 250.
Habilitar Componente Lado a Lado [appServiceFlags]
Habilita assemblies COM+ lado a lado, que permitem que aplicativos ASP especifiquem a versão de um componente DLL ou COM do sistema a ser usado. O padrão é False.
Habilitar Controlador [appServiceFlags]
Habilita o controlador COM+, que permite aos administradores ou desenvolvedores depurarem aplicativos ASP. O padrão é False.
Executar em MTA [executeInMta]
Especifica se o ASP pode ou não executar scripts em um compartimento com vários threads. O padrão é False.
Respeitar Modelo de Threading do Componente [trackThreadingModel]
Especifica se o IIS examina o modelo de threading de todos os componentes criados pelo aplicativo. O padrão é False.
ID da Participação [partitionID]
Defina a propriedade para GUID da partição COM+. Quando a propriedade estiver definida, defina o elemento Usar Partição para True.
Componente Lado a Lado [sxsName]
Defina a propriedade para o nome do aplicativo COM+. Quando a propriedade estiver definida, defina o elemento Habilitar Componente Lado a Lado para True.
Usar Partição [appServiceFlags]
Isola aplicativos em partições COM+ próprias. Quando a propriedade estiver definida para True, você deve definir um valor para o elemento Identificação da Partição. O padrão é False.
Habilitar Estado da Sessão [allowSessionState]
Habilita a persistência de estado da sessão para o aplicativo. O padrão é True.
Máx. de Sessões [max]
Especifica o número máximo de sessões simultâneas a serem permitidas pelo IIS. O padrão é 2147483647.
Nova ID em Conexão Segura [keepSessionIdSecure]
Gera um novo cookie quando é feita uma transição de uma conexão não segura para uma segura. O padrão é True.
Tempo Limite [timeout]
Especifica o tempo durante o qual o objeto de uma sessão é mantido após a última solicitação associada ao objeto. O padrão é 00:20:00.
A tabela acima foi copiada do Help da janela de configurações ASP do IIS 7.5.
Em primeiro lugar a localização do IIS no Windows 7 é a pasta Ferramentas Administrativa, em Todos os Programas; Selecione Gerenciador do Serviços de Informações da Internet (IIS) e repare na seção IIS, o ícone de acesos as configurações ASP. Ao abrir este item de configuração, serão exibidas três seções de configuração para aplicações ASP: Compilação, Comportamento e Serviços. Na página de configurações ASP, podemos definir as seguintes opções de configuração:
Elementos da Página do Recurso
Nome do elemento Descrição
Página Código [codePage]
Especifica a página de código padrão de um aplicativo ASP.
Habilitar Armazenamento em Buffer [bufferingOn]
Especifica se a saída de um aplicativo ASP deve ou não ser armazenada em buffer. O padrão é True.
Habilitar Codificação em Partes [enableChunkedEncoding]
Especifica se a codificação de transferência em partes HTTP 1.1 está ou não habilitada para o serviço de publicação na World Wide Web (serviço WWW). O padrão é True.
Habilitar Fallback HTML [enableAspHtmlFallback]
Controla o comportamento do ASP quando a fila de solicitações está cheia. Quando definido para True, o ASP pesquisará um arquivo HTML que tenha _asp adicionado ao nome do arquivo e retornará o arquivo, se ele for encontrado. Por exemplo, se o nome do arquivo .asp solicitado for Hello.asp, o nome do arquivo .htm retornado será Hello_asp.htm. Se o arquivo não for encontrado, um erro 500.13 (Servidor muito ocupado) HTTP será retornado ao cliente. O erro também será retornado se o valor for definido para False. O valor padrão do atributo é True.
Habilitar Caminhos Pai [enableParentPaths]
Especifica se uma página ASP permite ou não caminhos relativos ao diretório atual (usando a notação "...\") ou acima do diretório atual. O padrão é False.
Intervalo de Teste da Conexão Cliente [queueConnectionTestTime]
Especifica o período de tempo em que uma solicitação deve ser enfileirada. Caso a solicitação seja enfileirada além do tempo especificado, o ASP determina se o cliente ainda está conectado antes da execução da solicitação. Se o cliente não estiver mais conectado, a solicitação não será processada e será excluída da fila. O padrão é 00:00:03 segundos.
Limite Máximo do Corpo de Solicitação [maxRequestEntityAllowed]
Especifica o número máximo de bytes permitidos no corpo da entidade de uma solicitação ASP. O padrão é 200000 bytes.
Comprimento da Fila [requestQueueMax]
Especifica o número máximo de solicitações ASP simultâneas permitidas na fila. O padrão é 3000.
Tempo Limite da Fila de Solicitações [queueTimeout]
Especifica o período de tempo durante o qual um uma solicitação de script ASP tem permissão para aguardar na fila. O padrão é 00:00:00 (infinito).
Limite de Armazenamento em Buffer da Resposta [bufferingLimit]
Define o tamanho máximo do buffer ASP. Se o buffer de resposta estiver ativado, essa propriedade controlará o número máximo de bytes que uma página ASP poderá gravar no buffer de resposta antes que ocorra uma liberação. O padrão é 4194304 bytes.
Tempo Limite do Script [scriptTimeout]
Especifica o tempo padrão durante o qual as páginas ASP têm permissão para serem executadas antes da tentativa de parada do script e de gravação de um evento no log de eventos do Windows. O padrão é 00:01:30 minutos.
Limite de Threads por Processador [processorThreadMax]
Especifica o número máximo de threads de trabalho por processador que o IIS pode criar para executar solicitações ASP. O padrão é 25.
ID da Localidade [lcid]
Define o identificador da localidade padrão (LCID) de um aplicativo. Os LCIDs definem quais serão os formatos de data, hora e moeda. O padrão é 1033, que representa inglês dos EUA (en-us).
Reiniciar ao Alterar a Configuração [enableApplicationRestart]
Determina se um aplicativo ASP pode ou não ser reiniciado automaticamente quando é feita uma alteração nas propriedades de configuração críticas do aplicativo. O padrão é True.
Calcular Números da Linha [calcLineNumber]
Especifica se o ASP deve ou não calcular e armazenar o número de cada linha de código executado para que o número possa ser fornecido em um relatório de erro. O padrão é True.
Capturar Exceções do Componente COM [exceptionCatchEnable]
Especifica se as páginas ASP interceptam exceções acionadas por componentes. Caso definida para False, a página ASP não captura exceções acionadas pelo componente. Isso pode ocasionar a manipulação da exceção por outra camada do processo, como VB Script ou o processo de trabalho do IIS (que normalmente encerra o processo de trabalho). O padrão é True.
Habilitar Depuração no Lado do Cliente [appAllowClientDebug]
Especifica se a depuração no lado do cliente ASP está habilitada. O padrão é False.
Habilitar Solicitações de Erro em Log [logErrorRequests]
Controla se o servidor Web grava erros ASP na seção do aplicativo do log de eventos do Windows. Por padrão, os erros ASP são gravados no navegador cliente e nos arquivos de log do IIS. O padrão é True.
Habilitar Depuração no Lado do Servidor [appAllowDebugging]
Especifica se a depuração ASP está habilitada no servidor. O padrão é False.
Registrar Erros no Log do NT [errorsToNTLog]
Especifica se os erros ASP são gravados no log de eventos do Windows. Por padrão, os erros ASP são gravados no navegador cliente e nos arquivos de log do IIS. O padrão é False.
Executar ao Encerrar Funções Anonimamente [runOnEndAnonymously]
Especifica se as funções SessionOnEnd e ApplicationOnEnd ASP globais devem ser executadas como usuário anônimo. Caso definidas para False, as funções não são executadas. O padrão é True.
Criar Script para Mensagem de Erro [scriptErrorMessage]
Especifica a mensagem de erro a ser enviada para o navegador caso nenhum erro de depuração específico seja enviado ao cliente. A mensagem padrão enviada é "Erro no servidor ao processar a URL. Contate o administrador do sistema."
Enviar Erros para Navegador [scriptErrorSentToBrowser]
Especifica se o servidor Web grava as especificações de depuração (nome do arquivo, erro, número da linha, descrição) no navegador do cliente, além de registrá-las no log de solicitações do IIS. O padrão é True.
Linguagem do Script [scriptLanguage]
Especifica a linguagem do script padrão para todos os aplicativos ASP executados no servidor Web. O padrão é VBScript.
Caminho de Diretório do Cache [diskTemplateCacheDirectory]
Contém o nome do diretório usado pelo ASP para armazenar modelos ASP compilados no disco depois do estouro do cache da memória. O padrão é raiz_do_sistema\inetpub\temp\Modelos ASP Consolidados.
Habilitar Armazenamento em Cache da Biblioteca de Tipos [enableTypelibCache]
Especifica se as bibliotecas de tipos são armazenadas no servidor. O padrão é True.
Máximo de Arquivos Armazenados em Cache no Disco [maxDiskTemplateCacheFiles]
Especifica o número máximo de modelos ASP compilados que podem ser armazenados. O padrão é 2000.
Máximo de Arquivos Armazenados em Cache na Memória [scriptFileCacheSize]
Especifica o número dos arquivos de script previamente compilados em cache. Se for definido como 0, nenhum arquivo de script será armazenado em cache. Se estiver definido para 4291967295, todos os arquivos de script solicitados serão armazenados em cache. A propriedade é usada para ajustar o desempenho, dependendo da quantidade de memória disponível e do volume de tráfego dos arquivos de script. O padrão é 500.
Máximo de Mecanismos de Script Armazenados em Cache [scriptEngineCacheMax]
Especifica o número máximo de mecanismos de script que as páginas ASP manterão em cache na memória. O padrão é 250.
Habilitar Componente Lado a Lado [appServiceFlags]
Habilita assemblies COM+ lado a lado, que permitem que aplicativos ASP especifiquem a versão de um componente DLL ou COM do sistema a ser usado. O padrão é False.
Habilitar Controlador [appServiceFlags]
Habilita o controlador COM+, que permite aos administradores ou desenvolvedores depurarem aplicativos ASP. O padrão é False.
Executar em MTA [executeInMta]
Especifica se o ASP pode ou não executar scripts em um compartimento com vários threads. O padrão é False.
Respeitar Modelo de Threading do Componente [trackThreadingModel]
Especifica se o IIS examina o modelo de threading de todos os componentes criados pelo aplicativo. O padrão é False.
ID da Participação [partitionID]
Defina a propriedade para GUID da partição COM+. Quando a propriedade estiver definida, defina o elemento Usar Partição para True.
Componente Lado a Lado [sxsName]
Defina a propriedade para o nome do aplicativo COM+. Quando a propriedade estiver definida, defina o elemento Habilitar Componente Lado a Lado para True.
Usar Partição [appServiceFlags]
Isola aplicativos em partições COM+ próprias. Quando a propriedade estiver definida para True, você deve definir um valor para o elemento Identificação da Partição. O padrão é False.
Habilitar Estado da Sessão [allowSessionState]
Habilita a persistência de estado da sessão para o aplicativo. O padrão é True.
Máx. de Sessões [max]
Especifica o número máximo de sessões simultâneas a serem permitidas pelo IIS. O padrão é 2147483647.
Nova ID em Conexão Segura [keepSessionIdSecure]
Gera um novo cookie quando é feita uma transição de uma conexão não segura para uma segura. O padrão é True.
Tempo Limite [timeout]
Especifica o tempo durante o qual o objeto de uma sessão é mantido após a última solicitação associada ao objeto. O padrão é 00:20:00.
A tabela acima foi copiada do Help da janela de configurações ASP do IIS 7.5.
Recuperar Valor em Célula do GridView no RowUpdating
O exemplo descrito aqui apresenta uma página que contém um GridView contendo sete colunas. Na coluna cinco é apresentado o nome de um arquivo cadastrado e armazenado em uma pasta no diretório raiz da aplicação. No EditItemTemplate da referida coluna eu tenho os controles Label, que apresenta o nome do arquivo atualmente cadastrado, e FileUpload para permitir enviar outro arquivo que substituirá o arquivo atual. Ao substituir o arquivo atual no banco também será necessário apagar o arquivo antigo do disco. O código abaixo demonstra o uso do evento RowUpdating para executar todas as operações necessárias.
// Gravar o arquivo do modo de editar
protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
// Definir caminho do arquivo
string fileName = "";
string savePath = Server.MapPath("~/uploads/");
// Pegar nome do arquivo antigo
string antigoDocumento = ((Label)((GridView)sender).Rows[e.RowIndex].Cells[5].Controls[1]).Text;
antigoDocumento = string.Concat(savePath, antigoDocumento);
try
{
// Excluir arquivo antigo
if (File.Exists(antigoDocumento))
{
File.Delete(antigoDocumento);
}
// Verificar se existe arquivo no controle FileUpload e gravar em disco
if (((FileUpload)((GridView)sender).Rows[e.RowIndex].Cells[colunaArquivo].FindControl("FileUpload2")).HasFile)
{
fileName = ((FileUpload)((GridView)sender).Rows[e.RowIndex].Cells[colunaArquivo].FindControl("FileUpload2")).FileName;
savePath += fileName;
((FileUpload)((GridView)sender).Rows[e.RowIndex].Cells[colunaArquivo].FindControl("FileUpload2")).SaveAs(savePath);
//FileUpload1.SaveAs(savePath);
}
// Atribuir o nome do arquivo a coleção e.NewValues para a atualização do registro no DataTable
e.NewValues["DOCTO"] = ((FileUpload)((GridView)sender).Rows[e.RowIndex].Cells[colunaArquivo].FindControl("FileUpload2")).FileName;
}
catch (Exception ex)
{
lblErro3.Text = "Ocorreu um erro: " + ex.ToString();
}
}
// Gravar o arquivo do modo de editar
protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
// Definir caminho do arquivo
string fileName = "";
string savePath = Server.MapPath("~/uploads/");
// Pegar nome do arquivo antigo
string antigoDocumento = ((Label)((GridView)sender).Rows[e.RowIndex].Cells[5].Controls[1]).Text;
antigoDocumento = string.Concat(savePath, antigoDocumento);
try
{
// Excluir arquivo antigo
if (File.Exists(antigoDocumento))
{
File.Delete(antigoDocumento);
}
// Verificar se existe arquivo no controle FileUpload e gravar em disco
if (((FileUpload)((GridView)sender).Rows[e.RowIndex].Cells[colunaArquivo].FindControl("FileUpload2")).HasFile)
{
fileName = ((FileUpload)((GridView)sender).Rows[e.RowIndex].Cells[colunaArquivo].FindControl("FileUpload2")).FileName;
savePath += fileName;
((FileUpload)((GridView)sender).Rows[e.RowIndex].Cells[colunaArquivo].FindControl("FileUpload2")).SaveAs(savePath);
//FileUpload1.SaveAs(savePath);
}
// Atribuir o nome do arquivo a coleção e.NewValues para a atualização do registro no DataTable
e.NewValues["DOCTO"] = ((FileUpload)((GridView)sender).Rows[e.RowIndex].Cells[colunaArquivo].FindControl("FileUpload2")).FileName;
}
catch (Exception ex)
{
lblErro3.Text = "Ocorreu um erro: " + ex.ToString();
}
}
Uso do Translate do Oracle
Recebi uma solicitação de um cliente da empresa manifestando problemas com o recurso de recuperar senha do site. Quando os usuários entravam com as informações pessoais para cadastrar uma nova senha, todos os nomes que apresentavam acentuação apresentavam problemas. A solução foi fazer uma função que acertava as informações alterando os caracteres com acentos para que ficassem sem acentos. Mas ainda foi preciso usar a função Translate do Oracle (banco de dados usado na aplicação em questão) para evitar problemas caso alguma informação estivesse com acentuação no banco de dados. Desta forma a validação acontecerá nos dois lados, na entrada de dados do usuário no formulário e no banco de dados.
A função para a validação no formulário de entrada de dados do cliente foi a seguinte:
function LimparString(txt)
Dim xc, xs, saida, posicao, caract, X
xc = "àáâãäèéêëìíîïòóôõöùúûüÀÁÂÃÄÈÉÊËÌÍÎÒÓÔÕÖÙÚÛÜçÇñÑ'"
xs = "aaaaaeeeeiiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN"
saida = ""
If txt <> "" then
For X = 1 To Len(txt)
caract = Mid(txt,X,1)
posicao = InStr(xc,caract)
If posicao > 0 Then
caract = mid(xs,posicao,1)
end if
saida = saida & caract
Next
LimparString = saida
End If
end function
...
E a string sql com o Translate ficou assim:
strSQL = "select CodProfissional from prof where NumCartao = '"&numeroCartao&"' and translate(NomeCliente,'ãáéêíóõúçÃÁÉÍÓÕÚÇãáéêíóõúçÃÁÉÍÓÕÚÇ','aaeeiooucAAEIOOUC') = '"&nomeCompleto&"' and Cpf = "&cpf&" and DataNascimento = to_date('"&sortDate(dataNascimento)&"') and translate(NomeMae,'ãáéêíóõúçÃÁÉÍÓÕÚÇãáéêíóõúçÃÁÉÍÓÕÚÇ','aaeeiooucAAEIOOUC') = '"&nomeMae&"'"
O funcionamento do Translate substitui cada caracter do segundo parametro, pelos respectivos caracteres do terceiro parametro, na string do campo do primeiro parametro.
A função para a validação no formulário de entrada de dados do cliente foi a seguinte:
function LimparString(txt)
Dim xc, xs, saida, posicao, caract, X
xc = "àáâãäèéêëìíîïòóôõöùúûüÀÁÂÃÄÈÉÊËÌÍÎÒÓÔÕÖÙÚÛÜçÇñÑ'"
xs = "aaaaaeeeeiiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN"
saida = ""
If txt <> "" then
For X = 1 To Len(txt)
caract = Mid(txt,X,1)
posicao = InStr(xc,caract)
If posicao > 0 Then
caract = mid(xs,posicao,1)
end if
saida = saida & caract
Next
LimparString = saida
End If
end function
...
E a string sql com o Translate ficou assim:
strSQL = "select CodProfissional from prof where NumCartao = '"&numeroCartao&"' and translate(NomeCliente,'ãáéêíóõúçÃÁÉÍÓÕÚÇãáéêíóõúçÃÁÉÍÓÕÚÇ','aaeeiooucAAEIOOUC') = '"&nomeCompleto&"' and Cpf = "&cpf&" and DataNascimento = to_date('"&sortDate(dataNascimento)&"') and translate(NomeMae,'ãáéêíóõúçÃÁÉÍÓÕÚÇãáéêíóõúçÃÁÉÍÓÕÚÇ','aaeeiooucAAEIOOUC') = '"&nomeMae&"'"
O funcionamento do Translate substitui cada caracter do segundo parametro, pelos respectivos caracteres do terceiro parametro, na string do campo do primeiro parametro.
Visão geral do Log4net
Ferramenta para gerar log em aplicações .net Log4net
Uma aplicação de tamanho médio pode gerar milhares de linhas de request para logs e com isto muito esforço também é feito para medir o impacto e custo de fazer o log. Log4net pretende ser rápido e flexível.
O usuário precisa estar ciente das seguintes questões de performance:
1. A performance de loggin quando ele é desativado. Quando o loggin é desativado por inteiro ou apenas para um conjunto de níveis, o custo de requisição de log consiste de uma invocação de método mais uma comparação de inteiros.
Entretanto, a invocação do método envolve um custo escondido da construção do parametro.
Por exemplo, para alguns logs, escrevendo,
log.Debug("Número: " + i + " é " + entry[i].tostring();
incorre no custo de construir a mensagem parametro, convertendo ambo, inteiro i e entry[i] para strings, e concatenando strings intermediários, independente se a mensagem será feito log ou não. Este custo de construção de parametro pode ser forte e depende do número e tipo de parametros envolvidos.
Para enviar o custo de construção de parametros escreva:
if(log.IsDebugEnabled)
{
log.Debug("Entry number: " + i + " is " + entry[i].ToString());
}
FileAppender e RollingFileAppender
Estes appenders escrevem mensagens de logs em arquivos. Uma configuração típica para um FileAppender pode parecer com a seguinte:
Segue abaixo um resumo das configurações de atributos mais comuns para FileAppender:
- file: o caminho completo ou relativo para o arquivo de log;
- appendToFile: um campo booleano que indica se o arquivo de log será incrementado (true) ou sobrescrito (false). Se falso, o arquivo será sobrescrito na inicialização do log4net. Caso não seja especificado, o log será incrementado.
- immediateFlush: valor booleano indicando se é para o arquivo de log TextWriter depois de cada mensagem de log ser escrita. O padrão é true (enviar cada mensagem depois de ser gerada);
- lockingModel: permite a você controlar se o arquivo de log estará travado durante a execução da aplicação.
É indicado não usar o FileAppender e sim o RollingFileAppender. O arquivo de log gerenciado por FileAppender permite o crescimento do arquivo sem limites. O RollingFileAppender permite um gerenciamento básico do arquivo, configurando size- ou date-boxing do arquivo de log.
Existem diversas configurações para o RollingFileAppender:
> rollingStyle: controla como os arquivos de log são elaborados, e pode ser um dos seguintes valores:
- Once: o arquivo de log é recriado todas as vezes que o log4net é inicializado (tipicamente quando a aplicação é iniciada);
- Size: o arquivo de log é recriado quando atinge um tamanho determinado;
- Date: o arquivo de log é recriado com base na data atual;
- composite: o arquivo de log é recriado com base nos limites de tamanho e na data atual;
> maximumFileSize: a capacidade do arquivo de log. É uma expressão de tamanho no formato "#(KB|MB|GB)". Por exemplo "100KB" ou "10MB";
> maxSizeRollBackups: o número máximo de backups de arquivos de log. Indica o número máximo quando o rollingStyle é SIZE; quando o rollingStyle é COMPOSITE, isto indica o máximo número de roll-offs mantidos por dia; Esta propriedade não tem efeito quando rollingStyle é ONCE ou DATE;
> datePattern: é usado para recriar arquivos com base em datas. o valor deste parametro precisa aderir ao formato usado pela classe SimpleDateFormat;
> staticLogFileName: se true esta opção indica que o arquivo de log receberá todos os registros de maneira incremental sendo o backups através de cópias. E se false indica que o log4net irá gravar no último arquivo de log (ex: log-file1.txt, log-file2.txt..);
> countDirection: indica como a numeração de roll-off dos arquivos é gerenciada. Quando o parametro for >=, haverá uma numeração incremental no nome do arquivo, ex: log-file.txt.1, log-file.txt.2, etc..
Lembre que quando usar o file appender, o usuário executando o processo de logging precisa de premissões de escrita e/ou modificação para arquivos de log. Além disso, o arquivo de log será criado caso não exista mas não será criado o diretório informado caso não exista. E caso o file appender não seja criado a aplicação funcionará sem problemas.
Utilizando Múltiplos Appenders
usar múltiplos appenders é uma tarefa simples de especificar cada appender no root logger, como no exemplo abaixo:
Você pode utilizar quantos appenders quiser, sabendo que cada appender irá usar mais processamento.
------------------
Exemplos de Log4net criados durante teste:
Uma aplicação de tamanho médio pode gerar milhares de linhas de request para logs e com isto muito esforço também é feito para medir o impacto e custo de fazer o log. Log4net pretende ser rápido e flexível.
O usuário precisa estar ciente das seguintes questões de performance:
1. A performance de loggin quando ele é desativado. Quando o loggin é desativado por inteiro ou apenas para um conjunto de níveis, o custo de requisição de log consiste de uma invocação de método mais uma comparação de inteiros.
Entretanto, a invocação do método envolve um custo escondido da construção do parametro.
Por exemplo, para alguns logs, escrevendo,
log.Debug("Número: " + i + " é " + entry[i].tostring();
incorre no custo de construir a mensagem parametro, convertendo ambo, inteiro i e entry[i] para strings, e concatenando strings intermediários, independente se a mensagem será feito log ou não. Este custo de construção de parametro pode ser forte e depende do número e tipo de parametros envolvidos.
Para enviar o custo de construção de parametros escreva:
if(log.IsDebugEnabled)
{
log.Debug("Entry number: " + i + " is " + entry[i].ToString());
}
FileAppender e RollingFileAppender
Estes appenders escrevem mensagens de logs em arquivos. Uma configuração típica para um FileAppender pode parecer com a seguinte:
Segue abaixo um resumo das configurações de atributos mais comuns para FileAppender:
- file: o caminho completo ou relativo para o arquivo de log;
- appendToFile: um campo booleano que indica se o arquivo de log será incrementado (true) ou sobrescrito (false). Se falso, o arquivo será sobrescrito na inicialização do log4net. Caso não seja especificado, o log será incrementado.
- immediateFlush: valor booleano indicando se é para o arquivo de log TextWriter depois de cada mensagem de log ser escrita. O padrão é true (enviar cada mensagem depois de ser gerada);
- lockingModel: permite a você controlar se o arquivo de log estará travado durante a execução da aplicação.
É indicado não usar o FileAppender e sim o RollingFileAppender. O arquivo de log gerenciado por FileAppender permite o crescimento do arquivo sem limites. O RollingFileAppender permite um gerenciamento básico do arquivo, configurando size- ou date-boxing do arquivo de log.
Existem diversas configurações para o RollingFileAppender:
> rollingStyle: controla como os arquivos de log são elaborados, e pode ser um dos seguintes valores:
- Once: o arquivo de log é recriado todas as vezes que o log4net é inicializado (tipicamente quando a aplicação é iniciada);
- Size: o arquivo de log é recriado quando atinge um tamanho determinado;
- Date: o arquivo de log é recriado com base na data atual;
- composite: o arquivo de log é recriado com base nos limites de tamanho e na data atual;
> maximumFileSize: a capacidade do arquivo de log. É uma expressão de tamanho no formato "#(KB|MB|GB)". Por exemplo "100KB" ou "10MB";
> maxSizeRollBackups: o número máximo de backups de arquivos de log. Indica o número máximo quando o rollingStyle é SIZE; quando o rollingStyle é COMPOSITE, isto indica o máximo número de roll-offs mantidos por dia; Esta propriedade não tem efeito quando rollingStyle é ONCE ou DATE;
> datePattern: é usado para recriar arquivos com base em datas. o valor deste parametro precisa aderir ao formato usado pela classe SimpleDateFormat;
> staticLogFileName: se true esta opção indica que o arquivo de log receberá todos os registros de maneira incremental sendo o backups através de cópias. E se false indica que o log4net irá gravar no último arquivo de log (ex: log-file1.txt, log-file2.txt..);
> countDirection: indica como a numeração de roll-off dos arquivos é gerenciada. Quando o parametro for >=, haverá uma numeração incremental no nome do arquivo, ex: log-file.txt.1, log-file.txt.2, etc..
Lembre que quando usar o file appender, o usuário executando o processo de logging precisa de premissões de escrita e/ou modificação para arquivos de log. Além disso, o arquivo de log será criado caso não exista mas não será criado o diretório informado caso não exista. E caso o file appender não seja criado a aplicação funcionará sem problemas.
Utilizando Múltiplos Appenders
usar múltiplos appenders é uma tarefa simples de especificar cada appender no root logger, como no exemplo abaixo:
Você pode utilizar quantos appenders quiser, sabendo que cada appender irá usar mais processamento.
------------------
Exemplos de Log4net criados durante teste:
Visão geral sobre o Windows 7
Instalei o Windows 7 Professional em português há alguns dias e estou muito satisfeito com a nova interface, desempenho e novos recursos. Entre as principais diferenças estão os botões da barra de tarefas, que agora adotam um novo paradigma - os botões dos aplicativos podem ser fixados e desafixados da barra de tarefas. O novo conceito dos botões também apresenta as seguintes características: os botões ficam do mesmo tamanho e quando o aplicativo está aberto podemos visualizar uma transparência destacando o botão na barra de tarefas. Quando existirem várias janelas abertas de um mesmo aplicativo serão observados no botão, alguns contornos adicionais dando a idéia de abas. E ao passar o mouse sobre os botões temos uma visualização da miniatura da janela do aplicativo, ou aplicativos, caso existam várias jánelas do programa abertas. A visualização ocupa uma faixa na parte inferior da tela, logo acima da barra de tarefas e ao passar o mouse sobre as janelas elas serão pré-visualizadas na área de trabalho também, podendo ainda clicar no botão fechar das miniaturas na mesma faixa de visualização. Outra característica interessante ainda é ter diversas opções do aplicativo disponíveis com o clique do botão direito sobre os respectivos botões, por exemplo, ao clicar com o botão direito do mouse sobre o ícone do MSN Messenger ativo na barra de tarefas, podemos trocar nosso status e acessar outros recursos.
Assinar:
Postagens (Atom)