Good writing is equal to good programming
I just read Zinsser (2010), and I though that his approach has a lot in common with good programming, and indeed with some good universal design principles.

Zinsser basically resumes his thoughts with these sentences:

  • Short is better than long.
  • Simple is good. (Louder)
  • Long Latin nouns are the enemy.
  • Anglo-Saxon active verbs are your best friend.
  • One thought per sentence.

I think all of that are equivalent to a combination of these universal principles of design: William Lidwell (2003):

  1. Accessibility - the principle that asserts that the design should be usable by people of diverse backgrounds.

  2. Chunking - accommodates short term memory limits by formatting information into small number of units.

  3. Interference effects - when outputs of different mental system are incongruent, interference occurs and additional processing is required.

  4. Ockham's razor - Oldie but goodie. As Einstein puts it Everything should be made as simple as possible, but not simpler.

To close, this little exercise was a great evidence on how writing is simply to program in a different media for a different audience (or vice versa) but the same principles apply to both of them.

Bibliography

Jill Butler William Lidwell, Kritina Holden.
Universal Principles of Design.
october 2003.

William Zinsser.
Writing english as a second language.
2010.
URL http://www.theamericanscholar.org/writing-english-as-a-second-language/.
Código com liberdade ou morte(): Porque Hackers geralmente são libertários
por 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.

My .vimrc

For those of you who are not familiar with vim (shame on you), it is a marvelously powerful text editor, which I use for coding and text editing in general (Latex, html, rails, ruby, etc). The only exception is scheme, for which I use DrScheme, but that is another story.

Anyway, .vimrc is the file that sits on your home directory and configures the state your vim will be. Here is mine for the curious.

  1 " An example for a gvimrc/vimrc file.
  2 " The commands in this are executed when the GUI or vim is started.
  3 "
  4 " Maintainer:   Bram Moolenaar <Bram@vim.org>
  5 " Last change:  2001 Sep 02
  6 "
  7 " To use it, copy it to
  8 "     for Unix and OS/2:  ~/.gvimrc
  9 "             for Amiga:  s:.gvimrc
 10 "  for MS-DOS and Win32:  $VIM\_gvimrc
 11 "           for OpenVMS:  sys$login:.gvimrc
 12
 13 " Make external commands work through a pipe instead of a pseudo-tty
 14 "set noguipty
 15
 16 " set the X11 font to use
 17 " set guifont=-misc-fixed-medium-r-normal--14-130-75-75-c-70-iso8859-1
 18
 19 " Switch on syntax highlighting if it wasn't on yet.
 20 if !exists("syntax_on")
 21     syntax on
 22 endif
 23
 24 "SETTINGS
 25 "
 26 set ch=2                " Make command line two lines high
 27 set mousehide           " Hide the mouse when typing text
 28
 29 "sets the default grepping engine to be ack-grep with the -a flag
 30 "change this to --ruby or some other stuff for searching only ruby
 31 "use it like this
 32 ":grep Dumper perllib
 33
 34 set grepprg=ack-grep\ -a 
 35
 36
 37 " Switch on search pattern highlighting.
 38 set hlsearch
 39
 40 "display current info all the time
 41 set ruler
 42
 43 colorscheme twilight
 44
 45 "prettier font...
 46 set guifont=Liberation\ Mono\ 12 
 47
 48 " those next 2 commands are taken from a tip in http://vim.sourceforge.net/tips/tip.php?tip_id=259
 49 " They basically map to keys F1 -> toogle menu; F2 -> toggle toolbar
 50
 51 " get rid of toolbar
 52 set guioptions-=T
 53 :let g:toggleTool = 0
 54 map <silent> <S-F2> :if g:toggleTool == 1<CR>:set guioptions-=T<CR>:set lines+=3<CR>:let g:toggleTool = 0<CR>:else<CR>:set lines-=3<CR>:set guioptions+=T<CR>:let g:toggleTool = 1<CR>:endif<CR> 
 55
 56 " get rid of menu
 57 set guioptions-=m
 58 :let g:toggleMenu = 0
 59 map <silent> <S-F1> :if g:toggleMenu == 1<CR>:set guioptions-=m<CR>:set lines+=1<CR>:let g:toggleMenu = 0<CR>:else<CR>:set guioptions+=m<CR>:let g:toggleMenu = 1<CR>:endif<CR>
 60
 61 "line numbers please...
 62 set number
 63
 64 "set the incremental search
 65 set incsearch
 66
 67 "remember more history
 68 set history=500
 69
 70 "Generally the :substitute command changes only the first occurrence of the word
 71 "unless you use the 'g' option.To make the 'g' option the default use this:
 72 set gdefault
 73
 74 "this is for vim omni completion of ruby code. Check out :help new-omni-completion or :help ft-ruby-omni
 75 let g:rubycomplete_buffer_loading = 1
 76 let g:rubycomplete_classes_in_global = 1
 77 let g:rubycomplete_rails = 1
 78
 79
 80 "*****************************************************************************************************
 81 "*****************************************************************************************************
 82 "*****************************************************************************************************
 83 "
 84 "MAPPINGS
 85 "
 86 "
 87 " Make shift-insert work like in Xterm
 88 map  <S-Insert> <MiddleMouse>
 89 map! <S-Insert> <MiddleMouse>
 90 "this pastes what's copied, not what is selected
 91 map  <leader><ESC>"+gp
 92 map  <leader>c "+y
 93
 94 map  <leader>n :vnew<CR>
 95
 96 "reload vim configuration automatically whenever I edit it
 97 "found here http://dailyvim.blogspot.com/2008/11/reload-vimrc.html?showComment=1228044660000#c2642014041159858949
 98 au! BufWritePost $MYVIMRC source %
 99
