Autor: SrECosta
Palavras-chave
Calendário
<<  outubro 2008  >>
seteququsedo
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
Pakua FeedCenter

Olá.

     É clássico. Você navega, navega e navega até encontrar um bom artigo sobre um assunto de seu interesse. Encontrando-o, você decide imprimí-lo, pois ainda é muito mais conveniente / confortável ler longos textos no papel e não na tela. Ainda mais quando o site abusa da exibição de menus, banners, popup e anúncios em geral. Veja um exemplo de um "abuso" na imagem abaixo:

     Daí você decide imprimir a página. E é aí que a coisa realmente fica feia porque todos aqueles menus, banners, anúncios também são impressos, tornando a leitura do conteúdo da página impressa igualmente desestimulante e difícil de ler. Fica aquele enorme banner do Google dividindo o artigo no meio, quebrando o raciocínio e o fluxo da leitura...

     Tudo bem que se queira fazer algum dinheiro com venda de banners ou exibição de anúncios do Google AdSense, contudo, não é raro acessar um site que tenha 60%, 70% de sua área coberta com anúncios, e aquele pisca-pisca incessante, tornando muito difícil a leitura do conteúdo "real" que ele possui.

     Todos os sites sérios, independente da quantidade de anúncios que tenham, utilizam-se de algum expediente para que seu conteúdo seja impresso corretamente. Há algumas formas de garantir que a impressão da página não contenha os elementos que "atrapalham" a leitura do texto pois, no final das contas, permitir que um menu seja impresso, ou 10 anúncios, não tem o menor aspecto prático. Ninguém vai conseguir clicar no papel pra visitar o site do anunciante, certo? (Certo??)

     Num site sério, com um mínimo de cuidado com os seus visitantes, a mesma página de exemplo acima, seria impressa no papel:

     Bem melhor, de acordo? Na segunda metade deste post eu comentarei sobre uma técnica utilizada para melhorar a qualidade da impressão de páginas. Sua implementação é muito simples e garante visitantes mais felizes. Basicamente a técnica consiste em identificar quando a página está sendo impressa e, via arquivos CSS, esconder os elementos que não precisam ser impressos ou não tem relevância.

Esconde-esconde com arquivos CSS

     A técnica consiste em implementar dois arquivos de estilos CSS para a página e via atributo media determinar que um arquivo de estilos seja utilizado para a visualização da página e que o outro seja utilizado para a impressão da página.

     Normalmente os arquivos de estilos CSS ficam definidos na página na seção HEAD/HEAD em elementos LINK. Veja um exemplo:

     O atributo media = screen determina que se a página for exibida na tela deverá ser utilizado o arquivo de estilos web.css. Já o atributo media = print determina que se a página for impressa deverá ser utilizado o arquivo de estilos print.css.

     Os dois arquivos são essencialmente iguais. A diferença está em que o arquivo print.css, para cada elemento (div, imagem, tabela, etc) que não deva ser impresso, determina o estilo "display : none". Quando o estilo "display : none;" é aplicado a um elemento da página ele não é exibido. Então, quando a página é impressa, o browser a renderiza utilizando o arquivo print.css e este, por sua vez, esconde os elementos que não devam ser impressos.

     Simples assim.

     Espero que seja útil.

Eduardo.

5.0 ponto(s). Avaliado por 1 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Olá.

     Na esfera de notícias do momento (ou quase) da ecosfera MS faço eco nas que considero muito relevantes:

     1. Se você planeja certificar-se ou está tramitando nesse assunto, aproveite a Promoção Segunda Chance. Você se inscreve, presta o exame e, se não passar, ganha outra chance de fazer o exame.

     2. Foi lançado um novo site de relacionamento para os profissionais certificados, o Mostre que você sabe. O Leonardo Tolomelli explica melhor.

     3. O evento TechEd Brasil 2007 já está com as inscrições a pleno vapor. Ocorrerá dias 5, 6 e 7 de dezembro e, verdade seja dita, é o maior / melhor evento da MS por aqui. Semana que vem eu posto a grade de palestras que eu formei pra mim. Se você lê meu blog e for, mande um comentário. Adoraria conhecê-lo (a).

     4. A linguagem F#, uma linguagem funcional da MS (criada pela equipe de research), foi anunciada como um produto comercial. Veja o post do anúncio. Leia um wiki. Ou, se preferir, entenda o quê, afinal, é programação funcional.

     5. O ASP.NET implementará um framework MVC (Model View Controller). A promessa é que no final do ano haja um preview público e no ano que vem esteja disponível. Direto do blog do Scott Guthrie, leia o post sobre o assunto. Na minha opinião, vai ser O assunto do ano que vem.

     6. Querendo aprender sobre OpenXML? A Aline Rokutan publicou uma lista muito interessante com recursos para isso. Vai e fique por dentro. O Mauro Sant Anna também publicou um post com um exemplo e outro pedindo apoio da comunidade ao formato. Confira e ajude.

     Espero que seja útil.

