Elmord's Magic Valley

Computers, languages, and computer languages. Às vezes em Português, sometimes in English.

Posts com a tag: ramble

My very brief affair with Btrfs

2014-09-14 01:38 -0300. Tags: comp, unix, mundane, ramble, em-portugues

Meia dúzia de dias atrás eu migrei meu / para Btrfs. Hoje eu reformatei a partição como ext4 e recuperei meu backup do / da semana passada.

O causo foi assim. Para usar o Btrfs, eu atualizei meu kernel para o 3.16, já que diversas melhorias foram realizadas no suporte a Btrfs nessa versão. Porém, o driver da minha placa de rede wireless (o broadcom-sta) andava não se comportando muito bem, o iwconfig hoje resolveu não listar nenhuma rede, e eu resolvi bootar com o meu kernel 3.14 anterior para ver se a situação melhorava. (Na verdade, com a atualização do kernel 3.2 para 3.14, que eu fiz para poder usar o Btrfs, eu tive que substituir o broadcom-sta da stable pelo da testing, e desde então ele já andava com uns comportamentos desagradáveis (tais como emitir um trace sempre que a wi-fi era iniciada), mas aparentemente a wi-fi estava funcionando corretamente mesmo assim.) Até aí, tudo transcorreu normalmente. Kernel 3.14 bootado, wi-fi funcionando, todos comemora.

Eis que eu fui abrir o aptitude (já não lembro mais por que motivo), e o módulo do Btrfs capota, emitindo algum erro sobre quotas/qgroups. Reiniciei a máquina com o kernel 3.14, fui abrir o aptitude de novo, mesmo erro. Agora não lembro mais a seqüência exata das ações, mas em algum momento eu desativei o suporte a quotas (btrfs quota disable /), abri o aptitude de novo, e dessa vez ele abriu. Porém, turns out que, no piripaque do filesystem, meu /var/lib/dpkg/status virou um arquivo vazio, e o aptitude abriu me mostrando nenhum pacote instalado e me oferecendo para baixar 3GB de pacotes (i.e., todos os pacotes que eu tinha na máquina). Nesse momento eu me disse "well, fuck", reformatei o / como ext4 e recuperei o backup que eu tinha feito quando fui migrar para Btrfs (que por sorte eu ainda não tinha apagado).

Moral da história: Talvez se eu tivesse me mantido usando o kernel 3.16 eu não tivesse tido esse problema. Porém, depois dessa experiência, e dado que na atual conjuntura eu deveria estar me preocupando com o mestrado e não com a saúde do meu filesystem, eu prefiro esperar mais uns meses para ver se o Btrfs fica mais estável e experimentá-lo de novo. Enquanto isso, eu voltei para o kernel 3.2 da stable, que pode não ser new and shiny, mas é sólido como uma rocha, forte como um touro e pesado como uma porpeta.

3 comentários / comments

Orthographica

2014-08-20 01:31 -0300. Tags: lang, rant, ramble, em-portugues

A notícia de que estão querendo propor outra reforma ortográfica me trouxe à mente umas cousas de que eu gostaria de falar.

Da inconsistência da ortografia vigente

Certa feita, estávamos eu e familiares percorrendo as verdejantes terras de Viamãoheimr, quando um dos indivíduos exclamou algo do tipo: "Olha lá, a placa escrito 'ezibida' com 'z'. E aposto que a pessoa não escreveu assim pra ser diferente, não sabia mesmo." O primeiro pensamento que me veio à mente foi:

  1. Será que, ao invés de zoar da ignorância do povo, nós não devêssemos ficar é preocupados com o estado da educação neste país?

Mas logo depois me ocorreu outro:

  1. Não é fantástico que hoje em dia praticamente todo o mundo saiba ler e escrever, ainda que imperfeitamente, coisa que não era verdade dois séculos atrás nem durante a maior parte da história da escrita?

E, finalmente:

  1. "Exibida" ainda se escreve com "x", really?

É quanto a este último que eu pretendo falar.

A nossa ortografia mantém um bocado de irregularidades (no sentido de que nem toda letra ou seqüência de letras corresponde a um único som e vice-versa), em nome de conservar a etimologia das palavras. Por exemplo, exibir se escreve com x para manter a ortografia similar à palavra latina exhibere que lhe dá origem. Seria um argumento válido para a manutenção da ortografia vigente, se não fosse pelo fato de que esse princípio é seguido de maneira bastante inconsistente.

Por exemplo, diversas palavras que contêm os prefixos/preposições latinos ex- e extra- são escritas com x em português, tais como extrair, extraditar, etc. Mas estranho (do latim extraneus) se escreve com s, sem nenhum bom motivo (que me conste). Em um caso extremo, extensão se escreve com x, mas estender se escreve com s.

O h etimológico é mantido em início de palavra, mas não em outras posições: habitar se escreve com h, mas desabitar não. Que princípio justifica a manutenção em um caso e não no outro?

C tem som de [k] ou de [s] dependendo do contexto, o que ajuda a manter a ortografia de palavras como pouco e paucidade consistente, mesmo já fazendo uns mil e tantos anos que esses dois cs não têm mais o mesmo som. Por outro lado, o passado de fico é fiquei, uma mudança de c para qu que não ocorre por nenhum motivo etimológico, mas tão somente para contornar a irregularidade da pronúncia da letra c em português.

"Estão emburrecendo o português"

Na notícia que me linkaram sobre o assunto, pode-se encontrar um bocado de comentários dizendo que a proposta "emburrece o português", "é a legalização da burrice", "emburrecer a gramática", "E são regras, pelo amor de Deus! Isso não pode ser aprovado, são várias gerações que aprenderam a escrever seguindo uma regra", etc., etc. Eu não perdi muito tempo na referida seção de comentários porque a minha tolerância a essas coisas hoje em dia é muito pequena, mas deu para dar uma idéia. (Também havia uma boa dose de comentários pró-reforma no texto. Curiosamente, dei uma olhada na versão de papel da Zero Hora de hoje ontem, na seção de mensagens dos leitores, e haviam publicado uns quatro comentários recebidos via Facebook sobre o assunto, nenhum pró-reforma. Chamamos isso de imparcialidade.)

Esses comentários me corroem o fígado por duas razões. Em primeiro lugar: reformar a ortografia "emburrece a língua" (tanto quanto isso faz sentido)? Então o que fazer das reformas que eliminaram o ph, o h de exhibido, o y de pyrâmide, o ch de chaos, a consoante dupla de innovar? Elas "emburreceram a língua"? Não são tantas gerações assim que aprenderam a escrever em qualquer dada ortografia no Brasil; a última reforma foi aprovada em 2009, a anterior em 1971 e a anterior a essa em 1943.

Em segundo lugar: a ortografia não é a língua; estritamente, a ortografia não é sequer parte da gramática. Mesmo que o português deixasse de ser escrito, ou que fosse escrito em alfabeto cirílico, continuaria sendo a mesma língua, com as mesmas regras gramaticais. Evidentemente, as línguas costumam ter um sistema de escrita oficial associado a si, mas a língua é independente do sistema de escrita usado para escrevê-la (há inclusive línguas que possuem múltiplos sistemas de escrita oficiais).

Então tu defende a reforma?

Não. Muito embora eu discorde da noção de que a reforma "emburrece a língua", nem por isso eu aprovo a tal reforma. Na verdade eu sequer aprovo ou (tanto quanto me é possível) adoto a última reforma aprovada (como alguns leitores hão de ter notado pelo meu uso da grafia "idéia"). Na verdade eu tenho cá para mim sérias ressalvas quanto à existência de um órgão regulador da língua e da regulação da norma ortográfica por lei; o inglês vive sem um órgão regulador e ninguém sofreu danos deletérios por conta disso. (Ok, talvez a ortografia do inglês possa ser considerada um dano deletério.) Especialmente quando reformas são promulgadas sem qualquer consulta à população (isso é um problema geral da democracia representativa, but I digress).

Voltando especificamente à última reforma proposta: este pessoal do R7 resolveu falar com El Hombre Marcos Bagno, que levanta alguns pontos interessantes com os quais qualquer reforma que pretenda aproximar a escrita da fala tem que lidar. Por exemplo, em mestre o s tem som de "s", mas em mesmo tem som de "z"; deveremos escrever mezmo? Em alguns lugares, o s de mestre tem som de "s", em outros tem som de "x"; deveremos aceitar tanto mestre quanto mextre como grafias válidas?

De qualquer forma, a proposta tal como está sendo apresentada parece não ter sido muito bem pensada. Em particular, pelo menos na reforma tal como os jornais a estão apresentando, tanto c quanto q seriam mantidos com som de [k], e o som inicial de "rato" continuaria sendo escrito com "r" no início de palavra e "rr" no meio. Se é para fazer uma reforma radical como a que se está propondo, então que pelo menos adotem uma ortografia realmente lógica, e que as exceções, se houverem, sejam justificadas por algum guiding principle.

Alguns dos proponentes da reforma dizem que "A simplificação ortográfica é a porta para a eliminação do analfabetismo". Será? O Japão usa um sistema de escrita absurdamente complicado, que consiste de dois silabários e um conjunto de mais ou menos dois mil ideogramas, cuja leitura pode ser drasticamente diferente dependendo do contexto (今 se lê "ima" e 日 se lê "hi", mas 今日 se lê "kyō"), e no entanto o Japão tem uma taxa de alfabetização de mais de oito mil 99% (fonte). Claro que, pode-se argumentar, quanto mais complexo o sistema de escrita, mais tempo se perde apredendo-o que poderia ser usado de maneira mais útil para outras coisas, e mais inacessível ele se torna a quem não tem esse tempo para dedicar a aprendê-lo (e.g., quem não termina o ensino fundamental). Por outro lado, não me é claro se haveria um ganho significativo em termos de alfabetização passando da ortografia atual do português (que já é bastante próxima da fala) para uma ortografia mais regular.

Então tu defende o quê?

Eu não defendo nada. Isso aqui é para terminar que nem um daqueles episódios do South Park que começam com uma questão polêmica e no final se fica com a impressão de que ambos os lados da discussão estão errados.

(Ok, eu pessoalmente defendo o status quo. Aliás, o status quo ante, de volta à ortografia anterior à última reforma. Mas neste post aqui eu não tento defender nada.)

Caveat commentator

Eu tenho uma experiência prévia ruim com posts que escapam para o mundo selvagem e atraem comentários menos-que-positivos. Na verdade a negatividade da experiência em questão foi amplificada pelo fato de eu ter sido pego absolutamente de surpresa na ocasião; hoje em dia eu já posto psicologicamente preparado para estar errado na Internet. De qualquer forma, dado o teor dos comentários na notícia da Zero Hora linkada, parece-me boa precaução deixar um recado a quem pretender comentar o post: caso pretenda deixar sua opinião sobre a reforma, faça-o apenas se for apresentar argumentos para defender sua posição. Comentários do tipo "eu aprovo", "eu desaprovo", "oh, o emburrecimento da língua", "meu, tu mal consegue escrever um parágrafo em português sem tacar um termo em inglês no meio ou conjugar a segunda pessoa errado, quem é tu pra falar de português?", etc., serão sumariamente eliminados, e os autores serão sumariamente insultados (vou mostrar a língua para eles).

Update: Assista ao próximo capítulo de Orthographica: uma batalha entre fonemas e grafemas.

11 comentários / comments

A madman and a scholar

2014-07-06 20:41 -0300. Tags: life, mind, academia, mestrado, ramble, em-portugues

Recentemente, conversando com algumas pessoas sobre o mestrado, eu disse, with varying wording, que eu ando meio pirado. Não era figura de linguagem: I meant every word of it. Se eu ainda não perdi totalmente as estribeiras, eu provavelmente devo isso primariamente à Julie Fowlis; eu ainda sou capaz de pôr ela (e a Mari Boine) nos agradecimentos da dissertação.

Semana passada eu tive uma prova, na qual eu sabia não ter ido muito bem. Quinta-feira à noite as notas foram divulgadas por e-mail, e a professora (doravante Professora I) informou que as provas ficariam na secretaria da pós-graduação para quem quisesse pegar, e que só estaria de volta à universidade na segunda. A minha nota estava tão vergonhosa que eu não estava nem a fim de ir pegar a prova. Na sexta, a outra professora da disciplina (doravante Professora II) divulgou os conceitos da disciplina; eu estava de recuperação. Apesar de estar chateado e todo perturbado das idéias, eu resolvi ir pegar a prova na secretaria e dar uma olhada, just to make sure. Turns out que a Professora I somou errado as notas das questões e me deu 2.5 ao invés de 25 em uma questão que valia 25. Se a nota tivesse sido calculada corretamente, eu não teria ficado de recuperação.

Mandei um e-mail para a Professora I sexta ao meio-dia, com um scan da prova. Não recebi resposta até o momento.

Nos últimos dois dias, eu tive três sonhos. (Isso dá uma idéia de quão regulares andam meus padrões de sono ultimamente.) No primeiro, eu estava discutindo loucamente com a Professora I tentando convencê-la sem sucesso de que a nota tinha sido calculada errada. No segundo, eu estava discutindo louca e veementemente com outro professor que queria me rodar por FF a qualquer custo por eu ter faltado a um dia de apresentações. O terceiro foi uma variação de um sonho recorrente, embora infreqüente, em que eu descubro no final do curso que eu não assisti a nenhuma aula da cadeira de Álgebra Linear (da graduação) ou alguma outra coisa math-related e vou ter que refazer a cadeira. Dessa vez o sonho foi mais elaborado e eu tinha mais alguma coisa para fazer depois de apresentar o TCC, mas a essas alturas eu já não lembro mais dos detalhes concretos.

Eu estou meio que urgentemente precisando de umas férias, que eu não terei porque (1) um certo professor, por conta das aulas perdidas por conta da copa (o semestre já não tinha começado mais cedo para compensar isso?), viagens no meio do semestre, aulas canceladas por motivos pessoais e ausência generalizada de cronograma, vai dar aula até além do fim do semestre (pode isso? claro que não; faz diferença? claro que não); (2) bolsista não tem férias. Segundo o pessimamente mal-escrito regulamento do PPGC, o bolsista tem direito a um mês de férias (por ano? na vida? assumindo um mês por ano, dá para emendar o mês de férias de 2014 e o de 2015? por que escrever direito se podemos deixar ambíguo e interpretar como quisermos depois?), mas elas têm que ser combinadas com antecedência com o orientador, e o caso é difícil de defender, porque eu nem fiz grande coisa como bolsista so far. Em qualquer caso, não vale a pena pedir férias agora por conta da cadeira mencionada.

Faz algum tempo que me admira o fato de que essencialmente o mesmo cérebro que servia ao cidadão cavernícola de vinte mil anos atrás também é capaz de absorver e ser bombardeado por quilos e quilos de informação com variáveis graus de abstração numa proporção supostamente muito maior hoje em dia do que então. Hoje isso me levou a duas reflexões: (1) De um lado, uma apreciação do fato de que a vida intelectual do cidadão cavernícola talvez não fosse tão simples assim; aliás, deixo-vos a conjectura (sem qualquer argumento, qualificação ou conhecimento para fazê-la) de que viver naquela época era tão difícil que, tendo-nos livrado de parte dessa complexidade graças a avanços tecnológicos (agricultura e etc.), quilos de poder de processamento foram liberados para as atividades intelectuais mais "elevadas" que realizamos hoje. (2) De outro lado, óbvio que isso ia dar merda, e é por isso que tem tanta gente pirada pelo mundo.

Por que eu estou falando disso? Porque nos últimos tempos eu ando meio overwhelmed com idéias e coisas que seriam interessantes de desenvolver e coisas que eu gostaria de ler e coisas que eu não gostaria tanto assim de ler mas que eu preciso ler para o mestrado e trabalhos para fazer, e eu estou em um ponto em que eu já não foco direito em coisa nenhuma; uma hora estou lendo um paper sobre dependent types, aí não termino de ler e estou lendo fragmentos arbitrários da documentação do Chicken Scheme, aí depois estou lendo sobre phase separation em Lisps, e aí estou escrevendo um leitor de S-expressions em C. (Isso foi um resumo do meu dia de ontem-anteontem (dado meus anteriormente mencionados padrões de sono, eu já não sei quando começou um dia e terminou outro).) Eu quero criar uma linguagem de programação e uma conlang e um sistema de escrita e uma máquina virtual e pensar sobre o problema da minha dissertação e eu não consigo me concentrar em nenhuma dessas coisas por qualquer quantidade decente de tempo nem parar de pensar nelas. Talvez eu estivesse precisando ficar uns dias sem olhar para um computador ou para quaisquer coisas acadêmicas e curtir a vida de outras formas. Não me ocorre nenhuma possibilidade de outras formas, entretanto, e eu me pergunto se eu estou fazendo alguma coisa muito errada com a minha vida. Adicione-se a isso uma prova para a qual enquanto eu estudava e lia os exercícios e as respostas no livro eu me perguntava: "Como é que eu ia pensar nisso? Será que eu sou incompetente? E tu ainda pretende fazer o doutorado?" Adicione-se a isso mil outros problemas que estão fora do escopo do discutível neste blog.

Querida Professora I: Responda o bendito e-mail. Boa noite.

7 comentários / comments

NSA operation ORCHESTRA, e alguns pensamentos sobre o estado atual da computação

2014-04-17 01:29 -0300. Tags: comp, prog, security, politics, ramble, em-portugues

