quarta-feira, 27 de janeiro de 2010

Algumas considerações sobre Progressive Enhancement e Graceful Degradation

Aconselharam-me a leitura deste artigo sobre Progressive Enhancement vs. Graceful Degradation, já tinha alguns conceitos sobre estas duas aproximações ao desenvolvimento web mas, acho que mesmo para quem já conheça, trata-se de uma leitura agradável.

Tentando definir rapidamente: são duas filosofias com abordagens diferentes sobre a maneira de desenvolver páginas web (desde html, css, javascript, etc.) de forma a conseguir abranger o maior número de browsers.

O progressive enhancement sugere que se deve começar  pelo browser target mais fraco, por exemplo, o site deve ser desenvolvido tendo por base um dispositivo móvel com capacidades limitadas de navegação e sem javascript/css, e a partir daí acrescentar funcionalidades/estilo como se estivessemos a adicionar camadas.

O graceful degradation sugere começar pelo topo, isto é, apontar para o nosso browser target moderno, por exemplo, HTML5/CSS3 em Firefox/Chrome/Safari e desenvolver de forma a que cada página seja tolerável a falhas dos browsers. Isto quer dizer se o browser não entender uma determinada regra de CSS ou javascript deve ser possível garantir o mínimo indispensável de navegação e funcionalidades, estas vão diminuindo conforme o browser cliente.

Estas duas filosofias parecem misturar-se um bocado, pegando por exemplo numa textbox que deverá ser um input para uma data. Podemos adicionar comportamento e estilo com CSS e javascript de forma a que esta textbox só aceite datas num determinado formato (tipo uma textbox com filtro, calendário, icon, etc). Se o browser cliente não suportar javascript não existirá nenhum problema, a textbox continuará a fazer aquilo que é preciso mas de uma forma menos elegante. Técnicas deste género podem ser usadas em ambas as filosofias, a diferença é como abordar o desenvolvimento desde o ínicio.

Na minha opinião pessoal, o progressive enhancement deve ser usado para construir sites internet (sobretudo se tiverem algum nível de acessibilidade), assim conseguimos atingir um maior público alvo, será um site bastante funcional num dispositivo mais fraco e além disso terá muitas funcionalidades/aspecto extras num browser moderno. Esta forma de desenvolver parece-me boa sobretudo se houver tempo e orçamento adequado.
Por outro lado, no desenvolvimento de uma intranet/extranet o conjunto de browsers é mais homogéneo e normalmente o orçamento será mais apertado, numa situação destas diria que adoptar  uma estratégia de graceful-degradation parece ser mais adequado. É possível desenvolver rapidamente para um browser target e usando técnicas como mencionei em cima permitir que mesmo browsers mais antigos (IE6, pda's, etc.) sejam capazes de renderizar as páginas com eficácia e serem completamente funcionais.

Sugiro que, mesmo depois desta introdução, leiam o artigo mencionado no início porque, entre outras coisas, o autor fala dos prós e contras de cada uma das aproximações de uma forma mais detalhada.

terça-feira, 26 de janeiro de 2010

SQL Server 2008, Saving changes is not permited...

Quem começa a usar o designer do SQL Server 2008 depara-se com o erro quando está a alterar a estrutura de uma tabela existente: "Saving changes is not permited..."


Por pré-definição  a opção "Prevent saving changes that require table re-creation" está activa, isto parece-me ser muito bom para ambientes produtivos mas durante a fase de desenvolvimento chateia um bocado. A solução é fazer os scripts à mão tipo alter table... ou ir às opções e desactivar a opção.


MeasureIt - Firefox web development plugin

Encontrei esta pequeno plugin para o Firefox que apesar de não parecer nada importante tem dado jeito em muitas situações, é um must-have para quem desenvolve para a web.

Permite medir distâncias, em pixeis, numa página web. Muito simples e fácil de usar, para quem não conhece para activar a régua é preciso carregar no novo ícone no canto inferior esquerdo do firefox.

measureit icon

.NET: Servidor web devolve resposta vazia com o WebClient

Hoje deparei-me com o seguinte problema: ao fazer um pedido para obter uma página web, usando a classe WebClient do .NET (System.Net.WebClient ), o servidor devolveu uma resposta vazia.

Após alguma pesquisa descobri que alguns servidores podem não responder se faltar o user agent no header do pedido.
Como a classe WebClient não possui nenhuma propriedade para especificar o user agent, é necessário adicionar o user agent ao header :

Exemplo:
WebClient client = new WebClient();
client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

sábado, 23 de janeiro de 2010

Concatenar um array de strings

Já estava preparado para fazer um "foreach" para concatenar um array de strings, com ponto-e-virgula como separador, quando encontrei, por acidente, o método string.Join(...) que nunca tinha visto e até pensei que só existia  na framework .net 3.5 mas afinal já existe desde a .net 2.0... fico a pensar que outras funções existirão na framework que não conheço?!

Digam qual foi o última funcionalidade porreira com que se depararam no asp.net... (se alguém se der ao trabalho de ler este blog eheh)

Mais detalhes:
http://msdn.microsoft.com/en-us/library/57a79xd0.aspx

sexta-feira, 22 de janeiro de 2010

Problema no Firefox 3.6 e autenticação repetida no Proxy

Se é como eu e gosta de usar o Firefox no seu local de trabalho, para aceder à internet poderá ter que passar por um proxy antes de chegar ao conteúdo desejado.

Acontece que tive dificuldades porque o proxy do meu local de trabalho estava constantemente a pedir-me autenticação tornando o uso do FF impraticável. Como nos restantes browsers estava tudo bem andei à procura um bocadinho na net e encontrei um post que dizia para mexer nas variáveis ntlm. Ao fim de algumas tentativas esta configuração deixou o FF novamente a funcionar bem com apenas uma autenticação no proxy inicial.

Instruções: escrever na barra de endereço about:config e alterar os settings para o seguinte: