4 de dezembro de 2011

Educação (mais) gratuita

Todos os anos no fim de Agosto e inícios de Setembro há um fluxo enorme de compras que são feitas para o "Regresso às Aulas". Há que comprar os livros para as várias disciplinas, novos cadernos, canetas e mochilas. Todos os anos há uma ou outra reportagem na televisão ou jornais a entrevistar alguém para quem este peso é imenso mas que como é para o bem dos seus filhos faz o sacrifício extra.

O 74º artigo da nossa Constituição diz que "na realização da política de ensino incumbe ao Estado assegurar o ensino básico universal, obrigatório e gratuito", tudo isto no interesse de assegurar o direito de igualdade de oportunidades de acesso e êxito escolar. No entanto, mesmo que a frequentar uma escola não incorra em custos adicionais para os pais, ainda há este custo inicial dos livros e materiais que se têm de comprar ao início de cada ano lectivo e que pode ser um detrimento para muitos oferecerem a educação aos seus filhos. Será que não se poderia também resolver este problema?

Desde que tenho um Kindle e que experimentei em primeira mão esta tecnologia de ebooks que acho que poderiam ser a forma ideal para reduzir em muito os custos da educação que ainda são impostos aos pais dos educados. Imaginemos um EduKindle que qualquer pessoa pode comprar para o seu filho e que o segue durante a vida escolar. Nesse dispositivo o aluno teria à sua disposição a versão electrónica de todos os livros que precisa nesse ano, que seriam actualizados todos os anos fazendo com que nunca fosse preciso comprar livros no início do ano lectivo. O preço deste dispositivo, se fosse equiparável ao preço de um Kindle actual, rapidamente seria amortizado ao longo dos anos de escolaridade obrigatória e todos os alunos ganhavam com este equipamento. Não só tinham a educação mais barata, aliviando a carteira dos pais, como também não tinham de carregar com quilos e quilos de livros às costas (um Kindle pesa 170 gramas e pode facilmente "carregar" com os livros todos).

Para reduzir os gastos sazonais, poder-se-iam desenvolver formas de usar o ecrã do EduKindle como papel, e guardar um "caderno" no EduKindle permitindo reduzir também nos custos em cadernos e material de escrita. Para reduzir o impacto da compra do EduKindle no primeiro ano de escola de uma criança, podia-se garantir que os pais compravam o dispositivo em prestações (sem juros!).

Como esta ideia, há outras ideias menos tecnológicas que poderiam ajudar a mover o fardo da educação (que se quer o mais barata possível para as famílias de forma a providenciar igualdade de acesso principalmente aos mais pobres) das famílias para o Estado. Um exemplo seria as escolas manterem um repositório de livros suficientemente grande para emprestar aos alunos (ou, para poupar um pouco, pelo menos aos alunos mais carenciados). Um grande "contra" desta abordagem seria que de dois em dois anos "teria" de se renovar a reserva de livros já que os livros recomendados das disciplinas mudam de dois em dois anos.

É aqui altura para analisar o porquê desta renovação bianual* de livros. Porque é que o filho de nove anos não pode usar o mesmo livro para aprender as mesmas matérias que o filho de onze anos usou dois anos atrás?



O modelo actual de todos os alunos precisarem de comprar meia dúzia de livros todos os anos só beneficia um grupo: as editoras que imprimem e distribuem os livros (e em muito menor escala, os autores dos mesmos). É escandalosamente óbvio que não se muda a forma como os livros são distribuídos pelas crianças para manter estas receitas sazonais das grandes editoras portuguesas. Os mecanismos menos tecnológicos que falei não são postos em prática (em grande escala) para manter o negócio das editoras. O EduKindle nunca seria considerado pelas mesmas razões: estaria a mexer com os interesses económicos de jogadores muito grandes e com muita influência, e não podemos ter disso.

Existe uma maneira óbvia de usar a tecnologia que já existe para melhorar substancialmente um aspecto básico da nossa sociedade, e não se envereda por esse caminho para não afectar os grandes interesses económicos instalados. Isto, na minha opinião, é um exemplo de como a nossa sociedade actual tem os valores seriamente trocados. O direito das pessoas a uma educação sem entraves económicos devia prevalecer sobre o "direito" ao lucro das empresas de distribuição de papel com tinta, e este tipo de iniciativas devia ser incentivada ou mesmo completamente subsidiada pelo Estado. Isto, por exemplo, era algo que não me importaria de pagar mais impostos para ter.

* Digo bianual, mas na realidade não faço ideia com que frequência actualmente mudam os livros "recomendados" pelo Ministério da Educação / Escolas. Fica, no entanto, a referência que o meu irmão, três anos mais novo e a ir para as mesmas escolas que eu, teve de comprar livros novos porque os que eu tinha não serviam.

24 de novembro de 2011

Faço Greve

Foi convocada uma greve geral para o dia de hoje, 24 de Novembro, à qual eu estou a aderir. Hoje não vou trabalhar como costumo fazer todos os dias, para ir para a rua manifestar-me e lutar contra o rumo que o país está a tomar no que diz respeito a políticas sociais.

Todos estamos cientes que o país está a ser chantageado pela Troika (Fundo Monetário Internacional, Banco Central Europeu, Comissão Europeia) de forma a proceder ao seu "resgate financeiro" em troca da mudança, por vezes inconstitucional, da maneira como distribuímos os nossos dinheiros públicos pelos mais necessitados e para providenciar um bom conjunto de direitos básicos (justiça, educação, alimentação, habitação).

Estas medidas, que já foram impostas a outros países com resultados desastrosos, não fazem nada para melhorar a vida do cidadão comum, trabalhador por conta de outrem (seja privado ou o Estado), e visam apenas que o pacote de "resgate" seja um bom investimento financeiro para os membros da Troika. Este "resgate" está a preparar-se para ser pago com o recuo em décadas dos direitos ganhos pelos trabalhadores, e não estou preparado para admitir isso.

Faço hoje greve não contra a minha entidade patronal (que é contra quem normalmente são dirigidas as greves), mas contra as medidas que o governo está a tomar que afectam todos, incluindo todos os que trabalham comigo na Outsystems.

Disse um colega meu sobre greves que não é ficando parado que se faz o mundo avançar. Eu acho que não é fazendo o mesmo que se faz todos os dias que se muda o mundo. Ambos temos razão, por isso é que hoje embora não vá trabalhar, também não vou ficar parado sem fazer nada em casa. Pretendo juntar-me à manifestação que vai haver desde o Rossio até à Assembleia a dar mais a minha voz aos protestos contra o modelo de austeridade (1) que apenas acentua as diferenças sociais, que são a verdadeira raiz do nosso problema (2).

Para além deste acto isolado de juntar a minha voz à de (espero) milhares de pessoas, também tenciono procurar outros meios de lutar contra este sistema no meu dia a dia.

(1) Mark Blyth on Austerity
(2) Richard Wilkinson: How economic inequity harms societies

5 de agosto de 2011

Software Units

No contexto do licenciamento da Agile Platform (o produto desenvolvido pela Outsystems, a empresa onde trabalho) existe o conceito de Software Units* (SU) que são, de grosso modo, uma medida da complexidade das aplicações criadas e mantidas na Agile Platform. A Agile Platform usa uma abordagem gráfica para descrever como é que páginas de uma aplicação web devem ser criadas e uma linguagem simples de programação específica ao domínio para descrever a lógica das aplicações. As Software Units são calculadas atribuindo um valor a cada elemento da linguagem gráfica e somando-os todos.

