Web,ruby, Ajax ou qualquer outra coisa que me venha a cabeça (com prioridade para esta última)

07 dezembro, 2005

HTML ou xhtml?

Embora pessoas como eu tenham aprendido HTML (há 10 aninhos) e esteja a aprender (na minha opinião) a usar convenientemente o xhtml, julgo, que para quem se esteja a iniciar agora no desenvolvimento de web pode aprender uma ou outra desde que a aprenda bem.

O xhtml é mais exigente para quem o cria e para quem o gere no dia-a-dia. Exige mais cuidado e quase que diria que só deve ser usado se podermos controlar (de algum modo mesmo que indirecto) a forma como o mesmo é servido a visitantes das nossas páginas.

Caso contrário podemos abrir uma caixa da pandora de problemas.

A curva de aprendizagem do HTML poderá não ser tão grande (mas algo que devemos incutir em quem aprende que aprender bem exige esforço e dedicação), mas devemos quase implorar para que quem esteja a aprender não nos peça que indiquemos exemplos de páginas bem escritas quer em HTML quer em XHTML, salvo honrosas excepções já aqui anteriormente indicadas.

Estou a fazer um estudo sobre o tipo de erros encontrados em sítios portugueses. São muito poucos, aqueles que encontrei escritos de forma não só a validarem com os programas automáticos de validação mais habituais, mas que além disso, na marcação tirem partido da mesma para transmitirem a verdadeira estrutura do respectivo conteúdo.

Voltando à questão inicial usar/aprender/ensinar HTML ou XHTML mas com o cuidado de o fazer bem é o que é importante, tanto quanto julgo.

RoR 1

Ruby on Rails (RoR) é uma infraestrutura de aplicações para a web escrita em Ruby, uma linguagem de programação com tipos dinâmicos similar à Python, Smalltalk e Perl.

Acaba de passar há pouco tempo um ano desde o aparecimento da RoR em 25 de Julho de 2004. Num intervalo de tempo muito curto progrediu de uma versão 0.5 impressionante até a uma versão 1.0 lançada à pouco tempo que manteve a facilidade de uso e a alta produtividade enquanto adicionava algumas capacidades novas. Este artigo introduz os componentes desta nova versão e explica o bru-a-a que anda à volta desta infraestrutura.

Não pretendo explicar como usar a RoR para escrever aplicações para a Web. Para isso deve começar com: Rolling with Ruby on Rails. Este artigo é uma introdução e roteiro às características da RoR.

Alta produtividade e tempo reduzido de desenvolvimento

Ao nível das capacidades RoR não nos trás nada de novo. Já várias infraestruturas para aplicações para a web o fizeram. Então o que é realmente novo na Ror? O que é que esta infraestrutura trás de diferente. Quando pode acabar aplicações simples em dias em vez de semanas e aplicações mais complicadas em semanas em vez de meses as pessoas começam a notar.

O novo amor teria vida curta se as aplicações web resultantes fossem uma salgalhada e difíceis de manter e ampliar. Felizmente a RoR facilita as boas práticas de programação, o que leva a código fácil de manter e bem factorizado.

A atenção seria também de vida curta se a RoR não tivesse profundidade - isto é, se uma vez experimentada para além das aplicações web mais simples, tivessemos encontrado uma barreira, e nos fosse impossível avançar devido a limitações inerentes. Programadores experimentados que sabem o que fazer na Web repetidamente relataram que não é esse o caso da RoR. Por exemplo James Duncan Davidson recentemente disse:

A RoR é a infraestrutura de desenvolvimento para web mais bem concebida. Digo isto após 10 anos de construção de infraestruturas, ajudei a desenvolver a Servlet API e criei alguns servidores web de raíz. Ninguém o tinha feito desta forma anteriormente. Não estou a dizer que tudo está bem. Não é "perfeita". Tenho alguns detalhes com que não concordo sobre como as coisas devem ser juntas. Mas a "perfeição" não é o ponto. O ponto é que nos põe rapidamente a ser produtivos e tem profundidade suficiente para continuar. A RoR faz isso muito bem.

É difícil acreditar que isto é possível sem desvantagens significativas. Felizmente não tem que julgar a minha palavra (ou a de outra pessoa). Pode provar a sí mesmo num dia ou menos percorrendo um tutorial de RoR e desenvolver uma aplicação simples à sua escolha. Ver para crer! No caso de não se desejar ver espantosamente produtivo, pode ver alguém a fazê-lo vendo o vídeo sobre Ror.

Como é que a RoR o faz?

