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

03 março, 2007

Matéria para a Matéria Cinzenta - Idea 2006

Eis um agregado de podcasts com o conteúdo da Idea Conference 2006 em Seatle. Esta conferência dirigia-se a arquitectos de informação e a bibliotecários (os primeiros especialistas a terem que lidar com grandes quantidades de informação e necessidades inerentes de classificação, preservação e recuperação. Nota: a conferência foi realizada na biblioteca pública desenhada por um dos discípulos de Koolhaas, e também apresentada por Prince Ramus e podemos ver o que está por detrás do conceito desta biblioteca neste vídeo:

Durante a Idea 2006 a responsável apresenta a sua visão sobre a concepção da Biblioteca.

O que é que pensam daquilo que escutaram?

02 março, 2007

Yahoo.news em gmail?

Alguém me explica esta imagem, por favor:

TDD vs BDD - Parte I

Em dezembro escrevi aqui um pequeno artigo sobre BDD - Desenvolvimento Orientado pelo comportamento e TDD - Desenvolvimento Orientado pelo Teste para melhor ilustrar a diferença hoje apresento um exemplo básico de desenvolvimento em TDD.

Os passos a seguir são:

  1. Escrever o teste
  2. Escrever a lógica
  3. Fazer a lógica passar o teste
  4. Refactorizar
  5. A cada refactorização verificar que o teste continua a ser passado
  1. Vamos pois passar ao primeiro passo escrever o teste mais simples possível. Em TDD em ruby a primeira coisa que há a fazer é criar um programa que comece por requisitar os testes unitários:

    
    require 'test/unit'
    

    Para exemplificar iremos criar um Exemplo e portanto iremos criar um teste designado por ExemploTeste:

    
    require 'test/unit'
    
    class ExemploTeste < Test::Unit::TestCase
      def test_initialize
        ex = Exemplo.new
        assert_not_nil(ex)
      end
    end
    

    Corra o programa e veja o que sucede surge um relatório com o número de presunções, falhas e erros com um erro (1 presunção, 0 falhas e 1 erro).

  2. Passemos pois ao passo número 2.

    Criar a classe a testar:

    
    class Exemplo
       def initialize
       end
    end
    
    require 'test/unit'
    
    class ExemploTeste < Test::Unit::TestCase
      def test_initialize
        ex = Exemplo.new
        assert_not_nil(ex)
      end
    end
    

    Se agora corrermos o teste iremos ver que não temos erros. Passámos o teste.

    Se o programa só fizesse isto não servia para nada, por isso, imaginemos que quando um Exemplo é gerado o mesmo gera uma variável com uma string vazia. Ao teste existente acrescentamos um método:

    
    class Exemplo
       def initialize
       end
    end
    
    require 'test/unit'
    
    class ExemploTeste < Test::Unit::TestCase
      def test_initialize
        ex = Exemplo.new
        assert_not_nil(ex)
      end
      def teste_exe
        ex = Exemplo.new
        assert_equal("",ex.exe)
      end
    end
    
  3. Agora corremos novamente o programa teste e vemos que obtemos um erro, pois não existe variável exe na classe a testar. A nossa próxima acção é tratar de a incluir da forma mais simples para passar este teste.

    
    class Exemplo
       attr_reader :exe
       def initialize
       end
    end
    
    require 'test/unit'
    
    class ExemploTeste < Test::Unit::TestCase
      def testar_initialize
        ex = Exemplo.new
        assert_not_nil(ex)
      end
      def testar_exe
        ex = Exemplo.new
        assert_equal("",ex.exe)
      end
    end
    

    Executando novamente o programa vemos que ele passa sem erros mas falha! Porque falta a atribuição inicial de valor a exe. Então tratemos disso

    
    class Exemplo
       attr_reader :exe
       def initialize
         # a arroba denota que é uma variável de instância
         @exe = ""
       end
    end
    
    require 'test/unit'
    
    class ExemploTeste < Test::Unit::TestCase
      def testar_initialize
        ex = Exemplo.new
        assert_not_nil(ex)
      end
      def testar_exe
        ex = Exemplo.new
        assert_equal("",ex.exe)
      end
    end
    

    Agora se correr o programa este passa sem erros nem falhas. O programa evoluíu um pouco. Mas se uma variável não pudesse mudar de valor de pouco servia, vamos pois tentar criar um teste para a mudança do seu valor.

    
    class Exemplo
       attr_reader :exe
       def initialize
         # a arroba denota que é uma variável de instância
         @exe = ""
       end
    end
    
    require 'test/unit'
    
    class ExemploTeste < Test::Unit::TestCase
      def testar_initialize
        ex = Exemplo.new
        assert_not_nil(ex)
      end
      def testar_exe
        ex = Exemplo.new
        assert_equal("",ex.exe)
        ex.exe = "Olá moça!"
        assert_equal("Olá moça!",ex.exe)
      end
    end
    

    Se corrermos o programa ele terá uma falha pois não há forma de mudar o valor. Então tratemos de o fazer.

    
    class Exemplo
       attr_reader :exe
       attr_writer :exe
       def initialize
         # a arroba denota que é uma variável de instância
         @exe = ""
       end
    end
    
    require 'test/unit'
    
    class ExemploTeste < Test::Unit::TestCase
      def testar_initialize
        ex = Exemplo.new
        assert_not_nil(ex)
      end
      def testar_exe
        ex = Exemplo.new
        assert_equal("",ex.exe)
        ex.exe = "Olá moça!"
        assert_equal("Olá moça!",ex.exe)
      end
    end
    
  4. Agora já não temos nem erros nem falhas. Passamos o teste. Então chegou o momento de refactorizarmos a nossa classe Exemplo:

    
    class Exemplo
       attr_accessor :exe
    
       def initialize
         # a arroba denota que é uma variável de instância
         @exe = ""
       end
    end
    class ExemploTeste < Test::Unit::TestCase
      def testar_initialize
        ex = Exemplo.new
        assert_not_nil(ex)
      end
      def testar_exe
        ex = Exemplo.new
        assert_equal("",ex.exe)
        ex.exe = "Olá moça!"
        assert_equal("Olá moça!",ex.exe)
      end
    end
    
  5. Voltamos a correr o teste e podemos comprovar que a nossa refactorização correu bem.

Recursos em inglês

Novas Profissões

De acordo com Web Worker estão à disposição cinco novas profissões geradas pelo mundo digital.

  1. Produtor de Novos Meios -- Género Ask a Ninja ou RocketBoom.
  2. Artesão de Legendagem de Roupas -- Género Lactivist.
  3. Microinvestidor -- Género prosper.
  4. Editor -- Tirando partido de serviços como a lulu.
  5. Curador Comunitário -- Usando sítios como o ning.com

Second Life no Público e AdaptivePath

Hoje o Público (edição em papel) tem uma tradução de um artigo do LA Times sobre a perca da inocência no Second Life. Como leitor atento do blogue da Adaptive Path tenho vindo a acompanhar uma série (ainda pequena) de artigos relativos às entrevistas conduzidas por Chiara Fox e Andrew Crow numa sala devidamente preparada pelo Linden Lab.

Já agora o quartel-general, da campanha do John Edward, foi vandalizado no Second Life.

01 março, 2007

Diambulações

Hugo Neves da Silva no seu Lisbon Lab tem um conjunto de entrevistas, que designa por BloggerView, muito interessantes.

Tim Berners-Lee testemunhou no Congresso Americano como períto sobre o futuro da www.

Porque é que não escrevo em inglês tem que ser actualizado.

Porque o meu conhecimento de inglês não chega aos pés do Language Log. Já agora este é um dos sítios de que assinei o respectivo alimento. É bom para aprender algo sobre a língua inglesa.

Address, o elemento esquecido?

Há uma lista de elementos HTML que estão mal representados na generalidade da marcação usada actualmente na web. Vários destes elementos têm maior valor semântico que o que actualmente é aplicado, mas com o aumento da popularidade do design orientado pelo CSS com os elementos HTML a serem usados para o que foram concebidos julgo que seria bom expôr estes elementos indicando em que situações seriam úteis. Um desses elementos é o elemento address:

<address>

O marcador <address> foi concebido para conter informação sobre endereços, assinatura e autoria. Números de telefone, fax, endereços físicos, endereços de correio electrónico, ICQ/Gtalk... ou qualquer outros dados de contacto em linha e fora dela são todos válidos. Normalmente os elementos <address> encontram-se no topo ou na parte de baixo do documento.

Utilização:

<address>
O Nome da entidade <br />
Rua do Mistério, 126 <br />
1025 Lisboa <br />
Telefone: 21 000 0000 <br />
Fax: 21 00 0001
</address>

Para quê? Posso fazer o mesmo com um marcador <div>

Os elementos agrupados com um <div> não têm valor semântico excepto se lhes for atribuída uma identificação ou classe. Então porquê criar uma <div class="contacto"> quando já há um elemento que o pode fazer?

Exemplo:


address {
  background-color: #dfd;
  padding: 4em 0 4em 4em;
  font-style: normal;
}

...

<address>
<a href="http://aindaapensar.blogspot.com">Carlos</a>
<br />
NaoSeTrataDeNenhumaInstituição <br />
Rua da Estória, 23424 <br />
1025 Lisboa

O resultado:

Carlos
NaoSeTrataDeNenhumaInstituição
Rua da Estória, 23424
1025 Lisboa

Joost

A última actualização ocorreu em 2007-05-01.

O Joost acaba de me enviar uma mensagem dizendo-me que tenho mais alguns convites disponíveis para quem queira testar este novo sistema de ver TV. Os poucos leitores deste blogue que queiram experimentar podem pedir um nos comentários. Este serviço Joost exige banda larga e um computador que não seja um molenga a contrapartida é poder aceder-se a alguns programas de televisão com boa qualidade. O interface é diferente do de uma televisão. Toma por defeito a totalidade do ecrã mas pode ser posto a correr numa janela. Há versões para Windows e para Mac.

--Completamente fora de tópico.

De momento já não tenho convites para enviar Para a Anna e outros leitores, de momento não tenho convites. A recusa do vosso comentário é só para evitar poluir excessivamente o blog. Quando e se tiver convites volto a contactar. Volto hoje, 2006-04-26 a ter 4 convites disponíveis. Agradecia que quem pedisse um convite me fizesse chegar um comentário com: aliteração (alias) nome (nome próprio), apelido (sobrenome), e mail válido agradecia que não o ofuscassem em demasia. Em vez de publicar os comentários passarei a colocar um comentário eu mesmo com a aliteração ou caso não seja enviado com o nome próprio da pessoa que pede. Isto evitará que eu atribua um nome à pessoa. O mail tem que ser válido para a joost poder confirmar a v. inscrição. Houve dia 27 de Abril quem tenha pedido um convite, só não tenho dados válidos para lho puder enviar.

18 fevereiro, 2007

Novos Rascunhos do W3C

Segunda Versão do XHTML 1.1: Rascunho de Trabalho

O Grupo de Trabalho do HTML acaba de distribuir a segunda edição do XHTML 1.1 - XHTML baseado em módulos como rascunho de trabalho em preparação para Proposta Editada de Recomendação. XHTML 1.1 é uma reformulação do XHTML 1.0 Strict baseado em módulos XHTML. Não se trata de uma nova versão, a segunda edição incorpora todas as correções conhecidas e acrescenta uma nova descrição em esquemas XML.

XML Events 2: Rascunho de Trabalho

O Grupo de Trabalho do HTML distribuiu o Rascunho de Trabalho do XML Events 2: Uma Sintaxe de Eventos para XML. Para associar comportamentos a marcadores, os conceptores de linguagens podem incorporar o módulo nesta especificação para integrarem escutas e manipuladores de eventos com interfaces de eventos de nível 2 do DOM. A versão 2.0 adiciona nova funcionalidade para tratamento condicional de ventos e adiciona elementos explicitos aos manipuladores. Também actualiza o esquema XML e o DTD e incorpora todos os erros conhecidos encontrados na Recomendação de Eventos XML de 2003.

17 fevereiro, 2007

Compilação Rápida e Compilação Completa

Compilação Rápida / Compilação Completa

  1. Contexto
  2. Solução
  3. Motivação
  4. Ampliação

Contexto

Tem um sistema grande com milhares e milhares de testes. As suas compilações vão ficando cada vez mais lentas e começão a tornar-se um peso para a equipa. Está a trabalhar numa nova funcionalidade e uma grande parte dos testes testa algo onde não toca há meses. Continuando a desejar a segurança de não regredir em funcionalidade existente gasta várias horas do dia a testar algo que é pouco provável quebrar.

Solução

Criar duas compilações: uma compilação rápida e uma compilação completa. Mantenha uma lista de teste excluídos e exclua a maior parte dos testes da compilação rápida e faça com que esta seja realmente rápida, à volta de 10 minutos. Deixe só coisas que sejam muito prováveis quebrar, coisas em que esteja a trabalhar e coisas sensíveis. Não perca tempo a classificar teste, penso só se é provável que quebrem ou não. A compilação completa percorre todos os testes.

Execute a compilação rápida como parte de cada commit, antes do commit e como parte da verificação da integração contínua da compilação.

Execute a compilação completa menos frequentemente. À noite, algumas vezes ao dia ou numa máquina diferente executando em permanência (mas menos frequentemente visto sem obviamente mais lenta). Quando efectuar refactorizações grandes de componentes partilhado deve provavelmente executar uma compilação completa.

Adicionalmente mantenha uma lista de testes incluídos nas compilações rápidas, quando um teste falha na compilação completa deve ser de imediato adicionado à lista de testes a executar na compilação rápida e ser executado na compilação rápida seguinte.

Motivação

A função da integração contínua é dar uma resposta de imediato. Quando mais rápida for esta resposta mais rapidamente é possível corrigir o problema e seguir. Os ganhos de produtividade de uma compilação de 10 minutos é de uma ordem de grandeza mais elevada do que o de uma compilação de 1 hora.

Quando tem uma compilação grande e lenta essencialmente perde essa resposta rápida. Para voltar a ter essa resposta rápida constrói uma compilação rápida que irá potencialmente apanhar uma grande parte das falhas possíveis. Não sacrifica nenhuma segurança pois a compilação completa ainda é executada e protege-o contra regressões.

Esta segurança pode ser melhorada adicionando automaticamente testes que tenham falhado recentemente logo que falhem na compilação completa. Se falhou recentemente pode voltar a falhar, é óbvio. Também assegura que os programadores tratem de corrigir o teste visto não deverem efectuar commit com uma compilação rápida com defeito.

Ampliação

Este padrão pode ser ampliado incluindo várias camadas de compilações. Por exemplo pode ter camadas para compilação rápida, compilação completa e depois um conjunto completo de testes funcionais. Os testes funcionais com a totalidade dos sistemas de retaguarda ligados e activos podem ser extremamente lentos. Não é fora do comum ter conjuntos destes a correrem mais de 24 horas seguidas.

Numa das sessões do Google Edu, a responsável pelos testes dizia que considerava que o mínimo para estes testes serem executados era de cerca de 1 semana (pois o padrão de acessos varia com o dia da semana e a hora do dia).

12 fevereiro, 2007

As alegrias do mês na Microsoft

as alegrias do mês na Microsoft.

Porque não escrevo em inglês

Houve um dos meus leitores (algo que eu pensava não ser muito abundante) que me pediu para escrever em inglês. Até hoje não comentei o comentário dele, pois ainda não me tinha ocorrido a respostam mais adequada até que a encontrei aqui: "English As She Is Spoke."

Já agora, ainda não consegui ver o meu nome na lista do ILG pois ainda não me dei ao trabalho de migrar os meus conteúdos para uma nova plataforma, pois não consigo eliminar alguns dos erros que encontro nesta. Mas o trabalho não deverá demorar muito.

Um chico esperto

O jornal o Público pública hoje uma notícia com o título "Governo terá perdoado uma multa...", na notícia propriamente dita aparece um chico esperto (não se trata do Chico Esperto que prezo)que de forma simples vem dizer que os tripulantes de aeronaves que combatem fogos não necessitam saber português, basta-lhes saber falar português. O que é que lhes parece isto. A ser verdade que a pessoa disse isto o que é que pensam sobre o assunto?

Palestra de Tim Berners-Lee em Espanha

O Tim Berner-Lee está aqui ao lado (em Espanha) na sua palestra no congresso mundial do GSM.

Isto hoje está complicado esta entrada devia pertencer ao meu outro blogue e nele figura uma entrada que devia estar aqui. Porcaria de confusão. Totalmente culpa minha. Acho que vou duplicar as entradas.

11 fevereiro, 2007

web 2.0 e respostas

A transcrição abaixo é uma tradução da Transcrição feita por Tonya Witherspoon.

Web 2.0 ... A Máquina Somos Nós/Está a Usar Nos

O texto é linear

O Texto é não linear

Diz-se que o texto é não linear

O texto é frequentemente dito como não sendo linear

O texto é não linear quando escrito em papel

O texto digital é diferente.

O texto digital é mais flexível.

O texto digital pode ser mudado.

O texto digital é acima de tudo ... hiper.

O hipertexto digital é acima de tudo...

O hipertexto é acima de tudo...

O hipertexto pode ligar

O hipertexto pode ligar

aqui

aqui

ou aqui...

virtualmente a qualquer sítio

virtualmente a qualquer sítio

a qualquer sítio virtual

A Máquina do TempoPassado

http://yahoo.com

Leva-me de Volta

17 de Outubro 1996

Yahoo

Ver Fonte

A maior parte dos sítios web eram escritos em HTML

<html>

HTML foi concebida para definir a estrutura de um documento web.

<p>

<p> é um elemento estrutural para nos referirmos a um "parágrafo"

<li>

<li> também é um elemento estrutural para nos referirmos a "Item de Lista"

À medida que o html foi expandida, foram adicionados mais elementos.

Incluindo elementos estilísticos como <b> para negrito e <i> para itálico

Esses elementos definiam como é que o conteúdo seria formatado.

Dito de outra forma, forma e conteúdo tornaram-se inseparáveis em html

O texto digital pode fazer melhor.

A forma e o conteúdo podem ser separados.

http://www.cnn.com

RSS XML

Ver Fonte

XML foi concebido para fazer exactamente isso.

<title>CNN.com</title>

<title> não define a forma, define o conteúdo.

<link>http://www.cnn.com/?eref=rss_topstories</link>

o mesmo com <link>

<description>CNN.com

e <description>

e virtualmente todos os outros elementos neste documento.

Eles descrevem o conteúdo não a forma.

Assim os dados podem ser exportados,

livres de constrangimentos de formatação.

Últimas Notícias

Blogues de Antropologia(124)

Mentes Crueis

8apps: Rede Social para Pessoas Produtivas

MUNDO EM MUDANÇA EIS OUTRO MUNDO AQUI

Jornais de Antropologia (124)

University of California Press

Journals Digital Publishing

Current Anthropology

AESonline.org

Google

Com a forma separada do conteúdo, os utilizadores não necessitam de usar código complicado para carregar conteúdo na web,

Sinto-me com sorte

Criar um Blog

Crie um nome para o blog

Para além do etexto (Beyond Etext)

http://beyondetext.blogspot.com

Escolha um modelo

O seu blogue está pronto!

Segunda-feira, 29 de Janeiro de 2007

Olá Mundo!

Colocado por PROFESSOR WESCH às 8:14 PM 0 COMMENTS

nasce um blogue a cada meio segundo

e não se trata só de texto...Busca

YouTube

Difunda-se A Si Mesmo

Esta é uma resposta em vídeo a A Beleza de Ser Humano

flickr

Ahoy mwesch!

Carregar fotos

Clube de Antropologia

Criado por si.

KSU Anthropology club

Club Photos

Google

XML facilita a troca automatizada de dados

dois sítios podem misturar dados em conjunto

flickr maps

Sinto-me com sorte

Limelight

Fluffy and white

Brushy Creek

Tokyo Delve's Sushi B..

Quem irá organizar todos estes dados?

TAG

del.icio.us

etnografia digital antropologia hipermedia

guardar

Quem irá organizar todos estes dados?

Tu.

Tu irás.

Google

XML + TU & EU iremos criar a web suportada na base de dados

a web suportada na base de dados é diferente

a web é diferente

a web

nós somos a web

Sinto-me com sorte

WIRED

ós somos a Web

Quando colocamos e depois etiquetamos as imagens estamos a ensinar a Máquina a dar nomes, estamos a ensinar a Máquina.

Sempre que forjamos uma ligação, estamos a ensinar-lhe uma ideia.

Pense nos 100 milhares de milhão de vezes por dia que os humanos diariamente clicam numa página da Web ensinando a Máquina

A Máquina

Diigo

Realce

Realce e Folha de Bloco Amarela

Misturar nota privada

a máquina é nós

O texto digital já não liga só informação...

O hipertexto já não liga só informação...

A Web já não liga só informação...

A Web liga pessoas...

Web 2.0 está a ligar pessoas...

...pessoas partilham, acompanham e colaboram...

Wikipedia

Web 2.0

alterar esta página

Temos que repensar algumas coisas...

Temos que repensar os direitos de autor

Temos que repensar a autoria

Temos que repensar a identidade

Temos que repensar a ética

Temos que repensar a estética

Temos que repensar a retórica

Temos que repensar a governance

Temos que repensar a privacidade

Temos que repensar o comércio

Temos que repensar o amor

Temos que repensar a família

Temos que nos repensar

por

Michael Wesch

Assistant Professor of Cultural Anthropology

Kansas State University

Etnografia digital

@ Kansas State University

música por DEUS "There's Nothing impossible"

Este trabalho é licensiado sob Creative Commons Attribution-NonCommercial-ShareAlike 2.5

A estes pensamentos há algumas respostas as abaixo e ainda outras.

09 fevereiro, 2007

CSS Fácil de Manter

Pistas e ligações a artigos para criação de folhas de estilo devem ser aqui coligidas. Para introdução do problema que estamos a tentar resolver ver [entrada no blogue do Simon]. Para ferramentas que ajudem na manutenção de folhas de estilo, ver TheToolsWillSaveUs.

  • [Arquitectar CSS], por Garrett Dimon, é uma boa revisão do problema com ideias fortes sobre como repartir as regras de CSS em diversos ficheiros.
  • [Redundância versus Dependência] por, Dave Shea, onde explora o equilíbrio entre dois extremos de desenvolvimento de CSS.
  • [CSS Modular], por Mike Stenhouse, descreve um esquema simples onde as regras são agrupadas em diferentes ficheiros baseadas em assuntos: tipografia, formulários, arranjos e cor.
  • [Organização de CSS], por Doug Bowman, pistas sobre agrupamento e indicação de grupos. (Por acaso acho que a separação do CSS em vários ficheiros é contraprodutivo em termos de manutenção, mas pode ser só minha opinião.)
  • [CSS que Pode Ser Facilmente Mantido], por Nathan Steiner, as suas pistas pessoais em resposta à chamada do Simon.
  • [Inclusão PHP em CSS], por Nick Bair, descreve o uso dos mecanismo de inclusão do PHP de modo a oferecer uma solução de ficheiro único para um CSS com facilidade de ser mantido.
  • [Técnicas de Ramificação] por Thierry Koblentz.
  • [Jogar de foma justa com o CSS das outras crianças], por Mike Stenhouse, tenta criar directrizes para fazer manutenção de CSS e codificação em equipa mais fáceis.

Segregar os seus estilos

Limitar especificamente o "alcance" das declarações de estilo. Por exemplo, tenho um certo estilo aplicado a conteúdo prefixo isso com um #conteudo, mesmo que não seja necessário. Especificar a parte da estrutura semântica a que o estilo se aplica irá essencialmente segregar o estilo de modo a que a cascata não afecte mais nada por acidente.

De forma similar separo o posicionamento da tipografia.

Desenvolver "conceitos" para o sítio/aplicação ajuda a manter as coisas sãs. Toda a decoração para cada conceito vai para o(s) seu(s) próprio(s) ficheiro(s). Exemplos de conceitos:

  • Carrinho de compras (carrinho-ecra.css / carrinho-impresso.css)
  • Tabelas de doces coloridas
  • Formulários de entrada de dados

Estes ficheiros podem depois ser ligados a tantas folhas de estilo quantas as necessárias.

CSS Fácil de Manter

As minhas recomendações para CSS Fácil de Manter. Admito que possa haver aqui alguma repetição mas estou a tentar ser mais conciso aqui.

  • Repartir o seu CSS no conceito coerente mais pequeno possível
estrutura.css
carrinhodecompras.css
basesdedados.css
descricoesdeprodutos.css
...
  • Organizar ficheiros num conjunto de pastas que lhe permitam perceber a finalidade de cada ficheiro. Mantenha aquelas coisas que tenham elevada probabilidade de alteração como (cor, tipografia, gráficos, etc) projecto a projecto, ou semana a semana em localizações diferentes
ecra/estrutura.css
ecra/carrinhodecompras.css
...

impresso/estrutura.css
impresso/carrinhodecompras.css
...

brand/estrutura.css
brand/carrinhodecompras.css...
  • Use ID raramente: ID tem que ser única numa página e assim sendo ao usarmos id em elementos estruturais significa que só iremos ter por exemplo um bloco conteudo numa página. Se for cuidadoso, #conteudo p é tão específico como .content p e <div class="conteudo">...</div> pode ser largado em tantos lugares quantos os necessários. Pode usar ID para algo como <div class="produto" id="produto00121">...</div> mas deve ter muito cuidado para se assegurar que só se refere uma vez numa página a produto00121.
  • Evite usar o mesmo nome de classe para diferentes finalidades: A cascata pode ser muito poderosa mas, por vezes, há a tentação de usar o mesmo nome de classe genérico em vários sítios. Se não segregar o seu CSS bem, pode correr perigo.
  • Usar sempre o mesmo nome de classe para finalidade similar: Visto a cascata ser tão poderosa deve reutilizar o mesmo nome de classe em diferentes classes quando representam o mesmo conceito.
  • Usar nomes de classes que revelem intencionalidade: Pode ser tentador usar nomes de classes breves mas demasiado cifrados (.s, .lbl) que no caso de não manter um glossário actualizado de nomes de classes irá esquecer o que querem dizer. Pode também correr perigo com navegadores desactualizados que podem ocasionalmente ser confundidos por nomes de classes breves que comecem da mesma forma (i.e. .err e .erros são, por vezes, confundidos.)
  • Colocar o seu nome de classe no elemento mais exterior onde faça sentido e Não Se Repita a Sí Mesmo (DRY): Por vezes irá ver coisas como:
 <div class="tituloproduto">...</div>
 <div class="descricaoproduto">...</div>

 <div class="ligacoesproduto">...</div>

É melhor escrever:

<div class="produto">
 <h3>...</h3>

 <div class="descricao">...</div>
 <div class="ligacoes">...</div>
</div>
  • Usar vários nomes de classes em todo o lado: As an example, if you have a form, fields are typically either required or optional and have an error or not. Without using multiple classnames you often end up with the following:
.exigido {...}
.opcional {...}

.erroexigido{...}
.erroropcional{...}

Isto frequentemente leva a muita duplicação de CSS visto a diferença entre exigido e opcional é normalmente um asterísco para indicar que determinado campo tem que ser preenchido. De forma similar campos onde haja erros são normalmente coloridos a vermelho ou são de algum outro modo realçados. Uma solução melhor é usar vários nomes de classes:

.campo {... propriedades comuns a campos, posicionamento, etc ...}
.exigido {... adicionar imagem de fundo ...}
.erro{... cor de texto diferente ...}

<div class="campo">...</div>
<div class="campo exigido"> ... </div>

<div class="campo erro"> ... </div>

A única vez que isto lhe poderá trazer problemas sucede quando nos campos exigidos quando com erros o IE não compreender .exigido.erro correctamente.

Esta entrada é uma tradução de http://css-discuss.incutio.com/?page=MaintainableCss.

Abriu o ILG - da WaSP

A 5 de Fevereiro a Molly apresentou ao mundo o novo grupo do WaSP para divulgação de técnicas standard na produção de sítios web. Este grupo de ligação internacional deverá funcionar como uma alavanca na introdução/divulgação de técnicas standard de produção de sítios web a nível mundial com diversos especialistas em vários pontos do globo.

Um fulano muito mais inteligente que eu

Sergey. Algo que é muito frequente, demasiado para o meu próprio gosto.

Excerto de Entrevista a Eric Meyer

Numa recente entrevista a Eric Meyer quando perguntado por Todd Austin: Como é que as empresas podem ajudar as universidades a ensinar web standards, visto ter notado que muitos curricula ainda estão cheios de ensino de html com tabelas (para fins de arranjo)? Ao que Eric respondeu:

Deixem de empregar as pessoas que esses curricula produzem. É a única coisa que julgo iria funcionar, e isso não seria justo para as pessoas que não fossem empregues, visto não ser uma falha delas mas sim uma grande desajuda por parte dos seus instrutores. Mesmo assim, e mesmo sabendo que possa provavelmente parecer duro, será que as firmas de engenharia iriam empregar engenheiros que fosse treinados em engenharia do século XVIII? Será que uma firma de software iria empregar novos engenheiros formados em COBOL? Será que contrataria um contabilista que tivesse aprendido o Código de Impostos de 1950 e não tivesse aprendido nada desde essa data?

Porque é que será que as firmas da web devem fazer algo de modo diferente?

acronym-free environment

Substantial Experience with Ruby on Rails, XHTML, CSS, PHP and mySQL Comprehensive Understanding of XML and AJAX ability to work in an acronym-free environment

Não resisti acronym-free environment figura num anúncio para suporte a Mac.

Já agora aquele mySQL será que quer dizer MySQL.

Parece-me que ler este anúncio restaurou-me a boa disposição...