Os pesos de cada elemento (1) são atribuídos de uma forma arbitrária mas que tem principalmente em conta quanto trabalho é que a plataforma poupa ao utilizador em relação com produzir e manter o código necessário para a funcionalidade numa linguagem de mais baixo nível (C# ou Java, para dar o exemplo das linguagens para as quais o nosso código é compilado). É por isso que uma pergunta simples à base de dados (Simple Query) vale 20 SU's enquanto uma pergunta avançada vale 2. No caso da pergunta simples, a plataforma gere coisas como só trazer os campos que são usados pela aplicação de forma a melhorar o desempenho (2), enquanto que numa pergunta avançada, embora se tenha maior poder expressivo, toda a gestão da pergunta tem de ser feita pelo programador, tal como seria numa linguagem de mais baixo nível.

Este meu post tem a ver com a nota que o Pedro Oliveira faz no post no fórum, em que ele diz para se "evitar a todos os custos desenvolver com o objectivo de minimizar o consumo de Software Units. Esta prática irá muito provavelmente conduzir a código de difícil manutenção com uma arquitectura torcida que destrói totalmente a razão para o uso da Agile Platform" (tradução minha).

Volta e meia aparece-nos lá na Manutenção (a equipa em que estou presentemente inserido) e nos fóruns exemplos retorcidos do uso da Agile Platform que têm obviamente (às vezes mesmo assumidamente) o intuito de "poupar Software Units". Temos clientes a perguntar porque é que referências a entidades no Integration Studio não estão a criar as entidades, ou clientes que fizeram perguntas avançadas quando uma simples chegava bem a queixar-se que o desempenho está mau. Tal como o Pedro avisou, estas práticas levam a código de difícil manutenção e à subversão total do objectivo pelo qual se usa a Agile Platform. Devido ao facto de ser mais caro programar "como deve ser" podemos estar a criar algum desconforto nos nossos clientes que se vêm forçados a usar estas técnicas pouco saudáveis para poupar uns trocos e que depois têm de manter o código que fazem porque não estão a tirar total partido da Agile Platform.

Há aqui claramente um conflito de interesses entre usar bem a Agile Platform e o quanto ela custa ao cliente. O cliente enfrenta o dilema entre fazer bom uso da Agile Platform e tirar o máximo proveito económico do produto que comprou. Visto de outra forma: ao mesmo tempo que nós, Outsystems, dizemos que se deve programar de uma certa forma na Agile Platform estamos a penalizar financeiramente quem o faz. E os clientes, confrontados com a escolha entre ter de pagar mais para continuarem a trabalhar e transformar umas perguntas simples em perguntas avançadas, usualmente vão escolher programar "mal". Especialmente nas gamas mais baixas da plataforma (a versão "Community" grátis, Edição Standard) onde estão mais limitados no que diz respeito a Software Units e não têm ainda uma fábrica aplicacional muito pesada.

A verdade é que quando confrontados com ter de gastar mais dinheiro, a maioria dos nossos clientes (o nosso alvo de mercado são especificamente empresas) vai estrebuchar o máximo que conseguir para o evitar. Quando esse ponto de pressão para adquirir uma nova versão da Agile Platform é através da quantidade de Software Units, pela maneira como se atinge esse limite, há uma maneira relativamente fácil de optimizar as aplicações de forma a serem mais baratas. Isto é detrimental para a Outsystems porque quem chega ao ponto de precisar de comprar uma versão acima por causa da complexidade da fábrica aplicacional tem uma hipótese para se safar de comprar a versão mais acima. Ainda pior que só ter essa hipótese é que a seguir vai ficar mais descontente com a Agile Platform se seguir essa hipótese, já que vai estar a usar elementos menos optimizados da linguagem que não só causam um deterioramento do desempenho das aplicações como também são de manutenção mais difícil.

Acho que nesta altura ninguém terá alguma dúvida sobre qual é o ponto deste texto, mas fica sempre bem enunciá-lo claramente e suportá-lo com mais um pouco de argumentação a favor (e não apenas enunciar pontos contra a abordagem actual, como no resto do texto). Pessoalmente acho que era proveitoso para todos os envolvidos (Outsystems e os seus clientes) que a contagem das Software Units fosse repensada de forma a promover boas práticas em vez da abordagem actual de tentar reflectir o valor que a Agile Platform oferece com o elemento da linguagem.

Eu até acho que faz sentido cobrar-se pelo trabalho que a Agile Platform tem, e até compreendo que se queira cobrar mais pela plataforma fazer mais. Mas a partir do momento em que estamos a cobrar por programar bem, os clientes chegam à altura em que deveriam simplesmente pagar mais e têm a hipótese de programar mal para adiar esse facto. Acho que a maneira de contar Software Units que proponho (penalizando o uso de perguntas avançadas, por exemplo) iria não só fazer com que se programasse "melhor" como a abordagem preferida, como também tinha a vantagem de que quando se batessem nos limites de Software Units as hipóteses que apresentamos aos são pagar mais ou melhorar as aplicações. Na realidade quem chega a este ponto e já esteve a seguir as nossas recomendações de como programar, a única hipótese que tem seria comprar uma versão que permitisse mais Software Units. Assim, o que ensinamos nos bootcamps ajuda a fazer mais com a Agile Platform em vez de haver uma alternativa mais barata. Se os clientes chegam ao limite de Software Units e tiraram o máximo partido da Agile Platform e ainda por cima fizeram mesmo bastante com ela, é espectável que fiquem mais satisfeitos com o produto que oferecemos e que se sintam menos relutantes em adquirir mais Software Units.

Outro aspecto que consideraria uma vantagem desta abordagem é que certamente que surgiria uma pressão para criar elementos da linguagem para os usos mais comuns das perguntas avançadas que não podem ser concretizados com perguntas simples. A verdade é que havendo uma maneira barata de fazer alguns padrões de perguntas está a eliminar a pressão para desenvolver a linguagem da Agile Platform de forma a suportar estas perguntas à base de dados. Se usar perguntas avançadas fosse mais caro do que usar perguntas simples (ou outros elementos mais promovidos da linguagem) era certo que haveria pressão para se criarem elementos da linguagem específicos para essas situações, o que só tornaria o produto que oferecemos ainda melhor do que já é.

(1) How do we count Software Units? (Pedro Oliveira - Fóruns Outsystems)
(2) O que distingue um bom programador? (Canto do ardoRic)

* Vou manter a terminologia em inglês embora contraste um pouco com o resto do texto em português

23 de julho de 2011

Responsabilidade

Estava no outro dia a discutir responsabilidade com dois amigos meus. A conversa revolvia em torno de sobre-endividamento (de pessoas/famílias) e era da opinião de um de nós que a responsabilidade destas situações recaía completamente na pessoa que contraí dívidas em cima de dívidas que não tem hipóteses de pagar.

A ideia é relativamente simples, se as pessoas que contraem os empréstimos tivessem mais cuidado, se informassem melhor do que se estão a meter e olhassem melhor de uma forma racional para o que implica contrair aquele empréstimo, não chegavam à situação desesperante de ter empréstimos para pagar empréstimos que não conseguiram pagar anteriormente. Para ele cabe a quem vai contrair empréstimos informar-se adequadamente sobre o que está a fazer, ou tomar em si mesmo a totalidade das consequências e responsabilidade da decisão.

Embora seja principalmente a pessoa (e potencialmente os seus dependentes) quem sofre as consequências da decisão final, não é tão preto no branco para mim que a responsabilidade recaia sempre completamente em quem toma uma decisão deste calibre. Para tentar explicar melhor o meu ponto vou usar uma metáfora bastante mais simples do que a contracção de um empréstimo, a queda devido a uma casca de banana.

Na visão do meu amigo, estando uma casca de banana no chão e alguém caindo devido a ela, a responsabilidade é completamente da pessoa que caiu. Está nos seus deveres olhar para onde anda com a atenção devida para evitar escorregar em cascas de bananas. Isto tudo era verdade se as cascas de banana se materializassem em locais aleatórios. Mas as cascas não se materializam.

Do outro lado da casca de banana há geralmente alguém que a deixou no local onde ela se encontra actualmente. Há aqui duas situações muito distintas no que diz respeito à responsabilidade pela queda: A primeira é a situação da pessoa que acabou de comer uma banana e deitou (ou deixou cair) a casca para o chão. A segunda é a situação da pessoa que colocou a banana no chão propositadamente para que alguém tropeçasse nela. Parece-me óbvio que, mesmo nestes dois casos, a responsabilidade da queda não recai totalmente na pessoa a quem aconteceu, e ainda mais óbvio que há uma diferença importante entre a responsabilidade de quem deixou a casca no sitio por acaso e a de quem a deixou no sitio propositadamente.

E se quem deixa uma armadilha para outros caírem nela tem responsabilidade na queda, ainda mais responsabilidade tem aquele que propositadamente coloca a casca num local que sabe que é bastante provável que alguém que passe por lá caia, seja porque a visibilidade é má ou porque há alguma distracção frequente. E também não excluo da responsabilidade quem oferece incentivos (por exemplo, um ordenado) para que hajam pessoas a fazer cair o maior número possível de pessoas (talvez porque têm uma clínica perto).

Quando há uma sociedade inteira a impelir os indivíduos a quererem mais apenas para terem mais, quando há pessoas a estudar afincadamente como convencer outros a comprar o que eles querem que seja comprado, e especialmente quando há pessoas a contratar as melhores pessoas para tirarem partido das fragilidades dos compradores, é difícil para mim dizer que a responsabilidade recai totalmente em quem compra, em quem incorre em dívidas.

24 de junho de 2011

Método d'Hondt

O método d'Hondt é o sistema de distribuição de votos por candidatos, consagrado na Constituição Portuguesa, que usamos em Portugal para atribuir os deputados de cada zona à Assembleia da República (AR).

No passado dia 5 de Junho os portugueses foram às urnas para eleger um novo governo. Esse governo acabou por ser do PPD/PSD (e para ter a maioria absoluta, também do CDS/PP). É da minha opinião que a utilização do método d'Hondt como nós usamos dá azo a uma distribuição profundamente injusta dos deputados da AR pelos partidos. Vou usar este post para apontar os problemas que vejo nesta abordagem. Aproveito também para sugerir um sistema que me pareceria mais justo.

Para ajudar a minha discussão criei uma folha de cálculo com algumas estatísticas sobre as relações entre votos e deputados na assembleia das eleições que passaram. Podem encontrar esse documento aqui (de notar que os valores reflectem os votos antes de se saberem os resultados do estrangeiro).

Este documento tentar colocar em perspectiva algumas das injustiças do nosso sistema eleitoral. Por exemplo, é claramente óbvio que "custa" muito menos ao PS e ao PSD (20-21 mil votos/deputado) eleger deputados do que a partidos mais pequenos (27-36 mil votos / deputado). Mas o mais engraçado desta medida em particular é a barreira de entrada para o Parlamento havendo um partido com três vezes mais votos do que cada deputado custou ao PSD ou ao PS, ou quase duas vezes tantos votos como o que cada deputado custou ao BE e mesmo assim não conseguiu um único assento na assembleia.

Também é engraçado notar que com "apenas" 38% dos votos dos eleitores (que se manifestaram), o PSD conseguiu eleger 46% dos deputados do Parlamento. Em contraste o BE, com 5% dos votos, elegeu pouco mais de 3% dos deputados.

Outro número giro nesta coisa toda é o número enorme de votos que são desperdiçados. Há quase meio milhão de pessoas que foram votar no dia 5 de Junho e desses votos não resultou um único deputado na Assembleia da República. Neste meio milhão de pessoas estão contabilizados não só os votos em branco e nulos, mas também os votos numa série de partidos (250 mil).

Como é possível continuar a usar-se um sistema de eleições tão claramente injusto e que ainda por cima manda votos para o lixo (e nem estou a meter ao barulho as pessoas que se abstiveram, senão é que os números pareciam mesmo muito mal*)? Uma possível resposta a esta pergunta é relativamente simples, quem tem o poder para realmente mudar isto (os partidos grandes o suficiente para formarem governo) não tem interesse nenhum em que se mude este modelo já que ele favorece principalmente os partidos grandes. Deixo-vos com 2 vídeos que falam sobre o poder da abstenção e dos votos brancos/nulos neste sistema aqui e aqui.

Eu sou da opinião que a representação na Assembleia da República devia ser ditada por uma representação proporcional aos votos obtidos, no mínimo dos mínimos entre os partidos que foram votados. Para ser ainda mais justo acho que se deviam incluir lugares vazios no parlamento para "representar" os votos em branco e nulos. Desta forma (é a coluna da distribuição hipotética de deputados na folha de cálculo que criei) tínhamos a certeza que o maior número possível de votos expressos teria uma repercussão em assentos no parlamento, e portanto que votar em branco ou nulo também mandava uma mensagem e teria consequências na governação dos próximos 4 anos. Neste sistema apenas 32 mil votos seriam desperdiçados (no sentido de darem resultado a assentos parlamentares), o que me parece uma melhoria óbvia. A distribuição de deputados pelos partidos também é bastante mais próxima da distribuição de votos, e até aparecem meia dúzia de partidos com assento parlamentar que não o teriam no método d'Hondt.

Mas para mim a principal vantagem deste sistema é que retira a facilidade que há nos governos em formarem maioria absoluta. Os partidos já não conseguiriam maiorias absolutas com apenas 45% dos votos (sem contar com brancos e nulos) expressos, como o PS conseguiu nas legislativas de 2005. Nessas legislativas, mesmo sem a regra dos assentos vazios para os votos em branco, o PS não teria obtido maioria absoluta.

Volto a perguntar, porque raio é que não é assim, mesmo?

* E porque é que não estou a contabilizar estas pessoas? A palavra de alguém que queria marcar uma posição política com a sua abstenção está misturada com a palavra dos mandriões que nem se dão ao trabalho de fazerem o esforço de saírem da sua rotina diária para ajudarem a decidir o futuro do país. As pessoas que não acreditam no sistema eleitoral (um exemplo de posição que pode estar a ser tomada) estão no mesmo saco que as pessoas que foram para a praia deixando os outros decidir por elas. É evidente que acho que as verdadeiras vozes de descontentamento deviam ser ouvidas, e para tal também acredito que deviam haver formas de perguntar aos portugueses se estão contentes com o modelo da nossa sociedade.

4 de junho de 2011

Mas ele acredita mesmo naquela merda?

Ontem à noite, em torno da Bússola Política, surgiu uma valente troca de ideias no Buzz. O cerne da questão foi a exposição dos pontos de vista políticos e sociais de alguns de nós e o confronto entre esses ideias. Por trás do palco eu e o Bruno Areal (a falar no gtalk) comentámos e questionámo-nos como é que alguém com o mesmo nível de educação que nós podia acreditar em coisas tão diametralmente opostas.  Quer dizer, em principio as coisas que viu até aqui e as coisas que lhe ensinaram a crescer em principio foram bastante parecidas com o que nós aprendemos, mas em termos de visão sobre como as coisas são e como as coisas devem ser, tem uma visão quase completamente oposta.

Entretanto deu para matutar um pouco sobre o assunto e cheguei a uma ideia que pode explicar esta discrepância. A ideia é simples: a visão que temos da sociedade não foi formada durante os tempos de faculdade ou escola, é algo que já nos estava enraizada de alguma forma quando chegámos a essa idade. Com estes preconceitos em mão olhámos para as mesmas histórias, para os mesmos eventos com olhos muito diferentes e tirámos conclusões diferentes, usualmente reforçando as ideias que já tínhamos. E nesta espiral de auto-reforço das nossas opiniões tornam-se mais fortes e intrínsecas, tornando cada vez mais difícil olharmos para outras opiniões e sermos capazes de nos dissuadir das nossas próprias ideias.

Portanto a ideia é que as mesmas observações reforçam ideias que já temos de maneira diferente. É muito fácil observar este fenómeno no blog do Ludwig, neste post mais recente em particular. Analisemos apenas a história do grilo e do morcego. Para o Ludwig, os mecanismos interligados de sonar e de detecção de sonar são mais uma evidência clara de evolução: algures no tempo uma população de grilos ganhou alguma sensibilidade ao sonar dos morcegos e com essa sensibilidade teve mais hipóteses de se reproduzir. Tantas até que ao longo de gerações substituíram a população de grilos sem essa capacidade (pelo menos naquela zona geográfica) e que as mutações que aperfeiçoaram essa capacidade foram sendo cada vez mais privilegiadas. Esta história reforça a visão que o Ludwig tem da vida na Terra que esta foi evoluindo ao longo dos tempos em vez de ter sido criada por Deus. Para o Mats, a mesma história, os mesmos factos, têm uma interpretação muito diferente: Deus queria que os morcegos e os grilos andassem à noite, e como não há luz à noite para o morcego caçar deu-lhe um sonar. Para equilibrar o campo de batalha e os grilos não serem todos chacinados e poderem continuar a sair a noite, deu aos grilos um detector do sonar daqueles morcegos em especifico. Esta visão dos mesmos animais reforça a ideia do Mats que o mundo foi criado há 6 mil anos atrás por um Deus Todo Poderoso que há 2 mil anos atrás veio à terra na forma de um filho de um carpinteiro embora ele (nem ninguém) nunca tenha feito sexo com a mulher que pariu o filho*.

Agora a parte mais engraçada desta experiência toda é que mesmo estando perfeitamente ciente deste preconceito não sou, de todo, capaz de olhar para frases do Luis Nunes em que ele afirma, por exemplo, que o Belmiro Azevedo é mais importante para a sociedade que o Areal, ou quando se ri desalmadamente (como de quem acabou de dizer a maior baboseira do mundo) da proposição do Areal que "há coisas mais importantes que o dinheiro", e pensar objectivamente nelas de forma a dar razão ao ponto de vista dele. Para mim, muitas das coisas que ele disse continuam a ser uma atrocidade, mesmo sabendo que esta opinião é muito afectada pelas minhas ideias preconceituosas de como deve ser a sociedade.

* Será que nesta situação se pode dizer mesmo que o Zé é o pai terreste de Deus? Fica para outra altura esta discussão, ou talvez (mais provavelmente) não.

1 de junho de 2011

Preço de um Kindle Book

A Amazon parece já se ter apercebido que eu gosto de ler. Não era difícil de adivinhar: já lhes comprei vários livros, até comprei um Kindle. Há uns dias enviou-me um dos mails de publicidade com ofertas especiais em que uma delas era o Conde de Monte Cristo, versão Kindle, a $5 (um livro que posso obter em versão para Kindle de borla no Projecto Gutenberg, já agora).

Ultimamente quando um livro que me interessa me é mencionado a minha primeira reacção é ir ver quanto custa na Amazon. Tipicamente os preços do livro são qualquer coisa do género Versão Kindle é mais cara que a versão em  Capa Dura, que por sua vez é mais cara que a versão em Capa Mole. Dou o Traffic como exemplo. Perante este cenário, como prefiro arranjar uma versão electrónica para dar uso ao Kindle e poupar um bocado o ambiente (papel e custo de transporte), acabo por procurar versões electrónicas da candonga*. Às vezes a qualidade não é das melhores, mas quando algo é de borla a exigência também é menor.

Se a versão electrónica deste livro que eu estava à procura estivesse na Amazon à venda por $5 em vez de $13, provavelmente tinha-o comprado directamente na Amazon sem procurar a versão da candonga (que por acaso até está com boa qualidade). Ficavam a ganhar $5 em vez de "perderem" $13 (sim, estou ciente da falácia que estou a usar).

É absurdo que um livro electrónico seja mais caro que a versão mais cara de um livro físico. Qualquer pessoa com quem falo (mesmo outros donos de Kindles) diz que prefere um livro físico, que pode pegar, folhear, cheirar, a um livro electrónico, sendo essa preferência um dos principais detrimentos à aquisição de um Kindle ou de qualquer outro leitor de ebooks. Ter uma biblioteca de mil livros é certamente mais impressionante se os tivermos numa prateleira do que dentro de um aparelho que ocupa menos espaço que um livro.

Porque é que isto é absurdo? Os livros electrónicos permitem busca, procura automática de palavras no dicionário, saltar imediatamente para o próximo capítulo, ler com um formato (tamanho de letra, espaçamento entre caracteres, bordas) ao gosto do leitor, leitura em alta-voz***. Com estas possibilidades todas poder-se-ia imaginar que se pudesse dar mais valor a livros electrónicos do que a livros físicos, mas os livros físicos também têm as suas vantagens: dão para folhear (e encontrar algo rapidamente usando memória visual), dão para emprestar****, têm melhor tipografia (a forma como o livro está tipografado pode ser realmente artística), e (se calhar o aspecto mais importante) sentimos que realmente temos algo.

Além de que ao que diz respeito às vantagens que mencionei no parágrafo anterior do formato electrónico atribuímos o seu valor ao valor que o Kindle em si oferece, não ao livro específico que estou a ler. Compro um Kindle para poder buscar, pesquisar palavras, ler o livro da forma que me der mais jeito. Esse valor extra está incluído no que pago pelo Kindle, não espero que esteja cobrado sempre que compro um livro. Aliás, a promessa é mesmo que os livros electrónicos vão ser mais baratos, tornando um leitor de livros electrónicos num investimento que quantos mais livros se lerem mais rápido se paga. Isso é certamente verdade ao possibilitar-nos a leitura de livros grátis (como os do Projecto Gutenberg) ao invés de os comprar no formato físico.

Mesmo o processo de produção dos livros dá a ideia que produzir um livro electrónico é bastante mais barato do que produzir um livro físico. Sem conhecimento real de causa é fácil imaginar que os livros hoje em dia são escritos em formato electrónico, ou pelo menos que nalguma fase inicial da sua produção em massa é criada uma versão electrónica do mesmo; há todo um processo de revisão do documento para eliminar erros que será igual tanto para o formato electrónico como para o físico (já que seria feito sobre o formato electrónico inicial, antes de começar a produzir cópias físicas em massa); depois os processos começam a diferir. O formato electrónico será uma questão de converter um formato para outro (é fácil de imaginar que hajam programas que façam isso com relativa autonomia), corrigir alguns detalhes e guardar um ficheiro. O formato físico precisa de tipografia, impressões, papel. É fácil também de imaginar que disponibilizar o formato electrónico para os compradores é bastante mais barato do que fazer o mesmo ao formato físico, onde um é uma questão de colocar num de muitos servidores e permitir o seu descarregamento enquanto que no outro envolve embalagem, viagens de avião/barco, correios locais. Isto sem falar que o processo de criar uma cópia electrónica é praticamente grátis (o proverbial Ctrl+C Ctrl+V) enquanto que não se produz uma cópia física sem papeis, tinta e máquinas de impressão.

O serviço especial que se faz no que diz respeito a livros electrónicos é de armazenamento e transferência. O armazenamento de um livro de 1 MiB, num disco que custe 80 euros e tenha um TiB de espaço, custa menos de 0.01 cêntimos. A transferência do mesmo MiB numa ligação com 1 MBit de upload que custe 50 euros por mês, custa menos de 0.05 cêntimos. O custo percepcionado do armazenamento e distribuição de um livro electrónico por parte da Amazon, é inferior a 0.1 cêntimos.

Tudo isto para dizer apenas que eu (e imagino bastante mais gente) acho que o preço dos livros electrónicos (e não é só na Amazon) são bastante mais caros do que "deviam". Não só pelo baixo valor que damos a algo que não existe "na realidade", mas também pela falsa promessa de que os livros electrónicos vão ajudar a poupar dinheiro a quem os utilize muito. Embora não acredite que não tenham feito estudos sobre o valor óptimo pelo qual vender os livros electrónicos deles, acho que era um serviço que chegava a muito mais gente se os preços fossem mais acessíveis, e melhor que tudo, mais de encontro às expectativas das pessoas no que diz respeito a este novo meio de leitura. Ajudando a espalhar a prática talvez conseguissem a longo termo uma maior adopção e mais lucros. Digo eu, que nada sei de economia.

Uma nota final, estive muito tempo sem escrever nada principalmente porque tinha este post relativamente grande a entupir os rascunhos. De ora em diante vou tentar ser mais sucinto no que tenho a dizer para evitar ficar tanto tempo sem postar nada de novo bem como para mandar mais ideias cá para fora. Espero conseguir.

Desde que comecei a escrever este post que ele mudou muito pouco e entretanto não fiz posts com outras ideias que tenho tido. Muito aconteceu que gostaria de ter partilhado (e espero ainda partilhar), entre elas o facto de ter sido nabo o suficiente para ter perdido o meu Kindle (de uma das maneiras mais parvas que pode haver), altura desde a qual ate já houve tempo de mandar vir um novo.

* Os termos de leitura deste blog indicam claramente que qualquer informação revelada aqui não pode ser usada legalmente contra mim. Ao abrirem esta página estão a concordar com eles.
** Até agora ainda não vi nenhuma loja de livros electrónicos muito diferente.
*** Quando não é explicitamente proíbido.
**** O Kindle também dá para emprestar (alguns) livros, mas só uma vez por livro e durante 14 dias.

14 de abril de 2011

Nova bicicleta

A última bicicleta que tinha tido foi há imenso tempo. Foi provavelmente a mesma bicicleta com que aprendi a andar, quando era puto, e que com o tempo e desuso foi enferrujando e lá está no que era o estábulo da minha casa na "terra" (no Painho, perto das Caldas da Rainha). Sempre foi uma actividade de que gostei bastante e infelizmente estive muito tempo sem andar de bicicleta regularmente. Ia alugando uma bicicleta e dando umas voltas de vez em quando, mas não é a mesma coisa. Há uns meses decidi-me a comprar uma bicicleta e lá o fiz. Voltar a andar de bicicleta foi espectacular. Entre passeios na ciclovia de Cais-do-Sodré/Belém com amigos no fim-de-semana, e idas solitárias ao Terreiro do Paço de vez em quando, só não andei de bicicleta em semanas em que o tempo estava mau demais para isso (e mesmo assim cheguei a apanhar uma molha numa vez que arriscámos a ciclovia num dia pouco acolhedor).

Há uns Domingos atrás fui com um amigo meu dar um pulo pelo FabriCamp Lx1, no Pavilhão dos Conhecimentos no Parque das Nações. Como o Parque das Nações é um sítio fixe para se andar de bicicleta, cada um de nós levou a sua para depois darmos uma volta. Depois de um pouco de passeio fomos ao Vasco da Gama, deixámos as bicicletas no parquezinho próprio que há para bicicletas em frente à entrada que dá para a estátua ferrugenta, e fomos jantar descansados. Quando chegámos, nenhuma das nossas bicicletas estava lá. A minha corrente estava cortada no chão e a corrente (mais grossa, com código, que estava também presa à minha bicicleta) do meu amigo nem vê-la.

Durante o FabriCamp as bicicletas ficaram duas horas presas individualmente a um caixote do lixo no meio do nada, onde poucas pessoas passam. Uma hora no sítio próprio para bicicletas num local com seguranças e pessoas constantemente a passar e são roubadas. Quando fomos para fazer queixa a uma das seguranças do Vasco da Gama: "Ah, isso não é nada connosco. O melhor é irem fazer queixa à polícia para eles depois verem o vídeo de vigilância e podem ter a sorte de a câmara ter apanhado os ladrões". Um ponto engraçado desta situação é que estávamos mais preocupados com as bicicletas nas duas horas que elas estiveram presas ao caixote do lixo do que no tempo que elas estiveram presas no parque de bicicletas.

Há aqui muita coisa que me deixa indignado. Primeiro de tudo há as bestas que roubaram as bicicletas. Segundo há os seguranças do centro comercial onde fui gastar dinheiro que não só não protegeram os interesses dos seus clientes, como também nada se importaram com o sucedido. Terceiro há a minha estupidez em não me aperceber do quão mau o sítio era na realidade para deixar uma bicicleta relativamente nova.

Há que dizer que tanto eu como o meu amigo fomos levados por um falso sentido de segurança. O sítio parecia adequadamente perto do Vasco da Gama para deixarmos as bicicletas. Assumimos que haveria alguma segurança no movimento constante de pessoas, que ninguém ia roubar bicicletas abertamente num sítio por onde está constantemente a passar gente. Assumimos que haveriam seguranças a passear por aquela zona. Se não tivéssemos assumido isto tudo e determinado que era um lugar perigoso para deixar as bicicletas, tínhamos ido embora para casa em vez de jantar no Vasco da Gama e ainda tínhamos as nossas bicicletas.

Em retrospectiva é óbvio porque é que uma hora ali no sítio próprio para bicicletas em frente ao Vasco da Gama foi mais perigoso para as bicicletas do que duas horas num sítio onde não passa ninguém, presas a um caixote do lixo frágil. Em ambos os sítios onde deixámos as bicicletas apenas as protegemos contra o gajo que vê uma bicicleta, pega nela e leva-a consigo. Para levar as bicicletas era preciso conseguir cortar as correntes e o transeunte que se depara com as bicicletas por acaso não anda com um alicate de corte no bolso para estas situações. Por outro lado, haver um sítio fixo onde as pessoas se sentem seguras para deixar as bicicletas delas, sem seguranças, abre portas a que pessoas mal intencionadas e melhor equipadas passem por lá com um alicate de corte, analisem se há alguma bicicleta que valha a pena roubar (mal protegida/relativamente boa), e pronto... Alguém fica sem bicicleta. Aparentemente isto é algo que acontece todas as semanas, segundo os polícias.

Acho que é uma falha enorme do Vasco da Gama providenciar aquele sítio onde se pode simplesmente ir roubar bicicletas. Em vez de estarem a oferecer aos seus clientes um sitio seguro onde deixar as bicicletas, estão a dar-lhes um falso sentido de segurança e a fazer com que mais bicicletas sejam roubadas, perdendo clientes. Eu, por exemplo, já sei que não vou jantar no Vasco da Gama depois de ir andar de bicicleta no Parque das Nações. Questiono-me porque é que não há um segurança ao pé do parque de bicicletas. Questiono-me porque é que as rondas da polícia não passam por lá com frequência o suficiente para desincentivar ladrões. Questiono-me porque é que, não havendo recursos humanos para impedir o roubo, não se tira aquele parque dali para não haver pessoas a deixar lá bicicletas que podem ser roubadas.

E assim, cerca de dois meses depois de a comprar, fiquei sem a minha bicicleta nova. Restam-me duas opções: baixar os braços e desistir de ter uma bicicleta, ou não deixar que um grupo de anormais me roube o prazer readquirido de andar de bicicleta. A escolha parece bastante simples, vou comprar uma bicicleta para substituir a que perdi e desta vez vou também comprar material para a prender que não só dê protecção contra o transeunte ocasional mas que também ofereça alguma segurança contra alicates de corte de tamanhos não industriais. E também vou ter bastante mais cuidado onde deixo a bicicleta e assegurar-me que o que assumo de segurança parece mais sólido.

O pior de tudo é que ainda há um outro grupo de idiotas que nada faz de concreto para impedir estas situações. Talvez o número de clientes que lá vai porque tem o parque para as bicicletas ainda compense financeiramente relativamente ao número de clientes que perdem porque permitiram que lhes roubassem as bicicletas. Eu acho inaceitável e por isso podem contar que não gastarei mais do meu dinheiro no Centro Comercial do Vasco da Gama enquanto este tipo de negligência existir.

Quase que sinto que fui directamente lesado pela administração do Vasco da Gama e que os devia responsabilizar legalmente pelo sucedido (talvez processando-os?). Vou tentar averiguar com pessoas mais conhecedoras da lei se teria hipótese ou se estas corporações são protegidas contra este tipo de negligência grosseira e danosa.

3 de abril de 2011

Hibernar o Computador de Trabalho

Lá na Outsystems onde trabalho atribuíram-me um computador pessoal. Tal como eu, muitos dos engenheiros informáticos lá no cantinho da Engenharia usam um monstro da Dell para o seu trabalho diário. Nos cantinhos mais de marketing e vendas e do outro lado do edifício nos serviços (consultoria) a maioria tem computadores portáteis.

Nós trabalhamos com uma data de ferramentas, muitas delas pesadas (o Visual Studio, por exemplo) e de manhã costumava demorar bastante tempo a ligar o computador e ligar os programas todos. Por isso até há pouco tempo atrás o que eu fazia era deixar o computador ligado quando saía para que quando voltasse já tivesse o estaminé todo montado para poder começar a trabalhar sem grande demora. Tal como eu, bastantes dos meus colegas têm o hábito de deixar o computador ligado a noite toda para que quando chegam possam começar imediatamente a trabalhar.

O problema disto é que os computadores estão ligados a semana toda (24*7 = 168 horas) em vez de estarem ligados apenas as horas de trabalho (40 + 5 (almoço) = 45). Em vez de estarem ligados ~30% do tempo (45/168 ~ 0.27), os computadores estão ligados 100% do tempo. Suspeito que isto é sintomático não só na Outsystems mas que também aconteça em muitas outras empresas que trabalhem com computadores.

Para os trabalhadores é uma decisão aparentemente fácil de tomar: deixar os computadores ligados é relativamente simples e não lhes custa nada já que é a empresa quem paga a conta de electricidade. A questão é que custa: o desperdício energético não afecta só a conta de electricidade da empresa, afecta-nos a todos porque a energia é retirada dos recursos finitos do planeta que partilhamos. Quanto menos desperdiçarmos, melhor para todos.

Mas a solução para o dilema é simples. Há muito tempo que existe a possibilidade de hibernar um computador. Se em vez de deixar os computadores ligados quando saímos do emprego os hibernássemos poderíamos ter o melhor dos dois mundos: um espaço de trabalho preparado e igual ao que tínhamos no dia anterior e poupava-se energia.

Mas para isto haviam dois impedimentos. Sinceramente eu sempre tive a ideia de hibernar o meu computador, mas a opção para o fazer não aparecia no menu de desligar o computador. Além disso algumas pessoas deixam o computador ligado para que lhe possam aceder remotamente (através da VPN), caso seja necessário por alguma razão. Nem sempre precisam de aceder remotamente aos computadores, mas não podem sempre prever quando o vão querer fazer, por isso para jogar pelo seguro vão deixando os computadores ligados.

Em conversa com uma amiga minha descobri que afinal até dá para hibernar desktops com Windows (não me aparecia a opção, portanto imaginei que o windows para desktops não viesse com isso ou qualquer coisa parva do género). Seguindo as instruções neste site (principalmente a parte de desactivar o sonho híbrido), lá consegui que a opção aparecesse, configurei o windows para hibernar quando carregasse no botão da energia e assim tenho uma maneira rápida de hibernar o computador antes de ir para casa.

Mas a minha ideia era mais do que apenas eu hibernar o meu computador. A minha ideia era convencer toda a gente lá do cantinho de I&D (Investigação e Desenvolvimento) da Outsystems a fazer o mesmo com os computadores deles. Para isso precisava de oferecer uma solução para a questão do acesso remoto. Relembro que estando o computador desligado não é possível aceder remotamente ao computador e assim trabalhar quando se está em casa. Não é necessariamente uma coisa má, mas há pessoas que (por alguma razão ou por outra) gostam de ter essa hipótese em aberto. Era necessário então arranjar uma solução realista para essa questão antes de tentar convencer as pessoas a desligar o computador delas quando não estão a trabalhar.

Foi então que me lembrei de já ter ouvido falar em WakeOnLAN, um protocolo que permite dizer a computadores específicos para se ligarem através de um pacote especial enviado na rede. Claro que é preciso activar a funcionalidade na BIOS, mas estando disponível e uma vez feito, fica a hipótese de acordar o computador a partir de outro disponível. Para ter uma solução viável, restava então arranjar forma de usar este protocolo para acordar os computadores que precisassem de acesso remoto.

Quando procurei pelo termo não encontrei imediatamente nenhum programa grande que fizesse isso. Mas encontrei dois pedaços de código em Java e C# que produziam o pacote necessário e o mandavam para a rede. A minha ideia original era criar um eSpace (uma aplicação web na terminologia da Agile Platform) e colocá-lo num dos nossos servidores internos para as pessoas terem uma interface sempre acessível e relativamente fácil de usar para acordarem o computador delas. Depois de umas conversas com alguém que gere a nossa infraestrutura e depois de alguns testes, descobrimos que os pacotes que são difundidos neste protocolo não passam pela firewall. As máquinas da infraestrutura estão numa sub-rede, as máquinas do departamento de I&D estão noutra, e o sistema de encaminhamento de pacotes não permite o encaminhamento dos pacotes de difusão entre redes. Como as pessoas que tratam da gestão da rede não estavam muito disponíveis para resolver este empecilho atempadamente, pus-me a engendrar outra solução.

Claro que o ideal era ter uma máquina na infraestrutura (preferencialmente uma máquina virtual) que por acaso estivesse sempre ligada e tivesse uma interface de rede na rede da I&D, daí a solução do eSpace num dos nossos servidores ser tão apelativa, já que não implicaria haver mais energia a ser gasta por causa desta funcionalidade. Mas isso não foi possível e então tive de me resignar a usar uma máquina de desenvolvimento que temos lá no nosso cantinho da manutenção. Essa máquina tem um CentOS e pouca RAM pelo que não é adequada para ter uma instalação da Agile Platform, o que implica que a minha solução final teve de ser de mais baixo nível.

Com o código Java que referenciei anteriormente como base criei uma classe Java com um objecto remoto (usando a tecnologia Remote Method Invocation do Java) que recebe pedidos para acordar um endereço de MAC especifico e que lança o "pacote mágico" para a rede. Como o acesso a este servidorzinho é feito através de ligações TCP/IP normais (e não através de endereços de difusão), passa bem pela firewall para dentro da rede da I&D e assim dá para alguém na VPN acordar o seu computador. Na prática tenho um Cavalo de Tróia na rede a quem qualquer um pode pedir para enviar pacotes que a firewall não deixa passar.

Armado com o conhecimento de como configurar os computadores para hibernar e com uma ferramenta capaz de acordar os computadores hibernados enviei um mail a toda a gente da engenharia da Outsystems divulgando a informação e argumentando que não faz sentido deixar os computadores ligados quando têm outras maneiras de obter o mesmo resultado. A reacção foi boa, parece-me: entre pessoas que não se tinham dado ao trabalho para ver como hibernar o computador e outros que consideraram boa ideia já há menos computadores ligados durante a noite e fim de semana na Outsystems. Com isto no mínimo consegui remover qualquer desculpa que as alguém possa ter para deixar o computador ligado.

Tanta coisa só para ter um departamento de engenharia de uma empresa pequenina a desligar mais meia dúzia de computadores quando as pessoas não estão a trabalhar. Com tantas empresas maiores a fazer coisas piores, porque é que havia de me dar a tanto trabalho para um ganho tão pequeno? É precisamente por ser algo pequeno e relativamente fácil de fazer que vale a pena fazer. Por ser pequeno, pode ser feito noutros sítios, em muitos outros sítios.

Não há muito tempo atrás ouvi falar pela primeira vez na cauda longa da distribuição de lucros da Amazon. A ideia é que na Amazon há alguns produtos (Kindle, por exemplo) que vendem muito. E depois há muitos produtos que vendem pouco. Há um pedaço bastante grande dos lucros da Amazon que vem desta quantidade enorme de produtos que vende pouco.

As contribuições para o melhor estar do ambiente seguem o mesmo raciocínio: o impacto de termos muitas pessoas a fazerem coisinhas aparentemente pequenas é certamente muito maior no panorama geral do que intuitivamente parece. Portanto quando se perguntarem se vale a pena fazer algo mesmo que o ganho energético ou ambiental seja pequeno, pensem também em divulgar o que fizeram e lembrem-se do princípio da cauda longa, porque vale a pena. Especialmente se partilharem para que outros possam fazer o mesmo.

13 de março de 2011

Uma manifestação não resolve o problema!... mas pode ser o início

Estava em conversa com uma amiga minha sobre a manifestação de ontem e as palavras que trocámos inspiraram-na a escrever o seguinte texto:

200 mil, 300 mil, não sei quantos foram, mas juntaram-se a mim na Avenida da Liberdade e no Rossio e juntos manifestámo-nos contra este futuro de precariedade que nos oferecem. “Precariedade” é um grande chavão! Não basta dizê-lo, é preciso entender o que significa e, em especial, que impacto tem no nosso futuro. No futuro desta geração que dizem ser a «mais qualificada de sempre» mas que se vê a trabalhar em call-centers , etc.

Pior do que ter empregos que não correspondem às expectativas e não fazem uso daquilo que aprendemos nas faculdades, é que, nem aí, conseguimos ter a segurança de um emprego que nos permita fazer planos para o futuro, porque não sabemos se estaremos ali daqui a uns meses. E se isto não parece muito grave quanto se tem vinte e tal anos, vai começar a ter menos graça quando tivermos trinta e tal, quarenta e tal e percebermos que a nossa vida está muito longe daquilo que idealizámos, muito longe daquilo que os nossos pais idealizaram para nós.

Sobretudo, vamos perceber que desperdiçámos décadas de luta por melhores condições laborais ao aceitar trabalhar a recibos verdes, contratos a prazo, horários de trabalho demasiado extensos, etc. Sim, porque não se iludam! A culpa desta situação não é só dos políticos, não é só das empresas, é de nós todos que nos sujeitamos a estas condições. Se não formos nós a lutar por melhores condições de trabalho, não serão as empresas a fazê-lo por nós! Os fins-de-semana não foram criados porque os patrões decidiram ser bonzinhos, foram criados pela luta dos trabalhadores e pelo seu espírito de sacrifício conjunto. E é este espírito que eu acho que se perdeu nesta sociedade individualista, e nesta época em que ser sindicalista está fora de moda e ser comunista é, muitas vezes, motivo de piadas. Esquecemo-nos do que nos ensinaram as gerações anteriores: juntos podemos dizer NÃO. Juntos temos força!

Não acredito na atitude do “se não aceitar estas condições de trabalho, fico sem emprego e alguém as aceitará em vez de mim”. Se começarmos a nossa vida profissional com este espírito, agora que nem sequer temos responsabilidades (a maior parte não tem casa para pagar nem filhos para criar) quando é que vamos começar a lutar por melhores condições? Vamos ficar à espera que esta “crise” passe e que as condições melhorem espontaneamente nessa altura? ISSO NÃO VAI ACONTECER!

Mas se todos dissermos que não, terão de criar melhores condições. Lembrem-se: somos uma geração bastante qualificada, não nos vão substituir por imigrantes brasileiros e, sobretudo, AGORA não temos nada a perder, AGORA é o momento para dizer Não! NÃO não vamos aceitar trabalhar nessas condições nem vamos andar a saltar de estágio em estágio! Somos competentes e podemos ajudar as empresas a crescer e a melhorar, não vamos aceitar que só alguns ganhem com isso! Caso contrário, aquilo que se ouviu ontem na manifestação «à rasca estamos nós, só eles é que não!» continuará a ser verdade por muitos e muitos anos.

Uma manifestação não resolve o problema, mas pode ser o início. Digamos não! Denunciemos a empresas que promovem esta precariedade! E, sobretudo, tenhamos esperança num futuro melhor e na nossa capacidade de o construir. Ontem saímos à rua aos milhares, isso quer dizer que somos muitos a pensar o mesmo, passemos à acção!
Deixo aqui as palavras dela salientando o facto de que se ficarmos à espera que o governo ou as empresas tomem a iniciativa de melhorar as nossas condições de trabalho, bem podemos esperar sentados. Não é do interesse das empresas providenciar melhores condições de trabalho (porque normalmente custam mais), nem é muito do interesse do governo contradizer as empresas. Se queremos que alguém lute pelos nossos direitos não basta sairmos à rua e gritar em plenos pulmões que os temos e que queremos que sejam respeitados... temos de os fazer respeitar.

Se não queremos trabalhar em condições precárias, o que temos de fazer é não aceitar trabalhar em condições precárias. Temos de rejeitar quando nos oferecem essas condições. Se ninguém aceitar estas condições, as condições oferecidas têm de mudar para um conjunto de condições que sejam aceitáveis.

Quando estiverem à procura de emprego lembrem-se que há duas entidades em necessidade: vocês que precisam do emprego, e os empregadores que precisam do empregado. Não são só os empregadores que têm algo para vos dar, os empregados também têm algo a dar aos empregadores. E quando as pessoas se inteirarem disto, vão estar mais confortáveis em dizer "não" a condições de trabalho pouco dignas.

Ouve-se bastante o argumento "se eu não aceitar este emprego, outra pessoa aceitará". À pessoa que aceita o emprego resta consciencializar-se que ao aceitá-lo está não só a prejudicar-se a si mesma, como a prejudicar todos os que estão à procura de emprego. A verdade é que se ninguém aceitar as más condições, a mudança terá de vir do outro lado, de quem faz a proposta de emprego. E neste caso estamos a subir a qualidade de vida, em vez de a baixar.

O que esta manifestação mostra é que há pessoas suficientes que estão insatisfeitas com esta situação para fazer uma mossa. O que agora falta é essas pessoas fazerem algo que faça realmente mossa. Todos nós trabalhadores temos de lutar pelos nossos direitos, não podemos ficar de braços cruzados à espera que alguém lute por nós.

10 de março de 2011

A sério que não quero saber

Hoje queria usar uma folha de cálculo e como a licença temporária do Microsoft Office que vinha com o meu portátil deve estar quase a acabar*, decidi sacar o Libre Office, uma versão bastarda do Open Office feita por alguns tipos que não gostaram muito da passagem de mãos para a Oracle.

A página de download é engraçada. Não sei porquê alguém achou que sacar o código fonte para criar o próprio instalador é um caso de uso suficientemente importante para estar (quase) logo abaixo do download da versão que quero. Mais importante ainda do sacar o SDK para fazer as minhas alterações (já que está por cima desse). Acho que alguém tem de lhes dizer que não há aí muitas pessoas a quererem sacar o código fonte só para compilar e fazer um instalador personalizado quando, em princípio, o resultado final é igualzinho a usar o instalador dos binários. Talvez o caso de uso seja um pouco diferente do que a ligação dá a sugerir, mas prontos.

Também nessa página (e isto só reparei agora que a estou a revisitar) os temos a pedir desculpa se a "combo-box" não tiver logo o sistema operativo certo. Que idiotas... mais valia ficarem caladinhos. Imagino que aquele texto seja precisamente o contrário: o que eles estão a fazer é a gabarem-se que têm um sistema automático para detectar o sistema operativo e querem salientar essa funcionalidade. Mas como às vezes falha já se estão a desculpar. Se não quisessem ser chico-espertos não precisavam de dar a saber que a funcionalidade às vezes falhava. Se não dissessem nada, silenciosamente melhoravam a experiência do utilizador sem darem mau aspecto. Detecção do sistema operativo não é nada de tão difícil que se valha a pena gabar-se, e se não se conseguir detectar deixa-se o valor escolhido no sistema operativo mais usado que também ninguém havia de refilar se afinal falhassem.

Mas a cena mais espectacular da experiência toda ainda foi durante a instalação:


Lendo com atenção, não me estão a perguntar onde quero que o Libre Office vá parar, estão a perguntar onde quero que ponham os ficheiros temporários de instalação. Ora aí está algo que nem sequer quero saber, não percebo por que raio me estão a perguntar isto. Ponham-nos onde quiserem, num canto refundido qualquer que nunca mais vou visitar e que normalmente é apagado automaticamente, como o directório de ficheiros temporários do Windows. Se for, sem perguntar nada a ninguém, para um sítio desses como tantos outros programas fazem ao se instalarem, não me chocava nada. A única razão válida para me perguntarem uma coisa destas seria eu ter o controlo de onde os ficheiros vão parar para se tiver falta de espaço em disco saber onde estão. Há soluções melhores para este problema (que em princípio nem sequer é assim tão problemático) e nenhuma envolve perguntar-me onde quero que descompactem os ficheiros do instalador: podiam, como já disse, meter os ficheiros automaticamente numa directoria de ficheiros temporários. Podiam, se se preocupam assim tanto com o espaço que ocupam, simplesmente apagar os ficheiros como passo final do instalador.

Mas não. Escolheram perguntar-me onde quero descompactar os ficheiros do instalador. Já tinha ouvido falar no termo "smart defaults" para melhor agradar o utilizador e ele ter de mexer o menos possível nas configurações obrigatórias, mas a sugestão que eles dão como localização dos ficheiros de instalação é do melhor. Então quem é que não quereria ficheiros temporários no seu ambiente de trabalho? Isto já está tão limpinho e arrumadinho, só faltava mesmo era um directório chamado "Libre Office 3.3 (letras aleatórias) Instalation Files". Está-se mesmo a ver que é um directório que iria usar com uma frequência desgraçada depois de instalar o Libre Office.

Bem ... ao menos ficou num sítio onde é relativamente fácil seleccionar e apagar.

Na tab de "Get Involved", um dos perfis de programadores que precisam é de User Experience e Visual Designer. Têm razão. E precisam tão desesperadamente que fazem coisas completamente idióticas para chamar a atenção a esse facto.

Quando encontrar o botão de "Submit Feedback", podem crer que farei uso dele.

* Para além de ser profundamente irritante aparecer uma janela enorme para me dizer que só posso abrir o Office mais uma dúzia de vezes e a perguntar se não quero dar um balúrdio do dinheiro pelo privilégio de o poder abrir as vezes que quiser.

2 de março de 2011

O que distingue um bom programador?

Esta semana estou a fazer o Developer Boot Camp da OutSystems. A ideia é aprofundar os meus conhecimentos na óptica de Developer para a Agile Platform para que possa estar mais à vontade a desenvolver as ferramentas que se usam internamente na OutSystems (a grande maioria é desenvolvida com a própria plataforma da OutSystems), mas também para saber o que é que se anda a ensinar a quem usa a plataforma de forma a melhor compreender os erros que nos aparecem na Manutenção.

Uma das vantagens destes boot camps é conhecer outros profissionais da área de informática, particularmente com outra história e sensibilidades. Ontem gerou-se uma discussão que eu achei bastante interessante. Estava o formador a explicar as "Simple Queries" e como funcionavam e não é que aparece nos slides um "SELECT * FROM tabela ...". Visto isto há um dos colegas que pergunta se é possível seleccionar especificamente os campos em vez de se usar *. Ele claramente preocupado com aderir às boas práticas de SQL de seleccionar apenas os campos que interessam e obtê-los numa ordem previsível. "Não é preciso, a plataforma faz isso por si. Não só o '*' conceptual é expandido nos campos concretos da tabela, como os campos que não são usados também não são obtidos." é a resposta à preocupação dele. Devia chegar, mas não chegou.

É então que surge outra preocupação pelo mesmo colega: "Ora. Se a plataforma faz isso, como é que distingo quem sabe o que está a fazer de quem não sabe o que está a fazer quando faz perguntas à base de dados?". Aqui o argumento é bastante diferente: ao estar a tirar um fardo do programador, a plataforma está a retirar uma das características que o senhor usava para avaliar a competência dos seus programadores.

A minha opinião sobre o assunto é que se o que distingue um bom programador de um mau programador é algo que pode ser automatizado, então eu proponho que não é uma boa medida para avaliar o trabalho de um ser humano. Automatize-se o que se puder ao máximo e avaliem-se as capacidades cognitivas do programador, não as suas capacidades mecânicas.

Esta boa prática em particular tem como principal objectivo que as perguntas à base de dados sejam mais eficientes e menos propensas a erros. Com o "*", conceptualmente, os campos podem vir numa qualquer ordem, e poder-se-ia estar a introduzir um erro difícil de detectar se os campos viessem numa ordem diferente da esperada, ou pior ainda, se por alguma razão deixarem de vir pela ordem que vinham quando se definiu a pergunta. Por isso é boa prática enumerar os campos em vez de usar '*'. Por outro lado, se só precisarmos de dois ou três dos campos das tabelas usadas para realizar a pergunta, também é boa prática listar apenas os campos que vamos usar na selecção. Isto vai fazer com que hajam menos dados a passar na ligação (usualmente remota) à base de dados, melhorando o desempenho da aplicação.

Estas boas práticas são particularmente chatinhas de manter: se de repente deixo de precisar ou passo a precisar de um certo campo, posso ter de ir à definição da variável que guarda os valores adicionar/remover o campo, ter a certeza que na pergunta está lá ou deixa de estar. Enfim, pode ser preciso estar a alterar várias partes do código para fazer alterações rotineiras, das quais é fácil esquecer uma ou outra. Alterações do modelo de dados que se queiram utilizar podem também necessitar ir a uma série de perguntas alterar a lista de atributos obtidos, noutra operação rotineira e propensa a erros.

Como todas as operações rotineiras e monótonas, quanto mais automático isto for melhor. Na Agile Platform da OutSystems é exactamente isso que acontece. Os programadores que usem "Simple Queries" (servem perfeitamente para a vasta maioria das perguntas) beneficiam de borla destas boas práticas sem terem de se preocupar com isso. É maravilhoso poder fazer perguntas optimizadas a um nível de abstracção tão alto como o possível na Agile Platform.

Revisitando a preocupação do meu colega de formação: quando a plataforma faz tanto por nós pode parecer mais difícil distinguir um bom programador de um mau programador. Não me parece que seja um problema, principalmente porque o que interessa é ter bom código. Se ele foi feito por um bom programador, um mau programador ou por um gerador de código, não é tão relevante quanto isso. E nem sequer é um problema novo.

Quando surgiram compiladores de linguagem máquina para linguagens sequenciais simples, os programadores deixaram de se preocupar com (por exemplo) meter variáveis a 0 usando xor com ela própria (poupa algumas instruções) para se passarem a preocupar com problemas de mais alto nível. O mesmo se observou quando surgiram linguagens "managed" que (entre outras coisas) gerem grande parte da alocação da memória pelo programador. Em ambas estas instâncias o que distingue um bom programador da linguagem "antes" e o que distingue um bom programador na linguagem "depois" são quase sempre pormenores diferentes. Claro que também há características distintivas de bons programadores em geral que não estão ligadas a tecnologias especificas.

Mas esta subida da parada é algo positivo. Mesmo que os novos programadores Java (ou C#) não saibam nada de alocação de memória, e não se fossem lembrar de fazer os free's para todos os malloc's, eles agora vão ser avaliados pelo quão bem conhecem e usam as bibliotecas da linguagem, por exemplo. E é bom que não se tenham de preocupar com as coisinhas de baixo nível para virarem a sua atenção para a organização do programa e em ter mais e melhores funcionalidades no produto final.

Quando "programamos em OutSystems" a linguagem que usamos é gráfica: arrastamos bolinhas e outros bonequinhos para fluxos, editamos (visualmente) como a informação é apresentada, e definimos o modelo de dados das nossas aplicações usando o modelo Entidade-Relação. Por trás a plataforma vai gerar o SQL, o código aspx (ou jsp), e o código C# ou Java que implementa a nossa aplicação. Não temos de nos preocupar em fazer x = 0 com XOR em vez de usando uma constante (é o compilador de baixo nível que faz isso), nem com fazer um free por cada malloc (a linguagem "managed" é quem tem essa preocupação), e agora nem temos de nos preocupar com o código aspx/html ou sequer com as perguntas SQL (é a Agile Platform quem faz isso). Isto é mais do que bom, é óptimo.

Não termos de nos preocupar com estes pormenores (e eles serem feitas pelas camadas mais abaixo) quer dizer que as nossas preocupações vão para outros pormenores. Já não conseguir distinguir o "bom" programador que sabe o básico de optimizar perguntas SQL é uma vantagem já que mesmo o tipo que não sabe optimizar perguntas SQL vai gerar perguntas SQL optimizadas. Tal como o tipo que não sabe onde deve fazer free, vai ter os free's no sítio certo. O código por baixo é portanto de melhor qualidade. Remover estas preocupações propencia a uma melhor qualidade geral do programa, e é isso que todos queremos fazer: programas de qualidade.

Com a Agile Platform, o nível onde estão as distinções entre programadores fica cada vez mais próximo do nível que quem utiliza a aplicação vai ver. A não ser quando o programa estoura por falta de memória, quem usa um programa não quer saber se os free's estão todos feitos. A não ser que o programa demore um tempo alarvo a ir buscar dados à base de dados, o utilizador quer lá saber se o SELECT tem * ou não. O foco da qualidade da aplicação passa para cada vez mais perto de onde interessa, para quem o utiliza. E esta aproximação do utilizador final só pode ser positiva. Temos de nos lembrar que não fazemos aplicações por fazer aplicações (por mais tecnicamente bem feitas que estejam), mas sim que fazemos aplicações para serem usadas por alguém.

Um bom programador OutSystems vai ser aquele que melhor constrói  o modelo de dados adequado ao problema em mãos. É também aquele que melhor desenha a funcionalidade desejada sobre esses dados, com cada vez mais atenção que o cliente quer (quer ele o expresse ou não). Um bom programador OutSystems vai fazer aplicações fantásticas para quem as utiliza.

30 de janeiro de 2011

Atlas Shrugged - Objectivismo

Antes de virar filósofa a tempo inteiro, Ayn Rand escreveu um ensaio sobre a sua filosofia. Este ensaio foi entregue na forma de um romance de 1300 páginas de nome Atlas Shrugged.

A primeira vez que ouvi falar no Atlas Shrugged foi neste post do Gevlon (o blog está em inglês), em que ele menciona o tema central do romance, a Greve dos "Men of the Mind". A ideia intrigou-me e encomendei o livro para o ler. Desde que o recebi que o tenho estado a ler, tendo apenas feito uma pausazinha para experimentar o Kindle.

Ainda não acabei o livro*, mas aponto aqui os pontos da história que até agora me marcaram mais:

  • A luta frustrante (da protagonista da história) contra a incompetência generalizada da sociedade
  • A queda da 20th Century Motor Company -- From each according to their ability, to each according to their need (de cada um conforme as suas capacidades, para cada um conforme as suas necessidades)
  • A greve da mente
  • Filosofia de troca entre iguais
  • Dicotomia "produtores/sanguessugas"
Espero em breve conseguir articular um post sobre cada um destes pontos descrevendo-os em detalhe e como afectaram o meu pensamento.

Apenas para tentar expor o que até agora percebi da filosofia da Ayn Rand que foi obtido quase exclusivamente a partir da leitura deste livro e de uns poucos vídeos de entrevistas no youtube, o ponto fulcral da filosofia prende-se na satisfação dos desejos próprios. O que a Rand defende é que cada pessoa deve perseguir os seus objectivos, deve tentar ser feliz. E que o deve fazer sem exigir que outras pessoas abdiquem da sua própria felicidade para o seu bem. As palavras usadas em Atlas Shrugged para incorporar esta filosofia são: "I swear - by my life and my love of it - that I will never live for the sake of another man, nor ask another to live for mine".

O Objectivismo é especialmente interessante porque se apresenta como o que os Criacionistas como o Perspectiva (comentador frequente do blog do Ludwig Krippahl) dizem ser impossível num mundo sem Deus: um código moral baseado na razão. Embora eu ainda esteja bastante longe de subscrever totalmente o Objectivismo, este mostra-nos que pelo menos é concebível um código moral sem que as regras sejam baseadas em algo que foi escrito em pedra por um ser misterioso.

Devo dizer que seria capaz de subscrever à premissa base: Poderia jurar não viver para o bem dos outros, nem exigir que outros vivam para o meu bem.

* Por acaso entre o primeiro rascunho deste texto e a sua publicação até já acabei de ler o livro.

6 de janeiro de 2011

Kindle - Primeira Impressão

Numa palavra: espectacular.

Elaborando: Há uns tempos decidi-me a oferecer-me a mim mesmo um Kindle e assim o fiz. Para poupar o tempo de espera absurdo para encomendas internacionais (cerca de 7 semanas) fiz um pouco de marosca e comprei na Amazon do Reino Unido para um endereço fictício no Reino Unido (através do Borderlinx). Assim pedi o equipamento no dia 14 de Dezembro e no dia 28 de Dezembro (2 em vez de 7 semanas) estava entregue. Saiu mais caro, mas ao menos não tenho de esperar mais um mês.

O Kindle é um exemplo excelente de um aparelho bem feito: faz o que é suposto fazer, e fá-lo muito bem. E não se nota que estou a lidar com tecnologia avançada. A experiência é praticamente a mesma do que lendo um livro. Há a operação de abrir o livro, e posso começar a ler e folhear. Para folhear usam-se uns botões que há do lado do Kindle, com umas cópias simétricas no outro lado para funcionar bem agarre nele com uma mão ou a outra.

Quando estou a ler, é isto que se vê, o texto e um pequeno indicador do progresso actual do livro. Mais nada, o que é óptimo.

Interface de Leitura do Kindle


O progresso é medido em "Locations" que ainda não percebi muito bem ao que corresponde. Pelo que tenho lido corresponde a pontos fixos e periódicos no texto, qualquer coisa como 100 em 100 caracteres ou assim. É uma medida estranha e serve de pouco mais do que para ter uma barrinha de progresso.

Com o ecrã em e-ink, a experiência de leitura é tal e qual ler de um livro em papel, só que geralmente mais leve. Se o Kindle só fizesse isto, já me bastava.

Mas como se trata de um equipamento electrónico é possível adicionar uma série de pequenas features que tornam a experiência ainda mais agradável. A primeira das quais é customização. Há imensos tamanhos de letra desde o muito pequeno ao absolutamente enorme, tem três tipos de letra, dá para configurar o espaçamento entre linhas e também o tamanho das margens, isto tudo para satisfazer as diferentes preferências e limitações dos leitores.

Outro pequena adição possibilitada pela natureza electrónica do Kindle é o dicionário incorporado. Se não souber o significado de uma dada palavra, posso mover o cursor (apenas visível depois de começar e mexer com ele) para a frente dessa palavra e se ela estiver no dicionário, tenho uma breve definição da palavra mostrada de um modo não muito intrusivo na leitura:

Kindle com a definição de uma palavra
Para evitar interferir com a leitura quando a palavra está na primeira metade do ecrã a definição aparece em baixo, e quando está na segunda metade aparece em cima. E se a pequena sinopse da definição não for suficiente, pode-se sempre carregar no "Enter" para ver a definição completa, muitas vezes com definições alternativas e exemplos de uso da palavra:

Detalhe da definição de uma palavra

A mostra do texto e a sua justificação às margens é bastante bom, ajustando o espaçamento entre as palavras tentando que o texto de cada linha comece e acabe na margem, o que torna a leitura bastante agradável. Ao contrário da bela porcaria de algoritmo que o MS Word usa para o mesmo efeito, o algoritmo do Kindle prefere deixar algum espaço na margem direita quando a última palavra é bastante grande e sobra muito espaço em branco para distribuir. No entanto, de vez em quando, há umas palavras bastante grandes (ou junções de palavras com travessões ou outros elementos de pontuação) que dão um ar pouco natural à quebra de linha. Isto era facilmente resolvível com hifenização das palavras, como o LaTeX faz. Sinceramente não percebo porque é que o Kindle não hifeniza as palavras que considera deixarem demasiado espaço. Isso tornaria a leitura ainda mais agradável, na minha opinião.

Outro pequeno "defeito" do Kindle é a sua forma. Quando não estou a ler mas tenho de o levar comigo, como não tenho bolso nenhum onde o Kindle caiba, tenho de o segurar por baixo de forma a não encher o ecrã de dedadas (embora pareça uma folha de papel, ainda é um ecrã... e não é um touchscreen, como a maioria das pessoas que pega nele pensa), o que o deixa numa posição um bocado desajeitada. Se calhar é um defeito por desenho, para as pessoas se sentirem "forçadas" a comprar uma capa.

Qualquer das maneiras, a minha opinião inicial do Kindle é muito favorável e recomendo a toda a gente que goste de ler. É muito melhor do que andar com um calhamaço de 1200 páginas atrás.