No FOSDEM (Free and Open Source Developers' European Meeting) deste ano, Poul-Henning Kamp deu uma palestra muito interessante intitulada "NSA operation ORCHESTRA - Annual Status Report" (video, slides). A palestra, apresentada na forma de um report de um programa fictício da NSA, explora a idéia de o que a NSA poderia estar fazendo para coletar o máximo de informação com o menor custo possível. Possibilidades incluem:

Como diz nos slides da palestra, "A intenção foi fazer as pessoas rirem e pensarem, mas eu desafio qualquer um a provar que não é verdade."

A única coisa que não me agrada nessa palestra é a conclusão de que "this is a political problem" e de que é inútil fazer qualquer coisa do ponto de vista técnico. As ações da NSA são um problema político, mas: (1) isso não quer dizer que não possamos ou devamos buscar eliminar fontes de vulnerabilidades no software existente; (2) esse tipo de sabotagem poderia vir igualmente de uma organização privada com recursos suficientes, então o problema não é puramente político, no sentido de que mesmo nos livrando de governos maliciosos, o problema não desapareceu.

Ação política é importante, mas como desenvolvedores de software podemos tomar atitudes para mitigar o efeito de ações maliciosas sobre software. Para começar, podemos parar de usar ferramentas da idade da pedra, que facilitam a introdução (acidental ou deliberada) de falhas de segurança, como C/C++. O potencial de insegurança no C/C++ não é o mero descuido na hora de calcular os índices e o tamanho de um vetor (que por si só já é uma eterna fonte de vulnerabilidades). Em C/C++ existe o conceito de comportamento indefinido (undefined behavior), e cada versão nova do GCC/Clang/[insira seu compilador C/C++ favorito aqui] sai "melhor" em explorar comportamento indefinido para fins de otimização do que a anterior. A idéia básica é que se um programa realiza certas ações "proibidas" pelo standard da linguagem (e.g., acessar um elemento além do final de um vetor), o comportamento resultante do programa não é especificado pelo standard, então o compilador é livre para gerar um programa que faz qualquer coisa nesses casos. Por exemplo, suponha que você escreve algo como:

void foo(struct pessoa_t *pessoa) {
    int idade = pessoa->idade;

    if (pessoa == NULL)
        printf("Oops, pessoa inválida!\n");
    else
        printf("A idade da pessoa é %d.\n", idade);
}

pessoa é um ponteiro (potencialmente nulo) para uma estrutura de dados. Acessar o conteúdo apontado por um ponteiro nulo é um comportamento indefinido: um programa que faz isso é um programa incorreto. Logo, o compilador é livre para gerar código que não funciona no caso de o ponteiro ser nulo. Logo, o compilador pode assumir que pessoa não é um ponteiro nulo: se a hipótese do compilador for verdade, o programa estará correto, e se não for, tanto faz se o programa está correto. Mas se o ponteiro não é nulo (por hipótese), então o if na função é redundante (pois a condição é sempre falsa): o compilador pode descartar as linhas cor-de-burro-quando-foge do código resultante, como uma otimização. Foi exatamente uma otimização desse tipo que transformou um erro de programação no kernel do Linux em uma falha de segurança alguns anos atrás. Outras situações em que o compilador pode conspirar contra o programador incluem: remover verificações de overflow em operações aritméticas, pois signed overflow é indefinido em C/C++; reordenar acessos à memória, ignorando que outras threads podem depender do acesso em uma certa seqüência, se o programador não tomar o cuidado de forçar a ordem das operações; e inúmeras outras situações. Dado o grau de exploitação de comportamento indefinido nos compiladores C/C++ modernos, seja por avanços tecnológicos em análise estática, seja por influência da NSA/agentes soviéticos/illuminati/maçonaria, eu me sinto fortemente propenso a encarar o compilador C/C++ como um agente malicioso, e a idéia de minimizar o uso dessas linguagens parece cada vez mais appealing.

Outra medida técnica para reduzir a propensão dos sistemas computacionais a falhas de segurança é adotar modelos de segurança baseados em capabilities, em que o default é os processos não terem acesso a nada que não lhes seja explicitamente concedido, ao contrário dos modelos baseados em usuários, como o do Unix, em que é difícil ter certeza absoluta de quais são os poderes que um processo tem, e a grande maioria dos processos roda com mais permissões do que precisa (e.g., seu browser tem o poder de ler todos os seus arquivos pessoais, o tempo inteiro).

Falar é mais fácil do que fazer. Hoje em dia há uma falta de soluções práticas que nos permitam livrarmo-nos do C/C++ sem perder performance ou outras conveniências, ou sistemas baseados em capabilities que não sejam sistemas acadêmicos cuja adoção no mundo real é inviável. Estes são problemas nos quais eu pretendo trabalhar durante a minha existência neste mundo [aquela história de crowdfunding era só parcialmente brincadeira :)]; mais sobre isso em um post futuro, talvez. O ponto é que definitivamente há (muito) o que fazer do ponto de vista técnico para mitigar os efeitos de ações da NSA e outros agentes maliciosos.

5 comentários / comments

LaTeX vs. GPL, ou Vocês nunca entenderão o legalismus

2013-11-05 21:38 -0200. Tags: comp, copyright, ramble, em-portugues

Disclaimer: Este post, que começou muito bem-apessoado e com esperança de responder de maneira clara algumas questões, acabou virando um texto extremamente rambloso que não responde coisa nenhuma. You have been warned.

Estou escrevendo a monografia do meu TCC em LaTeX, usando um modelo do pacote iiufrgs, mantido pelo Grupo de Usuários TeX da UFRGS (UTUG). O iiufrgs é distribuído sob a GPL versão 2 ou superior. Software livre, que legal!, não? O problema é que a GPL exige que obras derivadas de uma obra sob a GPL também estejam sob a GPL. Surge, assim, uma questão que muito possivelmente não ocorreu à galera que resolveu distribuir o pacote sob a GPL: um documento produzido a partir de um pacote LaTeX sob a GPL é uma obra derivada do pacote?

No caso de a resposta ser sim, há algumas conseqüências práticas. As que me ocorrem no momento são:

Este post contém os meus palpites sobre o assunto.

