<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Feed RSS do(a) Aurélio A. Heckert</title><link>http://blogoosfero.cc/aurium</link><description>Conteúdo do(a) Aurélio A. Heckert publicado no Blogoosfero</description><item><title>Telegram Bot API Proposal: Alarm Notification Method</title><description>&lt;p&gt;Personal assistant bots could need to emergency notify. It is not enough to have a message notification for heavy users or for who is not using the smartphone or other device with a telegram client in that emergency moment.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;For instance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An assistant bot my need to notify an schedule marked as important. To ensure that the user will see the notification in time, the bot could ask the client to alarm the user.&lt;/li&gt;
&lt;li&gt;A server monitoring tool with a bot interface could alarm the server admin when worrying event happens.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;
&lt;a name="Specification"&gt;&lt;/a&gt;Specification&lt;/h2&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;
&lt;a name="sendAlarm"&gt;&lt;/a&gt;sendAlarm&lt;/h3&gt;
&lt;p&gt;Use this method to send alarm messages. On success, the sent Message is returned. The optional photo will be presented on the "highlighted chat alarm message" and as a background on the device alarm when it is possible. An "highlighted chat alarm message" must display a button to enable/disable this bot alarm. Bot developers must consider to send a request message with &lt;code&gt;enable_alarm&lt;/code&gt;&lt;code&gt;KeyboardButton&lt;/code&gt;, before the first alarm.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;table class="foswikiTable" border="1"&gt;

&lt;tr class="foswikiTableOdd foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0"&gt;
&lt;td class="foswikiTableCol0 foswikiFirstCol"&gt;Parameters&lt;/td&gt;
&lt;td class="foswikiTableCol1"&gt;Type&lt;/td&gt;
&lt;td class="foswikiTableCol2"&gt;Required&lt;/td&gt;
&lt;td class="foswikiTableCol3 foswikiLastCol"&gt;Description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="foswikiTableEven foswikiTableRowdataBgSorted1 foswikiTableRowdataBg1"&gt;
&lt;td class="foswikiTableCol0 foswikiFirstCol"&gt;chat_id&lt;/td&gt;
&lt;td class="foswikiTableCol1"&gt;Integer or String&lt;/td&gt;
&lt;td class="foswikiTableCol2"&gt;Yes&lt;/td&gt;
&lt;td class="foswikiTableCol3 foswikiLastCol"&gt;Unique identifier for the target chat or username of the target channel (in the format @channelusername). Yes it may try to alarm all group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="foswikiTableOdd foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0"&gt;
&lt;td class="foswikiTableCol0 foswikiFirstCol"&gt;text&lt;/td&gt;
&lt;td class="foswikiTableCol1"&gt;String&lt;/td&gt;
&lt;td class="foswikiTableCol2"&gt;Yes&lt;/td&gt;
&lt;td class="foswikiTableCol3 foswikiLastCol"&gt;Text of the alarm. This text will be show as a highlighted message in the chat and in the device alarm.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="foswikiTableEven foswikiTableRowdataBgSorted1 foswikiTableRowdataBg1"&gt;
&lt;td class="foswikiTableCol0 foswikiFirstCol"&gt;parse_mode&lt;/td&gt;
&lt;td class="foswikiTableCol1"&gt;String&lt;/td&gt;
&lt;td class="foswikiTableCol2"&gt;Optional&lt;/td&gt;
&lt;td class="foswikiTableCol3 foswikiLastCol"&gt;Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="foswikiTableOdd foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0"&gt;
&lt;td class="foswikiTableCol0 foswikiFirstCol foswikiLast"&gt;photo&lt;/td&gt;
&lt;td class="foswikiTableCol1 foswikiLast"&gt;
&lt;span class="foswikiEmulatedLink"&gt;InputFile&lt;/span&gt; or String&lt;/td&gt;
&lt;td class="foswikiTableCol2 foswikiLast"&gt;Optional&lt;/td&gt;
&lt;td class="foswikiTableCol3 foswikiLastCol foswikiLast"&gt;Photo to send. Pass a file_id as String to send a photo that exists on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get a photo from the Internet, or upload a new photo using multipart/form-data.&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;
&lt;a name="KeyboardButton"&gt;&lt;/a&gt;&lt;span class="foswikiEmulatedLink"&gt;KeyboardButton&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;Add this field:&lt;/p&gt;
&lt;table class="foswikiTable" border="1"&gt;