100 "this maps to James Buick's FuzzyFinder: TextMate plugin
101 "Found here http://weblog.jamisbuck.org/2008/10/10/coming-home-to-vim
102 map <leader>t :FuzzyFinderTextMate<CR>
103
104 "minibufexpl plugin http://www.vim.org/scripts/script.php?script_id=159
105 let g:miniBufExplMapWindowNavVim=1
106 let g:miniBufExplMapWindowNavArrows=1
107 let g:miniBufExplMapCTabSwitchBufs=1
108 set hid "Hide abandoned buffers in order to not loose undo history (taken from http://heykevinle.blogspot.com/2007/06/vim-minibufexpl.html)
109
110 " this is a shortcut to the minibufexplorer
111 map <Leader>b :MiniBufExplorer<cr>
112             
113 " SPELLING OPTIONS
114 "
115 "set the spell checker for txt, html, README and tex files
116 autocmd BufNewFile,BufRead *.txt,*.html,README,*.tex,*.story setlocal spell spelllang=en_us
117 "autocmd BufNewFile,BufRead *.txt,*.html,README,*.tex setlocal spell spelllang=pt
118
119 map <F2> :setlocal spell spelllang=en_us<CR>
120 map <F3> :setlocal spell spelllang=pt<CR>
121
122 "popup the a menu on mispelled words with the mouse
123 set mousemodel=popup
124
125 set textwidth=80
126
127 "found those on http://wiki.rubyonrails.org/rails/pages/HowtoUseVimWithRails
128 filetype plugin indent on " Enable filetype-specific indenting and plugins
129 augroup myfiletypes
130     " Clear old autocmds in group
131     autocmd!
132     " autoindent with two spaces, always expand tabs. For other types of
133     " identation, add new file types.
134     autocmd FileType ruby,eruby,yaml set ai sw=2 sts=2 bs=2 et
135     " if not any of those files, fall to the default
136     set ai sw=2 sts=2 bs=2 et
137 augroup END
138
139 "Autoidenting ruby code using the kode gem. Found on http://antono.info/en/50
140 nmap <leader>rci :%!ruby-code-indenter<cr>
141
142 "map the leader c key to the buffer delete
143 nmap <leader>d :bd<cr>
144
145 "write the buffer
146 nmap <leader>w :w<cr>
147
148 "write all the  buffers
149 nmap <leader>wa :wa<cr>
A review of The i of the vortex, from neurons to self

A little review of the book, The i of the vortex, from neurons to self.

This is a stimulating book, from one of the modern fathers of neuroscience, Rodolfo Liinas (if anyone is interested in a video of him discussing the book, there is a great one online here) where he attempts to build a coherent theory of consciousness as an emergent property of neurons. He does not only stay within the confinement of describing the current modern discoveries. He actually attempts to find a framework.

