quarta-feira, 14 de março de 2012

Dynamic racket pascal




Hello.

Through HN, I have stumbled upon Cletus blog, and I have
read this
post
of his. It enticed me to try out some version of mine for
the dynamic programming version. Here it is, coded in racket with a
contract and a small test case.
#lang racket

(provide (contract-out
          [pascal-triangle (-> exact-positive-integer? vector?)]))

(define (pascal-triangle n)
  (define (loop accumulator row)
    (if (= n row)
        accumulator
        (let* ([previous (vector-ref accumulator
                                     (sub1 (vector-length accumulator)))]
               [current-row
                (vector-append #(1)
                               (for/vector ((i (in-range 1 row)))
                                           (+ (vector-ref previous (sub1 i))
                                              (vector-ref previous i)))
                               #(1))])
          (loop (vector-append accumulator (vector current-row)) (add1 row)))))
  (loop #(#(1)) 1))


(for ([row (pascal-triangle 30)])
     (displayln row))

See you.

quarta-feira, 7 de março de 2012

Codifique livre ou morra(): Porque Hackers geralmente são libertários

Daniel Franke,(traduzido por Eduardo Bellani)


Para qualquer um que tenha habitado a internet por tempo suficiente para
diferenciar ICANN de 4chan ou um netcat de um LOLcat, não vai ser novidade que
hackers são com freqüência libertários. A razão é normalmente entendiada como
algo assim: hackers, por definição, gostam de coisas esquisitas, como desmontar
o tocador de DVD ou pesquisar como uma bomba nuclear funciona. Legisladores, que
falham cronicamente em entender o porque alguém iria gostar dessas coisas ou
porque que elas teriam valor pra alguém, passam leis que interferem com essas
atividades. Justificadamente irados, hackers adotam visões políticas que se
opõem a estas intrusões.

A mais clara exposição deste modelo talvez seja o artigo de 2004 do Paul Graham
chamado "A palavra `hacker'". A idéia geral entretanto já está tacitamente
entendida a muito mais tempo. Ela é a base para o tom de várias histórias do
site Slashdot. Observações da correlação hacker-libertário é ainda mais
antiga; não da pra ler USENET antiga por 10 minutos sem perceber-la.

A rescrição de Gordon ao corolário de Newman sobre a lei de Godwin observa
"Libertarismo (pro, contra, e lutas entre as facções) é o tópico primordial
de discussões do net.news. Qualquer hora que o debate muda para outro lugar, ele
precisa eventualmente voltar a esta fonte de combustível" (Não sei quando isto
foi escrito. Não foi entes de 1990 que a lei de Godwin foi criada, e não depois
de 1994 que Godwin a citou).

Hackers tem uma longa história de conflitos com governo. Uma lista incompleta:


  • 1986: O ``Computer Fraud and Abuse Act" passa no congresso americano,
    tornando pela primeira vez cracking um crime. Enquanto ele é direcionado
    principalmente a crimes não controversos, abuso legal por autoridades
    ignorantes por atos perfeitamente legais como port-scanning se torna
    rotina na década de 90.

  • 1993: Philip Zimmerman é o alvo de uma investigação criminal depois que o
    PGP é sai dos Estados Unidos, em violação de restrições de exportação para
    criptografia (que era classificada como munição na época).

  • 1996: O ``Communications Decency Act" restringe severamente material
    "obsceno ou indecente" na internet. Esta lei é negada pela Suprema Corte
    dos Estados Unidos no ano seguinte

  • 1998: O ``Digital Millennium Copyright Act" passa, tornando crime qualquer
    tentativa de passar pelas medidas de segurança que tem como objetivo proteger
    material com copyright, independentemente da intenção do tentativa.

  • 1999: Jon Johansen et. al. libera o DeCSS, decodificando a `encriptação'
    ridícula usado praticamente em todos os DVDs e tornando possível assistir
    DVDs usando software open-source. No ano seguinte, a casa de Johansen é
    invadida pela polícia Norueguesa.

  • 1999: Amazon recebe a notória patente do 1-click.

  • 2000: 72 pessoas na Califórnia recebem uma intimação proibindo-as de usar
    uma camiseta contendo o código de uma parte do DeCSS.

  • 2001: Dimitry Sklyrov, um programador russo visitando os Estados Unidos, é
    preso pela lei DMCA e detido por vários meses por ter escrito um leitor
    de e-book capaz de ler vários formatos com DRM.

  • 2002: Sarbanes-Oxley torna quase impossível para pequenas startups web
    fazerem abertura de ações

  • 2003: A saga legal da SCO começa. SCO exige que todos os usuários Linux a
    paguem $700 dólares de licença.

  • 2003: O FBI invoca abusivamente o USA PATRIOT ACT para recuperar
    notas de repórteres que entrevistaram Adrian Lamo.

  • 2004: No que Brad Templeton descreve como `spamlitigação', o RIAA começa a
    processar seus clientes em massa, distribuindo mais de 20000 processos
    legais, incluindo crianças, avós e falecidos entre os acusados.

  • 2005: FEC Commissioner Bradley Smith afirma que `a exceção da imprensa' do
    McCain-Feingold Campaign Finance Reform Act não inclui bloggers.


Entretanto, estes casos são insuficientes para explicar as atitudes dos hackers.
A cultura hacker existe desde que as universidades tiveram acesso aos
computadores - desde os anos 60 - e mesmo antes era reconhecida pela sua
incarnação anterior dos operadores de rádio amador. Foi uma cultura libertária
desde sua concepção. Mesmo assim, a lista começa em 1986. Antes do CFAA, era
difícil apontar para qualquer intrusão que incomodasse os hackers em particular.
Uso civil dos computadores não estava no radar do congresso e da polícia até
então.

Para não fazer injustiça a tese de Graham, ela é muito mais abrangente que
qualquer lista de reclamações. Graham observa corretamente que hackers tem suspeita de toda a autoridade, mesmo
onde a teoria libertária diz que esta autoridade é legítima. Hackers ficam tão
nervosos com o chefe que controla seu departamento fala para eles que "Eu
acabo de ler numa revista sobre algo chamado virtualização. Nós deveríamos usar
isso." quanto vão ficar com algum agente do governo. Por isso os hackers já se
incomodavam bastante antes de 1986. O governo chegou tarde para essa festa.

Mas a obvervação que hackers são um grupo de espertinhos reclamações não explica o
porque disto. Se as reclamações não se limitam a intersecção entre governo e
tecnologia, porque esta atitude tem relação com escrever código?

A resposta de Graham a isto é a seguinte:

Deixe-me colocar isto em termos que um oficial do governo iria apreciar.
As liberdades civis não são apenas um ornamento, ou uma velha tradição
americana. Liberdades civis fazem os países enriquecerem. Se você fizer um
gráfico de PIB per capita vs liberdades civis, você verá uma forte
relação. Poderia tais liberdades serem a causa, ao invés da conseqüência
da riqueza? Eu penso que sim. Eu penso que uma sociedade em que as pessoas
podem dizer e fazer o que quiserem irá ser uma onde as soluções mais
eficientes venceriam, ao invés daquelas que fossem patrocinadas pelas
pessoas mais poderosas. Países autoritários se tornam corruptos, países
corruptos se tornam pobres, e países pobres se tornam fracos. Parece que
existe uma curva Laffer para o poder do governo, assim como para impostos.
No mínimo, é provável o suficiente para não se tentar um experimento para
testar a hipótese. Ao contrário de impostos, você não pode repelir o
totalitarismo se ele não funcionar direito.

É por isso que os hackers se preocupam. O governo espionando as pessoas
não faz com que o código que eles escrevem se torne pior. Ele apenas leva
a um mundo onde as idéias ruins vencem. E por causa que isto é tão
importante para os hackers, eles são especialmente sensíveis a isto. Eles
podem sentir o autoritarismo se aproximando a distância, como animais
podem sentir uma tempestade.

Eu acho que isto é uma falácia petitio
principii
. É uma visão libertária
sobre o porque os hackers deveriam ser libertários. Se alguém concorda com a
premissa que as liberdades civis fazem as pessoas enriquecerem, então tudo seque
tranqüilamente. Mas se o governo autoritário "não faz com que o código que eles
escrevem se torne pior", então porque hackers tem uma chance maior de fazer esta
conexão?

Uma resposta tentadoramente lisonjeira para esta pergunta vêm do post de 1992 de
Stuart Reges. Resumidamente, Reges afirma que existem uma certa habilidade
mental - "QI libertário" - que nos faz melhores em formar modelos mentais de
como programas funcionam assim como formular como a sociedade funciona. A
primeira habilidade nos faz bons hackers. A segunda nos da um entendimento
intuitivo de como o libertarismo funciona.

Apesar de cortês, eu acho que este argumento erra o ponto da discussão. Toda a
teoria econômica que vem junto com o libertarismo é um efeito secundário.
Libertarismo não é sobre o que nos faz ricos; é sobre o que é certo.
``We hold these truths to be self-evident''

e tudo mais. Libertários não se opões ao governo porque é atrapalhado e
ineficiente, se opõe porque é maligno.

Além disso, acho que Reges nos dá muito crédito. O conhecimento médio dos
hackers sobre a escola Austríaca ou a de Chicago é mais medíocre do que eles se
permitiriam em qualquer assunto técnico. Comece a falar de externalidades ou o
problema do
parasita

e nós mudaremos de assunto.
Claro, os mais sofisticados irão citar o Teorema de
Coase
, mas a maioria nem
ouviu falar dele.

Eu acho que nós estivemos olhando para o problema do ângulo errado.
Não é que hackers adotam políticas libertárias, nem que existe um terceiro fator
que influencia libertários e hackers. Ao invés disso, pessoas com uma atitude
anti autoritária tendem a serem atraídos para programação.

A frase "conhecimento é poder" é um clichê, mas é também verdadeira num sentido
bem literal. Aquilo que você não entende tem poder sobre você. As pessoas que
não tem interesse em entender os computadores estão totalmente acostumadas a
serem mandadas por eles; é mais um fato da vida. Se você não sabe que você pode
mudar o bit de apenas-leitura ao clicar com o botão direito e editar o atributo
na janela de propriedades, então não ter a permissão de editar o arquivo não é
fundamentalmente diferente de não ser capaz de tocar um arquivo .wma cifrado
porque a Microsoft fechou seu servidor de licença. Tentar fazer com que pessoas
leigas se importem com DRM é inútil. Eles são sujeitos as tiranias de seus
computadores todo o tempo. Porque esta seria pior?

Mas para aqueles de temperamento libertário, isso é um estado inaceitável. Ser
mandado pelo governo já é ruim o suficiente. Mas ser mandado por um objeto
inanimado? Intolerável. Como eu posso controlar essa coisa?

Este modelo da psiquê humana explica bastante nossas idiossincrasias de
personalidade. Quando você não tolera ser ignorante sobre uma tecnologia,
aprender sobre ela é a única saída. A outra é se tornar um
ludita. Hackers se tornam
luditas com freqüência.

Para exemplificar, eu tenho o mais barato celular do mercado. Ele não pode nem
fazer o download de tons. Mas é ótimo para fazer chamadas. Porque é isso que
eles tem que fazer. Eles não são feitos para mandar email. Nem para jogar
tetris. Nem para tirar fotos. São feitos para fazer chamadas. É bastante chato
ter que descobrir como tirar meu telefone do modo de câmera. Eu não quero
descobrir como tirar meu telefone do modo de câmera, porque telefones não são
feitos para tirar fotos. São feitos para fazer chamadas.

Algumas pessoas riem dessa atitude, mas é o mesmo sentimento que hackers tem
quando reclamam de inchaço de software. Todos já escutamos, se já não tivermos
participado, de conversas como:

``Eu não quero que meu editor de texto leia email! Eu quero um editor de
texto!''

``Então use-o como um editor de texto.''

``Mas ai vou ficar com todo esse lixo espalhado no meu computador.''

``Por quê você não ignora isso? Não está nem exposto na interface gráfica.
Você tem que saber o comando correto para ativá-lo. São menos de 80MB de
espaço, e você tem 1TB no seu disco, e a maior parte não chega na RAM até
que você a invoca.''

``Mas é nojento!''

Pode parecer forçado chamar a atitude dos odiadores do emacs de ludismo, e mais
forçado ainda chamá-lo de libertária. Mas a psicologia é a mesma. Ninguém quer
tirar o tempo para entender alguma coisa que eles consideram supérflua.
Racionalmente ou não, hackers irão encontrar qualquer tecnologia que eles não
entendem com suspeita - não de seus mérito, mas de sua segurança. "I eu quero
isso ai ferrando com meu sistema", nós iremos dizer para você, mesmo sabendo
perfeitamente bem que ele irá apenas sentar em um canto do disco rígido. Já
recompilou seu kernel apenas para desabilitar um módulo que você não necessita?
A maior pare de nós já o fez, mas isso desafia qualquer base racional.

Mas essa irracionalidade é comum. As atitudes libertárias geralmente ultrapassam
os princípios libertários. Essencialmente todos os libertários defendem o
direito de portar armas, mas consideram o direito a propriedade privada mais
fundamental. Então, nós compreendemos o direito do de proprietários de proibir
armas em sua propriedade. Mas isso não impede libertários de ficarem perturbados
cada vez que um proprietário exerce esse direito.

Ficamos perturbados com os hoplofóbicos (medo de armas de fogo) pela mesma razão
que arrancamos aquele módulo do kernel: odiamos e tememos sermos controlados.