Initial commit
This commit is contained in:
commit
3a105bd8fa
91 changed files with 5781 additions and 0 deletions
9
.gitmodules
vendored
Normal file
9
.gitmodules
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
[submodule "themes/holy"]
|
||||
path = themes/holy
|
||||
url = https://github.com/serkodev/holy.git
|
||||
[submodule "themes/hugo-ficurinia"]
|
||||
path = themes/hugo-ficurinia
|
||||
url = https://gitlab.com/gabmus/hugo-ficurinia
|
||||
[submodule "themes/binario"]
|
||||
path = themes/binario
|
||||
url = https://github.com/vimux/binario
|
6
archetypes/default.md
Normal file
6
archetypes/default.md
Normal file
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
---
|
||||
|
128
config.toml
Normal file
128
config.toml
Normal file
|
@ -0,0 +1,128 @@
|
|||
baseURL = 'https://blog.sergiodj.net'
|
||||
languageCode = 'en-us'
|
||||
title = 'Yet Another Me'
|
||||
theme = 'binario'
|
||||
|
||||
[Author]
|
||||
author = "Sergio Durigan Junior"
|
||||
|
||||
[Params]
|
||||
description = "Personal blog" # Site Description. Used in meta description
|
||||
copyright = "Sergio Durigan Junior" # Copyright holder, otherwise will use .Site.Title
|
||||
opengraph = true # Enable OpenGraph if true
|
||||
schema = true # Enable Schema
|
||||
twitter_cards = false # Enable Twitter Cards if true
|
||||
columns = 1 # Set the number of cards columns. Possible values: 1, 2, 3
|
||||
mainSections = ["posts"] # Set main page sections
|
||||
dateFormat = "02 January 2006" # Change the format of dates
|
||||
colorTheme = "dark-blue" # dark-green, dark-blue, dark-red, dark-violet
|
||||
customCSS = ["css/custom.css", "jetbrains-mono/jetbrains-mono.css"] # Include custom CSS files
|
||||
customJS = ["js/custom.js"] # Include custom JS files
|
||||
mainMenuAlignment = "right" # Align main menu (desktop version) to the right side
|
||||
authorbox = true # Show authorbox at bottom of single pages if true
|
||||
comments = false # Enable comments for all site pages
|
||||
related = true # Enable Related content for single pages
|
||||
relatedMax = 5 # Set the maximum number of elements that can be displayed in related block. Optional
|
||||
mathjax = false # Enable MathJax for all site pages
|
||||
#mathjaxPath = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.6/MathJax.js" # Specify MathJax path. Optional
|
||||
#mathjaxConfig = "TeX-AMS-MML_HTMLorMML" # Specify MathJax config. Optional
|
||||
hideNoPostsWarning = false # Don't show no posts empty state warning in main page, if true
|
||||
|
||||
[Params.Entry]
|
||||
meta = ["date", "categories", "tags"] # Enable meta fields in given order
|
||||
toc = true # Enable Table of Contents
|
||||
tocOpen = true # Open Table of Contents block. Optional
|
||||
|
||||
[Params.Featured]
|
||||
previewOnly = false # Show only preview featured image
|
||||
|
||||
[Params.Breadcrumb]
|
||||
enable = true # Enable breadcrumb block globally
|
||||
homeText = "Yet Another Me" # Home node text
|
||||
|
||||
[Params.Social]
|
||||
email = "example@example.com"
|
||||
#facebook = "username"
|
||||
#twitter = "username"
|
||||
#telegram = "username"
|
||||
#instagram = "username"
|
||||
#pinterest = "username"
|
||||
#vk = "username"
|
||||
#linkedin = "username"
|
||||
#github = "username"
|
||||
#gitlab = "username"
|
||||
#stackoverflow = "numberid"
|
||||
#mastodon = "https://some.instance/@username"
|
||||
#medium = "username"
|
||||
|
||||
[Params.Share] # Entry Share block
|
||||
facebook = false
|
||||
twitter = false
|
||||
reddit = false
|
||||
telegram = false
|
||||
linkedin = false
|
||||
vk = false
|
||||
pocket = false
|
||||
pinterest = false
|
||||
|
||||
# Web App Manifest settings
|
||||
# https://www.w3.org/TR/appmanifest/
|
||||
# https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||
[Params.Manifest]
|
||||
name = "Yet Another Me"
|
||||
shortName = "yet-another-me"
|
||||
display = "browser"
|
||||
startUrl = "/"
|
||||
backgroundColor = "#2a2a2a"
|
||||
themeColor = "#1b1b1b"
|
||||
description = "Personal blog"
|
||||
orientation = "portrait"
|
||||
scope = "/"
|
||||
|
||||
[menu]
|
||||
[[menu.main]]
|
||||
name = "Tags"
|
||||
pageRef = "/tags/"
|
||||
weight = 10
|
||||
|
||||
[[menu.footer]]
|
||||
name = "RSS"
|
||||
url = "/rss.xml"
|
||||
weight = 10
|
||||
[[menu.footer]]
|
||||
name = "ATOM"
|
||||
url = "/atom.xml"
|
||||
weight = 10
|
||||
|
||||
[mediaTypes]
|
||||
[mediaTypes."application/atom"]
|
||||
suffixes = ["xml"]
|
||||
|
||||
[outputFormats]
|
||||
[outputFormats.MANIFEST]
|
||||
mediaType = "application/json"
|
||||
baseName = "manifest"
|
||||
isPlainText = true
|
||||
notAlternative = true
|
||||
|
||||
[outputFormats.RSS]
|
||||
mediaType = "application/rss"
|
||||
baseName = "rss"
|
||||
isPlainText = false
|
||||
|
||||
[outputFormats.Atom]
|
||||
mediaType = "application/atom"
|
||||
baseName = "atom"
|
||||
isPlainText = false
|
||||
|
||||
[outputs]
|
||||
home = ["HTML", "RSS", "MANIFEST", "Atom"]
|
||||
# tags = ["HTML", "RSS", "Atom"]
|
||||
# taxonomy = ["HTML", "RSS", "ATOM"]
|
||||
# section = ["HTML", "RSS", "ATOM"]
|
||||
term = ["HTML", "RSS", "Atom"]
|
||||
|
||||
# Necessary for ox-hugo
|
||||
# See https://ox-hugo.scripter.co/doc/goldmark/
|
||||
[markup.goldmark.renderer]
|
||||
unsafe = true
|
8
content-org/all-posts.org
Normal file
8
content-org/all-posts.org
Normal file
|
@ -0,0 +1,8 @@
|
|||
#+hugo_base_dir: ../
|
||||
|
||||
* DONE My first post :en_us:thoughts:
|
||||
CLOSED: [2023-04-16 Sun 22:02]
|
||||
:PROPERTIES:
|
||||
:EXPORT_FILE_NAME: my-first-post
|
||||
:END:
|
||||
This is my post body
|
61
content/posts/a-droga-do-credito.md
Normal file
61
content/posts/a-droga-do-credito.md
Normal file
|
@ -0,0 +1,61 @@
|
|||
---
|
||||
date: 2014-02-18T00:00:00-05:00
|
||||
title: "A Droga do Crédito"
|
||||
tags: [pt_br, free-software, thoughts]
|
||||
---
|
||||
|
||||
É uma droga querer crédito por algo. Alguns dizem que é seu direito,
|
||||
dado que você efetivamente tenha feito aquilo pelo qual está pedindo
|
||||
crédito; por outro lado, pessoas com almas supostamente mais evoluídas
|
||||
nos ensinam que o prazer em se fazer algo está contido no ato de
|
||||
fazê-lo, e não no crédito que nos é dado após a realização da tarefa.
|
||||
Quem está certo? O que funciona pra você?
|
||||
|
||||
O movimento de Software Livre, visto por um ângulo um pouco
|
||||
não-ortodoxo, funciona na base do "dar e receber". Você contribui com
|
||||
tempo, dedicação, código, relatórios de problemas, correções, arte,
|
||||
texto, e no fim espera, mesmo que inconscientemente, receber crédito
|
||||
pelo esforço colocado no projeto. Não há nada de errado nisso, e, se o
|
||||
crédito for realmente merecido (o que é uma outra reflexão por vezes
|
||||
dificílima de ser feita!), nada mais justo do que dá-lo.
|
||||
|
||||
Por outro lado, é interessante analisar o que ocorre quando o devido
|
||||
crédito não é dado. Sem entrar no mérito do porquê isso aconteceu
|
||||
(relapso, esquecimento, má fé), a pessoa que devia receber esse crédito,
|
||||
mesmo que não o estivesse conscientemente esperando, sofre um abalo ---
|
||||
irreversível, por vezes --- na vontade de continuar dedicando seu tempo
|
||||
a determinada tarefa. Pode parecer óbvio, mas é preciso olhar para isso
|
||||
com cuidado. O movimento de Software Livre é composto não somente por
|
||||
funcionários de empresas interessadas (financeiramente) no sucesso de
|
||||
determinado software, mas também (e principalmente) por voluntários.
|
||||
|
||||
E onde eu entro nisso tudo? Contribuo com Softwares Livres há bastante
|
||||
tempo, e já passei pelas duas situações: fui agraciado com o devido
|
||||
reconhecimento, e fui "esquecido" depois de me esforçar por alguma
|
||||
coisa. Felizmente, na esmagadora maioria dos casos o devido crédito
|
||||
foi-me dado, e não tenho do que reclamar. Mas recentemente passei pelo
|
||||
caso inverso, e senti na pele, mais uma vez, como é ruim não ser
|
||||
lembrado pelo trabalho que realizei, mesmo que isso tenha ocorrido por
|
||||
falta de comunicação e sem nenhuma maldade envolvida.
|
||||
|
||||
Tentei, com algum esforço, me colocar na posição de observador, e deixar
|
||||
o papel de "vítima" um pouco de lado. É uma situação muito complicada, e
|
||||
por qualquer ponto que eu tente olhar, não consigo ver uma solução
|
||||
diferente daquela que, de modo egoísta, elegi como a melhor para mim.
|
||||
|
||||
Sei o quanto me esforcei para conseguir colocar em movimento uma
|
||||
engrenagem nem sempre fácil de funcionar, que é a de um grupo de apoio
|
||||
ao movimento de Software Livre. Talvez você se lembre do
|
||||
[anúncio de fundação do grupo]({filename}/2012-12-15-criacao-libreplanet-sao-paulo.md), há mais de 1 ano
|
||||
atrás. E agora, depois de ter feito muita coisa pelo grupo, senti falta
|
||||
de ter um reconhecimento de alguém que considero bastante. Sei que, numa
|
||||
análise mais cuidadosa, a culpada disso foi a falta de comunicação. Mas
|
||||
às vezes não consigo deixar de pensar em como seria bom ter tido um
|
||||
pouco do gostinho de "fiz minha parte, e aquele cara reconhece isso!".
|
||||
|
||||
Enfim, coisas da vida. Esse post ia ficar bem maior, mas decidi cortar
|
||||
mais da metade dele porque não quero ficar no "chororô". O que importa,
|
||||
no final das contas, é o quanto **você** acha que está fazendo a coisa
|
||||
certa. No fim do dia, é você quem vai dormir tranquilo, sabendo que se
|
||||
esforçou bastante e que nada do que fez foi em vão. O resto, se vem ou
|
||||
não, é um complemento àquilo que você fez.
|
82
content/posts/a-era-da-mediocridade.md
Normal file
82
content/posts/a-era-da-mediocridade.md
Normal file
|
@ -0,0 +1,82 @@
|
|||
---
|
||||
date: 2013-06-29T00:00:00-05:00
|
||||
title: "A era da mediocridade"
|
||||
tags: [pt_br, rant, thoughts]
|
||||
---
|
||||
|
||||
Eles escrevem em paredes. Mas são digitais, dentro de muros ainda mais
|
||||
altos, controlados por uma ou mais empresas, tendo a ilusão de ótica de
|
||||
estarem se organizando por um bem maior, quando na verdade não passam de
|
||||
fantoches. Seja bem vindo ao planeta Terra, ano de 2013, século XXI. Vou
|
||||
falar um pouco sobre o que está acontecendo nesta realidade em que,
|
||||
fortuitamente ou não, estou inserido -- mesmo sem participar.
|
||||
|
||||
Este post não pretende ser nada além de um post. Não vai ter links,
|
||||
referências, nem nada. É só uma descarga mental.
|
||||
|
||||
Eric Hobsbawm provavelmente ficaria em dúvida se decidisse lançar mais
|
||||
um dos seus inestimáveis livros sobre Eras, que falasse sobre esse
|
||||
período que a humanidade está vivendo desde idos da década de 80 ou 90.
|
||||
A dúvida, superficialmente, seria simples: uma palavra que definisse,
|
||||
talvez não de modo unívoco mas ainda assim de maneira contundente, a
|
||||
dita Era. No entanto, se analisássemos a questão de modo um pouco mais
|
||||
profundo, veríamos que as opções para a tal "palavra" seriam muitas, e
|
||||
muito ruins.
|
||||
|
||||
Hobsbawm não está mais entre nós. Mas isso não deixa a dúvida menos
|
||||
incômoda. Vivemos várias eras em uma só, a da mediocridade (que foi a
|
||||
palavra escolhida como título do post, mas apenas porque foi a primeira
|
||||
que me veio à mente), a era do egoísmo e do individualismo, a era do
|
||||
descaso, a era da burrice coletiva, a era da falta de compromisso, da
|
||||
falta de interesse, da falta de amor, da manipulação, da vontade de ser
|
||||
manipulado.
|
||||
|
||||
Recentemente, no Brasil, estamos vendo manifestações populares pipocando
|
||||
a torto e a direito. Pessoas diversificadas dentro de uma mesma classe
|
||||
média saem às ruas com bandeiras, hinos e muito partidarismo disfarçado.
|
||||
As reivindicações são muitas, de esdrúxulas a absurdas, passando pelo
|
||||
generalismo e falta de argumentos. O que querem esses caras pintadas,
|
||||
esses brasileiríssimos filhos com máscara hollywoodiana gritando frases
|
||||
de propagandas de televisão? Essas pessoas instruídas a colocarem
|
||||
expressões em *hashtags* em cartolinas? Esses cidadãos exemplares e
|
||||
sociais nas redes?
|
||||
|
||||
Acordar, acordar mesmo, é uma expressão muito forte. Há que se tomar
|
||||
cuidado com o orgulho cego que nos lança luzes fortíssimas na cara a fim
|
||||
de nos fazer acreditar que daqui pra frente, tudo vai ser diferente. E
|
||||
essa falsa certeza absolutamente irrefutável, que é cada vez maior
|
||||
quanto mais nos enfiamos nesses meios de comunicação dessa era em que
|
||||
vivemos, é perigosa como qualquer outro dogma inquestionável.
|
||||
|
||||
De um lado, já sabíamos há muito tempo que um governo ditatorial como o
|
||||
dos Estados Unidos espiava e ainda espia tudo o que lhe convém. Já
|
||||
sabíamos, mas mesmo assim só vejo pessoas surpresas com essa cortina de
|
||||
fumaça (sim, existe um motivo maior pra essa história toda vir à tona)
|
||||
jogada sobre nós. Parece que precisavam de um nome, e PRISM caiu bem,
|
||||
lembra um pouco aqueles mega computadores de livros de ficção
|
||||
científica, medonhas máquinas que só sabem usar números pra matar. Então
|
||||
agora, já que temos um bom nome, todos aqueles que antes tinham se
|
||||
esquecido da espionagem agora dizem que "deixou de ser teoria (da
|
||||
conspiração)". Deixou? Já foi? Ou era você que não queria ver? Que se
|
||||
esquecia, porque convinha?
|
||||
|
||||
De outro, temos os rueiros, manifestantes que, imbuídos de um espírito
|
||||
que quer lutar por mais justiça e, consequentemente, liberdade, abusam
|
||||
de um Facebook (ou "face", praqueles que possuem a síndrome de
|
||||
Estocolmo) para organizarem coisas, para combinarem festas, para
|
||||
encontrarem parceiros, para viverem (ou terem essa ilusão). Fantoches,
|
||||
que se colam nas mãos de uma empresa, que não querem sair, criam
|
||||
dependência e subserviência, e assim acham que se tornam mais
|
||||
brasileiros.
|
||||
|
||||
No centro, o nada. O vazio. A coisa-nenhuma, amiga inseparável e
|
||||
confidente desses tempos que vivemos. Vácuo e zero se fundem num
|
||||
emaranhado de matéria e anti-matéria. Nenhuma energia se cria, toda
|
||||
energia é consumida e transformada nessa roda-viva teatral que nos leva
|
||||
de volta ao começo do fim. Todos os posts são perdidos, todos os *likes*
|
||||
são pedidos, todos na rua porque hoje é mais um dia como outro qualquer
|
||||
e diferente de tudo o que já foi.
|
||||
|
||||
Quando penso no que éramos e no que nos tornamos, choro por todos os
|
||||
motivos conhecidos e que ainda hei de conhecer. Estamos na descida, e eu
|
||||
ainda não vejo o fundo do vale.
|
94
content/posts/a-falta-de-uns-quaresmas.md
Normal file
94
content/posts/a-falta-de-uns-quaresmas.md
Normal file
|
@ -0,0 +1,94 @@
|
|||
---
|
||||
date: 2013-11-23T00:00:00-05:00
|
||||
title: "A falta de uns Quaresmas"
|
||||
tags: [pt_br, brasil, rant, politics]
|
||||
---
|
||||
|
||||
É preciso ter paciência pra viver nesse país. Vejo duas aglomerações que
|
||||
se juntam, misturadas ou não, nesse mar de reclamações.
|
||||
|
||||
A primeira, composta por pessoas que reclamam do Brasil, e querem sair
|
||||
do país de qualquer modo. Vislumbram-se diante de qualquer
|
||||
estrangeirismo, viajam para o exterior e voltam querendo viver lá
|
||||
(dizendo que querem aprender uma nova cultura, mas na verdade querendo
|
||||
fugir das terras tupiniquins), espumam de raiva quando falam dos
|
||||
problemas daqui, e, às vezes, sentenciam: esse país não tem jeito.
|
||||
|
||||
A segunda aglomeração, que à primeira vista parece se importar com a
|
||||
nação, é a dos que defendem algum partido político. Com os
|
||||
desdobramentos do episódio do mensalão, pipocam pessoas desse tipo. Pode
|
||||
parecer que elas estão interessadas no bem da população, ao
|
||||
concordar/discordar da condenação e prisão dos réus. Ledo engano.
|
||||
|
||||
Com o episódio do mensalão, e o desfecho que está acontecendo, é difícil
|
||||
não sentir-se enojado. Mas o motivo do nojo varia... Alguns, com o bico
|
||||
largo, enojam-se comemorando as prisões, independente da legalidade das
|
||||
mesmas, como se fosse um alívio ver que os presos não tiveram um
|
||||
tratamento muito digno. Outros, vermelhos (não só) de raiva, enojam-se
|
||||
com a falcatrua que supostamente está acontecendo desde o início do
|
||||
escândalo, e mais ainda com a prisão injusta (na visão dos mesmos) dos
|
||||
acusados pela corrupção. Já eu...
|
||||
|
||||
Eu me enojo de ver os nojos. É meio contraditório, mas eu me sinto no
|
||||
meio de um lamaçal, com porcos atirando sujeira de todos os lados. Às
|
||||
vezes, confesso, fica difícil distinguir quem é quem. E eu já vi cada
|
||||
tipo de sujeira...
|
||||
|
||||
De um lado, os petistas e simpatizantes agem, em sua maioria, como se os
|
||||
presos fossem santos sendo apedrejados em praça pública. Já vi pessoas
|
||||
dizendo que o que o PT fez não foi tão grave, ou que tudo não passa de
|
||||
mentira, ou que o PT apenas usou dinheiro privado em campanha (caixa 2,
|
||||
proibido por lei), e que isso não é muita coisa se comparado com o que o
|
||||
PSDB fez (mesmo sem saber dizer direito o que é que eles fizeram).
|
||||
|
||||
De outro lado, os tucanos e simpatizantes também agem, em sua maioria,
|
||||
de maneira completamente irracional. Justificam que o PSDB não tem
|
||||
corruptos, e que se tivesse, eles seriam expulsos. Dizem que o PT é o
|
||||
câncer que precisa ser extinto, e não se interessam em olhar pra coisas
|
||||
boas que eles fizeram, afinal, "se é do PT não pode ser bom". Usam o
|
||||
mensalão como argumento para qualquer discussão, não importando se estão
|
||||
certos ou não. E ainda têm coragem de dizer que, mesmo que o julgamento
|
||||
tenha sido uma farsa, os condenados ainda mereceriam estar presos.
|
||||
Querem justiça, mas do jeito deles.
|
||||
|
||||
Eu, que não sou fã de futebol, e abomino qualquer tipo de torcedor (seja
|
||||
desse esporte ou não), sinto-me dentro de um jogo, e não de um país. As
|
||||
torcidas não querem ver um jogo bonito, elas querem sangue. Todos querem
|
||||
que seu time ganhe, mesmo que pra isso seja necessário uma ajuda do
|
||||
árbitro. E nada mais importa caso meu time perca. Fui roubado, o técnico
|
||||
é uma porcaria, o campo estava ruim, tudo aconteceu pra que meu time
|
||||
fosse prejudicado.
|
||||
|
||||
Não se deixe enganar: essas pessoas, esses partidários, eles não estão
|
||||
preocupados com o bem do país. Eles preocupam-se com o bem do partido, e
|
||||
apenas isso. Se o partido faz o bem para o país, melhor. Se ele faz algo
|
||||
errado, bem, paciência, nem tudo é perfeito... Isso me lembra das
|
||||
manifestações que ocorreram em Junho/Julho. Na época, a maioria dos que
|
||||
saíram às ruas não queria bandeiras e nem vínculo com partidos. E,
|
||||
enquanto os petistas começaram a taxar isso de "fascismo", os tucanos se
|
||||
aproveitaram da situação e, tacitamente, infiltraram pessoas nos
|
||||
conglomerados. Na época, não estava claro pra mim quem estava certo ou
|
||||
errado, mas hoje, ao olhar pra trás, vejo que os dois partidos, mais uma
|
||||
vez, só estavam olhando pro próprio umbigo! Extremamente triste...
|
||||
|
||||
E, como se não bastasse, vejo-me cercado por pessoas que não valorizam
|
||||
seu próprio país. Óbvio que, para mim, esse tipo de pessoa tem **muito**
|
||||
em comum com o tipo que descrevi acima, e que vou chamar de
|
||||
"partidário". A pessoa que quer sair do país, por fora, pode parecer
|
||||
muito diferente do partidário. Ela, muitas vezes, nem partido político
|
||||
tem. Não acredita em muita coisa no Brasil, então prefere não se
|
||||
misturar. Além disso, em geral (mas nem sempre), ela tende a ficar
|
||||
alheia aos acontecimentos políticos, e só opina quando algo grande
|
||||
acontece, criticando indiscriminadamente qualquer político que esteja
|
||||
envolvido (mesmo sem provas). Uma outra característica é que, como
|
||||
atualmente virou moda ser conservador, essa pessoa tende a posicionar-se
|
||||
sempre contra a esquerda, porque, afinal, "comunismo é ruim e ponto".
|
||||
Mas não é de se estranhar que ela ache isso, afinal, estudar história
|
||||
não é muito o seu forte...
|
||||
|
||||
Essa pessoa não conhece muito a história do Brasil. Não aprecia coisas
|
||||
daqui, não ouve música brasileira, não vê ou sente o jeito que o
|
||||
brasileiro tem de lidar com problemas, e não se preocupa em conhecer
|
||||
detalhes da nossa história e, acima de tudo, compara pejorativamente
|
||||
qualquer coisa brasileira. Essa pessoa quer mudar do Brasil, e não se
|
||||
importa em mudar o Brasil.
|
0
content/posts/alienista.md
Normal file
0
content/posts/alienista.md
Normal file
29
content/posts/apresentacao-fedora-unesp-rio-claro.md
Normal file
29
content/posts/apresentacao-fedora-unesp-rio-claro.md
Normal file
|
@ -0,0 +1,29 @@
|
|||
---
|
||||
date: 2012-10-23T00:00:00-05:00
|
||||
title: "Apresentação na UNESP de Rio Claro/SP"
|
||||
tags: [fedora-planet, pt_br, fedora, gdb, presentation]
|
||||
---
|
||||
|
||||
Hoje, dia 23/10/2012, estarei na [UNESP de Rio
|
||||
Claro](http://www.rc.unesp.br/) para dar duas apresentações na [Semana
|
||||
da Computação](http://www.rc.unesp.br/seccomp/?p=Programacao).
|
||||
|
||||
A primeira palestra será sobre o [Projeto
|
||||
Fedora](http://projetofedora.org/wiki). Vai ser a primeira vez que
|
||||
falarei sobre o projeto depois de ter me tornado
|
||||
[Embaixador](http://fedoraproject.org/wiki/Ambassadors) do Fedora no
|
||||
Brasil. Confesso que estou um pouco apreensivo, mas escolhi slides muito
|
||||
bons feitos pelo [Paul W.
|
||||
Frields](http://fedoraproject.org/wiki/User:Pfrields), ex-líder do
|
||||
Projeto e bastante competente em suas apresentações. Pretendo fazer um
|
||||
relato sobre a palestra na quarta-feira.
|
||||
|
||||
A segunda apresentação será sobre o [GDB](http://www.gnu.org/s/gdb).
|
||||
Essa apresentação vai ser mais um *crash course* sobre como utilizar a
|
||||
ferramenta, e os slides estão disponíveis em
|
||||
<https://github.com/sergiodj/gdb-unicamp2011>.
|
||||
|
||||
Espero que ambas as palestras sejam bem recebidas pelo público! Volto
|
||||
depois pra contar como foi :-).
|
||||
|
||||
Abraços.
|
22
content/posts/aqueles-que-se-foram.md
Normal file
22
content/posts/aqueles-que-se-foram.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
date: 2020-12-22T00:00:00-05:00
|
||||
title: "Aqueles que se foram"
|
||||
tags: [pt_br, philosophy, people, politics, thoughts]
|
||||
---
|
||||
|
||||
Quando, na calada da noite, nos deitamos para dormir, somos assaltados
|
||||
por um pensamento que começa como uma simples conjectura, mas que logo
|
||||
tranforma-se num martírio sem fim.
|
||||
|
||||
O que faremos quando voltarmos à rotina? Como aturaremos o olhar que
|
||||
nos fulmina quando nos encaramos no espelho? Aquela pessoa que viveu,
|
||||
viu e partilhou de momentos difíceis de explicar; aquela alma que já
|
||||
não se diz pura tampouco inocente; aquele brilho apagado que não nos
|
||||
mostra caminho algum... Tudo isso, todas essas coisas serão
|
||||
características absolutamente insignificantes perto da imensidão do
|
||||
vazio que estende sobre nós.
|
||||
|
||||
Aos que ficaram, resta resignificar a esperança e tentar fazer desse
|
||||
sinal de menos um travessão para um possível — mas improvável
|
||||
— recomeço. Viver, tentando não ver o que fizeram nesses meses
|
||||
de descaso e loucura.
|
0
content/posts/bothered.md
Normal file
0
content/posts/bothered.md
Normal file
108
content/posts/brasil-em-conserva.md
Normal file
108
content/posts/brasil-em-conserva.md
Normal file
|
@ -0,0 +1,108 @@
|
|||
---
|
||||
date: 2014-11-15T00:00:00-05:00
|
||||
title: "Brasil em Conserva"
|
||||
tags: [pt_br, thoughts, politics]
|
||||
---
|
||||
|
||||
As eleições brasileiras já acabaram, e talvez eu devesse me sentir mais
|
||||
à vontade pra falar do assunto do que realmente me sinto. Não sei, mas
|
||||
tenho a impressão de que, dessa vez, as coisas aconteceram de um modo um
|
||||
pouco diferente do que o de costume. Aliás, não acho que tenha sido
|
||||
“coisa de momento”, e tampouco acho que seja uma exclusividade
|
||||
brasileira: as pessoas estão ficando mais conservadoras, mais
|
||||
“endireitadas”. E eu vou tentar explicar, talvez pretensiosamente, por
|
||||
que eu não acho que isso seja bom.
|
||||
|
||||
Nunca votei em candidato algum, em nenhuma eleição até hoje. Sempre me
|
||||
vi descrente das propostas apresentadas, ainda mais quando percebia que
|
||||
aqueles que davam rostos às propostas eram basicamente os mesmos. Por
|
||||
isso, nas primeiras eleições em que pude “exercer a cidadania em sua
|
||||
plenitude” (uma mentira deslavada contada pela imprensa, que talvez
|
||||
mereça outro post), lá no longínquo ano de 2002, decidi por anular meus
|
||||
votos. Depois disso, mudei-me de cidade, e não transferi meu título de
|
||||
eleitor porque, no final das contas, iria acabar votando nulo novamente.
|
||||
No entanto, e de uma maneira aparentemente contraditória, sempre
|
||||
interessei-me por política.
|
||||
|
||||
Pode mesmo parecer contradição, mas eu nunca entendi como existiam
|
||||
pessoas (e são muitas!) que não queriam saber de política, e do que
|
||||
estava acontecendo no próprio país. Obviamente, essas mesmas pessoas em
|
||||
geral são as primeiras que reclamam do governo, ou que criticam um
|
||||
político, mesmo sem saber exatamente o porquê de fazerem isso. E quando
|
||||
vamos falar sobre política com elas, aquela velha máxima “Política não
|
||||
se discute!” vem à tona, e você de repente perde qualquer motivação para
|
||||
continuar conversando. Mas mesmo com toda essa minha “descrença-crente”
|
||||
com a política, nessas últimas eleições eu tive uma enorme vontade de
|
||||
votar.
|
||||
|
||||
Meu voto não iria para o Aécio. E no primeiro turno, provavelmente eu
|
||||
não votasse em nenhum dos candidatos, como sempre fiz. Mas no segundo
|
||||
turno, senti que eu não podia deixar de ajudar a Dilma a ser reeleita,
|
||||
mesmo que isso não necessariamente signifique que eu a apóie e concorde
|
||||
com tudo o que seu governo tem feito. Mas, usando uma outra velha
|
||||
máxima, “dos males, o menor”.
|
||||
|
||||
Considero-me uma pessoa com fortes tendências para as questões sociais.
|
||||
Não à toa defendo o Software Livre com empenho, porque acredito que se
|
||||
olharmos para todos, avançamos mais. Daí deriva minha antipatia pela
|
||||
maioria das causas individualistas, por acreditar que, apesar de ser
|
||||
totalmente plausível admitir que o ser humano é egoísta, não acho que
|
||||
devamos nos acomodar com essa constatação. E isso vai de encontro com o
|
||||
que o governo da Dilma (e o antigo governo do Lula) tem feito para o
|
||||
Brasil: avançar nas causas sociais. O crescimento que o país
|
||||
experimentou nos últimos anos foi, sim, muito perceptível para mim. E,
|
||||
quando tive a oportunidade de visitar o Nordeste brasileiro há alguns
|
||||
anos, pude ver que a situação por lá, apesar de ainda não ser a ideal,
|
||||
também melhorou bastante. Ou seja, o bolo finalmente está sendo dividido
|
||||
mais igualmente para todos, ainda que falte muito para que a divisão
|
||||
possa ser considerada boa.
|
||||
|
||||
Mas não foi só na área social que eu vi mudanças. Apesar de já estar
|
||||
nascido na época da inflação galopante da década de 1980, não tenho uma
|
||||
noção muito grande do que era viver naquela época. Eu era criança, e
|
||||
crianças não se preocupam com o preço das coisas. No entanto, lembro-me
|
||||
de que a vida, naquela época, não era fácil. O planejamento familiar era
|
||||
tarefa ingrata, porque como planejar se você não sabe o preço das coisas
|
||||
amanhã? E a desigualdade social era muito mais acentuada, porque (por
|
||||
exemplo) era impossível pensar em viajar de avião, mesmo para uma
|
||||
família de classe média (Europa, então, era outro mundo). Mas daí veio o
|
||||
plano Real, e as coisas melhoraram... E obviamente muito do crédito por
|
||||
essa melhora vai para o ex-presidente Fernando Henrique Cardoso e por
|
||||
sua política econômica que, pelo menos no começo do seu governo,
|
||||
conseguiu estabilizar as coisas de forma louvável. Mas, como pôde-se ver
|
||||
depois, Lula refinou a economia do antigo governo, e atrelou-a ao lado
|
||||
social, que por tanto tempo ficou esquecido.
|
||||
|
||||
Um outro argumento que ouço e vejo muito, principalmente por aqueles que
|
||||
são anti-petistas declarados, é o da corrupção. Confesso que não entendo
|
||||
o motivo desse ódio tão grande a apenas uma parcela do governo
|
||||
brasileiro (o PT não toma conta do Brasil, ao contrário do que muita
|
||||
gente insiste em dizer). Esquecem-se que denúncias de corrupção sempre
|
||||
existiram, em todos os nossos governos, e que é contra ela (a corrupção)
|
||||
que devemos lutar, ao invés de escolhermos um partido específico? Quando
|
||||
escolhemos um alvo, estamos, de certa forma, dando salvo-conduto para os
|
||||
outros que cometem o mesmo crime. Para mim, quando ouço um “argumento”
|
||||
desse tipo, a vontade de discutir cai exponencialmente.
|
||||
|
||||
Infelizmente, o argumento anti-petista passa por tantos outros absurdos
|
||||
(Venezuela, Cuba, bolivarianismo, comunismo), e é tão estúpido, que
|
||||
parece-me que a pré-condição para ser ouvinte dele é estar imerso na
|
||||
completa ignorância, principalmente a respeito desses termos. Se você
|
||||
souber o que é bolivarianismo ou comunismo, por exemplo, você já não
|
||||
pode ouvir o argumento, porque aí não vai acreditar nas conclusões. É
|
||||
algo tão impressionante e infantil que, novamente, fica difícil ter
|
||||
qualquer tipo de conversa com pessoas que repetem essas falácias como se
|
||||
fossem obviedades que estão aí, para qualquer um que queira vê-las.
|
||||
|
||||
Todo esse tipo de conversa, ao meu ver, leva a apenas uma conclusão: o
|
||||
conservadorismo está se alastrando no mundo. No Brasil, ele está tomando
|
||||
proporções perigosamente grandes. Às vezes penso qual seria a melhor
|
||||
maneira de combatê-lo: educar não me parece ser uma solução muito
|
||||
efetiva, ainda mais quando estamos falando de pessoas que possuem uma
|
||||
condição social mais favorável, e que julgam-se instruídas e informadas.
|
||||
Por enquanto, a solução tem sido ignorar o problema, o que também não
|
||||
vem surtindo efeitos práticos, haja visto a escalada dos conservadores
|
||||
nessas últimas eleições. Contraditoriamente, talvez a solução fosse
|
||||
parar de lutar e deixar a água correr. Parece-me às vezes que a
|
||||
humanidade precisa mesmo repetir seus erros de modo cíclico, para
|
||||
reaprender o motivo pelo qual eles já foram corrigidos outras vezes.
|
39
content/posts/bye-bye-juvia.md
Normal file
39
content/posts/bye-bye-juvia.md
Normal file
|
@ -0,0 +1,39 @@
|
|||
---
|
||||
date: 2013-02-10T00:00:00-05:00
|
||||
title: "Bye bye, Juvia!"
|
||||
tags: [comment-system, heads-up, en_us]
|
||||
---
|
||||
|
||||
Once upon a time, there was a guy who cared about what other people
|
||||
could say about what he was writing on his blog. Well, like all fairy
|
||||
tales, this one also has a happy ending!
|
||||
|
||||
In case you didn't make the connection, the "guy" is me `:-)`. And also
|
||||
in case you didn't notice: my blog does not have a comment system
|
||||
anymore. My reasoning for that is simple, and I can make a small list
|
||||
with the major points that made me take this decision:
|
||||
|
||||
1. Juvia (the comment system I was using) is written in Ruby, which
|
||||
in itself is enough to drop it entirely (I really don't understand
|
||||
how it is modeled, and I spent quite some time trying to figure
|
||||
out how to hack it);
|
||||
2. I had to run Passenger on my Apache, which was eating lots of RAM
|
||||
(I only have 2GB of RAM in my personal home server, which is where
|
||||
I was running Juvia);
|
||||
3. I had to run MySQL in order to store the comments (the other
|
||||
option was PostgreSQL), which was also eating lots of RAM;
|
||||
4. I want to use my personal home server for other things `:-)`.
|
||||
|
||||
I probably could list a few more reasons, but I think you get the
|
||||
picture. Before dropping the comment system, I spent some days
|
||||
thinking about whether the blog readers would like the decision or
|
||||
not, but after all this time I came up with this: if you, dear reader,
|
||||
want to send me your opinion about what I write here, you can easily
|
||||
send me an e-mail (see the "[About](/about/)" page for my
|
||||
address), and I will happily reply to whatever you have to say. And if
|
||||
I notice that the blog is losing by not having interesting
|
||||
discussions, I can easily bring the comment system back online (though
|
||||
I'd like to find another solution that consumes less memory).
|
||||
|
||||
Anyway, that's it. I'll make another post about something interesting
|
||||
soon, I promise. Stay tunned!
|
51
content/posts/combater.md
Normal file
51
content/posts/combater.md
Normal file
|
@ -0,0 +1,51 @@
|
|||
---
|
||||
date: 2015-06-28T00:00:00-05:00
|
||||
title: "Combater"
|
||||
tags: [pt_br, rant, politics, free-software]
|
||||
---
|
||||
|
||||
Às vezes, é preciso combater. É preciso dizer que o outro está errado,
|
||||
que ele está falando besteira sobre um assunto que não conhece (e não
|
||||
quer conhecer). É preciso dizer o que é ético, o que é certo. É preciso
|
||||
discernir tudo o que é errado e anti-ético, imoral, e que faz mal. É
|
||||
preciso combater o ódio, muitas vezes com amor, outras tantas com força
|
||||
e integridade.
|
||||
|
||||
É preciso falar praquele ignorante que ele não sabe o que é Software
|
||||
Livre. É preciso dizer que o Software Livre é muito maior do que o GNU,
|
||||
muito maior do que uma pessoa ou do que suas declarações. É preciso
|
||||
dizer que o ignorante tornou-se troll. É preciso dizer que ele não sabe
|
||||
o que fala, e que deve calar-se. É preciso deixar que ele viva sua
|
||||
adolescência conturbada e por vezes medíocre, mas tomando cuidado para
|
||||
que isso não influencie outras pessoas ignorantes a tornarem-se trolls
|
||||
também. É preciso que esse troll saia do Twitter, saia do
|
||||
BR-\[GNU/\]Linux, saia dos fóruns movidos a coisas proprietárias; ou
|
||||
talvez seja preciso que ele **fique** lá, destilando seu ódio, veneno e
|
||||
ignorância para seus semelhantes.
|
||||
|
||||
É preciso combater o liberalismo de fachada, que é um veículo para o
|
||||
ódio. É preciso combater o ódio. É preciso combater a ignorância,
|
||||
novamente. É preciso combater o reacionarismo disfarçado de “livre
|
||||
mercado”, é preciso combater a falta de bom senso que ocorre quando se
|
||||
generaliza um partido político por um comportamento, é preciso combater
|
||||
o comportamento, é preciso fazer progresso social sempre, é preciso
|
||||
parar de se importar tanto com aqueles que não se importam.
|
||||
|
||||
É preciso combater o pastor ignorante. É preciso combater a ignorância,
|
||||
uma terceira vez. É preciso combater a “trollagem” do pastor, dos fiéis
|
||||
e dos simpatizantes a eles. É preciso combater a onda de “radicalismo
|
||||
conservador” que aflige a todos. É preciso combater a falta de amor ao
|
||||
próximo e o excesso de arrogância. É preciso combater as falsas palavras
|
||||
divinas, as falsas vontades de uma entidade, as falsas aglomerações
|
||||
públicas em torno de um erro.
|
||||
|
||||
É preciso combater o apresentador idiota, ignorante e presunçoso. É
|
||||
preciso combater o que se destila de ódio naquele país, porque nem todos
|
||||
têm um soro contra veneno de cobra criada. É preciso combater a
|
||||
ignorância, novamente, porque ela é o caminho mais fácil para o ódio, e
|
||||
o ódio retroalimenta a ignorância num ciclo difícil de ser quebrado. É
|
||||
preciso ensinar a aprender, e aprender a ensinar. É preciso combater a
|
||||
preguiça, essa desculpa tão usada e repetida que chega a dar preguiça de
|
||||
combatê-la. É preciso sair do sofá, mas não para ir para o Twitter ou
|
||||
Facebook; é preciso sair do sofá e ser crítico o suficiente para saber o
|
||||
que se deve fazer, porque não sou eu quem vou falar.
|
26
content/posts/comment-system-off.md
Normal file
26
content/posts/comment-system-off.md
Normal file
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
date: 2012-11-15T00:00:00-05:00
|
||||
title: "HEADS UP: Comment system is offline temporarily"
|
||||
tags: [en_us, heads-up, comment-system]
|
||||
---
|
||||
|
||||
Hi there. This little post is just a heads about an issue that I am
|
||||
facing with the comment system that I run. Unfortunately, you will not
|
||||
be able to post comments on the blog until, at least, next Wednesday
|
||||
(November 21).
|
||||
|
||||
For those of you wondering which comment system I use, it is called
|
||||
[Juvia](https://github.com/phusion/juvia). Due to privacy concerns, I
|
||||
chose not to use anything like [Disqus](http://disqus.com/) because it
|
||||
tracks you and your comments (read their privacy policy if you want more
|
||||
details). On the other hand, Juvia runs on my private personal server,
|
||||
and does not collect any kind of personal information when you make a
|
||||
comment. The cons of this approach is that when my personal server is
|
||||
down (like now), the blog doesn't have comments. But that's a minor
|
||||
price to pay for the respect of privacy, I think.
|
||||
|
||||
Anyway, I hope to have the comments back online next week. Until there,
|
||||
I plan to continue making posts here, so save your comments for some
|
||||
time!
|
||||
|
||||
Thanks!
|
106
content/posts/criacao-libreplanet-sao-paulo.md
Normal file
106
content/posts/criacao-libreplanet-sao-paulo.md
Normal file
|
@ -0,0 +1,106 @@
|
|||
---
|
||||
date: 2012-12-15T00:00:00-05:00
|
||||
title: "[ANÚNCIO] Criação do grupo LibrePlanet São Paulo!"
|
||||
tags: [pt_br, free-software, libreplanet, fedora-planet, announce]
|
||||
---
|
||||
|
||||
Olá a todos!
|
||||
|
||||
Finalmente consegui um pouco de tempo na minha agenda, e resolvi
|
||||
escrever no blog para anunciar a criação do grupo [LibrePlanet São
|
||||
Paulo](http://libreplanet.org/wiki/Group:LibrePlanet_São_Paulo)!
|
||||
|
||||
O que é o LibrePlanet
|
||||
---------------------
|
||||
|
||||
O projeto [LibrePlanet](http://libreplanet.org) teve início em 2006,
|
||||
durante a reunião de membros da [FSF](http://www.fsf.org/) (a Free
|
||||
Software Foundation). Ele foi criado para ajudar a organizar maneiras de
|
||||
levar o movimento de Software Livre ao conhecimento da população em
|
||||
geral.
|
||||
|
||||
Os grupos são organizados geograficamente, e cada um é responsável por
|
||||
definir metas e estratégias visando fomentar o Software Livre na região.
|
||||
É importante deixar claro: o objetivo é trabalhar em prol do **Software
|
||||
Livre**, e **não** do open source. Para saber mais a respeito da
|
||||
definição de Software Livre, recomendo que leia [este
|
||||
artigo](http://www.gnu.org/philosophy/free-sw.pt-br.html).
|
||||
|
||||
O surgimento do LibrePlanet São Paulo
|
||||
-------------------------------------
|
||||
|
||||
Essa história é um pouco longa, mas vou tentar resumir :-).
|
||||
|
||||
Tudo começou quando eu, [Ricardo
|
||||
Panaggio](https://twitter.com/panaggio), [Ivan S.
|
||||
Freitas](http://isf.sdf.org/about.html) e [Raniere Gaia
|
||||
Silva](http://www.ime.unicamp.br/~ra092767/) começamos a trocar alguns
|
||||
e-mails sobre assuntos como privacidade, software livre, soluções e
|
||||
serviços livres, etc. Eu e o Panaggio já estávamos nos sentindo muito
|
||||
insatisfeitos com os rumos que um grupo local, teoricamente "pró
|
||||
software livre", estava tomando (como quase tudo hoje em dia, o nome
|
||||
"software livre" está lá simplesmente porque ninguém se tocou de que
|
||||
devia ser "open source" ainda...). E essa insatisfação já vinha nos
|
||||
fazendo querer criar um novo grupo, fiel à ideologia do Software Livre,
|
||||
no qual pudéssemos dar nossas opiniões sem medo de sermos esmagados por
|
||||
uma maioria que não se importa com "essas coisas".
|
||||
|
||||
Bem, começamos a conversar, e logo o Ivan e o Raniere deram sinais de
|
||||
que eles topariam participar do grupo, sem problemas. Portanto, o solo
|
||||
já estava fértil para novas idéias :-).
|
||||
|
||||
Um dia, eu acordei e vi na minha INBOX uma mensagem do Raniere dizendo
|
||||
que havia encontrado algo sobre um projeto interessante, o LibrePlanet,
|
||||
na Internet. Foi a faísca que faltava pra começar a movimentação!
|
||||
Recordei-me de que eu já havia conversado com o [Matt
|
||||
Lee](http://matt.lee.name/), também da FSF, sobre o LibrePlanet, e
|
||||
depois de uma rápida busca na wiki do projeto, vi que ainda não havia
|
||||
nenhum grupo brasileiro. Então, depois de alguma conversa interna,
|
||||
decidimos criar um grupo para o Estado de São Paulo.
|
||||
|
||||
Hoje, pouco mais de 2 semanas depois da criação, contamos com 10 membros
|
||||
cadastrados na Wiki, e aproximadamente 7 membros ativos no nosso canal
|
||||
de IRC. Também temos uma lista de discussão, e já estamos começando a
|
||||
conversar sobre possíveis projetos para 2013.
|
||||
|
||||
Como você pode fazer parte do grupo?
|
||||
------------------------------------
|
||||
|
||||
É simples! Siga os seguintes passos:
|
||||
|
||||
1. Entre na nossa
|
||||
[Wiki](http://libreplanet.org/wiki/Group:LibrePlanet_São_Paulo), e
|
||||
leia todas as informações presentes lá antes de qualquer coisa!
|
||||
2. Depois disso, efetue a criação de seu usuário na FSF, indo até
|
||||
[este link de
|
||||
cadastro](https://my.fsf.org/associate/join/am_register_form1) e
|
||||
preenchendo as informações. Repare que você **não** precisa
|
||||
tornar-se membro da FSF (os membros são pessoas que contribuem
|
||||
financeiramente com a Fundação), mas se você puder, iria ser bem
|
||||
legal :-).
|
||||
3. Ok, agora que você já possui um usuário, efetue o login na Wiki do
|
||||
LibrePlanet, e crie sua página pessoal lá. Para isso, vá até [este
|
||||
link](http://libreplanet.org/wiki/Special:MyPage), clique no link
|
||||
**Edit**, e insira algumas informações sobre lá. Se quiser,
|
||||
utilize [minha página
|
||||
pessoal](http://libreplanet.org/wiki/User:Sergiodj) como exemplo.
|
||||
É importante que você insira, no final de todo o conteúdo, a
|
||||
seguinte linha: `{% raw %}{{user SP}}{% endraw %}`. Ele faz com que você passe a
|
||||
pertencer ao grupo LibrePlanet de São Paulo.
|
||||
4. Agora, é importante que você também efetue sua inscrição na nossa
|
||||
lista de discussão. Vá até [esta página de
|
||||
inscrição](https://lists.libreplanet.org/mailman/listinfo/libreplanet-br-sp)
|
||||
e preencha as informações necessárias! Também recomendamos
|
||||
fortemente que você envie uma mensagem de apresentação para
|
||||
a lista. Nada formal, só para termos uma idéia do tamanho do
|
||||
grupo!
|
||||
5. Ufa, último passo! Se você utiliza IRC e frequenta a rede
|
||||
Freenode, entre no nosso canal: `#lp-br-sp`! É lá que a maior
|
||||
parte das discussões acontece, então seria muito legal se você
|
||||
também pudesse participar delas!
|
||||
|
||||
Acho que é isso :-). Se você ainda tiver alguma dúvida sobre qualquer
|
||||
assunto tratado neste post (objetivos do grupo, inscrição, etc), ou se
|
||||
quiser fazer algum comentário, sinta-se à vontade!
|
||||
|
||||
Saudações livres!
|
242
content/posts/debuginfod-for-debian.md
Normal file
242
content/posts/debuginfod-for-debian.md
Normal file
|
@ -0,0 +1,242 @@
|
|||
---
|
||||
date: 2021-03-06T00:00:00-05:00
|
||||
title: "A debuginfod service for Debian"
|
||||
tags: [en_us, debian, free-software, debuginfod, gdb]
|
||||
---
|
||||
|
||||
Hi there. Long time no write!
|
||||
|
||||
This last Tuesday, February 23, 2021, I made an [announcement at
|
||||
debian-devel-announce](https://lists.debian.org/debian-devel-announce/2021/02/msg00003.html)
|
||||
about a new service that I configured for Debian: [a debuginfod
|
||||
server](https://debuginfod.debian.net).
|
||||
|
||||
This post serves two purposed: pay the promise I made to [Jonathan
|
||||
Carter](https://jonathancarter.org/) that I would write a blog post
|
||||
about the service, and go into a bit more detail about it.
|
||||
|
||||
What's debuginfod?
|
||||
------------------
|
||||
|
||||
From the announcement above:
|
||||
|
||||
debuginfod is a new-ish project whose purpose is to serve
|
||||
ELF/DWARF/source-code information over HTTP. It is developed under the
|
||||
elfutils umbrella. You can find more information about it here:
|
||||
|
||||
https://sourceware.org/elfutils/Debuginfod.html
|
||||
|
||||
In a nutshell, by using a debuginfod service you will not need to
|
||||
install debuginfo (a.k.a. dbgsym) files anymore; the symbols will be
|
||||
served to GDB (or any other debuginfo consumer that supports debuginfod)
|
||||
over the network. Ultimately, this makes the debugging experience much
|
||||
smoother (I myself never remember the full URL of our debuginfo
|
||||
repository when I need it).
|
||||
|
||||
Perhaps not everybody knows this, but until last year I was a Debugger
|
||||
Engineer (a.k.a. *GDB hacker*) at Red Hat. I was not involved with
|
||||
the creation of `debuginfod` directly, but I witnessed discussions
|
||||
about "*having way to serve debug symbols over the internet*" multiple
|
||||
times during my tenure at the company. So this is not a new idea, and
|
||||
it's not even the first implementation, but it's the first time that
|
||||
some engineers actually got their hands dirty enough to have something
|
||||
concrete in hands.
|
||||
|
||||
The idea to set up a `debuginfod` server for Debian started to brew
|
||||
after 2019's [GNU Tools
|
||||
Cauldron](https://gcc.gnu.org/wiki/cauldron2019), but as usual several
|
||||
things happened in $LIFE (including a global pandemic and leaving Red
|
||||
Hat and starting a completely different job at Canonical) which had
|
||||
the effect of shuffling my TODO list "a little".
|
||||
|
||||
Benefits for Debian
|
||||
-------------------
|
||||
|
||||
Debian unfortunately is lagging behind when it comes to offer its
|
||||
users a good debugging experience. Before the advent of our
|
||||
`debuginfod` server, if you wanted to debug a package in Debian you
|
||||
would need to:
|
||||
|
||||
1. Add the `debian-debug` apt repository to your
|
||||
`/etc/apt/sources.list`.
|
||||
|
||||
2. Install the `dbgsym` package that contains the debug symbols for
|
||||
the package you are debugging. Note that the version of the
|
||||
`dbgsym` package needs to be **exactly** the same as the version of
|
||||
the package you want to debug.
|
||||
|
||||
3. Figure out which shared libraries your package uses and install the
|
||||
`dbgsym` packages for all of them. Arguably, this step is optional
|
||||
but recommended if you would like to perform a more in-depth
|
||||
debugging.
|
||||
|
||||
4. Download the package source, possibly using `apt source` or some
|
||||
equivalent command.
|
||||
|
||||
5. Open GDB, **and make sure you adjust the source paths properly**
|
||||
(more below). This can be non-trivial.
|
||||
|
||||
6. Finally, debug the program.
|
||||
|
||||
Now, with the new service, you will be able to start from step **4**,
|
||||
without having to mess with `sources.list`, `dbgsym` packages and
|
||||
version mismatches.
|
||||
|
||||
The package source
|
||||
------------------
|
||||
|
||||
It is important to mention an existing (but perhaps not well-known)
|
||||
limitation of our debugging experience in Debian: the need to manually
|
||||
download the source packages **and** adjust GDB to properly find them
|
||||
(see step **4** above). `debuginfod` is able to serve source code as
|
||||
well, but our Debian instance is not doing that at the moment.
|
||||
|
||||
Debian does not provide a patched source tree that is ready to be
|
||||
consumed by GDB nor `debuginfod` (for a good example of a distribution
|
||||
that does that, see Fedora's `debugsource` packages). Let me show you
|
||||
an example of debugging GDB itself (using `debuginfod`) on Debian:
|
||||
|
||||
```
|
||||
$ HOME=/tmp DEBUGINFOD_URLS=https://debuginfod.debian.net gdb -q gdb
|
||||
Reading symbols from gdb...
|
||||
Downloading separate debug info for /tmp/gdb...
|
||||
Reading symbols from /tmp/.cache/debuginfod_client/02046bac4352940d19d9164bab73b2f5cefc8c73/debuginfo...
|
||||
(gdb) start
|
||||
Temporary breakpoint 1 at 0xd18e0: file /build/gdb-Nav6Es/gdb-10.1/gdb/gdb.c, line 28.
|
||||
Starting program: /usr/bin/gdb
|
||||
Downloading separate debug info for /lib/x86_64-linux-gnu/libreadline.so.8...
|
||||
Downloading separate debug info for /lib/x86_64-linux-gnu/libz.so.1...
|
||||
Downloading separate debug info for /lib/x86_64-linux-gnu/libncursesw.so.6...
|
||||
Downloading separate debug info for /lib/x86_64-linux-gnu/libtinfo.so.6...
|
||||
Downloading separate debug info for /tmp/.cache/debuginfod_client/d6920dbdd057f44edaf4c1fbce191b5854dfd9e6/debuginfo...
|
||||
[Thread debugging using libthread_db enabled]
|
||||
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
|
||||
Downloading separate debug info for /lib/x86_64-linux-gnu/libexpat.so.1...
|
||||
Downloading separate debug info for /lib/x86_64-linux-gnu/liblzma.so.5...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libbabeltrace.so.1...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libbabeltrace-ctf.so.1...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libipt.so.2...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libmpfr.so.6...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libsource-highlight.so.4...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libxxhash.so.0...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libdebuginfod.so.1...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libstdc++.so.6...
|
||||
Downloading separate debug info for /lib/x86_64-linux-gnu/libgcc_s.so.1...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0...
|
||||
Downloading separate debug info for /tmp/.cache/debuginfod_client/dbfea245d26065975b4084f4e9cd2d83c65973ee/debuginfo...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libdw.so.1...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libelf.so.1...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libuuid.so.1...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libgmp.so.10...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libboost_regex.so.1.74.0...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4...
|
||||
Downloading separate debug info for /lib/x86_64-linux-gnu/libbz2.so.1.0...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libicui18n.so.67...
|
||||
Downloading separate debug info for /tmp/.cache/debuginfod_client/acaa831dbbc8aa70bb2131134e0c83206a0701f9/debuginfo...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libicuuc.so.67...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libnghttp2.so.14...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libidn2.so.0...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/librtmp.so.1...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libssh2.so.1...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libpsl.so.5...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libnettle.so.8...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libgnutls.so.30...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1...
|
||||
Downloading separate debug info for /tmp/.cache/debuginfod_client/39739740c2f8a033de95c1c0b1eb8be445610b31/debuginfo...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libunistring.so.2...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libhogweed.so.6...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libgcrypt.so.20...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libp11-kit.so.0...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libtasn1.so.6...
|
||||
Downloading separate debug info for /lib/x86_64-linux-gnu/libcom_err.so.2...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libsasl2.so.2...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1...
|
||||
Downloading separate debug info for /lib/x86_64-linux-gnu/libgpg-error.so.0...
|
||||
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libffi.so.7...
|
||||
Downloading separate debug info for /lib/x86_64-linux-gnu/libkeyutils.so.1...
|
||||
|
||||
Temporary breakpoint 1, main (argc=1, argv=0x7fffffffebf8) at /build/gdb-Nav6Es/gdb-10.1/gdb/gdb.c:28
|
||||
28 /build/gdb-Nav6Es/gdb-10.1/gdb/gdb.c: Directory not empty.
|
||||
(gdb) list
|
||||
23 in /build/gdb-Nav6Es/gdb-10.1/gdb/gdb.c
|
||||
(gdb)
|
||||
```
|
||||
|
||||
(See all those `Downloading separate debug info for...` lines? Nice!)
|
||||
|
||||
As you can see, when we try to `list` the contents of the file we're
|
||||
in, nothing shows up. This happens because GDB doesn't know where the
|
||||
file is. So you have to tell it. In this case, it's relatively easy:
|
||||
you see that the GDB package's build directory is
|
||||
`/build/gdb-Nav6Es/gdb-10.1/`. When you `apt source gdb`, you will
|
||||
have a directory called `$PWD/gdb-10.1/` containing the full source of the
|
||||
package. Notice that the last directory's name in both paths is the
|
||||
same, so in this case we can use GDB's `set substitute-path` command
|
||||
do the job for us (in this example `$PWD` is `/tmp/`):
|
||||
|
||||
```
|
||||
$ HOME=/tmp DEBUGINFOD_URLS=https://debuginfod.debian.net gdb -q gdb
|
||||
Reading symbols from gdb...
|
||||
Reading symbols from /tmp/.cache/debuginfod_client/02046bac4352940d19d9164bab73b2f5cefc8c73/debuginfo...
|
||||
(gdb) set substitute-path /build/gdb-Nav6Es/ /tmp/
|
||||
(gdb) start
|
||||
Temporary breakpoint 1 at 0xd18e0: file /build/gdb-Nav6Es/gdb-10.1/gdb/gdb.c, line 28.
|
||||
Starting program: /usr/bin/gdb
|
||||
[Thread debugging using libthread_db enabled]
|
||||
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
|
||||
|
||||
Temporary breakpoint 1, main (argc=1, argv=0x7fffffffebf8) at /build/gdb-Nav6Es/gdb-10.1/gdb/gdb.c:28
|
||||
warning: Source file is more recent than executable.
|
||||
28 memset (&args, 0, sizeof args);
|
||||
(gdb) list
|
||||
23 int
|
||||
24 main (int argc, char **argv)
|
||||
25 {
|
||||
26 struct captured_main_args args;
|
||||
27
|
||||
28 memset (&args, 0, sizeof args);
|
||||
29 args.argc = argc;
|
||||
30 args.argv = argv;
|
||||
31 args.interpreter_p = INTERP_CONSOLE;
|
||||
32 return gdb_main (&args);
|
||||
(gdb)
|
||||
```
|
||||
|
||||
Much better, huh? The problem is that this process is manual, and
|
||||
will change depending on how the package you're debugging was built.
|
||||
|
||||
What can we do to improve this? What I personally would like to see
|
||||
is something similar to what the Fedora project already does: create a
|
||||
new debug package which will contain the full, patched source package.
|
||||
This would mean changing our building infrastructure and possibly
|
||||
other somewhat complex things.
|
||||
|
||||
Using the service (by default)
|
||||
-----------------------------
|
||||
|
||||
At the time of this writing, I am working on an `elfutils` [Merge
|
||||
Request](https://salsa.debian.org/toolchain-team/elfutils/-/merge_requests/2)
|
||||
whose purpose is to implement a debconf question to ask the user
|
||||
whether she wants to use our service by default.
|
||||
|
||||
If you would like to start using the service right now, all you have
|
||||
to do is set the following environment variable in your shell:
|
||||
|
||||
```
|
||||
DEBUGINFOD_URLS="https://debuginfod.debian.net"
|
||||
```
|
||||
|
||||
More information
|
||||
----------------
|
||||
|
||||
You can find more information about our `debuginfod` service
|
||||
[here](https://wiki.debian.org/Debuginfod). Try to keep an eye on the
|
||||
page as it's being constantly updated.
|
||||
|
||||
If you'd like to get in touch with me, my email is my domain at debian
|
||||
dot org.
|
||||
|
||||
I sincerely believe that this service is a step in the right
|
||||
direction, and hope that it can be useful to you :-).
|
83
content/posts/debuginfod-is-coming-to-ubuntu.md
Normal file
83
content/posts/debuginfod-is-coming-to-ubuntu.md
Normal file
|
@ -0,0 +1,83 @@
|
|||
---
|
||||
date: 2022-08-14T00:00:00-05:00
|
||||
title: "Debuginfod is coming to Ubuntu"
|
||||
tags: [en_us, debian, ubuntu, free-software, debuginfod, gdb]
|
||||
---
|
||||
|
||||
These past couple of months I have been working to bring
|
||||
[debuginfod](https://sourceware.org/elfutils/Debuginfod.html) to
|
||||
Ubuntu. I thought it would be a good idea to make this post and
|
||||
explain a little bit about what the service is and how I'm planning to
|
||||
deploy it.
|
||||
|
||||
A quick recap: what's debuginfod?
|
||||
---------------------------------
|
||||
|
||||
Here's a good summary of what `debuginfod` is:
|
||||
|
||||
debuginfod is a new-ish project whose purpose is to serve
|
||||
ELF/DWARF/source-code information over HTTP. It is developed under the
|
||||
elfutils umbrella. You can find more information about it here:
|
||||
|
||||
https://sourceware.org/elfutils/Debuginfod.html
|
||||
|
||||
In a nutshell, by using a debuginfod service you will not need to
|
||||
install debuginfo (a.k.a. dbgsym) files anymore; the symbols will be
|
||||
served to GDB (or any other debuginfo consumer that supports debuginfod)
|
||||
over the network. Ultimately, this makes the debugging experience much
|
||||
smoother (I myself never remember the full URL of our debuginfo
|
||||
repository when I need it).
|
||||
|
||||
If you follow the Debian project, you might know that I run their
|
||||
[debuginfod service](https://debuginfod.debian.org). In fact, the
|
||||
excerpt above was taken from the
|
||||
[announcement](https://lists.debian.org/debian-devel-announce/2021/02/msg00003.html)
|
||||
I made last year, letting the Debian community know that the service
|
||||
was available.
|
||||
|
||||
First stage
|
||||
-----------
|
||||
|
||||
With more and more GNU/Linux distributions offering a `debuginfod`
|
||||
service to their users, I strongly believe that Ubuntu cannot afford
|
||||
to stay out of this "party" anymore. Fortunately, I have a
|
||||
[manager](https://launchpad.net/~paelzer) who not only agrees with me
|
||||
but also turned the right knobs in order to make this project one of
|
||||
my priorities for this development cycle.
|
||||
|
||||
The deployment of this service will be made in stages. The first one,
|
||||
whose results are due to be announced in the upcoming weeks,
|
||||
encompasses indexing and serving all of the available debug symbols
|
||||
from the [official Ubuntu repository](http://ddebs.ubuntu.com). In
|
||||
other words, the service will serve everything from `main`, `universe`
|
||||
and `multiverse`, from every supported Ubuntu release out there.
|
||||
|
||||
This initial (a.k.a. "alpha") stage will also allow us to have an
|
||||
estimate of how much the service is used, so that we can better
|
||||
determine the resources allocated to it.
|
||||
|
||||
More down the road
|
||||
------------------
|
||||
|
||||
This is just the beginning. In the following cycles, I will be
|
||||
working on a few interesting projects to expand the scope of the
|
||||
service and make it even more useful for the broader Ubuntu community.
|
||||
To give you an idea, here is what is on my plate:
|
||||
|
||||
- Working on the problem of indexing and serving **source code** as
|
||||
well. This is an interesting problem and I already have some ideas,
|
||||
but it's also challenging and may unfold into more sub-projects.
|
||||
The good news is that a solution for this problem will also be
|
||||
beneficial to Debian.
|
||||
|
||||
- Working with the snap developers to come up with a way to index and
|
||||
serve debug symbols for snaps as well.
|
||||
|
||||
- Improve the integration of the service into Ubuntu. In fact, I have
|
||||
already started working on this by making `elfutils` (actually,
|
||||
`libdebuginfod`) install a customized shell snippet to automatically
|
||||
setup access to Ubuntu's `debuginfod` instance.
|
||||
|
||||
As you can see, there's a lot to do. I am happy to be working on this
|
||||
project, and I hope it will be helpful and useful for the Ubuntu
|
||||
community.
|
128
content/posts/dfd-2013-campinas.md
Normal file
128
content/posts/dfd-2013-campinas.md
Normal file
|
@ -0,0 +1,128 @@
|
|||
---
|
||||
date: 2013-04-12T00:00:00-05:00
|
||||
title: "Document Freedom Day 2013 in Campinas -- São Paulo -- Brazil"
|
||||
tags: [en_us, free-software, libreplanet, fedora-planet, report, dfd]
|
||||
---
|
||||
|
||||
Hi, there! This is the report of the [Document Freedom
|
||||
Day](http://documentfreedom.org) event that took place in
|
||||
[Campinas](http://en.wikipedia.org/wiki/Campinas), [São Paulo
|
||||
state](http://en.wikipedia.org/wiki/São_Paulo_(state)),
|
||||
[Brazil](http://en.wikipedia.org/wiki/Brazil). I will talk a little bit
|
||||
about how we (keep reading to know who "we" are!) organized it, and the
|
||||
conclusions that can be drawn to help for the next edition.
|
||||
|
||||
Organization
|
||||
------------
|
||||
|
||||
The DFD (or *D*ocument *F*reedom *D*ay) 2013 in Campinas was organized
|
||||
by the [LibrePlanet São
|
||||
Paulo](http://libreplanet.org/wiki/Group:LibrePlanet_São_Paulo) (link in
|
||||
pt\_BR) group. If you follow this blog, and if you speak portuguese,
|
||||
then you have probably read the [announcement of the group]({filename}/2012-12-15-criacao-libreplanet-sao-paulo.md) that I made last
|
||||
year. If you haven't: LibrePlanet São Paulo is part of the
|
||||
[LibrePlanet](http://libreplanet.org/wiki/Main_Page) project (sponsored
|
||||
by the [Free Software Foundation](http://www.fsf.org/)), and *"... is a
|
||||
global network of free software activists and teams working together to
|
||||
help further the ideals of software freedom by advocating and
|
||||
contributing to free software."*.
|
||||
|
||||
The DFD 2013 was an important event to us because it was the first
|
||||
serious event that we organized as a group. Despite some mistakes and
|
||||
errors, I believe we did fine and were able to learn some great
|
||||
lessons for the next events that we plan to do. By the way, if you
|
||||
want to see the official page which we used to promote the event (and
|
||||
organize it too), take a
|
||||
look
|
||||
[here](http://libreplanet.org/wiki/LP-BR-SP/Eventos/DFD_Campinas_2013).
|
||||
The page is in pt_br.
|
||||
|
||||
Basically, we should have: *(a)* focused more on defining the venue as
|
||||
soon as possible, because that would have made it possible to *(b)*
|
||||
start sending announcements about the event earlier. We also should have
|
||||
contacted the Document Freedom organization and asked swags and banners
|
||||
earlier, because when we did it was too late for the shipment to arrive
|
||||
in time. And last but not least, we should really have taken pictures!!
|
||||
Unfortunately, I have absolutely no pictures to post here, so you will
|
||||
have to believe just in the words I write...
|
||||
|
||||
But well, nothing is perfect, and hey, the event **happened**!. So let's
|
||||
talk it :-).
|
||||
|
||||
The Event
|
||||
---------
|
||||
|
||||
DFD 2013 occurred on Wednesday, March 27th. After some discussion, we
|
||||
decided to schedule the event from 13h (1 p.m.) to 17h (5 p.m.), with 4
|
||||
presentations of 50 minutes each, approximately. The venue chosen was
|
||||
[CCUEC](http://www.ccuec.unicamp.br/ccuec/), the Center of Computing at
|
||||
the University of Campinas, [UNICAMP](http://www.unicamp.br/unicamp/).
|
||||
This center has some great people working on it who are involved with
|
||||
Free Software since the beginning of the movement, particularly [Rubens
|
||||
Queiroz de Almeida](http://dicas-l.com.br/), a very nice guy (very
|
||||
famous in the Brazilian Free Software scene) who helped us **a lot**
|
||||
with the organization of this event.
|
||||
|
||||
We understand that doing the event on a Wednesday afternoon was
|
||||
something that made it very hard for most people to attend, and that is
|
||||
probably the main reason for the low attendance: only 8 people in the
|
||||
audience. I have to say I was a little frustrated in the beginning, but
|
||||
hey, what really matters is that we spread the word about Free Software
|
||||
to 8 brave souls there, who will hopefully spread the word again to more
|
||||
people, and so on :-). So, it was time for the show to begin!
|
||||
|
||||
Our schedule was (presentation titles translated):
|
||||
|
||||
1. "**What is Free Software?**", by me
|
||||
2. "**Free Documents or the End of the World**", by Rubens Queiroz de
|
||||
Almeida
|
||||
3. "**HTML5: all the faces of the new standard**", by Ricardo
|
||||
Panaggio
|
||||
4. "**EPUB3: The book in the XXI century**", by Raniere Silva
|
||||
|
||||
So my presentation was scheduled to be the first one, and I really liked
|
||||
it (surprise!). It was virtually the first time I gave a "philosophical"
|
||||
talk, and a very important one: a general presentation about Free
|
||||
Software, its history, the present, and a little bit of the future. In
|
||||
my opinion, what I liked about my talk is that I focused less on the
|
||||
"freedom" part, and more on the "respect" part of the philosophy. This
|
||||
is something I did because I wanted to use a different argument that was
|
||||
on my head for a long time: that the main thing behing the Free Software
|
||||
is the respect towards others, and only with that one can achieve
|
||||
freedom.
|
||||
|
||||
I watched Rubens too, who gave an excelent presentation about why we
|
||||
need free documents and standards. Rubens is very talkative and warm,
|
||||
which makes the audience feel relaxed. People liked his presentation a
|
||||
lot, from what I noticed.
|
||||
|
||||
Unfortunately, Ricardo Panaggio had a problem with his computer before
|
||||
his presentation, so we decided to switch: Raniere Silva would take his
|
||||
place as the third presenter, while Ricardo tried to fix the problem. I
|
||||
helped him with his problems, and because of this I was unable to watch
|
||||
Raniere's talk. In the end, we could not solve Ricardo's problem and he
|
||||
decided to give his presentation without any slides. In my opinion, he
|
||||
managed to catch everyone's attention (also because HTML5 is such a hot
|
||||
topic today), so I guess the missing slides were not so important after
|
||||
all!
|
||||
|
||||
At 17h o'clock, we declared DFD 2013 finished. I still had time to
|
||||
distribute some Free Software stickers (from FSF), and talk a little
|
||||
with two or three people there, who were satisfied with the
|
||||
presentations! It made my day, of course :-). And just because of that I
|
||||
now feel motivated to organized another DFD next year!
|
||||
|
||||
Acknowledgements
|
||||
----------------
|
||||
|
||||
I would like to thank Rubens Queiroz for helping with the promotion, the
|
||||
location, and the presentation during the event. DFD 2013 would have
|
||||
been impossible without his help. Thanks, Rubens!
|
||||
|
||||
The LibrePlanet São Paulo team, specially Ricardo Panaggio, were also
|
||||
deeply involved with me in the organization. And I hope we manage to
|
||||
make a bigger event next year!
|
||||
|
||||
Finally, I would like to thank everyone who attended the event, even for
|
||||
watch only one talk. Your presence there was really, **really**
|
||||
important to all of us. See you all next year!
|
58
content/posts/dont-come-here.md
Normal file
58
content/posts/dont-come-here.md
Normal file
|
@ -0,0 +1,58 @@
|
|||
---
|
||||
date: 2018-11-05T00:00:00-05:00
|
||||
title: "Don't come here"
|
||||
tags: [en_us, politics, rant]
|
||||
---
|
||||
|
||||
If you're brazilian, don't come here. If you voted for the
|
||||
president-elected, don't come here. If you think it's better to have
|
||||
a dead son than a gay son, don't come here. If you think it's OK to
|
||||
kill first and ask later (or perhaps don't even ask), don't come here.
|
||||
If you would like to say the things he said, don't come here. If you
|
||||
think he didn't really mean what he said, don't come here. If you
|
||||
can't understand why the things he said are horrible, don't come here.
|
||||
If you think he is a myth, don't come here. If you think he is a
|
||||
saviour, don't come here.
|
||||
|
||||
If you don't understand the absurdity of living in Canada and voting
|
||||
for him, don't come here (and please go away if you do). If you don't
|
||||
understand the hypocrisy of calling a homosexual names while living in
|
||||
a country where homosexual marriage has been legal for more than a
|
||||
decade, don't come here. If you think everybody should have a gun,
|
||||
don't come here.
|
||||
|
||||
If you are inhuman, don't come here. If you like authoritarians,
|
||||
don't come here. If you can't see he is an authoritarian, don't come
|
||||
here. If you are absolutely sure of everything and don't question
|
||||
yourself, don't come here. If you use (anti)social networks to inform
|
||||
yourself, don't come here. If you think torture is not a big deal,
|
||||
don't come here. If you praise a torturer, don't come here. If you
|
||||
think closing the Congress is a good idea, don't come here. If you
|
||||
think economics are what really matter, don't come here. If you can't
|
||||
feel empathy for another human being who is not related to you, don't
|
||||
come here. If you try to rationalize your vote for him, try to
|
||||
justify to yourself that he is not as bad as he himself says, don't
|
||||
come here. If you are not concerned about more deaths, don't come
|
||||
here.
|
||||
|
||||
If you think killing more people is going to improve things, don't
|
||||
come here. If you think the police should be allowed to kill without
|
||||
suffering any consequences, don't come here. If you see a dead black
|
||||
person and think "(s)he must have done something wrong, so it's
|
||||
justified that (s)he was killed", don't come here. If you think the
|
||||
slavery should return, don't come here. If you think indigenous
|
||||
people are lazy and should be killed or have no rights, don't come
|
||||
here. If you have no regard for our forests and our environment,
|
||||
don't come here. If you think the climate change is a hoax, don't
|
||||
come here. If you are just interested in the money, don't come here.
|
||||
|
||||
If you blame PT for everything bad that's happened to Brazil, don't
|
||||
come here. If you think people who don't blame PT for everything bad
|
||||
that's happened to Brazil are communists, don't come here. If you
|
||||
think everyone who disagrees with you is a communist, don't come here.
|
||||
If you think Francis Fukuyama is a communist, don't come here. If you
|
||||
think you know what communism is, but only read about it on
|
||||
(anti)social networks, don't come here.
|
||||
|
||||
If you are already here, then I have everything against you, and I
|
||||
think you should leave.
|
31
content/posts/dreaming.md
Normal file
31
content/posts/dreaming.md
Normal file
|
@ -0,0 +1,31 @@
|
|||
---
|
||||
date: 2017-09-29T00:00:00-05:00
|
||||
title: "Dreaming..."
|
||||
tags: [en_us, thoughts]
|
||||
---
|
||||
|
||||
Back then, I still wanted to write something. Back then, life was
|
||||
different, and I had another view of myself and of others. Back then,
|
||||
my house of cards was still standing, giving the impression that it
|
||||
was safe and sound, that its foundation was solid, and that nothing
|
||||
would shake it. But that was back then.
|
||||
|
||||
Right now, I have lost my will and my power to concentrate, to focus
|
||||
on what really matters, because what really matters is still
|
||||
undefined. Right now, things don't seem to fit as they once did; the
|
||||
vision blurs and I am not so sure what it is that I should be doing
|
||||
but am not. Right now, my self has become another one. Someone that
|
||||
doesn't remind me of anybody in particular.
|
||||
|
||||
Struggling, defining, living and knowing. These are constant words,
|
||||
constant feelings and actions that live with me. Who am I? What do I
|
||||
like? What do I *don't* like? Am I good in what I thought I was
|
||||
good? Am I feeling what I think I'm feeling?
|
||||
|
||||
This is more than the impostor syndrome. But it is less than the
|
||||
Stockholm syndrome. It's somewhere in between, or maybe nowhere.
|
||||
When I woke up and decided to keep going, I knew it was a temporary
|
||||
decision. It still is. I still have to find what I missed, or what I
|
||||
have never found. What to do? Too hard of a question to answer right
|
||||
now. Here's hoping that time will help me with this hard, but
|
||||
long-wanted task.
|
124
content/posts/fad-sp-2013.md
Normal file
124
content/posts/fad-sp-2013.md
Normal file
|
@ -0,0 +1,124 @@
|
|||
---
|
||||
date: 2013-06-10T00:00:00-05:00
|
||||
title: "Relato: FAD SP 2013"
|
||||
tags: [pt_br, fedora-planet, fedora, report]
|
||||
---
|
||||
|
||||
Estava devendo este post há 1 semana pro meu amigo Leonardo Vaz!
|
||||
Desculpaê, Leo :-).
|
||||
|
||||
Vou tentar fazer um (breve?) relato sobre o **F**edora **A**ctivity
|
||||
**D**ay (ou simplesmente **FAD**), que aconteceu em São Paulo no dia 1
|
||||
de Junho de 2013, mais conhecido como sábado retrasado :-). Se quiser
|
||||
ver a página de organização do evento (em inglês), clique [neste link
|
||||
aqui](http://fedoraproject.org/wiki/FAD_SP_2013).
|
||||
|
||||
Chegada em Sampa
|
||||
----------------
|
||||
|
||||
Bem, como sou um ex-embaixador do Fedora novato, inexperiente, e que não
|
||||
faz nada da vida (ao contrário de vários ex-colegas que participam há
|
||||
anos como embaixadores contribuindo solidamente para o bem comum e sem
|
||||
deixar a peteca cair), eu resolvi levar os DVDs do Fedora que estavam
|
||||
comigo para que o Leo e o Itamar (e quem mais estivesse por lá!)
|
||||
pudessem se encarregar de redistribuí-los antes que eles perdessem a
|
||||
"validade". Saí cedo de Campinas, e com uma São Paulo sem trânsito nem
|
||||
problemas, consegui chegar no escritório da Red Hat às 9h e pouco.
|
||||
|
||||
Conheci (e reconheci!) algumas pessoas por lá, entre colegas de trabalho
|
||||
da empresa, embaixadores/contribuidores do Fedora, e entusiastas que
|
||||
estavam lá pra conhecer melhor e ver qual era a do evento. Certamente
|
||||
foi uma tarde/noite proveitosa em termos de contatos pessoais!
|
||||
|
||||
Palestras
|
||||
---------
|
||||
|
||||
Depois de um atraso no início do evento, o Leo começou apresentando uma
|
||||
palestra sobre o projeto Fedora (e seus sub-projetos, como o de
|
||||
embaixadores, por exemplo). Mesmo com boa parte (senão todos!) dos
|
||||
presentes já fazendo parte do projeto de algum jeito, ainda assim a
|
||||
palestra foi um momento legal pra que algumas discussões e reflexões
|
||||
acontecessem. Considero que a maior parte da "nata" da comunidade estava
|
||||
naquela sala (com óbvias exceções como o Fábio Olivé, o Amador Pahim, e
|
||||
outras pessoas cujos nomes não vou ficar citando porque estou com
|
||||
preguiça de pensar em todos!). Portanto, acho que o plano do Leo (que é
|
||||
o de revitalizar a comunidade Fedora no Brasil, principalmente a de
|
||||
embaixadores) começou com os dois pés direitos (se é que isso é
|
||||
possível!).
|
||||
|
||||
A idéia inicial era de que cada palestra durasse 1 hora, mas é claro que
|
||||
com tanto assunto pra tratar a palestra do Leo durou muito mais que
|
||||
isso! No fim das contas, quando a palestra terminou já era hora do
|
||||
almoço :-). Como não poderia deixar de ser, o papo continou na cozinha,
|
||||
e foi lá que pude conhecer melhor o pessoal que estava presente. Foi bem
|
||||
legal :-).
|
||||
|
||||
Bem, com a bateria carregada, era hora do segundo ciclo de palestras! O
|
||||
Leo pediu pra que eu apresentasse um pouco da minha experiência com o
|
||||
[GDB](http://www.gnu.org/s/gdb), tanto na parte de lidar com a
|
||||
comunidade upstream, quanto na hora de focar no desenvolvimento de
|
||||
funcionalidades para o Fedora (ou para o Red Hat Enterprise
|
||||
(GNU/)Linux). Eu não tinha preparado nenhum slide, e fui com a cara (de
|
||||
pau) e a coragem tentar bater um papo com a galera ;-). Aqui está uma
|
||||
foto na hora da palestra (reparem na pose, no garbo e na elegância do
|
||||
palestrante):
|
||||
|
||||
![Apresentação do GDB]({static}/images/sergio-fad-2013.jpg)
|
||||
|
||||
Acho que consegui passar uma idéia de como é o meu dia-a-dia trabalhando
|
||||
com o GDB e navegando entre os mares upstream e empresarial. Algumas
|
||||
pessoas fizeram algumas perguntas (o Maurício Teixeira inclusive fez
|
||||
perguntas técnicas!), e felizmente minha palestra durou bem menos do que
|
||||
a do Leo! Eu certamente não tinha tanto assunto pra tratar :-P.
|
||||
|
||||
A última atividade do dia foi um *hands-on* que o Itamar fez sobre
|
||||
empacotamento RPM. Foi legal, e acho que deu pro pessoal ter uma noção
|
||||
de que empacotar pro Fedora não é um bicho de sete cabeças. Inclusive,
|
||||
se você estiver interessado em saber mais, sugiro que dê uma olhada na
|
||||
[página wiki que ensina o básico
|
||||
disso](http://fedoraproject.org/wiki/How_to_create_an_RPM_package), e
|
||||
não se sinta envergonhado de enviar suas dúvidas pras listas de
|
||||
desenvolvimento do Fedora!
|
||||
|
||||
Após esse *how-to* ao vivo, e levando em conta o horário avançado (mais
|
||||
de 19h) e o cansaço do pessoal, decidimos finalizar o evento. Na
|
||||
verdade, ainda ficamos discutindo bastante sobre vários pontos
|
||||
importantes da comunidade, os problemas vivenciados (sim, existem
|
||||
problemas, a não ser que você viva num mundo encantado ou não se envolva
|
||||
o suficiente pra notá-los, mas aí é só pedir pra alguém traduzir o que
|
||||
está acontecendo e talvez você entenda), e as possíveis soluções. Acabei
|
||||
saindo de Sampa quase 20h30min, mas achei que valeu muito a pena ter
|
||||
ido!
|
||||
|
||||
Conclusões
|
||||
----------
|
||||
|
||||
A conclusão pessoal é que eu estava mesmo precisando ir a eventos e
|
||||
conhecer pessoas novas! Acho isso muito legal, é um combustível pra
|
||||
fazer mais coisas e ter mais idéias.
|
||||
|
||||
A conclusão na parte da comunidade é a de que o Leo vai conseguindo aos
|
||||
poucos mudar a mentalidade do Fedora Brasil. Não me arrependo de ter
|
||||
dado um tempo no sub-projeto de embaixadores, e estou achando muito
|
||||
legal ver as ações do Leo & cia. para mudar as coisas. Têm meu total
|
||||
apoio!
|
||||
|
||||
Agradecimentos
|
||||
--------------
|
||||
|
||||
Esse evento certamente não teria acontecido sem o incansável Leonardo
|
||||
Vaz. Ele merece todos os agradecimentos e toda a admiração da comunidade
|
||||
(inter)nacional do Fedora por isso, sem dúvida. Se você estiver lendo
|
||||
este post, tiver alguma relação com o Fedora, e for ao FISL este ano,
|
||||
pague uma cerveja (ou suco!) a ele, porque ele merece.
|
||||
|
||||
Também queria agradecer ao pessoal que foi ao evento. É sempre bom ver
|
||||
gente que se preocupa de verdade em melhorar algo, que não fecha os
|
||||
olhos para os problemas que estão acontecendo, e principalmente que se
|
||||
dispõe a aprender algo novo. Foi gratificante ter conhecido pessoas como
|
||||
o Germán, um astrofísico argentino que mantém dois pacotes em Python no
|
||||
Fedora sem querer nada em troca! Ou tipo o Hugo Cisneiros, envolvido no
|
||||
mundo GNU/Linux há tanto tempo quanto aquele cabelo dele levou pra
|
||||
crescer :-P.
|
||||
|
||||
E vida longa ao Software Livre!
|
51
content/posts/fazendo-a-diferenca.md
Normal file
51
content/posts/fazendo-a-diferenca.md
Normal file
|
@ -0,0 +1,51 @@
|
|||
---
|
||||
date: 2015-02-25T00:00:00-05:00
|
||||
title: "Fazendo a Diferença"
|
||||
tags: [pt_br, rant, thoughts, philosophy, free-software]
|
||||
---
|
||||
|
||||
Deu saudade de escrever em português :-). E deu saudade, também, de
|
||||
fazer algum post mais “filosófico”.
|
||||
|
||||
Não sei dizer o porquê, mas às vezes tenho uma mania besta: gosto de
|
||||
ficar procurando “sarna pra me coçar”. Em outras palavras, eu fico
|
||||
procurando coisas que me deixam mal, mesmo sabendo que vou ficar mal
|
||||
depois de vê-las.
|
||||
|
||||
Não tenho explicação pra esse comportamento. É algo meio sabotador, meio
|
||||
sofredor, meio... Não sei. Às vezes, quando me vejo novamente nesse
|
||||
ciclo vicioso, consigo parar. No entanto, na maioria das vezes, eu entro
|
||||
num estado estranho: é como se eu estivesse me observando, estudando
|
||||
quais consequências aquele ato traz para mim. Fico me perguntando se sou
|
||||
a única pessoa desse mundo que faz isso...
|
||||
|
||||
Acho que um exemplo bom desse tipo de comportamento é o que tenho feito
|
||||
ultimamente. Às vezes, por algum motivo que me é estranho, leio coisas
|
||||
ruins escritas por pessoas extremamente insensatas. E, talvez pelo mesmo
|
||||
motivo misterioso, eu fico mal com o que leio, mesmo sabendo que,
|
||||
colocando na balança o que essas pessoas fazem e o que eu faço, a
|
||||
diferença é gigantesca. Então por que raios eu fico mal quando leio as
|
||||
besteiras que são praticamente vomitadas por essas pessoas?
|
||||
|
||||
Talvez algumas pessoas (eu incluso) tenham um radar pra sentimentos
|
||||
fortes. Por exemplo, um gesto de altruísmo é algo que consegue tocar o
|
||||
fundo da alma, e merece ser apreciado como um vinho raro. Mas, em
|
||||
contrapartida, uma expressão de raiva, desprezo ou incompreensão também
|
||||
capta a atenção de uma forma quase inevitável. O mistério que esse
|
||||
gesto, muitas vezes incoerente, esconde é algo que me deixa quase
|
||||
aficcionado, como se eu estivesse lendo um livro e não quisesse parar
|
||||
antes de chegar no final. Por que uma pessoa se coloca num papel por
|
||||
vezes ridículo, apenas por conta de uma opinião? Por que essa pessoa, na
|
||||
ânsia de criticar um comportamento, um pensamento, ou uma ideologia,
|
||||
muitas vezes exibe **exatamente** as mesmas características que repudia?
|
||||
O que faz um ser humano, cheio de falhas e limitações, subir num (muitas
|
||||
vezes falso) pedestal e esquecer que já esteve lá embaixo?
|
||||
|
||||
Felizmente, as questões acima, por mais intrigantes que sejam, não têm
|
||||
me prendido por muito tempo. Acho que, nesse processo de aprendizagem a
|
||||
que chamamos de “vida”, estou num ponto em que percebo claramente o caos
|
||||
que reina na cabeça dessas pessoas, e tento me afastar dele. Mas, mais
|
||||
importante que isso, acho que me dou conta de você pode escolher ser a
|
||||
mudança que quer ver no mundo (Gandhi), ou ficar ladrando enquanto a
|
||||
caravana passa... E eu definitivamente não quero perder meu tempo
|
||||
comparando códigos pra dizer quem é melhor.
|
295
content/posts/fedora-on-acer-c720p.md
Normal file
295
content/posts/fedora-on-acer-c720p.md
Normal file
|
@ -0,0 +1,295 @@
|
|||
---
|
||||
date: 2014-09-26T00:00:00-05:00
|
||||
title: "Fedora on an Acer C720P Chromebook"
|
||||
tags: [howto, free-software, fedora, fedora-planet, en_us, open-source, report]
|
||||
---
|
||||
|
||||
Yes, you are reading correctly: I decided to buy a freacking Chromebook.
|
||||
I really needed a lightweight notebook with me for my daily hackings
|
||||
while waiting for my subway station, and this one seemed to be the best
|
||||
option available when comparing models and prices. To be fair, and
|
||||
before you throw me rocks, I visited the [LibreBoot X60's
|
||||
website](http://shop.gluglug.org.uk/product/ibm-lenovo-thinkpad-x60-coreboot/)
|
||||
for some time, because I was strongly considering buying one (even
|
||||
considering its weight); however, they did not have it in stock, and I
|
||||
did not want to wait anymore, so...
|
||||
|
||||
Anyway, as one might expect, configuring GNU/Linux on notebooks is
|
||||
becoming harder as time goes by, either because the infamous [Secure
|
||||
Boot](http://en.wikipedia.org/wiki/Secure_boot) (anti-)feature, or
|
||||
because they come with more and more devices that demand proprietary
|
||||
crap to be loaded. But fortunately, it is still possible to overcome
|
||||
most of those problems and still get a GNU/Linux distro running.
|
||||
|
||||
References
|
||||
----------
|
||||
|
||||
For main reference, I used the following websites:
|
||||
|
||||
- [ACER Chromebook C720P: touchpad and touchscreen do not
|
||||
work](https://bugzilla.redhat.com/show_bug.cgi?id=1045821), a bug
|
||||
related to the Fedora support for the machine.
|
||||
- [Fedora 20 (LXDE LiveCD) on my Acer c720p
|
||||
Chromebook](http://pnmyers.blogspot.ca/2014/04/fedora-20-lxde-livecd-on-my-acer-c720p.html),
|
||||
by Perry Myers.
|
||||
- [Acer C720
|
||||
Chromebook](https://wiki.archlinux.org/index.php/Acer_C720_Chromebook),
|
||||
a wiki page from Arch[GNU/]Linux.
|
||||
- [Chromebook](https://wiki.archlinux.org/index.php/Chromebook), a
|
||||
wiki page from Arch[GNU/]Linux.
|
||||
|
||||
I also used other references for small problems that I had during the
|
||||
configuration, and I will list them when needed.
|
||||
|
||||
Backing up ChromeOS
|
||||
-------------------
|
||||
|
||||
The first thing you will probably want to do is to make a recovery image
|
||||
of the ChromeOS that comes pre-installed in the machine, in case things
|
||||
go wrong. Unfortunately, to do that you need to have a Google account,
|
||||
otherwise the system will fail to record the image. So, if you want to
|
||||
let Google know that you bought a Chromebook, login into the system,
|
||||
open Chrome, and go to the special URL `chrome://imageburner`. You will
|
||||
need a 4 GiB pendrive/sdcard. It should be pretty straightforward to do
|
||||
the recording from there.
|
||||
|
||||
Screw the screw
|
||||
---------------
|
||||
|
||||
Now comes the hard part. This notebook comes with a [write-protect
|
||||
screw](http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook).
|
||||
You might be thinking: what is the purpose of this screw?
|
||||
|
||||
Well, the thing is: Chromebooks come with their own boot scheme, which
|
||||
unfortunately doesn't work to boot Linux. However, newer models also
|
||||
offer a “legacy boot” option
|
||||
([SeaBIOS](http://www.coreboot.org/SeaBIOS)), and **this** can boot
|
||||
Linux. So far, so good, but...
|
||||
|
||||
When you switch to SeaBIOS (details below), the system will complain
|
||||
that it cannot find ChromeOS, and will ask if you want to reinstall the
|
||||
system. This will happen **every time** you boot the machine, because
|
||||
the system is still entering the default BIOS. In order to activate
|
||||
SeaBIOS, you have to press CTRL-L (Control + L) **every time you boot**!
|
||||
And this is where the screw comes into play.
|
||||
|
||||
If you remove the write-protect screw, you will be able to make the
|
||||
system use SeaBIOS by default, and therefore will not need to worry
|
||||
about pressing CTRL-L every time. Sounds good? Maybe not so much...
|
||||
|
||||
The first thing to consider is that you will lose your warranty the
|
||||
moment you open the notebook case. As I was not very concerned about it,
|
||||
I decided to try to remove the screw, and guess what happened? I
|
||||
stripped the screw! I am still not sure why that happened, because I was
|
||||
using the correct screw driver for the job, but when I tried to remove
|
||||
the screw, it seemed like butter and started to “decompose”!
|
||||
|
||||
Anyway, after spending many hours trying to figure out a way to remove
|
||||
the screw, I gave up. My intention is to always suspend the system, so I
|
||||
rarely need to press CTRL-L anyway...
|
||||
|
||||
Well, that's all I have to say about this screwed screw. If you decide
|
||||
to try removing it, keep in mind that I cannot help you in any way, and
|
||||
that you are entirely responsible for what happens.
|
||||
|
||||
Now, let's install the system :-).
|
||||
|
||||
Enable Developer Mode
|
||||
---------------------
|
||||
|
||||
You need to enable the Developer Mode in order to be able to enable
|
||||
SeaBIOS. To do that, follow [these
|
||||
steps](https://wiki.archlinux.org/index.php/Chromebook#Enabling_Developer_Mode)
|
||||
from the Arch[GNU/]Linux wiki page.
|
||||
|
||||
I don't remember if this step works if you don't have activated the
|
||||
ChromeOS (i.e., if you don't have a Google account associated with the
|
||||
device). For my use, I just created a fake account to be able to
|
||||
proceed.
|
||||
|
||||
Accessing the superuser shell inside ChromeOS
|
||||
---------------------------------------------
|
||||
|
||||
Now, you will need to access the superuser (`root`) shell inside
|
||||
ChromeOS, to enable SeaBIOS. Follow [the steps described in the
|
||||
Arch\[GNU/\]Linux wiki page](https://wiki.archlinux.org/index.php/Chromebook#Accessing_the_superuser_shell).
|
||||
For this specific step, you don't need to login, which is good.
|
||||
|
||||
Enabling SeaBIOS
|
||||
----------------
|
||||
|
||||
We're almost there! The last step before you boot your Fedora LiveUSB is
|
||||
to actually enable SeaBIOS. Just go inside your superuser shell (from
|
||||
the previous step) and type:
|
||||
|
||||
#!bash
|
||||
> crossystem dev_boot_usb=1 dev_boot_legacy=1
|
||||
|
||||
And that's it!
|
||||
|
||||
If you managed to successfuly remove the write-protect screw, you may
|
||||
also want to enable booting SeaBIOS by default. To do that, [there is a
|
||||
guide](https://wiki.archlinux.org/index.php/Chromebook#Boot_to_SeaBIOS_by_default),
|
||||
again on Arch[GNU/]Linux wiki. **DO NOT DO THAT IF YOU DID NOT REMOVE
|
||||
THE WRITE-PROTECT SCREW!!!!**
|
||||
|
||||
Booting Fedora
|
||||
--------------
|
||||
|
||||
Now, we should finally be able to boot Fedora! Remember, you will have
|
||||
to press CTRL-L after you reboot (if you have not removed the
|
||||
write-protect screw), otherwise the system will just complain and not
|
||||
boot into SeaBIOS. So, press CTRL-L, choose the boot order (you will
|
||||
probably want to boot from USB first, if your Fedora is on a USB stick),
|
||||
choose to boot the live Fedora image, and... bum!! You will probably see
|
||||
a message complaining that there was not enough memory to boot (the
|
||||
message is “Not enough memory to load specified image”).
|
||||
|
||||
You can solve that by passing the `mem` parameter to Linux. So, when
|
||||
GRUB complains that it was unable to load the specified image, it will
|
||||
give you a command prompt (`boot:`), and you just need to type:
|
||||
|
||||
#!bash
|
||||
boot: linux mem=1980M
|
||||
|
||||
And that's it, things should work.
|
||||
|
||||
Installing the system
|
||||
---------------------
|
||||
|
||||
I won't guide you through the installation process; I just want to
|
||||
remember you that you have a 32 GiB SSD drive, so think carefully before
|
||||
you decide how you want to set up the partitions. What I did was to
|
||||
reserve 1 GB for my swap, and take all the rest to the root partition
|
||||
(i.e., I did not create a separate `/home` partition).
|
||||
|
||||
You will also notice that the touchpad does not work (neither does the
|
||||
touchscreen). So you will have to do the installation using a USB mouse
|
||||
for now.
|
||||
|
||||
Getting the touchpad to work
|
||||
----------------------------
|
||||
|
||||
I strongly recommend you to read [this Fedora
|
||||
bug](https://bugzilla.redhat.com/show_bug.cgi?id=1045821), which is
|
||||
mostly about the touchpad/touchscreen support, but also covers other
|
||||
interesting topics as well.
|
||||
|
||||
Anyway, the bug is still being constantly updated, because the proposed
|
||||
patches to make the touchpad/touchscreen work were not fully integrated
|
||||
into Linux yet. So, depending on the version of Linux that you are
|
||||
running, you will probably need to run a different version of the
|
||||
scripts that are being kindly provided in the bug.
|
||||
|
||||
As of this writing, I am running Linux 3.16.2-201.fc20, and the script
|
||||
that does the job for me is [this
|
||||
one](https://bugzilla.redhat.com/attachment.cgi?id=937274). If you are
|
||||
like me, you will never run a script without looking at what it does, so
|
||||
go there and do it, I will wait :-).
|
||||
|
||||
OK, now that you are confident, run the script (as `root`, of course),
|
||||
and confirm that it actually installs the necessary drivers to make the
|
||||
devices work. In my case, I only got the touchpad working, even though
|
||||
the touchscreen is also covered by this script. However, since I don't
|
||||
want the touchscreen, I did not investigate this further.
|
||||
|
||||
After the installation, reboot your system and at least your touchpad
|
||||
should be working :-). Or kind of...
|
||||
|
||||
What happened to me was that I was getting strange behaviors with the
|
||||
touchpad. Sometimes (randomly), its sensitivity became weird, and it was
|
||||
very hard to move the pointer or to click on things. Fortunately, I
|
||||
found the solution in the same bug, in [this comment by Yannick
|
||||
Defais](https://bugzilla.redhat.com/show_bug.cgi?id=1045821#c3). After
|
||||
creating this X11 configuration file, everything worked fine.
|
||||
|
||||
Getting suspend to work
|
||||
-----------------------
|
||||
|
||||
Now comes the hard part. My next challenge was to get suspend to work,
|
||||
because (as I said above) I don't want to poweroff/poweron every time.
|
||||
|
||||
My first obvious attempt was to try to suspend using the current
|
||||
configuration that came with Fedora. The notebook actually suspended,
|
||||
but then it resumed 1 second later, and the system froze (i.e., I had to
|
||||
force the shutdown by holding the power button for a few seconds). Hmm,
|
||||
it smelled like this would take some effort, and my nose was right.
|
||||
|
||||
After a lot of search (and [asking in the
|
||||
bug](https://bugzilla.redhat.com/show_bug.cgi?id=1045821#c63)), I found
|
||||
out about a few Linux flags that I could provide in boot time. To save
|
||||
you time, this is what I have now in my `/etc/default/grub` file:
|
||||
|
||||
#!bash
|
||||
GRUB_CMDLINE_LINUX="tpm_tis.force=1 tpm_tis.interrupts=0 ..."
|
||||
|
||||
The final `...` means that you should keep whatever was there before you
|
||||
included those parameters, of course. Also, after you edit this file,
|
||||
you need to regenerate the GRUB configuration file on `/boot`. Run the
|
||||
following command as `root`:
|
||||
|
||||
#!bash
|
||||
> grub2-mkconfig -o /boot/grub2/grub.cfg
|
||||
|
||||
Then, after I rebooted the system, I found that only adding those flags
|
||||
was still not enough. I saw a bunch of errors on `dmesg`, which showed
|
||||
me that there was some problem with EHCI and xHCI. After a few more
|
||||
research, I found the [this
|
||||
comment](https://bbs.archlinux.org/viewtopic.php?pid=1364521#p1364521)
|
||||
on an Arch[GNU/]Linux forum. Just follow the steps there (i.e., create
|
||||
the necessary files, especially the
|
||||
`/usr/lib/systemd/system-sleep/cros-sound-suspend.sh`), and things
|
||||
should start to get better. But not yet...
|
||||
|
||||
Now, you will see that suspend/resume work OK, but when you suspend, the
|
||||
system will still resume after 1 second or so. Basically, this happens
|
||||
because the system is using the touchpad and the touchscreen to
|
||||
determine whether it should resume from suspend or not. So basically
|
||||
what you have to do is to disable those sources of events:
|
||||
|
||||
#!bash
|
||||
echo TPAD > /proc/acpi/wakeup
|
||||
echo TSCR > /proc/acpi/wakeup
|
||||
|
||||
And voilà! Now everything should work as expected :-). You might want to
|
||||
issue those commands every time you boot the system, in order to get
|
||||
suspend to work every time, of course. To do that, you can create a
|
||||
`/etc/rc.d/rc.local`, which gets executed when the system starts:
|
||||
|
||||
#!bash
|
||||
> cat /etc/rc.d/rc.local
|
||||
#!/bin/bash
|
||||
|
||||
suspend_tricks()
|
||||
{
|
||||
echo TPAD > /proc/acpi/wakeup
|
||||
echo TSCR > /proc/acpi/wakeup
|
||||
}
|
||||
|
||||
suspend_tricks
|
||||
|
||||
exit 0
|
||||
|
||||
Don't forget to make this file executable:
|
||||
|
||||
#!bash
|
||||
> chmod +x /etc/rc.d/rc.local
|
||||
|
||||
Conclusion
|
||||
----------
|
||||
|
||||
Overall, I am happy with the machine. I still haven't tried installing
|
||||
[Linux-libre](http://www.fsfla.org/ikiwiki/selibre/linux-libre/index.en.html)
|
||||
on it, so I am not sure if it can work without binary blobs and
|
||||
proprietary craps.
|
||||
|
||||
I found the keyboard comfortable, and the touchpad OK. The only extra
|
||||
issue I had was using the Canadian/French/whatever keyboard that comes
|
||||
with it, because it lacks some useful keys for me, like Page Up/Down,
|
||||
Insert, and a few others. So far, I am working around this issue by
|
||||
using `xbindkeys` and `xvkdb`.
|
||||
|
||||
I do not recommend this machine if you are not tech-savvy enough to
|
||||
follow the steps listed in this post. If that is the case, then consider
|
||||
buying a machine that can easily run GNU/Linux, because you feel much
|
||||
more comfortable configuring it!
|
16
content/posts/first-post-again.md
Normal file
16
content/posts/first-post-again.md
Normal file
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
date: 2012-10-22T00:00:00-05:00
|
||||
title: "First Blog post, again..."
|
||||
tags: [intro, en_us]
|
||||
---
|
||||
|
||||
Well, well. I really wasn't entirely satisfied with Octopress, so I
|
||||
decided to change the blog engine yet another time!! Here it is, using
|
||||
[blohg](http://blohg.org), a blog engine based on Mercurial (yeah, I
|
||||
know, nothing is perfect), and made by a Brazilian :-).
|
||||
|
||||
I intend to resume my activities in the blog pretty soon, especially
|
||||
because I have many things to share here. First of all, I will convert
|
||||
the old posts from Markup to rst.
|
||||
|
||||
Hope you like it!
|
166
content/posts/fsf-twitter-coherence.md
Normal file
166
content/posts/fsf-twitter-coherence.md
Normal file
|
@ -0,0 +1,166 @@
|
|||
---
|
||||
date: 2013-10-16T00:00:00-05:00
|
||||
title: "About coherence, Twitter, and the Free Software Foundation"
|
||||
tags: [en_us, thoughts, rant, free-software, fedora-planet]
|
||||
---
|
||||
|
||||
The [Free Software Foundation](https://fsf.org) has a
|
||||
[Twitter](https://twitter.com) [account](https://twitter.com/fsf).
|
||||
Surprised? So am I, in a negative way, of course. And I will explain why
|
||||
on this post.
|
||||
|
||||
You may not agree with me on everything I write here, and I am honestly
|
||||
expecting some opposition, but I would like to make it crystal clear
|
||||
that my purpose is to raise awareness for the most important "feature"
|
||||
an organization should have: **coherence**.
|
||||
|
||||
The shock
|
||||
---------
|
||||
|
||||
I first learned about the Twitter account on IRC. I was hanging around
|
||||
in the `#fsf` channel on Freenode, when someone mentioned that "*...
|
||||
something has just been posted on FSF's Twitter!*" (yes, it was a happy
|
||||
announcement, not a complaint). I thought it was a joke, but before
|
||||
laughing I decided to confirm. And to my deepest sorrow, I was wrong.
|
||||
**The Free Software Foundation has a Twitter account**. The implications
|
||||
of this are mostly bad not only for the Foundation itself, but also for
|
||||
us, Free Software users and advocates.
|
||||
|
||||
Twitter uses Free Software to run its services. So does Facebook, and I
|
||||
would even bet that Microsoft runs some GNU/Linux machines serving
|
||||
intranet pages... But the thing is not about what a web service uses. It
|
||||
is about endorsement. And I will explain.
|
||||
|
||||
Free ads, anyone?
|
||||
-----------------
|
||||
|
||||
I remember having this crazy thought some years ago, when I saw some
|
||||
small company in Brazil putting the Facebook logo in their product's
|
||||
box. What surprised me was that the Facebook logo was actually bigger
|
||||
than the company's logo! What the heck?!?! This is "Marketing 101": you
|
||||
are drawing attention to *Facebook*, not to your company who actually
|
||||
made the product. And from that moment on, every time I see Coca Cola
|
||||
putting a "Find us on <http://facebook.com/cocacola>" (don't know if the
|
||||
URL is valid, it's just an example) I have this strange feeling of how
|
||||
an internet company can twist the rules of marketing and get free ads
|
||||
everywhere...
|
||||
|
||||
My point is simple: when a company uses a web service, it is endorsing
|
||||
the use of this same web service, even if in an indirect way. And the
|
||||
same applies to organizations, or foundations, for that matter. So the
|
||||
question I had in my mind when I saw FSF's Twitter account was: do we
|
||||
really want to endorse Twitter? So I sent them an e-mail...
|
||||
|
||||
Talking to the FSF - First message
|
||||
----------------------------------
|
||||
|
||||
I have exchanged some interesting messages with Kyra, FSF's Campaign
|
||||
Organizer, and with John Sullivan, FSF's Executive Director. I will not
|
||||
post the messages here because I don't have their permission to do so,
|
||||
but I will try to summarize what we discussed, and the outcomings.
|
||||
|
||||
My first message was basically requiring some clarifications. I had read
|
||||
this [interesting page about the presence of FSF on
|
||||
Twitter](https://www.fsf.org/twitter), and expressed my disagreement
|
||||
about the arguments used there.
|
||||
|
||||
They explicitly say that Twitter uses nonfree JavaScript, and suggest
|
||||
that the reader use a free client to access it. Yet, they still close
|
||||
their eyes to the fact that a [big part of the Twitter
|
||||
community](http://benjaminmayo.co.uk/how-many-people-use-twitter-s-own-apps)
|
||||
use it through the browser, or through some proprietary application.
|
||||
|
||||
They also acknowledge that Twitter accounts have privacy issues. This is
|
||||
obvious for anyone interested in privacy, and the FSF even provides a
|
||||
link to an interesting story about subpoenas during the Occupy Wall
|
||||
Street movement.
|
||||
|
||||
Nevertheless, the FSF still thinks it's OK to have a Twitter account,
|
||||
because it uses Twitter via a bridge which connects FSF's [StatusNet
|
||||
instance](http://status.fsf.org/fsf) to Twitter. Therefore, in their
|
||||
vision, they are not really using Twitter (at least, they are not using
|
||||
the proprietary JavaScript), and well, let the bridge do its job...
|
||||
|
||||
This is nonsense. Again: when a foundation uses a web service, it is
|
||||
endorsing it, even if indirectly! And that was the main argument I have
|
||||
used when I wrote to them. Let's see how they replied...
|
||||
|
||||
FSF answers
|
||||
-----------
|
||||
|
||||
The answer I've got to my first message was not very good (very weak
|
||||
arguments), so I won't even bother talking about it here. I had to send
|
||||
another message to make it clear that I was interested in real answers.
|
||||
|
||||
After the second reply, it became clear to me that the main point of the
|
||||
FSF is to reach as many people as they can, and pass along the message
|
||||
of software user freedom. I have the impression that it doesn't really
|
||||
matter the means they will use for that, as long as it is not Facebook
|
||||
(more on that latter). So if it takes using a web service that
|
||||
disrespects privacy and uses nonfree Javascript, so be it.
|
||||
|
||||
It also seems to me that the FSF believes in an illusion created by
|
||||
themselves. In some messages, they said that they would try to do a
|
||||
harder job at letting people know that using Twitter is not the
|
||||
solution, but part of the problem (the irony is that they would do that
|
||||
**using** Twitter). However, sometimes I look at FSF's Twitter account,
|
||||
and so far **nothing has been posted** about this topic. Regular people
|
||||
just don't know that there are alternatives to Twitter.
|
||||
|
||||
I will take the liberty to tell a little story now. I told the same
|
||||
story to them, to no avail. Let's imagine the following scenario: John
|
||||
has just heard about Free Software and is beginning to study about it.
|
||||
He does not have a Twitter account, but one of the first things he finds
|
||||
when he looks for Free Software on the web is FSF's Twitter. So, he
|
||||
thinks: "Hey, I would like to receive news about Free Software, and it's
|
||||
just a Twitter account away! Neat!". Then, he creates a Twitter account
|
||||
and starts following FSF there.
|
||||
|
||||
Can you imagine this happening in the real world? I definitely can.
|
||||
|
||||
The FSF is also mistaken when they think that they should go to Twitter
|
||||
in order to reach people. I wrote them, and I will say it again here,
|
||||
that I think we should create ways to reach those users "indirectly"
|
||||
(which, as it turns out, would be more direct!), trying to promote
|
||||
events, conferences, talks, face-to-face gatherings, etc. The
|
||||
LibrePlanet project, for example, is a *great* way of doing this job
|
||||
through local communities, and the FSF should pay a lot more attention
|
||||
to it in my opinion! These are "offline" alternatives, and I confess I
|
||||
think we should discuss the "online" ones with extra care, because we
|
||||
are in such a sad situation regarding the Internet now that I don't even
|
||||
know where to start...
|
||||
|
||||
And last, but definitely not least, the FSF is being **incoherent**.
|
||||
When it says that "it is OK to use Twitter through a bridge in a
|
||||
StatusNet instance", then it should also be coherent and do the same
|
||||
thing for Facebook. One can use Facebook through bridges connecting
|
||||
privacy-friendly services such as
|
||||
[Diaspora](https://github.com/diaspora/diaspora) and
|
||||
[Friendica](https://github.com/friendica/friendica/wiki/How-to:-Friendica%E2%80%99s-Facebook-connector)
|
||||
(the fact that Diaspora itself has a Facebook account for the project is
|
||||
a topic I won't even start to discuss). And through those bridges, the
|
||||
FSF will be able to reach **much** more people than through Twitter.
|
||||
|
||||
I am not, in any way, comparing Twitter and Facebook. I am very much
|
||||
aware that Facebook has its own set of problems, which are bigger and
|
||||
worse than Twitter's (in the most part). But last time I checked, we
|
||||
were not trying to find the best between both. They are both bad in
|
||||
their own ways, and the FSF should not be using either of them!
|
||||
|
||||
Conclusion
|
||||
----------
|
||||
|
||||
My conversation with the FSF ended after a few more messages. It was
|
||||
clear to me that they would not change anything (despite their promises
|
||||
to raise awareness to alternatives to Twitter, as I said above), and I
|
||||
don't believe in infinite discussions about some topic, so I decided to
|
||||
step back. Now, this post is the only thing I can do to try to let
|
||||
people know and think about this subject. It may seem a small problem to
|
||||
solve, and I know that the Free Software community must be together in
|
||||
order to promote the ideas we share and appreciate, but that is
|
||||
*precisely* why I am writing this.
|
||||
|
||||
The Free Software movement was founded on top of ideas and coherence. In
|
||||
order to be successful, we must remain coherent to what we believe. This
|
||||
is not an option, there is no alternative. If we don't defend our own
|
||||
beliefs, no one will.
|
94
content/posts/gdb-and-systemtap-probes-part-1.md
Normal file
94
content/posts/gdb-and-systemtap-probes-part-1.md
Normal file
|
@ -0,0 +1,94 @@
|
|||
---
|
||||
date: 2012-03-29T00:00:00-05:00
|
||||
title: "GDB and SystemTap probes -- part 1"
|
||||
tags: [gdb, fedora-planet, systemtap, howto, en_us, free-software]
|
||||
---
|
||||
|
||||
After a long time, here we are again :-).
|
||||
|
||||
With this post I will start to talk about the integration between GDB
|
||||
and SystemTap. This is something that [Tom
|
||||
Tromey](http://tromey.com/blog/) and I did during the last year. The
|
||||
patch is being reviewed as I write this post, and I expect to see it
|
||||
checked-in in the next few days/weeks. But let's get our hands dirty...
|
||||
|
||||
SystemTap Userspace Probes
|
||||
--------------------------
|
||||
|
||||
You probably use (or have at least heard of) SystemTap, and maybe you
|
||||
think the tool is only useful for kernel inspections. If that's your
|
||||
case, I have a good news: you're wrong! You can actually use SystemTap
|
||||
to inspect userspace applications too, by using what we call **SDT
|
||||
probes**, or *S*tatic *D*efined *T*racing probes. This is a very cheap
|
||||
and easy way to include probes in your application, and you can even
|
||||
specify arguments to those probes.
|
||||
|
||||
In order to use the probes (see an example below), you must include the
|
||||
`<sys/sdt.h>` header file in your source code. If you are using Fedora
|
||||
systems, you can obtain this header file by installing the package
|
||||
`systemtap-sdt-devel`, version equal or greater than `1.4`.
|
||||
|
||||
Here's a simple example of an application with a one-argument probe:
|
||||
|
||||
#!c
|
||||
#include <sys/sdt.h>
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
int a = 10;
|
||||
|
||||
STAP_PROBE1 (test_program, my_probe, a);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
As you can see, this is a very simple program with one probe, which
|
||||
contains one argument. You can now compile the program:
|
||||
|
||||
#!bash
|
||||
$ gcc test_program.c -o test_program
|
||||
|
||||
Now you must be thinking: "*Wait, wait... Didn't you just forget to link
|
||||
this program against some SystemTap-specific library or something?*" And
|
||||
my answer is **no**. One of the spetacular things about this
|
||||
`<sys/sdt.h>` header is that it does not have any dependencies at all!
|
||||
As Tom said in [his blog post](http://tromey.com/blog/?p=687), this is
|
||||
"*a virtuoso display of ELF and GCC asm wizardy*".
|
||||
|
||||
If you want to make sure your probe was inserted in the binary, you can
|
||||
use `readelf` command:
|
||||
|
||||
#!bash
|
||||
$ readelf -x .note.stapsdt ./test_program
|
||||
|
||||
Hex dump of section '.note.stapsdt':
|
||||
0x00000000 08000000 3a000000 03000000 73746170 ....:.......stap
|
||||
0x00000010 73647400 86044000 00000000 88054000 sdt...@.......@.
|
||||
0x00000020 00000000 00000000 00000000 74657374 ............test
|
||||
0x00000030 5f70726f 6772616d 006d795f 70726f62 _program.my_prob
|
||||
0x00000040 65002d34 402d3428 25726270 29000000 e.-4@-4(%rbp)...
|
||||
|
||||
*(I will think about writing an explanation on how the probes are laid
|
||||
out on the binary, but for now you just have to care if you actually
|
||||
see an output from this* `readelf` *command.)*
|
||||
|
||||
You can also use SystemTap to perform this verification:
|
||||
|
||||
#!bash
|
||||
$ stap -L 'process("./test_program").mark("*")'
|
||||
process("./test_program").mark("my_probe") $arg1:long
|
||||
|
||||
So far, so good. If you see an output like the one above, it means your
|
||||
probe is correctly inserted. You could obviously use SystemTap to
|
||||
inspect this probe, but I won't do this right now because this is not
|
||||
the purpose of this post.
|
||||
|
||||
For now, we have learned how to:
|
||||
|
||||
1. Include an `SDT probe` in our source code, and compile it;
|
||||
2. Verify if the probe was correctly inserted.
|
||||
|
||||
In the next post, I will talk about the GDB support that allows you to
|
||||
inspect, print arguments, and gather other information about
|
||||
`SDT probes`. I hope you like it!
|
183
content/posts/gdb-and-systemtap-probes-part-2.md
Normal file
183
content/posts/gdb-and-systemtap-probes-part-2.md
Normal file
|
@ -0,0 +1,183 @@
|
|||
---
|
||||
date: 2012-10-27T00:00:00-05:00
|
||||
title: "GDB and SystemTap Probes -- part 2"
|
||||
tags: [en_us, gdb, systemtap, howto, fedora-planet, free-software]
|
||||
---
|
||||
|
||||
I tell you this: it is depressing when you realize that you spent more
|
||||
time struggling with blog engines than writing posts on your blog!
|
||||
|
||||
It's been a long time since I wrote
|
||||
the
|
||||
[first post]({filename}/2012-03-29-gdb-and-systemtap-probes-part-1.md) about
|
||||
this subject, and since then the patches have been accepted upstream,
|
||||
and [GDB 7.5](http://www.gnu.org/software/gdb/download/ANNOUNCEMENT)
|
||||
now has official support for userspace SystemTap probes :-). Yay!
|
||||
|
||||
Well, but enough of cheap talk, let's get to the business!
|
||||
|
||||
Errata for my last post
|
||||
-----------------------
|
||||
|
||||
[Frank Ch. Eigler](http://web.elastic.org/~fche/blog2/), one of
|
||||
SystemTap's maintainers, kindly mentioned something that I should say
|
||||
about SystemTap userspace probes.
|
||||
|
||||
Basically, it should be clear that `SDT` probes are not the only kind of
|
||||
userspace probing one can do with SystemTap. There is yet another kind
|
||||
of probe (maybe even more powerful, depending on the goals):
|
||||
**DWARF-based function/statement probes**. SystemTap supports this kind
|
||||
of probing mechanism for quite a while now.
|
||||
|
||||
It is not the goal of this post to explain it in detail, but you might
|
||||
want to give it a try by compiling your binary with debuginfo support
|
||||
(use the `-g` flag on `GCC`), and do something like:
|
||||
|
||||
#!bash
|
||||
$ stap -e 'probe process("/bin/foo").function("name") { log($$parms) }' -c /bin/foo
|
||||
$ stap -e 'probe process("/bin/foo").statement("*@file.c:443") { log($$vars) }' -c /bin/foo
|
||||
|
||||
And that's it. You can read SystemTap's documentation, or
|
||||
[this](http://sourceware.org/systemtap/wiki/AddingUserSpaceProbingToApps)
|
||||
guide to learn how to add userspace probes.
|
||||
|
||||
Using GDB with SystemTap SDT Probes
|
||||
-----------------------------------
|
||||
|
||||
Well, now let's get to the interesting part. It is time to make `GDB`
|
||||
work with the `SDT` probe that we have put in our example code. Let's
|
||||
remember it:
|
||||
|
||||
#!c
|
||||
#include <sys/sdt.h>
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
int a = 10;
|
||||
|
||||
STAP_PROBE1 (test_program, my_probe, a);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
It is a very simple example, and we will have to extend it later in
|
||||
order to show more features. But for now, it will do.
|
||||
|
||||
The first thing to do is to open `GDB` (with SystemTap support, of
|
||||
course!), and check to see if it can actually see probe inserted in our
|
||||
example.
|
||||
|
||||
#!bash
|
||||
$ gdb ./test_program
|
||||
GNU gdb (GDB) 7.5.50.20121014-cvs
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
|
||||
...
|
||||
(gdb) info probes
|
||||
Provider Name Where Semaphore Object
|
||||
test_program my_probe 0x00000000004004ae /home/sergio/work/src/git/build/gdb/test_program
|
||||
|
||||
Wow, it actually works! :-)
|
||||
|
||||
If you have seen something like the above, it means your `GDB` is
|
||||
correctly recognizing `SDT` probes. If you see an error, or if your
|
||||
`GDB` doesn't have the `info probes` command, then you'd better make
|
||||
sure you have a recent version of `GDB` otherwise you won't be able to
|
||||
use the `SDT` support.
|
||||
|
||||
### Putting breakpoints in the code
|
||||
|
||||
Anyway, now it is time to start using this support. The first thing I
|
||||
want to show you is how to put a breakpoint in a probe.
|
||||
|
||||
#!bash
|
||||
(gdb) break -probe-stap my_probe
|
||||
Breakpoint 1 at 0x4004ae
|
||||
|
||||
That's all! We have chosen to extend the `break` command in order to
|
||||
support the new `-probe-stap` parameter. If you're wondering *... why
|
||||
the -probe prefix?*, it is because I was asked to implement a complete
|
||||
abstraction layer inside `GDB` in order to allow more types of probes to
|
||||
be added in the future. So, for example, if someone implements support
|
||||
for an hypothetical type of probe called `xyz`, you would have
|
||||
`break -probe-xyz`. It took me a little more time to implement this
|
||||
layer, but it is worth the effort.
|
||||
|
||||
Anyway, as you have see above, `GDB` recognize the probe's name and
|
||||
correctly put a breakpoint in it. You can also confirm that it has done
|
||||
the right thing by matching the address reported by `info probes` with
|
||||
the one reported by `break`: they should be the same.
|
||||
|
||||
Ok, so now, with our `breakpoint` in place, let's run the program and
|
||||
see what happens.
|
||||
|
||||
#!bash
|
||||
(gdb) run
|
||||
Starting program: /home/sergio/work/src/git/build/gdb/test_program
|
||||
|
||||
Breakpoint 1, main (argc=1, argv=0x7fffffffdf68) at /tmp/example-stap.c:8
|
||||
8 STAP_PROBE1 (test_program, my_probe, a);
|
||||
|
||||
As you can see, `GDB` stopped at the exact location of the probe.
|
||||
Therefore, you are now able to put marks (i.e., probes) in your source
|
||||
code which are **location-independent**. It means that it doesn't really
|
||||
matter where in the source code your probe is, and it also doesn't
|
||||
matter if you change the code around it, changing the line numbers, or
|
||||
even moving it to another file. `GDB` will always find your probe, and
|
||||
always stop at the right location. Neat!
|
||||
|
||||
### Examining probes' arguments
|
||||
|
||||
But wait, there's more! Remember when I told you that you could also
|
||||
inspect the probe's arguments? Yes, let's do it now!
|
||||
|
||||
Just remember that, in `SDT`'s parlance, the current probe's argument is
|
||||
`a`. So let's print its value.
|
||||
|
||||
#!bash
|
||||
(gdb) p $_probe_arg0
|
||||
$1 = 10
|
||||
(gdb) p a
|
||||
$2 = 10
|
||||
|
||||
*"Hey, captain, it seems the boat really floats!"*
|
||||
|
||||
Check the source code above, and convince yourself that `a`'s value is
|
||||
`10` :-). As you might have seen, I have used a fairly strange way of
|
||||
printing it. It is because the probe's arguments are available inside
|
||||
`GDB` by means of **convenience variables**. You can see a list of them
|
||||
[here](http://sourceware.org/gdb/current/onlinedocs/gdb/Convenience-Vars.html#Convenience-Vars).
|
||||
|
||||
Since `SDT` probes can have up to 12 arguments (i.e., you can use
|
||||
`STAP_PROBE1` ... `STAP_PROBE12`), we have created inside `GDB` 12
|
||||
convenience variables, named `$_probe_arg0` until `$_probe_arg11`. I
|
||||
know, it is not an easy name to remember, and even the relation between
|
||||
`SDT` naming and `GDB` naming is not direct (i.e., you have to subtract
|
||||
1 from the `SDT` probe number). If you are not satisfied with this,
|
||||
please open a bug in our [bugzilla](http://sourceware.org/bugzilla/) and
|
||||
I promise we will discuss other options.
|
||||
|
||||
I would like to emphasize something here: just as you don't need
|
||||
debuginfo support for dealing with probes inside `GDB`, you also don't
|
||||
need debuginfo support for dealing with their arguments as well. It
|
||||
means that you can actually compile your code without debuginfo support,
|
||||
but still have access to some important variables/expressions when
|
||||
debugging it. Depending on how `GCC` optimizes your code, you may
|
||||
experience some difficulties with argument printing, but so far I
|
||||
haven't heard of anything like that.
|
||||
|
||||
More to come
|
||||
------------
|
||||
|
||||
Ok, now we have covered more things about the `SDT` probe support inside
|
||||
`GDB`, and I hope you understood all the concepts. It is not hard to get
|
||||
things going with this, specially because you don't need extra libraries
|
||||
to make it work.
|
||||
|
||||
In the next post, I intend to finish this series by explaining how to
|
||||
use `tracepoints` with `SDT` probes. Also, as I said in the previous
|
||||
post of this series, maybe I will talk a little bit about how the `SDT`
|
||||
probes are organized within the binary.
|
||||
|
||||
See you soon!
|
238
content/posts/gdb-and-systemtap-probes-part-3.md
Normal file
238
content/posts/gdb-and-systemtap-probes-part-3.md
Normal file
|
@ -0,0 +1,238 @@
|
|||
---
|
||||
date: 2012-11-02T00:00:00-05:00
|
||||
title: "GDB and SystemTap Probes -- part 3"
|
||||
tags: [en_us, gdb, systemtap, howto, fedora-planet, free-software]
|
||||
---
|
||||
|
||||
Hi everybody :-).
|
||||
|
||||
I finally got some time to finish this series of posts, and I hope you
|
||||
like the overall result. For those of you who are reading this blog
|
||||
for the first time, you can access the first
|
||||
post
|
||||
[here]({filename}/2012-03-29-gdb-and-systemtap-probes-part-1.md), and
|
||||
the
|
||||
second
|
||||
[here]({filename}/2012-10-27-gdb-and-systemtap-probes-part-2.md).
|
||||
|
||||
My goal with this third post is to talk a little bit about how you can
|
||||
use the `SDT` probes with `tracepoints` inside `GDB`. Maybe this
|
||||
particular feature will not be so helpful to you, but I recommend
|
||||
reading the post either way. I will also give a brief explanation about
|
||||
how the `SDT` probes are laid out inside the binary. So, let's start!
|
||||
|
||||
Complementary information
|
||||
-------------------------
|
||||
|
||||
In my last post, I forgot to mention that the `SDT` probe support
|
||||
present on older versions of Fedora `GDB` is not exactly as the way I
|
||||
described here. This is because Fedora `GDB` adopted this feature much
|
||||
earlier than upstream `GDB` itself, so while this has a great positive
|
||||
aspect in terms of how the distro's philosophy works (i.e., Fedora
|
||||
contains leading-edge features, so if you want to know how to FLOSS
|
||||
community will be in a few months, use it!), it also has the downside of
|
||||
delivering older/different versions of features in older Fedoras. But of
|
||||
course, this `SDT` feature will be fully available on Fedora 18, to be
|
||||
announced soon.
|
||||
|
||||
My suggestion is that if you use a not-so-recent Fedora (like Fedora 16,
|
||||
15, etc), please upgrade it to the last version, or compile your own
|
||||
version of `GDB` yourself (it's not that hard, I will make a post about
|
||||
it in the next days/weeks!).
|
||||
|
||||
With that said, let's move on to our main topic here.
|
||||
|
||||
SDT Probes and Tracepoint
|
||||
-------------------------
|
||||
|
||||
Before anything else, let me explain what a `tracepoint` is. Think of it
|
||||
as *a breakpoint which doesn't stop the program's execution
|
||||
when it hits*. In fact, it's a bit more than that: you can define
|
||||
**actions** associated with a `tracepoint`, and those actions will be
|
||||
performed when the `tracepoint` is hit. Neat, huh? :-)
|
||||
|
||||
There is a nice description of what a `tracepoint` in the [GDB
|
||||
documentation](http://sourceware.org/gdb/current/onlinedocs/gdb/Tracepoints.html#Tracepoints),
|
||||
I recommend you give it a reading to understand the concept.
|
||||
|
||||
Ok, so now we have to learn how to put `tracepoints` in our code, and
|
||||
how to define actions for them. But before that, let's remember our
|
||||
example program:
|
||||
|
||||
#!c
|
||||
#include <sys/sdt.h>
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
int a = 10;
|
||||
|
||||
STAP_PROBE1 (test_program, my_probe, a);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Very simple, isn't it? Ok, to the `tracepoints` now, my friends.
|
||||
|
||||
Using `tracepoints` inside `GDB`
|
||||
--------------------------------
|
||||
|
||||
In order to properly use `tracepoints` inside `GDB`, you will need to
|
||||
use `gdbserver`, a tiny version of `GDB` suitable for debugging programs
|
||||
remotely, over the net or serial line. In short, this is because `GDB`
|
||||
cannot put tracepoints on a program running directly under it, so we
|
||||
have to run it inside `gdbserver` and then connect `GDB` to it.
|
||||
|
||||
### Running our program inside `gdbserver`
|
||||
|
||||
In our case, we will just start `gdbserver` in our machine, order it to
|
||||
listen to some high port, and connect to it through `localhost`, so
|
||||
there will be no need to have access to another computer or device.
|
||||
|
||||
First of all, make sure you have `gdbserver` installed. If you use
|
||||
Fedora, the package name you will have to install is `gdb-gdbserver`. If
|
||||
you have it installed, you can do:
|
||||
|
||||
#!bash
|
||||
$ gdbserver :3001 ./test_program
|
||||
Process ./test_program created; pid = 17793
|
||||
Listening on port 3001
|
||||
|
||||
The second argument passed to `gdbserver` instructs it to listen on the
|
||||
port 3001 of your loopback interface, a.k.a. `localhost`.
|
||||
|
||||
You will notice that `gdbserver` will stay there indefinitely, waiting
|
||||
for new connections to arrive. Don't worry, we will connect to it soon!
|
||||
|
||||
### Connecting an instance of `GDB` to `gdbserver`
|
||||
|
||||
Now, go to another terminal and start `GDB` with our program:
|
||||
|
||||
#!bash
|
||||
$ gdb ./test_program
|
||||
...
|
||||
(gdb) target remote :3001
|
||||
Remote debugging using :3001
|
||||
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
|
||||
Loaded symbols for /lib64/ld-linux-x86-64.so.2
|
||||
0x0000003d60401530 in _start () from /lib64/ld-linux-x86-64.so.2
|
||||
|
||||
The command you have to use inside `GDB` is `target remote`. It takes as
|
||||
an argument the host and the port to which you want to connect. In our
|
||||
case, we just want it to connect to `localhost`, port 3001. If you saw
|
||||
an output like the above, great, things are working for you (*don't pay
|
||||
attention to the messages about
|
||||
glibc debug information*). If you didn't see it, please check to see if
|
||||
you're connecting to the right port, and if no other service is using
|
||||
it.
|
||||
|
||||
Ok, so now it is time to start our *trace experiment*!
|
||||
|
||||
### Creating the `tracepoints`
|
||||
|
||||
**Every command should be issued on GDB, not on gdbserver!**
|
||||
|
||||
In your `GDB` prompt, put a `tracepoint` in the probe named `my_probe`:
|
||||
|
||||
#!bash
|
||||
(gdb) trace -probe-stap my_probe
|
||||
Tracepoint 1 at 0x4005a9
|
||||
|
||||
As you can see, the `trace` command takes exactly the same arguments as
|
||||
the `break` command. Thus, you need to use the `-probe-stap` modified in
|
||||
order to instruct `GDB` to put the `tracepoint` in the probe.
|
||||
|
||||
And now, let's define the **actions** associated with this `tracepoint`.
|
||||
To do that, we use the `actions` command, which is an interactive
|
||||
command inside `GDB`. It takes some specific keywords, and if you want
|
||||
to learn more about it, please take a look at [this
|
||||
link](http://sourceware.org/gdb/current/onlinedocs/gdb/Tracepoint-Actions.html#Tracepoint-Actions).
|
||||
For this example, we will use only the `collect` keyword, which tells
|
||||
`GDB` to... hm... collect something :-). In our case, it will collect
|
||||
the probe's first argument, or `$_probe_arg0`, as you may remember.
|
||||
|
||||
#!bash
|
||||
(gdb) actions
|
||||
Enter actions for tracepoint 1, one per line.
|
||||
End with a line saying just "end".
|
||||
>collect $_probe_arg0
|
||||
>end
|
||||
(gdb)
|
||||
|
||||
Simple as that. Finally, we have to define a `breakpoint` in the last
|
||||
instruction of our program, because it is necessary to keep it running
|
||||
on `gdbserver` in order to examine the `tracepoints` later. If we didn't
|
||||
put this `breakpoint`, our program would finish and `gdbserver` would
|
||||
not be able to provide information about what happened with our
|
||||
`tracepoints`. In our case, we will simply put a `breakpoint` on line
|
||||
10, i.e., on the `return 0;`:
|
||||
|
||||
### Running the trace experiment
|
||||
|
||||
Ok, time to run our trace experiment. First, we must issue a `tstart` to
|
||||
tell `GDB` to start monitoring the `tracepoints`. And then, we can
|
||||
continue our program normally.
|
||||
|
||||
#!bash
|
||||
(gdb) tstart
|
||||
(gdb) continue
|
||||
Continuing.
|
||||
|
||||
Breakpoint 1, main (argc=1, argv=0x7fffffffde88) at /tmp/test_program.c:10
|
||||
10 return 0;
|
||||
(gdb) tstop
|
||||
(gdb)
|
||||
|
||||
Remember, `GDB` is **not** going to stop your program, because
|
||||
`tracepoints` are designed to not interfere with the execution of it.
|
||||
Also notice that we have also stopped the trace experiment after the
|
||||
`breakpoint` hit, by using the `tstop` command.
|
||||
|
||||
Now, we will be able to examine what the `tracepoint` has collected.
|
||||
First, we will the `tfind` command to make sure the `tracepoint` has
|
||||
hit, and then we can inspect what we ordered it to collect:
|
||||
|
||||
#!bash
|
||||
(gdb) tfind start
|
||||
Found trace frame 0, tracepoint 1
|
||||
8 STAP_PROBE1 (test_program, my_probe, a);
|
||||
(gdb) p $_probe_arg0
|
||||
$1 = 10
|
||||
|
||||
And it works! Notice that we are printing the probe argument using the
|
||||
same notation as with `breakpoints`, even though we are not exactly
|
||||
executing the `STAP_PROBE1` instruction. What does it mean? Well, with
|
||||
the `tfind start` command we tell `GDB` to actually use the trace frame
|
||||
collected during the program's execution, which, in this case, is the
|
||||
probe argument. If you know `GDB`, think of it as if we were using the
|
||||
`frame` command to jump back to a specific frame, where we would have
|
||||
access to its state.
|
||||
|
||||
This is a very simple example of how to use the `SDT` probe support in
|
||||
`GDB` with `tracepoints`. There is much more you can do, but I hope I
|
||||
could explain the basics so that you can start playing with this
|
||||
feature.
|
||||
|
||||
How the `SDT` probe is laid out in the binary
|
||||
---------------------------------------------
|
||||
|
||||
You might be interested in learning how the probes are created inside
|
||||
the binary. Other than reading the source code of
|
||||
`/usr/include/sys/sdt.h`, which is the heart of the whole feature, I
|
||||
also recommend [this
|
||||
page](http://sourceware.org/systemtap/wiki/UserSpaceProbeImplementation),
|
||||
which explains in detail what's going on under the hood. I also
|
||||
recommend that you study a little about how the ELF format works,
|
||||
specifically about notes in the ELF file.
|
||||
|
||||
Conclusion
|
||||
----------
|
||||
|
||||
After this series of blog posts, I expect that you will now be able to
|
||||
use the not-so-new feature of `SDT` probe support on `GDB`. Of course,
|
||||
if you find some bug while using this, please feel free to report it
|
||||
using [our bugzilla](http://sourceware.org/bugzilla/). And if you have
|
||||
some question, use the comment system below and I will answer ASAP :-).
|
||||
|
||||
See ya, and thanks for reading!
|
72
content/posts/gdb-stap-linker-debugger.md
Normal file
72
content/posts/gdb-stap-linker-debugger.md
Normal file
|
@ -0,0 +1,72 @@
|
|||
---
|
||||
date: 2013-05-28T00:00:00-05:00
|
||||
title: "GDB and SystemTap integration improving linker-debugger interface"
|
||||
tags: [en_us, fedora-planet, gdb, systemtap, free-software]
|
||||
---
|
||||
|
||||
It is really nice to see something you did in a project influence in
|
||||
future features and developments. I always feel happy and proud when I
|
||||
notice such scenarios happening, and this time was no different. [Gary
|
||||
Benson](http://gbenson.net/), a colleague at Red Hat who works in the
|
||||
GDB team as well, has implemented a way of improving the interface
|
||||
between the linker and the debugger, and one of the things he used to
|
||||
achieve this is the GDB <-> SystemTap integration that I
|
||||
implemented with [Tom Tromey](http://tromey.com/) 2 years ago. Neat!
|
||||
|
||||
The problem
|
||||
-----------
|
||||
|
||||
You can read a detailed description of the problem in [the message Gary
|
||||
sent to the gdb-patches mailing
|
||||
list](http://sourceware.org/ml/gdb-patches/2013-05/msg00624.html), but
|
||||
to summarize: GDB needs to interface with the linker in order to
|
||||
identify which shared libraries were loaded during the inferior's (i.e.,
|
||||
program being debugged) life.
|
||||
|
||||
Nowadays, what GDB does is to put a breakpoint in `_dl_debug_state`,
|
||||
which is an empty function called by the linker every time a shared
|
||||
library is loaded (the linker calls it twice, once before modifying the
|
||||
list of loaded shlibs, and once after). But GDB has no way to know what
|
||||
has changed in the list of loaded shlibs, and therefore it needs to load
|
||||
the entire list every time something happens. You can imagine how bad
|
||||
this is for performance...
|
||||
|
||||
The solution
|
||||
------------
|
||||
|
||||
What Gary did was to put SDT probes strategically on the linker, so that
|
||||
GDB could make use of them when examining for changes in the list of
|
||||
loaded shlibs. It improves performance a lot, because now GDB doesn't
|
||||
need to stop twice every time a shlib is loaded (it just needs to do
|
||||
that when `stop-on-solib-events` is set); it just needs to stop at the
|
||||
right probe, which will inform the address of the link-map entry of the
|
||||
first newly added library. It means GDB also won't need to walk through
|
||||
the list of shlibs and identify what has changed: you get that for free
|
||||
by examining the probe's argument.
|
||||
|
||||
Gary also mentions a discrepancy that happened on Solaris libc, which
|
||||
has also been solved by his patch.
|
||||
|
||||
And now, the most impressing thing: the numbers! Take a look at this
|
||||
table, which displays the huge improvement in the performance when using
|
||||
lots of shlibs (the time is in *seconds*):
|
||||
|
||||
| Number of shlibs | 128 | 256 | 512 | 1024 | 2048 | 4096 |
|
||||
|--------------------|--------|--------|--------|---------|---------|---------|
|
||||
| Old interface | > 0 | > 1 | > 4 | > 12 | > 47 | > 185 |
|
||||
| New interface | > 0 | > 0 | > 2 | > 4 | > 10 | > 36 |
|
||||
|
||||
Impressive, isn't it?
|
||||
|
||||
Conclusion
|
||||
----------
|
||||
|
||||
This is one the things I like most in Free Software projects: the
|
||||
possibility of extending and improving things by using what others did
|
||||
before. When I hacked GDB to implement the integration between itself
|
||||
and SystemTap, I had absolutely no idea that this could be used for
|
||||
improving the interface between the linker and the debugger (though I am
|
||||
almost sure that Tom was already thinking ahead!). And I can say it is a
|
||||
pleasure and I feel proud when I see such things happening. It just
|
||||
makes me feel more and more certain that Free Software is the way to go
|
||||
:-).
|
57
content/posts/gnupg-encrypt-to-self.md
Normal file
57
content/posts/gnupg-encrypt-to-self.md
Normal file
|
@ -0,0 +1,57 @@
|
|||
---
|
||||
date: 2014-06-08T00:00:00-05:00
|
||||
title: "Encrypting your e-mails to yourself using GnuPG"
|
||||
tags: [en_us, free-software, security, privacy, howto]
|
||||
---
|
||||
|
||||
It has been a while since I dream of being able to send encrypted e-mail
|
||||
to everyone in my contact list. It is still a distant future, but
|
||||
fortunately it is getting closer with campaigns like the [Reset the
|
||||
Net](https://www.resetthenet.org/). And while I already send encrypted
|
||||
messages to a couple of friends, it is always good to discover (and
|
||||
share!) some configuration tips to make your life easy :-).
|
||||
|
||||
I use [Gnus](http://gnus.org/) as my e-mail (and news!) reader for quite
|
||||
a while, and I can say it is a very nice piece of software (kudos to
|
||||
Lars and all the devs!). For those who are not aware, Gnus runs inside
|
||||
[Emacs](https://gnu.org/software/emacs/), which is a very nice operating
|
||||
system (and text editor also).
|
||||
|
||||
Emacs provides
|
||||
[EasyPG](https://www.gnu.org/software/emacs/manual/html_mono/epa.html)
|
||||
for those who want to make use of cryptographic operations inside it,
|
||||
and Gnus also uses it to encrypt/decrypt the messages it handles. I am
|
||||
using it for my own messages, and it works like a charm. However, there
|
||||
was something that I had not had configured properly: the ability to
|
||||
read the encrypted messages that I was sending to my friends.
|
||||
|
||||
In a brief explanation, when you send an encrypted message GnuPG looks
|
||||
at the recipients of the message (i.e., the people that will receive it,
|
||||
listed in the “From:”, “Cc:” and “Bcc:” fields) and encrypts it
|
||||
according to each recipient's public key, which must be present in your
|
||||
local keyring. But when you send a message to someone, you are not
|
||||
(usually) present in the original recipients list, so GnuPG does not
|
||||
encrypt the message using your public key, and therefore you are unable
|
||||
to read the message later. In fact, this example can be used to
|
||||
illustrate how secure this system really is, when not even the sender
|
||||
can read his/her message again!
|
||||
|
||||
Anyway, this behavior was mostly unnoticed by me because I rarely look
|
||||
at my “Sent/” IMAP folder. Until today. And it kind of pissed me off,
|
||||
because I wanted to read what I wrote, damn it! So, after looking for a
|
||||
solution, I found a neat GnuPG setting called `hidden-encrypt-to`. It
|
||||
basically tells GnuPG to add a hidden recipient in every message it
|
||||
encrypts. So, all I had to do was to provide my key's ID and ask GnuPG
|
||||
to always encrypt the message to myself too.
|
||||
|
||||
You basically have to edit your `$HOME/.gnupg/gpg.conf` file and put
|
||||
this setting there:
|
||||
|
||||
#!bash
|
||||
hidden-encrypt-to ID
|
||||
|
||||
That's it. Now, whenever I send an encrypted message, GnuPG encrypts it
|
||||
for me as well, so I just need to go to my “Sent/” folder, and decrypt
|
||||
it to read.
|
||||
|
||||
I hope this tip helps you the same way it helped me!
|
151
content/posts/impressoes-fisl15.md
Normal file
151
content/posts/impressoes-fisl15.md
Normal file
|
@ -0,0 +1,151 @@
|
|||
---
|
||||
date: 2014-05-31T00:00:00-05:00
|
||||
title: "FISL 15: Impressões, opiniões e discussões"
|
||||
tags: [pt_br, free-software, fisl, report, thoughts]
|
||||
---
|
||||
|
||||
Após quase 1 mês, cá estou pra compartilhar minhas impressões a respeito
|
||||
do [FISL 15](http://softwarelivre.org/fisl15), que aconteceu em Porto
|
||||
Alegre, RS, entre os dias 7 e 10 de Maio de 2014.
|
||||
|
||||
Antes de mais nada, gostaria de fazer um pequeno “jabá”. Acho que
|
||||
mereço, por conta do trabalho que tive pra fazer isso (já explico) dar
|
||||
certo! Estou falando da palestra do [Diego
|
||||
Aranha](http://www.ic.unicamp.br/~dfaranha), que foi um dos destaques
|
||||
dessa edição do evento. A palestra, entitulada [Software Livre e
|
||||
Segurança
|
||||
Eleitoral](http://papers.softwarelivre.org/papers_ng/activity/view?activity_id=581)
|
||||
(veja o [vídeo dela
|
||||
aqui](http://hemingway.softwarelivre.org/fisl15/high/41a/sala41a-high-201405101502.ogv))
|
||||
é, na minha opinião, algo que todo cidadão brasileiro deveria assistir e
|
||||
refletir a respeito. Comecei a me envolver mais no assunto da urna
|
||||
eletrônica brasileira depois que assisti essa mesma palestra (proferida
|
||||
pelo próprio Diego), há mais de 1 ano atrás, na UNICAMP. Considero
|
||||
impossível não se sentir minimamente indignado com a falta de escrúpulos
|
||||
(e de competência!) daqueles que, teoricamente, estão zelando pela
|
||||
democracia no país.
|
||||
|
||||
Enfim, depois de assistir essa palestra pelo menos umas 3 vezes (sendo
|
||||
uma delas na edição do Software Freedom Day Campinas, que eu organizei
|
||||
em nome do LibrePlanet São Paulo), achei que devesse tentar “mexer os
|
||||
pauzinhos” e colocá-la na grade oficial do FISL. Só pra garantir, eu e o
|
||||
Diego também submetemos a mesma palestra pelo sistema normal de
|
||||
submissão. Mas no fim, depois de conversar com algumas pessoas “de
|
||||
dentro” (agradecimento especial ao Paulo Meirelles da UnB nesse ponto),
|
||||
consegui encaixar o Diego na grade de destaques do evento! Foi uma
|
||||
grande conquista, e tenho certeza de que quem viu a palestra saiu de lá
|
||||
com a pulga atrás da orelha...
|
||||
|
||||
Mas enfim, vamos aos fatos. Minha participação no FISL desse ano foi
|
||||
mais tímida do que no ano passado, mas após alguma reflexão, cheguei à
|
||||
conclusão de que ela também foi mais proveitosa. Apesar de ter submetido
|
||||
praticamente 8 propostas de palestras, cobrindo os mais diferentes
|
||||
níveis e assuntos, não tive **nenhuma** proposta aceita! Obviamente
|
||||
fiquei bastante chateado com isso, ainda mais depois de ver o nível de
|
||||
algumas palestras que foram aprovadas... Confesso que considerei não ir
|
||||
ao evento, já que, além de não ter tido nenhuma palestra aprovada (o que
|
||||
significava que eu não receberia nenhum patrocínio pra ir), também não
|
||||
ia poder rever muitos amigos que não puderam comparecer nessa edição
|
||||
(podem botar isso na conta da Copa).
|
||||
|
||||
Passada a fase de chorar as pitangas, decidi ir de qualquer maneira. O
|
||||
[Alexandre Oliva](http://www.fsfla.org/~lxoliva/) havia me convidado
|
||||
para fazer parte de uma “mesa redonda” cujo objetivo era debater a
|
||||
suposta morte do movimento Software Livre no Brasil. Senti-me honrado
|
||||
com o convite, e como participo da causa há bastante tempo, tinha
|
||||
bastante coisa a dizer. Foi uma honra ter feito parte da mesa com o
|
||||
próprio Oliva, o [Anahuac](http://anahuac.eu), o
|
||||
[Fred](http://teia.bio.br/blog/), e o
|
||||
[Panaggio](http://blog.panaggio.net/). Tivemos 2 horas para falar nossas
|
||||
opiniões a respeito do tema, e abrir a discussão para o público presente
|
||||
no auditório. Infelizmente, acabou sendo muito pouco tempo para tanta
|
||||
coisa que tínhamos pra falar! Eu mesmo acabei dizendo muito pouco, e
|
||||
resolvi parar antes para deixar a platéia se manifestar, na esperança de
|
||||
que o microfone iria voltar às minhas mãos para que eu pudesse fazer as
|
||||
considerações finais. Ledo engano! Todos queriam um pedacinho do tempo,
|
||||
e acabou que ficou faltando muita coisa a ser dita, de ambos os lados
|
||||
(palestrantes e platéia). Aliás, se quiser ver o vídeo do debate, faça o
|
||||
[download dele
|
||||
aqui](http://hemingway.softwarelivre.org/fisl15/high/41a/sala41a-high-201405081002.ogv).
|
||||
|
||||
Não é exagero dizer que esse debate explicitou um sentimento recorrente
|
||||
nos ativistas do movimento Software Livre. Há algum tempo vínhamos tendo
|
||||
essa “consciência coletiva” de que as coisas não estavam muito bem pro
|
||||
lado do Software Livre (ao contrário do Open Source, que vai de vento em
|
||||
popa). Eu mesmo já havia feito alguns posts a respeito do assunto, e do
|
||||
[meu incômodo quando pedi para
|
||||
que o nome Software Livre não fosse utilizado indevidamente (post em
|
||||
inglês)]({filename}2012-12-17-misunderstanding-free-software.md), e o
|
||||
Anahuac levantou esse ponto durante o debate também. Achei bastante
|
||||
sintomático isso. E depois que voltei do FISL comecei a pensar bastante
|
||||
a respeito desses (e outros) assuntos novamente, o que já gerou alguns
|
||||
posts por aqui.
|
||||
|
||||
Gostei, também, da maior parte das colocações que ouvi da platéia.
|
||||
Apesar de eu ter tido a impressão de que algumas pessoas não entenderam
|
||||
muito bem o que estava sendo discutido, considero que os contrapontos
|
||||
levantados por parte da platéia são dignos de serem pensados, mesmo que
|
||||
a pessoa que trouxe esses contrapontos não seja necessariamente uma
|
||||
ativista. Talvez eu prepare mais um post a respeito do que ouvi por
|
||||
lá...
|
||||
|
||||
Por último, já no final da palestra, não pude deixar de pedir o
|
||||
microfone pro Oliva e levantar um ponto que eu queria que tivesse tido
|
||||
mais atenção: precisamos hackear mais! O Software Livre, enquanto
|
||||
movimento social e político, precisa de pessoas que discutam e tragam à
|
||||
tona os problemas que nós, como sociedade, devemos resolver. No entanto,
|
||||
o Software Livre também é um movimento técnico, e como tal precisa de
|
||||
ferramentas que façam frente ao domínio proprietário. Hackers,
|
||||
precisamos de vocês :-).
|
||||
|
||||
Mas... mudando um pouco de assunto, eu também fui ao evento para
|
||||
divulgar, mais uma vez, o nosso grupo de Software Livre, chamado
|
||||
[LibrePlanet São Paulo](http://sp.libreplanetbr.org). Nesse ano, levamos
|
||||
duas propostas interessantes ao evento: contas grátis na nossa instância
|
||||
do [GNU Social](http://gnu.io), e no nosso servidor Jabber.
|
||||
|
||||
O GNU Social, que antes era conhecido como StatusNet (e que era
|
||||
utilizado pelo site [Identica](http://identi.ca), que depois migrou para
|
||||
um outro tipo de serviço), é como se fosse um “Twitter distribuído”,
|
||||
implementado com Software Livre. O ponto é que você consegue utilizar
|
||||
seu próprio servidor (se quiser), e consegue conversar com pessoas que
|
||||
estão usando GNU Social em outros servidores. Se quiser registrar sua
|
||||
conta na nossa instância do GNU Social, pode acessar a [página de
|
||||
cadastro](http://social.libreplanetbr.org/main/register).
|
||||
|
||||
O Jabber (XMPP) é um “conhecido anônimo” de quase todos. É a tecnologia
|
||||
que o Google Talk, o Facebook Chat, o WhatsApp, e vários outros serviços
|
||||
proprietários utilizam. Nós, do LibrePlanet São Paulo, estamos
|
||||
oferecendo contas de graça no nosso servidor Jabber. Ainda não possuímos
|
||||
uma página de cadastro de usuários, então se você quiser uma conta,
|
||||
entre em contato comigo através do e-mail (ou deixe um comentário aqui).
|
||||
É importante dizer que o Jabber/XMPP também é um protocolo totalmente
|
||||
distribuído, e que você vai conseguir conversar com outras pessoas que
|
||||
estão utilizando Jabber em outros servidores! Infelizmente, você não vai
|
||||
poder falar com quem usa o Facebook Chat e o WhatsApp, porque essas
|
||||
empresas proíbem essa funcionalidade. O Google permitia isso para quem
|
||||
utilizava o Google Chat “normal”; se a pessoa já tiver migrado para o
|
||||
Hangout, ela também não vai conseguir falar com outros servidores
|
||||
Jabber. Mais um motivo pra largar esses “serviços” vampíricos, não acha?
|
||||
:-).
|
||||
|
||||
O saldo final foi de 5 contas Jabber criadas, e nenhuma conta GNU
|
||||
Social. Infelizmente, isso é absolutamente normal em qualquer tipo de
|
||||
evento; o FISL, apesar de ter “SL” no nome, é, em sua esmagadora
|
||||
maioria, composto por pessoas que às vezes não se importam tanto com a
|
||||
parte social.
|
||||
|
||||
Por último, gostaria de deixar registrado o excelente trabalho que o
|
||||
pessoal do LibrePlanet São Paulo e Espírito Santo fizeram durante o
|
||||
Encontro Comunitário dos grupos. Veja o [vídeo do encontro
|
||||
aqui](http://hemingway.softwarelivre.org/fisl15/high/41c/sala41c-high-201405090909.ogv).
|
||||
|
||||
No final, fiquei feliz com o resultado do evento. O ponto alto, pra mim,
|
||||
certamente foi o debate. Acho que uma “mexida” no status quo é sempre
|
||||
bem vinda, e foi isso que tentamos fazer. Esse movimento acabou gerando
|
||||
atividade dos dois lados (Software Livre e Open Source), e também
|
||||
ajudou-nos a diferenciar melhor quem é quem nessa história toda. Agora,
|
||||
é esperar o próximo FISL pra ver o que saiu e o que ficou no lugar. Até
|
||||
lá!
|
||||
|
||||
Abraços!
|
265
content/posts/improve-gcore-elf-headers.md
Normal file
265
content/posts/improve-gcore-elf-headers.md
Normal file
|
@ -0,0 +1,265 @@
|
|||
---
|
||||
date: 2019-05-06T00:00:00-05:00
|
||||
title: "Improve gcore and support dumping ELF headers"
|
||||
tags: [debian, fedora-planet, free-software, gdb, linux, en_us]
|
||||
---
|
||||
|
||||
Back in 2016, when life was simpler, a Fedora GDB user
|
||||
reported [a bug](https://bugzilla.redhat.com/show_bug.cgi?id=1371380)
|
||||
(or a feature request, depending on how you interpret it) saying that
|
||||
GDB's `gcore` command did not respect the `COREFILTER_ELF_HEADERS`
|
||||
flag, which instructs it to dump memory pages containing ELF headers.
|
||||
As you may or may not remember, I have
|
||||
already
|
||||
[written about the broader topic of revamping GDB's internal corefile dump algorithm]({filename}/2015-04-05-linux-memory-mapping.md);
|
||||
it's an interesting read and I recommend it if you don't know how
|
||||
Linux (or GDB) decides which mappings to dump to a corefile.
|
||||
|
||||
Anyway, even though the bug was interesting and had to do with a work
|
||||
I'd done before, I couldn't really work on it at the time, so I
|
||||
decided to put it in the TODO list. Of course, the "TODO list" is
|
||||
actually a crack where most things fall through and are usually never
|
||||
seen again, so I was blissfully ignoring this request because I had
|
||||
other major priorities to deal with. That is, until a seemingly
|
||||
unrelated problem forced me to face this once and for all!
|
||||
|
||||
What? A regression? Since when?
|
||||
---------------------------------
|
||||
|
||||
As the Fedora GDB maintainer, I'm routinely preparing new releases for
|
||||
Fedora Rawhide distribution, and sometimes for the stable versions of
|
||||
the distro as well. And I try to be very careful when dealing with
|
||||
new releases, because a regression introduced now can come and bite us
|
||||
(i.e., the Red Hat GDB team) back many years in the future, when it's
|
||||
sometimes too late or too difficult to fix things. So, a mandatory
|
||||
part of every release preparation is to actually run a regression test
|
||||
against the previous release, and make sure that everything is working
|
||||
correctly.
|
||||
|
||||
One of these days, some weeks ago, I had finished running the
|
||||
regression check for the release I was preparing when I noticed
|
||||
something strange: a specific, Fedora-only corefile test was FAILing.
|
||||
That's a no-no, so I started investigating and found that the
|
||||
underlying reason was that, when the corefile was being generated,
|
||||
the [build-id](https://fedoraproject.org/wiki/Releases/FeatureBuildId)
|
||||
note from the executable was not being copied over. Fedora GDB has a
|
||||
local patch whose job is to, given a corefile with a build-id note,
|
||||
locate the corresponding binary that generated it. Without the
|
||||
build-id note, no binary was being located.
|
||||
|
||||
Coincidentally or not, at the same I started noticing some users
|
||||
reporting very similar build-id issues on the freenode's `#gdb`
|
||||
channel, and I thought that this bug had a potential to become a big
|
||||
headache for us if nothing was done to fix it right now.
|
||||
|
||||
I asked for some help from the team, and we managed to discover that
|
||||
the problem was also happening with upstream `gcore`, and that it was
|
||||
probably something that **binutils** was doing, and not GDB. Hmm...
|
||||
|
||||
Ah, so it's `ld`'s fault. Or is it?
|
||||
------------------------------------
|
||||
|
||||
So there I went, trying to confirm that it was binutils's fault, and
|
||||
not GDB's. Of course, if I could confirm this, then I could also tell
|
||||
the binutils guys to fix it, which meant less work for us :-).
|
||||
|
||||
With a lot of help from Keith Seitz, I was able to bisect the problem
|
||||
and found that it started with the following commit:
|
||||
|
||||
commit f6aec96dce1ddbd8961a3aa8a2925db2021719bb
|
||||
Author: H.J. Lu <hjl.tools@gmail.com>
|
||||
Date: Tue Feb 27 11:34:20 2018 -0800
|
||||
|
||||
ld: Add --enable-separate-code
|
||||
|
||||
This is a commit that touches the linker, which is part of binutils.
|
||||
So that means this is not GDB's problem, right?!? Hmm. No,
|
||||
unfortunately not.
|
||||
|
||||
What the commit above does is to simply enable the use of
|
||||
`--enable-separate-code` (or `-z separate-code`) by default when
|
||||
linking an ELF program on x86_64 (more on that later). On a first
|
||||
glance, this change should not impact the corefile generation, and
|
||||
indeed, if you tell the Linux kernel to generate a corefile (for
|
||||
example, by doing `sleep 60 &` and then hitting `C-\`), you will
|
||||
notice that the build-id note **is** included into it! So GDB was
|
||||
still a suspect here. The investigation needed to continue.
|
||||
|
||||
What's with `-z separate-code`?
|
||||
-------------------------------
|
||||
|
||||
The `-z separate-code` option makes the code segment in the ELF file
|
||||
to put in a completely separated segment than data segment. This was
|
||||
done to increase the security of generated binaries. Before it,
|
||||
everything (code and data) was put together in the same memory
|
||||
region. What this means in practice is that, before, you would see
|
||||
something like this when you examined `/proc/PID/smaps`:
|
||||
|
||||
00400000-00401000 r-xp 00000000 fc:01 798593 /file
|
||||
Size: 4 kB
|
||||
KernelPageSize: 4 kB
|
||||
MMUPageSize: 4 kB
|
||||
Rss: 4 kB
|
||||
Pss: 4 kB
|
||||
Shared_Clean: 0 kB
|
||||
Shared_Dirty: 0 kB
|
||||
Private_Clean: 0 kB
|
||||
Private_Dirty: 4 kB
|
||||
Referenced: 4 kB
|
||||
Anonymous: 4 kB
|
||||
LazyFree: 0 kB
|
||||
AnonHugePages: 0 kB
|
||||
ShmemPmdMapped: 0 kB
|
||||
Shared_Hugetlb: 0 kB
|
||||
Private_Hugetlb: 0 kB
|
||||
Swap: 0 kB
|
||||
SwapPss: 0 kB
|
||||
Locked: 0 kB
|
||||
THPeligible: 0
|
||||
VmFlags: rd ex mr mw me dw sd
|
||||
|
||||
And now, you will see two memory regions instead, like this:
|
||||
|
||||
00400000-00401000 r--p 00000000 fc:01 799548 /file
|
||||
Size: 4 kB
|
||||
KernelPageSize: 4 kB
|
||||
MMUPageSize: 4 kB
|
||||
Rss: 4 kB
|
||||
Pss: 4 kB
|
||||
Shared_Clean: 0 kB
|
||||
Shared_Dirty: 0 kB
|
||||
Private_Clean: 4 kB
|
||||
Private_Dirty: 0 kB
|
||||
Referenced: 4 kB
|
||||
Anonymous: 0 kB
|
||||
LazyFree: 0 kB
|
||||
AnonHugePages: 0 kB
|
||||
ShmemPmdMapped: 0 kB
|
||||
Shared_Hugetlb: 0 kB
|
||||
Private_Hugetlb: 0 kB
|
||||
Swap: 0 kB
|
||||
SwapPss: 0 kB
|
||||
Locked: 0 kB
|
||||
THPeligible: 0
|
||||
VmFlags: rd mr mw me dw sd
|
||||
00401000-00402000 r-xp 00001000 fc:01 799548 /file
|
||||
Size: 4 kB
|
||||
KernelPageSize: 4 kB
|
||||
MMUPageSize: 4 kB
|
||||
Rss: 4 kB
|
||||
Pss: 4 kB
|
||||
Shared_Clean: 0 kB
|
||||
Shared_Dirty: 0 kB
|
||||
Private_Clean: 0 kB
|
||||
Private_Dirty: 4 kB
|
||||
Referenced: 4 kB
|
||||
Anonymous: 4 kB
|
||||
LazyFree: 0 kB
|
||||
AnonHugePages: 0 kB
|
||||
ShmemPmdMapped: 0 kB
|
||||
Shared_Hugetlb: 0 kB
|
||||
Private_Hugetlb: 0 kB
|
||||
Swap: 0 kB
|
||||
SwapPss: 0 kB
|
||||
Locked: 0 kB
|
||||
THPeligible: 0
|
||||
VmFlags: rd ex mr mw me dw sd
|
||||
|
||||
A few minor things have changed, but the most important of them is the
|
||||
fact that, before, the whole memory region **had** anonymous data in
|
||||
it, which means that it was considered an **anonymous private
|
||||
mapping** (**anonymous** because of the non-zero Anonymous amount of
|
||||
data; **private** because of the `p` in the `r-xp` permission bits).
|
||||
After `-z separate-code` was made default, the first memory mapping
|
||||
does **not** have Anonymous contents anymore, which means that it is
|
||||
now considered to be a **file-backed private** mapping instead.
|
||||
|
||||
GDB, corefile, and coredump_filter
|
||||
----------------------------------
|
||||
|
||||
It is important to mention that, unlike the Linux kernel, GDB doesn't
|
||||
have all of the necessary information readily available to decide the
|
||||
exact type of a memory mapping, so when I revamped this code back in
|
||||
2015 I had to create some heuristics to try and determine this
|
||||
information. If you're curious, take a look at the `linux-tdep.c`
|
||||
file on GDB's source tree, specifically at the
|
||||
functions
|
||||
[`dump_mapping_p`](https://sourceware.org/git/?p=binutils-gdb.git;a=blob;f=gdb/linux-tdep.c;h=c1666d189ae009b594d906ca7a87091ea535e05f;hb=HEAD#l588) and
|
||||
[`linux_find_memory_regions_full`](https://sourceware.org/git/?p=binutils-gdb.git;a=blob;f=gdb/linux-tdep.c;h=c1666d189ae009b594d906ca7a87091ea535e05f;hb=HEAD#l1200).
|
||||
|
||||
When GDB is deciding which memory regions should be dumped into the
|
||||
corefile, it respects the value found at the
|
||||
`/proc/PID/coredump_filter` file. The default value for this file is
|
||||
`0x33`, which, according to `core(5)`, means:
|
||||
|
||||
Dump memory pages that are either anonymous private, anonymous
|
||||
shared, ELF headers or HugeTLB.
|
||||
|
||||
GDB had the support implemented to dump almost all of these pages,
|
||||
except for the ELF headers variety. And, as you can probably infer,
|
||||
this means that, before the `-z separate-code` change, the very first
|
||||
memory mapping of the executable **was** being dumped, because it was
|
||||
marked as anonymous private. However, after the change, the first
|
||||
mapping (which contains only data, no code) wasn't being dumped
|
||||
anymore, because it was now considered by GDB to be a file-backed
|
||||
private mapping!
|
||||
|
||||
Finally, that is the reason for the difference between corefiles
|
||||
generated by GDB and Linux, and also the reason why the build-id note
|
||||
was not being included in the corefile anymore! You see, the first
|
||||
memory mapping contains not only the program's data, but also its ELF
|
||||
headers, which in turn contain the build-id information.
|
||||
|
||||
`gcore`, meet ELF headers
|
||||
-------------------------
|
||||
|
||||
The solution was "simple": I needed to improve the current heuristics
|
||||
and teach GDB how to determine if a mapping contains an ELF header or
|
||||
not. For that, I chose to follow the Linux kernel's algorithm, which
|
||||
basically checks the first 4 bytes of the mapping and compares them
|
||||
against `\177ELF`, which is ELF's magic number. If the comparison
|
||||
succeeds, then we just assume we're dealing with a mapping that
|
||||
contains an ELF header and dump it.
|
||||
|
||||
In all fairness, Linux just dumps the first page (4K) of the mapping,
|
||||
in order to save space. It would be possible to make GDB do the same,
|
||||
but I chose the faster way and just dumped the whole mapping, which,
|
||||
in most scenarios, shouldn't be a big problem.
|
||||
|
||||
It's also interesting to mention that GDB will just perform this check
|
||||
if:
|
||||
|
||||
* The heuristic has decided *not* to dump the mapping so far, and;
|
||||
* The mapping is private, and;
|
||||
* The mapping's offset is zero, and;
|
||||
* There is a request to dump mappings with ELF headers (i.e.,
|
||||
`coredump_filter`).
|
||||
|
||||
Linux also makes these checks, by the way.
|
||||
|
||||
The patch, finally
|
||||
------------------
|
||||
|
||||
I
|
||||
submitted
|
||||
[the patch](https://sourceware.org/ml/gdb-patches/2019-04/msg00479.html) to
|
||||
the mailing list, and it was approved fairly quickly (with a few minor
|
||||
nits).
|
||||
|
||||
The reason I'm writing this blog post is because I'm very happy and
|
||||
proud with the whole process. It wasn't an easy task to investigate
|
||||
the underlying reason for the build-id failures, and it was
|
||||
interesting to come up with a solution that extended the work I did a
|
||||
few years ago. I was also able to close a few bug reports upstream,
|
||||
as well as the one reported against Fedora GDB.
|
||||
|
||||
The patch has
|
||||
been
|
||||
[pushed](https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=57e5e645010430b3d73f8c6a757d09f48dc8f8d5),
|
||||
and is also present at the latest version of Fedora GDB for Rawhide.
|
||||
It wasn't possible to write a self-contained testcase for this
|
||||
problem, so I had to resort to using an external tool (`eu-unstrip`)
|
||||
in order to guarantee that the build-id note is correctly present in
|
||||
the corefile. But that's a small detail, of course.
|
||||
|
||||
Anyway, I hope this was an interesting (albeit large) read!
|
299
content/posts/installing-gerrit-and-keycloak.md
Normal file
299
content/posts/installing-gerrit-and-keycloak.md
Normal file
|
@ -0,0 +1,299 @@
|
|||
---
|
||||
date: 2019-10-15T00:00:00-05:00
|
||||
title: "Installing Gerrit and Keycloak for GDB"
|
||||
tags: [en_us, debian, free-software, planet-fedora, gerrit, keycloak, howto]
|
||||
---
|
||||
|
||||
Back in September, we had
|
||||
the [GNU Tools Cauldron](https://gcc.gnu.org/wiki/cauldron2019) in the
|
||||
gorgeous city of Montréal (perhaps I should write a post specifically
|
||||
about it...). One of the sessions we had was the **GDB BoF**, where
|
||||
we discussed, among other things, how to improve our patch review
|
||||
system.
|
||||
|
||||
I have my own personal opinions about the current review system we use
|
||||
(mailing list-based, in a nutshell), and I haven't felt very confident
|
||||
to express it during the discussion. Anyway, the outcome was that at
|
||||
least 3 global maintainers have used or are currently using
|
||||
the [Gerrit Code Review](https://www.gerritcodereview.com) system for
|
||||
other projects, are happy with it, and that we should give it a try.
|
||||
Then, when it was time to decide who wanted to configure and set
|
||||
things up for the community, I volunteered. Hey, I'm already running
|
||||
the Buildbot master for GDB, what is the problem to manage yet another
|
||||
service? Oh, well.
|
||||
|
||||
Before we dive into the details involved in configuring and running
|
||||
gerrit in a machine, let me first say that I don't totally support the
|
||||
idea of migrating from mailing list to gerrit. I volunteered to set
|
||||
things up because I felt the community (or at least the its most
|
||||
active members) wanted to try it out. I don't necessarily agree with
|
||||
the choice.
|
||||
|
||||
Ah, and I'm writing this post mostly because I want to be able to
|
||||
close the 300+ tabs I had to open on my Firefox during these last
|
||||
weeks, when I was searching how to solve the myriad of problems I
|
||||
faced during the set up!
|
||||
|
||||
The initial plan
|
||||
----------------
|
||||
|
||||
My very initial plan after I left the session room was to talk to
|
||||
the [sourceware.org](https://sourceware.org) folks and ask them if it
|
||||
would be possible to host our gerrit there. Surprisingly, they
|
||||
already have a gerrit instance up and running. It's been set up back
|
||||
in 2016, it's running an old version of gerrit, and is pretty much
|
||||
abandoned. Actually, saying that it has been configured is an
|
||||
overstatement: it doesn't support authentication, user registration,
|
||||
barely supports projects, etc. It's basically what you get from a
|
||||
pristine installation of the gerrit RPM package in RHEL 6.
|
||||
|
||||
I won't go into details here, but after some discussion it was clear
|
||||
to me that the instance on sourceware would not be able to meet our
|
||||
needs (or at least what I had in mind for us), and that it would be
|
||||
really hard to bring it to the quality level I wanted. I decided to
|
||||
go look for other options.
|
||||
|
||||
The OSCI folks
|
||||
--------------
|
||||
|
||||
Have I mentioned the [OSCI project](https://osci.io/) before? They
|
||||
are absolutely **awesome**. I really love working with them, because
|
||||
so far they've been able to meet every request I made! So, kudos to
|
||||
them! They're the folks that host
|
||||
our [GDB Buildbot master](https://gdb-buildbot.osci.io). Their
|
||||
infrastructure is quite reliable (I never had a single problem), and
|
||||
Marc Dequénes (Duck) is very helpful, friendly and quick when replying
|
||||
to my questions :-).
|
||||
|
||||
So, it shouldn't come as a surprise the fact that when I decided to
|
||||
look for other another place to host gerrit, they were my first
|
||||
choice. And again, they delivered :-).
|
||||
|
||||
Now, it was time to start thinking about the gerrit set up.
|
||||
|
||||
User registration?
|
||||
------------------
|
||||
|
||||
Over the course of these past 4 weeks, I had the opportunity to learn
|
||||
a bit more about how gerrit does things. One of the first things that
|
||||
negatively impressed me was the fact that gerrit doesn't handle user
|
||||
registration by itself. It is possible to have a very rudimentary
|
||||
user registration "system", but it relies on the site administration
|
||||
manually registering the users (via `htpasswd`) and managing
|
||||
everything by him/herself.
|
||||
|
||||
It was quite obvious to me that we would need some kind of access
|
||||
control (we're talking about a GNU project, with a copyright
|
||||
assignment requirement in place, after all), and the best way to
|
||||
implement it is by having registered users. And so my quest for the
|
||||
best user registration system began...
|
||||
|
||||
Gerrit supports some user **authentication** schemes, such
|
||||
as [OpenID](https://en.wikipedia.org/wiki/OpenID) (**not** OpenID
|
||||
Connect!), [OAuth2](https://en.wikipedia.org/wiki/OAuth#OAuth_2.0)
|
||||
(via plugin)
|
||||
and
|
||||
[LDAP](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol).
|
||||
I remembered hearing
|
||||
about [FreeIPA](https://en.wikipedia.org/wiki/FreeIPA) a long time
|
||||
ago, and thought it made sense using it. Unfortunately, the project's
|
||||
community told me that installing FreeIPA on a Debian system is really
|
||||
hard, and since our VM is running Debian, it quickly became obvious
|
||||
that I should look somewhere else. I felt a bit sad at the beginning,
|
||||
because I thought FreeIPA would really be our silver bullet here, but
|
||||
then I noticed that it doesn't really offer a self-service user
|
||||
registration.
|
||||
|
||||
After exchanging a few emails with Marc, he told me
|
||||
about [Keycloak](https://en.wikipedia.org/wiki/Keycloak). It's a
|
||||
full-fledged Identity Management and Access Management software,
|
||||
supports OAuth2, LDAP, **and** provides a self-service user
|
||||
registration system, which is exactly what we needed! However, upon
|
||||
reading the description of the project, I noticed that it is written
|
||||
in Java (JBOSS, to be more specific), and I was afraid that it was
|
||||
going to be very demanding on our system (after all, gerrit is also a
|
||||
Java program). So I decided to put it on hold and take a look at
|
||||
using LDAP...
|
||||
|
||||
Oh, man. Where do I start? Actually, I think it's enough to say that
|
||||
I just **tried**
|
||||
installing [OpenLDAP](https://en.wikipedia.org/wiki/OpenLDAP), but
|
||||
gave up because it was too cumbersome to configure. Have you ever
|
||||
heard that LDAP is really complicated? I'm afraid this is true. I
|
||||
just didn't feel like wasting a lot of time trying to understand how
|
||||
it works, only to have to solve the "user registration" problem later
|
||||
(because of course, OpenLDAP is just an LDAP server).
|
||||
|
||||
OK, so what now? Back to Keycloak it is. I decided that instead of
|
||||
thinking that it was too big, I should actually install it and check
|
||||
it for real. Best decision, by the way!
|
||||
|
||||
Setting up Keycloak
|
||||
-------------------
|
||||
|
||||
It's pretty easy to set Keycloak up. The official website provides a
|
||||
`.tar.gz` file which contains the whole directory tree for the
|
||||
project, along with helper scripts, `.jar` files, configuration, etc.
|
||||
From there, you just need to follow the documentation, edit the
|
||||
configuration, and voilà.
|
||||
|
||||
For our specific setup I chose to use PostgreSQL instead of the
|
||||
built-in database. This is a bit more complicated to configure,
|
||||
because you need to download the JDBC driver, and install it in a
|
||||
strange way (at least for me, who is used to just editing a
|
||||
configuration file). I won't go into details on how to do this here,
|
||||
because it's easy to find on the internet. Bear in mind, though, that
|
||||
the official documentation is really incomplete when covering this
|
||||
topic! [This](https://devopstales.github.io/sso/keycloak2/) is one of
|
||||
the guides I used, along
|
||||
with
|
||||
[this other one](http://www.janua.fr/how-to-install-keycloak-with-mariadb/) (which
|
||||
covers MariaDB, but can be adapted to PostgreSQL as well).
|
||||
|
||||
Another interesting thing to notice is that Keycloak expects to be
|
||||
running on its own virtual domain, and not under a subdirectory (e.g,
|
||||
`https://example.org` instead of `https://example.org/keycloak`). For
|
||||
that reason, I chose to run our instance on another port. It is
|
||||
supposedly possible to configure Keycloak to run under a subdirectory,
|
||||
but it involves editing a lot of files, and I confess I couldn't make
|
||||
it fully work.
|
||||
|
||||
A last thing worth mentioning: the official documentation says that
|
||||
Keycloak needs Java 8 to run, but I've been using OpenJDK 11 without
|
||||
problems so far.
|
||||
|
||||
Setting up Gerrit
|
||||
-----------------
|
||||
|
||||
The fun begins now!
|
||||
|
||||
The gerrit project also offers a `.war` file ready to be deployed.
|
||||
After you download it, you can execute it and initialize a gerrit
|
||||
project (or application, as it's called). Gerrit will create a
|
||||
directory full of interesting stuff; the most important for us is the
|
||||
`etc/` subdirectory, which contains all of the configuration files for
|
||||
the application.
|
||||
|
||||
After initializing everything, you can try starting gerrit to see if
|
||||
it works. This is where I had my first trouble. Gerrit also requires
|
||||
Java 8, but unlike Keycloak, it doesn't work out of the box with
|
||||
OpenJDK 11. I had to make a small but important addition in the file
|
||||
`etc/gerrit.config`:
|
||||
|
||||
[container]
|
||||
...
|
||||
javaOptions = "--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED"
|
||||
...
|
||||
|
||||
After that, I was able to start gerrit. And then I started trying to
|
||||
set it up for OAuth2 authentication using Keycloak. This took a
|
||||
**very long** time, unfortunately. I was having several problems with
|
||||
Gerrit, and I wasn't sure how to solve them. I
|
||||
tried
|
||||
[asking for help](https://groups.google.com/forum/#!topic/repo-discuss/_n5Y2vDppX8) on
|
||||
the official mailing list, and was able to make some progress, but in
|
||||
the end I figured out what was missing: I had forgotten to add the
|
||||
`AddEncodedSlashes On` in the Apache configuration file! This was
|
||||
causing a very strange error on Gerrit (as you can see, a
|
||||
`java.lang.StringIndexOutOfBoundsException`!), which didn't make
|
||||
sense. In the end, my Apache config file looks like this:
|
||||
|
||||
<VirtualHost *:80>
|
||||
ServerName gnutoolchain-gerrit.osci.io
|
||||
|
||||
RedirectPermanent / https://gnutoolchain-gerrit.osci.io/r/
|
||||
</VirtualHost>
|
||||
|
||||
<VirtualHost *:443>
|
||||
ServerName gnutoolchain-gerrit.osci.io
|
||||
|
||||
RedirectPermanent / /r/
|
||||
|
||||
SSLEngine On
|
||||
SSLCertificateFile /path/to/cert.pem
|
||||
SSLCertificateKeyFile /path/to/privkey.pem
|
||||
SSLCertificateChainFile /path/to/chain.pem
|
||||
|
||||
# Good practices for SSL
|
||||
# taken from: <https://mozilla.github.io/server-side-tls/ssl-config-generator/>
|
||||
|
||||
# intermediate configuration, tweak to your needs
|
||||
SSLProtocol all -SSLv3
|
||||
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
|
||||
SSLHonorCipherOrder on
|
||||
SSLCompression off
|
||||
SSLSessionTickets off
|
||||
|
||||
# OCSP Stapling, only in httpd 2.3.3 and later
|
||||
#SSLUseStapling on
|
||||
#SSLStaplingResponderTimeout 5
|
||||
#SSLStaplingReturnResponderErrors off
|
||||
#SSLStaplingCache shmcb:/var/run/ocsp(128000)
|
||||
|
||||
# HSTS (mod_headers is required) (15768000 seconds = 6 months)
|
||||
Header always set Strict-Transport-Security "max-age=15768000"
|
||||
|
||||
ProxyRequests Off
|
||||
ProxyVia Off
|
||||
ProxyPreserveHost On
|
||||
<Proxy *>
|
||||
Require all granted
|
||||
</Proxy>
|
||||
|
||||
AllowEncodedSlashes On
|
||||
ProxyPass /r/ http://127.0.0.1:8081/ nocanon
|
||||
#ProxyPassReverse /r/ http://127.0.0.1:8081/r/
|
||||
</VirtualHost>
|
||||
|
||||
I confess I was almost giving up Keycloak when I finally found
|
||||
the problem...
|
||||
|
||||
Anyway, after that things went more smoothly. I was finally able to
|
||||
make the user authentication work, then I made sure Keycloak's user
|
||||
registration feature also worked OK...
|
||||
|
||||
Ah, one interesting thing: the user logout wasn't really working as
|
||||
expected. The user was able to logout from gerrit, but not from
|
||||
Keycloak, so when the user clicked on "Sign in", Keycloak would tell
|
||||
gerrit that the user was already logged in, and gerrit would
|
||||
automatically log the user in again! I was able to solve this by
|
||||
redirecting the user to Keycloak's logout page, like this:
|
||||
|
||||
[auth]
|
||||
...
|
||||
logoutUrl = https://keycloak-url:port/auth/realms/REALM/protocol/openid-connect/logout?redirect_uri=https://gerrit-url/
|
||||
...
|
||||
|
||||
After that, it was already possible to start worrying about configure
|
||||
gerrit itself. I don't know if I'll write a post about that, but let
|
||||
me know if you want me to.
|
||||
|
||||
Conclusion
|
||||
----------
|
||||
|
||||
If you ask me if I'm totally comfortable with the way things are set
|
||||
up now, I can't say that I am 100%. I mean, the set up seems robust
|
||||
enough that it won't cause problems in the long run, but what bothers
|
||||
me is the fact that I'm using technologies that are alien to me. I'm
|
||||
used to setting up things written in Python, C, C++, with very simple
|
||||
yet powerful configuration mechanisms, and an easy to discover what's
|
||||
wrong when something bad happens.
|
||||
|
||||
I am reasonably satisfied with the Keycloak logs things, but Gerrit
|
||||
leaves a lot to be desired in that area. And both projects are
|
||||
written in languages/frameworks that I am absolutely not comfortable
|
||||
with. Like, it's really tough to debug something when you don't even
|
||||
know where the code is or how to modify it!
|
||||
|
||||
All in all, I'm happy that this whole adventure has come to an end,
|
||||
and now all that's left is to maintain it. I hope that the GDB
|
||||
community can make good use of this new service, and I hope that we
|
||||
can see a positive impact in the quality of the whole patch review
|
||||
process.
|
||||
|
||||
My final take is that this is all worth as long as the Free Software
|
||||
and the User Freedom are the ones who benefit.
|
||||
|
||||
P.S.: Before I forget, our gerrit instance is running
|
||||
at
|
||||
[https://gnutoolchain-gerrit.osci.io](https://gnutoolchain-gerrit.osci.io).
|
219
content/posts/linux-memory-mapping.md
Normal file
219
content/posts/linux-memory-mapping.md
Normal file
|
@ -0,0 +1,219 @@
|
|||
---
|
||||
date: 2015-04-05T00:00:00-05:00
|
||||
title: "Memory mappings, core dumps, GDB and Linux"
|
||||
tags: [free-software, linux, gdb, fedora-planet, en_us]
|
||||
---
|
||||
|
||||
After spending the last weeks struggling with this, I decided to write a
|
||||
blog post. First, what is “this” that you are talking about? The answer
|
||||
is: Linux kernel's concept of memory mapping. I found it utterly
|
||||
confused, beyond my expectations, and so I believe that a blog post is
|
||||
the write way to (a) preserve and (b) share this knowledge. So, let's do
|
||||
it!
|
||||
|
||||
First things first
|
||||
------------------
|
||||
|
||||
First, I cannot begin this post without a few acknowledgements and
|
||||
“thank you's”. The first goes to Oleg Nesterov (sorry, I could not find
|
||||
his website), a Linux kernel guru who really helped me a lot through the
|
||||
whole task. Another “thank you” goes to [Jan
|
||||
Kratochvil](http://www.jankratochvil.net/), who also provided valuable
|
||||
feedback by commenting my GDB patch. Now, back to the point.
|
||||
|
||||
The task
|
||||
--------
|
||||
|
||||
The task was requested
|
||||
[here](https://sourceware.org/bugzilla/show_bug.cgi?id=16092): GDB
|
||||
needed to respect the `/proc/<PID>/coredump_filter` file when generating
|
||||
a coredump (i.e., when you use the `gcore` command).
|
||||
|
||||
Currently, GDB has his own coredump mechanism implemented which, despite
|
||||
its limitations and bugs, has been around for quite some time. However,
|
||||
and maybe you don't know that, but the Linux kernel has its own
|
||||
algorithm for generating the corefile of a process. And unfortunately,
|
||||
GDB and Linux were not really following the same standards here...
|
||||
|
||||
So, in the end, the task was about synchronizing GDB and Linux. To do
|
||||
that, I first had to decipher the contents of the `/proc/<PID>/smaps`
|
||||
file.
|
||||
|
||||
The `/proc/<PID>/smaps` file
|
||||
----------------------------
|
||||
|
||||
This special file, generated by the Linux kernel when you read it,
|
||||
contains detailed information about each memory mapping of a certain
|
||||
process. Some of the fields on this file are documented in the `proc(5)`
|
||||
manpage, but others are missing there (asking for a patch!). Here is an
|
||||
explanation of everything I needed:
|
||||
|
||||
- The first line of each memory mapping has the following format:
|
||||
|
||||
The fields here are:
|
||||
|
||||
a) *address* is the address range, in the process' address space,
|
||||
that the mapping occupies. This part was already treated by GDB,
|
||||
so I did not have to worry about it.
|
||||
|
||||
b) *perms* is a set of permissions (**r** ead, **w** rite, e **x**
|
||||
ecute, **s** hared, **p** rivate [COW -- copy-on-write])
|
||||
applied to the memory mapping. GDB was already dealing with
|
||||
`rwx` permissions, but I needed to include the `p` flag as well.
|
||||
I also made GDB ignore the mappings that did not have the `r`
|
||||
flag active, because it does not make sense to dump something
|
||||
that you cannot read.
|
||||
|
||||
c) *offset* is the offset into the applied to the file, if the
|
||||
mapping is file-backed (see below). GDB already handled
|
||||
this correctly.
|
||||
|
||||
d) *dev* is the device (major:minor) related to the file, if there
|
||||
is one. GDB already handled this correctly, though I was using
|
||||
this field for more things (continue reading).
|
||||
|
||||
e) *inode* is the inode on the device above. The value of zero
|
||||
means that no inode is associated with the memory mapping.
|
||||
Nothing to do here.
|
||||
|
||||
f) *pathname* is the file associate with this mapping, if there
|
||||
is one. This is one of the most important fields that I had to
|
||||
use, and one of the most complicated to understand completely.
|
||||
GDB now uses this to heuristically identify whether the mapping
|
||||
is anonymous or not.
|
||||
|
||||
- GDB is now also interested in `Anonymous:` and `AnonHugePages:`
|
||||
fields from the `smaps` file. Those fields represent the content of
|
||||
anonymous data on the mapping; if GDB finds that this content is
|
||||
greater than zero, this means that the mapping is anonymous.
|
||||
|
||||
- The last, but perhaps most important field, is the `VmFlags:` field.
|
||||
It contains a series of two-letter flags that provide very useful
|
||||
information about the mapping. A description of the fields is:
|
||||
a) `sh`: the mapping is shared (`VM_SHARED`)
|
||||
b) `dd`: this mapping should not be dumped in a corefile
|
||||
(`VM_DONTDUMP`)
|
||||
c) `ht`: this is HugeTLB mapping
|
||||
|
||||
With that in hands, the following task was to be able to determine
|
||||
whether a memory mapping is anonymous or file-backed, private or shared.
|
||||
|
||||
Types of memory mappings
|
||||
------------------------
|
||||
|
||||
There can be four types of memory mappings:
|
||||
|
||||
1. Anonymous private mapping
|
||||
2. Anonymous shared mapping
|
||||
3. File-backed private mapping
|
||||
4. File-backed shared mapping
|
||||
|
||||
It should be possible to uniquely identify each mapping based on the
|
||||
information provided by the `smaps` file; however, you will see that
|
||||
this is not always the case. Below, I will explain how to determine each
|
||||
of the four characteristics that define a mapping.
|
||||
|
||||
### `Anonymous`
|
||||
|
||||
A mapping is anonymous if one of these conditions apply:
|
||||
|
||||
1. The `pathname` associated with it is either `/dev/zero (deleted)`,
|
||||
`/SYSV%08x (deleted)`, or `<filename> (deleted)` (see below).
|
||||
2. There is content in the `Anonymous:` or in the `AnonHugePages:`
|
||||
fields of the mapping in the `smaps` file.
|
||||
|
||||
A special explanation is needed for the `<filename> (deleted)` case. It
|
||||
is not always guaranteed that it identifies an anonymous mapping; in
|
||||
fact, it is possible to have the `(deleted)` part for file-backed
|
||||
mappings as well (say, when you are running a program that uses shared
|
||||
libraries, and those shared libraries have been removed because of an
|
||||
update, for example). However, we are trying to mimic the behavior of
|
||||
the Linux kernel here, which checks to see if a file has no hard links
|
||||
associated with it (and therefore is truly deleted).
|
||||
|
||||
Although it may be possible for the userspace to do an extensive check
|
||||
(by `stat` ing the file, for example), the Linux kernel certainly could
|
||||
give more information about this.
|
||||
|
||||
### `File-backed`
|
||||
|
||||
A mapping is file-backed (i.e., not anonymous) if:
|
||||
|
||||
1. The `pathname` associated with it contains a `<filename>`, without
|
||||
the `(deleted)` part.
|
||||
|
||||
As has been explained above, a mapping whose `pathname` contains the
|
||||
`(deleted)` string could still be file-backed, but we decide to consider
|
||||
it anonymous.
|
||||
|
||||
It is also worth mentioning that a mapping can be simultaneously
|
||||
anonymous and file-backed: this happens when the mapping contains a
|
||||
valid `pathname` (without the `(deleted)` part), but **also** contains
|
||||
`Anonymous:` or `AnonHugePages:` contents.
|
||||
|
||||
### `Private`
|
||||
|
||||
A mapping is considered to be private (i.e., not shared) if:
|
||||
|
||||
1. In the absence of the `VmFlags` field (in the `smaps` file), its
|
||||
permission field has the flag `p`.
|
||||
2. If the `VmFlags` field is present, then the mapping is private if
|
||||
we do not find the `sh` flag there.
|
||||
|
||||
### `Shared`
|
||||
|
||||
A mapping is shared (i.e., not private) if:
|
||||
|
||||
1. In the absence of `VmFlags` in the `smaps` file, the permission
|
||||
field of the mapping does not have the `p` flag. Not having this
|
||||
flag actually means `VM_MAYSHARE` and not necessarily `VM_SHARED`
|
||||
(which is what we want), but it is the best approximation we have.
|
||||
2. If the `VmFlags` field is present, then the mapping is shared if
|
||||
we find the `sh` flag there.
|
||||
|
||||
The patch
|
||||
---------
|
||||
|
||||
With all that in mind, I hacked GDB to improve the coredump mechanism
|
||||
for GNU/Linux operating systems. The main function which decides the
|
||||
memory mappings that will or will not be dumped on GNU/Linux is
|
||||
[linux_find_memory_regions_full](http://sourceware.org/git/?p=binutils-gdb.git;a=blob;f=gdb/linux-tdep.c;h=4af1d01900256164a478a0159b0fcabe86d5549f;hb=HEAD#l1108);
|
||||
the Linux kernel obviously uses its own function,
|
||||
[vma_dump_size](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/binfmt_elf.c#n1229),
|
||||
to do the same thing.
|
||||
|
||||
Linux has one advantage: it is a kernel, and therefore has much more
|
||||
knowledge about processes' internals than a userspace program. For
|
||||
example, inside Linux it is trivial to check if a file marked as
|
||||
"`(deleted)`" in the output of the `smaps` file has no hard links
|
||||
associated with it (and therefore is not really deleted); the same
|
||||
operation on userspace, however, would require root access to inspect
|
||||
the contents of the `/proc/<PID>/map_files/` directory.
|
||||
|
||||
The case described above, if you remember, is something that impacts the
|
||||
ability to tell whether a mapping is anonymous or not. I am talking to
|
||||
the Linux kernel guys to see if it is possible to export this
|
||||
information directly via the `smaps` file, instead of having to do the
|
||||
current heuristic.
|
||||
|
||||
While doing this work, some strange behaviors were found in the Linux
|
||||
kernel. Oleg is working on them, along with other Linux hackers. From
|
||||
our side, there is still room for improvement on this code. The first
|
||||
thing I can think of is to improve the heuristics for finding anonymous
|
||||
mappings. Another relatively easy thing to do would be to let the user
|
||||
specify a value for `coredump_filter` on the command line, without
|
||||
editing the `/proc` file. And of course, keep this code always updated
|
||||
with its counterpart in the Linux kernel.
|
||||
|
||||
Upstream discussions and commit
|
||||
-------------------------------
|
||||
|
||||
If you are interested, you can see the discussions that happened
|
||||
upstream by going [to this
|
||||
link](http://sourceware.org/ml/gdb-patches/2015-03/msg00816.html). This
|
||||
is the fourth (and final) submission of the patch; you should be able to
|
||||
find the other submissions [in the
|
||||
archive](http://sourceware.org/ml/gdb-patches/2015-03/authors.html).
|
||||
|
||||
The final commit can be found [in the official
|
||||
repository](http://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=df8411da087dc05481926f4c4a82deabc5bc3859).
|
230
content/posts/migration-jabberd2-to-prosody.md
Normal file
230
content/posts/migration-jabberd2-to-prosody.md
Normal file
|
@ -0,0 +1,230 @@
|
|||
---
|
||||
date: 2014-04-22T00:00:00-05:00
|
||||
title: "Migrating from Jabberd2 to Prosody"
|
||||
tags: [en_us, free-software, howto]
|
||||
---
|
||||
|
||||
After trying (and failing!) to find a guide, how-to, or anything that
|
||||
could help me in the migration from Jabberd2 to Prosody on my personal
|
||||
server, I decided to write my own version here. I hope it can help other
|
||||
people who want to do this somewhat painful procedure!
|
||||
|
||||
Struggling with Jabberd2
|
||||
------------------------
|
||||
|
||||
When I installed my personal server, I chose
|
||||
[Jabberd2](http://jabberd2.org/) as my Jabber server. At that time, this
|
||||
choice seemed the most logical to me because of a few reasons:
|
||||
|
||||
1. It is written in C, which is my favorite language and, therefore,
|
||||
would make it easier for me if I ever wanted to fix something in
|
||||
the software (as it really happened afterwards).
|
||||
2. Looking at the [page comparing different Jabber
|
||||
servers](https://en.wikipedia.org/wiki/Comparison_of_XMPP_server_software)
|
||||
at Wikipedia, I found that Jabberd2 was mature enough to be
|
||||
used seriously.
|
||||
3. I knew some people who uses it in their own servers, and they said
|
||||
good things about it.
|
||||
|
||||
So, the decision seemed pretty simple for me: Jabberd2 would be my
|
||||
choice! And then the problems started...
|
||||
|
||||
The first issue I had to solve was not Jabberd2's fault: I am using
|
||||
Debian Wheezy (stable) in my server, and Jabberd2 is only available for
|
||||
Debian Jessie (testing) or Sid (unstable). Therefore, I had to create my
|
||||
own version of the Jabberd2 Debian package (and all its dependencies
|
||||
that were not packaged) for Wheezy, which took me about 1 day. But after
|
||||
that, I managed to install the software in my server. Then, the
|
||||
configuration hell began...
|
||||
|
||||
Jabberd2 uses configuration files written in XML. They are well
|
||||
documented, with helpful comments inside. But they are confuse, as
|
||||
confuse as XML can be. Of course you have to take into account that it
|
||||
was my first time configuring a Jabber server, which added a lot to the
|
||||
complexity of the task. However, I feel compelled to say that the way
|
||||
Jabberd2 organizes its configuration files makes it a much more complex
|
||||
work than it should be. Nevertheless, and after lots of fails, I managed
|
||||
to set the server up properly. Yay!
|
||||
|
||||
Now, before I continue complaining, one good thing about Jabberd2: it
|
||||
has never crashed with me. I consider this to be something good because
|
||||
I am a software developer myself and I know that, despite our best
|
||||
efforts, bad things can happen. But Jabberd2 takes the gold medal on
|
||||
this one...
|
||||
|
||||
However... My confidence on Jabberd2's security was severily damaged
|
||||
when I found that the SQLite backend [could not encrypt the users's
|
||||
passwords](https://github.com/jabberd2/jabberd2/issues/27)!!! I stumbled
|
||||
on this issue by myself, while naively dumping my SQLite database to
|
||||
check something there... You can imagine how (badly) impressed I was
|
||||
when I saw my password there, in plaintext. I decided to [fix this
|
||||
issue](https://github.com/jabberd2/jabberd2/commit/3e207cfc08efdafe9a9e75dc580dd9c5bfe59554)
|
||||
ASAP. Hopefully next users will benefit from this fix.
|
||||
|
||||
After that, the bell rang in my head and I started to look for
|
||||
alternatives for Jabberd2. Though I still want to contribute to the
|
||||
project eventually (I am even working on a patch to merge all the
|
||||
database backends), I wanted to have a little bit more confidence in the
|
||||
software that I use as my Jabber server.
|
||||
|
||||
Meeting Prosody
|
||||
---------------
|
||||
|
||||
[Prosody](https://prosody.im/) came to my attention when I was setting
|
||||
up the server for our local Free Software group in Brazil. You can reach
|
||||
our wiki [here](http://wiki.libreplanetbr.org) (in pt_br) if you are
|
||||
interested. We wanted to offer a few services to our members/friends,
|
||||
and Jabber was obviously one of them. This happened after I discovered
|
||||
the bug in Jabberd2's SQLite backend, so using Jabberd2 was not a choice
|
||||
anymore. We had heard [ejabberd](http://www.ejabberd.im/), which was
|
||||
being used by [Jabber-BR](https://jabber-br.org/) (they recently
|
||||
migrated to Prosody as well), but the fact that it is written in
|
||||
[Erlang](https://en.wikipedia.org/wiki/Erlang_%28programming_language%29),
|
||||
a language that I am not familiar with, has contributed to our decision
|
||||
of dropping the idea. So, the only choice left was Prosody itself.
|
||||
|
||||
Since I am brazilian, I also feel a little bit proud of Prosody because
|
||||
it is writte in
|
||||
[Lua](https://en.wikipedia.org/wiki/Lua_%28programming_language%29), a
|
||||
programming language designed by brazilians.
|
||||
|
||||
We installed Prosody on our server, and it was amazingly easy to
|
||||
configure it! The configuration file is writte in Lua as well, which
|
||||
makes it **a lot** easier to read than XML. It is also well documented,
|
||||
and I felt that they were more organized too: you have small
|
||||
configuration files splitted by categories, instead of one big XML to
|
||||
edit.
|
||||
|
||||
The modular structure of Prosody also impressed me. You can load and
|
||||
unload many modules very easily, generally just by (un)commenting lines
|
||||
on the configuration file. Neat.
|
||||
|
||||
Prosody also offers a command-line program to manage the server, which
|
||||
is really helpful if you want to automatize some tasks and write
|
||||
scripts. There is a little thing that still annoys me, which is the fact
|
||||
that this command-line program does not have a very useful "--help"
|
||||
command, but I plan to propose a patch to fix that.
|
||||
|
||||
And at last, but definitely not least, Prosody is also very robust, and
|
||||
have not crashed one single time with us. It runs smoothly in the
|
||||
server, and although I haven't really compared the memory footprint of
|
||||
Jabberd2 and Prosody, I have nothing to complain about it too.
|
||||
|
||||
The Migration Process
|
||||
---------------------
|
||||
|
||||
Well, so after all this story, I think it is clear why I decided to
|
||||
migrate to Prosody. However, it was not an easy task.
|
||||
|
||||
Before we begin to understand the procedure needed to do the migration,
|
||||
I would like to say a few things. First, I would like to thank the guys
|
||||
at the [Prosody chatroom](https://prosody.im/discuss#chatroom), who were
|
||||
very helpful and provided several resources to make this migration
|
||||
possible. And I would also like to say that **these instructions apply
|
||||
if you are running jabberd2_2.2.17-1 and prosody-0.8.2-4+deb7u2**!! I
|
||||
have not tested with other versions of those softwares, so do it at your
|
||||
own risk.
|
||||
|
||||
The first thing you have to do is to convert Jabberd2's database to
|
||||
[XEP-0227](http://www.xmpp.org/extensions/xep-0227.html). This XEP is
|
||||
very nice: it defines a standard format to import/export user data to
|
||||
and from XMPP servers. Unfortunately, not every server supports this
|
||||
XEP, and Jabberd2 is one of those... So I started looking for ways to
|
||||
extract the information which was inside Jabberd2's SQLite database in a
|
||||
XEP-0227 compatible way. Thanks to the guys at the Prosody chatroom, I
|
||||
found a tool called [sleekmigrate](https://github.com/Kev/sleekmigrate).
|
||||
It allowed me to generate a XEP-0227 file that could be imported into
|
||||
Prosody. Nice! But... I needed to **extract** this information from
|
||||
Jabberd2, and sleekmigrate could not do it. Back to the beginning...
|
||||
|
||||
It took me quite a while to figure out how to extract this info from
|
||||
Jabberd2. I was initially looking for ways (other than using
|
||||
sleekmigrate) that would allow me to extract this info directly from
|
||||
Jabberd2's SQLite database, but could not find it. Only when I read that
|
||||
sleekmigrate could actually work with jabberd14 data directories
|
||||
directly, I had the idead to find a way to convert my SQLite database
|
||||
into a jabberd14 data directory, and then I found [this
|
||||
link](http://www.ejabberd.im/jabberd2-to-ejabberd): it teaches how to
|
||||
migrate from Jabberd2 to ejabberd, and has separate instructions on how
|
||||
to do the Jabberd2 -> Jabberd14 conversion! Sweet!
|
||||
|
||||
The first thing you have to do is to download the
|
||||
[j2to1](http://www.ejabberd.im/files/contributions/j2to1.txt) Perl
|
||||
script. I had to patch the script to make it work with SQLite, and also
|
||||
to fix a little bug in a SQL query; you can grab my [patched version
|
||||
here](http://sergiodj.net/~sergio/jabberd2-migration/j2to1.txt). Save
|
||||
the file as `j2to1.pl`, and run the script (don't forget to edit the
|
||||
source code in order to provide the database name/file):
|
||||
|
||||
#!bash
|
||||
$> perl j2to1.pl jabberd14-dir/
|
||||
Converting user@host...
|
||||
$>
|
||||
|
||||
This will convert the database from Jabberd2 to Jabberd14, and put the
|
||||
XML file of each Jabber user in the server into `jabberd14-dir/host/`.
|
||||
Now, you have a Jabberd14 version of your user data. Let's proceed with
|
||||
the migration.
|
||||
|
||||
After following the instructions on the [sleekmigrate
|
||||
page](https://github.com/Kev/sleekmigrate) on how to set it up, you can
|
||||
run it on your Jabberd14 data directory in order to finally generate a
|
||||
XEP-0227 XML file that will be imported into Prosody.
|
||||
|
||||
#!bash
|
||||
$> ./sleekmigrate.py -j /path/to/jabberd14-dir/
|
||||
|
||||
This should create a file called `227.xml` on your current directory,
|
||||
which is the exported version of the Jabberd14 data directory. As a side
|
||||
note, it is always recommended to check those generated files in order
|
||||
to see if everything is OK.
|
||||
|
||||
Right, so now you have `227.xml`, which means you can finally import it
|
||||
into Prosody. Fortunately, Prosody has a tool to help you with that: it
|
||||
is a Lua script called
|
||||
[xep227toprosody.lua](http://hg.prosody.im/trunk/file/c5b7f4858014/tools/xep227toprosody.lua).
|
||||
However, if you are doing this using Debian and the same versions of the
|
||||
softwares that I was using, you may find it harder than it seems to run
|
||||
this script without errors. Here is what I had to do.
|
||||
|
||||
First, grab a copy of [version 0.8.2 of
|
||||
Prosody](https://prosody.im/downloads/source/prosody-0.8.2.tar.gz). I
|
||||
had to do that because using the latest version of the script was not
|
||||
working. I also had to build some POSIX module of Prosody in order to
|
||||
make everything work. To do that, unpack the `tar.gz` file, go to the
|
||||
Prosody source code directory, and do:
|
||||
|
||||
#!bash
|
||||
$> apt-get build-dep prosody && ./configure --ostype=debian && make
|
||||
|
||||
Only after I did that I could finally run the conversion script
|
||||
successfully. The script is locate inside the `tools/` directory. To run
|
||||
it:
|
||||
|
||||
#!bash
|
||||
$> cd tools && lua ./xep227toprosody.lua /path/to/227.xml
|
||||
|
||||
And yay! I **finally** had everything imported into Prosody!!!! Then it
|
||||
was just a matter of finishing the server configuration, initializing
|
||||
it, and everything was there: my contacts, my user, etc.
|
||||
|
||||
Conclusion
|
||||
----------
|
||||
|
||||
The migration was not very easy, especially because Jabberd2 does not
|
||||
support XEP-0227. I found a bug against Jabberd2 that requested this
|
||||
feature to be implemented, but it was not receiving any attention. Of
|
||||
course, if Jabberd2 implemented XEP-0227 it would make it easier for
|
||||
people to migrate **from** it, but it would also make it easier to
|
||||
migrate **to** it, so it is definitely not a bad thing to have.
|
||||
|
||||
Despite some difficulties, Prosody made it really easy to import my
|
||||
data, so kudos to it. The Prosody community is also very responsive and
|
||||
helpful, which made me feel very good about it. I hope I can contribute
|
||||
some patches to the project `:-)`.
|
||||
|
||||
So, that's it. I hope this guide will be helpful to anyone who is
|
||||
planning to do this migration. Feel free to contact me about
|
||||
mistakes/comments/suggestions.
|
||||
|
||||
Happy migration!
|
76
content/posts/misunderstanding-free-software.md
Normal file
76
content/posts/misunderstanding-free-software.md
Normal file
|
@ -0,0 +1,76 @@
|
|||
---
|
||||
date: 2012-12-17T00:00:00-05:00
|
||||
title: "Misunderstanding the Free Software Philosophy"
|
||||
tags: [en_us, fedora-planet, rant, free-software]
|
||||
---
|
||||
|
||||
This will probably be one of those controversial posts, but I really
|
||||
cannot just be silent about a behaviour that I am constantly seeing
|
||||
around me.
|
||||
|
||||
Since my childhood, I am fascinated by the power of the words. I always
|
||||
liked reading a lot, and despite not knowing the grammar rules (either
|
||||
in pt\_BR or en\_US, the former being my native language, the latter
|
||||
being the only idiom I can consider myself fluent in), I am deeply
|
||||
interested in what words (and their infinite meanings) can do to us. (If
|
||||
you can read in portuguese, and if you also like to study or admire in
|
||||
this subject, I strongly recommend a romance by José Saramago called "*O
|
||||
Homem Duplicado*"). So now, what I am seeing everywhere is that people
|
||||
are being as careless as ever with words, their meanings, and specially
|
||||
their implications.
|
||||
|
||||
The problem I am seeing, and it is a serious problem in my opinion, is
|
||||
the constant use of the term "**free software**" when "**open source**"
|
||||
should be used. This is obviously not a recent problem, and I really
|
||||
cannot recall when was the first time I noticed this happening. But
|
||||
maybe because I am much more involved with (real) free software
|
||||
movements now, I have the strong impression that this "confusion" is
|
||||
starting to grow out of control. So here I am, trying to convince some
|
||||
people to be a little more coherent.
|
||||
|
||||
When you create a group to talk about free software, or when you join a
|
||||
group whose goal is to promote free software ideas, you should really
|
||||
**do that**. First of all, you should understand [what free software is
|
||||
about](http://www.gnu.org/philosophy/free-sw.html). It is **not about**
|
||||
open source, for starters. It is also a political movement, not only a
|
||||
technical one.
|
||||
|
||||
I was part of a group in my former university which had "Free Software"
|
||||
in its name. For a long time, I believed the group really was about free
|
||||
software, even after receiving e-mails with heavy negative critics about
|
||||
my opinions when I defended something related to the free software
|
||||
ideology (e.g., when I suggested that we should not have a Facebook
|
||||
page, which had been created for the group by one of its members). Well,
|
||||
when I really could not hide the truth from myself anymore, I packed my
|
||||
things and left the group (this was actually the start of a new free
|
||||
software group that I founded with other friends in Brazil).
|
||||
|
||||
I also like a lot to go to events. And not only because of the
|
||||
presentations, but mostly because I really like to talk to people.
|
||||
Brazilians are fortunately very warm and talkative, so events here are
|
||||
really a fertile soil for my social skills :-). However, even when the
|
||||
event has "free software" in its name and description, it is **very**
|
||||
hard to find someone who really understands the philosophy behind the
|
||||
term. And I'm not just talking about the attendees: the event staff is
|
||||
also usually ignorant (and prefer to remain like this)! I feel really
|
||||
depressed when I start to defend the (real) free software, and people
|
||||
start looking at me and saying "You're radical.". It's like going in a
|
||||
"Debugger Conference" and feel ridicularized when you start talking
|
||||
about GDB! I cannot understand this...
|
||||
|
||||
But the worst part of all this is that newcomers are learning that "free
|
||||
software" is "Linux", or something which is **not** free software. This
|
||||
is definitely not a good thing, because people should be aware that the
|
||||
world is not just about software development: there are serious issues,
|
||||
including privacy and freedom menaces by Facebook/Google/Apple/etc,
|
||||
which we should fight against. Free software is about that as well.
|
||||
Awareness should be raised, actions should be taken, and people should
|
||||
refuse those impositions.
|
||||
|
||||
So, to finish what I want to say, if you do not consider yourself a free
|
||||
software activist, please consider becoming one. And if, after giving it
|
||||
a thought, you decided that you really do not want to be a free software
|
||||
activist, then **do not use the name "free software" in your
|
||||
event/group/whatever**, unless you really intend to talk about it and
|
||||
not open source.. In other words, if you don't want to help, please
|
||||
don't spread confusion.
|
17
content/posts/my-first-post.md
Normal file
17
content/posts/my-first-post.md
Normal file
|
@ -0,0 +1,17 @@
|
|||
+++
|
||||
title = "My first post"
|
||||
author = ["Sergio Durigan Junior"]
|
||||
date = 2023-04-16T22:02:00-04:00
|
||||
tags = ["en-us", "thoughts"]
|
||||
draft = false
|
||||
+++
|
||||
|
||||
This is my post body
|
||||
|
||||
```bash { linenos=true, linenostart=1, hl_lines=["4"] }
|
||||
function test()
|
||||
{
|
||||
echo "Oi"
|
||||
return
|
||||
}
|
||||
```
|
91
content/posts/my-workflow-with-gdb-and-git-part-1.md
Normal file
91
content/posts/my-workflow-with-gdb-and-git-part-1.md
Normal file
|
@ -0,0 +1,91 @@
|
|||
---
|
||||
date: 2011-11-29T00:00:00-05:00
|
||||
title: "My workflow with GDB and git -- part 1"
|
||||
tags: [gdb, workflow, git, fedora-planet, en_us, free-software]
|
||||
---
|
||||
|
||||
This post is actually a "reply" to Gary Benson's [Working on
|
||||
gdb](http://gbenson.net/?p=292) post.
|
||||
|
||||
I have been working with [GDB](http://www.gnu.org/s/gdb/) for quite some
|
||||
time now, and even though the project officially uses
|
||||
[CVS](http://en.wikipedia.org/wiki/Concurrent_Versions_System) (yes, you
|
||||
read it correctly, it is **CVS** indeed!) as its version control system,
|
||||
fortunately we also have a
|
||||
[git](http://en.wikipedia.org/wiki/Git_%28software%29) mirror. In the
|
||||
end, what happens is that almost every developer uses the git mirror and
|
||||
just goes to CVS to commit something. But this is another discussion.
|
||||
Aside of this git mirror, we also have the
|
||||
[Archer](http://sourceware.org/gdb/wiki/ProjectArcher) repository (which
|
||||
uses git by default).
|
||||
|
||||
My plan here is to show you how I do my daily work with GDB. The
|
||||
workflow is pretty simple, but maybe you will see something here that
|
||||
might help you.
|
||||
|
||||
Checking out the code
|
||||
---------------------
|
||||
|
||||
The first thing to do is to check out the code. I only have one GDB
|
||||
repository here, and I make branches out of it whenever I want to hack.
|
||||
So, to check out (or *clone*, in git's parlance) the code, I do (or
|
||||
did):
|
||||
|
||||
With this, we have just cloned the GDB repository, and also added
|
||||
another remote (i.e., repository). This is useful because we might want
|
||||
to hack on a branch which is on Archer, but use GDB's **master** branch
|
||||
as a base.
|
||||
|
||||
Create a new branch for your work
|
||||
---------------------------------
|
||||
|
||||
So, now it's time to create a new branch for you. Here I use one of my
|
||||
little "tricks" (taught to me by my friend
|
||||
[Dodji](http://dodji.seketeli.net/)), which is the command
|
||||
`git-new-workdir`. This is a nice command because it creates a new
|
||||
working directory for your project!
|
||||
|
||||
Maybe you're wondering why this is so cool. Well, if you ever worked
|
||||
with git, and more specifically, if you ever used more than one branch
|
||||
at a time, then maybe you will understand my excitement. In this
|
||||
scenario, having to constantly switch between the branches is not
|
||||
something rare. When you have uncommited work in your tree you can
|
||||
always use `git stash`, but that is not the ideal solution (for me).
|
||||
Sometimes I would forget what was on the stash, and later when I checked
|
||||
it, it was full of crap. Also, I like to have a separate directory for
|
||||
every project I am working on.
|
||||
|
||||
It is also important to mention that `git-new-workdir` is under the
|
||||
directory `/usr/share/doc/git-VERSION/contrib/workdir/`, so I created an
|
||||
alias that will automagically call the script for me:
|
||||
|
||||
So, after setting up the script, here is what I do:
|
||||
|
||||
Build GDB
|
||||
---------
|
||||
|
||||
In order to build the project, I create a `build-64` directory inside my
|
||||
project directory (which, in the example above, is
|
||||
`work/lazy-debuginfo-reading`).
|
||||
|
||||
GDB fortunately supports VPATH building (i.e., build the project outside
|
||||
of the source tree). I strongly recommend you to use it.
|
||||
|
||||
As you may have noticed, I use `-g3` (include debuginfo) and `-O0` (do
|
||||
not optimize the code) in `CFLAGS`. Also, since some of the features I
|
||||
work on may affect code in other architectures, I use
|
||||
`--enable-targets=all`. It will tell configure to compile everything
|
||||
related to all architectures (not only `x86_64`, for example). At last,
|
||||
I specify a separate debug directory which GDB should use to search for
|
||||
debuginfo files.
|
||||
|
||||
Finalizing (for now)
|
||||
--------------------
|
||||
|
||||
After that, you will have a fresh GDB binary compiled in the `build-64`
|
||||
directory. But that is not enough yet, since you will also want to test
|
||||
GDB and make sure you didn't insert a bug while hacking on it. In my
|
||||
next post, I will explain what is my "testflow". I hope it will be
|
||||
useful for someone :-).
|
||||
|
||||
Stay tuned!
|
31
content/posts/narcissistic-behavior.md
Normal file
31
content/posts/narcissistic-behavior.md
Normal file
|
@ -0,0 +1,31 @@
|
|||
---
|
||||
date: 2013-12-20T00:00:00-05:00
|
||||
title: "Narcissistic behavior"
|
||||
tags: [rant, en_us, behavior, people]
|
||||
---
|
||||
|
||||
People talk about themselves all the time. Directly or indirectly, they
|
||||
usually have the intention to promote their views, opinions, or increase
|
||||
their self-esteem. I'm wondering now if I'm too radical when I say that
|
||||
I do bother about this behavior...
|
||||
|
||||
Sometimes I can't stand being close to someone who is a narcissist.
|
||||
However, what **really** pisses me off is talking to someone who
|
||||
**pretends** not to be a narcissist! This is absurdly annoying. They
|
||||
frequently talk about themselves, mentioning their freaking
|
||||
achievements, secretly waiting for other people to admire them, **but**
|
||||
they also like to say that they are not so good as they wanted, or that
|
||||
they should give more value to what they do, and so on...
|
||||
|
||||
Oh, man. Really? Can't you just stop appraising yourself externally, and
|
||||
start doing this internally, which is by far the most important thing to
|
||||
do? Can't you just be a nice guy/girl and stop talking about yourself
|
||||
like you were in a freaking presentation?
|
||||
|
||||
On the other hand, I understand that this kind of people probably have
|
||||
some serious internal issues (who doesn't, huh?), and they probably want
|
||||
everyone to pay attention to them as much as possible. We've got to be
|
||||
patient with them, understand their problem, and maybe try to help
|
||||
(how??). But sometimes it's just too hard to do that.
|
||||
|
||||
New year's resolution? Nah, I don't think so...
|
21
content/posts/not-on-freenode-anymore.md
Normal file
21
content/posts/not-on-freenode-anymore.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
date: 2021-06-14T00:00:00-05:00
|
||||
title: "I am not on Freenode anymore"
|
||||
tags: [en_us, debian, fedora, irc]
|
||||
---
|
||||
|
||||
This is a quick public announcement to say that I am **not** on the
|
||||
Freenode IRC network anymore. My nickname (`sergiodj`), which was
|
||||
more than a decade old, has just been deleted (along with **every
|
||||
other** nickname and channel in that network) from their database
|
||||
today, 2021-06-14.
|
||||
|
||||
For your safety, you should assume that everybody you knew at Freenode
|
||||
is not there either, even if you see their nicknames online. Do not
|
||||
trust without verifying. In fact, I would strongly encourage that you
|
||||
do not join Freenode anymore: their new policies are absolutely
|
||||
questionable and their disregard for their users is blatant.
|
||||
|
||||
If you would like to chat with me, you can find me at
|
||||
[OFTC](https://oftc.net/) (preferred) and
|
||||
[Libera](https://libera.chat/).
|
123
content/posts/permissive-the-new-popular.md
Normal file
123
content/posts/permissive-the-new-popular.md
Normal file
|
@ -0,0 +1,123 @@
|
|||
---
|
||||
date: 2014-05-21T00:00:00-05:00
|
||||
title: "Being Permissive, the new Popular"
|
||||
tags: [en_us, free-software, rant, thoughts, philosophy, open-source]
|
||||
---
|
||||
|
||||
This post is massively inspired by a post in the `gnu-prog-discuss`
|
||||
mailing list. This is a closed list of the [GNU
|
||||
Project](http://gnu.org), and only GNU maintainers and contributors can
|
||||
join, so I cannot put a link to the original message (by [Mike
|
||||
Gerwitz](http://mikegerwitz.com)), but this topic is being discussed
|
||||
over and over again at many places, so you will not have trouble finding
|
||||
similar opinions. I am also “responding” to a recent discussion that I
|
||||
had with [Luiz Izidoro](http://social.libreplanetbr.org/lvispy), which
|
||||
is a “friend” (as he himself likes to say) of the LibrePlanet São Paulo
|
||||
group.
|
||||
|
||||
Mike's point is simple: we, Free Software activists, are the geeks (or
|
||||
nerds) at school, surrounded by the “popular guys” all over again. In
|
||||
case it is not clear, the “popular guys” are the people who do not care
|
||||
about the Free Software ideology; the programmers who license their
|
||||
softwares using permissive licenses using the excuse of “more freedom”,
|
||||
but give away their work to increase the proprietary world.
|
||||
|
||||
It is undeniable that the Free Software, as a technical movement, has
|
||||
won. Anywhere you look, you see Free Software being developed and used.
|
||||
It is important to say that by “Free Software” I mean not only copyleft
|
||||
programs, but also permissive ones. However, it is also undeniable that
|
||||
several proprietary programs and solutions are being developed with the
|
||||
help of those permissive Free Softwares, without giving anything back to
|
||||
the community, as usual.
|
||||
|
||||
Numbers speak for themselves, so I am posting here the example that Mike
|
||||
used in his message, about [Trello](https://trello.com/), a “web-based
|
||||
project management application”, according to
|
||||
[Wikipedia](https://en.wikipedia.org/wiki/Trello). It is quite popular
|
||||
among project managers, and I know about two or three companies that use
|
||||
it, though I have never used it myself (luckily). Being web-based, it is
|
||||
full of Javascript code, and I appreciated the work Mike had to
|
||||
determine which pieces of Free Software Trello uses. The result is:
|
||||
|
||||
> jQuery, Sizzle, jQuery UI, jQuery Widget, jQuery UI Mouse, jQuery UI
|
||||
> Position, jQuery UI Draggable, jQuery UI Droppable, jQuery UI
|
||||
> Sortable, jQuery UI Datepicker, Hogan, Backbone, JSON2 (Crockford),
|
||||
> Markdown.js, Socket.io, Underscore.js, Bootstrap, Backbone, and
|
||||
> Mustache
|
||||
|
||||
You can see the license headers of all those projects here:
|
||||
|
||||
This is only on the client-side, i.e., the Javascript portion. I will
|
||||
not post the link to the full Javascript code (condensed in one single
|
||||
file) because I do not have permission to do so, but it should not be
|
||||
hard to take a look yourself if you are curious.
|
||||
|
||||
On the server side, Mike came up with this list of Free Softwares being
|
||||
used by Trello:
|
||||
|
||||
> MongoDB, Redis, Node.js, HAProxy, Express, Connect, Cluster,
|
||||
> node_redis, Mongoose, node-mogodb-native, async, CofeeScript, and
|
||||
> probably more
|
||||
|
||||
Quite a lot of Free Software, right? And Trello advertises itself as
|
||||
being “free”, which might confuse the inexperient reader because they
|
||||
are talking about price, not about freedom.
|
||||
|
||||
The lesson we learn is obvious but no less painful. He who contributes
|
||||
to Free Software using permissive licenses is directly contributing to
|
||||
the dissemination of proprietary software. And the corolary should be
|
||||
obvious as well: you are being exploited. Another nice addition made by
|
||||
Mike is a [quote by Larry
|
||||
Ellison](https://en.wikiquote.org/wiki/Larry_Ellison), CEO and founder
|
||||
of Oracle Corporation, about Free Software (and Open Source):
|
||||
|
||||
> “If an open source product gets good enough, we'll simply take it....
|
||||
> So the great thing about open source is nobody owns it – a company
|
||||
> like Oracle is free to take it for nothing, include it in our products
|
||||
> and charge for support, and that's what we'll do. So it is not
|
||||
> disruptive at all – you have to find places to add value. Once open
|
||||
> source gets good enough, competing with it would be insane. ... We
|
||||
> don't have to fight open source, we have to exploit open source.”
|
||||
|
||||
So, do you really think you have more freedom because you can choose
|
||||
BSD/MIT over GPL? Do you really think you it doesn't matter what other
|
||||
people do to your code, which you released as a Free Software? What are
|
||||
your goal with this movement, contribute to a better Free Software
|
||||
ecosystem (which will lead to a society which is more fair), or just
|
||||
getting your name in the hall of (f|sh)ame?
|
||||
|
||||
Back to the initial point, about not being “popular” among your friends
|
||||
(or be the “radical”, “extremist”, and other adjectives), I believe Mike
|
||||
hit the nail when he said that, because that is exactly how I am feeling
|
||||
currently, and I know other Free Softwares activists feel exactly the
|
||||
same. To defend a copyleft license is to defend something that is wrong,
|
||||
because, in the “popular kids' view”, copyleft is about anything but
|
||||
freedom! The cool thing now is to be indifferent, or even to think that
|
||||
it is nice that proprietary software can coexist with Free Software, so
|
||||
let's give it a help and release everything we can under permissive
|
||||
licenses. I could mention lots of very nice Free Softwares that chose to
|
||||
be permissive because their maintainers thought (and still think) GPL is
|
||||
evil.
|
||||
|
||||
I contributed and still contribute to some Free Softwares that are
|
||||
permissive licensed. And despite trying to use only copyleft software,
|
||||
sometimes I replace some of them by permissive ones, and do not feel
|
||||
guilty about it. I do that because I believe in Free Software, and I
|
||||
believe we should support it in every way we can. But doing so is also
|
||||
nocive to our cause. We are supporting softwares that are contributing
|
||||
to the proprietary world, even if that is not what their developers
|
||||
want. We are making it very easy for people like Larry Ellison to win
|
||||
and think they can exploit what other people are doing for free(dom). We
|
||||
are feeding our own enemy in their mouths. And we should be very careful
|
||||
about that.
|
||||
|
||||
This post is a request. I am asking you a favor. Please, consider
|
||||
(re)licensing your project using a copyleft license. If you do value
|
||||
what Free Software is about (or even what Open Source is about!), then
|
||||
help spread it by **not** helping the proprietary side. I am not asking
|
||||
you to join our ideological cause (or maybe I am?); feel free to stay
|
||||
out of this if you want. But please, at least consider helping the Free
|
||||
Software community by avoiding making your code permissive, which will
|
||||
give too much power to the unethical side.
|
||||
|
||||
Thank you!
|
12
content/posts/planet-debian-hello.md
Normal file
12
content/posts/planet-debian-hello.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
date: 2018-02-17T00:00:00-05:00
|
||||
title: "Hello, Planet Debian"
|
||||
tags: [en_us, debian]
|
||||
---
|
||||
|
||||
Hey, there. This is long overdue: my entry
|
||||
in [Planet Debian](https://planet.debian.org/)! I'm creating this
|
||||
post because, until now, I didn't have a `debian` tag in my blog!
|
||||
Well, not anymore.
|
||||
|
||||
Stay tunned!
|
50
content/posts/privacy-collective-good.md
Normal file
50
content/posts/privacy-collective-good.md
Normal file
|
@ -0,0 +1,50 @@
|
|||
---
|
||||
date: 2014-05-15T00:00:00-05:00
|
||||
title: "Privacy as a Collective Good"
|
||||
tags: [free-software, en_us, thoughts, privacy, behavior]
|
||||
---
|
||||
|
||||
It has been a while since I wanted to write about this subject. At many
|
||||
presentations that I gave during these last 2 years, I used the
|
||||
expression in the title in order to try to raise more awareness about
|
||||
why we should take care of our privacy (and maybe everyone's). But what
|
||||
does it really mean?
|
||||
|
||||
First of all, this article is not a copy of Benjamin Mako's [Google Has
|
||||
Most of My Email Because It Has All of
|
||||
Yours](http://mako.cc/copyrighteous/google-has-most-of-my-email-because-it-has-all-of-yours).
|
||||
And I would also like to take this opportunity to recommend this great
|
||||
article; it provides many insights that some people do not even realize.
|
||||
|
||||
But back to the point: privacy is a collective good, and we should
|
||||
preserve it. The explanation of why I am calling privacy something
|
||||
“collective” is simple, and if you read Ben's article you probably know
|
||||
it by now: whenever I send an e-mail to someone who uses Gmail, Google
|
||||
will have a copy of it, **even if I don't have a Google account**. What
|
||||
does it mean? It means that I pay my own server in order to run my own
|
||||
e-mail infrastructure and not have my privacy disrespected, but in the
|
||||
end of the day the majority of my efforts are useless. Which boils down
|
||||
to something that may be hard to read, but is true: **you are not
|
||||
respecting my privacy**. Your displicence with your privacy is forcing
|
||||
me, who needs to communicate with you, to give up my privacy as well,
|
||||
even if for a small portion of time. But it's not only about e-mail...
|
||||
|
||||
Another common example is Facebook. I don't have an account there, and
|
||||
don't plan to have one, despite the pressure coming from the society
|
||||
sometimes. However, when you take a picture of me and post it there, or
|
||||
when you mention something about me on your Facebook, you are also
|
||||
disrespecting my privacy. If I don't have Facebook, it is because I do
|
||||
not want to become a product for them and have my personal data sold to
|
||||
advertisement companies, nor have it shared with the NSA. You, on the
|
||||
other hand, do not care about this, and post things about me and other
|
||||
people without their permission. This is wrong, and you are
|
||||
**disrespecting my privacy**.
|
||||
|
||||
I chose to use this argument because oftentimes people are not concerned
|
||||
about their privacy, and think that “*if I have nothing to hide, then I
|
||||
don't need privacy*”. I won't even begin discussing this absurd, because
|
||||
that is not the point of this article. Instead, I noticed that sometimes
|
||||
people pay more attention if you say that they are disrespecting someone
|
||||
else's right. Maybe I am wrong, but I still think it is worth trying to
|
||||
open everyone's eyes for something that seems to have been forgotten by
|
||||
most.
|
102
content/posts/reflexoes-de-um-ativista-parte-1.md
Normal file
102
content/posts/reflexoes-de-um-ativista-parte-1.md
Normal file
|
@ -0,0 +1,102 @@
|
|||
---
|
||||
date: 2013-09-23T00:00:00-05:00
|
||||
title: "Reflexões de um ativista -- Parte 01"
|
||||
tags: [pt_br, thoughts, fedora-planet, free-software]
|
||||
---
|
||||
|
||||
Nesse último fim de semana, durante os dias 20 e 21 de Setembro
|
||||
(sexta-feira e sábado, respectivamente), ocorreram dois eventos sobre
|
||||
Software Livre na UNICAMP. Um deles, o
|
||||
[Upstream](http://upstream.net.br), foi um "evento teste" que ajudei a
|
||||
organizar junto com o [Cascardo](http://cascardo.info) e o Leonardo
|
||||
Garcia, ambos do LTC/IBM. O outro, o [Software Freedom
|
||||
Day](http://libreplanet.org/wiki/LP-BR-SP/Eventos/SFD_Campinas_2013)
|
||||
(SFD), eu organizei em nome do [LibrePlanet São
|
||||
Paulo](http://sp.libreplanetbr.org). Durante os dois eventos (e
|
||||
principalmente durante o SFD) eu fiquei pensando e refletindo bastante
|
||||
sobre vários assuntos relacionados (ou não) com o Software Livre.
|
||||
Resolvi, então, aproveitar a oportunidade e escrever um pouco sobre
|
||||
essas opiniões.
|
||||
|
||||
Antes, um breve relato dos dois eventos. Gostei parcialmente do
|
||||
resultado que obtivemos com o Upstream. Acho que a qualidade dos
|
||||
palestrantes foi ótima, e as discussões tiveram um nível muito bom. No
|
||||
entanto, os workshops deixaram a desejar. Pelo pouco que pensei a
|
||||
respeito, cheguei à conclusão de que faltou organização para definirmos
|
||||
os assuntos que iriam ser abordados, e principalmente o melhor modo de
|
||||
abordá-los. Assumo minha parcela de culpa nisso, afinal eu tentei ajudar
|
||||
na organização do workshop de toolchain e ele não saiu do modo como
|
||||
esperávamos. Problemas na infra-estrutura do local também atrapalharam
|
||||
no resultado final. Mas, de modo geral, e levando em conta que essa foi
|
||||
a primeira edição do evento, acho que conseguimos nos sair razoavelmente
|
||||
bem. Certamente já temos muitas coisas pra pensar e melhorar para a
|
||||
próxima edição!
|
||||
|
||||
Já sobre o SFD, apesar de várias pessoas muito boas terem participado do
|
||||
evento, a minha impressão inicial (e forte) foi a de que fazer a
|
||||
sociedade se interessar (ou ao menos ouvir, se bem que os dois conceitos
|
||||
são intrinsecamente ligados) por assuntos que são de suma importância
|
||||
para a manutenção (ou, no caso, a restauração) de um Estado que a
|
||||
respeite é mais difícil do que eu pensava. E essa é também a primeira
|
||||
reflexão do post.
|
||||
|
||||
Indignação x Ignorância
|
||||
-----------------------
|
||||
|
||||
Há um conflito muito grande acontecendo com as pessoas. Provavelmente
|
||||
ele não é "de hoje", mas de qualquer modo ele existe e precisa ser
|
||||
resolvido. O conflito, do modo que vejo, pode ser resumido da seguinte
|
||||
forma: "*até que ponto eu quero sentir indignação sobre um assunto, de
|
||||
modo que eu não precise necessariamente tomar alguma atitude sobre
|
||||
ele?*". Ou seja, a pessoa opta voluntariamente por permanecer na
|
||||
ignorância parcial, para que ela não se sinta obrigada a tomar uma
|
||||
posição sobre determinado problema que a atinge.
|
||||
|
||||
Tomemos o exemplo do Facebook. Alguém que tenha uma conta lá (i.e.,
|
||||
"quase todo mundo") prefere se manter na ignorância sobre os termos de
|
||||
serviço e privacidade que o site possui. Não estou entrando no mérito de
|
||||
operações clandestinas de espionagem; estou falando sobre os textos
|
||||
disponíveis no site do Facebook e que explicam (talvez não de maneira
|
||||
muito clara, mas isso já é outro problema) o que o site faz e não faz a
|
||||
respeito dos seus dados. É uma opção. É mais fácil apenas usar o site,
|
||||
compartilhar imagens engraçadas com seus mil "amigos", e não olhar para
|
||||
uma questão que deveria ser muito mais importante do que qualquer "like"
|
||||
que possa ser dado.
|
||||
|
||||
Não sou sociólogo e estou longe de poder dar opiniões acadêmicas sobre
|
||||
esse assunto, mas tenho a impressão de que o que acontece é um "retardo
|
||||
social" na maioria dos cidadãos deste planeta. Não deixa de ser um
|
||||
paradoxo o fato de que esse comportamento é exacerbado através de uma
|
||||
"rede social", que se traveste de facilitadora de comunicações entre
|
||||
indivíduos para poder exercer a derradeira função de uma empresa: ganhar
|
||||
dinheiro. É importante frisar que não sou contra "ganhar dinheiro", mas
|
||||
sou contra vários meios que são usados pra atingir esse objetivo.
|
||||
|
||||
No final, o produto somos nós, ou nossa privacidade. E quando eu digo
|
||||
"nós" ao invés de "eles", é porque eu fiz uma outra reflexão...
|
||||
|
||||
Privacidade é um "bem" coletivo
|
||||
-------------------------------
|
||||
|
||||
Pode parecer paradoxal à primeira vista, mas pare e pense um pouco. A
|
||||
privacidade é sim um direito do indivíduo, mas quando você opta por não
|
||||
tê-la, você está fazendo essa opção em nome de todas as pessoas que se
|
||||
comunicam com você. Afinal, se você não se importa se alguém está lendo
|
||||
suas mensagens, então qualquer tipo de comunicação que chega até você
|
||||
pode e vai ser lida. E se essa comunicação partir de alguém que preza
|
||||
pela própria privacidade, não vai fazer diferença alguma: a mensagem
|
||||
será lida de qualquer jeito, porque *você* escolheu isso.
|
||||
|
||||
Estou acostumado a ouvir pessoas dizerem que elas não são tão
|
||||
importantes a ponto de despertarem interesse em algum governo para que
|
||||
ele queira espioná-las. "Portanto", dizem as pessoas, "não preciso me
|
||||
preocupar". Bem, acho que esse argumento não invalida de maneira alguma
|
||||
o fato de que proteger a própria privacidade é importante. Não interessa
|
||||
o quão público alguém é; se ele não preza pela sua privacidade, ele está
|
||||
abrindo mão de algo que afeta direta ou indiretamente várias pessoas.
|
||||
|
||||
O meu ponto aqui é simples. Faça a sua parte e proteja a sua
|
||||
privacidade. Ninguém vai fazer isso por você, mas todos precisam e podem
|
||||
fazer suas respectivas partes. É um trabalho em conjunto, mas que
|
||||
depende da cooperação de todos. Se alguém perto de você não se importar,
|
||||
você provavelmente vai ser prejudicado.
|
122
content/posts/reflexoes-de-um-ativista-parte-2.md
Normal file
122
content/posts/reflexoes-de-um-ativista-parte-2.md
Normal file
|
@ -0,0 +1,122 @@
|
|||
---
|
||||
date: 2013-11-14T00:00:00-05:00
|
||||
title: "Reflexões de um ativista -- Parte 02"
|
||||
tags: [pt_br, thoughts, fedora-planet, free-software]
|
||||
---
|
||||
|
||||
Ainda não sei se estou preparado pra enfrentar a segunda parte dessa
|
||||
"série", mas também não adianta fugir... O que eu sei é que essas
|
||||
reflexões podem não ser condizentes com a realidade (ou com a **sua**
|
||||
realidade), e que talvez eu esteja exagerando (ou aliviando) nas minhas
|
||||
observações, mas em todo caso eu espero que seja possível para você,
|
||||
querido leitor, traçar alguns paralelos com o seu modo de ver o mundo,
|
||||
e, quem sabe, mudar algo na sua região.
|
||||
|
||||
Preguiça
|
||||
--------
|
||||
|
||||
Este ponto relaciona-se mutuamente com os outros dois pontos (que também
|
||||
relacionam-se mutuamente entre si). É claro, tudo está conectado nesse
|
||||
mundo, até mesmo (e principalmente!) os motivos que levam alguém a se
|
||||
**des**conectar de alguns valores morais e éticos.
|
||||
|
||||
Eu vejo pessoas preguiçosas o tempo todo. Às vezes, sou uma delas (por
|
||||
mais que tente me afastar desse comportamento). Mas creio que existe uma
|
||||
diferença entre alguém inerentemente preguiçoso, e alguém que se deixa
|
||||
levar pela tentação da preguiça por conta de algum outro fator. A minha
|
||||
reclamação, aqui, é com o primeiro tipo de pessoas.
|
||||
|
||||
O "teste" pra saber se você se encaixa nesse grupo é: quando você se
|
||||
depara com algum problema difícil de ser resolvido, qual seu *modus
|
||||
operandi*? Buscar soluções, ou desistir? Tentar você mesmo, ou pedir pra
|
||||
alguém? Aprender com seus erros, ou repetí-los *ad eternum*? Se você não
|
||||
quis nem pensar sobre esse teste, então acho a resposta é óbvia...
|
||||
|
||||
Mas o que isso tem a ver com ativismo? Tudo. Ser ativista é, por
|
||||
definição, ter que enfrentar situações difíceis e desanimadoras,
|
||||
platéias apáticas e desconfiadas, pessoas descrentes e alienadas. E isso
|
||||
tudo é absurdamente frustrante, principalmente quando você acredita
|
||||
naquilo que está falando, e sabe que as pessoas que estão ouvindo
|
||||
**precisam** entender também! Afinal, como eu falei em outro post, a
|
||||
privacidade (mas não só ela!) é um bem coletivo. A manutenção dela
|
||||
**depende** da compreensão da comunidade sendo espionada.
|
||||
|
||||
Em outras palavras, as empresas, entidades e governos que estão lutando
|
||||
para que você tenha cada vez menos direitos não dormem no ponto. Não vai
|
||||
ser muito legal se nós dormirmos...
|
||||
|
||||
Só que esse ponto não se aplica somente aos ativistas em si. Obviamente,
|
||||
encontramos (muitos!) preguiçosos (e preguiçosas) do outro lado, na
|
||||
platéia. É sempre bom (e necessário) assumir que as pessoas pra quem
|
||||
você está falando são ignorantes naquele assunto, e portanto precisam
|
||||
ser instruídas minimamente para que possam tomar decisões maduras e
|
||||
inteligentes. No entanto, mesmo **depois** de serem alertadas sobre
|
||||
vários fatos e consequências dos seus atos, as pessoas **ainda assim**
|
||||
preferem continuar na ignorância!! Existem vários nomes pra essa
|
||||
"teimosia", mas eu costumo achar que um dos fatores que contribui pra
|
||||
isso é a preguiça.
|
||||
|
||||
Preguiça em levantar da cadeira e procurar soluções que respeitem você e
|
||||
sua comunidade. Preguiça em continuar pensando (ou seja, "sempre
|
||||
alerta") sobre quais os riscos você está efetivamente correndo quando
|
||||
usa aquela "rede social". Preguiça em mudar os hábitos. Preguiça em
|
||||
lutar por seus direitos virtuais. Enfim, preguiça.
|
||||
|
||||
Preconceito
|
||||
-----------
|
||||
|
||||
Esse é um dos pontos mais problemáticos. O preconceito está enraizado
|
||||
nas pessoas, sem exceção. E o preconceito contra ativistas, de qualquer
|
||||
tipo, é evidente.
|
||||
|
||||
Ser ativista não é somente acreditar em algo. Ser ativista é
|
||||
principalmente **saber** de algo, e querer levar essa sabedoria para as
|
||||
pessoas. Obviamente, existem vários tipos de ativismo, mas quando olho
|
||||
pro que eu faço, eu me vejo mais como alguém que sente ser sua obrigação
|
||||
ensinar as pessoas sobre algo que é desconhecido da maioria. Apesar de
|
||||
realmente esperar que as pessoas acreditem nos valores que eu tento
|
||||
passar (e quem não espera?), acredito que meu objetivo principal seja o
|
||||
de "habilitar" a sociedade a tomar decisões conscientes sobre os
|
||||
assuntos que tento "ensinar".
|
||||
|
||||
Algumas pessoas têm medo ou vergonha de me falar que usam Facebook,
|
||||
Twitter, ou algum software não-livre. Mas eu noto que, na maior parte
|
||||
dos casos, o medo delas decorre do fato de elas saberem que eu não
|
||||
"gosto" de nenhum desses itens, e não do fato de elas saberem **por
|
||||
que** eu não gosto deles. E nesse caso, eu não sinto raiva ou decepção
|
||||
pela pessoa com quem estou conversando, mas sim uma necessidade de
|
||||
realmente **explicar** o motivo de eu não concordar com a utilização
|
||||
desses programas! Sei que se eu explicar, na verdade eu estarei dando
|
||||
ferramentas pra que a pessoa consiga, ela mesma, decidir se quer
|
||||
continuar usando-os. Essa é minha tarefa, no final das contas. Permitir
|
||||
que o usuário de tecnologia consiga, de forma consciente e ética,
|
||||
escolher o que quer e o que não quer. Mas aí entra o preconceito...
|
||||
|
||||
Quando começo a falar, é inevitável usar expressões como "liberdade",
|
||||
"respeito", "ética", "comunidade", "privacidade", "questões sociais",
|
||||
etc. Elas são o cimento pra que eu possa construir meus argumentos, e
|
||||
não creio que palavras ou expressões por si só possam definir um liberal
|
||||
de um conservador, por exemplo. No entanto, o que mais vejo são pessoas
|
||||
que confundem ativistas de Software Livre com comunistas ou socialistas.
|
||||
E como hoje a moda é o conservadorismo, às vezes as pessoas ignoram tudo
|
||||
aquilo que falamos por conta desse preconceito idiota.
|
||||
|
||||
Meu objetivo não é discutir sobre se é bom ou ruim ser
|
||||
socialista/comunista (apesar de eu definitivamente não ser
|
||||
"conservador", e achar esse preconceito absurdo). Mas o que deve ficar
|
||||
claro é que o Software Livre, apesar de ser um movimento político, **não
|
||||
é** um movimento partidário. Defendemos valores bem definidos, que podem
|
||||
ou não ter a ver com idéias comunistas/socialistas, mas que não advogam
|
||||
a favor desse movimento político. Também é importante mencionar que, por
|
||||
ser um movimento social, é natural que muitas idéias e preceitos
|
||||
defendidos pelos ativistas de Software Livre sejam simpáticos à causa
|
||||
socialista/comunista. Mas isso obviamente não faz com que Stallman seja
|
||||
o novo Stalin (apesar da semelhança dos sobrenomes).
|
||||
|
||||
Enfim, o meu pedido para a comunidade em geral é: ouçam a mensagem,
|
||||
independente do interlocutor, e pensem a respeito, independente da sua
|
||||
orientação político-partidária. Aquilo pelo qual lutamos independe de
|
||||
partido, religião, time de futebol, nacionalidade. Depende simplesmente
|
||||
de seres humanos, de uma comunidade que não tem fronteiras, não tem uma
|
||||
única cultura, mas que merece mais respeito. Só que, infelizmente, vamos
|
||||
ter que exigir isso.
|
115
content/posts/relato-apresentacao-fedora-unesp-rio-claro.md
Normal file
115
content/posts/relato-apresentacao-fedora-unesp-rio-claro.md
Normal file
|
@ -0,0 +1,115 @@
|
|||
---
|
||||
date: 2012-10-24T00:00:00-05:00
|
||||
title: "Relato das Apresentações na UNESP de Rio Claro/SP"
|
||||
tags: [pt_br, fedora-planet, presentation, fedora, report, gdb]
|
||||
---
|
||||
|
||||
Conforme eu havia comentado
|
||||
no
|
||||
[post anterior]({filename}/2012-10-23-apresentacao-fedora-unesp-rio-claro.md),
|
||||
segue o relato sobre as apresentações que fiz
|
||||
na
|
||||
[Semana da Computação](http://www.rc.unesp.br/seccomp/?p=Programacao)
|
||||
da [UNESP de Rio Claro](http://www.rc.unesp.br/).
|
||||
|
||||
**TL;DR:** *Gostei de ter tido a oportunidade de dar as apresentações,
|
||||
e principalmente de ter feito minha primeira palestra
|
||||
como [Embaixador](http://fedoraproject.org/wiki/Ambassadors)
|
||||
do [Projeto Fedora](http://projetofedora.org/wiki) no Brasil. Sobre a
|
||||
palestra a respeito do [GDB](http://www.gnu.org/s/gdb), também gostei
|
||||
do jeito que ela foi conduzida. Notei algumas falhas que precisam ser
|
||||
corrigidas, mas no geral a experiência foi muito boa.*
|
||||
|
||||
Apresentação "O Projeto Fedora"
|
||||
-------------------------------
|
||||
|
||||
Foi a primeira apresentação da noite, de acordo com a grade de
|
||||
programação. Começou meia hora atrasada, pois a organização pediu para
|
||||
esperarmos mais pessoas chegarem (estava chovendo bastante no momento, o
|
||||
que dificultou a locomoção).
|
||||
|
||||
Comecei a palestra falando um pouco sobre o Projeto Fedora. Acabei
|
||||
passando rapidamente pelas origens do projeto, uma falha que pretendo
|
||||
corrigir em próximas ocasiões. Dei muita ênfase na definição de
|
||||
**comunidade** e no que isso significa quando lidamos com software
|
||||
livre. Confesso que fiz algumas comparações com o Ubuntu, o que talvez
|
||||
não tenha sido uma boa idéia (de acordo com os *guidelines* do Projeto
|
||||
Fedora para Embaixadores). De qualquer modo, a mensagem foi passada e
|
||||
notei que algumas pessoas se interessaram em conhecer mais a respeito do
|
||||
projeto e da filosofia.
|
||||
|
||||
**Pontos positivos**: Creio ter conseguido informar as pessoas a
|
||||
respeito do projeto, com a ajuda dos ótimos slides do [Paul W.
|
||||
Frields](http://fedoraproject.org/wiki/User:Pfrields). É sempre
|
||||
gratificante dar palestras, mesmo que apenas uma ou duas pessoas no
|
||||
final acabem se interessando de verdade. Além disso, me senti bem por
|
||||
estar divulgando um projeto que respeita as liberdades dos usuários (ou
|
||||
pelo menos tenta fazer isso ao máximo), e que eu realmente uso e gosto.
|
||||
|
||||
**Pontos a serem melhorados**: Fazer uma palestra um pouco menos
|
||||
"pessoal". É muito difícil conseguir isso, mas tenho a forte impressão
|
||||
de que minha orientação totalmente pró-software-livre acaba (às vezes)
|
||||
afastando algumas pessoas, que vêem no entusiasta por software livre uma
|
||||
pessoa "radical" e "xiita". Preciso pensar um pouco a respeito do
|
||||
assunto...
|
||||
|
||||
A conclusão é que fiquei bastante satisfeito com o resultado da
|
||||
palestra. Percebi que, depois dela, algumas pessoas vieram comentar que
|
||||
estavam utilizando Fedora, ou que já andavam pensando em trocar de
|
||||
distribuição, que agora o Fedora era uma opção. O objetivo foi cumprido
|
||||
:-).
|
||||
|
||||
Apresentação "GDB Crash Course"
|
||||
-------------------------------
|
||||
|
||||
Creio que essa já é a quarta vez que apresento essa palestra, e a
|
||||
terceira vez junto com meu amigo
|
||||
[Edjunior](http://twitter.com/nottooamused). Sempre que ela termina,
|
||||
fico(amos) com a impressão de que ainda não acertamos no ponto, e dessa
|
||||
vez não foi diferente.
|
||||
|
||||
A palestra começou em ponto, às 21h, e decidimos tentar uma abordagem um
|
||||
pouco diferente. A última vez que apresentamos a palestra foi no evento
|
||||
da [Semana Integrada](http://www.semanaintegrada.com.br/2012/) da [PUC
|
||||
Campinas](http://www.puc-campinas.edu.br/). Naquela ocasião, tínhamos
|
||||
optado por começar falando mais sobre os comandos do `GDB`, e depois
|
||||
mostrarmos como a coisa funciona, estilo *hands-on*. Dessa vez,
|
||||
resolvemos ir mostrando a prática junto com a teoria. Ficou melhor, e
|
||||
acho que a apresentação ficou mais fluida, mas ainda assim esbarramos no
|
||||
velho problema da interdependência dos comandos: quando íamos falar
|
||||
sobre `breakpoints`, precisávamos ter mostrado algum outro comando que
|
||||
só iria ser explicado mais à frente, que por sua vez iria precisar de
|
||||
outro comando, que iria precisar de `breakpoints`, etc. Enfim, no final
|
||||
acabamos sendo obrigados a pular alguns comandos, e a adiantar a
|
||||
explicação de outros, quebrando um pouco o fluxo dos slides.
|
||||
|
||||
Notei que algumas pessoas estavam bastante interessadas no `GDB`, talvez
|
||||
por já programarem há algum tempo. As outras, aparentemente, ainda não
|
||||
conseguiam ver muita utilidade para um depurador, mas mesmo assim
|
||||
tentavam aprender algo que talvez fosse lhes servir no futuro.
|
||||
|
||||
Já era de se esperar, mas mesmo assim não deixo de me surpreender quando
|
||||
vejo que uma palestra técnica consegue atrair muito mais atenção do que
|
||||
uma palestra "filosófica", como foi a do Projeto Fedora. Talvez seja
|
||||
reflexo da sociedade em que vivemos, ou talvez seja apenas uma impressão
|
||||
errônea da minha parte.
|
||||
|
||||
A conclusão, finalmente, é que a palestra parece ter sido útil para
|
||||
algumas pessoas (mesmo que poucas), e isso nos dá ainda mais fôlego pra
|
||||
continuarmos tentando divulgar esse projeto pouco conhecido (mas muito
|
||||
útil) que é o `GDB`.
|
||||
|
||||
Agradecimentos
|
||||
--------------
|
||||
|
||||
Não poderia deixar de agradecer primeiramente à organização da SECCOMP
|
||||
da UNESP de Rio Claro pelo ótimo evento. Fiquei surpreso com a
|
||||
infra-estrutura e, principalmente, com a receptividade das pessoas.
|
||||
Gostei muito do ambiente descontraído, e espero não ter decepcionado
|
||||
muita gente por lá com meus comentários informais e caipiras durante as
|
||||
palestras :-).
|
||||
|
||||
Também agradeço ao meu amigo Edjunior por ter me acompanhado até sua
|
||||
*alma matter* para me ajudar na realização da palestra sobre o `GDB`.
|
||||
|
||||
Até a próxima!
|
103
content/posts/relato-apresentacao-gdb-solisc.md
Normal file
103
content/posts/relato-apresentacao-gdb-solisc.md
Normal file
|
@ -0,0 +1,103 @@
|
|||
---
|
||||
date: 2012-12-01T00:00:00-05:00
|
||||
title: "Relato da Apresentação sobre o GDB no SoLiSC 2012"
|
||||
tags: [pt_br, presentation, report, gdb, fedora-planet, solisc]
|
||||
---
|
||||
|
||||
Nesta última sexta-feira, dia 30/11/2012, estive presente na sétima
|
||||
edição do [SoLiSC 2012](http://www.solisc.com.br/), em Florianópolis,
|
||||
para apresentar uma palestra introdutória sobre o
|
||||
[GDB](http://www.gnu.org/software/gdb/). Este é um relato sobre minha
|
||||
particição no evento :-).
|
||||
|
||||
Impressões sobre o evento
|
||||
-------------------------
|
||||
|
||||
Foi a primeira vez que fui ao SoLiSC. Já tive vontade de ir em anos
|
||||
anteriores, mas infelizmente sempre havia algo para atrapalhar. No
|
||||
entanto, nesse ano felizmente tudo correu bem, e inclusive tive uma
|
||||
palestra aceita! Ou seja, um ótimo motivo para visitar Floripa e rever o
|
||||
mar :-D.
|
||||
|
||||
Peguei um vôo saindo às 6h de Campinas, e cheguei lá às 7h10min. Estava
|
||||
bastante cansado, pois não havia dormido de quinta pra sexta, só que a
|
||||
ansiedade estava conseguindo me deixar ligado :-).
|
||||
|
||||
O evento aconteceu [Universidade Estácio de
|
||||
Sá](http://portal.estacio.br/unidades/universidade-estacio-de-sa/polos/sc/florianopolis/ead-florianopolis-sc.aspx),
|
||||
que fica em São José. Cheguei por lá às 8h, e fui bem recebido pelo
|
||||
pessoal do evento. Já tentei me enturmar, e conheci algumas pessoas que
|
||||
também iam palestrar no evento. Como minha palestra estava marcada para
|
||||
começar às 14h, resolvi ficar batendo papo e de olho na grade de
|
||||
palestras.
|
||||
|
||||
Por coincidência (ou não!), acabei ficando na sala onde aconteceria o
|
||||
primeiro [LibreOffice Hack
|
||||
Day](http://libreofficebrasil.blogspot.com.br/2012/11/programacao-do-primeiro-hack-day-de.html)
|
||||
no Brasil. Acabei ficando na sala o dia todo, ajudando o pessoal a
|
||||
resolver alguns problemas chatos com o firewall da Universidade, e
|
||||
depois com `git`. Foi uma experiência muito legal, nunca tinha
|
||||
participado de um Hack Day antes, e foi uma honra poder presenciar e
|
||||
ajudar no primeiro evento do tipo que o pessoal do
|
||||
[LibreOffice](http://pt-br.libreoffice.org/) fez no Brasil :-). Aliás,
|
||||
foi muito interessante conhecer um pouco mais sobre um projeto tão
|
||||
grande e complexo quanto o LibreOffice, e inclusive fiz um "jabá" sobre
|
||||
o GDB para eles :-).
|
||||
|
||||
No final, também conheci algumas pessoas muito interessadas em
|
||||
contribuir com projetos de software livre, o que é sempre bom! Isso me
|
||||
ajuda a ter mais motivação para continuar a fazer esse trabalho de
|
||||
divulgação. Você pode ler uma descrição mais detalhada sobre o
|
||||
LibreOffice Hack Day (inclusive com fotos)
|
||||
[aqui](http://blog.pt-br.libreoffice.org/2012/12/01/nosso-primeiro-hackday-do-libreoffice-no-brasil/).
|
||||
|
||||
Apresentação "GDB Crash Course"
|
||||
-------------------------------
|
||||
|
||||
Eu já estava esperando pouca gente na palestra, até porque falar sobre o
|
||||
GDB está ficando cada vez mais complicado... As pessoas em geral não
|
||||
sabem (e nem se interessam) pelo software, então é normal ficar meio "de
|
||||
escanteio" nesses eventos :-). Quem sabe um dia eu não escreva um post
|
||||
sobre isso?
|
||||
|
||||
Bem, mas mesmo com pouco público, creio que palestra correu bem. Dessa
|
||||
vez, meu amigo [Edjunior](http://twitter.com/nottooamused) não foi,
|
||||
então levei a palestra sozinho :-). Existem vantagens e desvantagens
|
||||
nisso, mas de modo geral acho que a palestra ficou um pouco mais rápida.
|
||||
|
||||
Adicionei alguns slides extras para falar sobre a Red Hat, e sobre o que
|
||||
estamos fazendo pelas comunidades de software livre por aí -- não só na
|
||||
do GDB, mas também em muitas outras. Essa parte da apresentação
|
||||
realmente foi bacana, porque o orgulho de se trabalhar nessa empresa é
|
||||
grande!
|
||||
|
||||
Depois que terminei minha palestra e voltei à sala do LibreOffice Hack
|
||||
Day, alguns desenvolvedores que estavam por lá me perguntaram como foi,
|
||||
e disseram que tinham se arrependido de não ter ido... Sabe como é,
|
||||
preferiram ficar fazendo *patches*, então eu entendo :-P. Bem, pra não
|
||||
deixar ninguém insatisfeito, acabei fazendo uma segunda rodada da
|
||||
palestra dentro do Hack Day, e também foi muito bacana :-).
|
||||
|
||||
Várias pessoas me pediram os slides, então aqui estão eles:
|
||||
|
||||
- <https://github.com/sergiodj/gdb-unicamp2011> (fonte,
|
||||
em Beamer/LaTeX)
|
||||
- <http://fedorapeople.org/~sergiodj/presentations/2012/SoLiSC/> (PDF)
|
||||
|
||||
Conclusão
|
||||
---------
|
||||
|
||||
Gostaria de agradecer especialmente à [Eliane
|
||||
Domingos](https://twitter.com/Eliane_Domingos), ao David Jourdain e ao
|
||||
[Olivier Hallot](http://olivierhallot.blogspot.com.br/), todos membros
|
||||
da [TDF](http://www.documentfoundation.org/) e contribuidores do
|
||||
LibreOffice, pelos momentos prazerosos e pelas conversas divertidas que
|
||||
tivemos durante todo o evento!
|
||||
|
||||
Também gostaria de agradecer à organização do SoLiSC pela oportunidade
|
||||
de participar de um evento tão bacana! O [Klaibson
|
||||
Ribeiro](https://twitter.com/klaibsonn) foi a pessoa com quem troquei
|
||||
alguns e-mails antes do evento, então um "muito obrigado" a ele também
|
||||
:-).
|
||||
|
||||
Nos vemos no próximo SoLiSC!
|
227
content/posts/relato-installfest-unesp-unicamp.md
Normal file
227
content/posts/relato-installfest-unesp-unicamp.md
Normal file
|
@ -0,0 +1,227 @@
|
|||
---
|
||||
date: 2013-04-01T00:00:00-05:00
|
||||
title: "Relato dos Install Fests na UNESP de Rio Claro/SP e na UNICAMP/SP"
|
||||
tags: [pt_br, fedora-planet, installfest, report, fedora]
|
||||
---
|
||||
|
||||
E... Aqui estamos (estou?) com mais um relato sobre duas atividades
|
||||
envolvendo o [Projeto Fedora](http://fedoraproject.org/pt_br/)! Ele
|
||||
contempla, respectivamente, os Install Fests ocorridos na [UNESP de Rio
|
||||
Claro/SP](http://www.rc.unesp.br/) e na
|
||||
[UNICAMP](http://www.unicamp.br). Foram atividades que envolveram
|
||||
diversas pessoas, tiveram vitórias e derrotas, alegrias e tristezas, mas
|
||||
acima de tudo um sentimento de impotência (principalmente no Install
|
||||
Fest ocorrido na UNICAMP) em relação às novas "tecnologias" de boot,
|
||||
principalemente ao [Secure
|
||||
Boot](http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#Secure_boot).
|
||||
|
||||
Install Fest: missão UNESP de Rio Claro/SP
|
||||
------------------------------------------
|
||||
|
||||
Este foi o Install Fest mais tranquilo. Ele começou a ser organizado
|
||||
logo depois da
|
||||
minha
|
||||
[participação na Semana da Computação da UNESP de Rio Claro]({filename}/2012-10-24-relato-apresentacao-fedora-unesp-rio-claro.md),
|
||||
e a intenção inicial era realizá-lo no dia da matrícula dos alunos
|
||||
ingressantes na Universidade. No final das contas, decidimos postergar
|
||||
a data, e isso foi uma boa escolha.
|
||||
|
||||
O Install Fest aconteceu no dia 06 de março de 2013, em um auditório da
|
||||
Biblioteca do campus, e começou com uma palestra minha sobre o Projeto
|
||||
Fedora. Foi basicamente a mesma palestra que eu havia apresentado na
|
||||
Semana da Computação, mas de uma maneira mais sucinta porque tínhamos
|
||||
pouco tempo. Creio que a palestra foi bem recebida, porque o público
|
||||
demonstrou interesse em contribuir com o Projeto Fedora depois que eu
|
||||
expliquei os meios para isso :-). Além disso, apesar do número pequeno
|
||||
de pessoas (aproximadamente 12 participantes), todos estavam bastante
|
||||
interessados no conteúdo, o que é uma motivação extra!
|
||||
|
||||
Bem, após a palestra era hora de começar a instalar os sistemas. Levei
|
||||
vários DVDs do Fedora, em basicamente 2 versões: LiveDVDs, que permitem
|
||||
o boot e a utilização de um sistema Fedora sem a necessidade de instalar
|
||||
nada na máquina, e InstallDVDs, que não oferecem a opção de
|
||||
"experimentar" o sistema, mas já possuem todos os pacotes necessários
|
||||
para fazer uma instalação completa. Expliquei a todos os presentes
|
||||
algumas regras básicas de todo Install Fest: é preciso reparticionar o
|
||||
disco rígido caso se queira manter o Microsoft (R) Windows (R), quem
|
||||
organiza o Install Fest não pode assumir responsabilidade por nenhuma
|
||||
falha na instalação (apesar de elas serem raras), e também não pode
|
||||
assumir responsabilidade caso o usuário torne-se viciado no GNU/Linux
|
||||
:-). Dito isso, começamos a colocar as mãos na GNU/massa.
|
||||
|
||||
O primeiro desafio (e, até então, único!) dos Install Fests recentes é
|
||||
imposto pelos próprios fabricantes de notebooks. Um disco rígido que
|
||||
ainda utilize [MBR](http://en.wikipedia.org/wiki/Master_boot_record) (a
|
||||
maioria) suporta apenas 4 partições primárias. Antigamente, os
|
||||
fabricantes criavam apenas uma partição para o Microsoft (R) Windows
|
||||
(R), e às vezes chegavam a criar outra partição de "recuperação", mas
|
||||
paravam por aí. Atualmente, não é raro encontrar computadores com 4
|
||||
partições primárias já criadas. Eu inclusive já cheguei a ver notebooks
|
||||
com discos de 1 TB com uma partição primária de pouco mais de 1 MB! É
|
||||
uma prática totalmente absurda, e a meu ver é feita com má-fé, visando
|
||||
dificultar a instalação de outros sistemas operacionais. Além disso, pra
|
||||
piorar ainda mais, alguns fabricantes (HP me vem à cabeça, mas existem
|
||||
outros) dão um jeito de **invalidar** a garantia caso o esquema de
|
||||
particionamento seja alterado!!!
|
||||
|
||||
Felizmente, vários computadores no Install Fest possuíam apenas 3
|
||||
partições (ou até menos!), e aqueles que possuíam 4 partições ou usavam
|
||||
um outro *boot sector* (chamado
|
||||
[GPT](http://en.wikipedia.org/wiki/GUID_Partition_Table)), ou já estavam
|
||||
fora da garantia do fabricante e podiam ter seus esquemas de
|
||||
particionamento alterados. O próprio Microsoft (R) Windows (R), a partir
|
||||
da versão 7 (se não me engano), oferece uma ferramenta específica para
|
||||
redimensionar e reparticionar o disco, portanto essa primeira etapa foi
|
||||
concluída com sucesso em todas as máquinas (por favor, se você
|
||||
participou do Install Fest e se lembra de alguma máquina na qual não foi
|
||||
possível efetuar o reparticionamento, por favor contate-me
|
||||
<about> para que eu corrija o post!).
|
||||
|
||||
Depois de reparticionar, era hora de começar a instalação. Quase todos
|
||||
preferiram utilizar o InstallDVD, porque a instalação pela internet iria
|
||||
demorar muito. Após o boot, deparamo-nos com a interface do instalador
|
||||
do Fedora 18. Depois de ter lido diversas críticas sobre ele, pude
|
||||
finalmente confirmar que, infelizmente, quase todas condizem. Confesso
|
||||
que fiquei confuso no início, principalmente na tela de particionamento
|
||||
e seleção de disco, que não é nem um pouco intuitiva. Sei que o
|
||||
instalador foi reescrito, e que ele foi um dos principais motivos do
|
||||
atraso no lançamento do Fedora 18, então espero muito que as melhorias
|
||||
para o Fedora 19 contemplem, principalmente, essa parte de interface com
|
||||
o usuário. Após apanhar um pouco, acabei me acostumando com ele e as
|
||||
outras instalações foram mais tranquilas.
|
||||
|
||||
Conforme as instalações foram acabando, os sistemas começaram a ser
|
||||
configurados. Se minha memória não falha, todos optaram por instalar o
|
||||
GNOME 3, que é o desktop padrão do Fedora 18. Eu particularmente não
|
||||
gosto dele, e também tive algumas dificuldades (principalmente ao tentar
|
||||
encontrar modos de alterar opções mais avançadas), mas algumas pessoas
|
||||
gostaram do visual.
|
||||
|
||||
No final, esqueci de contar quantas máquinas foram instaladas, mas creio
|
||||
que chegamos perto de 11. Todas as instalações foram bem sucedidas, até
|
||||
onde minha memória alcança :-). E novamente eu fiquei bastante
|
||||
satisfeito com minha ida à UNESP de Rio Claro!
|
||||
|
||||
Entretanto, nuvens negras estavam se aproximando, e minha alegria
|
||||
duraria pouco...
|
||||
|
||||
Install Fest: missão UNICAMP
|
||||
----------------------------
|
||||
|
||||
Há alguns anos começaram a surgir notícias sobre um novo sistema que
|
||||
substituiria a [BIOS](http://en.wikipedia.org/wiki/BIOS), permitindo
|
||||
muito mais flexibilidade durante o boot e inclusive adicionando camadas
|
||||
de segurança que protegeriam o usuário de vírus e outras ameaças. Esse
|
||||
sistema chama-se [UEFI](http://en.wikipedia.org/wiki/Uefi) (e uma das
|
||||
tais "camadas de segurança" chama-se [Secure
|
||||
Boot](http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#Secure_boot)),
|
||||
e no ano passado ele ganhou muita notoriedade porque a Microsoft (R)
|
||||
anunciou que seu então novo sistema, o Windows (R) 8, só poderia ser
|
||||
utilizado em máquinas com [UEFI](http://en.wikipedia.org/wiki/Uefi).
|
||||
Isso causou uma corrida dos fabricantes de computador para adaptar-se a
|
||||
esse novo modelo (e ganhar o famigerado selo de compatibilidade da
|
||||
Microsoft (R)), e gerou incoformismo em boa parte das comunidades
|
||||
envolvidas com Software Livre e/ou Open Source.
|
||||
|
||||
Resumindo, o grande problema desse novo esquema é a necessidade de uma
|
||||
chave criptográfica assinada por uma autoridade certificadora para que o
|
||||
sistema operacional seja iniciado. Essa é a segurança que o [Secure
|
||||
Boot](http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#Secure_boot)
|
||||
provê, e o único jeito de obter uma chave assinada é... (tambores)...
|
||||
pagando à Microsoft (R)!
|
||||
|
||||
Até onde eu sei, o Microsoft (R) Windows (R) 8 **não funciona** caso o
|
||||
[Secure
|
||||
Boot](http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#Secure_boot)
|
||||
esteja desabilitado (um meio perfeitamente válido de instalar uma
|
||||
distribuição GNU/Linux que não possui a tal chave criptográfica), então
|
||||
a distribuição é obrigada a compactuar com esse esquema caso queira
|
||||
oferecer a opção de dual-boot ao usuário. E atualmente, as duas únicas
|
||||
distribuições que oferecem isso são o Fedora e o Ubuntu.
|
||||
|
||||
Bem, depois dessa sucinta explicação, começa aqui meu relato sobre o que
|
||||
aconteceu no Install Fest. No dia 13 de março de 2013, quarta-feira, nos
|
||||
reunimos no [Instituto de Computação](http://ic.unicamp.br/) da UNICAMP
|
||||
para realizarmos a instalação de distribuições GNU/Linux. Novamente, eu
|
||||
levei vários DVDs do Fedora para serem utilizados pelos alunos
|
||||
ingressantes nos cursos de Ciência e Engenharia de Computação. Dessa vez
|
||||
não houve palestra introdutória sobre o Projeto Fedora, mas eu resolvi
|
||||
pegar 10 minutos e explicar as "regras" de um Install Fest. Também
|
||||
comentei sobre a má prática que algumas fabricantes de notebooks têm
|
||||
quando decidem entregar um disco rígido todo particionado e sem a
|
||||
possibilidade de adição de novas partições primárias. Dito isso,
|
||||
começamos a instalar.
|
||||
|
||||
Infelizmente, devido a diversos fatores como inexperiência, tempo curto
|
||||
para organização do evento, e erro na estimativa de quantas pessoas
|
||||
iriam ao evento, acabamos ficando com muita gente pra instalar e pouca
|
||||
gente pra ajudar. Não chegamos a fazer uma contagem oficial, mas eu
|
||||
suponho que pelo menos 20 pessoas estavam na sala querendo instalar o
|
||||
Fedora. E a grande maioria delas estava com notebooks novos, com
|
||||
Microsoft (R) Windows (R) 8, i.e., com UEFI e Secure Boot habilitados.
|
||||
|
||||
Conforme íamos reparticionando os discos e bootando os DVDs do Fedora,
|
||||
começamos a perceber que havia algo errado. Depois de terminar a
|
||||
instalação em algumas máquinas, notávamos que o sistema não iniciava. O
|
||||
que tínhamos que fazer, em alguns casos, era desabilitar o Secure Boot
|
||||
(mesmo assim, sem sucesso em alguns casos). E depois disso, o Fedora
|
||||
finalmente era iniciado, mas o Microsoft (R) Windows (R) 8 não aparecia
|
||||
na lista de sistemas operacionais do GRUB! Ou seja, era impossível fazer
|
||||
com que os dois sistemas convivessem na mesma máquina.
|
||||
|
||||
Tivemos alguns casos um pouco mais graves, mas que no fim foram
|
||||
resolvidos. E antes que você me pergunte qual foi a solução, eu
|
||||
respondo: reabilitamos o Secure Boot, e praticamente desfizemos a
|
||||
instalação do Fedora. Ou seja, a esmagadora maioria dos alunos presentes
|
||||
no Install Fest voltou pra casa com uma máquina sem Fedora ou qualquer
|
||||
outra distro GNU/Linux. Eu pessoalmente vi apenas 2 instalações bem
|
||||
sucedidas, apesar de que depois do Install Fest fiquei sabendo de mais.
|
||||
|
||||
Saí do evento bastante chateado, achando que a culpa havia sido nossa, e
|
||||
que os alunos nunca mais iriam querer instalar GNU/Linux nas suas
|
||||
máquinas. Mas depois de um tempo, coloquei as idéias em ordem e resolvi
|
||||
escrever este post. Não estou eximindo ninguém da culpa, creio que
|
||||
devíamos ter planejado o Install Fest um pouco melhor, e com certeza
|
||||
aprendemos com os erros que cometemos. Mas acho muito importante
|
||||
**apontar alguns dedos** e dizer o que realmente aconteceu.
|
||||
|
||||
Conclusões
|
||||
----------
|
||||
|
||||
A conclusão principal não poderia ser outra. **É preciso tomar muito
|
||||
cuidado com essas novas tecnologias de boot**. Quando for comprar uma
|
||||
máquina nova, é preciso prestar **muita** atenção a isso, pois essas
|
||||
novas tecnologias nada mais são do que armadilhas para tirar a sua
|
||||
liberdade de escolher o que quer executar na sua máquina. É preciso
|
||||
lutar contra essas imposições que as empresas fazem (não seja inocente
|
||||
pensando que é só a Microsoft (R) que está por trás disso...), e é
|
||||
preciso tomar conta da sua liberdade. Se quiser demonstrar ainda mais
|
||||
seu apoio contra essas imposições (e entender mais do porquê delas
|
||||
existirem), [clique aqui e leia a página da Free Software Foundation
|
||||
sobre o assunto (e assine a petição
|
||||
também!)](http://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/).
|
||||
|
||||
Conclusões secundárias: um Install Fest (ou qualquer evento, na verdade)
|
||||
precisa ser organizado com antecedência, e precisa ter bastante gente
|
||||
disposta a ajudar nas instalações. Só assim as coisas fluem.
|
||||
|
||||
Agradecimentos
|
||||
--------------
|
||||
|
||||
Não posso deixar de agradecer o [Ricardo
|
||||
Panaggio](https://twitter.com/panaggio) por me ajudar indo até a UNESP
|
||||
de Rio Claro comigo! Ele também ajudou bastante no Install Fest da
|
||||
UNICAMP.
|
||||
|
||||
Também gostaria de agradecer ao Marcel Godoy e ao Centro Acadêmico da
|
||||
Computação da UNESP de Rio Claro pela organização e divulgação do
|
||||
Install Fest lá. Muito obrigado!
|
||||
|
||||
O Install Fest da UNICAMP só foi possível com a ajuda do [Grupo
|
||||
Pró-Software Livre](http://gpsl.ic.unicamp.br) da UNICAMP, em especial
|
||||
ao Gabriel Krisman. O [Ivan S. Freitas](http://isf.sdf.org/about.html) e
|
||||
o [Raniere Gaia Silva](http://www.ime.unicamp.br/~ra092767/) também
|
||||
ajudaram no apoio logístico do Install Fest.
|
||||
|
||||
Por fim, gostaria de agradecer à comunidade Fedora pelo apoio com os
|
||||
DVDs. Obrigado a todos!
|
103
content/posts/respectful-software.md
Normal file
103
content/posts/respectful-software.md
Normal file
|
@ -0,0 +1,103 @@
|
|||
---
|
||||
date: 2014-10-15T00:00:00-05:00
|
||||
title: "Respectful Software"
|
||||
tags: [free-software, en_us, privacy, security, fedora-planet, philosophy, thoughts]
|
||||
---
|
||||
|
||||
**To what extent should Free Software respect its users?**
|
||||
|
||||
The question, strange as it may sound, is not only valid but also
|
||||
becoming more and more important these days. If you think that the [four
|
||||
freedoms](http://www.gnu.org/philosophy/free-sw.html) are enough to
|
||||
guarantee that the Free Software will respect the user, you are probably
|
||||
being oversimplistic. The four freedoms **are** essential, but they are
|
||||
not sufficient. You need more. I need more. And this is why I think the
|
||||
Free Software movement should have been called the **Respectful
|
||||
Software** movement.
|
||||
|
||||
I know I will probably hear that I am too radical. And I know I will
|
||||
hear it even from those who defend Free Software the way I do. But I
|
||||
need to express this feeling I have, even though I may be wrong about
|
||||
it.
|
||||
|
||||
It all began as an innocent comment. I make lots of presentations and
|
||||
talks about Free Software, and, knowing that the word “Free” is
|
||||
ambiguous in English, I started joking that Richard Stallman should have
|
||||
named the movement “Respectful Software”, instead of “Free Software”. If
|
||||
you think about it just a little, you will see that “respect” is a word
|
||||
that brings different interpretations to different people, just as
|
||||
“free” does. It is a subjective word. However, at least it does not have
|
||||
the problem of referring to completely unrelated things such as “price”
|
||||
and “freedom”. Respect is respect, and everybody knows it. What can
|
||||
change (and often does) is *what* a person considers respectful or not.
|
||||
|
||||
(*I am obviously not considering the possible ambiguity that may exist
|
||||
in another language with the word “respect”.*)
|
||||
|
||||
So, back to the software world. I want you to imagine a Free Software.
|
||||
For example, let's consider one that is used to connect to so-called
|
||||
“social networks” like [GNU Social](http://gnu.io/social/) or
|
||||
[pump.io](http://pump.io/). I do not want to use a specific example
|
||||
here; I am more interested in the consequences of a certain decision.
|
||||
Which decision? Keep reading :-).
|
||||
|
||||
Now, let's imagine that this Free Software is just beginning its life,
|
||||
probably in some code repository under the control of its developer(s),
|
||||
but most likely using some proprietary service like GitHub (which is an
|
||||
issue by itself). And probably the developer is thinking: “*Which social
|
||||
network should my software support first?*”. This is an extremely valid
|
||||
and important question, but sometimes the developer comes up with an
|
||||
answer that may not be satisfactory to its users. This is where the
|
||||
“respect” comes into play.
|
||||
|
||||
In our case, this bad answer would be “Facebook”, “Twitter”, “Linkedin”,
|
||||
or any other unethical social network. However, those are exactly the
|
||||
easiest answers for many and many Free Software developers, either
|
||||
because those “vampiric” services are popular among users, or because
|
||||
the developer him/herself uses them!!
|
||||
By now, you should be able to see where I am getting at. My point, in a
|
||||
simple question, is: “**How far should we, Free Software developers,
|
||||
allow users to go and harm themselves *and* the community?**”. Yes, this
|
||||
is not just a matter of self-inflicted restrictions, as when the user
|
||||
chooses to use a non-free software to edit a text file, for example. It
|
||||
is, in most cases, a matter of harming **the community** too. (I have
|
||||
written a post related to this issue a while ago, called
|
||||
“[Privacy as a Collective Good]({filename}/2014-05-15-privacy-collective-good.md)”.)
|
||||
|
||||
It should be easy to see that it does not matter if I am using Facebook
|
||||
through my shiny Free Software application on my computer or cellphone.
|
||||
What **really** matters is that, when doing so, you are basically
|
||||
supporting the use of those unethical social networks, to the point that
|
||||
perhaps some of your friends are also using them **because** of you.
|
||||
What does it matter if they are using Free Software to access them or
|
||||
not? Is the benefit offered by the Free Software big enough to eliminate
|
||||
(or even soften) the problems that exist when the user uses an unethical
|
||||
service like Linkedin?
|
||||
|
||||
I wonder, though, what is the limit that we should obey. Where should we
|
||||
draw the line and say “I will not pass beyond this point”? Should we
|
||||
just “abandon” the users of those unethical services and social
|
||||
networks, while we lock ourselves in our not-very-safe world? After all,
|
||||
we **need** to communicate with them in order to bring them to our
|
||||
cause, but it is hard doing so without getting our hands dirty. But that
|
||||
is a discussion to another post, I believe.
|
||||
|
||||
Meanwhile, I could give plenty of examples of existing Free Softwares
|
||||
that are doing a disservice to the community by allowing (and even
|
||||
**promoting**) unethical services or solutions for their users. They are
|
||||
**disrespecting** their users, sometimes exploiting the fact that many
|
||||
users are not fully aware of privacy issues that come as a “gift” when
|
||||
you use those services, without spending any kind of effort to **teach**
|
||||
the users. However, I do not want this post to become a flamewar, so I
|
||||
will not mention any software explicitly. I think it should be quite
|
||||
easy for the reader to find examples out there.
|
||||
|
||||
Perhaps this post does not have a conclusion. I myself have not made my
|
||||
mind completely about the subject, though I am obviously leaning towards
|
||||
what most people would call the “radical” solution. But it is definitely
|
||||
not an easy topic to discuss, or to argument about. Nonetheless, we are
|
||||
closing our eyes to it, and we should not do so. The future of Free
|
||||
Software depends also on what kinds of services we promote, and what
|
||||
kinds of services we actually warn the users against. This is my
|
||||
definition of **respect**, and this is why I think we should develop
|
||||
Free **and** Respectful Software.
|
0
content/posts/samba-ad-dc.md
Normal file
0
content/posts/samba-ad-dc.md
Normal file
40
content/posts/sem-duvida.md
Normal file
40
content/posts/sem-duvida.md
Normal file
|
@ -0,0 +1,40 @@
|
|||
---
|
||||
date: 2018-10-22T00:00:00-05:00
|
||||
title: "Sem Dúvida"
|
||||
tags: [pt_br, rant, politics, thoughts, philosophy, brasil]
|
||||
---
|
||||
|
||||
Com essa maré de notícias ruins que tá assolando o mundo, fica difícil
|
||||
saber o que dizer quando tento explicar, pra mim mesmo, o que anda
|
||||
acontecendo no Brasil. Não dá pra entender, não dá pra saber, mas
|
||||
mais do que isso: não dá pra acreditar.
|
||||
|
||||
Eu poderia falar sobre a burrice generalizada que está brotando nas
|
||||
pessoas, mas aí eu iria soar um pouco presunçoso, e isso não é uma
|
||||
coisa boa, né? Eu também poderia contar um pouco sobre essa raiva
|
||||
silenciosa que eu venho sentindo, essa vontade de que esse monte de
|
||||
idiotas se ferrem de "verde e amarelo", literalmente, e que sejam eles
|
||||
os perseguidos, e que sejam eles os que sofram na pele aquilo que
|
||||
desejam pros outros. Mas talvez meus ilustres leitores não entendam,
|
||||
e é possível que alguém diga, com razão, que eu não deveria pensar
|
||||
assim.
|
||||
|
||||
Por esses motivos, eu resolvi falar de outra coisa. Vou falar sobre a
|
||||
certeza. Nós vivemos num período que a certeza está à solta, e todos
|
||||
já têm as suas. A certeza é tipo o *tamagotchi* dos anos 90: se você
|
||||
não tem, você tá por fora! Ter certeza é ter estilo.
|
||||
|
||||
Às vezes eu me pego boquiaberto com o tanto de certeza que as pessoas
|
||||
possuem! Por exemplo, no caso da política brasileira, existem
|
||||
certezas que são quase dogmáticas. Ou você tem certeza que o Lula de
|
||||
fato é corrupto e roubou tudo aquilo que dizem, ou você tem certeza
|
||||
que o Lula não é corrupto e está sendo vítima de um golpe
|
||||
político-midiático-jurídico-judaico-papal. Não tem certeza sobre o
|
||||
assunto? Não sabe, ou não se sente seguro o suficiente pra opinar?
|
||||
Então vai pra masmorra, e receba pedradas dos dois lados!
|
||||
|
||||
Como é que faz pra viver nesse mundo? Como é que faz pra se ter tanta
|
||||
certeza sobre tantas coisas? Sinto que faltei a essa aula no colégio,
|
||||
enquanto todo mundo foi e se certificou de ter certeza.
|
||||
|
||||
É. Parece que, sem dúvida, eu acho que certamente não sei de nada.
|
222
content/posts/so-long-ambassadors.md
Normal file
222
content/posts/so-long-ambassadors.md
Normal file
|
@ -0,0 +1,222 @@
|
|||
---
|
||||
date: 2013-05-16T00:00:00-05:00
|
||||
title: "So long, Ambassadors..."
|
||||
tags: [fedora-planet, en_us, fedora]
|
||||
---
|
||||
|
||||
No, I am **not leaving the Fedora Project**, I am just leaving (or
|
||||
taking a break, depending on how you look) its
|
||||
[Ambassadors](https://fedoraproject.org/wiki/Ambassadors) program. I am
|
||||
still the co-maintainer of the [GDB](http://www.gnu.org/s/gdb) package,
|
||||
and will contribute to the development of the distribution since it is
|
||||
also my job. However, after a few months trying to become more involved
|
||||
with the Fedora community (specifically with the Brazilian/LATAM
|
||||
community), I became so disappointed that the only logical action for me
|
||||
now is to step back.
|
||||
|
||||
My brief history
|
||||
----------------
|
||||
|
||||
I joined the Ambassadors program on October, 2012. After having used the
|
||||
system heavily for almost 3 years, I decided that it was about time to
|
||||
pay something back to the community too. Since I live in Brazil, I
|
||||
joined the the brazilian team of Ambassadors (which meant that I was
|
||||
also part of the Latin America team). Thanks to my friend Leonardo Vaz
|
||||
(from Red Hat), I talked to Daniel Bruno who then became responsible for
|
||||
"mentoring" me.
|
||||
|
||||
The brazilian community was (and still is) very inactive (compared to
|
||||
others, and to itself a few years ago), but I was very excited and
|
||||
decided to try to revive it. And the first task that I assigned myself
|
||||
was to regain control of the [brazilian](http://www.projetofedora.org)
|
||||
and [LATAM](http://www.proyectofedora.org) domains.
|
||||
|
||||
The domains
|
||||
-----------
|
||||
|
||||
Alejandro Perez, a very nice guy from Panamá responsible for LATAM's
|
||||
money, asked me to talk to Rodrigo Padula, an inactive Fedora Ambassador
|
||||
from Brazil, about the domains. Padula was a very active member of the
|
||||
brazilian community since 2006 if I'm not mistaken, but due to reasons
|
||||
beyond my knowledge is inactive in the Fedora community for quite some
|
||||
time now (he's still very active in the Mozilla community, however). And
|
||||
he owns both domains.
|
||||
|
||||
Alejandro was worried because the LATAM domain had suffered some sort of
|
||||
outage during some days, which is obviously bad for the project. He was
|
||||
also concerned (and I totally agreed with him on this) because those
|
||||
domains shouldn't be owned by a person (rather, it should be registered
|
||||
on behalf of the Fedora Project or, ultimately, Red Hat), specially if
|
||||
this person is now inactive.
|
||||
|
||||
To make a long story short, I spent more than 1 month doing the
|
||||
indirection and talking to both guys about this issue. Padula initially
|
||||
said he could transfer the domains without problem, but then changed his
|
||||
mind and said he wouldn't do it. On the other side, Alejandro was
|
||||
getting upset because Padula did not want to make the transfer, and the
|
||||
LATAM community was pressuring him. In the end, I totally gave up, and
|
||||
the LATAM guys registered [yet another
|
||||
domain](http://fedora-latam.org/), but right now are still using the old
|
||||
domain. Yes, a mess.
|
||||
|
||||
Working with LATAM
|
||||
------------------
|
||||
|
||||
Anyway, after this episode, and after witnessing how active the LATAM
|
||||
community was in contrast with the brazilian community, I decided to
|
||||
work directly with them. I wanted to do something, and I was eager to
|
||||
start working as a real ambassador, spreading the word about Fedora
|
||||
everywhere. And my friends from Panamá, Argentina, México, Venezuela,
|
||||
etc., seemed the right people to work with.
|
||||
|
||||
So I started attending the weekly meetings on `#fedora-latam`, at
|
||||
Freenode, every Wednesday night. It is a well-organized meeting (run by
|
||||
Alejandro), whose main goal is to vote tickets from LATAM ambassadors
|
||||
(including brazilians). Tickets are basically requests made through a
|
||||
[Trac](http://en.wikipedia.org/wiki/Trac)
|
||||
[instance](https://fedorahosted.org/fedora-latam/), and are used to ask
|
||||
for swags, media, sponsorship for travels, etc. The Fedora Project has a
|
||||
budget, and the LATAM region gets a fraction of this budget for annual
|
||||
expenses, so our job as ambassadors was to vote those tickets and decide
|
||||
whether they deserve to be approved or not, according to [some rules
|
||||
inside the
|
||||
project](https://fedoraproject.org/wiki/Ambassadors/LATAM/Reimbursement).
|
||||
|
||||
Keep in mind: **we are dealing with money here**. It's not yours nor
|
||||
mine, but it's still money that should be used to promote a project that
|
||||
embraces open source initiatives (unfortunately, I cannot say Fedora is
|
||||
Free Software, but that is a topic for another post).
|
||||
|
||||
So, after some weeks working with the LATAM guys, I became the default
|
||||
owner of Trac tickets from brazilian ambassadors. And a few more weeks
|
||||
down the road Alejandro asked me to produce media (Fedora DVDs) and be
|
||||
resposible for distributing them in Brazil. I spent a lot of time
|
||||
ordering the medias (I had to travel to São Paulo in order to make sure
|
||||
everything was OK), and every time an ambassador requests Fedora DVDs I
|
||||
go through a [series of
|
||||
steps](https://fedoraproject.org/wiki/Pt_BR/Requisi%C3%A7%C3%A3o_M%C3%ADdia_2013_F18)
|
||||
(link in pt_br) to guarantee that she gets her media and I get my
|
||||
reimbursement.
|
||||
|
||||
I also like to give talks and presentations about the project, and so
|
||||
I've attended some events (or organized them) just to be able to do
|
||||
that. I have posted some reports about them in this blog, you can find
|
||||
them in the archives (if you can read in pt\_BR).
|
||||
|
||||
So, enough of self-promotion: why I am leaving the ambassador's program
|
||||
after all?
|
||||
|
||||
Disappointment
|
||||
--------------
|
||||
|
||||
A few things started to happen:
|
||||
|
||||
- During the weekly LATAM meetings, it bothered me to see that the
|
||||
tickets were being approved without any kind of serious discussion.
|
||||
Everyone (including myself!) was just giving "+1" to everything!
|
||||
- [FISL](http://fisl.org.br), the biggest open source (no, **it is not
|
||||
about Free Software**!!) event in LATAM, is going to happen on July.
|
||||
Suddenly, new brazilian ambassadors were popping out of nowhere, and
|
||||
inactive ambassadors were pretending to do something.
|
||||
- As a consequence, we received 9 sponsorship requests in our Trac.
|
||||
Some from active people, some not.
|
||||
|
||||
Something that I should have noticed before became crystal clear to me:
|
||||
some people are there just to take advantages for their own. They are
|
||||
not interested in the project, in the philosophy (yes, you can laugh at
|
||||
my face now...), in the promotion of the ideals, etc. They just want
|
||||
free lunch. And they get it...
|
||||
|
||||
During the last meeting I attended, two weeks ago, we were going to vote
|
||||
the FISL tickets. A few days before the meeting, I sent the following
|
||||
message to the LATAM Ambassadors list:
|
||||
|
||||
> Hi there,
|
||||
>
|
||||
> This message is just to let you know that we will be discussing
|
||||
> several FISL tickets in our next meeting, May 8th. You can take a look
|
||||
> at the meeting agenda by going to:
|
||||
>
|
||||
> <https://fedorahosted.org/fedora-latam/report/9>
|
||||
>
|
||||
> I would like to ask everyone to read the requests and make your
|
||||
> decision based on *merits*, please. In my opinion, only active
|
||||
> ambassadors should receive the honor of being sponsored by Fedora to
|
||||
> go to FISL14. Let's not spend money unnecessarily, so try to avoid the
|
||||
> "+1" wave when voting for the tickets.
|
||||
>
|
||||
> Thanks a lot,
|
||||
>
|
||||
> --Sergio.
|
||||
|
||||
As I said, some tickets were filed by inactive ambassadors, and I wanted
|
||||
us to at least discuss the matter with him/her, showing that we were not
|
||||
happy with his/her conduct. It is one thing when you have personal
|
||||
problems and have to step away from the project for a while; it is
|
||||
another different thing when you disappear without saying a word and
|
||||
then comes back to request sponsorship for travel.
|
||||
|
||||
We began the meeting by discussing tickets filed by active members, and
|
||||
approving them without thinking much about it. However, eventually we
|
||||
got to the problematic ones. There is this specific guy, whose name I
|
||||
will not mention here, who was very absent since I started in the
|
||||
project, and I felt the need to point that out. I told him I hadn't seen
|
||||
him in quite a while, and explained that there were many ambassadors
|
||||
doing things for Fedora. He's a long term contributor to the project, as
|
||||
he himself told me in a not-so-friendly tone during the meeting. But
|
||||
that was not the subject of the discussion, and while he kept saying how
|
||||
hard he worked for the project in the last 5 years, or how much he's
|
||||
done for this or that, I remained silent and began to think: *what the
|
||||
hell am I doing? Why am I wasting my time in a Wednesday night to
|
||||
convince a group that someone maybe doesn't deserve the credit he's
|
||||
asking for?* Well, the only reasonable answer was: *because I feel it is
|
||||
the right thing to do.* But nobody said a word during this discussion,
|
||||
and I started to feel something else. I felt that people were **not
|
||||
interested** in evaluating how much this guy (or anybody else, for that
|
||||
matter) really did for the project! And the feeling was corroborated
|
||||
when someone else said: "*Hey, let's just approve the ticket now, we can
|
||||
continue the discussion later*". ***WHAT????***. Let me see if I get it:
|
||||
we are here to discuss, reach a consensus, and vote. You want to
|
||||
approve, maybe discuss, fuck the consensus. Well...
|
||||
|
||||
I left before the end of the meeting, but I still managed to see this
|
||||
behaviour explained by some people: there was enough money to approve
|
||||
all tickets, so the meeting was just a formality needed to explain the
|
||||
expenses later. I was at least fully convinced that I did not belong
|
||||
there.
|
||||
|
||||
Not my place
|
||||
------------
|
||||
|
||||
If you are part of a team and you disagree with its members, I believe
|
||||
you have two choices most of the time: you can either (a) discuss with
|
||||
them, try to understand their reasons for being different, try to
|
||||
explain yours, see what you can do to overcome this, or (b) leave it.
|
||||
Sometimes I choose one, sometimes another. This is the time for (b). I
|
||||
don't want to spend more time and energy into something that doesn't
|
||||
work the way I think it should. I don't feel motivated to fight against
|
||||
the tide, because I am not so strong and the tide keeps getting bigger
|
||||
and bigger. And I also don't want to stop people from doing what they
|
||||
think is right, honestly. In the end of the day, I still want to believe
|
||||
that everyone has a conscience and knows what's correct...
|
||||
|
||||
But I am not going to cross my arms and sit. Some friends and I decided
|
||||
to create our own group, called [LibrePlanet São
|
||||
Paulo](http://libreplanet.org/wiki/LP-BR-SP) (link in pt_br), and focus
|
||||
on the real important thing: [Free
|
||||
Software](http://www.gnu.org/philosophy/free-sw.html). I really hope we
|
||||
can make a difference with our local community, and we have started with
|
||||
the right foot already: we organized the Document Freedom Day in our
|
||||
city this year!
|
||||
|
||||
As for Fedora, as I said, I still intend to continue contributing to it.
|
||||
I'm still subscribed to the fedora-devel mailing list, and I still
|
||||
follow the project's decisions, partly because it is part of my job,
|
||||
partly because I strongly believe you have to give back what you take
|
||||
for free -- as in freedom -- from the community. I also have some DVDs
|
||||
and I intend to distribute them. But my time as a Fedora Ambassador is
|
||||
coming to an end. It was a good experience, I met good people, had a
|
||||
great time doing talks and presentations, and most of all, did what I
|
||||
felt right at the right time.
|
||||
|
||||
So, as Douglas Adams said, "...thanks for all the fish!".
|
90
content/posts/the-gnu-radical.md
Normal file
90
content/posts/the-gnu-radical.md
Normal file
|
@ -0,0 +1,90 @@
|
|||
---
|
||||
date: 2015-01-05T00:00:00-05:00
|
||||
title: "The GNU Radical"
|
||||
tags: [en_us, free-software, philosophy, thoughts]
|
||||
---
|
||||
|
||||
A friend of mine, [Blaise](http://blaise.ca), once told me not to
|
||||
introduce myself as “... what you would call a radical...”. He had
|
||||
listened to me talking to a person who were questioning what a Free
|
||||
Software activist does. My friend's rationale, to which I totally agree,
|
||||
is that you must let the other person decide whether she thinks you are
|
||||
a “radical” or not. In other words, if you say you are a “radical” from
|
||||
the beginning, it will probably induce the other person to a
|
||||
pre-judgement about you, which is not good for you and for her.
|
||||
|
||||
As I said, I agree with him. But I am going through a lot of situations
|
||||
in my life that are constantly reminding me that, maybe, I am that
|
||||
“radical” after all. I do not know whether this is good or bad, and I
|
||||
can say I have been questioning myself for a while now. This post, by
|
||||
the way, is going to be a lot about self-questioning.
|
||||
|
||||
Maybe the problem is that I am expecting too much from those that have
|
||||
the same beliefs that I do. Or maybe the cause is that I do not know
|
||||
**what** to expect from them in certain situations, and I am
|
||||
disappointed when I see that they do not follow what I think is best
|
||||
sometimes. On the other hand, when I look myself in the mirror, I do not
|
||||
know whether I am totally following what I think is best; and if I am
|
||||
not, then how can I even consider telling others to do that? And even if
|
||||
I am following my own advices, how can I be sure that they are good
|
||||
enough for others?
|
||||
|
||||
One good example of this is my opinion about FSF's use of Twitter. The
|
||||
opinion is [public]({filename}/2013-10-16-fsf-twitter-coherence.md),
|
||||
and has been criticized by many people already, including Free
|
||||
Software supporters. Shortly after I wrote the post, I mentioned it to
|
||||
Richard Stallman, and he told me he was not going to read it because
|
||||
he considered it “too emotional”. I felt deeply sad because of his
|
||||
reaction, especially because it came from someone who often appeals to
|
||||
emotions in order to teach what he has to say. But I also started
|
||||
questioning myself about the topic.
|
||||
|
||||
Is it really bad to use Twitter? This is what I ask myself sometimes. I
|
||||
see so many people using it, including those who defend Free Software as
|
||||
I do (like Matt Lee), or those who stand against privacy abuses (like
|
||||
[Jacob Appelbaum](https://en.wikipedia.org/wiki/Jacob_Appelbaum)), or
|
||||
who are worried about social causes, or... Yeah, you got the point. I
|
||||
refuse to believe that they did not think about Twitter's issues, or
|
||||
about how they would be endorsing its use by using it themselves. Yet,
|
||||
they are there, and a lot of people is following their posts and
|
||||
discussing their opinions and ideas for a better world. As much as I try
|
||||
to understand their motivation for using Twitter (or even Facebook), I
|
||||
cannot convince myself that what they are doing is good for their goals.
|
||||
Am I being too narrow minded? Am I missing something?
|
||||
|
||||
Another example are my thoughts about Free Software programs that
|
||||
support (and sometimes even **promote**) unethical services. They (the
|
||||
thoughts)
|
||||
[are also public]({filename}/2014-10-15-respectful-software.md). And
|
||||
it seems that this opinion, which is about something I called
|
||||
“Respectful Software”, is too strong (or “radical”?) for the majority
|
||||
of the developers, even considering Free Software developers. I saw
|
||||
very good arguments on why Free Software *should* support unethical
|
||||
services, and it is hard to disagree with them. I guess the best of
|
||||
those arguments is that when you support unethical services like
|
||||
Facebook, you are offering a Free Software option for those who want
|
||||
or need to use the service. In other words, you are helping them to
|
||||
slowly get rid of the digital handcuffs.
|
||||
|
||||
It seems like all those arguments (about Twitter, about implementing
|
||||
support for proprietary systems on Free Software, and others) are
|
||||
ultimately about **reaching users** that would otherwise remain ignorant
|
||||
of the Free Software philosophy. And how can someone have
|
||||
counter-arguments for this? It is impossible to argue that we do not
|
||||
need to take the Free Software message to everybody, because when
|
||||
someone does not use Free Software, she is doing harm to her community
|
||||
(thus, we **want** more people using Free Software, of course). When the
|
||||
Free Software Foundation makes use of Twitter to bring more people to
|
||||
the movement, and when I see that despite talking to people all around
|
||||
me I can hardly convince them to try GNU/Linux, who am I to criticize
|
||||
the FSF?
|
||||
|
||||
So, I have been thinking to myself whether it is time to change. What I
|
||||
am realizing more and more is that my fight for coherence perhaps is
|
||||
flawed. We are incoherent by nature. And the truth is that, no matter
|
||||
what we do, people change according to their own time, their own will,
|
||||
and their own beliefs (or to the lack of them). I remembered something
|
||||
that I once heard: changing is not binary, changing is a process. So,
|
||||
after all, maybe it is time to stop being a “GNU radical” (in the sense
|
||||
that I am radical even for the GNU project), and become a new type of
|
||||
activist.
|
123
content/posts/toronto-bsp-2019-report.md
Normal file
123
content/posts/toronto-bsp-2019-report.md
Normal file
|
@ -0,0 +1,123 @@
|
|||
---
|
||||
date: 2019-04-30T00:00:00-05:00
|
||||
title: "Debian Bug Squashing Party, Toronto version"
|
||||
tags: [en_us, debian, free-software]
|
||||
---
|
||||
|
||||
Heya!
|
||||
|
||||
This past Saturday, April 27th,
|
||||
2019,
|
||||
[Samuel Vale](https://svale.eng.br/), [Alex Volkov](https://flamy.ca/)
|
||||
and I organized
|
||||
the
|
||||
[Toronto Bug Squashing Party](https://wiki.debian.org/BSP/2019/04/ca/Toronto) here
|
||||
in the city. I was very happy with the outcome, especially the fact
|
||||
that we had more than 10 people attending, including a bunch of folks
|
||||
that came from Montréal!
|
||||
|
||||
The start
|
||||
---------
|
||||
|
||||
It was a cold day in Toronto, and we met at the Mozilla Toronto office
|
||||
at 9 in the morning. Right there at the door I
|
||||
met [anarcat](https://anarc.at), who had just arrived from Montréal.
|
||||
Together with Alex, we waited for [Will](https://twitter.com/hawkinsw)
|
||||
to arrive and open the door for us. Then, some more folks started
|
||||
showing up, and we waited until 10:30h to start the first presentation
|
||||
of the day.
|
||||
|
||||
Packaging 101
|
||||
-------------
|
||||
|
||||
Anarcat kindly gave us his famous
|
||||
"[Packaging 101](https://anarc.at/software/debian-development/)"
|
||||
presentation, in which he explains the basics of Debian packaging.
|
||||
Here's a picture of the presentation:
|
||||
|
||||
![anarcat presenting Packaging 101, side]({static}/images/toronto-bsp-2019-04-27-1.jpg)
|
||||
|
||||
And another one:
|
||||
|
||||
![anarcat presenting Packaging 101, front]({static}/images/toronto-bsp-2019-04-27-2.jpg)
|
||||
|
||||
The presentation was great, and Alex recorded it! You can watch
|
||||
it [here](https://www.youtube.com/watch?v=O83rIRRJysA) (sorry, youtube
|
||||
link...).
|
||||
|
||||
During the day, we've also taught a few tricks about
|
||||
the [BTS](https://bugs.debian.org), in order to help people file bugs,
|
||||
add/remove tags, comment on bugs, etc.
|
||||
|
||||
Then, we moved on to the actual hacking.
|
||||
|
||||
Bug fixing
|
||||
----------
|
||||
|
||||
This part took most of the day, as was expected. We started by
|
||||
looking at the RC bugs currently filed against Buster, and deciding
|
||||
which ones would be interesting for us. I won't go into details here,
|
||||
but I think we made great progress, considering this was the first BSP
|
||||
for many of us there (myself included).
|
||||
|
||||
You
|
||||
can
|
||||
[look at the bugs we worked on](https://udd.debian.org/cgi-bin/bts-usertags.cgi?user=debian-release%40lists.debian.org&tag=bsp-2019-04-ca-toronto),
|
||||
and you will see that we have actually fixed 6 of them! I even fixed
|
||||
a JavaScript bug, which is something totally out of my area of
|
||||
expertise ;-).
|
||||
|
||||
I also noticed something interesting. The way we look at bugs can
|
||||
vary wildly between one DD and another. I mean, this is something I
|
||||
always knew, especially when I was more involved with the
|
||||
debian-mentors effort, but it's really amazing to feel this in person.
|
||||
I tend to be more picky when it comes to defining what to do when I
|
||||
start to work on a bug; I try really hard to reproduce it (and spend a
|
||||
lot of time doing so), and will really dive deep into the code trying
|
||||
to understand why some test is failing. Other developer may be less
|
||||
"pedantic", and choose to (e.g.) disable certain test that is failing.
|
||||
In the end, I think everything is a balance and I tried to learn from
|
||||
this experience.
|
||||
|
||||
Anyway, given that we looked at 12 bugs and solved 6, I think we did
|
||||
great! And this also helped me to get my head "back in the Debian
|
||||
game"; I was too involved with GDB these past months (there's a post
|
||||
about one of the things I did which is coming soon, stay tunned).
|
||||
|
||||
Look at us hacking:
|
||||
|
||||
![Everybody hacking]({static}/images/toronto-bsp-2019-04-27-3.jpg)
|
||||
|
||||
Wrap up
|
||||
-------
|
||||
|
||||
At 19h (or 7p.m.), we had to wrap up and prepare to go. Because we
|
||||
had a sizeable number of Brazilians in the group (5!), the logical
|
||||
thing to do was to go to a pub and resume the conversation there :-).
|
||||
If I say it was one of the *first* times I went to a pub to drink with
|
||||
newly made friends in Toronto, you probably wouldn't believe, so I
|
||||
won't say anything...
|
||||
|
||||
I know one thing for sure: we want to make this again, and soon! In
|
||||
fact, my idea is to do another one after Buster is released (and after
|
||||
the summer is gone, of course), so maybe October. We'll see.
|
||||
|
||||
Acknowledgements
|
||||
----------------
|
||||
|
||||
I would like to
|
||||
thank
|
||||
[Mozilla Toronto](https://www.mozilla.org/en-US/contact/spaces/toronto/) for
|
||||
hosting us; it was awesome to finally visit their office and enjoy
|
||||
their hospitality, personified
|
||||
by [Will Hawkins](https://twitter.com/hawkinsw). It is impossible not
|
||||
to thank [anarcat](https://anarc.at/), who came all the way from
|
||||
Montréal to give us his Debian Packaging 101 talk. Speaking of the
|
||||
French-Canadian (and Brazilian), it was super awesome
|
||||
meeting [Tiago Vaz](https://wiki.debian.org/Tiago%20Bortoletto%20Vaz)
|
||||
and [Tássia Camões](https://www.ime.usp.br/~tassia/index.html), and it
|
||||
was great seeing [Valessio Brito](http://valessiobrito.com.br/) again.
|
||||
|
||||
Let me also thank the "locals" who attended the party; it was great
|
||||
seeing everybody there! Hope I can see everybody again when we make
|
||||
the second edition of our BSP :-).
|
0
content/posts/where-are-we-going.md
Normal file
0
content/posts/where-are-we-going.md
Normal file
115
content/posts/zeladores-da-coerencia.md
Normal file
115
content/posts/zeladores-da-coerencia.md
Normal file
|
@ -0,0 +1,115 @@
|
|||
---
|
||||
date: 2014-05-20T00:00:00-05:00
|
||||
title: "Zeladores da Coerência"
|
||||
tags: [pt_br, rant, thoughts, free-software, open-source, philosophy]
|
||||
---
|
||||
|
||||
Sei que ainda estou devendo um post sobre minha participação no [FISL
|
||||
15](http://fisl.org.br), mas o tempo anda meio curto pra falar tudo o
|
||||
que eu quero. Tenho decidido falar de maneira mais “picada”, até pra não
|
||||
fazer o texto ficar muito chato. E esse post aqui é sobre um
|
||||
comportamento que vejo há algum tempo, mas que foi exacerbado por conta
|
||||
do debate sobre a suposta morte do movimento Software Livre no Brasil.
|
||||
|
||||
Antes de mais nada, se quiser assistir ao debate, o link direto está
|
||||
[aqui](http://hemingway.softwarelivre.org/fisl15/high/41a/sala41a-high-201405081002.ogv).
|
||||
Também sugiro uma visita à página wiki do grupo LibrePlanet São Paulo,
|
||||
na qual você pode encontrar algumas sugestões de outras palestras
|
||||
interessantes que rolaram no evento. Você pode acessá-la [nesse
|
||||
link](http://wiki.libreplanetbr.org/Palestras_FISL_15_-_2014/).
|
||||
|
||||
Mas voltando ao assunto. Meu objetivo no post não é discutir o debate em
|
||||
si; pretendo fazer isso em um post futuro. O ponto que quero discutir é
|
||||
o comportamento do que chamo de “**zeladores da coerência**”. São
|
||||
pessoas que existem em qualquer movimento social/político/filosófico, e
|
||||
não poderia deixar de existir no Software Livre. Mas curiosamente, vejo
|
||||
mais contundência naquelas pessoas que **não** defendem o Software
|
||||
Livre, do que naquelas que o fazem. Explico-me.
|
||||
|
||||
O [Anahuac](http://anahuac.eu) fez alguns posts recentemente atacando a
|
||||
falta de distinção entre os movimentos Open Source e Software Livre,
|
||||
especificamente por parte daqueles que fazem parte do primeiro mas se
|
||||
dizem defensores do segundo. Posso classificar, nesse meu post, o
|
||||
Anahuac como sendo um zelador da coerência, apesar de ele mesmo admitir
|
||||
algumas incoerências no seu comportamento, como o uso do Twitter. E,
|
||||
apesar de nem sempre concordar com o tom que ele usa em seus textos,
|
||||
muitas vezes combativos e até perigosamente ácidos, concordo com a
|
||||
maioria dos pontos que ele levanta nos dois artigos que mencionei. Se
|
||||
quiser lê-los, o primeiro é [esse aqui](http://www.anahuac.eu/?p=371), e
|
||||
o segundo [tá nesse link](http://www.anahuac.eu/?p=375). Há bastante
|
||||
tempo, publiquei minhas opiniões (em inglês) sobre esse mesmo assunto,
|
||||
[nesse post aqui]({filename}/2012-12-17-misunderstanding-free-software.md).
|
||||
|
||||
Pois bem, como o Anahuac não tem problema em levar pedradas, ele postou
|
||||
ambos os textos no site BR-[GNU/]Linux, notadamente um reduto Open
|
||||
Source brasileiro. Parei de ler o site há bastante tempo, por conta de
|
||||
diferenças de opinião com o conteúdo publicado, e principalmente por
|
||||
notar sempre um tom irônico e parcial travestido de uma suposta “isenção
|
||||
aos fatos” nos comentários que o autor do site faz sobre as notícias. No
|
||||
entanto, o próprio Anahuac fez questão de trazer à minha atenção a
|
||||
repercussão que os textos estavam tendo, e pediu-me pra ler os
|
||||
comentários do post no BR-[GNU/]Linux. Vale mencionar que o site
|
||||
utilizar o [Disqus](https://en.wikipedia.org/wiki/Disqus) para oferecer
|
||||
um sistema de comentários, um serviço que não respeita a privacidade dos
|
||||
seus usuários e realiza tracking das atividades dos mesmos. Como não
|
||||
possuo uma conta lá, e utilizo alguns plug-ins para não executar código
|
||||
Javascript não-autorizado no meu navegador, acabei tendo um pouco de
|
||||
trabalho pra conseguir ler os comentários de forma mais ou menos
|
||||
anônima. Mas no fim, consegui. E o que vi, apesar de ser “mais do
|
||||
mesmo”, me deixou bem pensativo.
|
||||
|
||||
Não esperava uma reação diferente de parte da comunidade. Como disse, os
|
||||
textos do Anahuac são feitos pra “tocar na ferida” de uma forma às vezes
|
||||
brusca, e que desagrada muita gente. Vários comentários eram [ad
|
||||
hominem](https://en.wikipedia.org/wiki/Ad_hominem), e nem merecem
|
||||
menção. Mas o que me chamou a atenção foi a quantidade de pessoas
|
||||
apontando incoerências (supostas ou verídicas) que o Anahuac comete, e
|
||||
retirando dele o direito de apontar qualquer tipo de incoerência na
|
||||
própria comunidade da qual faz parte. E aí fico pensando, será que nós
|
||||
mesmos, ativistas do Software Livre, não estamos colhendo o que
|
||||
plantamos?
|
||||
|
||||
Não consigo deixar de falar da minha experiência. Sempre tentei basear
|
||||
meus atos e opiniões em cima da minha própria coerência. Sei que é
|
||||
difícil, e, apesar de muitas vezes (pré)julgar alguém por uma
|
||||
incoerência cometida, tento sempre lembrar que eu mesmo já usei Gmail e
|
||||
Twitter para criticar o Software Livre. Obviamente que, na época, eu não
|
||||
tinha tanto conhecimento a respeito dos perigos de se usar essas
|
||||
ferramentas, mas mesmo assim nada impedia (como, de fato, não impediu!)
|
||||
que alguém chegasse e me acusasse de incoerência. Já, inclusive,
|
||||
condenei o uso do Facebook para divulgar um ex-grupo de Software Livre
|
||||
do qual fazia parte, e recebi como resposta um “conselho” (não muito
|
||||
educado) dizendo que, se eu quisesse usar apenas Software Livre, deveria
|
||||
parar de usar computador, já que independente da máquina eu ia ter que
|
||||
usar algo proprietário. Isso foi proferido por um dos fundadores do tal
|
||||
grupo, um rapaz muito famoso pela falta de educação, mas que, há
|
||||
bastante tempo atrás, acreditava nos mesmos ideais que eu.
|
||||
|
||||
É muito difícil rebater um argumento desse tipo. Aliás, é muito difícil
|
||||
rebater um dedo apontado na sua cara mostrando alguma incoerência que
|
||||
você comete, e que está lá como uma resposta a uma acusação sua de uma
|
||||
outra incoerência. Algumas pessoas tendem a se defender justificando
|
||||
seus erros através dos erros dos outros, e quando elas podem usar o
|
||||
próprio “acusador” como um exemplo, melhor ainda (pra elas)! É isso que
|
||||
está havendo, e é essa maré desses zeladores da coerência alheia que me
|
||||
preocupa um pouco. Afinal, **sempre** vai ser possível encontrar
|
||||
incoerências em qualquer pessoa.
|
||||
|
||||
Não sei direito onde quero chegar com esse texto, mas acho que uma coisa
|
||||
está ficando um pouco clara na minha cabeça, ou pelo menos eu estou
|
||||
começando a ver um lado diferente da história toda. Apontar
|
||||
incoerências, por mais evidentes que elas estejam aos nossos olhos, pode
|
||||
não ser a melhor forma de conseguirmos explicar nossos ideais. Pode
|
||||
parecer óbvio (e talvez seja), mas ninguém gosta de ser colocado contra
|
||||
a parede, e pouquíssimas pessoas têm a coragem necessária pra assumir
|
||||
publicamente um erro. Talvez o caminho para a cabeça e o coração das
|
||||
pessoas seja outro. Durante o debate no FISL, o
|
||||
[Fred](http://teia.bio.br/blog/) falou algo que tem estado na minha
|
||||
mente com cada vez mais frequência. Pode parecer piegas, mas nós
|
||||
precisamos de mais amor ao próximo, até para podermos entender que nós,
|
||||
também, já estivemos do lado de lá. O Software Livre, como movimento
|
||||
social, político e filosófico que é, vai florescer cada vez mais quando
|
||||
cada ativista olhar pra si mesmo e reconhecer, mesmo que com
|
||||
dificuldade, aquele a quem espera passar um pouco do seu ideal.
|
||||
|
||||
É difícil, mas é necessário.
|
37
layouts/index.atom.xml
Normal file
37
layouts/index.atom.xml
Normal file
|
@ -0,0 +1,37 @@
|
|||
{{- $pctx := . -}}
|
||||
{{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}}
|
||||
{{- $pages := slice -}}
|
||||
{{- if or $.IsHome $.IsSection -}}
|
||||
{{- $pages = $pctx.RegularPages -}}
|
||||
{{- else -}}
|
||||
{{- $pages = $pctx.Pages -}}
|
||||
{{- end -}}
|
||||
{{- $limit := .Site.Config.Services.RSS.Limit -}}
|
||||
{{- if ge $limit 1 -}}
|
||||
{{- $pages = $pages | first $limit -}}
|
||||
{{- end -}}
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
|
||||
<link href="{{ .Permalink }}index.xml" rel="self"/>
|
||||
<link href="{{ .Permalink }}"/>{{ if not .Date.IsZero }}
|
||||
<updated>{{ .Date.Format "2006-01-02T15:04:05-07:00" | safeHTML }}</updated>{{ end }}
|
||||
<id>{{ .Permalink }}</id>{{ with .Site.Author.name }}
|
||||
<author>
|
||||
<name>{{.}}</name>{{ with $.Site.Author.email }}
|
||||
<email>{{.}}</email>{{end}}
|
||||
</author>{{end}}
|
||||
<generator>Hugo -- gohugo.io</generator>{{ range $pages }}
|
||||
<entry>
|
||||
{{ `<title type="html"><![CDATA[` | safeHTML }}{{ .Title }}]]></title>
|
||||
<link href="{{ .Permalink }}"/>
|
||||
<id>{{ .Permalink }}</id>{{ with $.Site.Author.name }}
|
||||
<author>
|
||||
<name>{{.}}</name>
|
||||
</author>{{end}}
|
||||
<published>{{ .Date.Format "2006-01-02T15:04:05-07:00" | safeHTML }}</published>
|
||||
<updated>{{ .Lastmod.Format "2006-01-02T15:04:05-07:00" | safeHTML }}</updated>
|
||||
{{ if .Content }}
|
||||
{{ `<content type="html"><![CDATA[` | safeHTML }}{{ .Content }}]]></content>
|
||||
{{ end }}
|
||||
</entry>{{ end }}
|
||||
</feed>
|
18
layouts/taxonomy/terms.html.html
Normal file
18
layouts/taxonomy/terms.html.html
Normal file
|
@ -0,0 +1,18 @@
|
|||
{{ define "main" }}
|
||||
<main class="main">
|
||||
{{ partial "breadcrumb.html" . }}
|
||||
{{- if or .Title .Content }}
|
||||
<div class="page block">
|
||||
{{ with .Title }}<h1 class="page__title">{{ . }}</h1>{{ end }}
|
||||
{{ with .Content }}<div class="page__content{{ if not $.Title }} page__content--notitle{{ end }}">{{ . }}</div>{{ end }}
|
||||
</div>
|
||||
{{- end }}
|
||||
<div class="page block">
|
||||
{{ range .Pages }}
|
||||
<li class="breadcrumb">
|
||||
<a href="{{ .Permalink }}">{{ .Name }}</a> <small>(<a href="{{ .Permalink }}atom.xml">ATOM</a>, <a href="{{ .Permalink }}rss.xml">RSS</a>)</small>
|
||||
</li>
|
||||
{{ end }}
|
||||
</div>
|
||||
</main>
|
||||
{{ end }}
|
1
layouts/term/term.atom.xml
Symbolic link
1
layouts/term/term.atom.xml
Symbolic link
|
@ -0,0 +1 @@
|
|||
../index.atom.xml
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
|||
{"Target":"css/styles.abbd6311bb4b6ca58f8e7398140529245ae0f6428b759fcd830742eee2619eabb900ba9914a9affb82aa9a16a9b9ea727bb315315a976a0db0e7513a5f12c504.css","MediaType":"text/css","Data":{"Integrity":"sha512-q71jEbtLbKWPjnOYFAUpJFrg9kKLdZ/NgwdC7uJhnqu5ALqZFKmv+4Kqmhapuepye7MVMVqXag2w51E6XxLFBA=="}}
|
3
static/css/custom.css
Normal file
3
static/css/custom.css
Normal file
|
@ -0,0 +1,3 @@
|
|||
body {
|
||||
font-family: JetBrains Mono;
|
||||
};
|
BIN
static/images/sergio-fad-2013.jpg
Normal file
BIN
static/images/sergio-fad-2013.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 101 KiB |
BIN
static/images/toronto-bsp-2019-04-27-1.jpg
Normal file
BIN
static/images/toronto-bsp-2019-04-27-1.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 205 KiB |
BIN
static/images/toronto-bsp-2019-04-27-2.jpg
Normal file
BIN
static/images/toronto-bsp-2019-04-27-2.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 194 KiB |
BIN
static/images/toronto-bsp-2019-04-27-3.jpg
Normal file
BIN
static/images/toronto-bsp-2019-04-27-3.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 215 KiB |
BIN
static/jetbrains-mono/jetbrains-mono-bold-italic-latin-ext.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-bold-italic-latin-ext.woff2
Normal file
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-bold-italic-latin.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-bold-italic-latin.woff2
Normal file
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-bold-latin-ext.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-bold-latin-ext.woff2
Normal file
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-bold-latin.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-bold-latin.woff2
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-extra-bold-latin-ext.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-extra-bold-latin-ext.woff2
Normal file
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-extra-bold-latin.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-extra-bold-latin.woff2
Normal file
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-italic-latin-ext.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-italic-latin-ext.woff2
Normal file
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-italic-latin.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-italic-latin.woff2
Normal file
Binary file not shown.
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-light-italic-latin.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-light-italic-latin.woff2
Normal file
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-light-latin-ext.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-light-latin-ext.woff2
Normal file
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-light-latin.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-light-latin.woff2
Normal file
Binary file not shown.
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-medium-italic-latin.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-medium-italic-latin.woff2
Normal file
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-medium-latin-ext.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-medium-latin-ext.woff2
Normal file
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-medium-latin.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-medium-latin.woff2
Normal file
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-regular-latin-ext.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-regular-latin-ext.woff2
Normal file
Binary file not shown.
BIN
static/jetbrains-mono/jetbrains-mono-regular-latin.woff2
Normal file
BIN
static/jetbrains-mono/jetbrains-mono-regular-latin.woff2
Normal file
Binary file not shown.
161
static/jetbrains-mono/jetbrains-mono.css
Normal file
161
static/jetbrains-mono/jetbrains-mono.css
Normal file
|
@ -0,0 +1,161 @@
|
|||
/* jetbrains-mono-regular-latin */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local("JetBrains Mono Regular"), local("JetBrainsMono-Regular"), url(jetbrains-mono-regular-latin.woff2) format("woff2");
|
||||
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+2215;
|
||||
}
|
||||
/* jetbrains-mono-regular-latin-ext */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local("JetBrains Mono Regular"), local("JetBrainsMono-Regular"), url(jetbrains-mono-regular-latin-ext.woff2) format("woff2");
|
||||
unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+20A0-20CF,U+2C60-2C7F,U+A720-A7FF;
|
||||
}
|
||||
/* jetbrains-mono-medium-italic-latin */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: italic;
|
||||
font-weight: 500;
|
||||
src: local("JetBrains Mono Medium Italic"), local("JetBrainsMono-MediumItalic"), url(jetbrains-mono-medium-italic-latin.woff2) format("woff2");
|
||||
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+2215;
|
||||
}
|
||||
/* jetbrains-mono-medium-italic-latin-ext */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: italic;
|
||||
font-weight: 500;
|
||||
src: local("JetBrains Mono Medium Italic"), local("JetBrainsMono-MediumItalic"), url(jetbrains-mono-medium-italic-latin-ext.woff2) format("woff2");
|
||||
unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+20A0-20CF,U+2C60-2C7F,U+A720-A7FF;
|
||||
}
|
||||
/* jetbrains-mono-medium-latin */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: local("JetBrains Mono Medium"), local("JetBrainsMono-Medium"), url(jetbrains-mono-medium-latin.woff2) format("woff2");
|
||||
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+2215;
|
||||
}
|
||||
/* jetbrains-mono-medium-latin-ext */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: local("JetBrains Mono Medium"), local("JetBrainsMono-Medium"), url(jetbrains-mono-medium-latin-ext.woff2) format("woff2");
|
||||
unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+20A0-20CF,U+2C60-2C7F,U+A720-A7FF;
|
||||
}
|
||||
/* jetbrains-mono-light-italic-latin */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
src: local("JetBrains Mono Light Italic"), local("JetBrainsMono-LightItalic"), url(jetbrains-mono-light-italic-latin.woff2) format("woff2");
|
||||
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+2215;
|
||||
}
|
||||
/* jetbrains-mono-light-italic-latin-ext */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
src: local("JetBrains Mono Light Italic"), local("JetBrainsMono-LightItalic"), url(jetbrains-mono-light-italic-latin-ext.woff2) format("woff2");
|
||||
unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+20A0-20CF,U+2C60-2C7F,U+A720-A7FF;
|
||||
}
|
||||
/* jetbrains-mono-light-latin */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local("JetBrains Mono Light"), local("JetBrainsMono-Light"), url(jetbrains-mono-light-latin.woff2) format("woff2");
|
||||
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+2215;
|
||||
}
|
||||
/* jetbrains-mono-light-latin-ext */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local("JetBrains Mono Light"), local("JetBrainsMono-Light"), url(jetbrains-mono-light-latin-ext.woff2) format("woff2");
|
||||
unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+20A0-20CF,U+2C60-2C7F,U+A720-A7FF;
|
||||
}
|
||||
/* jetbrains-mono-italic-latin */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local("JetBrains Mono Italic"), local("JetBrainsMono-Italic"), url(jetbrains-mono-italic-latin.woff2) format("woff2");
|
||||
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+2215;
|
||||
}
|
||||
/* jetbrains-mono-italic-latin-ext */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local("JetBrains Mono Italic"), local("JetBrainsMono-Italic"), url(jetbrains-mono-italic-latin-ext.woff2) format("woff2");
|
||||
unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+20A0-20CF,U+2C60-2C7F,U+A720-A7FF;
|
||||
}
|
||||
/* jetbrains-mono-extra-bold-italic-latin */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
src: local("JetBrains Mono Extra Bold Italic"), local("JetBrainsMono-ExtraBoldItalic"), url(jetbrains-mono-extra-bold-italic-latin.woff2) format("woff2");
|
||||
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+2215;
|
||||
}
|
||||
/* jetbrains-mono-extra-bold-italic-latin-ext */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
src: local("JetBrains Mono Extra Bold Italic"), local("JetBrainsMono-ExtraBoldItalic"), url(jetbrains-mono-extra-bold-italic-latin-ext.woff2) format("woff2");
|
||||
unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+20A0-20CF,U+2C60-2C7F,U+A720-A7FF;
|
||||
}
|
||||
/* jetbrains-mono-extra-bold-latin */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local("JetBrains Mono Extra Bold"), local("JetBrainsMono-ExtraBold"), url(jetbrains-mono-extra-bold-latin.woff2) format("woff2");
|
||||
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+2215;
|
||||
}
|
||||
/* jetbrains-mono-extra-bold-latin-ext */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local("JetBrains Mono Extra Bold"), local("JetBrainsMono-ExtraBold"), url(jetbrains-mono-extra-bold-latin-ext.woff2) format("woff2");
|
||||
unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+20A0-20CF,U+2C60-2C7F,U+A720-A7FF;
|
||||
}
|
||||
/* jetbrains-mono-bold-italic-latin */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
src: local("JetBrains Mono Bold Italic"), local("JetBrainsMono-BoldItalic"), url(jetbrains-mono-bold-italic-latin.woff2) format("woff2");
|
||||
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+2215;
|
||||
}
|
||||
/* jetbrains-mono-bold-italic-latin-ext */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
src: local("JetBrains Mono Bold Italic"), local("JetBrainsMono-BoldItalic"), url(jetbrains-mono-bold-italic-latin-ext.woff2) format("woff2");
|
||||
unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+20A0-20CF,U+2C60-2C7F,U+A720-A7FF;
|
||||
}
|
||||
/* jetbrains-mono-bold-latin */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local("JetBrains Mono Bold"), local("JetBrainsMono-Bold"), url(jetbrains-mono-bold-latin.woff2) format("woff2");
|
||||
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+2215;
|
||||
}
|
||||
/* jetbrains-mono-bold-latin-ext */
|
||||
@font-face {
|
||||
font-family: JetBrains Mono;
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local("JetBrains Mono Bold"), local("JetBrainsMono-Bold"), url(jetbrains-mono-bold-latin-ext.woff2) format("woff2");
|
||||
unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+20A0-20CF,U+2C60-2C7F,U+A720-A7FF;
|
||||
}
|
||||
|
1
themes/binario
Submodule
1
themes/binario
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 621ca48e95af016654ce9d4daac3735c386c01e6
|
1
themes/holy
Submodule
1
themes/holy
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 6c3be2194534e32ff4d1b3729b9411e169b81b9d
|
1
themes/hugo-ficurinia
Submodule
1
themes/hugo-ficurinia
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 72da9f00c79f582abac85b07825cea22e2fa94df
|
Loading…
Reference in a new issue