Como uma boa receita, RoR ajuda a alcançar um novo nível de produtividade combinando os ingredientes correctos nas quantidades correctas. Eis alguns dos ingredientes mais importantes que tornam a RoR naquilo que é:

  1. Ruby

    Muito do poder da RoR advém da linguagem de programação Ruby. A concepção única da Ruby torna fácil criar linguagens específicas de um domínio e fazer metaprogramação. A RoR tira total partido disso.

  2. Infraestrutura MVC completa

    A RoR é uma infraestrutura MVC (modelo, vista, controlador) onde a RoR fornece todas as camadas e funcionam de forma integrada. Outras infraestruturas normalmente só implementam parte da solução, exigindo que o programador integre várias infraestruturas na aplicação e então obrigar as mesmas a funcionarem em conjunto (por exemplo um programador Java poderá usar Hibernate, Struts e Tiles para obter suporte MVC completo.)

  3. Convenção sobrepõe-se a configuração

    Convenção sobrepor-se a configuração significa o fim de ficheiros de configuração XML muito extensos, uma aplicação RoR usa algumas convenções de programação relativamente simples que permitem determinar tudo através de reflexão e descoberta. Por exemplo, RoR usa reflexão inteligente para automaticamente mapear tabelas de bases de dados a objectos Ruby. O seu código de aplicação e a sua base de dados já têm tudo o que a RoR necessita de saber.

  4. Menos código

    Seguindo as convenções simples da RoR faz mais do que eliminar os ficheiros de configuração. Significa também que a RoR pode automaticamente tratar de uma grande quantidade de detalhes de baixo nível sem ter de lhe dizer nada sobre isso. Isto significa escrever menos linhas de código para implementar a sua aplicação. Manter o seu código pequeno significa desenvolvimento mais rápido, menos erros e tornar o código mais fácil de compreender, manter e melhorar.

  5. Geradores

    O uso pela RoR da reflexão de tempo de execução e da metaprogramação elimina muito do código de corta e cola que de outro modo teria que criar. Pode frequentemente evitar o código do tipo corta e cola usando o gerador de scripts integrado para o fazer por si. Isto deixa-lhe mais tempo para se concentrar no código que realmente interessa - a lógica do seu negócio.

  6. Ciclo de desenvolvimento curto

    O ciclo típico de desenvolvimento para teste de uma alteração numa aplicação web tem passos como configurar, compilar, instalar, reiniciar e testar. Isto leva a consumir muito tempo. O ambiente de desenvolvimento RoR não tem nada disto. Nós fazemos uma alteração e vê-mos o seu funcionamento. Não faço o erro de julgar que isto é um ponto menor. É difícil de dizer quanto é que isto melhorar a produtividade e o ajuda a manter um fluxo criativo ininterrupto.

  7. Andaimes

    A RoR pode criar automaticamente um conjunto completo de operações CRUD (Criar, recuperar, actualizar e apagar) e vistas de qualquer tabela de base de dados. Estes andaimes permitem-lhe começar rapidamente com a manipulação das suas tabelas de bases de dados. Ao longo do tempo pode substituir as operações CRUD geradas e as vistas com o seu próprio código - presumivelmente muito mais bonito e funcional.

Continua...

06 dezembro, 2005

Descrição: Define como é que o espaço em branco é tratado.

Sintaxe: white-space: valor;

Define como é que o espaço em branco será tratado


  white-space : normal;

O espaço em branco será tratado como normal


white-space : pre;

O espaço em branco será tratado como no elemento


  white-space : nowrap;

O elemento não volta atrás nas quebras de linha normais.

Exemplos:


<p style="white-space : pre;">

Isto só se usa para espaços nada mais.


<p style="white-space : nowrap;">

Esta linha não volta atrás e irá forçar o navegador a colocar uma barra de rolamento em baixo se não tiver espaço para a apresentar na totalidade.

Notas:

  • normal age como um navegador típico: qualquer sequência de caracteres de espaço em branco é reduzido a um caracter.
  • pre age como um elemento pre
  • nowrap evita a quebra de linha.

05 dezembro, 2005

hasLayout

Sumários

Muitas das inconsistências na reprodução pelo Internet Explorer podem ser corrigidas dando a um elemento "layout". John Gallant e Holly Bergevin classificaram estas inconsistências como "erros dimensionais" querendo dizer que podem ser frequentemente resolvidos aplicando uma largura ou uma altura ao elemento. Isto leva a pergunta de porque é que o "layout" pode alterar a reprodução e as relações entre elementos. A questão, embora uma boa questão, é de difícil resposta.

Definição de hasLayout

"Layout" é um conceito proprietário do IEWin que determina como é que os elementos, em analogia com uma janela, desenham e limitam o seu conteúdo, interagindo com e relativamente a outros elementos e reagem ou transmitem eventos da aplicação/utilizador.

Os programadores da Microsoft decidiram que os elementos do tipo caixa devem ser capazes de adquirir uma propriedade (no sentido de programação orientada a objectos) a que se referem como layout, ou em alternativa, hasLayout.

hasLayout provavelmente não é nem uma propriedade nem mesmo um comportamento mas talvez um conceito de engenharia inerente à reprodução que dá uma qualidade a um elemento.

Esta qualidade de reprodução pode, de facto, ser irreversivelmente despoletada para tomar o valor true por algumas propriedades CSS e alguns elementos têm «layout» por omissão.

Nomenclatura

Dizemos que um elemento "tem layout" ou "ganha layout" quando presumimos que a propriedade da Microsoft hasLayout toma o valor true. Um elemento com layout pode ser qualquer elemento que tenha layout por omissão ou que tenha ganho layout pelo estabelecimento de propriedade CSS apropriada.

Elementos sem layout, onde hasLayout não tenha sido despoletada, por exemplo div sem dimensões podem ser ancestrais sem layout.

Dar um aplicar layout a um elemento que por omissão não o tem envolve estabelecer uma propriedade CSS que despolete hasLayout = true ao elemento em questão. Não há maneira de despoletar hasLayout = false a não ser apagar a propriedade CSS que tenha causado o inverso.

Introdução

O problema hasLayout afecta os web designer e os codificadores com todos os níveis de experiência. O Layout tem efeitos inabituais e difíceis de prever sobre o comportamento da reprodução de caixas que têm layout, assim como as implicações para os elementos seus descendentes dentro dessas caixas.

As consequência que podem resultar de um elemento ter ou não layout podem incluir:

  • Muitos erros habituais em elementos flutuantes no IE;
  • As caixas tratarem cercas propriedades básicas de forma diferente;
  • Colapso das margens entre um contentor e os seus descendentes;
  • Diferenças no posicionamento de imagens de fundo;
  • Diferenças entre navegadores quando se usa scripting.

Esta lista está incompleta.

De onde é que vem o layout

Ao contrário de propriedades padronizadas, ou mesmo de propriedades CSS proprietárias disponíveis nos diversos navegadores o layout não é directamente atribuível via declaração CSS. Por outras palavras, não há propriedade layout. Alguns elementos automaticamente têm layout e é adicionado de forma invisível quando certas declarações CSS são feitas.

Elementos com layout por omissão

Os elementos seguintes parecem ter layout

  • <table>
  • <td>
  • <body>
  • <img>
  • <hr>
  • <input>, <select>, <textarea>, <button>
  • <iframe>,
  • <embed>, <object>, <applet>
  • <marquee>

Propriedades

Os seguintes pares propriedade CSS/valor se aplicados permitem que um elemento ganhe layout

position: absolute
Refer-se ao seu bloco contentor e é aqui que começam alguns problemas.
float: left ou float:right
O elemento flutuante tem diversos detalhes devido a algunas aspectos de um elemento com layout
display: inline-block
Por vezes a cura quando um elemento é de nível em linha e necessita de layout. Aplicar layout é provavelmente o único efeito real desta propriedade. O comportamento de bloco em linha pode ser alcançado de forma independente: IEWin: bloco em linha e tem layout.
width: qq valor
Isto normalmente é uma correcção implícita, frequetemente o gatilho quando hasLayout gera erros.
height: qq valor
Por exemplo usado no Holly Hack.
zoom: qq valor
Proprietária da MS, não valida. zoom: 1 pode ser usado em depuração.
writing-mode: tb-rl
Proprietária da MS, não valida.

Notas sobre elemento ao nível em linha