Disclaimer[2]: Eu não sou advogado. Estes palpites baseiam-se no meu vago e duvidoso conhecimento das leis em questão e são oferecidos as-is sem qualquer garantia de qualquer tipo, incluindo mas não se limitando a etc etc ipsis literis hocus pocus etc. Use por sua conta e risco.

Derivados

O que conta como obra derivada? A GPLv2 diz (ênfase minha):

0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".

"Translated into another language" supostamente se refere à tradução do programa para outras linguagens computacionais (e.g., compilação para linguagem de máquina).

Antes de mais nada, vale lembrar que os fontes em LaTeX são basicamente programas. Para fins deste post, "programa LaTeX" se refere a um arquivo escrito na linguagem LaTeX, e pdflatex se refere ao programa que lê programas LaTeX e produz PDFs. Há dois pontos a se considerar aqui:

  1. Usar um pacote GPL torna um programa LaTeX GPL?
  2. O PDF resultante de um programa GPL está coberto pela GPL?

A primeira questão é meio duvidosa. Distribuir seu programa LaTeX com comandos \usepackage que incluem pacotes GPL sem distribuir os pacotes junto definitivamente não torna seu programa GPL. Porém, no momento em que o programa é processado pelo pdflatex, pode-se considerar que ele foi combinado com o programa GPL, e o bolo alimentar resultante está sob a GPL. Essa discussão é similar à velha história de se um programa linkado com uma biblioteca GPL está sob a GPL ou não, que se reduz à questão de se um programa que usa uma biblioteca é uma obra derivada da biblioteca. A FSF acha que sim. Eu me limito a não achar nada.

A segunda questão contém várias subquestões. A primeira é se a geração de um PDF a partir de um programa LaTeX conta como uma obra derivada do programa. Isso depende em parte de o que exatamente o pdflatex faz com os arquivos. Eu vejo duas possíveis interpretações:

  1. O pdflatex lê o programa LaTeX e o compila para PDF. Nesse caso, o resultado é uma tradução do programa LaTeX para PDF, e portanto está coberto pela GPL;
  2. O pdflatex lê o programa LaTeX e executa suas instruções. Nesse caso, o resultado é meramente a saída do programa, e não uma tradução, e a saída de um programa GPL por si só não constitui uma obra derivada do programa, a menos que ela inclua trechos do programa ou modificações ou traduções de trechos. Isto é, o status da saída de um programa como obra derivada não depende do fato de ela ter sido produzida pelo programa, e sim por seu conteúdo.

E aqui eu também fico na dúvida, pois a coisa é um tanto quanto sutil. O que me impede de dizer que o que um compilador C faz é executar um programa em uma domain-specific language para geração de código de máquina? Nesse caso o binário seria só a saída da execução do programa, e portanto não seria uma obra derivada. "A menos que a saída contenha uma obra derivada", você me diz, apontando para o fato de que a tal saída poderia ser vista como uma "tradução" do programa C, e portanto uma obra derivada (por definição pelo parágrafo 0 da GPLv2), apesar de ter sido produzida por "execução", e não por "tradução". Mas o que conta como tradução? Se eu escrevo um programa que imprime a data atual, eu não posso considerar a saída como uma "tradução" do programa? Imagino que não, porque a saída não é "equivalente" ao programa: ela produz uma data fixa, e não a data atual. Mas e se o programa produzir uma saída fixa? Se P é o programa:

for (i=1; i<=5; i++) printf("%d ", i*i);

o programa

printf("1 4 9 16 25 ");

é uma tradução / obra derivada do programa P? Se a resposta for não, então um compilador super-otimizante corre o risco de produzir um executável que não é uma obra derivada do fonte. (Imagine a mesma situação com um código-fonte de milhares de linhas transformado beyond recognition por um compilador.) Mas se a resposta é sim, abre-se um precedente para considerar a saída de um programa cuja saída é sempre a mesma uma obra derivada do programa. Acontece que um programa LaTeX é exatamente um tal programa; ignorando coisas como geração da data atual na capa do documento, um programa LaTeX sempre produz um PDF "equivalente".

Me parece difícil nesse caso, entretanto, considerar o PDF diretamente como uma obra derivada do pacote, pois o pacote não gera sempre a mesma saída; o PDF não é "operacionalmente equivalente" ao pacote. Quem gera sempre a mesma saída é o seu programa, que por acaso usa o pacote. Porém, se o fato de "linkar" o programa com o pacote produz uma substância mista que é uma obra derivada do pacote, coberta pela GPL, o PDF seria a tradução dessa substância mista, e portanto uma obra derivada, e portanto coberta pela GPL.

Conclusão

A conclusão é que eu sinceramente não sei se o PDF produzido a partir de um programa LaTeX que usa um pacote GPL está coberto pela GPL, e que copyright é uma coisa não muito bem definida quando transposta para o mundo do software. O que eu sei é que todo esse transtorno poderia ter sido evitado se o pessoal do UTUG tivesse usado uma outra licença para o iiufrgs. Talvez simplesmente usar a LGPL ao invés da GPL resolva esse problema. Outra alternativa seria adicionar uma "linking exception" à nota de copyright dos arquivos do iiufrgs. Escrever os detalhes da exceção é sugerido como exercício para o leitor.

Comentários / Comments

#123

2013-05-02 23:20 -0300. Tags: random, life, mind, ramble, em-portugues

Caro mundo,

Ao invés de estar aproveitando meu tempo de uma maneira produtiva, resolvi passar o final do meu dia lendo o Hyperbole and a Half desde o primeiro post. Por mais improdutivo que seja, não posso dizer que foi uma má decisão. Além disso, ler certas coisas me fez pensar que morar nessa casa com o chão todo torto e que está começando a ficar úmido com a proximidade do inverno e que em breve vai começar a verter água, ao mesmo tempo em que caracóis começam a invadir a casa, até que não é algo tão ruim assim. O tempo está com cara de tempestade iminente, o que significa que meu 3G vai começar a se arrastar como os recém-mencionados caracóis, o que pode dificultar minha continuada leitura do recém-mencionado blog, mas enfim. (A concretização da tempestade, por sua vez, pode levar à falta de luz na rua em que se localiza a recém-mencionada residência pela qual eu acabo de expressar renovado apreço, rua esta com uma infraestrutura elétrica menos que invejável. Mas enfim. O tempo está bonito, pelo menos.)