Eduardo.

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
SrECosta , postado em 24. outubro 2007, 20:33

Olá.

     Todo profissional deve desenvolver algumas habilidades básicas para bem encaminhar-se. Uma delas, que considero importante, é saber como e onde procurar ajuda. Ninguém é capaz de memorizar tudo que aprende. Sempre chega o momento em que é necessário se lembrar -daquela- propriedade do DataGridView ou então descobrir como o horário de verão brasileiro afeta um controle RangeValidator.

     O objetivo deste post é compartilhar algumas dicas sobre como e onde procurar ajuda na internet. A coisa toda é realmente muito básica mas pode ser interessante ver isto reafirmado. Ficarei muito feliz com comentários sobre outras dicas deste tema, ok?

Como procurar ajuda

     É grande a chance de que sua dúvida, independente do que seja, já tenha sido questionada e respondida por outras pessoas. O maior problema, dado o volume de informações publicadas na internet, é encontrar esta resposta rapidamente.

     Também é grande a chance de sua resposta estar em inglês. Entenda, os fabricantes das tecnologias escrevem os softwares em inglês, instruem os clientes / usuários em inglês e fornecem ajuda em inglês. Depois, num segundo momento, os conteúdos vão sendo reproduzidos em outros idiomas. Por causa disto, é preferível procurar sua dúvida utilizando termos no idioma inglês.

     Pelo menos para mim, tudo começa na página de buscas. Particularmente, eu uso o Google.

     É válido ser bem específico quanto aos termos que compõem sua dúvida ou problema. Eu sempre escrevo a tecnologia envolvida, a linguagem de programação que eu preferiria que a resposta estivesse e os termos específicos. Por exemplo, digito algo assim: asp.net c# cache timeout . Nesse exemplo, quero saber sobre timeout de cache para asp.net em código c#. Eu poderia ter digitado cache timeout ou asp.net cache mas fazer isto traria muito mais resultados genéricos.

     Também é útil restringir os resultados da página de busca a um site específico ou a um conjunto de sites. Se você lembra que determinado site possui a resposta para o seu problema você pode restringir os resultados da página de busca para somente aquele site. A MS tem o costume de manter, sei lá, 90% dos seus sites sobre o domínio microsoft.com então é vantajoso informar isto para a página de busca. Se eu digito algo assim: asp.net c# cache timeout site:microsoft.com, a página de buscas retorna resultados somente dos sites cujos domínios terminam com microsoft.com. Veja um exemplo disto na imagem abaixo:

Google - Configurando o parâmetro site:

     Os fóruns da MS quase sempre retornam respostas úteis. Então, é válido digitar algo como: asp.net c# cache timeout site:forums.microsoft.com . E, se você quiser restringir os resultados pelas respostas do fórum brasileiro, em português, basta digitar algo como: asp.net c# cache timeout site:forums.microsoft.com/msdn-br/ . Você pode utilizar esta abordagem com qualquer site. Basta informá-lo no critério da página de buscas.

     Se você não quiser ter que informar toda vez o site pesquisado (e estiver utilizando o IE7 ou o Firefox) é possível automatizar esta tarefa criando uma opção de busca customizada (lá naquela caixa de busca que aparece do lado da barra de endereços) . O Nando Vieira publicou um post sobre isso que você pode tomar como exemplo. Mais pra frente eu crio um também para adicionar a este post.

     Mas, e se você fez uma busca desse tipo e não encontrou uma resposta aceitável? Neste caso o melhor a fazer é procurar uma lista de discussão ou um fórum e postar a sua dúvida. Cada fórum possui suas regras específicas mas dois comportamentos facilitam muito a obtenção de uma resposta:
     1. Poste sua dúvida na seção adequada ao assunto. Normalmente um fórum é dividido em seções ou assuntos com pessoas que somente monitoram as seções de seu interesse. Por causa disto, se a dúvida é de ASP.NET, não será útil postá-la na seção de C# ou de SmartClients. Publicar o post em várias seções ao mesmo tempo também não ajuda.
     2. Seja o mais claro e específico possível. É muito comum ver tópicos no fórum com "Ocorreu um erro ao carregar a página. Me ajude." ou "Não consegui conectar no banco de dados." sem quaisquer outras informações. Forneça detalhes da sua dúvida ou problema. Diga a versão do .NET Framework, a versão do ASP.NET, se é C# ou VB.NET, qual é a versão do Windows, qual é a versão do SQL Server, como o problema acontece, os testes que você já fez, enfim, dê informações para que as pessoas possam ajudar.

Onde procurar ajuda

     Todos os sites abaixo fornecem recursos úteis como artigos, how-tos, exemplos, tutoriais, códigos prontos e conteúdo de fórum. A lista é bem incompleta mas, mesmo assim, fornece bastante material de ajuda:

     http://forums.microsoft.com/msdn-br/ - Fóruns da MS em português
     http://www.asp.net/ - Site oficial da MS para o ASP.NET
     http://www.msdnbrasil.com.br/
     http://www.msdn.com/
     http://www.linhadecodigo.com.br/
     http://www.codeproject.com/
     http://www.macoratti.net/
     http://www.devmedia.com.br/
     http://www.projetando.net/
     http://www.imasters.com.br/
     http://www.aspneti.com.br/
     http://www.baboodev.com.br/
     http://tableless.com.br/
     http://www.bufaloinfo.com.br/
    
      
     Espero que seja útil.

Eduardo.

5.0 ponto(s). Avaliado por 1 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Olá.

     Semana passada lidei com um problema relacionado com JavaScript, o objeto Date(), ASP.NET RangeValidators e o horário de verão.

Cenário do problema

     Meu projeto atual envolve implementar melhorias e correções em uma aplicação web ASP.NET 1.1. Uma destas correções referia-se a um problema de validação no qual o usuário digitava uma data de nascimento, por exemplo, 04/11/1973 ou 06/11/1988, portanto, datas válidas, e o sistema a consistia informando que era inválida.

     A validação do campo é bem típica, padrão das aplicações ASP.NET 1.1, utiliza um controle ASP.NET RangeValidator configurado para validar um intervalo de datas. A propriedade MinimumValue está configurada como 01/01/1753 e a propriedade MaximumValue está configurada como DateTime.Now.ToString("dd/MM/yyyy"), ou seja, qualquer data válida que o usuário digitasse entre janeiro de 1753 e hoje, deveria ser considerada válida e dentro do intervalo.

     Entretanto, especifica e somente para as duas datas que informei acima, o controle RangeValidator retornava falso e impedia a finalização do formulário. Qualquer outra data informada era considerada válida. Tanto era que mesmo a aplicação tendo sido escrita em 2003 somente neste período récem este problema foi relatado.