Para elementos em linha (sejam elementos em linha por omissão como span seja elementos com a regra CSS display: inline:

  • width e height despoletam hasLayout no IE5+ só em modo quirks. No IE6 em modo standard os elementos em linha ignoram as propriedades width e heigth e indicar uma largura ou altura para estes elementos não despoletará a propriedade hasLayout.
  • zoom irá sempre despoletar hasLayout mas não está disponível em IE5.

Elementos que tenham layout (por omissão) e display:inline comportam-se como indicado nos standards: fluem horizontalmente como palavras num parágrafo, são sensíveis ao alinhamento vertical e aplicam uma forma de envelope ao seu conteúdo. Assim que os elementos em linha tenham layout, agem como bloco em linha, e isto explica porque é que no IEWin os elementos em linha podem conter elementos de nível bloco com mesmo problemas que noutros navegadores, onde display:inline se mantem em linha.

01 dezembro, 2005

xml:lang e lang

Contexto

Por vezes os documentos contêm ou incluem conteúdo com línguas diferentes. Por vezes é necessário armazenar um valor de língua natural como dado ou metadado sobre algo externo ao documento. Devido a estas diferentes aplicações usarem formatos similares, os conceptores de esquemas por vezes confundem a utilização admissível de xml:lang e quando devem definir os seus próprios elementos/atributos relativos a línguas.

Por exemplo em XHTML 1.0 há um atributo hreflang no elemento e também um xml:lang (ou atributo lang, no caso do HTML 4.0) para o conteúdo de um elemento a:

<a xml:lang="pt" href="xyz" hreflang="de">
   Carregar aqui para versão alemã</a>

O atributo xml:lang descreve uma língua contida pelo elemento a ("Carregar aqui para versão alemã"), enquanto o atributo hreflang é metadado, neste caso descrevendo a língua de um conteúdo externo a esta página web.

Resposta

Quando usar xml:lang

Conteúdo directamente associado ao documento xml (seja contido dentro do documento directamente seja considerado parte de um documento quando processado ou reproduzido) deve usar o atributo xml:lang para indicar a língua desse conteúdo. xml:lang deve ser reservado a autores de conteúdo para etiquetarem directamente qualquer conteúdo em língua natural que tenham.

xml:lang é definido pelo xml 1.0 como um atributo comum que pode ser usado para indicar a língua de qualquer conteúdo de um elemento. Isto inclui texto legível por humanos assim como outro conteúdo (tais como os objectos embebidos, imagens ou ficheiros de som), contidos por um elemento no qual apareça. O valor xml:lang é aplicado a cada um dos sub-elementos contidos pelo elemento. Também se aplica a valores de atributos associados com o elemento e sub-elementos (embora usar língua natural num atributo não seja uma boa prática). O valor de um atributo xml:lang é um dos possíveis indicados no RFC 3066 ou um dos seus sucessores.

Eis um exemplo de xml:lang num elemento t:


   <t xml:lang="pt"> 
   Isto é texto contido num elemento 't'. O uso do atributo
   xml:lang indica que a língua, que por exemplo um corrector 
   ortográfico deve aplicar quando estiver a efectuar uma
   revisão do documento é Português. Se não o indicarmos
   podemos ter problemas se tivermos conteúdo embebido 
   noutra língua como na frase <span xml:lang="fr">
   C'est la vie</span>, que está em francês.
   </t>

Este exemplo mostra a aplicação de xml:lang a um atributo:


 <para>Il faut utiliser 
 <abbr title="Simple Object Access Protocol" xml:lang="en">
 SOAP</abbr></para>

Quando usar o seu próprio elemento ou atributo

Quando o valor da língua é realmente um atributo de ou metadado sobre algum conteúdo externo, então xml:lang não e uma escolha apropriada. Nestes casos deseja guardar informação sobre língua, mas a língua não se refer ao conteúdo do documento xml (ou conteúdo incluído, tal como imagens, que são processadas como parte do documento) directamente. Neste caso deve definir um elemento ou atributo com um nome diferente e não usar o atributo xml:lang. O valor do elemento ou atributo deve usar o RFC 3066, tal como xml:lang.

Alguns exemplos disto podem incluir:

  • Um elemento num documento xml descrevendo a sua colecção de DVD's para indicar em que línguas se encontras as canções;
  • Um elemento de uma base de dados de clientes com um campo para a língua preferida do cliente;
  • Um atributo de um elemento de ligação (tal como o a no xhtml) apontando para uma versão do documento noutra língua.

A razão pela qual optar por criar o seu próprio elemento (ou atributo) é comunicar a língua como um valor (ou parte de uma estrutura de dados ou como metadados sobre um documento externo) em vez de indicar a língua de uma peça específica de conteúdo. Evitar usar xml:lang para descrever valores externos de língua evita criar problemas a autores de conteúdos que necessitem de etiquetar conteúdo com finalidades relativas a processamento de texto.

Por exemplo um documento xml poderá ter o seguinte aspecto:


 <item type="DVD"> 
  <title xml:lang="fr">Cyrano de Bergerac</title>    
  <!-- indic a língua em que o filme se encontra -->
  <duracao value="137" />                        
  <!-- não afectado pela língua -->
  <dialogue>en</dialogue>                            
  <!-- indic a língua do diálogo -->
  <legendas pista="1" lingua="zh-Hant" />         
  <!-- Esta pista contém legendas em chinês tradicional -->
  <legendas pista="2" lingua="zh-Hans" /> 
 </item>

Neste exemoplo o atributo xml:lang comunica informação sobre a língua natural do texto que aparece neste documento. O elemento diálogo e o atributo língua dos elementos legendas são definidos no esquema do documento xml e comunicam um valor de língua natural associado a estes itens. Por exemplo comunica a informação de que as legendas na pista número 1 são escritas ou mostradas em chinês tradicional.

A propósito

É importante lembrar que xml:lang tem âmbito de validade: os elementos de nível inferior herdam o atributo. Isto pode servir para identificar a língua de muito conteúdo (sem ter marcadores de língua redundantes em cada elemento). Por exemplo, é boa prática colocar xml:lang no elemento html no início do documento xhtml e só o voltar a usar quando a língua mudar. Para mais informação ver o artigo: Marcadores de Língua em HTML e XML.

Recursos adicionais

Técnicas de autoria para internacionalização de xhtml e html: Especificação de língua de conteúdo 1.0

Artigos Interessantes

  1. Conceber Aplicações com Interface Complexo com Visio de Bill Scott explica como conceber um interface de utilizador para uma aplicação da internet usando uma ferramenta (extensão) produzida para o Visio pelo Bill. No seu blogue, Bill expõe os pontos fracos e fortes da sua extensão. No artigo das caixas e das setas expõe a concepção de um interface de utilizador completo.
  2. Como colaborar bem com os restantes responsáveis pelo desenvolvimento de Mike Stenhouse apresenta a sua experiência e pensamento sobre o desenvolvimento de CSS modular e de manutenção simplificada.
  3. Rascunho das WCAG 2.0 de Jeffrey Zeldman diz-nos que as directrizes WAI se estão a afinar retirando algumas das ambiguidades que nela figuram actualmente. Acho que qualquer pessoa que deseje começar deve ler os documentos fundamentais mesmo na sua forma de rascunhos para puder avaliar as tendências para o futuro (este comentário é meu).
  4. (Modelo de) Caixa de Pandora de Truques CSS e Outra Boas Intenções de Tantek, apresenta-nos a visão que Tantek tem hoje dos truques que se foram aplicando ao código CSS para acomodar não conformidade com as especificações do W3C por parte de alguns navegadores. Tem algum fundo histórico para se perceber qual foi a evolução e a razão do aparecimento destes itens indesejáveis em muitos casos.
  5. Padrões e Semântica Web de John Allsopp fála-nos da expressividade baixa do HTML mesmo com as identificações e classes.
  6. 24 maneiras de impressionar as suas amigas (desculpem os seus amigos) Mostra-nos uma aplicação de uma infraestrutura JavaScript de Sam Stephenson chamada Prototype
  7. Ir à placa giratória (o meu título seria: Alimentos para um junkie da web de Danny Ayer toca mais tecnologias de alimentação de informação do que eu gostaria.

Fora de tópico

Assinalar vulnerabilidades em sistemas de escuta artigo produzido na Universidade da Pensilvânia curioso. Os "maus" parecem poder ter as costa livres.

30 novembro, 2005

ALA - 208

Saiu o número 208 do A List Apart.

Neste número temos artigos para audiências diferentes:

Para o tipógrafo que há em si tem:

  1. Imprimir um livro com CSS: Boom! Trata-se da apresentação de um método de produção de livros impressos baseado em HTML e CSS mediado pelo Prince para produzir um PDF final para impressão. Boom trata-se de um microformato proposto pelos autores: Bert Bos e Hakon Wium Lie.
  2. Poder ao povo de D. Keyth Robinson, que julgo resumir razoavelmente como criar soluções para necessidades de utilizadores fazendo-o de forma mais simples possível. Além disso é bom ouvir os seus utilizadores e/ou visitantes/clientes.
  3. O terceiro artigo (o repescado do número 96) A maldição da Concepção da Informação de Scott Jason Cohen, fala das dificuldades colocadas pelos especialistas em acessibilidade e usabilidade e os problemas que algum conservadorismo dos arquitectos de informação pode trazer à evolução da web.

28 novembro, 2005

Sítio de Eleição

Por vezes é necessário criar uma visualização de dados complexos e não sabemos como. Aqui http://www.visualcomplexity.com/ poderá encontrar algo para as suas necessidades/desejos.

Erros comuns em XHTML

  • Não fechar elementos vazios (elementos sem marcador de final)
    • Incorrecto: <br>
    • Correcto: <br />
  • Não fechar elementos não vazios
    • Incorrecto: <p>Isto é um parágrafo.<p>Isto é um outro parágrafo.
    • Correcto: <p>Isto é um parágrafo.</p><p>Isto é outro parágrafo.</p>
  • Aninhar elementos de forma imprópria (os elementos têm que ser fechado pela ordem inversa)
    • Incorrecto: <em><strong>Isto é algum texto.</em></strong>
    • Correcto: <em><strong>Isto é algum texto.</strong></em>
  • Não especificar texto alternativo para imagens (usar o atributo alt, que ajuda a tornar as páginas acessíveis a utilizadores com dispositivos que não carregam imagens ou têm dificiência visual)
    • Incorrecto: <img src="/peles/comuns/imagens/alimentadoporblabla.png" />
    • Correcto: <img src="/peles/comuns/imagens/alimentadoporblabla.png" alt="Blabla" />
  • Colocar texto directamente no corpo do documento (isto não é um erro em XHTML 1.0 Transitional)
    • Incorrecto: <body>Bem vindo à minha página.</body>
    • Correcto: <body><p>Bem vindo à minha página.</p></body>
  • Aninhar elementos bloco dentro de elementos em linha
    • Incorrecto: <em><h2>Introdução</h2></em>
    • Correcto: <h2><em>Introduction</em></h2>
  • Não colocar pelicas à volta de valores de atributos
    • Incorrecto: <td rowspan=3>
    • Correcto: <td rowspan="3">
  • Usar e comercial fora de entidades (usar &amp; para mostrar o caracter «e comercial»)
    • Incorrecto: <title>Carros & Camiões</title>
    • Correcto: <title>Carros &amp; Camiões</title>
  • Uso de e comercial fora de entidades em URLs (usar & em vez de & também em ligações)
    • Incorrecto: <a href="index.php?page=noticias&estilo=5">Notícias</a>
    • Correcto: <a href="index.php?page=noticias&amp;estilo=5"gt;News</a>
  • Uso de nomes de elementos ou atributos em maísculas
    • Incorrecto: <BODY><P>A Melhor Página de Sempre</P></BODY>
    • Correcto: <body><p>A Melhor Página de Sempre</p></body>
  • Minimização de atributo
    • Incorrecto: <textarea readonly>SÓ DE LEITURA</textarea>
    • Correcto: <textarea readonly="readonly">SÓ DE LEITURA</textarea>

Esta é uma lista muito abreviada dos erros encontrados

25 novembro, 2005

XHTML para leigos

Se dissermos «qual é a coisa qual é ela que antes de o ser já o era?» Então um ouvinte terá que adivinhar qual será a resposta.

Se dissermos tudo o que sobe tem que cair. Nada de tentar adivinhar, uma frase simples e com início e fim adequados. Faz sentido que algo que seja lançado para o alto tenha que voltar à terra. O não voltar desafia a gravidade não estando de acordo com aquilo que vemos no dia a dia.

Isto é muito semelhante às diferenças entre o XHTML e o HTML 4.01. Em XHTML, tudo o que tem um princípio tem que ter um fim. Em HTML, tal não se passa. Pode começar um parágrafo mas, nunca o acabar. Pode ter uma lista de coisas e nunca terminar cada item. Se tivermos que comunicar com alguém que nunca termina as frases, tal será confuso no mínimo.

Pense nisto da seguinte forma: o HTML foi pensado como um pacote, com uma dobra em cada lado. Contudo mesmo a especificação estrita é tem ainda alguma maleabilidade, ou seja o pacote não necessita estar fechado. Não sei o que é que pensa mas é mais provável comer uma bolacha dum pacote fechado de um aberto sabe quem há quanto tempo.

Exemplos:

Abaixo encontrará um exemplo de código HTML válido mesmo sob o tipo de documento HTML 4.01 estrito:



     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" 
                                              "http://www.w3.org/TR/html4/strict.dtd">
     <html>
     <HEAD>
     <meta http-EQUIV="Content-TyPe" content="text/html; 
                                                                CHARSET=utf-8">
     <titlE>Testing HTML 4.01</TITLe>
     </head>
     <body>
     <P>This is some sloppy HTML 4.01!
     <oL>
     <LI>List item one
     <LI>List item two
     <li>List item three</LI>
     </Ol>
     </BODy>
     </HTmL>

Para comparação eis o mesmo reescrito em XHTML 1.1:


     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
     <head>
     <meta http-equiv="content-type" content="application/xhtml+xml; 
         charset=utf-8" />
     <title>Testing XHTML 1.1</title>
     </head>
     <body>
     <p>This is some clean XHTML 1.1!</p>
     <ol>
     <li>List item one</li>
     <li>List item two</li>
     <li>List item three</li>
     </ol>
     </body>
     </html>

Como pode comprovar o segundo exemplo é mais legível (desde que saiba sintaxe HTML). Tudo excepto o DOCTYPE está em minúsculas e tudo que tem um início tem um fim explicíto. Não é só mais fácil, evita que o navegador faça algum trabalho de adivinhação sobre o local onde seria suposto encontrar-se os marcadores de fecho. Por exemplo um <li> pode ser fechado no final da linha, mas também é possível envolver coisas dentro de itens de lista.

Um navegador não sabe até atingir o marcador de abertura seguinte se deve fechar o marcador anterior ou se o deve deixar aberto. Assim não há só confusão para uma pessoa que leia o código, mas para a reprodução da página. Implicitamente esta lógica extra necessária provoca um aumento do tempo de carregamento, independentemente do caso de uns tantos bytes extra necessários ao fecho dos marcadores de cada vez que são abertos. O código limpor é reproduzido mais rapidamente, ponto parágrafo. Para prova de tal verifique estes artigo (não o código do sítio).

Terminador por si:

No final do Terminator 2, Arnold diz "não posso acabar comigo". No caso do XHTML isto é bom. Se tudo o que começa tem que ser terminado há alguns pontos nos quais o HTML mesmo que bem formado tem uns quantos problemas. No exemplo acima, há um desses pontos no marcador meta descrevendo o tipo de conteúdo.

Em HTML um meta termina com um ">" significando que tecnicamente ele se mantem aberto. O XHTML corrige isto terminando-se a sí próprio o meta com um traço de fracção final "/>". Outros marcadores com o mesmo comportamento são img, br e hr – todos são tipicamente deixados "em aberto" no HTML, terminando-se a sí próprios no XHTML. Isto torna muito mais fácil uma leitura sabendo que sempre que encontrar um "/>" se está na presença do fim do marcador.

Resumo:

Deixando de lado toda a argumentação para servir XHTML como text/html ou como application/xhtml+xml, prefiro XHTML devido à rigidez inerente à sua validação. Isto claro que não quer dizer que o HTML não possa ser escrito com um padrão muito próximo em mente o problema é que não não é exigído. Veja se me entende não estou a dizer que o XHTML é a forma mais apropriada de fazer as coisas.

Isto não é uma atitude pedante. Sei perfeitamente que o HTML pode ser tão estruturado e semântico quando o XHTML. Roger Johansson e Robert Nyman são perítos em desenvolvimento de web e ambos usam HTML 4.01 estrito de maneira adequada. Ambos fecham tudo e usam código em minúsculas. Robert escreveu um artigo sobre html versus xhtml. Roger é claramente um apaixonado pelo fecho adequado dos marcadores como pode ser comprovado no seu artigo.

Doug Bowman, outra lenda no campo usa XHTML 1.0 estrito, mas serve-o como text/html, sem grande problema. Vejo a lógica por detrás dos argumentos de ambos os lados sobre quererem continuar a trabalhar adequadamente com navegadores obsoletos, etc.

Voltemos ao assunto principal: Resolvemos os mistérios da humanidade? Não. Este artigo está aqui para provar as vantagens de um doctype sobre outro? Não. Só quiz dar uma revisão geral sobre o que me levou inicialmente para o XHTML e porque prefiro continuar a usar. O aspecto fundamentar é que independentemente do que escolha se lhe mantenha fiel. Não tente misturar - mantenha os marcadores em minúsculas e feche-os.

Ou seja no fim disto tudo. Faça uma selecção de um standards e depois aja em conformidade com o mesmo. Uma disputa sobre que standard seguir é fútil.

24 novembro, 2005

Esquadria azul à volta de uma imagem

Tornar uma imagem a ligação para outra página é muito simples, o HTML que segue trata disso:


 <a href="http://aindaapensar.blogspot.com/">
 <img src="/aindaapensar.png" 
alt="logotipo de aindaapensar"> </a>

No entanto irá verificar que aparece uma esquadria azul à volta da imagem. Esta esquadria serve para informar os utilizadores que a imagem é uma ligação. Claro que há algo a dizer para indicar o que é que ou não uma ligação.

Hoje a generalidade dos designers da web tornam óbvio através das concepções do anúncios ou botões de navegação aqueles elementos que são ligações e nos quais se pode carregar. Então como é que apagamos essa esquadria?

Aqueles que gostam de aplicar as recomendações devem usar folhas de estilo e assim o código será algo como:


 <a href="http://aindaapensar.blogspot.com/">
 <img src="/aindaapensar.png" 
alt="logotipo de aindaapensar"
style="border-style: none"> </a>
Ou ainda melhor remetendo a regra para a folha de estilo separada:

img
{
 border-style: none;
}

E no elemento header da sua página fazer uma menção à folha de estilo:


 <link href="/folha_de_estilo.css" 
rel="stylesheet" type="text/css">

Este método irá automaticamente remover a esquadria azul de todas as imagens que usem este ficheiro css e no caso desta regra não ser ultrapassada por outra mais específica.

23 novembro, 2005

div versus span

Para quem não sabe um elemento div é um elemento bloco e um elemento span é um elemento em linha.

Para os curiosos podem dirigir-se à fonte do html

O que é que é isso de elemento bloco e elemento em linha?

Campos escaláveis

As listas de discussão podem não ser a leitura mais agradável que se possa ter mas permite que um principiante aprenda umas coisas.

Por exemplo quando o utilizador altera o tamanho do tipo de letra é razoável esperar que o campo de pesquisa também veja o seu tamanho aumentar para que isso suceda basta na nossa folha de estilo incluir algo como:


form input {
      width: 15em;
      height: 1.3em;
      font-size: .9em;
}

Nem todos os navegadores respondem a isto de forma imediata alguns necessitam de ser refrescados para ajustarem a altura por exemplo de um select

Com o código acima aumenta a largura e altura do campo assim como o tamanho do tipo da letra.

RSS

No blogue da equipa de RSS da Microsoft diz-se que:

...a nossa experiência de vários anos com o HTML no IE ensinou-nos os problemas a longo prazo que resultam de sermos demasiado liberais naquilo que aceitamos de terceiros. Assim, adoptamos o seguinte princípio para o IE7 e a plataforma RSS no Windows Vista: só iremos suportar alimento XML bem formado.

O que me der na mona

Estou a experimentar uma alternativa ao blogger, o wordpress em "O que me der na mona". Até agora a primeira coisa que me salta à vista é que o processo de produção de colocação na net de um texto permite uma classificação coisa que este directamente não faz. Assim provavelmente a minha secção de Web Standards em Portugal vai passar para lá ficando neste blogue pequenos excertos de html, javascript, css, ruby e outras coias mais associadas a puro código.

As minhas observações sobre web design, arquitectura de informação, web 2.0 e outras devem passar para lá (claro que mantendo-se aqui o que já cá está.)

22 novembro, 2005

background-color e color

background-color e color

Algumas pessoas quando vêm o relatório do validador de CSS acham sem importância os avisos em especial quando estes se referem a cores de texto e cores de fundo (color e background-color).

Quando não se especifica uma ou outra o que pode suceder é que um visitante do sítio ter uma configuração específica em que ambas em determinados elementos sejam coincidentes e nesse caso o visitante deixará de poder ler o conteúdo pois a página lhe vai parecer vazia.

21 novembro, 2005

Web Standards em Portugal

Parem a Impressão, parem a impressão! O novo sítio da Universidade de Lisboa passou a validar!

Não sei em que dia é que isto terá sucedido mas o novo sítio da Universidade de Lisboa passou a validar.

A utilização de tabelas para criar a disposição dos vários elementos mantêm-se (mas já esteve mais longe).

Resumindo a componente mecânica já está! Falta a componente mais humana (semântica).

É pena que haja pelo menos uma página na UL(no interior) com erros ligeiros (falta de fecho de parágrafo) quando deviam validar página a página (teste unitário) para saberem o que mudar.

O CSS também valida com alguns avisos em especial com falta de cores de fundo em elementos com cor (de texto) ou vice-versa.

Continuam a usar atributos que já não se esperaria usarem td com width .

Já agora depois de transformarem as tabelas que não são tabelas em div e torna-se em algo importante um sítio de um estabelecimento de ensino superior a seguir as regras.

18 novembro, 2005

Verificar CSS

Como é que posso verificar se o CSS está correctamente formado e se está de acordo com os Standards do W3C?
O W3C tem um validador de CSS o qual verifica URL, submissão de um ficheiro (CSS ou HTML com folha de estilos <style> ou cópia de CSS directamente para uma caixa de texto para verificação.
Existe para o Firefox um plug in para responsáveis por desenvolvimento de sítios que tem ligações para uma série de validadores entre eles este.

17 novembro, 2005

Como Centrar Conteúdos

Como Centrar Conteúdos

Um problema comum para web designers é centrar conteúdos numa página web

O modelo actual do (X)HTML e do CSS é ver cada documento Web como uma área não limitada e, uma janela de navegador como uma vista para esse documento e não uma parte do mesmo. Daí ser impossível centrar um documento em qualquer janela de navegador.

No entanto por vezes é absolutamente necessário centrar verticalmente uma página ou páginas. Há essencialmente três formas de o fazer: através da combinação de JavaScript e posicionamento absoluto CSS; ou através de métodos arcaicos HTML (usando um arranjo de uma só célula de tabela); ou podemos usar regras de estilo CSS para esticar o documento até 100% da janela do navegador em altura e depois centrar verticalmente o resto da página. O método QuircksMode pode ser usado para esticar o documento. É realmente simples. Só é necessário encontrar o elemento (X)HTML que é para o navegador o equivalente da sua janela - a combinação html e body é suficiente para a generalidade dos principais navegadores e depois definir uma divaninhada com posicionamento absoluto.

(Pode ainda ajustar-se as características desta div com atributos overflow, min/max width/heightetc.)

O código resultante seria algo como (substituir ... por valores adequados ao seu caso):


<... (veja o método QuircksMode para decidir que doctype...>
<html>
   <head>
      <title>Processo de Centragem Vertical da Victoria
                   - Página de Teste</title>
      <style type="text/css">
         html, body   { background-color: blue;
                        height: 100%; 
                        margin: 0;
                        padding: 0;
                        color: yellow; 
                        text-align: center; }
         div#centered { border: 0; 
                        background-color: white;
                        height: 50%;
                        width: 50%;
                        position: absolute;
                        left: 25%;
                        top: 25%;
                        color: black; }
      </style>
   </head>
   <body>
      <div id="centered">
         div centrada verticalmente
            (<a href="http://vmalek.murphy.cz" 
                   title="Processo de Centragem 
                          Vertical da Victoria">
                          Ver comentários acima</a>).
      </div>
   </body>
</html>

Web Standards em Portugual

Para quem ache que tudo o que escrevo é para deitar abaixo, tal não é de facto verdade.

Como já tinha anteriormente dito em Portugal existem responsáveis pelo desenvolvimento de sítios web que levam a sério os web standards.

Hoje irem tentar aqui colocar páginas de entidades que já estejam a aproximar-se desse alvo a atingir, não por si, mas porque isso facilitará a vida as seus visitantes.

  • log

    As páginas validam o XHTML e o CSS. Gostaria de perceber porque é que num sítio com padrão elevado (para a média nacional) depois se falha (ou então porque é que se dicide desta forma) nos detalhes. Está quase lá em termos de standards.

    Em termos gráficos já tenho um problema um pouco maior com a página. O sítio é na minha opinião demasiado frio, quase sem grafismos, a não ser os botões de navegação e o próprio logo. Além disso não é suficientemente flexível pois se ampliarmos os tipos o aspecto começa a ficar excessivamente degradado (excepto no Opera claro). Talves fosse melhor começar a treinar as pessoas que desenvolvem sítios torná-los à prova de bala.

    Imagem reduzida do sítio da Log com texto ampliado

    Algo curioso é os sítios instituicionais por ela produzidos não alcançarem o padrão em termos de web standards do próprio sítio. Será que o sítio apresenta uma evolução. Por último, foi a única empresa de desenvolvimento, em que vi código tão bom.

Esta lista irá, julgo/espero, crescer à medida que for encontrando sítios assim ou melhores (claro que na minha opinião).