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