(As a sidenote, se por acaso alguém estiver preocupado com o sumiço da Allie no final de 2011, saiba que ela deu sinais de vida no Reddit em março de 2012. Eu fiquei contente quando encontrei isso, anyway. [Update: She's back! Good timing, huh?])

(Como se diz "sidenote" em português? "Preterlóquio?" (Estou surpreso pela total ausência de resultados na minha busca no Google por "preterlóquio". Considerem a palavra criada (ainda que, talvez, não necessariamente com o mesmo exato sentido).))

Mas não é sobre nada disso que eu vim falar hoje. O que eu vim falar aqui originalmente é sobre o design de shells. Lembram que eu escrevi um post quatro meses atrás dizendo que estava querendo escrever um shell? Pois bem, obviamente eu não fiz isso, mas nesse meio tempo eu tive idéias. (Se me pagassem para ter idéias de software de aplicabilidade questionável eu estaria com a vida ganha. Ou não.) Na verdade eu agora fui olhar o respectivo post e descobri que ele é muito maior do que eu me lembrava, de tal maneira que eu já nem sei se vale a pena escrever outro post sobre o assunto. Quem sabe assim eu resolvo criar vergonha na cara e de fato implementar as idéias, ao invés de ficar discutindo o quão fantasticamente legais elas são. Na verdade meu objetivo original era pedir sugestões, então talvez até houvesse um ponto em escrever o post, mas não sei mais. Se alguém quiser dar sugestões anyway, sinta-se à vontade.

Ao invés disso, eu vou falar de outra coisa: vou falar do fato de que os seres humanos se acostumam com as coisas e com o tempo passam a perceber qualquer situação em que se encontrem como algo dado e corriqueiro. Não, isso não é novidade nenhuma; você já se acostumou com essa idéia também. Mas às vezes o módulo de assumptions da minha cabeça tem um lapso de funcionamento e eu tenho um choque de realidade. Por exemplo, estava eu hoje à tarde debruçado sobre a mesa da sala da monitoria tentando dormir (já que normalmente não aparece ninguém lá para pedir ajuda e é difícil fazer qualquer coisa produtiva por lá, pois é difícil se concentrar com o barulho (mas não dormir, you see (embora eu não tenha conseguido dormir de fato (so far este blog contém 1083 pares de parênteses, por sinal, sem contar trechos de código entre tags PRE, mas isso não vem ao caso no momento)))). Sem sucesso em minha tentativa de dormir, levanto e resolvo sair para ir ao banheiro (leia-se: pretexto para caminhar um pouco). Em um estado semi-acordado, começo a andar pelo corredor para a rua. Nesse momento eu olho ao redor e penso: "WTF? I'm in the fucking Instituto de Informática? Na Universidade Federal do Rio Grande do Sul? Que viagem!" Não só estou no fucking Instituto de Informática, como também no final do curso. Especificamente, o curso termina em dois meses se eu me pilhar de terminar o TCC neste semestre (estrategicamente, entretanto, isso não tem vantagem nenhuma; é um semestre de RU a menos). How mad is that? E ainda por cima eu estou morando sozinho? Eu tenho uma casa só pra mim? Sou eu que pago as contas? Eu posso fazer whatever the hell I please da minha vida? Por que diabos ninguém tinha me contado isso antes?

E é isso, galera. A moral é que às vezes a gente precisa de uns tapas na cabeça para ela ir para o lugar certo. (Não digo "voltar para o lugar certo" porque às vezes ela nunca esteve no lugar certo.) Agora, se vocês me permitem, eu vou continuar lendo Hyperbole and a Half até dormir em cima do teclado, já que eu descobri há meia hora atrás que não vou ter aula amanhã.

5 comentários / comments

One man's gambiarra is another man's technique

2013-04-17 14:52 -0300. Tags: comp, prog, ramble, em-portugues

Certa feita (e de repente o "fecha" do espanhol não parece mais tão estranho), não me lembro mais em que contexto nem para quem, eu mostrei um código deste tipo com listas encadeadas em C:

for (item = list;
     item && item->value != searched_value;
     item = item->next) ;

Que tanto quanto me constasse, era a maneira de se procurar um valor em uma lista em C. Para minha surpresa na época, a pessoa disse que isso era gambiarra. (Eu dificilmente escreveria isso com um while, porque eu tenho uma propensão terrível a esquecer o item = item->next no final do while. Ou será que eu tenho essa propensão por não estar acostumado a fazer esse tipo de coisa com while? But I digress.)

Uma situação similar foi quando eu mostrei para alguém na monitoria de Fundamentos de Algoritmos que dava para usar "tail-recursion com acumuladores" para iterar sobre uma lista. Algo do tipo:

(define (média lista)
  (média* lista 0 0))

(define (média* lista soma conta)
  (cond [(empty? lista) (/ soma conta)]
        [else (média* (rest lista) (+ soma (first lista)) (+ conta 1))]))

Que, novamente, é a maneira padrão de se fazer esse tipo de coisa em uma linguagem funcional (talvez com a definição de média* dentro do corpo de média, ao invés de uma função externa, mas whatever), e novamente a pessoa viu isso como uma "baita gambiarra". Provavelmente, o código imperativo equivalente (com atribuição de variáveis para manter a conta e a soma) é que seria visto como gambiarra por um programador Scheme.

Outro item de contenda é usar x++ em C para usar o valor atual de x em uma expressão e incrementá-lo na mesma operação (que é, bem, exatamente a definição do operador). Ok, usar um x++ perdido no meio de uma expressão grande pode ser fonte de confusão. Mas algo como:

var1 = var2++;

ou more likely:

item->code = max_code++;

não deveria ser nenhum mistério para quem conhece a linguagem.

A impressão que eu tenho é que as pessoas consideram "gambiarra" qualquer coisa feita de uma maneira diferente do que elas estão acostumadas. Eu mesmo já fui vítima desse efeito. No terceiro semestre eu escrevi um "banco de dados" em C (basicamente um programa que aceitava queries em uma linguagem facão, mantinha uns arquivos seqüenciais e montava uns índices em memória) para o trabalho final da disciplina de Classificação e Pesquisa de Dados. Como o conteúdo dos arquivos binários era determinado em tempo de execução pelas definições das tabelas, o programa continha um bocado de casts, manipulações de ponteiros e outras "curiosidades" do C no código. Até então, tinha sido o programa mais complicado que eu tinha escrito. Durante um bom tempo, quando o assunto surgia, eu costumava comentar que esse código era "cheio de gambiarras" e coisas de "baixo-nível". Um belo dia, uns dois ou três semestres depois, eu resolvi dar uma olhada no código, porque eu já não lembrava direito o que ele fazia de tão mágico. Para minha surpresa, minha reação ao olhar as partes "sujas" do código foi algo como "pff, que brincadeira de criança". (E para minha surpresa, as partes "sujas" me pareceram bastante legíveis.)

(Um ponto relacionado é que quando estamos ensinando/explicando alguma coisa, devemos nos lembrar que o que nos parece óbvio e simples pode não o ser para a pessoa que tem menos experiência no assunto, mas esse não era o tema original do post.)

Agora dando uma olhada nesse código de novo, lembrei de uma outra coisa que eu tinha pensando quando o tinha revisto pela primeira vez: que certos trechos do código poderiam ter sido simplificados se eu tivesse usado um goto fail; da vida em pontos estratégicos. O que nos leva ao próximo tópico...

Considered harmful?

Entre muitos nesse mundo da programação existe um culto irracional às Boas Práticas de Programação™. Não me entenda mal; muitas técnicas e práticas ajudam a tornar o código mais legível e fácil de manter. O problema é quando as "boas práticas" se tornam regras fixas sem uma boa justificativa por trás.

Um exemplo é a proibição ao goto. A idéia básica é: "Alguns usos do goto produzem código ilegível; logo, o goto não deve ser usado." Isso é mais ou menos equivalente a "facas cortam os dedos; logo, não devemos usar facas". Ok, usar uma faca para desparafusar parafusos quando se tem uma chave de fenda à mão não é uma boa idéia. Mas usar uma chave de fenda para passar margarina no pão também não é. Verdade que em linguagens de mais alto nível do que C (com exceções e try/finally e labeled loops e what-not) é extremamente raro encontrar um bom motivo para se usar um goto; mas em C, há uma porção de situações em que um goto bem utilizado é capaz de tornar o código mais simples e legível.

Outro exemplo é o uso de TABLEs em HTML. O fundamento por trás da "regra" que "proíbe" certos usos de TABLE é evitar que TABLEs sejam usadas apenas para layout, com coisas que não têm a semântica de uma tabela. So far, so good. Mas no post (que eu nunca mais encontrei) pelo qual eu fiquei sabendo sobre "tableless tables" (i.e., o uso de CSS para aplicar o layout gerado pelas TABLEs do HTML a outros elementos), lembro que um indivíduo tinha postado um comentário semi-indignado dizendo que "usar CSS para simular uma tabela é só uma tabela disfarçada, e não deve ser feito". Ou seja, o camarada internalizou a noção de "usar TABLEs é errado", mas não o porquê.

Outra manifestação do "culto" são coisas do tipo:

Q: O que acontece se eu converter um ponteiro em inteiro e de volta em ponteiro?

A: Isso é uma péssima prática de programação e você não deveria fazer isso.

que eu vejo com alguma freqüência no Stack Overflow, i.e., o camarada não responde a pergunta, e ao invés disso se limita a repetir o mantra "Não Deve Ser Feito".

A freqüência com que eu vejo esse tipo de coisa me preocupa um pouco, na verdade. Acho que o princípio por trás disso é o mesmo que está por trás de zoar/condenar/excluir as pessoas que possuem algum comportamento "non-standard". Mas isso é uma discussão para outro post.

Appendix A

17.4: Is goto a good thing or a bad thing?

Yes.

17.5: No, really, should I use goto statements in my code?

Any loop control construct can be written with gotos; similarly, any goto can be emulated by some loop control constructs and additional logic.

However, gotos are unclean. For instance, compare the following two code segments:

do {                            foo();
        foo();                  if (bar())
        if (bar())                      goto SKIP;
                break;          baz();
        baz();                  quux();
        quux();
} while (1 == 0);               SKIP:
buz();                          buz();

Note how the loop control makes it quite clear that the statements inside it will be looped on as long as a condition is met, where the goto statement gives the impression that, if bar() returned a nonzero value, the statements baz() and quux() will be skipped.

Infrequently Asked Questions in comp.lang.c

_____

(O título do post é uma paráfrase de uma paráfrase de uma expressão idiomática.)

12 comentários / comments

Quenya

2013-03-26 21:11 -0300. Tags: lang, conlang, book, ramble, about, em-portugues

Nos últimos tempos eu andei não postando tanto quanto eu gostaria (o que evidentemente me torna um impostor). Isso se deve em parte porque eu queria escrever posts decentemente coesos e coerentes. Por um lado eu estava meio indeciso sobre se fazia sentido falar de certas coisas em um único post ou se deveria abordá-las separadamente, entre outras questões organizacionais. Por outro lado, eu não andava com nenhum ânimo de escrever posts coerentes.

Well, no more µµµ. Para os próximos posts, e sabe-se lá mais quantos, eu abnego qualquer pretensão a coerência. Para me sentir um pouco melhor (não que isso seja de qualquer benefício ao leitor), vou começar a taggear esse tipo de post (que não é nenhuma novidade por aqui, mas eu tento me iludir de que eles são menos comuns) com a tag ramble. Por sinal, dada a inconsistência no uso de tags nesse blog ao longo do tempo, tem uma dúzia de posts que eu vou ter que taggear retroativamente. But I digress.

Anyway.

Durante as férias, eu resolvi finalmente pegar o Senhor dos Anéis para ler. O motivo por trás disso era primariamente poder desprezar a obra do Tolkien com conhecimento de causa. You see, por motivos mui pessoais e largamente ilógicos eu me via obrigado a ter um mínimo de respeito pela obra literária do Tolkien enquanto não a lesse. Por outro lado, eu tinha cá com os meus botões que o Senhor dos Anéis não valia grande coisa; tanto quanto eu sabia da história, a parte não-maçante era a parte que tinha sido copiada da mitologia nórdica.

Anyway, eu peguei o troço para ler. O livro (e não me diga que são três livros; isso foi idéia da editora) começa com um prólogo explicando o background da história para quem não leu o Hobbit, do qual o LotR originalmente era continuação. O prólogo descreve mui detalhadamente a vida dos Hobbits, tão detalhadamente que eu resolvi dar um fast forward para o fim do capítulo, tão-somente para descobrir que aquele era apenas o primeiro capítulo do prólogo, o qual consiste de nada menos do que quatro capítulos (ou seções, como preferir; eles não são tão longos) numerados e um não-numerado. Diante desta chocante observação, eu larguei o livro de mão e fui ler o Don Quixote (coisa que há de levar um bocado de tempo ainda, já que estou lendo em espanhol, língua na qual eu não estou acostumado a ler naturalmente, e a isso se soma o detalhe de que o vocabulário usado é um tanto quanto arcaico, fora que eu não estou lendo com particular constância; but I digress).

Isso foi há um mês e um tanto. Ontem eu resolvi pegar o LotR de novo (por razões que serão esclarecidas até o fim do post), mas dessa vez eu tomei a sábia decisão de pular inteiramente o prólogo. Eu ia começar a ler a história propriamente dita, e se a coisa continuasse igualmente enfadonha, eu ia largar esse livro de mão de vez, e me contentar em zombar da obra literária do Tolkien sem conhecimento de causa mesmo. Caso contrário, eu seguiria lendo e poderia mui informadamente escrever um post aqui dizendo o quanto eu desgostei da história, e sumiria com esse peso da minha consciência.

Em um golpe fatal contra meu rico e respeitável plano, os dois capítulos que eu li até agora foram surpreendentemente agradáveis.

E é isso. Esse livro provavelmente é digno da fama que tem, e se no fim das contas a história for ruim, pelo menos haverei de conceder que o camarada Tolkien escreve muito bem. Dois capítulos é muito pouco para afirmar qualquer coisa, mas enfim. Em qualquer caso, ler esse livro vai servir para ler The Last Ringbearer depois, uma obra que me parece altamente respeitável.

Mas não é sobre nada disso que eu vim falar originalmente, como o título do post pode sugerir. O que eu vim falar é sobre a obra do Tolkien como conlanger, e esta sim eu sempre admirei. (Famosamente (ou nem tanto), uma vez o Tolkien disse que "The ‘stories’ were made rather to provide a world for the languages than the reverse".) Ontem eu caí por acaso nesta página (procurando por "no word for if" no Google (pois estava eu experimentando com a gramática da minha conlang antes de ir dormir, e estava eu meditando sobre como criar orações condicionais sem uma palavra para "se", e resolvi pesquisar no Google se havia alguma língua que fizesse as coisas mais ou menos como eu tinha em mente, e que outras possibilidades havia para se construir condicionais sem "se" (sim, eu tenho uma conlang, que esteve semi-abandonada pelos últimos cinco anos (but I digress)))), e me chamou a atenção como as frases em Quenya (lê-se "qüênia", não "kênia") soam "naturalmente bonitas". Esse não é meu primeiro contato com Quenya, mas até então, for most part, eu só tinha visto frases criadas pelo próprio Tolkien, em um contexto artístico, e aí é de se esperar que as frases tenham sido cuidadosamente construídas para soarem bem. Mas aí está uma dúzia de frases compostas por uma pessoa não necessariamente preocupada com a beleza poética da tradução de "estou dormindo, deixe sua mensagem ou ligue para XXX" em Quenya, e as frases soam surpreendentemente bem (pelo menos para mim). (Eu ia gravar um ogg com a pronúncia de algumas das frases, mas me parece que os leitores não hão de estar particularmente interessados em ouvir minha bela voz proferindo sentenças aleatórias, e ao invés disso deixo-vos com El Hombre Tolkien Himself recitando uma versão pré-LotR do poema Namárië.)

E foi depois de cair nessa página que eu resolvi tentar retomar a leitura do LotR, e assim, li os acima referidos dois capítulos antes de ir dormir, o que conclui esta mui coesa história contada in media res.

12 comentários / comments

Main menu

Recent posts

Recent comments

Tags

em-portugues (213) comp (148) prog (71) in-english (62) life (49) unix (38) pldesign (37) lang (32) random (28) about (28) mind (26) lisp (25) fenius (22) mundane (22) web (20) ramble (18) img (13) rant (12) hel (12) scheme (10) privacy (10) freedom (8) esperanto (7) music (7) lash (7) bash (7) academia (7) copyright (7) home (6) mestrado (6) shell (6) android (5) conlang (5) misc (5) emacs (5) latex (4) editor (4) etymology (4) php (4) worldly (4) book (4) politics (4) network (3) c (3) tour-de-scheme (3) security (3) kbd (3) film (3) wrong (3) cook (2) treta (2) poem (2) physics (2) x11 (2) audio (2) comic (2) lows (2) llvm (2) wm (2) philosophy (2) perl (1) wayland (1) ai (1) german (1) en-esperanto (1) golang (1) translation (1) kindle (1) pointless (1) old-chinese (1)

Elsewhere

Quod vide


Copyright © 2010-2024 Vítor De Araújo
O conteúdo deste blog, a menos que de outra forma especificado, pode ser utilizado segundo os termos da licença Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International.

Powered by Blognir.