&lt;tr class="foswikiTableOdd foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0"&gt;
&lt;td class="foswikiTableCol0 foswikiFirstCol foswikiLast"&gt;enable_alarm&lt;/td&gt;
&lt;td class="foswikiTableCol1 foswikiLast"&gt;Boolean&lt;/td&gt;
&lt;td class="foswikiTableCol2 foswikiLastCol foswikiLast"&gt;
&lt;em&gt;Optional.&lt;/em&gt; If True, a button to enable bot alarm will be show to the user. (It do not need to be show if the user already enabled this bot to alarm)&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;
&lt;a name="Android_Screen_Proposal"&gt;&lt;/a&gt;Android Screen Proposal&lt;/h2&gt;
&lt;p&gt;&lt;img src="/articles/0092/6737/telegram-alarm-notification.jpg" alt="Telegram alarm notification" width="360"&gt;&lt;br&gt; A ring tone must play with.&lt;/p&gt;</description><pubDate>Thu, 10 May 2018 15:43:29 -0300</pubDate><link>http://blogoosfero.cc/aurium/blog/telegram-bot-api-proposal-alarm-notification-method</link><guid>http://blogoosfero.cc/aurium/blog/telegram-bot-api-proposal-alarm-notification-method</guid></item><item><title>Existem Blobs Binários no Kernel Linux usado pelo Ubuntu?</title><description>&lt;p&gt;Recentemente, em um dos grupos de Telegram que participo foi colocado em questão: O Kernel Linux contém ou não os polêmicos Blobs binários?&lt;/p&gt;
&lt;p&gt;O &lt;a href="https://garoa.net.br/wiki/Usu%C3%A1rio:Juca" target="_blank"&gt;Juca&lt;/a&gt; afirmou que sim, baseado num processo lógico indutivo, outro participante afirmou que não baseado em... Bem, ele apenas afirmou que não. Então decidi buscar algo que ajudasse a descobrir a verdade...&lt;/p&gt;
&lt;p&gt;Para começar, o Ubuntu segue o mesmo procedimento do Debian para publicar seus pacotes. Todo pacote .deb é fruto de um pacote original vindo do upstream (projeto de origem, como Inkscape, GNOME, Linux,...) e modificações da distro, que você encontra em packages.debian.org ou packages.ubuntu.com em um "&lt;code&gt;*.debian.tar.xz&lt;/code&gt;" ou "&lt;code&gt;*.diff.gz&lt;/code&gt;"&lt;/p&gt;
&lt;p&gt;Hoje, 19/nov/2017, encontrei os pacotes &lt;code&gt;linux-image-4.9&lt;/code&gt; no Debian stable e o &lt;code&gt;linux-image-4.13&lt;/code&gt; no Ubuntu xenial. O pacote "&lt;code&gt;orig.tar.xz&lt;/code&gt;" do Debian já veio sem o diretório "&lt;code&gt;firmware&lt;/code&gt;", que ainda existe no pacote "&lt;code&gt;orig.tar.gz&lt;/code&gt;" do Ubuntu. Neste diretório estão todos ou boa parte dos Blobs. Entretanto apenas essa informação não confirma que os pacotes binários do Ubuntu contenham os Blobs. Para compilar o Linux com os firmwares é preciso passar a configuração "&lt;code&gt;CONFIG_FIRMWARE_IN_KERNEL=y&lt;/code&gt;" para o builder. Os fontes do kernel não trazem essa configuração por padrão (massa) e, como é de se esperar, o Debian não adiciona essa diretriz em seus diffs, entretanto o diff do Ubuntu sim, adiciona os firmwares para todas as arquiteturas.&lt;/p&gt;
&lt;pre&gt;$ egrep -r '^\+{3} |CONFIG_FIRMWARE_IN_KERNEL *= *[yY]' . | grep -B1 CONFIG_FIRMWARE_IN_KERNEL&lt;br&gt;...diff:+++ linux-hwe-edge-4.13.0/debian.hwe-edge/config/amd64/config.common.amd64&lt;br&gt;...diff:+CONFIG_FIRMWARE_IN_KERNEL=y&lt;br&gt;--&lt;br&gt;...diff:+++ linux-hwe-edge-4.13.0/debian.hwe-edge/config/arm64/config.common.arm64&lt;br&gt;...diff:+CONFIG_FIRMWARE_IN_KERNEL=y&lt;br&gt;--&lt;br&gt;...diff:+++ linux-hwe-edge-4.13.0/debian.hwe-edge/config/armhf/config.common.armhf&lt;br&gt;...diff:+CONFIG_FIRMWARE_IN_KERNEL=y&lt;br&gt;--&lt;br&gt;...diff:+++ linux-hwe-edge-4.13.0/debian.hwe-edge/config/i386/config.common.i386&lt;br&gt;...diff:+CONFIG_FIRMWARE_IN_KERNEL=y&lt;br&gt;--&lt;br&gt;...diff:+++ linux-hwe-edge-4.13.0/debian.hwe-edge/config/ppc64el/config.common.ppc64el&lt;br&gt;...diff:+CONFIG_FIRMWARE_IN_KERNEL=y&lt;br&gt;--&lt;br&gt;...diff:+++ linux-hwe-edge-4.13.0/debian.master/config/amd64/config.common.amd64&lt;br&gt;...diff:+CONFIG_FIRMWARE_IN_KERNEL=y&lt;br&gt;--&lt;br&gt;...diff:+++ linux-hwe-edge-4.13.0/debian.master/config/arm64/config.common.arm64&lt;br&gt;...diff:+CONFIG_FIRMWARE_IN_KERNEL=y&lt;br&gt;--&lt;br&gt;...diff:+++ linux-hwe-edge-4.13.0/debian.master/config/armhf/config.common.armhf&lt;br&gt;...diff:+CONFIG_FIRMWARE_IN_KERNEL=y&lt;br&gt;--&lt;br&gt;...diff:+++ linux-hwe-edge-4.13.0/debian.master/config/i386/config.common.i386&lt;br&gt;...diff:+CONFIG_FIRMWARE_IN_KERNEL=y&lt;br&gt;--&lt;br&gt;...diff:+++ linux-hwe-edge-4.13.0/debian.master/config/ppc64el/config.common.ppc64el&lt;br&gt;...diff:+CONFIG_FIRMWARE_IN_KERNEL=y&lt;br&gt;--&lt;br&gt;...diff:+++ linux-hwe-edge-4.13.0/zfs/zfs_config.h.in&lt;br&gt;.../Makefile:# 1. Building kernel with CONFIG_FIRMWARE_IN_KERNEL=y -- $(fw-shipped-y) should&lt;/pre&gt;
&lt;p&gt;Talvez essa informação não seja suficiente para você. Justo... Então um amigo com uma máquina Ubuntu me fez o favor de executar "&lt;code&gt;dpkg -L linux-image-*&lt;/code&gt;" e no resultado estavam dezenas de firmwares diretamente relacionados aos arquivos de blobs que localizei no &lt;code&gt;tar.gz&lt;/code&gt; dos fontes. Faça você mesmo esse teste. É o mais simples e direto.&lt;/p&gt;
&lt;p&gt;Então fica claro que o Ubuntu adiciona sim blobs ao pacote compilado entregue aos seus usuários.&lt;/p&gt;
&lt;p&gt;Não podemos afirmar, apenas com essa analise, que o Debian não adiciona blobs, mas temos a declaração do projeto (&lt;a href="https://www.gnu.org/distros/common-distros.pt-br.html" target="_blank"&gt;validada pela FSF&lt;/a&gt;) de que todos os blobs foram removidos do kernel distribuído pelo Debian em 2011 e, caso seja necessário, os firmwares baseados em blobs binários estão no repositório "non-free" da distribuição.&lt;/p&gt;
&lt;h2&gt;Sim, tem Blobs, e o que isso significa?&lt;/h2&gt;
&lt;p&gt;Para começar Blobs binários nunca deveriam ter entrado no repositório do projeto Linux simplesmente porque estes são incompatíveis com a definição de Software Livre e de Código Aberto. Especificamente na liberdade 1 "&lt;em&gt;&lt;strong&gt;A liberdade de estudar como o programa funciona, e adaptá-lo às suas necessidades&lt;/strong&gt;&lt;/em&gt;" e no critério 2 "&lt;em&gt;&lt;strong&gt;Source Code (...) Deliberately obfuscated source code is not allowed. Intermediate forms such as the output of a preprocessor or translator are not allowed.&lt;/strong&gt;&lt;/em&gt;"&lt;/p&gt;
&lt;p&gt;Blobs, como qualquer software fechado, representa um limite praticamente intransponível a auditabilidade (a não ser que vc tenha MUITO tempo e dinheiro). Significa que nem você e nem o seu amigo super-mega-hacker podem afirmar que sabem exatamente o que um Blob faz, simplesmente porque você não sabe o que longas cadeias binárias como "&lt;code&gt;1000 9000 0204 007C 1217 0000 0204 0080 2217 00F6&lt;/code&gt;" significam. E, seja lá o que for, ele faz com permissões de superusuário (isso se ele estiver limitado a userland) ou com poder total em um processador dedicado (que é o caso dos firmwares).&lt;/p&gt;
&lt;p&gt;Blobs são uma forma de restringir a principal ação do ecossistema FOSS. Blobs &lt;strong&gt;impedem&lt;/strong&gt; a &lt;strong&gt;validação&lt;/strong&gt;, a &lt;strong&gt;colaboração&lt;/strong&gt; e a &lt;strong&gt;evolução&lt;/strong&gt;. Sabe a sua impressora que imprime melhor no Windows? Se o driver dela fosse livre poderíamos melhorar. Sabe a sua placa de vídeo que por um motivo desconhecido tem um FPS menor no Linux, ou superaquece, ou não responde adequadamente certas chamadas do OpenGL? Se o driver dela fosse livre poderíamos melhorar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E quantos blobs temos hoje?&lt;/strong&gt; No diretório firmware você encontra arquivos .HEX, .H16 e .ihex. Eu acabei de contar 141 deles aqui.&lt;/p&gt;
&lt;p&gt;Poderíamos levantar algumas teorias da conspiração sobre por que a industria de hardware força a dependência dos blobs. A desculpa padrão (&lt;em&gt;rápida, fácil e superficial&lt;/em&gt;) diz que é uma forma de garantir seu diferencial. Não... Vou me conter. A verdade é que mesmo achando essa desculpa inocente, nem eu nem ninguém, fora dos boards dessa indústria, sabe o real porquê. Independente que qual seja a verdade, ignorar, &lt;strong&gt;ou pior, negar&lt;/strong&gt; o fato dos Blobs estarem presentes nas máquinas da maioria dos usuários de Linux não é só inocente ou contraprodutivo. É agir como &lt;strong&gt;fantoche do interesse alheio.&lt;/strong&gt; É dificultar o processo de remoção do stack privativo/fechado que reduz a nossa autonomia, favorece oligopólios e &lt;del&gt;ajuda o controle estatal&lt;/del&gt;.&lt;/p&gt;</description><pubDate>Sun, 03 Dec 2017 02:11:33 -0200</pubDate><link>http://blogoosfero.cc/aurium/blog/existem-blobs-binarios-no-kernel-linux-usado-pelo-ubuntu</link><guid>http://blogoosfero.cc/aurium/blog/existem-blobs-binarios-no-kernel-linux-usado-pelo-ubuntu</guid></item><item><title>WTF Happens???</title><description>&lt;p&gt;5:13pm: i'm committing suicide tonight.. do not intervene as i have many stories to tell and do not want them to die with me #debian #runnerkristy67&lt;/p&gt;
&lt;p&gt;5:14pm: watch my blog later &lt;a href="http://ianmurdock.com" target="_blank"&gt;http://ianmurdock.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5:17pm: &lt;a title="Kerouac - October in the Railroad Earth" href="https://www.youtube.com/watch?v=-hjPZpaXNsw" target="_blank"&gt;https://t.co/I1CSCJErWf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5:20pm: I'll write more on my blog later. But the police here beat me up for knowing on my neighbor's door.. they sent me to the hospital.&lt;/p&gt;
&lt;p&gt;5:20pm: Then beat me up some more.&lt;/p&gt;
&lt;p&gt;5:21pm: My bail for "assault against a police officer" are all that: $25,000.&lt;/p&gt;
&lt;p&gt;5:22pm: I'll write more much later. They still don't have cameras on all police so I'm going to use my somewhat celebrity to hopefully stop this.&lt;/p&gt;
&lt;p&gt;5:23pm: Quote: "We're the police, we always win."&lt;/p&gt;
&lt;p&gt;5:25pm: My career is over now, so I'll be gone soon.&lt;/p&gt;
&lt;p&gt;5:27pm: Maybe my suicide at this, you now, a successful business man, not a NIGGER, will finally bring some attention to this very serious issue.&lt;/p&gt;
&lt;p&gt;5:30pm: I'm not committing suicide today. I'll write this all up first, so the police brutality ENDEMIC in this so call free country will be known.&lt;/p&gt;
&lt;p&gt;5:34pm: if anyone wants to come over and see what the police did to me i would be more than happy for that&lt;/p&gt;
&lt;p&gt;5:35pm: they beat the shit out of me twice, then charged me $25,000 to get out of jail for battery against THEM&lt;/p&gt;
&lt;p&gt;5:36pm: i had to go to the hospital&lt;/p&gt;
&lt;p&gt;5:36pm: then they pulled me out of my house and did it again&lt;/p&gt;
&lt;p&gt;5:36pm: they followed me home&lt;/p&gt;
&lt;p&gt;5:37pm: i had to have swtitches&lt;/p&gt;
&lt;p&gt;5:37pm: then followed my home from there&lt;/p&gt;
&lt;p&gt;5:38pm: i asked if they had cameras&lt;/p&gt;
&lt;p&gt;5:38pm: they said no&lt;/p&gt;
&lt;p&gt;5:45pm: shall i post pictures for all my bruises from my against the police officers?&lt;/p&gt;
&lt;p&gt;5:45pm: where they put you in a cell with absolutely no instructions whatever aside from the spell on the floor in piss?&lt;/p&gt;
&lt;p&gt;5:48pm: Writing up my experience for others to hopefully prevent others from police abuse then you won't hear from me again&lt;/p&gt;
&lt;p&gt;6:00pm: @jacksormwriter wants me dead&lt;/p&gt;
&lt;p&gt;6:06pm: i'm going to post my case on my blog.. if anyone can post it on hacker news or wherever i would apprieciate it&lt;/p&gt;
&lt;p&gt;6:07pm: i'm hoping coming from a successful white guy it will help everyone&lt;/p&gt;
&lt;p&gt;6:31pm: (1/2) The rest of my life will be devoted to fighting against police abuse.. I'm white, I made $1.4 million last year,&lt;/p&gt;
&lt;p&gt;6:33pm: (2/2) They are uneducated, bitter, and and only interested in power for its own sake. Contact me imurdock@imurdock.com if you can help. -ian&lt;/p&gt;
&lt;p&gt;6:41pm: The police are uneducated, evil, and sadistic. Do not trust them.&lt;/p&gt;
&lt;p&gt;6:42pm: The rest of my life is to fight against the police.. they are NOT friends, so don't ever ever believe otherwise.&lt;/p&gt;
&lt;p&gt;6:49pm: What does one have to get education wise to become a police officer.. asking for a friend.&lt;/p&gt;
&lt;p&gt;7:03pm: "We're the police, we can do whatever the fuck we want.."&lt;/p&gt;
&lt;p&gt;7:08pm: This was right after the female officer ripped off my underwear.. I guess that's not considered rape if you're not a woman being raped.&lt;/p&gt;
&lt;p&gt;7:12pm: I am a white male, make a lot money, pay a lot of money in taxes, and yet their abuse is equally doned out. DO NOT CROSS THEM!&lt;/p&gt;</description><pubDate>Sat, 21 May 2016 12:36:13 -0300</pubDate><link>http://blogoosfero.cc/aurium/blog/wtf-happens</link><guid>http://blogoosfero.cc/aurium/blog/wtf-happens</guid></item><item><title>Star Trek é Comunista?</title><description>&lt;p&gt;O &lt;a href="http://www.b9.com.br/podcasts/anticast/" target="_blank"&gt;AntCast&lt;/a&gt; é um podcast que tenho curtido bastante. Começou como um podcast sobre design, mas atualmente fala sobre tudo com uma visão crítica, mas ainda divertido. O último episódio foi apresentado pela primeira vez pela Sybylla por conta da saída temporária do Ivan (&lt;em&gt;apresentador e fundador do podcast&lt;/em&gt;) e traz três convidados que sabem bastante de Star Trek. Infelizmente nenhum dominava ciência política e economia a fundo, mas achei o episódio muito proveitoso.&lt;/p&gt;
&lt;p&gt;Não vou reproduzir o debate, pretendo só adicionar um complemento, então para que esse post faça mais sentido seria bom você ouvir esse episódio: &lt;a href="http://www.b9.com.br/61386/podcasts/anticast/anticast-205-star-trek-e-comunista" target="_blank"&gt;AntiCast 205 – Star Trek é Comunista?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Se você não acompanhou todas as séries (e todas, significa bastante coisa, veja abaixo)...&lt;/p&gt;
&lt;p&gt;&lt;img src="http://softwarelivre.org/articles/0150/7276/startrek-timeline.png" alt="Startrek-timeline"&gt;&lt;/p&gt;
&lt;p&gt;...ainda dá pra entender o debate, mas se você nem sabia que no futuro de Star Trek não existe dinheiro, veja esses vídeos:&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;Picard é o capitão da segunda geração, no século seguinte ao do capitão Kirk. Abaixo, num dos primeiros episódios desta série ele encontra uma nave perdida, com humanos em capsulas de criogenia e rola um debate sobre valores humanos. Neste recorte o debate é com o capitalista:&lt;/p&gt;
&lt;p&gt;&lt;iframe src="https://www.youtube.com/embed/_LQaYZiDK3o" frameborder="0" width="100%" height="315"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;No filme "&lt;a href="https://pt.wikipedia.org/wiki/Star_Trek:_First_Contact" target="_blank"&gt;Primeiro Contato&lt;/a&gt;" a enterprise volta no tempo, perseguindo uma nave Borg e encontram a terra pós "3ª Guerra". Novamente Picard explica um pouco da economia do futuro para um humano "primitivo":&lt;/p&gt;
&lt;p&gt;&lt;iframe src="https://www.youtube.com/embed/HGmWG83gyto" frameborder="0" width="100%" height="315"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Em &lt;a href="https://pt.wikipedia.org/wiki/Star_Trek:_Deep_Space_Nine" target="_blank"&gt;Deep Space Nine&lt;/a&gt; o filho do comandante da estação precisa de dinheiro para comprar um presente (&lt;em&gt;de um mercador fora de seu sistema econômico&lt;/em&gt;) para o pai, e assim começa o episódio:&lt;/p&gt;
&lt;p&gt;&lt;iframe src="https://www.youtube.com/embed/Wx5I7uEEEYo" frameborder="0" width="100%" height="315"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Durante o debate é lembrado que Star trek é uma ficção de vanguarda e toca em outras questões como racismo (&lt;em&gt;na década de 60&lt;/em&gt;):&lt;/p&gt;
&lt;p&gt;&lt;iframe src="https://www.youtube.com/embed/vi7QQ5pO7_A" frameborder="0" width="100%" height="315"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;... liberdade de identidade sexual (&lt;em&gt;entre as décadas de 80-90&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;&lt;iframe src="https://www.youtube.com/embed/mMqGlSjAbwA" frameborder="0" width="100%" height="315"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Além de tantas outras questões sociais e debates filosóficos.&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;Finalmente, a minha resenha:&lt;/p&gt;
&lt;p&gt;A abundancia em Star Trek é marcada pelo replicador e este parece explicar bastante o porque do dinheiro não ser necessário, afinal, você pode produzir, comidas, roupas e utensílios a partir de um eletrodoméstico na parede de casa... mas é bom lembrar que ele não existia na série original. Mesmo no filme "The Undiscovered Country" tem uma &lt;a href="http://youtu.be/3igGvBJt6ac?t=48m35s" target="_blank"&gt;cena na cozinha&lt;/a&gt;, onde a vulcana (&lt;em&gt;interpretada por &lt;a href="http://www.imdb.com/name/nm0000326" target="_blank"&gt;Kim Cattrall&lt;/a&gt;&lt;/em&gt;) atira em uma panela cheia de massa, portanto a explicação da garantia de acesso (&lt;em&gt;da abundância&lt;/em&gt;) deve estar em outro lugar. Talvez esteja na tecnologia atual, pois já produzimos mais comida do que a humanidade precisa, já podemos produzir bens e moradia para todos, mas não garantimos a distribuição, e quando o mercado distribuí com eficiência, cai na obsolescência programada, como a Sybylla lembra bem.&lt;/p&gt;
&lt;p&gt;Sobre o modelo econômico da federação (&lt;em&gt;ou dos humanos para ser mais preciso&lt;/em&gt;), apesar de claramente pós-capitalista e explicitamente não monetário, como é posto diversas vezes (&lt;em&gt;mas de uma forma divertidíssima no filme "&lt;a href="https://pt.wikipedia.org/wiki/Star_Trek_IV:_The_Voyage_Home" target="_blank"&gt;The Voyage Home&lt;/a&gt;", o tal filme da baleia&lt;/em&gt;), eles ainda tem iniciativa privada (&lt;em&gt;para acalmar os liberais&lt;/em&gt;) e aluma forma de controle de acesso aos recursos que eu não consigo diferenciar bem do dinheiro. Permita-me explicar. Isso fica muito claro em Deep Space Nine...&lt;/p&gt;
&lt;p&gt;Sobre a propriedade e iniciativa privada, temos o pai de Sisko, que é dono de um restaurante (&lt;em&gt;bem lembrado no episódio, o valor do artesanal, daquilo que não é replicável, mesmo que parte seja replicado&lt;/em&gt;), então ou a terra é tipo Cuba e são permitidas pequenas iniciativas como os "paladres", ou algo de maiores proporções, com menos controle, mas que as séries não deixaram muito claro. Na série "Enterprise", de 2001, conta-se como funcionaram as primeiras naves mercantes e estas aparentavam ter bastante autonomia. Apesar dos gestores (&lt;em&gt;a família de Travis&lt;/em&gt;) a tratarem como propriedade, não fica claro se a nave é deles (&lt;em&gt;o que eu não apostaria, pois só gente muito rica poderia comprar aquela nave, enquanto a vida nela era terrível... então, porque fazer essa troca?&lt;/em&gt;), OU a nave é do estado (&lt;em&gt;bens de produção, hã, hã? Comuna?&lt;/em&gt;) e os gestores tem bastante autonomia na gestão, como a China faz hoje com suas fábricas e mineradoras pelo mundo, principalmente na África.&lt;/p&gt;
&lt;p&gt;Em um certo episódio de DS9, Sisko (&lt;em&gt;ou foi o Pai dele?&lt;/em&gt;) conta que durante seu período na academia, Sisko não conseguia se desapegar da família e se teleportava todos os dias, se materializando na sala de casa para almoçar com os pais. Nisso ele &lt;strong&gt;GASTAVA&lt;/strong&gt; todos os &lt;strong&gt;CRÉDITOS&lt;/strong&gt; do mês. O sistema econômico certamente mudou muito, não é capitalista, mas o dinheiro não foi totalmente perdido. Algumas de suas funções ainda aparecem na estória.&lt;/p&gt;
&lt;p&gt;Bem, minha avaliação: Apesar de me posicionar no quadrante da esquerda libertária, do "&lt;a href="https://www.politicalcompass.org/test/pt-br"&gt;political compass&lt;/a&gt;", não demonizo o dinheiro, só detesto o sistema financeiro. O dinheiro em sí é uma maravilhosa ferramenta de troca. Sem ele teríamos que trocar laptop por batatas, mas o produtor de laptop nem sempre quer batatas... vocês entenderam. Alguns acreditam no governo provedor e este poderia fornecer laptops e batatas; mas aí seria bem complicado garantir a todos a liberdade de escolher o quanto te interessa de cada produto. Os dois exemplos colocam o dinheiro como uma ferramenta de autonomia. E está aí um dos porquês que eu adoro o pessoal do movimento Zeitgeist, mas tenho que dizer: calma, não é bem por aí, pois eles propõem acabar com o sistema financeiro acabando com o dinheiro, dentre outras coisas.&lt;/p&gt;
&lt;p&gt;No episódio foi colocado que Gene Roddenberry "&lt;em&gt;se preocupou mais com raça do que com gênero&lt;/em&gt;" na luta pela redução da desigualdade, mas é bom lembrar que o episódio piloto da da série original tinha uma mulher como imediato, depois todos os peonagens e atores foram trocados e só sobrou o Leonard Nimoy como Spock. Com a redução do papel da mulher, parece que o patriarcado bateu alí na porta. E como eu ví num meme certa vês: &lt;em&gt;(com a foto de Uhura) Século 23 e quem atende o telefone espacial ainda é a mulher negra.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Como crítica ao episódio eu só me oponho a colocação de que o modelo político humano de Star Trek teria elementos capitalistas, comunistas e anarquistas, e todos poderíamos perceber o que quiséssemos daquilo e inclusive poderíamos defini-lo como quiséssemos. Acho que não é bem assim. Primeiro acho que não tem nada de anarquista, apesar de que eu adoraria ver isso. Só o fato de termos governo e níveis hierárquicos já anula essa proposta. O que não impede que existam naves, colônias ou até cidades terrestres geridas de forma anárquica, com a "benção" do governo central. Segundo: acho que podemos ter uma definição mais clara dobre o modelo econômico dos humanos, mas eu não me arrisco a faze-lo. Acho que seria uma ótima tese de doutorado interdisciplinar, mas também creio que ainda teremos lacunas não respondidas que no fim ainda deixariam alguma nebulosidade na definição. Talvez possamos tapar esse buraco a partir de 2151. :-)&lt;/p&gt;</description><pubDate>Sat, 21 May 2016 12:36:13 -0300</pubDate><link>http://blogoosfero.cc/aurium/blog/star-trek-e-comunista</link><guid>http://blogoosfero.cc/aurium/blog/star-trek-e-comunista</guid></item><item><title>Software Livre &amp;amp; Código Aberto — onde está a diferença?</title><description>&lt;p&gt;&lt;big&gt;&lt;em&gt;"Os dois termos descrevem quase a mesma categoria de software, porém eles apoiam visões baseadas em valores fundamentalmente diferentes."&lt;/em&gt;&lt;/big&gt;&lt;br&gt;&lt;small&gt;— Richard Stallman em &lt;a target="_top" href="https://www.gnu.org/philosophy/open-source-misses-the-point.pt-br.html"&gt;Why Open Source misses the point of Free Software&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Existe um debate jurídico nebuloso sobre um poder abraçar determinado licenciamento e o outro não, mas que, na prática, não existe e nunca houve intenção de existir. Todo software que se encaixa na definição de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt;, também se encaixa na definição e &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt;. A diferença entre SL e OS é exclusivamente de discurso.&lt;/p&gt;
&lt;h3&gt;
&lt;a name="historia"&gt;&lt;/a&gt;A Tecnicidade da História&lt;/h3&gt;
&lt;div&gt;
&lt;img alt="GNU" src="http://softwarelivre.org/articles/0141/5304/gnu.png"&gt;&lt;br&gt; GNU — O início do &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt;, como conhecemos hoje.&lt;/div&gt;
&lt;p&gt;Stallman &lt;em&gt;(antes de existir &lt;a href="http://fsf.org"&gt;&lt;abbr title="Free Software Foundation"&gt;FSF&lt;/abbr&gt;&lt;/a&gt;)&lt;/em&gt; definiu as &lt;a target="_top" href="http://www.gnu.org/philosophy/free-sw.pt-br.html#content"&gt;4 liberdades&lt;/a&gt; de acordo com a cultura hacker em que ele estava envolvido &lt;em&gt;(mas não criado)&lt;/em&gt;. As 4 liberdades são bastante genéricas e poderiam ser redefinidas em 3 ou 5, Stallman concorda com isso, foram 4 porque foi, o que importa é que elas expressam tudo de essencial.&lt;/p&gt;
&lt;div&gt;
&lt;img alt="Debian" src="http://softwarelivre.org/articles/0141/5305/debian.png"&gt;&lt;br&gt; Projeto Debian&lt;/div&gt;
&lt;p&gt;Anos depois, no início do projeto &lt;a href="http://debian.org"&gt;Debian&lt;/a&gt; os &lt;abbr title="Debian Developers"&gt;DDs&lt;/abbr&gt; perceberam que precisavam de especificações mais claras para detalhes específicos, sobre que licenças seriam ou não aceitas como livres pelo projeto, reduzindo os debates sobre a adequação às 4 liberdades a um simples &lt;a href="https://www.debian.org/social_contract#guidelines"&gt;check list de 10 itens&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;img alt="OSI" src="http://softwarelivre.org/articles/0141/5306/osi.png"&gt;&lt;br&gt; Open Source Initiative&lt;/div&gt;
&lt;p&gt;Quando a &lt;a href="http://opensource.org"&gt;&lt;abbr title="Open Source Initiative"&gt;OSI&lt;/abbr&gt;&lt;/a&gt; foi fundada eles buscaram no Debian o &lt;em&gt;remake&lt;/em&gt; para definir o que seria a definição de &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt;, mudando poucos itens para ficar mais genérico, necessáriamante porque no Debian existem coisas como &lt;em&gt;"License Must Not Be Specific to &lt;span&gt;Debian&lt;/span&gt;"&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Sendo assim a definição de &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; é só uma outra forma de declarar as 4 liberdades, por isso ninguém da &lt;abbr title="Open Source Initiative"&gt;OSI&lt;/abbr&gt; nega a às 4 liberdades (a definição de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt;), muito pelo contrário, eles a respeitam, mas não promovem abertamante por conta do discurso... próximo assunto.&lt;/p&gt;
&lt;h3&gt;
&lt;a name="discurso"&gt;&lt;/a&gt;Diferença de Discurso&lt;/h3&gt;
&lt;p&gt;A definição de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; fala sobre liberdade do usuário e ética. Este discurso da ética, promovido pela FSF, não foi bem aceito pelas empresas no passado &lt;em&gt;(hoje ética é cool, mas ainda só na lista de temas setor de marketing)&lt;/em&gt;, além disso o "Free" de "Free Software" era frequentemente confundido com gratuidade &lt;em&gt;(incrível como um povo pode ler liberdade e vincular preferencialmente a custo monetário)&lt;/em&gt;, por isso entendiam como invariavelmente não comercial.&lt;/p&gt;
&lt;p&gt;Um grupo de pessoas passou a acreditar que não deveriam falar sobre ética, mas deveriam promover o &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; com base na sua tendência a maturação acelerada, melhor qualidade garantida pelos olhos externos e grande aderência aos padrões. Para isso seria melhor usar outro nome e consideraram a característica da abertura do código como mais importante que a liberdade. A definição não deveria chamar tanta atenção para noções de ética e encontraram na &lt;a href="https://www.debian.org/social_contract#guidelines"&gt;&lt;abbr title="The Debian Free Software Guidelines"&gt;DFSG&lt;/abbr&gt;&lt;/a&gt; algo bastante prático e direto. Com isso foi fundada a OSI, na intenção de promover o &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; entre corporações, mas, como é possível perceber, também fez dividir a comunidade com discursos de ódio entre argumentos de "promoção da liberdade" x "melhor software".&lt;/p&gt;
&lt;p&gt;&lt;img height="592" alt="discurso do software livre x discurso do código aberto" width="800" src="http://softwarelivre.org/image_uploads/0010/5256/FS-x-OS.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Mesmo depois de anos de OSI e uso quase exclusivo do termo &lt;em&gt;"Open"&lt;/em&gt; entre os anglófilos, ainda é frequente se falar em &lt;em&gt;"commercial software"&lt;/em&gt; em contraposição à &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt;, em vez de usar o conceito &lt;em&gt;"proprietary software"&lt;/em&gt;, como se &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt; não fosse comercializável. (&lt;em&gt;&lt;a target="_top" href="http://redhat.com"&gt;RedHat&lt;/a&gt;, &lt;a target="_top" href="http://ibm.com"&gt;IBM&lt;/a&gt;, &lt;a target="_top" href="http://colivre.coop.br"&gt;Colivre&lt;/a&gt; mandam lembrança&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Algo que está no discurso, mas não na definição de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; e &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt;, é a sua relação com o "Software Proprietário" (&lt;em&gt;ou "Software Privativo" que me parece definir melhor&lt;/em&gt;). Enquanto o movimento de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; diz que é imoral produzir promover software privativo e é um risco inaceitável para o usuário, o movimento de &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; reconhece o risco, mas o desmerece, dizendo de forma magnânima que existe espaço para ambos.&lt;/p&gt;
&lt;p&gt;Desta relação com o software privativo vem o argumento motivacional para se produzir &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt;. Para o movimento de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; devemos produzir &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt;, porque é nosso dever, porque é a única forma ética de se produzir software. Para o movimento de &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; produzimos &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt; para termos o melhor software e reduzirmos custos diluindo o esforço no processo colaborativo.&lt;/p&gt;
&lt;p&gt;O movimento de &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; sempre se reconhece como "o prático" e "não ideológico" (&lt;em&gt;questionarei em breve&lt;/em&gt;). O movimento de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; sempre coloca que não basta ter liberdade de escolha, deve-se escolher a liberdade.&lt;/p&gt;
&lt;p&gt;Então fica claro: os dois movimentos falam sobre os &lt;strong&gt;mesmos softwares&lt;/strong&gt;, sobre os mesmos modelos de licenciamento, mas vistos por perspectivas diferentes e promovidos com &lt;strong&gt;discursos bem diferentes&lt;/strong&gt;. Na tentativa de falar sobre os softwares ou sobre esse ecossistema sem tomar partido, cunhou-se o termo "&lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt;" (&lt;em&gt;ou "&lt;abbr title="Free, Libre and Open-Source Software"&gt;FLOSS&lt;/abbr&gt;", com a mesma intenção&lt;/em&gt;). Pela existência do termo não se pode entender que existe um movimento unido. Por mais que uma pessoas possa agir as vezes pelo &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; e as vezes pelo &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt;, seus valores são incompatíveis e as ações estarão quase sempre vinculadas exclusivamente a um dos movimentos. Para bananas e maçãs existe o termo "frutas", mas fora este fato elas não tem mais nada em comum, da produção à textura.&lt;/p&gt;
&lt;h3&gt;
&lt;a name="atitude"&gt;&lt;/a&gt;Atitude&lt;/h3&gt;
&lt;p&gt;Assim como o kernel Linux é um projeto notório dentro do &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt;, também são marcantes os debates entre seus desenvolvedores e as opiniões do seu criador: &lt;a target="_top" href="http://pt.wikipedia.org/wiki/Linus_Torvalds"&gt;Linus Torvalds&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Vários foram os motivos que levaram à evolução da GPL para sua terceira versão, e uma das principais foi o caso da &lt;a target="_top" href="http://en.wikipedia.org/wiki/Tivoization"&gt;Tivoização&lt;/a&gt;. Stallman, apoiado por muitos, independente de lados, afirmou que esse processo apesar de não violar a GPLv2, licença usada pelo Linux, removia a segunda liberdade. Torvalds diz que a &lt;span&gt;TiVo&lt;/span&gt; tem o direito de restringir o uso de software em produtos produzidos por ela. Infelizmente sim, mas porque o &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt; não deveria colocar alguma dificuldade às tentativas de se restringir o usuário. Sim, o debate é compléxo... Para o &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; é óbvio que uma medida deve ser tomada e a GPLv3 é uma resposta. Para o &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; isso é apenas uma questão externa ao desenvolvimento e deve ser posta de lado.&lt;/p&gt;
&lt;p&gt;&lt;a target="_top" href="http://en.wikipedia.org/wiki/Digital_rights_management"&gt;DRM&lt;/a&gt; envolve o assunto anterior, e é de se esperar que Linus tenha dito: &lt;a target="_top" href="http://www.linuxtoday.com/developer/2003042401126OSKNLL"&gt;"DRM is Perfectly OK with Linux"&lt;/a&gt;. &lt;iframe height="210" frameborder="0" width="370" src="http://www.youtube.com/embed/kTKn1aSOyOs"&gt;&lt;/iframe&gt; Pessoalmente &lt;a target="_top" href="http://br-linux.org/linux/torvalds-critica-drm"&gt;Torvalds é contra a DRM&lt;/a&gt;, como não poderia deixar de ser, mas por razões de cunho prático, e não ideológico. O posicionamento amoral não é novo e no debate sobre a posição de Linus foi citada uma fala satirizada de &lt;a target="_top" href="http://en.wikipedia.org/wiki/Wernher_von_Braun"&gt;Wernher von Braun&lt;/a&gt;: &lt;em&gt;"Once the rockets are up, who cares where they come down? That's not my department."&lt;/em&gt; (&lt;small&gt;&lt;em&gt;"Uma vez que os misseis foram lançados, que se importa onde vão cair? Isso não é do meu departamento."&lt;/em&gt;&lt;/small&gt;) Wernher trabalhava como cientista de foguetes para os nazistas na segunda grande guerra e levado aos EUA pela operação de assimilação tecnológica &lt;em&gt;"paperclip"&lt;/em&gt;. Divagando: Einstein, por outro lado, culpou-se bastante por ter um papel decisivo no projeto que levou às bombas de Hiroshima e Nagasaki.&lt;/p&gt;
&lt;p&gt;É bom deixar claro que os desenvolvedores do Kernel não pensam de forma uniforme (&lt;em&gt;por isso meso os flame-wars&lt;/em&gt;). &lt;a target="_top" href="http://en.wikipedia.org/wiki/Alan_Cox"&gt;Alan Cox&lt;/a&gt;, o segundo homem do Linux, frequentemente antagoniza com a opinião de Linus, mas com menos &lt;em&gt;acidez&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;O discurso de Linus nos remete a aquela característica marcante do movimento de &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt;: "o prático" e "não ideológico". Mas o que significa isso? Praticidade para que fim, com que objetivo? É possível ser "não ideológico"?&lt;/p&gt;
&lt;p&gt;Praticidade, quem é você? Declarar-se como prático não indica nenhuma direção, sem conhecer seus objetivos. Mas claro... da forma como costumamos tratar o assunto presumimos o rumo desta praticidade, assim como presumimos muita coisa. Não quer dizer que seja sempre válido o sentido presumido e, mais importante: &lt;strong&gt;é válido este sentido presumido&lt;big&gt;?&lt;/big&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Praticidade hoje &lt;br&gt; é individualista &lt;br&gt; e imediatista.&lt;/p&gt;
&lt;p&gt;É &lt;em&gt;"Individualista"&lt;/em&gt; porque só se pensa em &lt;em&gt;"como eu ganho?"&lt;/em&gt; ou &lt;em&gt;"como essa empresa ganha?"&lt;/em&gt; quando se pretende um pensamento prático. Mas se o seu objetivo for melhorar sua cidade ou o mundo? Claro que se pode ter um pensamento prático colocando a necessidade da sociedade na frente. Precisamos lembrar disso para que argumentos que envolvam a sociedade não sejam automaticamente contrapostos com &lt;em&gt;"devemos ser práticos"&lt;/em&gt;. É também &lt;em&gt;"Imediatista"&lt;/em&gt; porque só é prático se o resultado puder ser mensurado a curto tempo. É interessante perceber que quem se opõe a argumentos no futuro (&lt;em&gt;distante, mas nem tanto&lt;/em&gt;), se esquece dos investimentos de longo prazo. A não ser que esse "práticos" estejam pensando que os grandes investidores que usam essa prática não tem senso prático.&lt;/p&gt;
&lt;p&gt;"Técnica sem ideologia" &lt;br&gt; e "Ciência neutra" &lt;br&gt; são irmãs xifópagas.&lt;/p&gt;
&lt;p&gt;Ser "não ideológico" significaria ter o poder de tomar decisões sem influência das questões sociais e humanas externas ao problema. Essa crença da técnica livre de ideologia é muito próxima da crença na ciência neutra (&lt;em&gt;são irmãs xifópagas na verdade&lt;/em&gt;). Além do que pode ser dito sobre a não neutralidade do processo científico, devemos lembrar também que essa pesquisa ou aplicação técnica iniciou-se com alguma motivação que envolvia nossos valores.&lt;/p&gt;
&lt;p&gt;Você pode pensar &lt;em&gt;"mas existem casos onde agimos apenas porque a lógica nos obriga"&lt;/em&gt; sim... mas a lógica é apenas uma função matemática que analisa os fatos de acordo com os pessoas dados pelos nossos valores. No caso de um tsunami, construir abrigos, tratar os feridos e reconstruir a cidade são ações óbvias e lógicas. Lógicas mesmo? Nazistas teriam salvado vítimas de tsunami na indonésia? Para eles era melhor que outras etnias deixassem de existir, e o tsunami seria a providência divina. Os utilitaristas poderia apontar inúmeras vantagens econômicas em auxiliar as vítimas do tsunami, mas se for por aí não seria mais vantajoso fazer um ataque na sequência e anexar novas terras a sua nação? Achou é brutal? Isso são seus (&lt;em&gt;nossos&lt;/em&gt;) valores em ação. 😉&lt;/p&gt;
&lt;p&gt;Mesmo que coloquemos um computador para tomar decisões e executar tarefas, "o que" e "como" acontecerão de acordo com os valores do programador. Quem se exime de avaliar criticamente suas ações está entregando-as a algum outro.&lt;/p&gt;
&lt;p&gt;A quem interessa que acreditemos em &lt;br&gt; decisões e ações "não ideológicas"?&lt;/p&gt;
&lt;p&gt;Por fim, não confunda o fato da(s) ideologia(s) dominante(s) (&lt;em title="Hã? Pois é..."&gt;que prega(m) a "não ideologia"&lt;/em&gt;) não ser(em) nomeada(s), com a possibilidade dela(s) não ser(m) classificável(is) como ideologia(s), tanto quanto as outras nomeadas. Achei muito adequado quando ouvi o professor &lt;a target="_top" href="http://www.cic.unb.br/%7Erezende"&gt;Pedro Resende&lt;/a&gt; chamar a ideologia dominante de "&lt;a target="_top" href="http://pt.wikipedia.org/wiki/Fundamentalismo_de_livre_mercado"&gt;Fundamentalismo de Mercado&lt;/a&gt;".&lt;/p&gt;
&lt;h3&gt;
&lt;a name="confusao"&gt;&lt;/a&gt; Ignorância, vício e confusão&lt;/h3&gt;
&lt;p&gt;Não podemos viver sem ação e ação depende de alguma noção, porém não podemos saber de tudo e para completar alguns buracos precisamos da suposição. O problema está em construir prédios de suposição sobre suposição e argumentar com base nestas.&lt;/p&gt;
&lt;p&gt;Somos todos ignorantes. Não apenas em um ou outro assunto, mas sobre a maior parte do conhecimento humano. Então quem erra não deve ser agredido, mas o erro não merece tolerância.&lt;/p&gt;
&lt;p&gt;E provavelmente por ignorância Matt Asay escreveu em 2014 "&lt;a target="_top" href="http://www.techrepublic.com/article/why-we-need-an-open-source-movement-for-the-web"&gt;Why we need an open-source movement for the web&lt;/a&gt;", onde ele clama por um movimento análogo ao &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; para a web, sendo que esse é simplesmente um dos braços mas ativos do &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt; como um todo (&lt;em&gt;eu apontaria desde o nascimento do Mozilla, mas é uma suposição&lt;/em&gt; 😉). Mas o meu ponto não é esse, o ponto é que quando ele expõe as rasões ele aponta questões que interessam quase que exclusivamente o movimento &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt;. É gritante que esse artigo sai com 4 anos de atraso basicamente falando do problema do SaaS, discutido por Stallman em &lt;em&gt;"&lt;a target="_top" href="https://www.gnu.org/philosophy/who-does-that-server-really-serve.html"&gt;Who does that server really serve?&lt;/a&gt;"&lt;/em&gt; e por outros sob o mote &lt;em&gt;"&lt;a target="_top" href="https://duckduckgo.com/?q=%22don%27t+SaaS+me%22"&gt;Don't SaaS me&lt;/a&gt;"&lt;/em&gt;. Matt chegou a usar o logo da OSI em seu artigo. Seria por ignorância sobre o &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; ou vício no &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt;? A quantos ele levará a confusão?&lt;/p&gt;
&lt;p&gt;No Brasil a confusão é invertida. Falamos (&lt;em&gt;quase&lt;/em&gt;) sempre &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; mas é frequente a argumentação em prol do software privativo como algo complementar, além da fobia a ideologias (&lt;em&gt;nomeadas&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;O discurso &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; deveria ter sido apenas uma forma de levar o &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; para espaços onde o argumento da ética não é ouvido: &lt;a target="_top" href="http://thecorporation.com"&gt;corporações&lt;/a&gt;, porque essas entidades são como &lt;a title="não têm ética, empatia, remorso ou sentido de culpa." href="http://revistaepoca.globo.com/Revista/Epoca/0,,EDR79349-6048,00.html"&gt;psicopatas&lt;/a&gt;. Mas como somos estúpidos... internalizamos a idéia de que ética é coisa de conversador ou filosofo, que temos que dar atenção apenas à prática, que o que importa é o resultado (&lt;em&gt;individualista e imediatista&lt;/em&gt;). Temos medo de repetir que software proprietário é nocivo à sociedade de imediato e ao indivíduo em longo prazo (&lt;em&gt;quando não de imediato&lt;/em&gt;). Porque fomos bem treinados pelos conversadores formados pela OSI e financiados pelas corporações. Compramos idéias que não nos beneficiam porque não queremos conflitar com as vozes que parecem ser maioria (&lt;em&gt;ou mais fortes&lt;/em&gt;), não queremos ser satirizados... queremos torcer para o time campeão.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Diga Software Livre, porque o que vale é a liberdade." src="http://softwarelivre.org/articles/0141/7792/freedom-matters.jpg"&gt;&lt;/p&gt;</description><pubDate>Wed, 06 Jul 2016 13:18:59 -0300</pubDate><link>http://blogoosfero.cc/aurium/blog/software-livre-codigo-aberto-onde-esta-a-diferenca</link><guid>http://blogoosfero.cc/aurium/blog/software-livre-codigo-aberto-onde-esta-a-diferenca</guid></item><item><title>Software Livre &amp; Código Aberto — onde está a diferença?</title><description>&lt;p&gt;&lt;big&gt;&lt;em&gt;"Os dois termos descrevem quase a mesma categoria de software, porém eles apoiam visões baseadas em valores fundamentalmente diferentes."&lt;/em&gt;&lt;/big&gt;&lt;br&gt;&lt;small&gt;— Richard Stallman em &lt;a target="_top" href="https://www.gnu.org/philosophy/open-source-misses-the-point.pt-br.html"&gt;Why Open Source misses the point of Free Software&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Existe um debate jurídico nebuloso sobre um poder abraçar determinado licenciamento e o outro não, mas que, na prática, não existe e nunca houve intenção de existir. Todo software que se encaixa na definição de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt;, também se encaixa na definição e &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt;. A diferença entre SL e OS é exclusivamente de discurso.&lt;/p&gt;
&lt;h3&gt;
&lt;a name="historia"&gt;&lt;/a&gt;A Tecnicidade da História&lt;/h3&gt;
&lt;div&gt;
&lt;img alt="GNU" src="http://softwarelivre.org/articles/0141/5304/gnu.png"&gt;&lt;br&gt; GNU — O início do &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt;, como conhecemos hoje.&lt;/div&gt;
&lt;p&gt;Stallman &lt;em&gt;(antes de existir &lt;a href="http://fsf.org"&gt;&lt;abbr title="Free Software Foundation"&gt;FSF&lt;/abbr&gt;&lt;/a&gt;)&lt;/em&gt; definiu as &lt;a target="_top" href="http://www.gnu.org/philosophy/free-sw.pt-br.html#content"&gt;4 liberdades&lt;/a&gt; de acordo com a cultura hacker em que ele estava envolvido &lt;em&gt;(mas não criado)&lt;/em&gt;. As 4 liberdades são bastante genéricas e poderiam ser redefinidas em 3 ou 5, Stallman concorda com isso, foram 4 porque foi, o que importa é que elas expressam tudo de essencial.&lt;/p&gt;
&lt;div&gt;
&lt;img alt="Debian" src="http://softwarelivre.org/articles/0141/5305/debian.png"&gt;&lt;br&gt; Projeto Debian&lt;/div&gt;
&lt;p&gt;Anos depois, no início do projeto &lt;a href="http://debian.org"&gt;Debian&lt;/a&gt; os &lt;abbr title="Debian Developers"&gt;DDs&lt;/abbr&gt; perceberam que precisavam de especificações mais claras para detalhes específicos, sobre que licenças seriam ou não aceitas como livres pelo projeto, reduzindo os debates sobre a adequação às 4 liberdades a um simples &lt;a href="https://www.debian.org/social_contract#guidelines"&gt;check list de 10 itens&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;img alt="OSI" src="http://softwarelivre.org/articles/0141/5306/osi.png"&gt;&lt;br&gt; Open Source Initiative&lt;/div&gt;
&lt;p&gt;Quando a &lt;a href="http://opensource.org"&gt;&lt;abbr title="Open Source Initiative"&gt;OSI&lt;/abbr&gt;&lt;/a&gt; foi fundada eles buscaram no Debian o &lt;em&gt;remake&lt;/em&gt; para definir o que seria a definição de &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt;, mudando poucos itens para ficar mais genérico, necessáriamante porque no Debian existem coisas como &lt;em&gt;"License Must Not Be Specific to &lt;span&gt;Debian&lt;/span&gt;"&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Sendo assim a definição de &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; é só uma outra forma de declarar as 4 liberdades, por isso ninguém da &lt;abbr title="Open Source Initiative"&gt;OSI&lt;/abbr&gt; nega a às 4 liberdades (a definição de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt;), muito pelo contrário, eles a respeitam, mas não promovem abertamante por conta do discurso... próximo assunto.&lt;/p&gt;
&lt;h3&gt;
&lt;a name="discurso"&gt;&lt;/a&gt;Diferença de Discurso&lt;/h3&gt;
&lt;p&gt;A definição de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; fala sobre liberdade do usuário e ética. Este discurso da ética, promovido pela FSF, não foi bem aceito pelas empresas no passado &lt;em&gt;(hoje ética é cool, mas ainda só na lista de temas setor de marketing)&lt;/em&gt;, além disso o "Free" de "Free Software" era frequentemente confundido com gratuidade &lt;em&gt;(incrível como um povo pode ler liberdade e vincular preferencialmente a custo monetário)&lt;/em&gt;, por isso entendiam como invariavelmente não comercial.&lt;/p&gt;
&lt;p&gt;Um grupo de pessoas passou a acreditar que não deveriam falar sobre ética, mas deveriam promover o &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; com base na sua tendência a maturação acelerada, melhor qualidade garantida pelos olhos externos e grande aderência aos padrões. Para isso seria melhor usar outro nome e consideraram a característica da abertura do código como mais importante que a liberdade. A definição não deveria chamar tanta atenção para noções de ética e encontraram na &lt;a href="https://www.debian.org/social_contract#guidelines"&gt;&lt;abbr title="The Debian Free Software Guidelines"&gt;DFSG&lt;/abbr&gt;&lt;/a&gt; algo bastante prático e direto. Com isso foi fundada a OSI, na intenção de promover o &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; entre corporações, mas, como é possível perceber, também fez dividir a comunidade com discursos de ódio entre argumentos de "promoção da liberdade" x "melhor software".&lt;/p&gt;
&lt;p&gt;Mesmo depois de anos de OSI e uso quase exclusivo do termo &lt;em&gt;"Open"&lt;/em&gt; entre os anglófilos, ainda é frequente se falar em &lt;em&gt;"commercial software"&lt;/em&gt; em contraposição à &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt;, em vês de usar o conceito &lt;em&gt;"proprietary software"&lt;/em&gt;, como se &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt; não fosse comercializável. (&lt;em&gt;&lt;a target="_top" href="http://redhat.com"&gt;RedHat&lt;/a&gt;, &lt;a target="_top" href="http://ibm.com"&gt;IBM&lt;/a&gt;, &lt;a target="_top" href="http://colivre.coop.br"&gt;Colivre&lt;/a&gt; mandam lembrança&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Algo que está no discurso, mas não na definição de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; e &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt;, é a sua relação com o "Software Proprietário" (&lt;em&gt;ou "Software Privativo" que me parece definir melhor&lt;/em&gt;). Enquanto o movimento de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; diz que é imoral produzir promover software privativo e é um risco inaceitável para o usuário, o movimento de &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; reconhece o risco, mas o desmerece, dizendo de forma magnânima que existe espaço para ambos.&lt;/p&gt;
&lt;p&gt;Desta relação com o software privativo vem o argumento motivacional para se produzir &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt;. Para o movimento de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; devemos produzir &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt;, porque é nosso dever, porque é a única forma ética de se produzir software. Para o movimento de &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; produzimos &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt; para termos o melhor software e reduzirmos custos diluindo o esforço no processo colaborativo.&lt;/p&gt;
&lt;p&gt;O movimento de &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; sempre se reconhece como "o prático" e "não ideológico" (&lt;em&gt;questionarei em breve&lt;/em&gt;). O movimento de &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; sempre coloca que não basta ter liberdade de escolha, deve-se escolher a liberdade.&lt;/p&gt;
&lt;p&gt;Então fica claro: os dois movimentos falam sobre os &lt;strong&gt;mesmos softwares&lt;/strong&gt;, sobre os mesmos modelos de licenciamento, mas vistos por perspectivas diferentes e promovidos com &lt;strong&gt;discursos bem diferentes&lt;/strong&gt;. Na tentativa de falar sobre os softwares ou sobre esse ecossistema sem tomar partido, cunhou-se o termo "&lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt;" (&lt;em&gt;ou "&lt;abbr title="Free, Libre and Open-Source Software"&gt;FLOSS&lt;/abbr&gt;", com a mesma intenção&lt;/em&gt;). Pela existência do termo não se pode entender que existe um movimento unido. Por mais que uma pessoas possa agir as vezes pelo &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; e as vezes pelo &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt;, seus valores são incompatíveis e as ações estarão quase sempre vinculadas exclusivamente a um dos movimentos. Para bananas e maçãs existe o termo "frutas", mas fora este fato elas não tem mais nada em comum, da produção à textura.&lt;/p&gt;
&lt;h3&gt;
&lt;a name="atitude"&gt;&lt;/a&gt;Atitude&lt;/h3&gt;
&lt;p&gt;Assim como o kernel Linux é um projeto notório dentro do &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt;, também são marcantes os debates entre seus desenvolvedores e as opiniões do seu criador: &lt;a target="_top" href="http://pt.wikipedia.org/wiki/Linus_Torvalds"&gt;Linus Torvalds&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Vários foram os motivos que levaram à evolução da GPL para sua terceira versão, e uma das principais foi o caso da &lt;a target="_top" href="http://en.wikipedia.org/wiki/Tivoization"&gt;Tivoização&lt;/a&gt;. Stallman, apoiado por muitos, independente de lados, afirmou que esse processo apesar de não violar a GPLv2, licença usada pelo Linux, removia a segunda liberdade. Torvalds diz que a &lt;span&gt;TiVo&lt;/span&gt; tem o direito de restringir o uso de software em produtos produzidos por ela. Infelizmente sim, mas porque o &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt; não deveria colocar alguma dificuldade às tentativas de se restringir o usuário. Sim, o debate é compléxo... Para o &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; é óbvio que uma medida deve ser tomada e a GPLv3 é uma resposta. Para o &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; isso é apenas uma questão externa ao desenvolvimento e deve ser posta de lado.&lt;/p&gt;
&lt;p&gt;&lt;a target="_top" href="http://en.wikipedia.org/wiki/Digital_rights_management"&gt;DRM&lt;/a&gt; envolve o assunto anterior, e é de se esperar que Linus tenha dito: &lt;a target="_top" href="http://www.linuxtoday.com/developer/2003042401126OSKNLL"&gt;"DRM is Perfectly OK with Linux"&lt;/a&gt;. &lt;iframe height="210" frameborder="0" src="http://www.youtube.com/embed/kTKn1aSOyOs" width="370"&gt;&lt;/iframe&gt; Pessoalmente &lt;a target="_top" href="http://br-linux.org/linux/torvalds-critica-drm"&gt;Torvalds é contra a DRM&lt;/a&gt;, como não poderia deixar de ser, mas por razões de cunho prático, e não ideológico. O posicionamento amoral não é novo e no debate sobre a posição de Linus foi citada uma fala satirizada de &lt;a target="_top" href="http://en.wikipedia.org/wiki/Wernher_von_Braun"&gt;Wernher von Braun&lt;/a&gt;: &lt;em&gt;"Once the rockets are up, who cares where they come down? That's not my department."&lt;/em&gt; (&lt;small&gt;&lt;em&gt;"Uma vês que os misseis foram lançados, que se importa onde vão cair? Isso não é do meu departamento."&lt;/em&gt;&lt;/small&gt;) Wernher trabalhava como cientista de foguetes para os nazistas na segunda grande guerra e levado aos EUA pela operação de assimilação tecnológica &lt;em&gt;"paperclip"&lt;/em&gt;. Divagando: Einstein, por outro lado, culpou-se bastante por ter um papel decisivo no projeto que levou às bombas de Hiroshima e Nagasaki.&lt;/p&gt;
&lt;p&gt;É bom deixar claro que os desenvolvedores do Kernel não pensam de forma uniforme (&lt;em&gt;por isso meso os flame-wars&lt;/em&gt;). &lt;a target="_top" href="http://en.wikipedia.org/wiki/Alan_Cox"&gt;Alan Cox&lt;/a&gt;, o segundo homem do Linux, frequentemente antagoniza com a opinião de Linus, mas com menos &lt;em&gt;acidez&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;O discurso de Linus nos remete a aquela característica marcante do movimento de &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt;: "o prático" e "não ideológico". Mas o que significa isso? Praticidade para que fim, com que objetivo? É possível ser "não ideológico"?&lt;/p&gt;
&lt;p&gt;Praticidade, quem é você? Declarar-se como prático não indica nenhuma direção, sem conhecer seus objetivos. Mas claro... da forma como costumamos tratar o assunto presumimos o rumo desta praticidade, assim como presumimos muita coisa. Não quer dizer que seja sempre válido o sentido presumido e, mais importante: &lt;strong&gt;é válido este sentido presumido&lt;big&gt;?&lt;/big&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Praticidade hoje &lt;br&gt; é individualista &lt;br&gt; e imediatista.&lt;/p&gt;
&lt;p&gt;É &lt;em&gt;"Individualista"&lt;/em&gt; porque só se pensa em &lt;em&gt;"como eu ganho?"&lt;/em&gt; ou &lt;em&gt;"como essa empresa ganha?"&lt;/em&gt; quando se pretende um pensamento prático. Mas se o seu objetivo for melhorar sua cidade ou o mundo? Claro que se pode ter um pensamento prático colocando a necessidade da sociedade na frente. Precisamos lembrar disso para que argumentos que envolvam a sociedade não sejam automaticamente contrapostos com &lt;em&gt;"devemos ser práticos"&lt;/em&gt;. É também &lt;em&gt;"Imediatista"&lt;/em&gt; porque só é prático se o resultado puder ser mensurado a curto tempo. É interessante perceber que quem se opõe a argumentos no futuro (&lt;em&gt;distante, mas nem tanto&lt;/em&gt;), se esquece dos investimentos de longo prazo. A não ser que esse "práticos" estejam pensando que os grandes investidores que usam essa prática não tem senso prático.&lt;/p&gt;
&lt;p&gt;"Técnica sem ideologia" &lt;br&gt; e "Ciência neutra" &lt;br&gt; são irmãs xifópagas.&lt;/p&gt;
&lt;p&gt;Ser "não ideológico" significaria ter o poder de tomar decisões sem influência das questões sociais e humanas externas ao problema. Essa crença da técnica livre de ideologia é muito próxima da crença na ciência neutra (&lt;em&gt;são irmãs xifópagas na verdade&lt;/em&gt;). Além do que pode ser dito sobre a não neutralidade do processo científico, devemos lembrar também que essa pesquisa ou aplicação técnica iniciou-se com alguma motivação que envolvia nossos valores.&lt;/p&gt;
&lt;p&gt;Você pode pensar &lt;em&gt;"mas existem casos onde agimos apenas porque a lógica nos obriga"&lt;/em&gt; sim... mas a lógica é apenas uma função matemática que analisa os fatos de acordo com os pessoas dados pelos nossos valores. No caso de um tsunami, construir abrigos, tratar os feridos e reconstruir a cidade são ações óbvias e lógicas. Lógicas mesmo? Nazistas teriam salvado vítimas de tsunami na indonésia? Para eles era melhor que outras etnias deixassem de existir, e o tsunami seria a providência divina. Os utilitaristas poderia apontar inúmeras vantagens econômicas em auxiliar as vítimas do tsunami, mas se for por aí não seria mais vantajoso fazer um ataque na sequência e anexar novas terras a sua nação? Achou é brutal? Isso são seus (&lt;em&gt;nossos&lt;/em&gt;) valores em ação. 😉&lt;/p&gt;
&lt;p&gt;Mesmo que coloquemos um computador para tomar decisões e executar tarefas, "o que" e "como" acontecerão de acordo com os valores do programador. Quem se exime de avaliar criticamente suas ações está entregando-as a algum outro.&lt;/p&gt;
&lt;p&gt;A quem interessa que acreditemos em &lt;br&gt; decisões e ações "não ideológicas"?&lt;/p&gt;
&lt;p&gt;Por fim, não confunda o fato da(s) ideologia(s) dominante(s) (&lt;em title="Hã? Pois é..."&gt;que prega(m) a "não ideologia"&lt;/em&gt;) não ser(em) nomeada(s), com a possibilidade dela(s) não ser(m) classificável(is) como ideologia(s), tanto quanto as outras nomeadas. Achei muito adequado quando ouvi o professor &lt;a target="_top" href="http://www.cic.unb.br/%7Erezende"&gt;Pedro Resende&lt;/a&gt; chamar a ideologia dominante de "&lt;a target="_top" href="http://pt.wikipedia.org/wiki/Fundamentalismo_de_livre_mercado"&gt;Fundamentalismo de Mercado&lt;/a&gt;".&lt;/p&gt;
&lt;h3&gt;
&lt;a name="confusao"&gt;&lt;/a&gt; Ignorância, vício e confusão&lt;/h3&gt;
&lt;p&gt;Não podemos viver sem ação e ação depende de alguma noção, porém não podemos saber de tudo e para completar alguns buracos precisamos da suposição. O problema está em construir prédios de suposição sobre suposição e argumentar com base nestas.&lt;/p&gt;
&lt;p&gt;Somos todos ignorantes. Não apenas em um ou outro assunto, mas sobre a maior parte do conhecimento humano. Então quem erra não deve ser agredido, mas o erro não merece tolerância.&lt;/p&gt;
&lt;p&gt;E provavelmente por ignorância Matt Asay escreveu em 2014 "&lt;a target="_top" href="http://www.techrepublic.com/article/why-we-need-an-open-source-movement-for-the-web"&gt;Why we need an open-source movement for the web&lt;/a&gt;", onde ele clama por um movimento análogo ao &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; para a web, sendo que esse é simplesmente um dos braços mas ativos do &lt;abbr title="Free and Open-Source Software"&gt;FOSS&lt;/abbr&gt; como um todo (&lt;em&gt;eu apontaria desde o nascimento do Mozilla, mas é uma suposição&lt;/em&gt; 😉). Mas o meu ponto não é esse, o ponto é que quando ele expõe as rasões ele aponta questões que interessam quase que exclusivamente o movimento &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt;. É gritante que esse artigo sai com 4 anos de atraso basicamente falando do problema do SaaS, discutido por Stallman em &lt;em&gt;"&lt;a target="_top" href="https://www.gnu.org/philosophy/who-does-that-server-really-serve.html"&gt;Who does that server really serve?&lt;/a&gt;"&lt;/em&gt; e por outros sob o mote &lt;em&gt;"&lt;a target="_top" href="https://duckduckgo.com/?q=%22don%27t+SaaS+me%22"&gt;Don't SaaS me&lt;/a&gt;"&lt;/em&gt;. Matt chegou a usar o logo da OSI em seu artigo. Seria por ignorância sobre o &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; ou vício no &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt;? A quantos ele levará a confusão?&lt;/p&gt;
&lt;p&gt;No Brasil a confusão é invertida. Falamos (&lt;em&gt;quase&lt;/em&gt;) sempre &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; mas é frequente a argumentação em prol do software privativo como algo complementar, além da fobia a ideologias (&lt;em&gt;nomeadas&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;O discurso &lt;abbr title='"Open Source" em português: "Código Aberto"'&gt;OS&lt;/abbr&gt; deveria ter sido apenas uma forma de levar o &lt;abbr title='"Software Livre", do inglês "Free Software"'&gt;SL&lt;/abbr&gt; para espaços onde o argumento da ética não é ouvido: &lt;a target="_top" href="http://thecorporation.com"&gt;corporações&lt;/a&gt;, porque essas entidades são como &lt;a title="não têm ética, empatia, remorso ou sentido de culpa." href="http://revistaepoca.globo.com/Revista/Epoca/0,,EDR79349-6048,00.html"&gt;psicopatas&lt;/a&gt;. Mas como somos estúpidos... internalizamos a idéia de que ética é coisa de conversador ou filosofo, que temos que dar atenção apenas à prática, que o que importa é o resultado (&lt;em&gt;individualista e imediatista&lt;/em&gt;). Temos medo de repetir que software proprietário é nocivo à sociedade de imediato e ao indivíduo em longo prazo (&lt;em&gt;quando não de imediato&lt;/em&gt;). Porque fomos bem treinados pelos conversadores formados pela OSI e financiados pelas corporações. Compramos idéias que não nos beneficiam porque não queremos conflitar com as vozes que parecem ser maioria (&lt;em&gt;ou mais fortes&lt;/em&gt;), não queremos ser satirizados... queremos torcer para o time campeão.&lt;/p&gt;</description><pubDate>Fri, 20 Mar 2015 10:17:21 -0300</pubDate><link>http://blogoosfero.cc/aurium/blog/software-livre-codigo-aberto-%E2%80%94-onde-esta-a-diferenca</link><guid>http://blogoosfero.cc/aurium/blog/software-livre-codigo-aberto-%E2%80%94-onde-esta-a-diferenca</guid></item><item><title>Medo de Democracia</title><description>&lt;p&gt;Aproveitando o fato de que só teremos eleições em 2 anos e particularmente os envolvidos só passaram pelo processo eleitoral em 4 anos, a câmara dos deputados aproveitou para tomar uma atitude tão anti-democrática que faria inveja aos generais de 3 décadas atrás.&lt;/p&gt;
&lt;p&gt;Estou falando da &lt;a href="http://www2.camara.leg.br/camaranoticias/noticias/POLITICA/476677-DEPUTADOS-DERRUBAM-DECRETO-DOS-CONSELHOS-POPULARES.html"&gt;derrubada do decreto dos conselhos populares pelos deputados&lt;/a&gt;, nesta terça. Os contrários se dividiram entre vingança pela falta de apoio do PT aos "aliados" durante a eleição e pasme: a idéia de que os conselhos populares seriam uma forma de golpe anti-democrático onde o executivo dominaria o legislativo via representação popular. WTF???&lt;/p&gt;
&lt;p&gt;Em que planeta aumentar a participação social poderia ser encarado como antí-democrático? Mas o ridículo não para por aqui. O decreto daria apenas papel consultivo aos conselhos. E cá entre nós, desde quando se respeita algo meramente consultivo no Brasil? Já vimos o executivo de SP &lt;a href="http://social.stoa.usp.br/stoa/rea/alckmin-valida-a-necessidade-de-rea-mas-veta-a-proposta-de-lei-no-estado-de-sao-paulo"&gt;vetar&lt;/a&gt; a lei do &lt;a href="http://www.rea.net.br/site/opiniao-da-comunidade-sobre-o-veto-do-pl-rea"&gt;REA&lt;/a&gt; com o argumento de que veio da casa errada (WTF???), imagine como seriam tratadas propostas vindas de um conselho consultivo no parlamento?&lt;/p&gt;
&lt;p&gt;Alguns chegaram a afirmar que o PT &lt;em&gt;(origem de todo o mal na terra)&lt;/em&gt; iria aparelhar os conselhos colocando lá seus amigos, incluindo o MST. &lt;strong&gt;Primeiro:&lt;/strong&gt; não é assim que funciona, tanto no artigo 10 quanto no 11 do &lt;a href="http://www2.camara.leg.br/legin/fed/decret/2014/decreto-8243-23-maio-2014-778785-publicacaooriginal-144185-pe.html"&gt;decreto 8.243/2014&lt;/a&gt; encontra-se: &lt;em&gt;"presença de representantes eleitos ou indicados pela sociedade civil"&lt;/em&gt;, nada de governo, nada de executivo. &lt;em&gt;"Mas as ONGs..."&lt;/em&gt; tem tanto de direita quanto de esquerda, não me venha com essa. &lt;strong&gt;Segundo:&lt;/strong&gt; E porque o MST não poderia participar? Não representa uma parcela significativa de brasileiros? Os donos de indústrias &lt;em&gt;(que já estão influenciam por debaixo dos panos)&lt;/em&gt; terão espaço no conselho, mesmo sendo uma parcela muito menor da população... E os banqueiros? E os donos da mídia? E você? Porque o medo de participar de forma mais próxima das decisões políticas do país? Porque o medo de dar um passo em direção da democracia direta? A &lt;a href="https://pt.wikipedia.org/wiki/Democracia_direta#Democracia_semidireta_na_Su.C3.AD.C3.A7a"&gt;Suiça&lt;/a&gt;deve ser um maldito país comunista, sofrendo a ditadura bolivarianista, com aquela democracia altamente participativa.&lt;/p&gt;
&lt;p&gt;&lt;iframe width="560" src="http://www.youtube.com/embed/BqOanPBEC0g" height="315" frameborder="0"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Ou seja, todo esse "medo" é medo de democracia, ou sede de controle (isso sim é ditadura). Vivemos num país onde um &lt;a href="https://pt.wikipedia.org/wiki/Autocracia"&gt;(proto-)autocrata&lt;/a&gt;é escolhido a quatro anos e com ele um coletivo (igualmente autocrático), para governar o país entre rixas partidárias e ignorando o real interesse do povo.&lt;/p&gt;
&lt;p&gt;Tem gente que desenvolveu um certo pânico irracional de socialismo/comunismo que já acha que tudo que parecer minimamente socialista é necessáriamante mal, anti-democrático, mata criancinhas, vende sua casa e corrompe o HD. Seria bom lembrar que a vodica (que todo mundo curte na balada) é coisa de russo, que celular foi inventado e aprimorado por um russo na URSS e que o primeiro satélite foi colocado em órbita por malditos comunistas da extinta união soviética. Imagine se não tivéssemos satélites e o presidente chegasse hoje com a proposta de lançar satélites para favorecer a comunicação? Ia ser um alvoroço! Esses comunistas FDP tentando destruir a família, MEU DEUS!&lt;/p&gt;
&lt;p&gt;Tendo então meditado sobre o assunto, vamos reconhecer nossos inimigos neste tema:&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;DEM&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Não: 19 (100% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PCdoB&lt;/td&gt;
&lt;td&gt;Obstrução: 6 (75% a favor)&lt;/td&gt;
&lt;td&gt;Não: 2 (25% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PDT&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Não: 13 (100% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PMDB&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Não: 49 (96.1% contra)&lt;/td&gt;
&lt;td&gt;Art. 17: 2&lt;br&gt;(3.9% ???)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PP&lt;/td&gt;
&lt;td&gt;Obstrução: 3 (10.7% a favor)&lt;/td&gt;
&lt;td&gt;Não: 25 (89.3% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PPS&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Não: 6 (100% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Não: 21 (100% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PRB&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Não: 8 (100% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PROS&lt;/td&gt;
&lt;td&gt;Sim: 4 (25% a favor) +&lt;br&gt;Obstrução: 3 (18.8% a favor)&lt;/td&gt;
&lt;td&gt;Não: 9 (56.3% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PRP&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Não: 2 (100% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PSB&lt;/td&gt;
&lt;td&gt;Obstrução: 3 (16.7% a favor)&lt;/td&gt;
&lt;td&gt;Não: 15 (83.3% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PSC&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Não: 10 (100% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PSD&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Não: 29 (100% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PSDB&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Não: 28 (100% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PSOL&lt;/td&gt;
&lt;td&gt;Obstrução: 3 (100% a favor)&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PT&lt;/td&gt;
&lt;td&gt;Obstrução: 41 (93.2% a favor)&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Abstenção: 3&lt;br&gt;(6.8% muro)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PTB&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Não: 11 (100% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PTdoB&lt;/td&gt;
&lt;td&gt;Sim: 2 (40% a favor)&lt;/td&gt;
&lt;td&gt;Não: 3 (60% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PV&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Não: 7 (100% contra)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solidaried&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;Não: 14 (100% contra)&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;Esses dados foram colhidos da &lt;a href="http://www.camara.gov.br/internet/votacao/mostraVotacao.asp?ideVotacao=5990"&gt;tabela de votação, onde você pode ver em detalhes quem votou e como&lt;/a&gt;, localizada na ficha de tramitação &lt;a href="http://www.camara.gov.br/proposicoesWeb/fichadetramitacao?idProposicao=617737"&gt;PDC 1491/2014&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O script para facilitar a extração de dados foi esse:&lt;/p&gt;
&lt;pre&gt;/* Extraí votantes na listagem da camara dos deputados&lt;br&gt;** Página exemplo:&lt;br&gt;** http://www.camara.gov.br/internet/votacao/mostraVotacao.asp?ideVotacao=5990&lt;br&gt;** Aurélio A. Heckert -- AferoGPLv3&lt;br&gt;*/&lt;br&gt;&lt;br&gt;var TR_TITULO = 1, TR_DEPUTADO = 2, TR_TOTAL = 3,&lt;br&gt;    curr_partido = null, votos = [];&lt;br&gt;&lt;br&gt;function trim(str){ return str.replace(/^\s*|\s*$/g,'') }&lt;br&gt;&lt;br&gt;$('table:last tr:not(:first-child)').each(function(num, tr){&lt;br&gt;&lt;br&gt;  var cells = $('th,td',tr);&lt;br&gt;  var lineType = (cells[0].tagName=='TH') ? TR_TITULO :&lt;br&gt;                 (parseInt(cells.attr('colspan'))&amp;gt;1) ? TR_TOTAL : TR_DEPUTADO;&lt;br&gt;&lt;br&gt;  if (lineType == TR_TITULO) curr_partido = trim(cells.text());&lt;br&gt;  if (lineType == TR_DEPUTADO) {&lt;br&gt;    votos.push({&lt;br&gt;      deputado: trim(cells[0].innerHTML),&lt;br&gt;      partido: curr_partido,&lt;br&gt;      estado: trim(cells[1].innerHTML),&lt;br&gt;      voto: trim(cells[2].innerHTML)&lt;br&gt;    });&lt;br&gt;  }&lt;br&gt;});&lt;br&gt;&lt;br&gt;function calcPct(groupBy) {&lt;br&gt;  var result = { groupBy:groupBy, votos:{} };&lt;br&gt;  // contabilizando...&lt;br&gt;  for ( var voto,i=0; voto=votos[i]; i++ ) {&lt;br&gt;    var grupo = voto[groupBy];&lt;br&gt;    if (!result.votos[grupo]) result.votos[grupo] = {};&lt;br&gt;    grupo = result.votos[grupo];&lt;br&gt;    if (!grupo[voto.voto]) grupo[voto.voto] = {tot:1, pct:null};&lt;br&gt;    grupo[voto.voto].tot++;&lt;br&gt;  }&lt;br&gt;  // cálculo de porcentagens...&lt;br&gt;  for ( var grupo in result.votos ) {&lt;br&gt;    grupo = result.votos[grupo]&lt;br&gt;    var totGrupo = 0;&lt;br&gt;    for ( var voto in grupo )&lt;br&gt;      totGrupo += grupo[voto].tot;&lt;br&gt;    for ( var voto in grupo )&lt;br&gt;      grupo[voto].pct = Math.round(1000*(grupo[voto].tot/totGrupo))/10;&lt;br&gt;  }&lt;br&gt;  return result;&lt;br&gt;}&lt;br&gt;&lt;br&gt;// Relatório:&lt;br&gt;var votos = calcPct('partido').votos;&lt;br&gt;var strVotos = '';&lt;br&gt;for ( var grupo in votos ) {&lt;br&gt;  var strVotosGrupo = '';&lt;br&gt;  for ( var voto in votos[grupo] ) {&lt;br&gt;    var v = votos[grupo][voto];&lt;br&gt;    var desc = (voto=='Não')? 'contra' : 'a favor'&lt;br&gt;    if (voto=='Art. 17') desc = '???'&lt;br&gt;    strVotosGrupo += ' - '+voto+': '+v.tot+' ('+v.pct+'% '+desc+')'&lt;br&gt;  }&lt;br&gt;  strVotos += grupo + strVotosGrupo + '\n';&lt;br&gt;}&lt;br&gt;&lt;br&gt;console.log(strVotos);&lt;/pre&gt;
&lt;p&gt;É interessante ver que teve até gente do PCdoB que se afastou do governo para votar contra, e pasme: teve petista se abstendo! Uma grande prova do quão comunista é essa proposta. ;-)&lt;/p&gt;</description><pubDate>Fri, 31 Oct 2014 03:03:03 -0200</pubDate><link>http://blogoosfero.cc/aurium/blog/medo-de-democracia</link><guid>http://blogoosfero.cc/aurium/blog/medo-de-democracia</guid></item><item><title>Pure CSS Skull</title><description>&lt;p&gt;&lt;iframe height="220" src="http://jsfiddle.net/aurium/ko0xajg8/embedded/result,js,html,css/" width="100%" frameborder="0"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="font-size: 200%;"&gt;One &amp;lt;div&amp;gt;&lt;/strong&gt; + Some CSS = Skull&lt;br&gt;(no UTF8, no SVG, no other thing)&lt;/p&gt;
&lt;p&gt;See other &lt;a href="http://www.css-tricks.com/examples/ShapesOfCSS/" target="_blank"&gt;pure css shapes&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 26 Sep 2014 07:29:43 -0300</pubDate><link>http://blogoosfero.cc/aurium/blog/pure-css-skull</link><guid>http://blogoosfero.cc/aurium/blog/pure-css-skull</guid></item><item><title>metajs — a new language?</title><description>&lt;p&gt;No. :-)&lt;/p&gt;
&lt;p&gt;This is a javascript extension, that only use comments to provide meta-features. I named my project files as *.metajs only to let clear: it may be a valid javascript code, but will not work as expected. This looks like a good idea, right? The features are code inclusion from another file and macros. The compiler is a BASH function, but lets talk about the features in detail first.&lt;/p&gt;
&lt;p&gt;Why i did it? Because I was going crazy scrolling my source code with more then thousand lines, and with weird expressions that i wont put in variables or functions, for may js13kGames entry &lt;a href="http://js13kgames.com/entries/gravity"&gt;Gravity&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Including another file&lt;/h2&gt;
&lt;p&gt;When we want to minify a project code we need it all in one file, but, when we have some more "laborious", is a good idea to modularize it in some files. This explain why the including feature. The include does not only copy the content, it also put it all in a closure. This approach is also better then including many files inside the html, through &amp;lt;script&amp;gt;, because its content scope is protected and its declared variables will be valid only for this module and its sub-modules. As i said, it allows sub-modules, because it works recursively.&lt;/p&gt;
&lt;p&gt;Well, lets see my real case, the game &lt;a href="http://js13kgames.com/entries/gravity"&gt;Gravity&lt;/a&gt;. I have &lt;a href="https://github.com/aurium/gravity"&gt;this files&lt;/a&gt;:&lt;br&gt; audio.metajs draw.metajs gravity.metajs objects-update.metajs riffwave.metajs stars.metajs&lt;/p&gt;
&lt;p&gt;Inside of some of this files we find special comments like this, on gravity.metajs:&lt;/p&gt;
&lt;pre&gt;var bgW = Math.round(bgZ*2.9);
var bgH = bgZ*2;
&lt;span&gt;//include stars&lt;/span&gt;

(window.onresize = function() {&lt;/pre&gt;
&lt;p&gt;This "//include X" will search for a file named X.metajs and will replace the comment with its content, inside a closure.&lt;/p&gt;
&lt;p&gt;Compiling &lt;a href="https://github.com/aurium/gravity/blob/master/gravity.metajs"&gt;gravity.metajs&lt;/a&gt; (the main file), we get:&lt;/p&gt;
&lt;pre&gt;(function() { // Start gravity
  ... gravity code ...
  (function() { // Start audio
    ... audio code ...
    var RIFFWAVE;
    (function() { // Start riffwave
      ... riffwave code ...
    })(); // End riffwave
    ... audio code ...
  })(); // End audio
  ... gravity code ...
  (function() { // Start stars
    ... stars code ...
  })(); // End stars
  ... gravity code ...
  (function() { // Start objects-update
    ... objects-update code ...
  })(); // End objects-update
  ... gravity code ...
  (function() { // Start draw
    ... draw code ...
  })(); // End draw
  ... gravity code ...
})(); // End gravity
&lt;/pre&gt;
&lt;p&gt;If you know the &lt;a href="http://www.codebase.es/riffwave"&gt;RIFFWAVE.js&lt;/a&gt;, you can see this method is good to include third part projects, but when the js lib provide features as "global" variables, by only declaring it on the root scope of the file, you must change a detail: remove the "var" before the variable declaration inside the module and declare it on the parent scope, as you see on the simplified code above.&lt;/p&gt;
&lt;p&gt;This feature also helps the minifyer as I could see while implementing it. The closures allows the minifyer to reset the variable naming and this is also good for the zip algorithm.&lt;/p&gt;
&lt;p&gt;An open issue: the first implementation does not supports modules that includes it ancestors, because that will enter in a infinite loop.&lt;/p&gt;
&lt;h2&gt;Macros&lt;/h2&gt;
&lt;p&gt;Another long term wanted feature is macros. A simple comment define a macro and that will be valid for the entry file, and for the included sub-modules. You define a macro like this:&lt;/p&gt;
&lt;pre&gt;//macro myConst: 123
//macro sum: ( parseFloat(@1) + parseFloat(@2) )
//macro size: ( @1.length || 0 )&lt;/pre&gt;
&lt;p&gt;Then you can use like this:&lt;/p&gt;
&lt;pre&gt;someDiv.style.width = myConst * zoom + "px";
total = sum(someDiv.style.width, otherDiv.style.width) * 3;
for (var i=0; i&amp;lt;size(obj); i++) doSomething(obj[i]);&lt;/pre&gt;
&lt;p&gt;And the result will be:&lt;/p&gt;
&lt;pre&gt;someDiv.style.width = 123 * zoom + "px";
total = ( parseFloat(someDiv.style.width) + parseFloat( otherDiv.style.width) ) * 3;
for (var i=0; i&amp;lt;( obj.length || 0 ); i++) doSomething(obj[i]);&lt;/pre&gt;
&lt;p&gt;The parenthesis used on parametrized macros are not mandatory, but, as you can see on the second line of the usage example, the result is placed directly over the macro call without any "protection". In most cases were you define an expression in a macro you may need to protect it in a parenthesis to do not fight with toe operators precedence.&lt;/p&gt;
&lt;p&gt;By this way, macros can extend js like this:&lt;/p&gt;
&lt;pre&gt;//macro forEach: for(var item,_i=0; item=@1[_i],typeof(item)!='undefined'; _i++)
var list = [123, false, 'hello', null, 'world'];
forEach(list) { console.log(item) }&lt;/pre&gt;
&lt;p&gt;That works nice, but doing this you don't have a valid javascript anymore. If you want sugar syntax you must consider other language that compiles to javascript, like &lt;a href="http://coffeescript.org"&gt;CoffeeScript&lt;/a&gt;. (And i must to say: I love CoffeScript!)&lt;/p&gt;
&lt;h4&gt;How macros can help me?&lt;/h4&gt;
&lt;p&gt;If you don't use it for evil, that works pretty much like variables and functions. The first benefit is that you don't need to put parenthesis to your macro call if it does not requires parametrization and it still being some dynamic thing, different from a simple variable.&lt;/p&gt;
&lt;p&gt;Macros are know for giving efficiency on C programs. Things goes faster when you don't need to allocate functions and other things in memory, but we can't handle the complexity without some abstraction feature, so you can try to put macros where you would put functions. But that is useful for javascript too? I always believe the answer is "yes", but surely the impact may not to be the same. So, i decide to test it. I implement some silly test to ensure this idea:&lt;/p&gt;
&lt;p&gt;I did wrote &lt;a href="https://gitlab.com/aurium/metajs/tree/master"&gt;this files&lt;/a&gt;: test.metajs and test.js, with exactly the same algorithm and data, but one with macros and the other with variables and functions.&lt;/p&gt;
&lt;p&gt;Then i run this scripts in the browser ans in node.js, with this results:&lt;/p&gt;
&lt;p&gt;Node.js&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arithmetic with vars run 1000000000 times, in 35.315 seconds.&lt;/li&gt;
&lt;li&gt;Arithmetic with literals run 1000000000 times, in 27.654 seconds.&lt;/li&gt;
&lt;li&gt;Calling functions run 100000000 times, in 13.531 seconds.&lt;/li&gt;
&lt;li&gt;Calling parametrized macros run 100000000 times, in 13.528 seconds.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Firefox&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arithmetic with vars run 1000000000 times, in 13.677 seconds.&lt;/li&gt;
&lt;li&gt;Arithmetic with literals run 1000000000 times, in 13.676 seconds.&lt;/li&gt;
&lt;li&gt;Calling functions run 100000000 times, in 12.951 seconds.&lt;/li&gt;
&lt;li&gt;Calling parametrized macros run 100000000 times, in 11.777 seconds.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Chromium&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arithmetic with vars run 1000000000 times, in 39.675 seconds.&lt;/li&gt;
&lt;li&gt;Arithmetic with literals run 1000000000 times, in 33.426 seconds.&lt;/li&gt;
&lt;li&gt;Calling functions run 100000000 times, in 14.232 seconds.&lt;/li&gt;
&lt;li&gt;Calling parametrized macros run 100000000 times, in 13.886 seconds.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The values vary on each running, but they do not change so much. When I see some big variation, it's something lower then 10%. So... in this silly test we see no important efficiency gain on using macros. This may be related to the compiler optimizations or to the nature of javascript. I don't know... Maybe there are some cases where macros will show its power, but i'm less interested in macros to efficiency, and more about the final size reduction.&lt;/p&gt;
&lt;h4&gt;Size reduction?&lt;/h4&gt;
&lt;p&gt;Well... That is obvious, if we are talking about the compiled code size, it depends on the macro/value length relation. But, if we are talking about the zip compressed final size, it's harder to answer, and to give a real example. So, i will only remember you about "&lt;a href="http://en.wikipedia.org/wiki/Entropy_%28information_theory%29"&gt;data entropy&lt;/a&gt;". In some cases you have some steps repeating over and over in a module, like that all "&lt;code&gt;ctx.bP() ... ctx.cP()&lt;/code&gt;" on my &lt;a href="https://github.com/aurium/gravity/blob/master/draw.metajs"&gt;draw.metajs&lt;/a&gt;. You may have the same idea as i had: replace they with a abstraction function. I got a file with less chars, but the final zip file size grows up. I did try hard, the zip size floats, but never got smaller then the size without repeated steps. That happens because the data entropy. If you have big sub strings repeating N times, the compressor only need to point this as a "word" on each N instance. That is cheap. On the other hand, if you have small sub strings repeating N times, plus a new big string, you will need more or less the same space as before with more some space to this extra word (the abstraction function). You have less chars, but more information. That also happens with variables, which required more creativity to reduce the final size.&lt;/p&gt;
&lt;p&gt;So, macros can (&lt;em&gt;not ever, but often&lt;/em&gt;) reduce your code complexity &lt;strong&gt;and&lt;/strong&gt; the entropy. We can't be sure before test, so a good feature for metajs compiler could be the parameterization of the macro replacement: that must works as a standard macro or must define a function? So you can test how it influence the zip's final size.&lt;/p&gt;
&lt;h2&gt;Implementation&lt;/h2&gt;
&lt;p&gt;The metajs compiler is, today, a (&lt;em&gt;not so much&lt;/em&gt;) simple BASH function hardly dependent on sed. Please, see the &lt;a href="https://gitlab.com/aurium/metajs/blob/master/metajs.sh"&gt;metajs.sh&lt;/a&gt; file. In that file we see the function generateJS with this steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;build a sed script, by searching for "//macro" definitions, and for each one write a replacer sed expression;&lt;/li&gt;
&lt;li&gt;print the closure start;&lt;/li&gt;
&lt;li&gt;print line by line of the macro replaced content;&lt;/li&gt;
&lt;li&gt;if the line contains "//include" , replace it by the generateJS processed content of the referenced file; (&lt;em&gt;The generateJS recursive call also receives the current sed script, so macros from a ancestor module are valid inside descendants.&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;print the closure end.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Simple right? I don't know if that will have a future, but if it happens, the first step will be rewrite in javascript. Here is the project page: &lt;a href="https://gitlab.com/aurium/metajs"&gt;https://gitlab.com/aurium/metajs&lt;/a&gt;, if you have some idea or proposal, please, comment here or &lt;a href="https://gitlab.com/aurium/metajs/issues"&gt;issue&lt;/a&gt; the project.&lt;/p&gt;</description><pubDate>Wed, 06 Jul 2016 13:18:59 -0300</pubDate><link>http://blogoosfero.cc/aurium/blog/metajs-a-new-language</link><guid>http://blogoosfero.cc/aurium/blog/metajs-a-new-language</guid></item><item><title>metajs — a new language?</title><description>&lt;p&gt;No. :-)&lt;/p&gt;
&lt;p&gt;This is a javascript extension, that only use comments to provide meta-features. I named my project files as *.metajs only to let clear: it may be a valid javascript code, but will not work as expected. This looks like a good idea, right? The features are code inclusion from another file and macros. The compiler is a BASH function, but lets talk about the features in detail first.&lt;/p&gt;
&lt;p&gt;Why i did it? Because I was going crazy scrolling my source code with more then thousand lines, and with weird expressions that i wont put in variables or functions, for may js13kGames entry &lt;a href="http://js13kgames.com/entries/gravity"&gt;Gravity&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Including another file&lt;/h2&gt;
&lt;p&gt;When we want to minify a project code we need it all in one file, but, when we have some more "laborious", is a good idea to modularize it in some files. This explain why the including feature. The include does not only copy the content, it also put it all in a closure. This approach is also better then including many files inside the html, through &amp;lt;script&amp;gt;, because its content scope is protected and its declared variables will be valid only for this module and its sub-modules. As i said, it allows sub-modules, because it works recursively.&lt;/p&gt;
&lt;p&gt;Well, lets see my real case, the game &lt;a href="http://js13kgames.com/entries/gravity"&gt;Gravity&lt;/a&gt;. I have &lt;a href="https://github.com/aurium/gravity"&gt;this files&lt;/a&gt;:&lt;br /&gt; audio.metajs draw.metajs gravity.metajs objects-update.metajs riffwave.metajs stars.metajs&lt;/p&gt;
&lt;p&gt;Inside of some of this files we find special comments like this, on gravity.metajs:&lt;/p&gt;
&lt;pre&gt;var bgW = Math.round(bgZ*2.9);
var bgH = bgZ*2;
&lt;span&gt;//include stars&lt;/span&gt;

(window.onresize = function() {&lt;/pre&gt;
&lt;p&gt;This "//include X" will search for a file named X.metajs and will replace the comment with its content, inside a closure.&lt;/p&gt;
&lt;p&gt;Compiling &lt;a href="https://github.com/aurium/gravity/blob/master/gravity.metajs"&gt;gravity.metajs&lt;/a&gt; (the main file), we get:&lt;/p&gt;
&lt;pre&gt;(function() { // Start gravity
  ... gravity code ...
  (function() { // Start audio
    ... audio code ...
    var RIFFWAVE;
    (function() { // Start riffwave
      ... riffwave code ...
    })(); // End riffwave
    ... audio code ...
  })(); // End audio
  ... gravity code ...
  (function() { // Start stars
    ... stars code ...
  })(); // End stars
  ... gravity code ...
  (function() { // Start objects-update
    ... objects-update code ...
  })(); // End objects-update
  ... gravity code ...
  (function() { // Start draw
    ... draw code ...
  })(); // End draw
  ... gravity code ...
})(); // End gravity
&lt;/pre&gt;
&lt;p&gt;If you know the &lt;a href="http://www.codebase.es/riffwave"&gt;RIFFWAVE.js&lt;/a&gt;, you can see this method is good to include third part projects, but when the js lib provide features as "global" variables, by only declaring it on the root scope of the file, you must change a detail: remove the "var" before the variable declaration inside the module and declare it on the parent scope, as you see on the simplified code above.&lt;/p&gt;
&lt;p&gt;This feature also helps the minifyer as I could see while implementing it. The closures allows the minifyer to reset the variable naming and this is also good for the zip algorithm.&lt;/p&gt;
&lt;p&gt;An open issue: the first implementation does not supports modules that includes it ancestors, because that will enter in a infinite loop.&lt;/p&gt;
&lt;h2&gt;Macros&lt;/h2&gt;
&lt;p&gt;Another long term wanted feature is macros. A simple comment define a macro and that will be valid for the entry file, and for the included sub-modules. You define a macro like this:&lt;/p&gt;
&lt;pre&gt;//macro myConst: 123
//macro sum: ( parseFloat(@1) + parseFloat(@2) )
//macro size: ( @1.length || 0 )&lt;/pre&gt;
&lt;p&gt;Then you can use like this:&lt;/p&gt;
&lt;pre&gt;someDiv.style.width = myConst * zoom + "px";
total = sum(someDiv.style.width, otherDiv.style.width) * 3;
for (var i=0; i&amp;lt;size(obj); i++) doSomething(obj[i]);&lt;/pre&gt;
&lt;p&gt;And the result will be:&lt;/p&gt;
&lt;pre&gt;someDiv.style.width = 123 * zoom + "px";
total = ( parseFloat(someDiv.style.width) + parseFloat( otherDiv.style.width) ) * 3;
for (var i=0; i&amp;lt;( obj.length || 0 ); i++) doSomething(obj[i]);&lt;/pre&gt;
&lt;p&gt;The parenthesis used on parametrized macros are not mandatory, but, as you can see on the second line of the usage example, the result is placed directly over the macro call without any "protection". In most cases were you define an expression in a macro you may need to protect it in a parenthesis to do not fight with toe operators precedence.&lt;/p&gt;
&lt;p&gt;By this way, macros can extend js like this:&lt;/p&gt;
&lt;pre&gt;//macro forEach: for(var item,_i=0; item=@1[_i],typeof(item)!='undefined'; _i++)
var list = [123, false, 'hello', null, 'world'];
forEach(list) { console.log(item) }&lt;/pre&gt;
&lt;p&gt;That works nice, but doing this you don't have a valid javascript anymore. If you want sugar syntax you must consider other language that compiles to javascript, like &lt;a href="http://coffeescript.org"&gt;CoffeeScript&lt;/a&gt;. (And i must to say: I love CoffeScript!)&lt;/p&gt;
&lt;h4&gt;How macros can help me?&lt;/h4&gt;
&lt;p&gt;If you don't use it for evil, that works pretty much like variables and functions. The first benefit is that you don't need to put parenthesis to your macro call if it does not requires parametrization and it still being some dynamic thing, different from a simple variable.&lt;/p&gt;
&lt;p&gt;Macros are know for giving efficiency on C programs. Things goes faster when you don't need to allocate functions and other things in memory, but we can't handle the complexity without some abstraction feature, so you can try to put macros where you would put functions. But that is useful for javascript too? I always believe the answer is "yes", but surely the impact may not to be the same. So, i decide to test it. I implement some silly test to ensure this idea:&lt;/p&gt;
&lt;p&gt;I did wrote &lt;a href="https://gitlab.com/aurium/metajs/tree/master"&gt;this files&lt;/a&gt;: test.metajs and test.js, with exactly the same algorithm and data, but one with macros and the other with variables and functions.&lt;/p&gt;
&lt;p&gt;Then i run this scripts in the browser ans in node.js, with this results:&lt;/p&gt;
&lt;p&gt;Node.js&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arithmetic with vars run 1000000000 times, in 35.315 seconds.&lt;/li&gt;
&lt;li&gt;Arithmetic with literals run 1000000000 times, in 27.654 seconds.&lt;/li&gt;
&lt;li&gt;Calling functions run 100000000 times, in 13.531 seconds.&lt;/li&gt;
&lt;li&gt;Calling parametrized macros run 100000000 times, in 13.528 seconds.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Firefox&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arithmetic with vars run 1000000000 times, in 13.677 seconds.&lt;/li&gt;
&lt;li&gt;Arithmetic with literals run 1000000000 times, in 13.676 seconds.&lt;/li&gt;
&lt;li&gt;Calling functions run 100000000 times, in 12.951 seconds.&lt;/li&gt;
&lt;li&gt;Calling parametrized macros run 100000000 times, in 11.777 seconds.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Chromium&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arithmetic with vars run 1000000000 times, in 39.675 seconds.&lt;/li&gt;
&lt;li&gt;Arithmetic with literals run 1000000000 times, in 33.426 seconds.&lt;/li&gt;
&lt;li&gt;Calling functions run 100000000 times, in 14.232 seconds.&lt;/li&gt;
&lt;li&gt;Calling parametrized macros run 100000000 times, in 13.886 seconds.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The values vary on each running, but they do not change so much. When I see some big variation, it's something lower then 10%. So... in this silly test we see no important efficiency gain on using macros. This may be related to the compiler optimizations or to the nature of javascript. I don't know... Maybe there are some cases where macros will show its power, but i'm less interested in macros to efficiency, and more about the final size reduction.&lt;/p&gt;
&lt;h4&gt;Size reduction?&lt;/h4&gt;
&lt;p&gt;Well... That is obvious, if we are talking about the compiled code size, it depends on the macro/value length relation. But, if we are talking about the zip compressed final size, it's harder to answer, and to give a real example. So, i will only remember you about "&lt;a href="http://en.wikipedia.org/wiki/Entropy_%28information_theory%29"&gt;data entropy&lt;/a&gt;". In some cases you have some steps repeating over and over in a module, like that all "&lt;code&gt;ctx.bP() ... ctx.cP()&lt;/code&gt;" on my &lt;a href="https://github.com/aurium/gravity/blob/master/draw.metajs"&gt;draw.metajs&lt;/a&gt;. You may have the same idea as i had: replace they with a abstraction function. I got a file with less chars, but the final zip file size grows up. I did try hard, the zip size floats, but never got smaller then the size without repeated steps. That happens because the data entropy. If you have big sub strings repeating N times, the compressor only need to point this as a "word" on each N instance. That is cheap. On the other hand, if you have small sub strings repeating N times, plus a new big string, you will need more or less the same space as before with more some space to this extra word (the abstraction function). You have less chars, but more information. That also happens with variables, which required more creativity to reduce the final size.&lt;/p&gt;
&lt;p&gt;So, macros can (&lt;em&gt;not ever, but often&lt;/em&gt;) reduce your code complexity &lt;strong&gt;and&lt;/strong&gt; the entropy. We can't be sure before test, so a good feature for metajs compiler could be the parameterization of the macro replacement: that must works as a standard macro or must define a function? So you can test how it influence the zip's final size.&lt;/p&gt;
&lt;h2&gt;Implementation&lt;/h2&gt;
&lt;p&gt;The metajs compiler is, today, a (&lt;em&gt;not so much&lt;/em&gt;) simple BASH function hardly dependent on sed. Please, see the &lt;a href="https://gitlab.com/aurium/metajs/blob/master/metajs.sh"&gt;metajs.sh&lt;/a&gt; file. In that file we see the function generateJS with this steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;build a sed script, by searching for "//macro" definitions, and for each one write a replacer sed expression;&lt;/li&gt;
&lt;li&gt;print the closure start;&lt;/li&gt;
&lt;li&gt;print line by line of the macro replaced content;&lt;/li&gt;
&lt;li&gt;if the line contains "//include" , replace it by the generateJS processed content of the referenced file; (&lt;em&gt;The generateJS recursive call also receives the current sed script, so macros from a ancestor module are valid inside descendants.&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;print the closure end.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Simple right? I don't know if that will have a future, but if it happens, the first step will be rewrite in javascript. Here is the project page: &lt;a href="https://gitlab.com/aurium/metajs"&gt;https://gitlab.com/aurium/metajs&lt;/a&gt;, if you have some idea or proposal, please, comment here or &lt;a href="https://gitlab.com/aurium/metajs/issues"&gt;issue&lt;/a&gt; the project.&lt;/p&gt;</description><pubDate>Thu, 18 Sep 2014 09:42:38 -0300</pubDate><link>http://blogoosfero.cc/aurium/blog/metajs-%E2%80%94-a-new-language</link><guid>http://blogoosfero.cc/aurium/blog/metajs-%E2%80%94-a-new-language</guid></item></channel></rss>