CSS Only Tabbed Navigation

Toda a gente reconhece que a web está mais airosa com todo o poder que o JavaScript e um (não tão) novo paradigma assíncrono lhe confere. Isto tudo potenciado por browsers mais poderosos, com motores de JavaScript poderosíssimos e computadores, sejam eles portáteis ou de secretária, com processadores de fazer inveja a alguns servidores com meia dúzia de anos.

Embora um defensor acérrimo e contribuinte da filosofia/movimento opensource, não aceito que a solução seja simplesmente importar um plugin jQuery UI. Desde logo, porque acabamos por obrigar os utilizadores a descarregar mais dados, ficamos a lutar contra algumas limitações dos browsers (i.e. número de pedidos concorrentes) e por fim, mas não por último, porque a maioria desses plugins não tem em consideração questões de acessibilidade.

Lembro os mais distraídos que também o CSS tem evoluído e com apenas uma das novidades do CSS3, consegui uma solução de navegação por separadores, com um DOM muito limpo e poucas linhas de CSS.
Continue reading

PortugolViana

PortugolVianaAproveito para divulgar o projecto PortugolViana: “uma ferramenta open-source para edição/execução algorítmica.”

Esta ferramenta será de extraordinário valor para quem está a aprender fundamentos de programação/algoritmia, permitindo executar pseudo-código, bem como corrê-lo em modo de depuração, acompanhando a execução passo-a-passo.

A trabalhar com uma geração a quem o papel e lápis já pouco dizem, impaciente por natureza, esta ferramenta será útil para manter o interesse no pseudo-código como meio para atingir um fim.

Este projecto está a decorrer na ESTG, Instituto Politécnico de Viana do Castelo, sob a coordenação do António Miguel Cruz.

Ruby e RubyGems em CentOS

Sem segredos:

# yum install -y ruby
# yum install -y ruby-devel ruby-docs ruby-ri ruby-irb ruby-rdoc

Prevendo que pode mesmo acontecer:

# sudo yum install httpd-devel\
  openssl-devel\
  zlib-devel\
  gcc\
  gcc-c++\
  curl-devel\

e depois sim

# passenger-install-apache2-module

The Apache 2 module was successfully installed.
Yupi!

vimdiff em 5 comandos

Uma poderosa ferramenta em 5 comandos:vim diff

  • do – Passa a alteração da “outra” janela para a “actual”;
  • dp – Passa a alteração da janela “actual” para a “outra;
  • ]c – Salta, seleccionado, a próxima diferença;
  • [c – Salta, seleccionando, a diferença anterior;
  • Ctrl W + Ctrl W – Passa o cursor para a janela seguinte.

Onde começa o futuro da produtividade?

A Microsoft (doravante designada por m$ ou microshit) chega e diz: “The Future of Productivity Starts Here”, isto numa página onde compara a sua mais recente suite office com o Google Docs.

Comecemos pelo inicio: o título da página.

“Google Docs opens Word files with many file integrity problems. Compare viewing results of Word Web App vs. Google Docs.”

in sharepoint.microsoft.com

Isto no bom português de Camões: o Google Docs abre ficheiros Word com muitos problemas de integridade. Compare, vendo os resultados do Word Web App vs Google Docs.

E para o caso de o utilizador não ligar muito ao título da página a m$ torna a coisa ainda mais clara:

“People expect existing documents from their desktop to look exactly the same when they share them in the cloud. In this demo, you will see completely different results when viewing the same document using Word Web App and using Google Documents.”

in sharepoint.microsoft.com

Para que todos percebam a profundidade da declaração: As pessoas esperam que os documentos que têm no seu computador de secretária sejam exactamente iguais quando partilhados na nuvem. Nesta demonstração irá ver resultados completamente diferentes quando visualiza o mesmo documento com o Word Web App ou Google Documents.

Posso resumir a minha indignação, que na verdade é o elemento que me leva a escrever estas linhas, convidando o leitor a ler a página No Word Attachments, mas dedicarei ainda mais uns minutos à causa. Continue reading

VirtualBox sem GUI

Para os servidores virtualizados que referi em artigos anteriores (Nem todo o servidor é um servidor web, home dos utilizadores como DocumentRoot) não estou a usar GUI.

Derivado desta situação não há qualquer vantagem em ter uma janela para as respectivas shell de cada máquina, até porque o arranque é muito mais demorado.

Estando a usar o VirtualBox OSE, encontrei por essa internet fora duas posições distintas, discordantes no facto de a versão OSE permitir ou não arrancar as máquinas virtuais sem GUI (GUI esta não do sistema operativo guest mas sim do gestor de máquinas virtuais do VirtualBox).

Confirmei posteriormente que sim e segue a lista de comandos uteis. Continue reading

PCRE Unicode Support

Não serão os únicos a encontrar este pequeno contratempo quando estão num ambiente CentOS5 e PHP a usar expressões regulares que contemplem caracteres unicode.

PHP Warning: preg_match(): Compilation failed: support for \P, \p, and \X has not been compiled at offset 2 in wp-content/plugins/dnsyogi/testunicode.php on line 4

Só para despiste, na vossa shell, executem a seguinte instrução

$ pcretest -C
PCRE version 6.6 06-Feb-2006
Compiled with
UTF-8 support
No Unicode properties support
Newline character is LF
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Default recursion depth limit = 10000000
Match recursion uses stack

Ainda não é possível resolver esta questão com o recurso ao yum pelo que é necessário criar um rpm a partir do source (ou usar algum dos que estão referenciados no tutorial).
Continue reading

Nem todo o servidor é um servidor web

Há máximas que devemos ter sempre presentes:

“Nem todo o servidor é um servidor web.”

Finalmente ganhei coragem para configurar um verdadeiro ambiente de desenvolvimento completamente virtualizado, onde as VMs têm como sistema operativo CentOS 5 instalado a partir da netinstall e criei uma bridge do host para o guest.

Como padrão o webserver corre Apache na porta 80 e o servidor de dados irá correr MySQL na 3306.

O problema é que embora tivesse o Apache a correr e conseguisse pingar a máquina pelo seu endereço IP e hostname não estava a chegar ao Apache.
Lá se fez luz e fui direitinho à iptables adicionar a regra para a porta 80 que por omissão está fechada.
Continue reading