That framework stems from motricity, the capacity to move. Llinas argues that moving and being conscious are profoundly linked, in such that for one to move, one needs:

  • The capacity to move
  • A perception of how one is moving and where
  • The desire to move

From there it follows that the brain is essentially a prediction, or dreaming, machine, but the dream is always being modulated by the information coming from the senses.

All that does not, of course, spring from nothing. There is a evolutionary progress in the development of this three items, that according to my interpretation of Llinas' book, is what consciousness is all about.

There is a lot of technical information there, so my advice is, give this book a couple of readings, because Llinas is at the forefront of neuro research, and his compilation of recent finding is a worth reading in itself.

An emergent participatory design framework for higher education
Here is an improved version of an article about education I have wrote some time ago. If anyone is curious, this is the abstract:
Abstract
This paper proposes a model of higher education that uses emergence and constructionism as the guiding design principles and takes the current computational technologies and networks as the technological base to distribute and generate information and knowledge.
Thoughts on Deschooling Society

This is a small review about Ivan Illich's book, Deschooling Society. One of the best books I've ever heard about the negative effects of the current educational system.

The author explains exactly what the book is about:

School groups people according to age. This grouping rests on three unquestioned premises. Children belong in school. Children learn in school. Children can be taught only in school.

I think these unexamined premises deserve serious questioning.

Most of the text is dedicated to question, very skillfully in my opinion those premises. The author anarchist/libertarian tendencies show in the book, in the sense that most emphasis is directed to the free choice of the individual in detriment of institutions. But I think one would be wrong to say that Illich has an agenda other than point out the evils of a systematic enforcement of teaching:

To understand what it means to deschool society, and not just to reform the educational establishment, we must now focus on the hidden curriculum of schooling. We are not concerned here, directly, with the hidden curriculum of the ghetto streets which brands the poor or with the hidden curriculum of the drawing room which benefits the rich. We are rather concerned to call attention to the fact that the ceremonial or ritual of schooling itself constitutes such a hidden curriculum.

We cannot begin a reform of education unless we first understand that neither individual learning nor social equality can be enhanced by the ritual of schooling. We cannot go beyond the consumer society unless we first understand that obligatory public schools inevitably reproduce such a society, no matter what is taught in them.

Illich goes very keenly to the core of the damages that the paternalistic system of education do to a person.

The man addicted to being taught seeks his security in compulsive teaching. The woman who experiences her knowledge as the result of a process wants to reproduce it in others.

In fact, healthy students often redouble their resistance to teaching as they find themselves more comprehensively manipulated. This resistance is due not to the authoritarian style of a public school or the seductive style of some free schools, but to the fundamental approach common to all schools-the idea that one person's judgment should determine what and when another person must learn.

From every single source about pedagogy I have ever heard, this book is the one to learn about why the current situation is fundamentally broken, why it is harmful to society and to the individual.

But school enslaves more profoundly and more systematically, since only school is credited with the principal function of forming critical judgment, and, paradoxically, tries to do so by making learning about oneself, about others, and about nature depend on a prepackaged process.

It is a very profound responsibility of the individual, to take charge of his own education, and you could say the same about freedom. It is hard work to be a free person, and you cannot be a free person if others control what, how and when you should learn something.

Only liberating oneself from school will dispel such illusions. The discovery that most learning requires no teaching can be neither manipulated nor planned. Each of us is personally responsible for his or her own deschooling, and only we have the power to do it. No one can be excused if he fails to liberate himself from schooling. People could not free themselves from the Crown until at least some of them had freed themselves from the established Church. They cannot free themselves from progressive consumption until they free themselves from obligatory school.

This is a life changing book, and I guess Illich's works will only increase in importance the deeper we go into the knowledge age.

Difference between constructivism and constructionism

Hello there.

Just giving a heads up on a good article I've read recently called Emergent Design and learning environments: Building on indigenous knowledge by David Cavallo.

It tells the story of a constructivist project in Thailand, and it is a great read if you want to get a better grip on education as Seymour Papert dreamed it could be. One small quote from the article, about the difference between constructivism (Jean Piaget) and constructivism (Papert):

Constructionism builds upon principles in constructivism. While constructivism holds that the learner constructs new knowledge based on the existing knowledge he or she has, constructionism builds on this idea by maintaining that this process happens particularly well when the learner is in the process of constructing something.