Tudo Sobre Nada

Para mais tarde recordar...

  1. Quando se tem uma classe completamente abstracta em C++, não nos devemos esquecer de declarar um destrutor virtual vazio, caso contrário arriscamos perder horas e horas de volta do valgrind a perseguir memory leaks em classes derivadas;

  2. Pior do que perseguir memory leaks só perder mais de um dia a tentar eliminar um segmentation fault cuja solução se resume a adicionar "+ 1" numa comparação;

  3. Implementar estruturas complicadas (recursivas) em C++ é uma brutal PITA. Quando essas estruturas implicam manipulação de blocos em disco... 2xPITA... Mas nem tudo pode ser Python...

Software Livre: What's the point?

Esta questão - que surgiu num dos comentários ao artigo anterior - é extremamente interessante, especialmente pela diversidade de respostas que pode suscitar...

Um tipo com uma forte componente ideológica dirá que é sempre importante o software cumprir as quatro liberdades básicas, enquanto um tipo pragmático estará apenas interessado em coçar a sua própria comichão (e, por isso, a sua definição de liberdade será bastante variável).

Na base, a maioria das pessoas são mais pragmáticas do que ideológicas: o software livre é apenas um meio de quebrar o vendor lock-in, democratizar o acesso ao software cujas alternativas proprietárias são bastante dispendiosas ou, em cada vez mais casos, simplesmente uma questão de escolher o melhor dos melhores. É uma questão de liberdade de escolha, pura e simples.
Estas mesmas pessoas não terão quaisquer obstáculos morais em escolher software proprietário, desde que continuem a sentir-se livres. Se efectivamente são 100% livres, pela definição, pouco lhes importa.

Raros são aqueles que participam no desenvolvimento de software livre simplesmente para obter uma alternativa livre. É do conhecimento comum que a maioria das pessoas participam porque querem uma alternativa de melhor qualidade, porque precisam de uma determinada funcionalidade que ainda não existe, ou simplesmente porque gostam de programar (e aproveitam para produzir algo útil).

A inexistência de um plugin Flash livre, é o mais claro exemplo disto. A maioria das pessoas (incluindo programadores) consideram o plugin proprietário suficientemente livre, para todos os efeitos.

Mas então... o software livre é importante? Sim. É a carga ideológica que não é assim tão importante...

Em teoria, a teoria é igual à prática, mas na prática não é...


Acontece que, teoricamente, o pragmatismo nesta questão converge para uma derrota do software livre, enquanto que a prática tem demonstrado precisamente o contrário...

Eu? Eu sou um pragmático.

Open-source Java: Who gives a shit?

A revisão dos termos de licenciamento do Java, para facilitar a sua inclusão nas distribuições de Linux, despertou novamente o debate sobre se este deve, ou não, ser tornado verdadeiramente open-source.

A anterior versão da licença não permitia distribuir o JRE/JDK juntamente com outras implementações, nem na ausência de uma aplicação Java de "maior valor" (monetário, parece). A nova versão elimina a segunda restrição e transforma a primeira na proibição de combinar a implementação da Sun com outras implementações concorrentes.

Parece-me perfeitamente razoável... Mas alguns consideram estas alterações insuficientes, e o Java Community Process (JCP) como sendo demasiado fechado para se fazer passar por um modelo de desenvolvimento open-source.

Mas, na verdade, quem é que quer um Java open-source? Isso é assim tão importante? Traz algum benefício tangível para os utilizadores e developers?

Quem tiver interesse em contribuir para o desenvolvimento do Java encontra facilmente o código-fonte disponível, e pode participar no JCP. No entanto, não pode distribuir versões modificadas...

Mas o Java é Compile Once, Run Anywhere, e a proliferação de versões ligeiramente modificadas seria um brutal pontapé no escroto desta importantíssima característica.

É verdade que o desenvolvimento de implementações alternativas sempre foi possível, e que se poderia evitar a fragmentação usando a mesma táctica que hoje é usada: definindo o que é o verdadeiro Java, e o que é apenas um sucedâneo.

Para evitar a confusão, qualquer versão modificada da implementação da Sun poderia simplesmente ser proibida de usar o nome "Java" e toda e qualquer imagética a ele associada.