Causa do problema

     Os controles de validação do ASP.NET 1.1 referenciam um arquivo JavaScript chamado WebUiValidation.js. Este arquivo é instalado com o ASP.NET e é copiado para o diretório \Inetpub\Wwwroot\aspnet_client\system_web\1_1_4322 quando o ASP.NET é registrado no IIS.  Este arquivo contém as implementações client-side de várias funcionalidades do ASP.NET e, entre elas, uma função chamada ValidatorConvert.

     A função ValidatorConvert é a responsável por indicar se um valor informado para um campo protegido por um controle RangeValidator, independente do tipo, está dentro do intervalo determinado. Durante meu debug dessa função descobri que o problema estava nela mas era causado por um "estranho" comportamento do objeto Date() do JavaScript. Veja só:

     Imagine que você crie um objeto Date() em JavaScript para a data 04/11/1973. Mais ou menos assim:
     var date = new Date(1973, 10, 04); 
     /* Lembrando que em JavaScript, os meses são considerados de 0 a 11, ou seja, 0 = Janeiro, 1 = Fevereiro, ..., 10 = Novembro, 11 = Dezembro. */

     Seria de se esperar que o objeto date récem-criado estivesse configurado para ano 1973, mês novembro e dia 04, certo? Nem tanto. Curiosamente o objeto date respondia por ano = 1973, mês 10 e dia 3. Por causa disto, por causa de o objeto Date() do JavaScript estar retrocedendo um dia, a função ValidatorConvert falhava e o controle RangeValidator em seguida. O mesmo comportamento ocorria para a data 06/11/1988. Mas não para nenhum outra testada.

     Qual o motivo de o construtor do objeto Date() do JavaScript se comportar desta forma para estas datas? Horário de verão. Segundo a documentação em http://support.microsoft.com/kb/931836/en-us, o horário de verão em Brasília, com GMT -03:00, começa no primeiro domingo de novembro e termina no último domingo de fevereiro. Isto é pré-configurado no sistema operacional e, embora esteja incorreto (já que nosso horário de verão obedece a motivos políticos e esse ano, por exemplo, vai começar no segundo domingo de outubro), é o responsável por este comportamento do objeto Date() do JavaScript.

     Ok, isto é um comportamento padrão do JavaScript em resposta às configurações do horário de verão. Mas, e se minha aplicação não precisar tomar conhecimento disto? E se este comportamento for indesejado? 

Resolução do problema

     Bem, a resolução do problema é simples e implica em criar um objeto Date() em JavaScript fornecendo ao construtor os parâmetros ano, mês, dia, hora, minuto e segundo, sendo que hora, minuto e segundo podem ser informados como 1. Assim:
     var date = new Date(1973, 10, 04, 1, 1, 1);
     if (year < 100) {
                 date.setFullYear(year);
     }

     Entretanto, uma vez que este erro ocorre dentro do arquivo WebUiValidation.JS do ASP.NET, como implementar esta solução fornece duas alternativas: 

     1. Eu poderia substituir o controle RangeValidator na minha aplicação por um controle CustomValidator e implementar a validação da intervalo de datas na mão. A vantagem está em não precisar modificar o arquivo WebUiValidation.JS. A desvantagem está em ter trinta páginas .ASPX que utilizam esse controle. Mudá-las, uma a uma, pode não ser convidativo.

     2. Ou modificar o arquivo WebUiValidation.JS, especificamente a função ValidatorConvert, na qual o problema com o objeto Date() ocorreu. A vantagem está em que eu não teria de modificar todas as 30 páginas .ASPX que utilizam o controle RangeValidator e, melhor dos mundos, não teria de trocar um validator pelo outro. A desvantagem está em sair atualizando o arquivo WebUiValidation.JS em todos os servidores da cadeia de desenvolvimento: minha máquina, testes, homologação, produção e por aí vai.

     Se você passar por este problema pode escolher entre as duas saídas acima. Eu utilizei a segunda.

Horário de Verão Brasileiro

     Aproveitando o post, vale lembrar que a MS liberou um site com recursos, dicas de ajustes e configurações para o horário de verão brasileiro a iniciar em 14/10/2007. Visite.

     Agradeço ao Benson Yu que me ajudou com este problema no fórum de ASP.NET. Veja a thread original em http://forums.asp.net/t/1165489.aspx.

Eduardo.

5.0 ponto(s). Avaliado por 1 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Olá.

     A MS acaba de anunciar que incluirá no pacote do Visual Studio 2008 e .NET Framework 3.5 o código-fonte do .NET Framework.

     Isto possibilitará o debug de aplicações avançando para dentro do código do framework. E, além disso, o código-fonte incluirá os comentários.

     É uma excelente notícia para desenvolvedores da plataforma MS. Acompanhe o anúncio oficial no blog do Scott Guthrie.

     Certamente vai ajudar.

Eduardo.

5.0 ponto(s). Avaliado por 1 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5