commit 3a105bd8fa0a1a48875b5a5eda294c75836c8f6a Author: Sergio Durigan Junior Date: Mon Apr 17 11:54:12 2023 -0400 Initial commit diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..ec0ae5e --- /dev/null +++ b/.gitmodules @@ -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 diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..00e77bd --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..50eaed3 --- /dev/null +++ b/config.toml @@ -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 diff --git a/content-org/all-posts.org b/content-org/all-posts.org new file mode 100644 index 0000000..0faaf1f --- /dev/null +++ b/content-org/all-posts.org @@ -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 diff --git a/content/posts/a-droga-do-credito.md b/content/posts/a-droga-do-credito.md new file mode 100644 index 0000000..8afa97b --- /dev/null +++ b/content/posts/a-droga-do-credito.md @@ -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. diff --git a/content/posts/a-era-da-mediocridade.md b/content/posts/a-era-da-mediocridade.md new file mode 100644 index 0000000..cd3c6a6 --- /dev/null +++ b/content/posts/a-era-da-mediocridade.md @@ -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. diff --git a/content/posts/a-falta-de-uns-quaresmas.md b/content/posts/a-falta-de-uns-quaresmas.md new file mode 100644 index 0000000..e306be2 --- /dev/null +++ b/content/posts/a-falta-de-uns-quaresmas.md @@ -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. diff --git a/content/posts/alienista.md b/content/posts/alienista.md new file mode 100644 index 0000000..e69de29 diff --git a/content/posts/apresentacao-fedora-unesp-rio-claro.md b/content/posts/apresentacao-fedora-unesp-rio-claro.md new file mode 100644 index 0000000..74a55ba --- /dev/null +++ b/content/posts/apresentacao-fedora-unesp-rio-claro.md @@ -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 +. + +Espero que ambas as palestras sejam bem recebidas pelo público! Volto +depois pra contar como foi :-). + +Abraços. diff --git a/content/posts/aqueles-que-se-foram.md b/content/posts/aqueles-que-se-foram.md new file mode 100644 index 0000000..f130dc1 --- /dev/null +++ b/content/posts/aqueles-que-se-foram.md @@ -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. diff --git a/content/posts/bothered.md b/content/posts/bothered.md new file mode 100644 index 0000000..e69de29 diff --git a/content/posts/brasil-em-conserva.md b/content/posts/brasil-em-conserva.md new file mode 100644 index 0000000..0f8fb53 --- /dev/null +++ b/content/posts/brasil-em-conserva.md @@ -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. diff --git a/content/posts/bye-bye-juvia.md b/content/posts/bye-bye-juvia.md new file mode 100644 index 0000000..7d2f8df --- /dev/null +++ b/content/posts/bye-bye-juvia.md @@ -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! diff --git a/content/posts/combater.md b/content/posts/combater.md new file mode 100644 index 0000000..fccd56f --- /dev/null +++ b/content/posts/combater.md @@ -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. diff --git a/content/posts/comment-system-off.md b/content/posts/comment-system-off.md new file mode 100644 index 0000000..af886e3 --- /dev/null +++ b/content/posts/comment-system-off.md @@ -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! diff --git a/content/posts/criacao-libreplanet-sao-paulo.md b/content/posts/criacao-libreplanet-sao-paulo.md new file mode 100644 index 0000000..88158b6 --- /dev/null +++ b/content/posts/criacao-libreplanet-sao-paulo.md @@ -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! diff --git a/content/posts/debuginfod-for-debian.md b/content/posts/debuginfod-for-debian.md new file mode 100644 index 0000000..120ec8e --- /dev/null +++ b/content/posts/debuginfod-for-debian.md @@ -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 :-). diff --git a/content/posts/debuginfod-is-coming-to-ubuntu.md b/content/posts/debuginfod-is-coming-to-ubuntu.md new file mode 100644 index 0000000..81bf130 --- /dev/null +++ b/content/posts/debuginfod-is-coming-to-ubuntu.md @@ -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. diff --git a/content/posts/dfd-2013-campinas.md b/content/posts/dfd-2013-campinas.md new file mode 100644 index 0000000..4a8ca66 --- /dev/null +++ b/content/posts/dfd-2013-campinas.md @@ -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! diff --git a/content/posts/dont-come-here.md b/content/posts/dont-come-here.md new file mode 100644 index 0000000..1264b73 --- /dev/null +++ b/content/posts/dont-come-here.md @@ -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. diff --git a/content/posts/dreaming.md b/content/posts/dreaming.md new file mode 100644 index 0000000..526bc8a --- /dev/null +++ b/content/posts/dreaming.md @@ -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. diff --git a/content/posts/fad-sp-2013.md b/content/posts/fad-sp-2013.md new file mode 100644 index 0000000..54537b4 --- /dev/null +++ b/content/posts/fad-sp-2013.md @@ -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! diff --git a/content/posts/fazendo-a-diferenca.md b/content/posts/fazendo-a-diferenca.md new file mode 100644 index 0000000..ffe5ea1 --- /dev/null +++ b/content/posts/fazendo-a-diferenca.md @@ -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. diff --git a/content/posts/fedora-on-acer-c720p.md b/content/posts/fedora-on-acer-c720p.md new file mode 100644 index 0000000..597b5a5 --- /dev/null +++ b/content/posts/fedora-on-acer-c720p.md @@ -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! diff --git a/content/posts/first-post-again.md b/content/posts/first-post-again.md new file mode 100644 index 0000000..a2f5fd7 --- /dev/null +++ b/content/posts/first-post-again.md @@ -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! diff --git a/content/posts/fsf-twitter-coherence.md b/content/posts/fsf-twitter-coherence.md new file mode 100644 index 0000000..147fdee --- /dev/null +++ b/content/posts/fsf-twitter-coherence.md @@ -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 " (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. diff --git a/content/posts/gdb-and-systemtap-probes-part-1.md b/content/posts/gdb-and-systemtap-probes-part-1.md new file mode 100644 index 0000000..a0a281a --- /dev/null +++ b/content/posts/gdb-and-systemtap-probes-part-1.md @@ -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 +`` 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 + + 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 +`` 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! diff --git a/content/posts/gdb-and-systemtap-probes-part-2.md b/content/posts/gdb-and-systemtap-probes-part-2.md new file mode 100644 index 0000000..46864dc --- /dev/null +++ b/content/posts/gdb-and-systemtap-probes-part-2.md @@ -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 + + 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 + ... + (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! diff --git a/content/posts/gdb-and-systemtap-probes-part-3.md b/content/posts/gdb-and-systemtap-probes-part-3.md new file mode 100644 index 0000000..f0a73fa --- /dev/null +++ b/content/posts/gdb-and-systemtap-probes-part-3.md @@ -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 + + 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! diff --git a/content/posts/gdb-stap-linker-debugger.md b/content/posts/gdb-stap-linker-debugger.md new file mode 100644 index 0000000..a0f11e9 --- /dev/null +++ b/content/posts/gdb-stap-linker-debugger.md @@ -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 +:-). diff --git a/content/posts/gnupg-encrypt-to-self.md b/content/posts/gnupg-encrypt-to-self.md new file mode 100644 index 0000000..64dfb60 --- /dev/null +++ b/content/posts/gnupg-encrypt-to-self.md @@ -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! diff --git a/content/posts/impressoes-fisl15.md b/content/posts/impressoes-fisl15.md new file mode 100644 index 0000000..393ab43 --- /dev/null +++ b/content/posts/impressoes-fisl15.md @@ -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! diff --git a/content/posts/improve-gcore-elf-headers.md b/content/posts/improve-gcore-elf-headers.md new file mode 100644 index 0000000..3085f40 --- /dev/null +++ b/content/posts/improve-gcore-elf-headers.md @@ -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 + 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! diff --git a/content/posts/installing-gerrit-and-keycloak.md b/content/posts/installing-gerrit-and-keycloak.md new file mode 100644 index 0000000..b635c3f --- /dev/null +++ b/content/posts/installing-gerrit-and-keycloak.md @@ -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: + + + ServerName gnutoolchain-gerrit.osci.io + + RedirectPermanent / https://gnutoolchain-gerrit.osci.io/r/ + + + + 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: + + # 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 + + Require all granted + + + AllowEncodedSlashes On + ProxyPass /r/ http://127.0.0.1:8081/ nocanon + #ProxyPassReverse /r/ http://127.0.0.1:8081/r/ + + +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). diff --git a/content/posts/linux-memory-mapping.md b/content/posts/linux-memory-mapping.md new file mode 100644 index 0000000..4adb695 --- /dev/null +++ b/content/posts/linux-memory-mapping.md @@ -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//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//smaps` +file. + +The `/proc//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 ` (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 ` (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 ``, 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//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). diff --git a/content/posts/migration-jabberd2-to-prosody.md b/content/posts/migration-jabberd2-to-prosody.md new file mode 100644 index 0000000..e19ca26 --- /dev/null +++ b/content/posts/migration-jabberd2-to-prosody.md @@ -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! diff --git a/content/posts/misunderstanding-free-software.md b/content/posts/misunderstanding-free-software.md new file mode 100644 index 0000000..fdea40e --- /dev/null +++ b/content/posts/misunderstanding-free-software.md @@ -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. diff --git a/content/posts/my-first-post.md b/content/posts/my-first-post.md new file mode 100644 index 0000000..17f7234 --- /dev/null +++ b/content/posts/my-first-post.md @@ -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 +} +``` diff --git a/content/posts/my-workflow-with-gdb-and-git-part-1.md b/content/posts/my-workflow-with-gdb-and-git-part-1.md new file mode 100644 index 0000000..17ef8ba --- /dev/null +++ b/content/posts/my-workflow-with-gdb-and-git-part-1.md @@ -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! diff --git a/content/posts/narcissistic-behavior.md b/content/posts/narcissistic-behavior.md new file mode 100644 index 0000000..6462927 --- /dev/null +++ b/content/posts/narcissistic-behavior.md @@ -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... diff --git a/content/posts/not-on-freenode-anymore.md b/content/posts/not-on-freenode-anymore.md new file mode 100644 index 0000000..dd68b5e --- /dev/null +++ b/content/posts/not-on-freenode-anymore.md @@ -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/). diff --git a/content/posts/permissive-the-new-popular.md b/content/posts/permissive-the-new-popular.md new file mode 100644 index 0000000..b51c910 --- /dev/null +++ b/content/posts/permissive-the-new-popular.md @@ -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! diff --git a/content/posts/planet-debian-hello.md b/content/posts/planet-debian-hello.md new file mode 100644 index 0000000..e382b62 --- /dev/null +++ b/content/posts/planet-debian-hello.md @@ -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! diff --git a/content/posts/privacy-collective-good.md b/content/posts/privacy-collective-good.md new file mode 100644 index 0000000..ddd2b3c --- /dev/null +++ b/content/posts/privacy-collective-good.md @@ -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. diff --git a/content/posts/reflexoes-de-um-ativista-parte-1.md b/content/posts/reflexoes-de-um-ativista-parte-1.md new file mode 100644 index 0000000..223d1bf --- /dev/null +++ b/content/posts/reflexoes-de-um-ativista-parte-1.md @@ -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. diff --git a/content/posts/reflexoes-de-um-ativista-parte-2.md b/content/posts/reflexoes-de-um-ativista-parte-2.md new file mode 100644 index 0000000..c71b79a --- /dev/null +++ b/content/posts/reflexoes-de-um-ativista-parte-2.md @@ -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. diff --git a/content/posts/relato-apresentacao-fedora-unesp-rio-claro.md b/content/posts/relato-apresentacao-fedora-unesp-rio-claro.md new file mode 100644 index 0000000..39d4d17 --- /dev/null +++ b/content/posts/relato-apresentacao-fedora-unesp-rio-claro.md @@ -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! diff --git a/content/posts/relato-apresentacao-gdb-solisc.md b/content/posts/relato-apresentacao-gdb-solisc.md new file mode 100644 index 0000000..2967638 --- /dev/null +++ b/content/posts/relato-apresentacao-gdb-solisc.md @@ -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: + +- (fonte, + em Beamer/LaTeX) +- (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! diff --git a/content/posts/relato-installfest-unesp-unicamp.md b/content/posts/relato-installfest-unesp-unicamp.md new file mode 100644 index 0000000..36c61d1 --- /dev/null +++ b/content/posts/relato-installfest-unesp-unicamp.md @@ -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! diff --git a/content/posts/respectful-software.md b/content/posts/respectful-software.md new file mode 100644 index 0000000..89412fe --- /dev/null +++ b/content/posts/respectful-software.md @@ -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. diff --git a/content/posts/samba-ad-dc.md b/content/posts/samba-ad-dc.md new file mode 100644 index 0000000..e69de29 diff --git a/content/posts/sem-duvida.md b/content/posts/sem-duvida.md new file mode 100644 index 0000000..05d04d7 --- /dev/null +++ b/content/posts/sem-duvida.md @@ -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. diff --git a/content/posts/so-long-ambassadors.md b/content/posts/so-long-ambassadors.md new file mode 100644 index 0000000..93e6782 --- /dev/null +++ b/content/posts/so-long-ambassadors.md @@ -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: +> +> +> +> 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!". diff --git a/content/posts/the-gnu-radical.md b/content/posts/the-gnu-radical.md new file mode 100644 index 0000000..b75bed8 --- /dev/null +++ b/content/posts/the-gnu-radical.md @@ -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. diff --git a/content/posts/toronto-bsp-2019-report.md b/content/posts/toronto-bsp-2019-report.md new file mode 100644 index 0000000..5c1559d --- /dev/null +++ b/content/posts/toronto-bsp-2019-report.md @@ -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 :-). diff --git a/content/posts/where-are-we-going.md b/content/posts/where-are-we-going.md new file mode 100644 index 0000000..e69de29 diff --git a/content/posts/zeladores-da-coerencia.md b/content/posts/zeladores-da-coerencia.md new file mode 100644 index 0000000..a1061d5 --- /dev/null +++ b/content/posts/zeladores-da-coerencia.md @@ -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. diff --git a/layouts/index.atom.xml b/layouts/index.atom.xml new file mode 100644 index 0000000..19fa31b --- /dev/null +++ b/layouts/index.atom.xml @@ -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 -}} + + {{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }} + + {{ if not .Date.IsZero }} + {{ .Date.Format "2006-01-02T15:04:05-07:00" | safeHTML }}{{ end }} + {{ .Permalink }}{{ with .Site.Author.name }} + + {{.}}{{ with $.Site.Author.email }} + {{.}}{{end}} + {{end}} + Hugo -- gohugo.io{{ range $pages }} + + {{ `<![CDATA[` | safeHTML }}{{ .Title }}]]> + + {{ .Permalink }}{{ with $.Site.Author.name }} + + {{.}} + {{end}} + {{ .Date.Format "2006-01-02T15:04:05-07:00" | safeHTML }} + {{ .Lastmod.Format "2006-01-02T15:04:05-07:00" | safeHTML }} + {{ if .Content }} + {{ ` + {{ end }} + {{ end }} + diff --git a/layouts/taxonomy/terms.html.html b/layouts/taxonomy/terms.html.html new file mode 100644 index 0000000..253c664 --- /dev/null +++ b/layouts/taxonomy/terms.html.html @@ -0,0 +1,18 @@ +{{ define "main" }} +
+ {{ partial "breadcrumb.html" . }} + {{- if or .Title .Content }} +
+ {{ with .Title }}

{{ . }}

{{ end }} + {{ with .Content }}
{{ . }}
{{ end }} +
+ {{- end }} +
+ {{ range .Pages }} + + {{ end }} +
+
+{{ end }} diff --git a/layouts/term/term.atom.xml b/layouts/term/term.atom.xml new file mode 120000 index 0000000..69c0ebb --- /dev/null +++ b/layouts/term/term.atom.xml @@ -0,0 +1 @@ +../index.atom.xml \ No newline at end of file diff --git a/resources/_gen/assets/scss/scss/style.scss_3a32c688ee69983bce739db2cf7b14f2.content b/resources/_gen/assets/scss/scss/style.scss_3a32c688ee69983bce739db2cf7b14f2.content new file mode 100644 index 0000000..028dcda --- /dev/null +++ b/resources/_gen/assets/scss/scss/style.scss_3a32c688ee69983bce739db2cf7b14f2.content @@ -0,0 +1,3 @@ +:root{--dark_bg: #242629;--dark_hl_bg: #34363b;--dark_fg: #fff;--dark_dim_fg: #bababa;--dark_stroke: #4f4f4f;--dark_accent: #db5793;--dark_sidebar_bg: #34363b;--dark_sidebar_fg: #fff;--light_bg: #f5f5f5;--light_hl_bg: #e6e6e6;--light_fg: #262625;--light_dim_fg: #40403e;--light_stroke: #575754;--light_accent: #db5793;--light_sidebar_bg: #e6e6e6;--light_sidebar_fg: #121211;--default_bg: #242629;--default_hl_bg: #34363b;--default_fg: #fff;--default_dim_fg: #bababa;--default_stroke: #4f4f4f;--default_accent: #db5793;--default_sidebar_bg: #34363b;--default_sidebar_fg: #fff}::selection,::-moz-selection{background:var(--default_accent);color:var(--default_fg)}body,html{font-family:"Symbols Nerd Font",JetBrains Mono,monospace;font-size:16px;margin:0;padding:0;background-color:var(--default_bg);color:var(--default_fg)}body{min-height:100vh}a{color:var(--default_fg);text-decoration:none;background-color:transparent;border-radius:0;border-bottom:2px solid currentcolor}a:hover,a:hover:not([disabled]),a:focus,a:focus:not([disabled]){border-color:var(--default_accent) !important;background-color:transparent}a.unstyledLink{border:none;text-decoration:none;color:var(--default_fg)}#content{max-width:1000px;margin-left:auto;margin-right:auto;padding:15px}footer{color:var(--default_dim_fg)}footer a{color:var(--default_dim_fg)}footer hr{margin-top:30px}footer .footerColumns{font-size:14.4px;display:flex;flex-direction:row;flex-wrap:wrap}footer .footerColumns ul{margin:7.5px;list-style-type:none;padding:0}footer .footerColumns ul li>strong{font-size:1rem}#links{padding:5px 0}article img,.articlePreview img{margin:auto;display:block;max-width:100%}article pre,article code,.articlePreview pre,.articlePreview code{overflow:auto}article pre,.articlePreview pre{padding:15px;border:1px solid var(--default_stroke);border-radius:3px}code{font-family:"Symbols Nerd Font",JetBrains Mono,monospace;font-size:12.8px;border:1px solid var(--default_stroke);border-radius:3px}code,table{padding:2px}pre code{border:none;border-radius:none;padding:0}table{border-collapse:collapse;overflow-x:auto;display:block}table td,table th{padding:6px;border:1px solid var(--default_stroke)}table th,table tr:nth-child(even){filter:brightness(105%)}blockquote{margin:0;padding-left:30px;border-left:2px solid currentcolor}.date,.date a{color:var(--default_dim_fg);border-color:var(--default_dim_fg);font-size:.9em}#pageNavigation a,.nerdlink a,nav:not(#TableOfContents) a{border-bottom:none}#pageNavigation a:hover,.nerdlink a:hover,nav:not(#TableOfContents) a:hover{border-bottom:none}#pageNavigation{text-align:right}#pageNavigation a{color:var(--default_accent)}#pageNavigation a,#pageNavigation span{display:inline-block;padding:6px}#pageNavigation.nav-circles{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-end;align-items:center}#pageNavigation.nav-circles a,#pageNavigation.nav-circles span{margin:5px;text-align:center;display:inline-block;width:40px;height:40px;line-height:40px;padding:unset;border-radius:100%;transition:background-color .15s ease-in-out;background-color:var(--default_hl_bg);color:var(--default_fg);box-shadow:0 0 0 0 transparent}#pageNavigation.nav-circles span{background-color:var(--default_accent)}#pageNavigation.nav-circles a:hover{background-color:var(--default_accent)}h1,h2,h3,h4,h5,h6{font-family:"Symbols Nerd Font",JetBrains Mono}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:var(--default_accent);border-bottom:none}h1{font-size:32px}h2{font-size:24px}h3{font-size:20.8px}h4{font-size:16px}h5{font-size:12.8px}h6{font-size:11.2px}.nerd,.nerdlink{font-family:"Symbols Nerd Font",JetBrains Mono;font-size:19.2px;margin:5px;display:inline-block}.nerdlink{color:var(--default_fg);border-bottom:none;position:relative;width:1em;height:1.2em;display:inline-flex;align-items:center;justify-content:center}.nerdlink .pseudofont{fill:var(--default_fg);display:inline;position:relative;top:1px}.nerdlink span{position:absolute;top:1.5em;left:50%;transform:translateX(-50%);padding:2px;border:1px solid var(--default_stroke);border-radius:3px;color:var(--default_fg);display:none;background-color:var(--default_bg);z-index:900;text-align:center}.nerdlink:hover{color:var(--default_accent);text-decoration:none;border-bottom:none}.nerdlink:hover .pseudofont{fill:var(--default_accent)}.nerdlink:hover span{display:block}.card,.featuredCardLink .featuredCard,.featuredCardLink .relatedArticlesContainer #relatedArticles .postlistitem,.relatedArticlesContainer #relatedArticles .featuredCardLink .postlistitem{display:block;padding-bottom:15px}.postlist{display:grid;grid-gap:15px;margin-bottom:15px;grid-template-columns:1fr}.postlist.gridView{grid-template-columns:repeat(auto-fit, minmax(325px, 1fr))}.postlistitem.card div img,.featuredCardLink .postlistitem.featuredCard div img,.featuredCardLink .relatedArticlesContainer #relatedArticles .postlistitem div img,.relatedArticlesContainer #relatedArticles .featuredCardLink .postlistitem div img{height:250px;min-width:100%;object-fit:cover}ul li{margin:5px 0}ul.list .date{display:inline-block;min-width:100px}ul.list>li>div{display:grid;grid-template-columns:100px auto}#commento{margin-top:15px;color:var(--default_fg);font-family:"Symbols Nerd Font",JetBrains Mono,monospace}#commento textarea,#commento #commento-markdown-help-root{background:rgba(255,255,255,0.05);color:var(--default_fg);border-radius:0;border:none}#commento textarea td,#commento textarea td>*,#commento textarea td>*>*,#commento #commento-markdown-help-root td,#commento #commento-markdown-help-root td>*,#commento #commento-markdown-help-root td>*>*{color:var(--default_fg)}#commento textarea td pre,#commento textarea td>* pre,#commento textarea td>*>* pre,#commento #commento-markdown-help-root td pre,#commento #commento-markdown-help-root td>* pre,#commento #commento-markdown-help-root td>*>* pre{font-family:"Symbols Nerd Font",JetBrains Mono,monospace;color:var(--default_dim_fg)}#commento #commento-submit-button-root{background:var(--default_accent);color:var(--default_fg)}#commento .commento-name{color:var(--default_dim_fg)}#commento .commento-sort-policy-buttons a{border-bottom:none}#commento .commento-sort-policy-buttons .commento-sort-policy-button-selected{color:var(--default_accent)}#commento .commento-card{border-top:none;margin:25px 0}#commento .commento-body>*,#commento .commento-body *>*,#commento .commento-body>*>*>*,#commento .commento-body>*>*>*>*,#commento .commento-body>*>*>*>*>*{color:var(--default_fg);font-family:"Symbols Nerd Font",JetBrains Mono,monospace}.search{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;margin:15px 0}.search .nerdlink{display:inline-block;cursor:pointer;padding:0 6px}.search #searchbar{width:100%;min-width:150px;font-size:1.3em;outline:none}.titleAndSearchContainer{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.titleAndSearchContainer #titleContainer{flex-grow:99}.titleAndSearchContainer .search{flex-grow:1}.titleAndSearchContainer .search,.titleAndSearchContainer .search #searchbar{font-size:1em}.featuredCardLink{border:none;padding:0}.featuredCardLink .featuredCard,.featuredCardLink .relatedArticlesContainer #relatedArticles .postlistitem,.relatedArticlesContainer #relatedArticles .featuredCardLink .postlistitem{background-size:cover;background-position:center;background-repeat:no-repeat;position:relative;height:250px}.featuredCardLink .featuredCard .contentArea,.featuredCardLink .relatedArticlesContainer #relatedArticles .postlistitem .contentArea,.relatedArticlesContainer #relatedArticles .featuredCardLink .postlistitem .contentArea{position:absolute;bottom:0;padding:15px}.featuredCardLink .featuredCard .contentArea,.featuredCardLink .relatedArticlesContainer #relatedArticles .postlistitem .contentArea,.relatedArticlesContainer #relatedArticles .featuredCardLink .postlistitem .contentArea,.featuredCardLink .featuredCard .contentArea h2,.featuredCardLink .relatedArticlesContainer #relatedArticles .postlistitem .contentArea h2,.relatedArticlesContainer #relatedArticles .featuredCardLink .postlistitem .contentArea h2,.featuredCardLink .featuredCard .contentArea .date,.featuredCardLink .relatedArticlesContainer #relatedArticles .postlistitem .contentArea .date,.relatedArticlesContainer #relatedArticles .featuredCardLink .postlistitem .contentArea .date{color:white}.featuredCardLink .featuredCard .contentArea h2,.featuredCardLink .relatedArticlesContainer #relatedArticles .postlistitem .contentArea h2,.relatedArticlesContainer #relatedArticles .featuredCardLink .postlistitem .contentArea h2{margin:0}.featuredCardLink .featuredCard .contentArea .date,.featuredCardLink .relatedArticlesContainer #relatedArticles .postlistitem .contentArea .date,.relatedArticlesContainer #relatedArticles .featuredCardLink .postlistitem .contentArea .date{margin:0}.loadMoreButton{text-align:center;font-size:1.2em;font-weight:bold}.loadMoreButton.buttonLike a{display:inline-block;border-radius:10px;background-color:var(--default_hl_bg);color:var(--default_fg);padding:7.5px;margin:2.5px 0;transition:background-color .15s ease-in-out !important;border-bottom:none;box-shadow:0 0 0 0 transparent}.loadMoreButton.buttonLike a:hover,.loadMoreButton.buttonLike a:focus{background-color:var(--default_accent)}.relatedArticlesContainer{margin:15px 0}#titleContainer{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:flex-start;align-self:flex-start}#titleContainer h1{font-weight:normal;font-size:25.6px;margin:0}#titleContainer img{margin-right:7.5px;margin-top:7px;align-self:flex-start;width:50px;max-height:50px;border-radius:5px}nav:not(#TableOfContents) ul,#links ul{list-style-type:none;display:flex;flex-direction:row;flex-wrap:wrap;padding:0;margin:0}header{max-width:1000px;margin-left:auto;margin-right:auto;padding:15px;margin-bottom:15px}header .rightOfLogo{width:100%}header .rightOfLogo .titleAndHamburger{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:flex-start;justify-content:space-between}header nav:not(#TableOfContents){font-size:.9em}header nav:not(#TableOfContents) ul li{border-right:1px solid var(--default_accent)}header nav:not(#TableOfContents) ul li:last-child{border-right:none}header nav:not(#TableOfContents) ul li a{padding:2px 15px;color:var(--default_accent)}header nav:not(#TableOfContents) ul li a:hover{text-decoration:underline}.articleTagsContainer{margin:15px 0}a.buttonTag{display:inline-block;border-radius:10px;background-color:var(--default_hl_bg);color:var(--default_fg);padding:7.5px;margin:2.5px 0;transition:background-color .15s ease-in-out !important;border-bottom:none;box-shadow:0 0 0 0 transparent}a.buttonTag:hover,a.buttonTag:focus{background-color:var(--default_accent)}.cactus-button,.cactus-login-buttons>button{font-family:JetBrains Mono;padding:0;margin:5px 0 5px 15px !important;color:var(--default_fg);text-decoration:none;background-color:transparent;border-radius:0;border-bottom:2px solid currentcolor;font-size:19.2px;transition-property:border-color, background-color !important;transition-duration:.15s;transition-timing-function:ease-in-out;opacity:1 !important}.cactus-button:hover,.cactus-button:hover:not([disabled]),.cactus-button:focus,.cactus-button:focus:not([disabled]),.cactus-login-buttons>button:hover,.cactus-login-buttons>button:hover:not([disabled]),.cactus-login-buttons>button:focus,.cactus-login-buttons>button:focus:not([disabled]){border-color:var(--default_accent) !important;background-color:transparent}.cactus-button[disabled],.cactus-login-buttons>button[disabled]{opacity:.5 !important;border-color:transparent !important;background-color:transparent !important;box-shadow:none}.shareBtn,button{color:var(--default_fg);text-decoration:none;background-color:transparent;border-radius:0;border-bottom:2px solid currentcolor;font-size:19.2px;cursor:pointer}.shareBtn:hover,.shareBtn:hover:not([disabled]),.shareBtn:focus,.shareBtn:focus:not([disabled]),button:hover,button:hover:not([disabled]),button:focus,button:focus:not([disabled]){border-color:var(--default_accent) !important;background-color:transparent}input,textarea,textarea.cactus-editor-textarea{border-radius:0 !important;box-sizing:border-box;font-family:"Symbols Nerd Font",JetBrains Mono;background-color:var(--default_hl_bg) !important;color:var(--default_fg);max-width:100%;min-width:10px;padding:12px;border:2px solid transparent !important;border-color:transparent;transition:border-color .15s ease-in-out !important}input:focus,input:active,textarea:focus,textarea:active,textarea.cactus-editor-textarea:focus,textarea.cactus-editor-textarea:active{border-color:var(--default_accent) !important;outline:none}.cactus-editor-name{box-sizing:border-box;max-width:100%;min-width:10px}.cactus-login-form{border-radius:0;box-shadow:none;border:2px solid var(--default_stroke);max-width:600px;min-width:200px;width:100%;margin:0 auto;box-sizing:border-box;transform:none;top:30px;left:0;right:0;background-color:var(--default_bg) !important;color:var(--default_fg) !important;z-index:9999}.cactus-login-form>a{color:var(--default_fg);text-decoration:none;background-color:transparent;border-radius:0;border-bottom:2px solid currentcolor;font-size:19.2px;align-self:flex-end}.cactus-login-form>a:hover,.cactus-login-form>a:hover:not([disabled]),.cactus-login-form>a:focus,.cactus-login-form>a:focus:not([disabled]){border-color:var(--default_accent) !important;background-color:transparent}.cactus-login-form>a>button{background-color:transparent !important;border:none !important;box-shadow:none !important;margin:0 !important;padding:0 !important}.cactus-login-form .cactus-login-buttons{margin:0;justify-content:flex-end}.cactus-login-form .cactus-login-buttons>button{flex-grow:0;white-space:nowrap}#fediInstanceDialog{display:none;position:fixed;top:0;bottom:0;left:0;right:0}#fediInstanceDialog .dialog{box-shadow:none;border:2px solid var(--default_stroke);box-sizing:border-box;position:absolute;display:flex;flex-direction:column;top:30px;left:50%;transform:translateX(-50%);z-index:9999;background-color:var(--default_bg);width:450px;max-width:100%;padding:15px}#fediInstanceDialog .dialog h1,#fediInstanceDialog .dialog h2,#fediInstanceDialog .dialog h3,#fediInstanceDialog .dialog h4{margin:0}#fediInstanceDialog .dialog h2{margin-bottom:24px}#fediInstanceDialog .dialog input{display:block}#fediInstanceDialog .dialog .buttons{margin:15px 0;display:flex;flex-direction:row;justify-content:end}#fediInstanceDialog .dialog .buttons>*{margin:5px 0 5px 15px;display:block}#fediInstanceDialog .bg{z-index:99;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,0.4);cursor:pointer}#fediInstanceDialog.open{display:block}a{transition-property:color, border-color;transition-duration:.15s;transition-timing-function:ease-in-out}.nerdlink,.nerdlink .pseudofond{transition:all .15s ease-in-out}input{transition:.15s border ease-in-out} + +/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/resources/_gen/assets/scss/scss/style.scss_3a32c688ee69983bce739db2cf7b14f2.json b/resources/_gen/assets/scss/scss/style.scss_3a32c688ee69983bce739db2cf7b14f2.json new file mode 100644 index 0000000..de2508a --- /dev/null +++ b/resources/_gen/assets/scss/scss/style.scss_3a32c688ee69983bce739db2cf7b14f2.json @@ -0,0 +1 @@ +{"Target":"css/styles.abbd6311bb4b6ca58f8e7398140529245ae0f6428b759fcd830742eee2619eabb900ba9914a9affb82aa9a16a9b9ea727bb315315a976a0db0e7513a5f12c504.css","MediaType":"text/css","Data":{"Integrity":"sha512-q71jEbtLbKWPjnOYFAUpJFrg9kKLdZ/NgwdC7uJhnqu5ALqZFKmv+4Kqmhapuepye7MVMVqXag2w51E6XxLFBA=="}} \ No newline at end of file diff --git a/static/css/custom.css b/static/css/custom.css new file mode 100644 index 0000000..3c12eec --- /dev/null +++ b/static/css/custom.css @@ -0,0 +1,3 @@ +body { + font-family: JetBrains Mono; +}; diff --git a/static/images/sergio-fad-2013.jpg b/static/images/sergio-fad-2013.jpg new file mode 100644 index 0000000..8ecc60e Binary files /dev/null and b/static/images/sergio-fad-2013.jpg differ diff --git a/static/images/toronto-bsp-2019-04-27-1.jpg b/static/images/toronto-bsp-2019-04-27-1.jpg new file mode 100644 index 0000000..88488b9 Binary files /dev/null and b/static/images/toronto-bsp-2019-04-27-1.jpg differ diff --git a/static/images/toronto-bsp-2019-04-27-2.jpg b/static/images/toronto-bsp-2019-04-27-2.jpg new file mode 100644 index 0000000..b497c8d Binary files /dev/null and b/static/images/toronto-bsp-2019-04-27-2.jpg differ diff --git a/static/images/toronto-bsp-2019-04-27-3.jpg b/static/images/toronto-bsp-2019-04-27-3.jpg new file mode 100644 index 0000000..d1dd9e7 Binary files /dev/null and b/static/images/toronto-bsp-2019-04-27-3.jpg differ diff --git a/static/jetbrains-mono/jetbrains-mono-bold-italic-latin-ext.woff2 b/static/jetbrains-mono/jetbrains-mono-bold-italic-latin-ext.woff2 new file mode 100644 index 0000000..e576049 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-bold-italic-latin-ext.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-bold-italic-latin.woff2 b/static/jetbrains-mono/jetbrains-mono-bold-italic-latin.woff2 new file mode 100644 index 0000000..4b69c85 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-bold-italic-latin.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-bold-latin-ext.woff2 b/static/jetbrains-mono/jetbrains-mono-bold-latin-ext.woff2 new file mode 100644 index 0000000..6496d65 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-bold-latin-ext.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-bold-latin.woff2 b/static/jetbrains-mono/jetbrains-mono-bold-latin.woff2 new file mode 100644 index 0000000..9df6576 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-bold-latin.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-extra-bold-italic-latin-ext.woff2 b/static/jetbrains-mono/jetbrains-mono-extra-bold-italic-latin-ext.woff2 new file mode 100644 index 0000000..c22d4bd Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-extra-bold-italic-latin-ext.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-extra-bold-italic-latin.woff2 b/static/jetbrains-mono/jetbrains-mono-extra-bold-italic-latin.woff2 new file mode 100644 index 0000000..7483c47 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-extra-bold-italic-latin.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-extra-bold-latin-ext.woff2 b/static/jetbrains-mono/jetbrains-mono-extra-bold-latin-ext.woff2 new file mode 100644 index 0000000..6d1bb03 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-extra-bold-latin-ext.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-extra-bold-latin.woff2 b/static/jetbrains-mono/jetbrains-mono-extra-bold-latin.woff2 new file mode 100644 index 0000000..1a367b9 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-extra-bold-latin.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-italic-latin-ext.woff2 b/static/jetbrains-mono/jetbrains-mono-italic-latin-ext.woff2 new file mode 100644 index 0000000..161311d Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-italic-latin-ext.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-italic-latin.woff2 b/static/jetbrains-mono/jetbrains-mono-italic-latin.woff2 new file mode 100644 index 0000000..b9c5c09 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-italic-latin.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-light-italic-latin-ext.woff2 b/static/jetbrains-mono/jetbrains-mono-light-italic-latin-ext.woff2 new file mode 100644 index 0000000..f3840f9 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-light-italic-latin-ext.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-light-italic-latin.woff2 b/static/jetbrains-mono/jetbrains-mono-light-italic-latin.woff2 new file mode 100644 index 0000000..739aacc Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-light-italic-latin.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-light-latin-ext.woff2 b/static/jetbrains-mono/jetbrains-mono-light-latin-ext.woff2 new file mode 100644 index 0000000..1c31fdd Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-light-latin-ext.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-light-latin.woff2 b/static/jetbrains-mono/jetbrains-mono-light-latin.woff2 new file mode 100644 index 0000000..14ee7c4 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-light-latin.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-medium-italic-latin-ext.woff2 b/static/jetbrains-mono/jetbrains-mono-medium-italic-latin-ext.woff2 new file mode 100644 index 0000000..5cb4302 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-medium-italic-latin-ext.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-medium-italic-latin.woff2 b/static/jetbrains-mono/jetbrains-mono-medium-italic-latin.woff2 new file mode 100644 index 0000000..dc3c9c7 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-medium-italic-latin.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-medium-latin-ext.woff2 b/static/jetbrains-mono/jetbrains-mono-medium-latin-ext.woff2 new file mode 100644 index 0000000..a355e4e Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-medium-latin-ext.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-medium-latin.woff2 b/static/jetbrains-mono/jetbrains-mono-medium-latin.woff2 new file mode 100644 index 0000000..61d7aa5 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-medium-latin.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-regular-latin-ext.woff2 b/static/jetbrains-mono/jetbrains-mono-regular-latin-ext.woff2 new file mode 100644 index 0000000..5b182eb Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-regular-latin-ext.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono-regular-latin.woff2 b/static/jetbrains-mono/jetbrains-mono-regular-latin.woff2 new file mode 100644 index 0000000..433ef97 Binary files /dev/null and b/static/jetbrains-mono/jetbrains-mono-regular-latin.woff2 differ diff --git a/static/jetbrains-mono/jetbrains-mono.css b/static/jetbrains-mono/jetbrains-mono.css new file mode 100644 index 0000000..eeab84a --- /dev/null +++ b/static/jetbrains-mono/jetbrains-mono.css @@ -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; +} + diff --git a/themes/binario b/themes/binario new file mode 160000 index 0000000..621ca48 --- /dev/null +++ b/themes/binario @@ -0,0 +1 @@ +Subproject commit 621ca48e95af016654ce9d4daac3735c386c01e6 diff --git a/themes/holy b/themes/holy new file mode 160000 index 0000000..6c3be21 --- /dev/null +++ b/themes/holy @@ -0,0 +1 @@ +Subproject commit 6c3be2194534e32ff4d1b3729b9411e169b81b9d diff --git a/themes/hugo-ficurinia b/themes/hugo-ficurinia new file mode 160000 index 0000000..72da9f0 --- /dev/null +++ b/themes/hugo-ficurinia @@ -0,0 +1 @@ +Subproject commit 72da9f00c79f582abac85b07825cea22e2fa94df