No final, estariamos na mesma situação em que estamos hoje, onde apenas o verdadeiro Java interessa e todas as implementações livres são consideradas irrelevantes. Portanto, what's the point?

Entretanto, os zelotas podem continuar a tentar convencer as pessoas de que o GCJ/Classpath é que é bom, porque é livre e tal... como se isso fosse argumento suficiente*.

* Há alguém - no seu perfeito estado mental - a usar o GCJ para alguma coisa a sério?

Já lá vai o tempo...

...em que se conseguia ter um dual-boot entre um Windows 98 e um Red Hat 5.0 num disco de 1.2Gb.

Another One Bites The Dust...

Conselho de amigo: se tiverem um disco Seagate ST380021A (80Gb), façam backups regularmente...

No armário do meu gabinete já estão três, todos do mesmo modelo, e todos com bad sectors (vindos de máquinas diferentes).

O Murphy é mesmo lixado... Ontem passei uma parte da tarde a fazer experiências com o suporte de RAID por software incluído no Windows: o disco não deu qualquer problema. Hoje coloco-o no servidor de destino e começam a aparecer erros enquanto decorria a sincronização com o disco original...

Felizmente a única perda foi o tempo necessário para desmanchar a máquina uma segunda vez e colocar lá um disco diferente (de outra marca)...

Já agora, acho que muita gente desconhece que o Windows permite criar volumes RAID sem qualquer software adicional, inclusivé a partir de partições já existentes e sem qualquer perda de dados. Com isto deixa de fazer sentido recorrer aos controladores fake-RAID tão comuns nas motherboards mais recentes.

Mudam-se os tempos...

Estamos em 2006 e um tipo ainda não consegue ter fontes com qualidade decente em Linux...

Não sei exactamente a que nível está o problema, mas os toolkits mais comuns conseguem apresentar texto com bom aspecto - talvez porque se resumem a usar um ou dois tipos de letra, em tamanhos médios - mas software como o Firefox falha redondamente(*)...

As fontes "serif" são especialmente problemáticas... têm um ar escangalhado, e ficam sempre todas encavalitadas umas em cima das outras. Para além de, para um dado tamanho, parecerem sempre mais pequenas do que as fontes "sans-serif".

Os tamanhos pequenos são o problema clássico... o anti-aliasing torna o texto ilegível para dimensões abaixo dos 6 pontos. Mas nem pensar em desligá-lo, porque sem ele o Xft/freetype só consegue produzir caracteres mal desenhados e cheios de artefactos (uma regressão em relação às core-fonts do X).

E não, activar o interpretador de bytecode da libfreetype não resolve o problema (eu diria que até fica pior para a maioria das fontes).

Ter texto com bom aspecto é fundamental(**), não só porque é uma parte importante da percepção de estética dos utilizadores no desktop, mas também porque as fontes estão presentes em praticamente todas as restantes aplicações de Linux onde exista uma interface gráfica, desde aparelhos de controlo industrial a máquinas de venda de bilhetes...

PS: já agora, porque é que o Meebo e o Google Calendar são penosamente lentos no Firefox/Linux?

(*) Comparem o Firefox em Linux com a versão Windows.
(**) Comparem um texto produzido em Word com outro produzido em LaTeX.

Open-source lifecycle

opensource lifecycle

Nos projectos mais populares e com qualidade reconhecida parece existir um baixo grau de fanatismo, mas nos projectos que ainda tentam afirmar-se, e cuja qualidade ainda está longe de ser suficiente para garantir a sua popularidade, o nível de fanatismo é enorme.

Ou o fanático é um tipo em fase de negação, ou o interesse desaparece assim que o objecto do fanatismo passa a ser mainstream.

PS: Preencher os pontos a gosto...

Ser um sysadmin é...

...descobrir às 2h30 da manhã de uma sexta-feira que um dos discos de um array RAID-1 (software) desenvolveu alguns bad-sectors, e que os erros deixaram o array pendurado. Percorrer 40Km a um sábado de manhã para reiniciar o servidor e substituir o disco, só para descobrir durante a sincronização que o outro disco (original) também tem bad-sectors. Passar o resto do dia a reconstruir o array para o novo disco, com alguma cirurgia em alguns ficheiros...

Lei de Murphy e discos Maxtor é, aparentemente, uma combinação explosiva e indutora de grandes quantidades de stress...