Initial commit
This commit is contained in:
commit
3a105bd8fa
|
@ -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
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
---
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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.
|
|
@ -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.
|
|
@ -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,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.
|
|
@ -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,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.
|
|
@ -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!
|
|
@ -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.
|
|
@ -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!
|
|
@ -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!
|
|
@ -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 :-).
|
|
@ -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.
|
|
@ -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!
|
|
@ -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.
|
|
@ -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.
|
|
@ -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!
|
|
@ -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.
|
|
@ -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!
|
|
@ -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!
|
|
@ -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.
|
|
@ -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!
|
|
@ -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!
|
|
@ -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!
|
|
@ -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
|
||||
:-).
|
|
@ -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!
|
|
@ -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!
|
|
@ -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!
|
|
@ -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).
|
|
@ -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).
|
|
@ -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!
|
|
@ -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.
|
|
@ -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
|
||||
}
|
||||
```
|
|
@ -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!
|
|
@ -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...
|
|
@ -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/).
|
|
@ -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!
|
|
@ -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!
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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!
|
|
@ -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!
|
|
@ -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!
|
|
@ -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,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.
|
|
@ -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!".
|
|
@ -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.
|
|
@ -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,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.
|
|
@ -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>
|
|
@ -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 }}
|
|
@ -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=="}}
|
|
@ -0,0 +1,3 @@
|
|||
body {
|
||||
font-family: JetBrains Mono;
|
||||
};
|
Binary file not shown.
After Width: | Height: | Size: 101 KiB |
Binary file not shown.
After Width: | Height: | Size: 205 KiB |
Binary file not shown.
After Width: | Height: | Size: 194 KiB |
Binary file not shown.
After Width: | Height: | Size: 215 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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;
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 621ca48e95af016654ce9d4daac3735c386c01e6
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 6c3be2194534e32ff4d1b3729b9411e169b81b9d
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 72da9f00c79f582abac85b07825cea22e2fa94df
|
Loading…
Reference in New Issue