bolha.blog-stable

Reader

pt-br

Leia os posts do bolha.blog.

en-us

Read all posts from our users.

from craft-beerM

Los orígenes de la cerveza

Te doy la bienvenida a este nuevo blog de cerveza. Para empezar, lo primero es hacer un poco de historia y repasar los orígenes de nuestra bebida lupulada favorita.

La historia de la cerveza se remonta a miles de años atrás y es una de las bebidas alcohólicas más antiguas de la humanidad.

Orígenes antiguos: Se cree que los primeros indicios de producción de cerveza datan de hace aproximadamente 5.000 a 6.000 años en Mesopotamia (actualmente Irak). Los sumerios y babilonios elaboraban cerveza utilizando cebada y otros cereales fermentados. La cerveza tenía un papel importante en la vida cotidiana y la cultura de las antiguas civilizaciones, siendo considerada un regalo de los dioses.

Expansión y desarrollo: La tradición cervecera se extendió a través de las civilizaciones antiguas, como los egipcios, los griegos y los romanos. Cada cultura aportó sus propias técnicas y métodos de elaboración de cerveza. En la antigua Grecia, por ejemplo, se producía una cerveza conocida como “zythum”. En el Imperio Romano, la cerveza era popular entre las clases bajas, mientras que las clases altas preferían el vino.

Influencia monástica: Durante la Edad Media, los monjes desempeñaron un papel fundamental en la elaboración de cerveza. Los monasterios europeos se convirtieron en centros de producción cervecera, donde se perfeccionaron las técnicas de malteado, maceración y fermentación. Los monjes belgas, en particular, jugaron un papel crucial en la elaboración de cervezas trapenses y abadías que se mantienen populares en la actualidad. Esto ha jugado un papel fundamental en las cervezas belgas de la actualidad.

Revolución industrial y cerveza moderna: Con la llegada de la Revolución Industrial en el siglo XVIII, la producción de cerveza se transformó con la invención de la máquina de vapor y el avance de la tecnología cervecera. Se desarrollaron nuevos métodos de fermentación, pasteurización y embotellado, lo que permitió una producción masiva y la distribución a gran escala de cerveza.

Resurgimiento de la cerveza artesana: A finales del siglo XX, se produjo un resurgimiento de la cerveza artesana en todo el mundo. Los consumidores comenzaron a buscar cervezas con sabores más diversos, ingredientes de calidad y una experiencia cervecera única. Pequeñas cervecerías independientes se levantaron, elaborando cervezas artesanales con métodos tradicionales y experimentando con ingredientes y estilos innovadores.

Hoy en día, la cerveza se ha convertido en una de las bebidas más consumidas y apreciadas en todo el mundo. Existen una amplia variedad de estilos, desde las cervezas lager y ale tradicionales hasta las cervezas artesanales y experimentales que continúan evolucionando y sorprendiendo a los amantes de esta bebida milenaria.

 
Leer más...

from bolhaverso

TL;DR

Sobre os recentes acontecimentos, estamos aqui para esclarecer que vamos continuar.

Ouvimos os apelos de nossos usuários, entendemos que a bolha deixou de ser um simples side-project e se tornou referência no universo Mastodon, e por isso deve continuar.

Seguir sim, mas com melhorias

Depois de algumas considerações com os usuários, parceiros e apoiadores, entendemos que podemos seguir operando, contudo, algumas coisas vão mudar.

Novo Conselho

Decidimos criar um conselho para gerir os serviços da bolha e decidir seu funcionamento e expansão de forma coletiva e responsável.

  • Roberto Murta (@robertomurta@bolha.us)
  • Ulysses Almedia (@ulyssesalmeida@bolha.us)
  • Rui Ogawa (@rogawa@bolha.us)
  • Guto Carvalho (@gutocarvalho@gcn.sh)

Mais ajuda

Algumas pessoas nos ofereceram ajuda para manter a bolha rodando e dividir o trabalho conosco, estamos organizando e estruturando esse novo formato de equipe.

Guardians & Pilots

Quem já era Guardian (moderador) e pilot (admin) continua com os mesmos privilégios e contamos com a ajuda sempre.

Estamos também recrutando novos moderadores e pilots com mais tempo para atuar de forma mais regular na bolha.

Serviços da Bolha

Vamos manter no ar os seguintes serviços de forma permanente:

  • bolha.us
  • bolha.chat

E o serviços beta abaixo serão alçados a estáveis e mantidos como tal:

  • bolha.blog
  • bolha.photos
  • bolha.social

A bolha.tools também segue

  • libretranslate.bolha.tools (tradutor)
  • video.bolha.tools (jitsi)
  • tube.bolha.tools (invidious youtube client)
  • notes.bolha.tools (hedgedoc)

Bolha.chat

A bolha.chat passe a ter como co-owner o sr. @robertomurta, que irá cuidar desse ambiente com muito carinho e atenção.

  • bolha.chat
  • element.bolha.chat
  • hydrogen.bolha.chat
  • cinny.bolha.chat

Bolha.video

O Jitsi será integrado ao bolha.chat como seu canal de vídeo oficial.

Bookwyrm chegando

Esse será o novo projeto a ser integrado a bolha em tempo, estava na fila e segue em testes e homologação na GCN.

Quem é a GCN.sh?

A GCN.sh passa a ser a madrinha e responsável por manter a plataforma e a infraestrutura que o coletivo bolha usa para rodar seus serviços.

A GCN é um projeto do founder Guto Carvalho.

Podemos dizer que a bolha segue rodando nos servidores da GCN.

A GCN é um novo projeto que estará focado em estudar e disseminar conhecimento técnico relativo ao Fediverso, bem como testar, homologar e documentar ferramentas que poderão ser adotadas pela bolha no futuro.

A GCN não é só Fediverso, também estudamos Cloud Native, Kubernetes, DevOps, Infra as Code e Software Engineering.

Nosso founder agora vai se comunicar via mastodon na conta @gutocarvalho@gcn.sh, você pode encontrá-lo por lá e segui-lo.

Siga a conta avisos@bolha.us para mais informações.

[s]

 
Read more...

from Léo Sales

Aparentemente um Hello World

É uma iniciativa da bolha.us muito legal. Dá para tirar os meus pensamentos e colocar por aqui. Quem sabe. rs

 
Read more...

from Quadrinistas Uni-vos

Nós do coletivo Quadrinistas Uni-vos temos como principal objetivo a melhoria das condições materiais e de trabalho de toda a categoria.

No dia 23 de Maio foi aprovado o novo pacote de austeridade, chamado de “arcabouço fiscal”, uma medida LIBERAL que vai sufocar o investimento público em diferentes setores.

Nós do coletivo repudiamos mais essa medida de austeridade, que pouco se difere de maneira prática da chamada “PEC da Morte” aprovada pelo ex-presidente Temer, e que era chamada assim pelos mesmos “progressistas” do PT, PCdoB, PDT, e PSB, mas que ontem votaram em peso a favor dessa medida.

Se queremos melhorias tão necessárias para a nossa categoria, e para o conjunto da classe trabalhadora, e se queremos uma arte acessível e inclusiva, PRECISAMOS de investimento público para tal.

Por isso chamamos vocês, quadrinistas, comunicadores, editores, organizadores de eventos, e toda a classe trabalhadora, à mobilização pela revogação dessa NOVA PEC DA MORTE.

Só a classe trabalhadora mobilizada e nas ruas tem poder de fazer pressão contra os interesses da burguesia. QUADRINISTAS UNI-VOS!

 
Leia mais...

from Rabiscos e Rascunhos

O ar era pesado e trazia consigo um odor ocre e azedo, tão forte que parecia corroer as narinas. A atmosfera ao redor parecia apodrecer, como se algo terrível tivesse se alojado naquele lugar. Ela levou a mão à boca, com uma ânsia de vômito, enquanto buscava apoio em uma das árvores tortuosas.

— Você está bem? – perguntei, caminhando em sua direção para ajudá-la. — Tome isso, irá fazer com que se sinta melhor.

Ela pegou o frasco e abriu-o, sem hesitação, ingerindo todo o seu conteúdo. O líquido desceu por sua garganta, aliviando sua sensação de náusea. Ela limpou os lábios com as costas das mãos e olhou para mim.

— O que é isso? – perguntou ela, ainda um pouco zonza.

— É seiva de Arcate, usada para encantamentos de conjuração, mas também é ótima contra enjoos e ressaca.

Ela parecia não dar muita atenção à explicação. Seus olhos estavam fixos nas copas das árvores, que se entrelaçavam acima de nossas cabeças, criando uma cobertura densa e impenetrável.

Com um sinal de silêncio, ela colocou o indicador sobre os lábios e se moveu com uma graça felina em direção a uma gameleira antiga. Apontou para os galhos da árvore e eu olhei na direção em que ela apontava, mas não vi nada de anormal. Ela olhou para mim com um olhar sério e preocupado.

— Eles nos observam. Melhor voltarmos antes que decidam nos abordar.

Ela começou a andar para trás, tão cautelosa quanto avançara segundos antes. Porém, dessa vez não teve tanta sorte e pisou em um graveto seco, quebrando-o com um estalido estridente.

— Corra! – ela gritou, transformando-se em um anu-preto e voando para longe.

Olhei para cima e vi uma silhueta humanoide avançando rapidamente pelas copas das árvores em nossa direção. Sem hesitar, comecei a correr em direção à saída da floresta, sentindo a adrenalina correndo por minhas veias. O barulho de galhos quebrando e folhas sendo pisadas podia ser ouvido atrás de mim enquanto corria pela floresta densa e escura, lutando contra a sensação de que algo terrível estava me perseguindo.

A voz de Caijara ecoou em minha mente, pedindo para que eu não olhasse para trás, apenas corresse. Eu não gostava da sensação de ter meus pensamentos invadidos por outra pessoa, mas eu sabia que não havia tempo para discutir sobre isso. O medo me consumia e a única coisa que eu conseguia pensar era em fugir.

Com o coração batendo descompassadamente, comecei a correr em direção ao desfiladeiro. A floresta parecia ficar cada vez mais densa e escura, como se estivesse se fechando em torno de mim. Ainda podia sentir a presença da criatura atrás de mim, seus passos pesados e desajeitados ressoando na floresta. Finalmente, avistei a borda do desfiladeiro e, sem hesitar, pulei. O ar fresco bateu em meu rosto enquanto eu caía, e eu podia sentir o som do rio abaixo ficando cada vez mais alto. Quando finalmente toquei a água, senti meu corpo afundando momentaneamente antes de emergir novamente. Olhei em volta, procurando por minha mestra.

Ela estava ali, em pé na margem do rio, com um sorriso triunfante no rosto. Senti um alívio imenso ao vê-la, sabendo que estava a salvo. No entanto, não pude deixar de sentir uma pontada de curiosidade sobre a criatura que nos perseguia. Mas eu sabia melhor do que perguntar a Caijara sobre isso. Ela não fugiria assim tão facilmente de algo que pudesse derrotar.

  • * *

Caijara estendeu a mão em minha direção, um sorriso brincalhão nos lábios.

— Nunca vi um Aldeano correr tão rápido. O medo deveria ser um esporte. Assim, pelo menos teríamos uma taça nos Jogos de Antares. — Ela me provocou, tentando aliviar a tensão do momento.

— Muito engraçado, Caijara. Mas eu corri porque você me disse para fazer isso. E não sou idiota o suficiente para querer enfrentar algo que até mesmo você evita.

Ela explicou que aquele ser era um Primal, uma criatura que ela poderia derrotar sozinha, mas que costumavam andar em bandos. — Não estou disposta a descobrir quantos deles sou capaz de enfrentar antes de ser rasgada ao meio e servir de refeição para um bebê peludo e selvagem — disse, com uma expressão séria que denotava cautela e experiência.

— Mas eles não são apenas lendas?

— Irá descobrir, jovem, que deste lado do Vale de Ossos as lendas são tão reais quanto o seu medo. — sua voz era firme, transmitindo uma certeza que me arrepiava.

“E acredite, há terrores maiores do que um simples macaco gigante por aqui”, sussurrou novamente em meus pensamentos, como se quisesse alertar-me para os perigos desconhecidos à nossa frente.

— Eu odeio quando faz isso. — exclamei em voz alta, irritado e admirado com sua habilidade de invadir minha mente.

“Eu sei disso”, sussurrou Caijara, sorrindo enquanto se afastava. “Agora, precisamos encontrar outro caminho para chegar ao outro lado da floresta.” Senti uma mistura de medo e curiosidade ao seguir seus passos, ciente de que essa jornada estava longe de ser tranquila. O desconhecido nos aguardava, repleto de segredos e ameaças ocultas.

  • * *

Estabelecemos nosso acampamento nas margens do rio, um local estratégico onde suas águas calmas encontravam-se com as do majestoso afluente que fluía à nossa frente. Era um espetáculo da natureza, um encontro de forças fluídicas que se entrelaçavam em perfeita harmonia. Caijara, sábia e enigmática, compartilhou seus conhecimentos com um entusiasmo contagiante, enquanto contemplávamos a grandiosidade daquelas águas em movimento. Ela me revelou que aquele modesto rio que diante de nós serpenteava, abria seu caminho em direção ao horizonte, até desaguar no vasto oceano ao leste. Uma jornada épica, alimentada pela união de inúmeros afluentes e riachos que lhe conferiam poder e magnitude. Ao mencionar a grandiosidade que se revelava quando encontrava o mar, os olhos de Caijara se iluminavam com um brilho intenso, refletindo o fascínio e a devoção que ela nutria pela magnitude da criação natural.

Caijara era uma xamã do Conclave, uma figura enigmática e sábia que caminhava pelos bosques com um ar de mistério. Suas vestes, tecidas com as mais finas fibras naturais, eram um verdadeiro tributo à natureza. O manto, adornado com delicadas folhas entrelaçadas, parecia ter sido tecido pelos próprios espíritos da floresta. Cada fio era uma reverência aos elementos: o verde intenso simbolizava a vitalidade da terra, enquanto os toques dourados representavam o poder radiante do sol. Os punhos do manto eram enfeitados com sinos de prata, que emitiam um suave tilintar a cada passo seu, como se as melodias da natureza a seguissem em sua jornada. Por baixo do manto, ela vestia uma túnica feita de linho, tecida por suas próprias mãos. As cores terrosas se mesclavam harmoniosamente, evocando as tonalidades das folhas outonais. Bordados intrincados retratavam a vida florescente das florestas, desde os menores cogumelos até as majestosas árvores antigas. Cada ponto era uma oração à vida que pulsava ao seu redor, uma conexão profunda com os ciclos eternos da natureza. Enquanto caminhava, Caijara exibia uma postura imponente, digna de uma guardiã da sabedoria ancestral. Seus passos eram firmes e graciosos, como se ela estivesse em perfeita sintonia com a terra sob seus pés. Seu olhar penetrante, de um verde tão profundo quanto as folhas mais escuras da floresta, revelava uma alma que absorvera toda a energia vital ao seu redor. Era como se cada árvore, cada riacho e cada criatura silvestre confiassem nela seus segredos mais íntimos.

Aquela mulher era minha mestra, a quem dediquei minha vida para absorver seus ensinamentos. Ela representava a última guardiã de uma tradição milenar, e dizia que a mim cabia a continuidade desse legado. No entanto, eu me sentia indigno desse fardo. Um jovem aleijado que havia perdido seu braço direito durante um ataque de guarás quando ainda era um bebê nos braços. Meus pais lutaram e sacrificaram suas próprias vidas para me salvar, mas não antes que eu perdesse parte de mim. Embora eles tenham derrotado as feras, as feridas da batalha os levaram em seguida. Foi então que Caijara me encontrou, sob o manto congelado da noite, durante uma lua cheia, abrigado sob a majestosa sombra de um jequitibá. Ela me chamou de Arubarjai, nome que, segundo ela, representava o espírito de luta que a vida me concedeu. Ela me criou, me alimentou, me ensinou a caminhar, a decifrar os segredos da floresta e a escrever nas brisas que passavam. Enquanto a observava, uma dor insidiosa invadia minha alma, corroendo-me por dentro, fazendo com que minha respiração pesada parecesse rasgar-me o peito. Desejava que as circunstâncias fossem diferentes, que eu pudesse evitar o que estava por vir. Mas era inevitável. Ela me deu a vida e a sua eu iria tomá-la. Ouvi meu nome ser chamado.

— Arubarjai, você está me ouvindo? Seguiremos pelos caminhos à nossa frente. Estenderemos nossa jornada por mais um dia, mas evitaremos o território dos primais e chegaremos ao Descampo em segurança.

Assenti silenciosamente, ciente de que o silêncio era necessário para que minha voz não entregasse a verdade por trás das minhas intenções, revelando-as em seu trêmulo timbre. Sugeri a Caijara que descansasse, assumindo o primeiro turno de vigília. Ela concordou prontamente, e o peso da confiança que depositava em mim fez com que minhas dúvidas se tornassem mais intensas, inundando meu coração de pesar. Contudo, minha determinação não vacilava; por mais que me lamentasse, cumpriria essa missão. Eu precisava dominar o poder ancestral e Caijara ainda tinha séculos de vida pela frente, antes de sentir o chamado da Mãe e passar-me o cajado. Para conquistar esse poder, eu teria que tomá-lo pela força.

  • * *

Conforme previsto por Caijara, conseguimos chegar ao nosso destino com segurança, e o atraso de um dia não afetaria o ritual. A lua vermelha surgiria em dois dias, portanto tínhamos tempo suficiente para nos prepararmos. O Descampo, um cenário imponente, revelava-se à nossa frente. Tratava-se de um lajeado de pedras lisas e escuras, situado no topo de um platô no coração mais profundo da antiga floresta. Aquele local era sagrado para os xamãs do Conclave, um ponto onde, por milênios, gerações de jovens curumins passaram pelo rito de passagem para se tornarem Emissários da Mãe. Durante doze anos, eu havia seguido e escutado os ensinamentos de Caijara, e agora ela se orgulhava de ver seu pequeno aprendiz se tornar um homem. Contudo, eu sabia que seriam necessárias décadas de dedicação para que eu pudesse alcançar maior elevação espiritual. O título de xamã seria concedido somente quando Caijara passasse o cajado, algo que ela só faria quando se unisse ao mundo dos espíritos.

O Descampo era um lugar envolto em uma aura mística. As pedras antigas, desgastadas pelo tempo e marcadas pelas pisadas dos xamãs que vieram antes de mim, emanavam uma energia ancestral. A atmosfera carregada inspirava respeito e reverência, pois ali, entre aquelas rochas sagradas, a sabedoria e o poder da natureza se encontravam. Enquanto contemplávamos aquele cenário, eu sentia uma mistura de emoções dentro de mim – antecipação, ansiedade e uma angustia profunda perante o desafio que me aguardava.

Fui abruptamente arrancado de meus pensamentos por um silvo profundo e agudo, ecoando entre as colunas de pedra que circundavam o Descampo como uma floresta petrificada. Era o chamado de Caijara, o início do ritual. O primeiro passo consistia em abrir o portal dos espíritos, algo que até mesmo uma xamã tão poderosa como ela não conseguia fazer sozinha. Era necessário que os próprios espíritos, habitantes deste plano, fornecessem a energia necessária para forjar a Chave da Alma. O silvo prolongava-se, alternando tons e ritmos, tecendo uma melodia triste e bela. Era acompanhado por gestos e passos singulares, uma dança que Caijara afirmou ser única para cada xamã. Dessa forma, ela se conectava com os seres ancestrais que habitavam essas terras muito antes da Mãe, a deusa da criação, trazer os seres humanos a este mundo.

Observando aquela dança primal, meus pensamentos mergulhavam nas profundezas de minhas memórias, revivendo os momentos marcantes da minha infância ao lado de Caijara. Lembranças preciosas que me fizeram compreender a importância dessa jornada e a magnitude do legado que estava prestes a abrir mão. Através dos gestos harmoniosos de Caijara, eu sentia a presença daqueles que vieram antes de nós, aqueles que trilharam o caminho da sabedoria ancestral e deixaram sua marca indelével no tecido da existência e eles pareciam saber o que eu tramava no âmago de meu ser. Meu estômago retorcia-se e as entranhas pareciam ferver dentro de mim. Afastei-me do Descampo, em busca de refúgio entre as imponentes colunas de pedra. Encontrei abrigo em uma gruta, escondida nas galerias formadas ali, e dei início aos preparativos para meu ataque. Sabia que Caijara não sucumbiria facilmente diante de mim, um aprendiz frágil e marcado pela deficiência. Por isso, sentia-me compelido a recorrer a forças obscuras, em busca de um poder além do meu alcance. Naquele espaço sombrio, rodeado pelas sombras dançantes, senti uma energia densa e sinistra permeando o ar. Os segredos proibidos da escuridão sussurravam em meus ouvidos, seduzindo-me com promessas de poder e vitória. Cada batida acelerada do meu coração ecoava nas paredes úmidas da gruta, como se o próprio espaço se agitasse em antecipação ao que estava por vir.

Enquanto me preparava, uma mistura de culpa e determinação enchia meu ser. Eu sabia que aquilo ia contra tudo o que Caijara me ensinara, contra os princípios sagrados que regiam a nossa jornada. Mas, impulsionado pela sombra da minha própria insuficiência, eu me convenci de que era a única forma de alcançar o poder necessário para mudar meu destino. A escuridão da gruta parecia se solidificar ao meu redor, envolvendo-me em seu abraço frio e opressor. Eu estava prestes a desafiar a ordem natural das coisas, a adentrar um reino desconhecido e perigoso. Contudo, a voz de Caijara ecoava em minha mente, como um eco distante da sabedoria que ela me transmitira ao longo dos anos. E aquela lembrança me trazia tanto conforto quanto angústia, pois eu sabia que estava prestes a trair a confiança e os ensinamentos da única pessoa que me amara e acreditara em mim. Respirei fundo, absorvendo a escuridão que me rodeava, e me preparei para mergulhar nas sombras em busca do poder que ansiava. Eu estava disposto a pagar o preço necessário para alcançar meu objetivo, mesmo que isso significasse enfrentar as profundezas mais obscuras e desconhecidas.

“Arubarjai?” A voz de Caijara ressoou em meus pensamentos. Sentia-me aliviado ao lembrar que, embora pudesse me comunicar telepaticamente com ela, meus pensamentos permaneciam ocultos. “Arubarjai?”, ela chamou novamente. “Onde você está? Estou preocupada. Não percebi quando partiu. Já forjei a Chave da Alma e agora preciso de sua ajuda para iniciar a abertura do portão.”

Ergui-me e caminhei em direção ao Descampado, onde minha mestra aguardava por mim, alheia ao fato de que o destino que ela havia planejado para mim já não se cumpriria. Em seu desconhecimento, sua própria vida chegaria ao fim pelas mãos daquele a quem ela havia dado a vida.

  • * *

Por dois dias inteiros, Caijara e eu mergulhamos em uma jornada intensa de preparação para o iminente rito de passagem. Após sua dança primal, onde ela forjou a Chave da Alma com fúria e determinação, iniciamos o ritual de purificação. Cuidadosamente colhemos a sagrada raiz da ayahuasca, sentindo sua textura áspera e perfumada sob nossos toques reverentes. Preparamos um chá que emanava um aroma terroso e místico, cientes de que ele nos libertaria de todas as impurezas que carregávamos. Em seguida, adotamos o silêncio e o jejum como companheiros fiéis até o tão esperado dia. Caijara me havia advertido que a lua estaria em seu auge, pendendo majestosamente no ponto mais alto do céu noturno, e que esse seria o momento perfeito para minha consagração. Finalmente o momento esperado chegou em demos início ao ritual.

Ajoelhado solenemente no centro do Descampo, eu aguardava enquanto Caijara entrava em um transe profundo. Seu corpo parecia se fundir com o ambiente, envolto por uma aura misteriosa. Ela entoava cânticos ancestrais com uma voz que oscilava entre os tons celestiais e os sussurros enigmáticos, evocando os espíritos benévolos que pairavam à nossa volta. Ciente de sua fragilidade de nesse momento de conexão espiritual, lancei sobre ela o encanto que havia aprendido em minhas incursões noturnas secretas. Durante anos, procurei pelas trevas ocultas, encontrando-me com entidades sombrias que se tornaram meus segundos mestres, aqueles cujo poder oculto minha mestra havia negado de mim. Quando as primeiras palavras do encantamento escaparam de meus lábios, ela abriu os olhos repentinamente, um sobressalto de terror atravessando seu rosto. No entanto, seu espanto não era direcionado apenas ao encantamento em si ou ao significado que ele representava para ela. Na janela de sua alma, refletida em seus olhos, pude enxergar um grito silencioso de socorro, não clamando por sua própria vida, mas pela minha. Era um aviso aflito, prenunciando as dores e horrores que encontraria pelo caminho dali em diante. No auge do encantamento, o corpo de Caijara flutuou no ar, suspenso por mãos invisíveis que pareciam emanar uma energia arrepiante. Ela contorcia-se de maneiras impossíveis para um ser humano, uma dança macabra que deveria desencadear angústia e agonia, mas não saía de seus lábios sequer um gemido de dor. Então, num instante repentino, ela parou e caiu abruptamente, seus olhos fixados em minha direção. Eles testemunharam o sacrilégio cometido naquele local sagrado.

Levantei-me com tristeza e me aproximei do corpo inerte de minha antiga mestra, ajoelhando-me diante dela e fechando cuidadosamente seus olhos, como se quisesse resguardar sua dignidade mesmo após a traição.

— Perdoe-me, mestra. Mas era necessário que nossos destinos se entrelaçassem nesse desfecho inevitável — murmurei com pesar, sentindo o peso da responsabilidade sobre meus ombros.

Estendi a mão e segurei o cajado que repousava ao lado de seu corpo, erguendo-o em direção à lua. Cantei invocações aos espíritos que me guiaram por essa jornada sombria, sentindo o poder de minha falecida mestra fluir através do meu ser. Uma sensação avassaladora tomou conta de mim, uma fusão entre minha própria essência e o legado ancestral que ela representava. Então, dei início ao ritual que me havia conduzido até ali. Cada passo do caminho percorrido ao longo desses anos, cada traição à minha mestra, cada sacrilégio em relação ao meu legado, cada desrespeito àquele lugar ancestral, tudo isso convergia para um único objetivo: trazer de volta à vida os pais que nunca conheci. Enquanto o ritual se estendia, risos guturais e sinistros ecoavam ao meu redor, permeando o ar com uma atmosfera nefasta. Sombras grotescas e distorcidas se contorciam em um redemoinho sombrio diante de mim, assumindo a forma de duas silhuetas humanas. Um misto de euforia e apreensão percorreu meu ser, pois acreditava ter alcançado meu objetivo de trazer de volta meus pais, perdidos para sempre. Mas à medida que as sombras se solidificavam, revelando detalhes macabros, percebi o cruel engano dos espíritos que me acompanhavam. Aquelas figuras assumiram formas monstruosas, transmutando-se em uma Anta com presas afiadas e um Lobo-Guará com olhos sinistros.

O terror se apossou de mim, e meus gritos desesperados e súplicas para que os espíritos cumprissem o que eu havia ordenado ecoaram pelo ar, carregados de uma angústia intensa. No entanto, em vez de atenderem ao meu apelo, as abominações se aproximavam cada vez mais, alimentando-se do meu medo e desespero. Testemunhei minha própria morte de forma violenta, meu corpo inerte caindo pesadamente no chão. Nos meus últimos momentos de consciência, fixei meus olhos na face de minha mestra e percebi, com uma sensação arrepiante, que seus olhos estavam abertos. Parecia que seus lábios se curvavam em um sinistro sorriso, como se ela estivesse ciente de que tudo isso era um preço a pagar pelo egoísmo e pela arrogância que me guiaram.

 
Leia mais...

from bolhaverso

Introduction

This post is a Howto to install Mastodon 4.1.2 using Docker.

We hope you can install Mastodon 4.1.2 using docker like we did.

This is almost the same setup we use to run the instance https://bolha.us.


Information Section

Base Linux System

Ubuntu 20.04 or higher, always.

We're running a Virtual Machine (KVM) inside an open-source Hypervisor.

Hardware size

This proposal uses only docker to handle 500 active users in a 1500 registered server running on a single node (KVM).

  • vpcu: 8 (12 ideal)
  • memory: 12 gb ram (16 gb ideal)
  • network: 500 mbits network minimal (1 gbit ideal)
  • disk: 670 gb

Partition layout

  • root (50g)
  • /var/lib/docker (50g)
  • /var/log (50g)
  • /opt (500g)
  • /tmp (10g)
  • /swapfile (10g)

OPT reserves

  • 250 gb reserved for mastodon upload files
  • 50 gb reserved for elastic
  • 50 gb reserved for postgres
  • 25 gb reserved for redis
  • 25 gb reserved for nginx cache (if in the same server)
  • 100 gb reserved for normal growth of your mastodon instance

Our Baremetal Provider

  • OVH Canada
    • OVH BareMetal ECO
    • Running ProxMox 7.1

We have our own BareMetal Server with ProxMox 7.

We have several Virtual Machines running different Fediverse Tools.

Our VPS Providers

We use OVH/Canada VPS for

  • Load Balancer (NGINX Primary)
  • Video Conference (Our Jitsi instance)

We use VULTR/VPS

  • Load Balancer (NGINX standby)
  • Monitoring (Status Kuma)
  • Other notification services

Other Providers

  • Namecheap to register our domains.
  • CloudFlare to configure and serve DNS Records.
  • Wasabi as our Object Storage/CDN for Mastodon Media
  • BlackBlaze as our Object Storage for Backup

OnPrem Services

  • We're using Uptime Kuma to monitor our instance.
  • We're running our own SMTP Mail Server (Zimbra 8).

PreReqs Section

IPTABLES Config

if you are running nginx on the same machine

  • 22, 80, 443 TCP opened
  • all other traffic blocked on the filter input table

if you are running nginx externally

  • 22 TCP opened
  • 3000 and 4000 TCP only to your NGINX IP
  • all other traffic blocked on the filter input table

in your nginx server (if it's dedicated to mastodon)

  • 22, 80, 443 TCP opened
  • all other traffic blocked on the filter input table

Fail2ban Config

Use it

  • get your port 22 (ssh) protected always

App-armor

First, It's essential to have it up and running continuously.

However, it can cause abnormal behaviors in some scenarios. It's best to keep this component disabled – during the installation, especially if you don't know how to use it or how to configure profiles in case of a problem between docker, mastodon, and app-armor.

It usually won't interfere with the docker or mastodon configuration, but, in case of problems with aa-profiles, we won't cover the solution here. It's best for you to disable it during the installation, and you can re-enable it after, if you want, and know what you are doing.

During the how-to validation, the default Ubuntu app-armor config was enabled, and everything worked fine. However, it's important to mention this in the case of different app-armor configs.


Installation section

1. Installing docker

installing

curl https://get.docker.com | bash

enabling

systemctl enable docker

starting

systemctl start docker

2. Installing docker-compose

installing

curl -s https://api.github.com/repos/docker/compose/releases/latest | grep browser_download_url  | grep docker-compose-linux-x86_64 | cut -d '"' -f 4 | wget -qi -

enabling

chmod +x docker-compose-linux-x86_64

moving to /usr/local/bin, make sure that the dir it's in the PATH var.

mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

3. Creating directories

main dirs

mkdir -p /opt/mastodon/
mkdir -p /opt/mastodon/{docker,data}

sub-dirs

mkdir -p /opt/mastodon/data/{app,web,database}
mkdir -p /opt/mastodon/data/database/{postgresql,redis,elasticsearch}
mkdir -p /opt/mastodon/data/web/{public,system}

4. Configuring permissions

creating user and groups

groupadd -g 991 mastodon
useradd mastodon -u 991 -g 991

fixing web perms

chown -R mastodon:mastodon /opt/mastodon/data/web

fixing database perms

chown -R 1000:1000 /opt/mastodon/data/database/elasticsearch

5. Creating docker config

create the file

vim /opt/mastodon/docker/docker-compose.yml

content

version: '3'

services:
  postgresql:
    image: "postgres:${POSTGRESQL_VERSION}"
    container_name: mastodon_postgresql
    restart: always
    env_file: 
      - database.env
      - versions.env
    shm_size: 256mb
    healthcheck:
      test: ['CMD', 'pg_isready', '-U', 'postgres']
    volumes:
      - postgresql:/var/lib/postgresql/data
    networks:
      - internal_network

  redis:
    image: "redis:${REDIS_VERSION}"
    container_name: mastodon_redis
    restart: always
    env_file: 
      - database.env
      - versions.env
    healthcheck:
      test: ['CMD', 'redis-cli', 'ping']
    volumes:
      - redis:/data
    networks:
      - internal_network

  redis-volatile:
    image: "redis:${REDIS_VERSION}"
    container_name: mastodon_redis_cache
    restart: always
    env_file: 
      - database.env
      - versions.env
    healthcheck:
      test: ['CMD', 'redis-cli', 'ping']
    networks:
      - internal_network

  elasticsearch:
    image: "elasticsearch:${ELASTICSEARCH_VERSION}"
    container_name: mastodon_elastisearch
    restart: always
    env_file: 
      - database.env
      - versions.env
    environment:
      - cluster.name=elasticsearch-mastodon
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - xpack.security.enabled=true
      - ingest.geoip.downloader.enabled=false
    ulimits:
      memlock:
        soft: -1
        hard: -1
    healthcheck:
      test: ["CMD-SHELL", "nc -z elasticsearch 9200"]
    volumes:
      - elasticsearch:/usr/share/elasticsearch/data
    networks:
      - internal_network

  website:
    image: "tootsuite/mastodon:${MASTODON_VERSION}"
    container_name: mastodon_website
    env_file: 
      - application.env
      - database.env
      - versions.env
    command: bash -c "bundle exec rails s -p 3000"
    restart: always    
    depends_on:
      - postgresql
      - redis
      - redis-volatile
      - elasticsearch
    ports:
      - '3000:3000'
    networks:
      - internal_network
      - external_network
    healthcheck:
      test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:3000/health || exit 1']
    volumes:
      - public:/opt/mastodon/public
      - uploads:/opt/mastodon/public/system
      - app:/opt/mastodon/app
       
  streaming:
    image: "tootsuite/mastodon:${MASTODON_VERSION}"
    container_name: mastodon_streaming
    env_file: 
      - application.env
      - database.env
      - versions.env
    command: node ./streaming
    environment:
      - DB_POOL=4
    restart: always
    depends_on:
      - postgresql
      - redis
      - redis-volatile
      - elasticsearch
    ports:
      - '4000:4000'
    networks:
      - internal_network
      - external_network
    healthcheck:
      test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1']
    volumes:
      - public:/opt/mastodon/public
      - uploads:/opt/mastodon/public/system
      - app:/opt/mastodon/app

  sidekiq:
    image: "tootsuite/mastodon:${MASTODON_VERSION}"
    container_name: mastodon_sidekiq
    env_file: 
      - application.env
      - database.env
      - versions.env
    restart: always
    depends_on:
      - postgresql
      - redis
      - redis-volatile
      - website
    networks:
      - internal_network
      - external_network
    environment:
      - DB_POOL=18
    healthcheck:
      test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"]
    command: bundle exec sidekiq -c 18
    volumes:
      - public:/opt/mastodon/public
      - uploads:/opt/mastodon/public/system
      - app:/opt/mastodon/app

  shell:
    image: "tootsuite/mastodon:${MASTODON_VERSION}"
    env_file: 
      - application.env
      - database.env
      - versions.env
    command: /bin/bash 
    restart: "no"
    networks:
      - internal_network
      - external_network
    volumes:
      - public:/opt/mastodon/public
      - uploads:/opt/mastodon/public/system
      - app:/opt/mastodon/app

networks:
  external_network:
  internal_network:
    internal: true

volumes:
  postgresql:
    driver_opts:
      type: none
      device: /opt/mastodon/data/database/postgresql
      o: bind    
  redis:
    driver_opts:
      type: none
      device: /opt/mastodon/data/database/redis
      o: bind    
  elasticsearch:
    driver_opts:
      type: none
      device: /opt/mastodon/data/database/elasticsearch
      o: bind    
  uploads:
    driver_opts:
      type: none
      device: /opt/mastodon/data/web/system
      o: bind
  app:
    driver_opts:
      type: none
      device: /opt/mastodon/data/app
      o: bind
  public:
    driver_opts:
      type: none
      device: /opt/mastodon/data/web/public
      o: bind

6. Env Files

6.1 versions.env

create the versions.env file

vim /opt/mastodon/docker/versions.env

content

MASTODON_VERSION=v4.1.2
POSTGRESQL_VERSION=14
ELASTICSEARCH_VERSION=7.17.10
REDIS_VERSION=7

creating a symbolic link to load the versions properly

cd /opt/mastodon/docker; ln -s versions.env .env

6.2 application.env

create the application.env file

vim /opt/mastodon/docker/application.env

content

# environment config

RAILS_ENV=production
NODE_ENV=production

# web performance/tuning/concurrency

WEB_CONCURRENCY=2
MAX_THREADS=4

# locale config

DEFAULT_LOCALE=en

# local domain of your instance

LOCAL_DOMAIN=dev.bolha.us

# redirect to the first profile?

SINGLE_USER_MODE=false

# rails will serve static files?

RAILS_SERVE_STATIC_FILES=true

# email config

SMTP_SERVER=smtp.provider.tld
SMTP_PORT=587
SMTP_LOGIN=mastodon@provider.tld
SMTP_AUTH_METHOD=plain
SMTP_FROM_ADDRESS=mastodon@provider.tld
SMTP_PASSWORD=change_this_password_to_the_real_one

# secrets

SECRET_KEY_BASE=YOU_WILL_GENERATE_AND_REPLACE_HERE_LATER_CONTINUE_THE_DOC
OTP_SECRET=YOU_WILL_GENERATE_AND_REPLACE_HERE_LATER_CONTINUE_THE_DOC

# web push

VAPID_PRIVATE_KEY=YOU_WILL_GENERATE_AND_REPLACE_HERE_LATER_CONTINUE_THE_DOC
VAPID_PUBLIC_KEY=YOU_WILL_GENERATE_AND_REPLACE_HERE_LATER_CONTINUE_THE_DOC

6.3 database.env

create the database.env file

vim /opt/mastodon/docker/database.env

content

# postgresql config

POSTGRES_HOST=postgresql
POSTGRES_USER=mastodon
POSTGRES_DB=mastodon_production
POSTGRES_PASSWORD=you_will_change_this_password_ahead_on_this_doc

# elasticsearch config

ES_JAVA_OPTS="-Xms1024m -Xmx2048m"
ELASTIC_PASSWORD=you_will_change_this_password_ahead_on_this_doc

# redis config

REDIS_HOST=redis
REDIS_PORT=6379
REDIS_URL=redis://redis:6379

# redis cache config

CACHE_REDIS_HOST=redis-volatile
CACHE_REDIS_PORT=6379
CACHE_REDIS_URL=redis://redis-volatile:6379

# postgresql mastodon integration

DB_HOST=postgresql
DB_USER=mastodon
DB_NAME=mastodon_production
DB_PASS=you_will_change_this_password_ahead_on_this_doc
DB_PORT=5432

# elasticsearch mastodon integration

ES_ENABLED=true
ES_HOST=elasticsearch
ES_PORT=9200
ES_USER=elastic
ES_PASS=you_will_change_this_password_ahead_on_this_doc

7. generating secrets and passwords

7.1 secret key and OTP secret

Now we need to generate two secrets, SECRETKEYBASE and OTP_SECRET.

From the docker host run

$ docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell bundle exec rake secret

Yes, you need to run two times, one for each secret and then update the application.env file.

7.2 generate vapid secrets

Now we need to generate the VAPID secrets, VAPIDPRIVATEKEY and VAPIDPUBLICKEY.

From the docker host run

$ docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell bundle exec rake mastodon:webpush:generate_vapid_key

Get the output and append the file application.env

7.3 generate elasticsearch password

Generate a password for the var ELASTIC_PASSWORD

$ openssl rand -hex 15

Update the database.env file, don't forget to update ES_PASS, it's the same password.

7.4 generate postgresql password

Generate a password for the var POSTGRES_PASSWORD

$ openssl rand -hex 15

Update the database.env file.


8. configuring a local nginx to serve mastodon

Here we'll configure an NGINX on the same docker host of our mastodon.

8.1 extracting the static files for nginx cache

This procedure is only used by NGINX for CACHE purposes, mastodon do not use this static files, it's used by NGINX, and NGINX Only.

let's create a docker volume in YOUR NGINX SERVER to store the static mastodon files

$ mkdir -p /opt/www/mastodon/dev.bolha.us/public
$ chown -R mastodon:mastodon /opt/www/mastodon
$ docker volume create --opt type=none --opt device=/opt/www/mastodon/dev.bolha.us/public --opt o=bind mastodon_public_dev-bolha-us_temp_files

now let's copy the files from the container to the device

$ docker run --rm -v "mastodon_public_dev-bolha-us_temp_files:/static" tootsuite/mastodon:v4.1.2 bash -c "cp -r /opt/mastodon/public/* /static/"

nice, check if the files were copied properly

$ ls /opt/www/mastodon/dev.bolha.us/public

output expected

500.html  avatars    embed.js  favicon.ico  inert.css  oops.gif  packs       sounds  sw.js.map                 web-push-icon_favourite.png
assets    badge.png  emoji     headers      ocr        oops.png  robots.txt  sw.js   web-push-icon_expand.png  web-push-icon_reblog.png

now we can remove our docker volume; we only needed the volume for the copy.

$ docker volume rm mastodon_public_dev-bolha-us_temp_files

ok, now we have a directory to be used by nginx cache to serve the static files.

8.2 Creating directories

$ mkdir -p /opt/nginx/{docker,html,vhost,conf,stream,certbot,cache,logs}
$ mkdir -p /opt/nginx/certbot/{html,conf}
$ mkdir -p /opt/nginx/cache/public/4.1.2

8.3 Creating nginx.conf

Let's create our nginx.conf

$ vim /opt/nginx/conf/nginx.conf

The contents of the file

user nginx;
worker_processes auto;

pid        /var/run/nginx.pid;

include /etc/nginx/conf.d/*.conf;

events {
	worker_connections 2048;
}

http {

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;

	keepalive_timeout 65;
	types_hash_max_size 2048;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;
	
	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	gzip on;

	include /etc/nginx/vhosts/*.conf;
	include /etc/nginx/sites-enabled/*;

}

stream {

 log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time" "$upstream_addr"';

   include /etc/nginx/stream/*.conf;

}

8.4 Creating default.conf

Let's create our default.conf to avoid nginx container default configs conflict.

$ vim /opt/nginx/vhost/default.conf

The contents of the file

server {
    listen       80;
    server_name  localhost;

    location /.well-known/acme-challenge/ {
      root /var/www/certbot;
    }
  
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

8.5 Creating dev.bolha.us.conf

Now we can create the config of our mastodon instance; we will use dev.bolha.us as our domain, just as an example.

$ vim /opt/nginx/vhost/dev-bolha-us.conf

With this content

# connection configuration

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

# upstream configuration

upstream backend {
    server localhost:3000 fail_timeout=0;
}

upstream streaming {
    server localhost:4000 fail_timeout=0;
}

# cache for static files

proxy_cache_path /var/cache/mastodon/public/4.1.2 levels=1:2 keys_zone=MASTODON_CACHE_v412:10m inactive=7d max_size=3g;

# server configuration

server {
  listen 80;
  server_name dev.bolha.us;

  location /.well-known/acme-challenge/ {
      root /var/www/certbot;
  }
  
  location / { 
    return 301 https://dev.bolha.us$request_uri; 
  }
  
}

server {
  listen 443 ssl http2;
  server_name dev.bolha.us;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on;
  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';

  ssl_session_cache shared:SSL:10m;
  ssl_session_tickets off;

  access_log /var/log/nginx/mastodon-dev-bolha-us-access.log;
  error_log /var/log/nginx/mastodon-dev-bolha-us-error.log;

  ssl_certificate /etc/letsencrypt/live/bolha.us/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/bolha.us/privkey.pem;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 80m;

  root /var/www/mastodon/dev.bolha.us/public;

  gzip on;
  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml image/x-icon;

  add_header Strict-Transport-Security "max-age=31536000" always;

  location / {
    try_files $uri @proxy;
  }

  location ~ ^/(system/accounts/avatars|system/media_attachments/files) {
    add_header Cache-Control "public, max-age=31536000, immutable";
    add_header Strict-Transport-Security "max-age=31536000" always;
    root /opt/mastodon/;
    try_files $uri @proxy;
  }

  location ~ ^/(emoji|packs) {
    add_header Cache-Control "public, max-age=31536000, immutable";
    add_header Strict-Transport-Security "max-age=31536000" always;
    try_files $uri @proxy;
  }

  location /sw.js {
    add_header Cache-Control "public, max-age=0";
    add_header Strict-Transport-Security "max-age=31536000" always;
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Proxy"";
    proxy_pass_header Server;

    proxy_pass http://backend;
    proxy_buffering on;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    proxy_cache MASTODON_CACHE_v412;
    proxy_cache_valid 200 7d;
    proxy_cache_valid 410 24h;
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
    add_header X-Cached $upstream_cache_status;
    add_header Strict-Transport-Security "max-age=31536000" always;

    tcp_nodelay on;
  }

  location /api/v1/streaming {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Proxy"";

    proxy_pass http://streaming;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  error_page 500 501 502 503 504 /500.html;
}

What do you need to change here?

  • server_name dev.bolha.us;
  • return 301 https://dev.bolha.us$request_uri;
  • server_name dev.bolha.us;
  • access_log /var/log/nginx/mastodon-dev-bolha-us-access.log;
  • error_log /var/log/nginx/mastodon-dev-bolha-us-error.log;
  • ssl_certificate /etc/letsencrypt/live/bolha.us/fullchain.pem;
  • sslcertificatekey /etc/letsencrypt/live/bolha.us/privkey.pem;
  • root /var/www/mastodon/dev.bolha.us/public;

To use this config, we expect that you have it before starting your nginx

  • the directory root with the static files
  • the ssl certificates generated already

Wait and follow the instructions carefully, baby steps!

8.6 Creating the nginx docker-compose configuration

After that, we can create the docker-compose file.

cd /opt/nginx/docker
vim docker-compose.yml

here are the contents of the file

version: '3'

services:
  nginx:
    image: nginx:latest
    container_name: nginx
    restart: always
    network_mode: host
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - nginx_log:/var/log/nginx
      - nginx_vhost:/etc/nginx/vhosts
      - nginx_stream:/etc/nginx/stream
      - nginx_html:/usr/share/nginx/html
      - nginx_cache:/var/cache/mastodon
      - certbot_conf:/etc/letsencrypt
      - certbot_html:/var/www/certbot
      - mastodon_public:/var/www/mastodon
    healthcheck:
      test: ["CMD-SHELL", "wget -O /dev/null http://localhost || exit 1"]
      timeout: 10s
  certbot:
    image: certbot/certbot:latest
    restart: no
    container_name: certbot
    network_mode: host
    volumes:
      - certbot_conf:/etc/letsencrypt
      - certbot_html:/var/www/certbot

volumes:
  mastodon_public:
    driver_opts:
      type: none
      device: /opt/www/mastodon
      o: bind
  nginx_log:
    driver_opts:
      type: none
      device: /opt/nginx/logs
      o: bind
  nginx_cache:
    driver_opts:
      type: none
      device: /opt/nginx/cache
      o: bind
  nginx_vhost:
    driver_opts:
      type: none
      device: /opt/nginx/vhost
      o: bind
  nginx_stream:
    driver_opts:
      type: none
      device: /opt/nginx/stream
      o: bind
  nginx_html:
    driver_opts:
      type: none
      device: /opt/nginx/html
      o: bind
  certbot_conf:
    driver_opts:
      type: none
      device: /opt/nginx/certbot/conf
      o: bind
  certbot_html:
    driver_opts:
      type: none
      device: /opt/nginx/certbot/html
      o: bind

8.7 Creating the letsencrypt certificate

let's create the certificate first. It would be best to ensure that your domain points to your nginx docker server or cerbot will fail during the certificate generation.

$ cd /opt/nginx/docker
$ docker-compose run --rm certbot certonly --webroot --webroot-path /var/www/certbot/ -d dev.bolha.us

add the command to renew to your crontab

$ crontab -e

add this command

00 3 * * * docker-compose /opt/nginx/docker/docker-compose.yml run --rm certbot renew

8.8 Starting NGINX

now let's run our nginx :)

$ cd /opt/nginx/docker
$ docker-compose -up -d

check if your nginx is running accordingly

$ docker ps
$ docker logs -f


9. Configuring an external NGINX dedicated to mastodon

Point the domain to the external nginx server.

Follow section 8 in your NGINX Server.|

The static files are only needed by NGINX, you do not need to do that part on the mastodon server.

Open the ports 3000 and 4000 TCP for the NGINX IP on your Mastodon Server.


10. Configuring an existing (external) non-docker NGINX

Follow the instructions from the sections:

  • 8.1
  • 8.5

You need to create the cache directory for nginx

proxy_cache_path /var/cache/mastodon/public/4.1.2 levels=1:2 keys_zone=MASTODON_CACHE_v412:10m inactive=7d max_size=3g;

You need to generate your certs.

You need to adjust to having it running in your setup, we don't know your structure, so we can't cover this here, sorry.


11. Starting your Mastodon (Finally, right? :)

If you get here, you're already a warrior :)

Let's do it!

Go to your mastodon server docker config directory.

$ cd /opt/mastodon/docker

11.1 pulling the images

pulling

$ docker-compose pull

output expected

 ✔ postgresql Pulled                                                                                
 ✔ redis  Pulled
 ✔ redis-volatile Skipped - Image is already being pulled by redis                                                                                                     
 ✔ elasticsearch Pulled
 ✔ website Pulled                                                                                                                                                    
 ✔ streaming Skipped - Image is already being pulled by website                                                                                                       
 ✔ sidekiq Skipped - image is already being pulled by website
✔ shell Skipped - Image is already being pulled by website

11.2 starting postgresql and redis

starting databases

$ docker-compose up -d postgresql redis redis-volatile

output expected

 ✔ Network docker_internal_network  Created                                                                                                                            0.0s
 ✔ Network docker_external_network  Created                                                                                                                            0.0s
 ✔ Volume "docker_elasticsearch"    Created                                                                                                                            0.0s
 ✔ Volume "docker_public"           Created                                                                                                                            0.0s
 ✔ Volume "docker_uploads"          Created                                                                                                                            0.0s
 ✔ Volume "docker_app"              Created                                                                                                                            0.0s
 ✔ Volume "docker_postgresql"       Created                                                                                                                            0.0s
 ✔ Volume "docker_redis"            Created                                                                                                                            0.0s
 ✔ Container mastodon_redis         Started                                                                                                                            0.5s
 ✔ Container mastodon_redis_cache   Started                                                                                                                            0.5s
 ✔ Container mastodon_postgresql    Started                                                                                                                            0.5s                                                                                                                      

11.2 running the database setup

$ docker-compose run --rm shell bundle exec rake db:setup

output expected

Database 'mastodon_production' already exists

11.3 starting remaining services

$ docker-compose up -d

output expected

+] Running 8/8
 ✔ Container mastodon_elastisearch  Started                                                                                                                                                                                                                                            1.1s
 ✔ Container mastodon_website       Started                                                                                                                            1.6s
 ✔ Container mastodon_streaming     Started                                                                                                                            1.6s
 ✔ Container mastodon_sidekiq       Started                                                                                                                            2.2s

11.4 Checking everything

let's verify our containers

root@dev:/opt/nginx/docker# docker ps

output expected

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS                            PORTS                                NAMES
ac17eef8d384   nginx:latest "/docker-entrypoint.…" 6 seconds ago    Up 5 seconds (health: starting)                                        mastodon_nginx
adabce4171e2   tootsuite/mastodon:v4.1.2 "/usr/bin/tini -- bu…" 25 minutes ago   Up 25 minutes (healthy)           3000/tcp, 4000/tcp                   mastodon_sidekiq
47d8b9720fc4   tootsuite/mastodon:v4.1.2   "/usr/bin/tini -- ba…"   25 minutes ago   Up 25 minutes (healthy)           127.0.0.1:3000->3000/tcp, 4000/tcp   mastodon_website
f55bea899b31   tootsuite/mastodon:v4.1.2   "/usr/bin/tini -- no…"   25 minutes ago   Up 25 minutes (healthy)           3000/tcp, 127.0.0.1:4000->4000/tcp   mastodon_streaming
e2ffd239c210   redis:7 "docker-entrypoint.s…" 25 minutes ago   Up 25 minutes (healthy)                                                mastodon_redis_cache
3914fc3f784b   postgres:14 "docker-entrypoint.s…" 25 minutes ago   Up 25 minutes (healthy)                                                mastodon_postgresql
d02fffd8f108   elasticsearch:7.17.10       "/bin/tini -- /usr/l…"   25 minutes ago   Up 25 minutes (healthy)                                                mastodon_elastisearch
e500590b9a20   redis:7 "docker-entrypoint.s…" 25 minutes ago   Up 25 minutes (healthy)                                                mastodon_redis

11.5 Enabling registration with approval

$ cd /opt/mastodon/docker
$ docker-compose run --rm shell bin/tootctl settings registrations approved

12. Creating users via terminal

Creating an owner

$ docker-compose run --rm shell bin/tootctl accounts create gutocarvalho --email gutocarvalho@bolha.us --confirmed --role Owner
$ docker-compose run --rm shell bin/tootctl accounts approve gutocarvalho

Creating an admin

$ docker-compose run --rm shell bin/tootctl accounts create joseaugusto --email joseaaugusto@bolha.us --confirmed --role Admin
$ docker-compose run --rm shell bin/tootctl accounts approve joseaugusto

Creating an moderator

$ docker-compose run --rm shell bin/tootctl accounts create augustocarvalho --email augustocarvalho@bolha.us --confirmed --role Moderator
$ docker-compose run --rm shell bin/tootctl accounts approve augustocarvalho

Creating a normal user

$ docker-compose run --rm shell bin/tootctl accounts create arturcarvalho --email arturcarvalho@bolha.us --confirmed
$ docker-compose run --rm shell bin/tootctl accounts approve arturcarvalho

13. Accessing your mastodon!

Go to your mastodon!

https://dev.bolha.us

It's ready and should work, you just need to login.


14. Creating maintenance tasks using crontab

open your root crontab

$ crontab -e

indexing data of elasticsearch to create the 'https://dev.bolha.us/explore' content

00 */6 * * * docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell tootctl search deploy --concurrency 4

this will recount all accounts numbers of the instance daily

30 1 * * * docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell tootctl cache recount accounts --concurrency 4

this will force all users to follow special instance accounts

00 2 * * * docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell tootctl accounts follow status

00 2 * * * docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell tootctl accounts follow news

00 2 * * * docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell tootctl accounts follow tips

00 2 * * * docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell tootctl accounts follow gutocarvalho

this will clean media from external instances in our local cache, it will clean everything older than 15 days in the cache

30 2 * * * docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell tootctl media remove --days=15 --concurrency 4

this will clean local thumbnails for preview cards in our local cache; it will clean everything older than 15 days in the cache

00 3 * * * docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell tootctl preview_cards remove --days=15 --concurrency 4

this will regenerate all user feeds every Sunday

00 1 * * 0 docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell tootctl feeds clear
    
00 2 * * 0 docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell tootctl feeds build --concurrency 4

this will remove statuses without users/references every Sunday

00 3 * * 0 docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell tootctl statuses remove --days 60

References!


15. Maintenance tasks

Remember to add this before the command; you will use tootctl inside the mastodon_shell container

$ docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell COMMAND

Example

$ docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell tootctl accounts modify user@domain.tld --approve

I'll remove the first part of the command to make the examples easily understood.

15.1 Accounts Tasks

Reset password

$ tootctl accounts modify user@domain.tld --reset-password

Disable user

$ tootctl accounts modify user@domain.tld --disable

Approve user

$ tootctl accounts modify user@domain.tld --approve

Disable 2FA in case someone forgets the 2FA code or device

$ tootctl accounts modify user@domain.tld --disable-2fa

If you are not seeing user data from a specific user or domain

$ tootctl accounts refresh user@domain.tld

Delete

$ tootctl accounts delete user@domain.tld

15.2 Other tasks

If you are not seeing images from a specific domain

$ tootctl media refresh domain.tld --concurrency 4

Remove all accounts from a given DOMAIN without leaving behind any records. Unlike a suspension, if the DOMAIN still exists in the wild, it means the accounts could return if they are resolved again.

$ tootctl domains purge domain.tld --concurrency 4

Remove remote accounts that no longer exist. Queries every single remote account in the database to determine if it still exists on the origin server, and if it doesn't, then remove it from the database.

Accounts with confirmed activity within the last week are excluded from the checks, in case the server is down.

$ tootctl accounts cull domain.tld --concurrency 4

16. Backup

You can use whatever you want to protect your data; we'll focus on what you need to do before the backup and what you need to backup to have your data replicated to a safe location.

16.1 Cold Backup

  1. stop all containers

  2. run a backup of your /opt/mastodon, /opt/nginx, and /opt/www

16.2 Hot Backup

  1. run a backup of your postgresql

  2. run a backup of your /opt/mastodon/data/web directory

  3. run a backup of your /opt/mastodon/docker directory

  4. run a backup of your /opt/nginx directory

16.3 Our Backup Provider

Our automation sends our backup to blackblaze object storage, it's a good and cheap provider; we do full backups of pgsql and configs every day.


17. API Information

You cant get some info from the API using curl and jq

$ curl -s https://dev.bolha.us/api/v1/instance | jq
$ curl -s https://dev.bolha.us/api/v2/instance | jq

Let's create a script to get some information from mastodon:

    $ vim mastodon_api_info.sh

Script Content

#!/bin/bash

INSTANCE_ENDPOINT_V1="https://dev.bolha.us/api/v1/instance"
INSTANCE_ENDPOINT_V2="https://dev.bolha.us/api/v2/instance"
INSTANCE_URL="https://dev.bolha.us"

COUNT_TOTAL_USERS=$(curl -s $INSTANCE_ENDPOINT_V1 | jq '.stats.user_count')
COUNT_TOTAL_STATUS=$(curl -s $INSTANCE_ENDPOINT_V1 | jq '.stats.status_count')
COUNT_TOTAL_DOMAINS=$(curl -s $INSTANCE_ENDPOINT_V1 | jq '.stats.domain_count')
COUNT_ACTIVE_USERS=$(curl -s $INSTANCE_ENDPOINT_V2 | jq '.usage.users.active_month')
COUNT_POOL_LIMIT=$(curl -s $INSTANCE_ENDPOINT_V2 | jq '.configuration.polls.max_options')
COUNT_CHAR_LIMIT=$(curl -s $INSTANCE_ENDPOINT_V2 | jq '.configuration.statuses.max_characters')
INSTANCE_VERSION=$(curl -s $INSTANCE_ENDPOINT_V2 | jq '.version')

echo "Number of total registered users: $COUNT_TOTAL_USERS"
echo "Number of total statuses: $COUNT_TOTAL_STATUS"
echo "Number of total known domains: $COUNT_TOTAL_DOMAINS"
echo "Number of active users (this month): $COUNT_ACTIVE_USERS"
echo "Number of pool options: $COUNT_POOL_LIMIT"
echo "Number of char limit: $COUNT_CHAR_LIMIT"
echo "Mastodon instance version: $INSTANCE_VERSION"

Execute

$ bash mastodon_api_info.sh

Expected output (from bolha.us)

Number of total registered users: 1464
Number of total statuses: 51191
Number of total known domains: 16237
Number of active users (this month): 618
Number of pool options: 4
Number of char limit: 500
Mastodon instance version: "4.1.2"

:)


18. Upgrade

This process will cover the upgrade for minor versions only.

4.1.x to 4.1.y for example.

Here we'll cover the scenario where mastodon and nginx run on the same server.

18.1 pre-upgrade

  1. run a backup of your postgresql

  2. run a backup of your /opt/mastodon/data/web/system directory

  3. run a backup of your /opt/mastodon/docker directory

  4. run a backup of your /opt/nginx directory

  5. stop mastodon service

  6. stop nginx services

18.2 upgrading

  1. Clear the directory /opt/www/mastodon/dev.bolha.us/public/

  2. Repeat section 8.1 using the new docker image version on the command line to copy the files.

....
....
....

$ docker run --rm -v "mastodon_public_dev-bolha-us_temp_files:/static" tootsuite/mastodon:v4.1.NEW_VERSION_HERE bash -c "cp -r /opt/mastodon/public/* /static/"

....
....
....

Follow section 8.1 properly. It's essential to have a solid upgrade.

  1. Create a directory for the new mastodon version /opt/nginx/cache/public/4.1.x

  2. Update the line proxycachepath with the new directory on the file /opt/nginx/vhost/via.bolha.us.conf.

  3. Start nginx

$ cd /opt/nginx/docker
$ docker-compose up -d
  1. Update the file /opt/mastodon/docker/versions.env with the new mastodon version.

  2. Start all mastodon services

$ cd /opt/mastodon/docker
$ docker-compose up -d
  1. Run the database migration
$ docker-compose -f /opt/mastodon/docker/docker-compose.yml run --rm shell bundle exec rake db:migrate

That's it!

:)


19. Final notes

I hope you can use this doc to configure your own instance like we did.

I wish to find something like this one year ago when I started my studies in the fediverse tools and Mastodon. :)

If you need assistance, you can reach me on the matrix @gutocarvalho@bolha.chat or mastodon @gutocarvalho@bolha.us.

:)

This post inspired our post:

Their post inspired the work, and we tried to expand it the best we could.

The first version of bolha.us followed their instructions, and this new post is just to keep the information flowing and updated.

I want to thank the “sleeplessbeastie.eu” team for the excellent work; we are running in prod because of you :)


20. Next posts

  1. Enabling Object Storage using Wasabi

  2. Individual Sidekiqs Containers For Queues

  3. LibreTranslate installation and integration

  4. Observability with Prometheus + Grafana

  5. Mastodon With TOR


About us

Bolha Means Bubble.

We're a collective of Open Source/DevOps/CoudNative IT people from Brazil :)

Visit our site https://bolha.io

Visit our Mastodon Instance https://bolha.us

Visit our PixelFed Instance https://bolha.photos

Visit our Matrix Instance

Visit our Lemmy Instance https://bolha.social

Visit our Jitsi: https://video.bolha.tools

Visit our WriteFreely: https://bolha.blog

Visit our LibreTranslate: https://libretranslate.bolha.tools

If you want, you can thank me via mastodon!

@gutocarvalho@bolha.us

Cheers!

 
Read more...

from josir

O Mestre apertador de parafusos

Atualmente, trabalho remotamente com vários desenvolvedores em vários pontos do Brasil. É uma experiência muito rica pois, mesmo estando todos no Brasil, trato com pessoas com culturas, gírias e comportamentos distintos.

Todos são ótimos profissionais do ponto de vista técnico, mas muitas vezes um tanto inocentes em relação ao trato com o dinheiro e com o valor do próprio trabalho. Um dos pontos que mais me incomoda é quando peço uma tarefa e o desenvolvedor diz que não irá colocar aquela tarefa em sua planilha de horas por tê-la feito muito rápido.

E para eles gosto sempre de contar a fábula do “Mestre apertador de parafusos”:

Um navio chegou em um porto distante e estava com um problema no motor. Chamaram um mestre que trabalhava há muito tempo no porto para fazer o orçamento e ele cobrou 10.000,00 para consertar o motor.

Como era perigoso sair do porto com o problema no motor, o capitão do navio aceitou o orçamento, mas foi acompanhá-lo no serviço.

O sujeito entrou no navio, analisou o problema, pegou uma chave de fenda e apertou 2 parafusos. O motor na mesma hora passou a funcionar corretamente.

O capitão chegou e falou: você vai me cobrar 10.000 por ter apertado 2 parafusos???

O técnico então falou: não senhor! Para apertar os parafusos, eu cobro apenas R$1,00!! Estou cobrando 9,999,00 pelo meu conhecimento de saber QUAIS parafusos eu preciso apertar!!

Ou seja, temos que saber mensurar o valor correto do nosso trabalho, não só em termos de horas trabalhadas, mas também no valor que o trabalho representa em termos do conhecimento empregado. Muitas vezes, um atributo novo em um CSS agrega muito mais valor do que 100 linhas de código!

Enfim, fico sempre atento para nunca fazer o papel do capitão do navio que não reconhece o trabalho de quem está consertando o navio. O reconhecimento do trabalho de uma pessoa tem um valor inestimável principalmente quando o reconhecimento vem dos seus pares. É fundamental que o gestor ou coordenador de projetos fique sempre atento a essa questão.

Para completar: em meus 40 anos de experiência profissional, consegui identificar 3 tipos de capitães em relação ao reconhecimento de seus marujos: o atento, o distraído e o ganancioso. O atento é o que busca reconhecer os esforços de sua equipe e a retribui tanto em forma de elogios, mas também financeiramente. O ganancioso é o que sabe que sua equipe é boa, mas não a reconhece publicamente por inúmeros fatores espúrios.

Contudo, a maior parte deles se encaixa na categoria dos distraídos: estão tão entretidos em suas tarefas diárias que não conseguem perceber/divulgar o mérito de sua equipe. E dentro dessa categoria, tem muito capitão de navio que não reconhece o trabalho alheio por ignorância, ou seja, por não perceber que aquele trabalho tem um valor agregado que não se contabiliza no número de parafusos apertados.

Nestes casos, cabe ao mestre, ao artesão, ao técnico, nós, desenvolvedores de software, engenheiros, etc mostrar o valor de nosso trabalho. Passar a odiar o capitão não vai resolver o seu problema. Tente se colocar no lugar dele pois mutas vezes ele só está precisando que lhe abram os olhos!

 
Leia mais...

from plastico

As vezes eu queria voltar para aquele pé de porta Deitado numa cadeira de balanço de fitilho Olhando aquele céu azul castigante Aquela paisagem verde começando a amarelar Sentindo a brisa quente do meio dia

Se apenas aquela calçada não estivesse destruída Aquelas telhas ameaçando cair na cabeça de qualquer um que se atreva Se apenas o terreiro não estivesse coberto de mato

Se o passado não fosse apenas uma memória de uma dia quente

 
Leia mais...

from Essa semana na minha vida

Estive doente a dois anos e relembrando da situação escrevi algumas notas

O hospital, em sua essência, é uma estrutura que reflete a complexidade e a contradição do ser humano. Como uma metáfora kafkiana, ele se apresenta como um labirinto onde a vida e a morte se entrelaçam em uma dança macabra. Ninguém deseja estar ali, mas todos precisam em algum momento. É um lugar de cuidado e confinamento, onde o tempo parece suspenso e a espera é a única certeza. Aqueles que se encontram sob seus cuidados são envolvidos por uma aura de incerteza e dúvida. A precisão e a clareza são substituídas por processos confusos e desorientadores, e a sensação de que nada está sob controle é constante. Cada indivíduo lida com suas próprias angústias e medos, enquanto os profissionais de saúde tentam trazer conforto e cura em meio à turbulência. O hospital é um espaço onde a fragilidade humana se mostra em sua plenitude. A vida e a morte caminham lado a lado, e a cada dia é uma nova batalha pela sobrevivência.

Ao adentrar um hospital, toda a sua vida parece ficar para trás. Seus pertences são deixados do lado de fora, incluindo o inseparável celular. Suas roupas são substituídas e uma nova rotina toma conta de você, como se fosse uma outra vida. Esqueça o trabalho, os amigos e a família. Dentro das paredes do hospital, nunca se sabe ao certo quando sairá. Pode ser em alguns dias, semanas ou até mesmo meses, se é que a saída é uma opção.

Os médicos nos hospitais parecem sempre guardar um segredo, como se escondessem algo de nós. Eles aparecem em horários pré-determinados, apenas para conferir se ainda estamos respirando, e em seguida, desaparecem novamente. Quanto aos remédios, é uma incógnita. Alguma enfermeira amável pode deixar escapar o nome de algum medicamento de vez em quando, mas isso não importa muito, já que a maioria dos nomes é um emaranhado de letras e palavras desconhecidas para nós. E, antes que possamos decifrar o que estamos tomando, os remédios já foram trocados novamente.

Ao encontrar um paciente no hospital, a primeira pergunta que surge é sempre sobre a sua condição médica: “E você? O que você tem?” Nesse ambiente, a identidade pessoal do paciente é frequentemente suprimida, seja pela própria doença ou pela estrutura hospitalar em si. Suas roupas, medicamentos, cama e alimentos são rotulados com o seu número de paciente, em vez do seu nome, reforçando essa perda de identidade. A presença de espelhos é escassa, muitas vezes restrita apenas aos banheiros com acesso limitado. O choque em ver seu próprio rosto após semanas sem se olhar no espelho pode ser surpreendente e estranho.Além disso, a mobilidade do paciente é limitada, com o acesso a qualquer lugar além da própria maca sendo uma dificuldade. É no hospital que a linha entre o ser humano e a máquina se mistura, com uma série de equipamentos hospitalares prontos para manter o corpo vivo, incluindo respiradores, monitores cardíacos, sondas e oxímetros. Gradualmente, esses dispositivos se tornam uma parte integrante do paciente, tão essenciais quanto um par de sapatos ou óculos, mas geralmente ligados a uma tomada, impedindo que o paciente se mova livremente pelo espaço.

Em meio a tudo isso, você encontrará apoio em seus colegas de enfermaria – outros indivíduos que, como você, não tiveram muita sorte e acabaram no hospital. Vocês compartilharão histórias de como adoeceram e reclamarão das parafernálias presas ao corpo que os impedem de ir ao banheiro com facilidade. Mas dificilmente falarão sobre seus passados. É como se suas vidas começassem e terminassem ali, naquele ambiente hospitalar.

Um dia, você dorme ao lado de alguém e, no dia seguinte, essa pessoa já não está mais lá. Ela pode ter falecido ou sido transferida para outro lugar. Todo mundo some, morre ou recebe alta, até que chega o momento em que você se torna o paciente que some. Você pode ser transferido para outro lugar ou, se tiver sorte, receber alta médica e voltar para casa.

Quando finalmente chega o momento de voltar para casa, você se sente como uma outra pessoa. Os momentos de fragilidade pelos quais passou no hospital mudaram a forma como você enxerga a vida. Às vezes, você se lembra de alguém que conheceu no hospital, mas não consegue mais lembrar o nome. Ou talvez você se recorde de uma enfermeira ou enfermeiro que foi gentil com você, e isso aquece o seu coração.

 
Leia mais...

from Meu Blog

Bem-vindo

Existe uma rede social que permeia os recônditos mais profundos da internet, talvez algum excêntrico já tenha lhe enviado um convite, ou talvez você mesmo seja esse excêntrico que topou com essa rede. Mas não se preocupe, não há motivo para se alarmar, pois você acaba de se deparar com o Mastodon. Está, caro amigo, é uma rede social comunitária para a troca de textos. Esqueça todo o jargão técnico que os mais ávidos usuários possam proferir – é só isso. Mas o que significa, afinal, uma rede social comunitária? Significa que não há uma entidade corporativa por trás dela, não há magnatas em seus ternos lustrosos e acionistas ávidos por lucrar em cima de você. O Mastodon é administrado por pessoas e grupos do mundo todo, cada um gerenciando suas próprias instâncias. E o que exatamente são essas instâncias? São como pequenos planetas, cada um com seus próprios habitantes e códigos de conduta, mas que, ao mesmo tempo, orbitam em torno do mesmo sol, compartilhando recursos e interconexões. Todos integrantes do mesmo e vasto universo Mastodon.

Uma jóia rara

Pode ser que você esteja aí pensando: “Ah, essa coisa de comunidade é legal e tal, mas se não tiver conteúdo sólido, de que adianta, não é mesmo?” Mas e se eu lhe dissesse que o Mastodon tem muito a oferecer aos seus usuários, tornando-se assim uma plataforma única e especial? Ora, vamos lá. Primeiro e antes de tudo, o Mastodon é um software de código aberto, o que significa que qualquer pessoa pode examinar o código-fonte e contribuir para o desenvolvimento. Isso, por si só, já é uma grande coisa. Mesmo que você não seja um desenvolvedor, você ainda pode colher os benefícios disso. Como? Bem, graças a essa natureza aberta, você vai encontrar uma série de aplicativos para usar com o Mastodon. Isso mesmo, diferente das redes sociais convencionais, onde você está limitado à experiência oferecida pelo aplicativo oficial, no Mastodon você tem dezenas de experiências diferentes para escolher. E se você não gostar da aparência de um aplicativo, é só trocar por outro. Isso é liberdade e flexibilidade como nunca antes vista. Além disso, o fato de ser um software de código aberto garante que o Mastodon não está fazendo nada de errado com seus dados, já que a plataforma é transparente e todas as ações são públicas. Isso é uma garantia de segurança e privacidade que não é encontrada em muitas outras plataformas. E não para por aí. No universo das redes sociais, onde os anúncios são a norma e os usuários são vendidos aos anunciantes, o Mastodon é uma verdadeira exceção. Aqui, você está livre das amarras do capitalismo e do marketing invasivo. Sim, você leu certo: o Mastodon é completamente livre de anúncios! Diferente de outras plataformas, onde os anunciantes são a principal fonte de receita, no Mastodon as instâncias são financiadas por meio de doações voluntárias e não têm fins lucrativos. Isso significa que não há incentivo para que a plataforma venda seus dados ou use suas informações pessoais para fins comerciais. Em vez disso, o objetivo do Mastodon é fornecer uma rede social segura, privada e sem distrações para seus usuários.E se você pensa que acabou está enganado, a rede do elefantinho é diferente de tudo o que você já viu. Aqui, não há algoritmos manipuladores determinando o que você vê em sua linha do tempo. Em vez disso, você é presenteado com postagens em ordem cronológica, sem interferências ou distorções. Não há posts pagos invadindo sua timeline, nem pessoas populares monopolizando os espaços de discussão. Aqui, todo mundo tem uma chance justa de ser ouvido e visto. Não há necessidade de desespero ou competição por uma postagem que será impulsionada por algoritmos. É um ambiente justo e igualitário, onde suas postagens são vistas com base em seu mérito, e não em quem você é ou quanto dinheiro você tem.

Apenas este fato, por si só, já é um tesouro a ser valorizado. E eu nem sequer mencionei que essa rede não é habitada por criaturas maliciosas conhecidas como trolls, ou que ela acolhe uma variedade de comunidades maravilhosas, ou ainda que dispõe de ferramentas excepcionais de acessibilidade. Não, esta rede é mais do que apenas uma plataforma digital – ela é descentralizada, moldada com precisão e projetada para oferecer uma experiência sem paralelo. É evidente que não estamos lidando com uma rede qualquer aqui, meu caro amigo, e eu o convido a dar uma oportunidade a esta maravilha tecnológica. A questão que permanece, entretanto, é como fazê-lo?

Instâncias

Se a sua intenção é adentrar esse vasto universo, é preciso escolher uma instância. Mas não se alarme, pois a convivência é livre entre os integrantes de todas as instâncias. Cada instância é uma entidade única, com suas próprias regras e princípios. Algumas podem ser um lar acolhedor para usuários políticos, outras para mentes científicas ou até mesmo para habilidosos programadores. E quem sabe, talvez exista aquela que se ajuste perfeitamente à sua personalidade e propósito de vida. Escolher a instância certa é como escolher a patota perfeita, a turma que estará sempre próxima de você, repleta de um sentimento de coletividade e de camaradagem que só uma comunidade verdadeira pode trazer.

Se você precisa de algumas dicas de como escolher uma instância segue abaixo uma lista de instâncias brasileiras que podem despertar o seu interesse:

  • A bantu.social é uma comunidade no Mastodon voltada para pessoas não-brancas que desejam ter uma voz e espaço no mundo digital. É um lugar onde o compartilhamento de experiências e a conexão com outras pessoas que compartilham experiências similares é encorajado e valorizado.
  • A bertha.social é um ponto de encontro para a comunidade científica e entusiastas da ciência e jornalismo.
  • A bolha.us é uma comunidade de nerds e entusiastas de tecnologia que buscam discutir assuntos do cotidiano e outros temas diversos. A instância é moderada e busca ser um espaço seguro para todas as pessoas, com debates construtivos e amigáveis.
  • A Colorid.es é uma instância focada na comunidade queer/LGBTQIAPN+. É um ambiente acolhedor e inclusivo, onde as pessoas podem se expressar livremente e ser quem são, sem medo de julgamentos ou discriminações.
  • A fim.social é uma instancia não temática aberta para todos
  • Por fim, a ursal.zone é uma instância que tem como objetivo unir militantes progressistas, feministas e antifascistas da América Latina. É um espaço onde se discute política, ativismo e questões sociais, buscando sempre a justiça e a igualdade.

E para aqueles que desejam descobrir mais instâncias brasileiras, basta acessar o link https://instancias.br-mastodon.online, onde é possível encontrar uma lista das maiores instâncias do Brasil.

Usando o Mastodon

Muito bem, então você escolheu sua instância. Agora, é hora de criar uma conta – um processo semelhante ao que você já deve ter experimentado em outras redes sociais. Mas aqui está um detalhe importante: a política da sua instância pode incluir a verificação manual de novas contas antes de permitir o acesso. Isso pode exigir que você aguarde a liberação da sua conta por um administrador. Pode parecer um inconveniente no início, mas a verificação manual é um procedimento vital para manter a segurança nas instâncias. Ele ajuda a evitar a entrada de trolls e bots indesejados, criando um espaço mais seguro e saudável para todos. Portanto, seja paciente e aguarde a confirmação da sua conta – você estará contribuindo para uma comunidade mais saudável e acolhedora.

Agora, com sua conta verificada e ativada, você adentra o universo do Mastodon. Mas, por onde começar? Bem, como em toda rede social, você pode criar uma biografia, escolher uma foto de perfil que reflita sua personalidade e começar a compartilhar suas ideias. Siga as pessoas que lhe interessam e envolva-se com a comunidade. Contudo, há uma diferença crucial: no Mastodon, você vê o que quer ver. É por isso que existem três linhas do tempo para interação. Parece complexo, mas não se preocupe – é apenas uma questão de escolher o que você está interessado em visualizar. Na Página Inicial, você encontrará tudo o que aqueles que você segue estão fazendo – é uma área exclusiva para isso. Na Linha Local, você descobrirá o que a comunidade da sua instância está compartilhando e criando – é um lugar para você interagir e conhecer pessoas da sua comunidade. Por último, mas não menos importante, temos a Linha Global, onde você poderá encontrar toots, assim são chamadas as postagens, de todas as instâncias do mundo. É um espaço aberto para você descobrir coisas novas e diferentes perspectivas. Portanto, experimente e descubra o que mais lhe agrada.

Bons modos

Ah, mas não pense que é só criar sua conta e começar a postar sem se preocupar com mais nada. O mastodon, como toda boa rede social, tem suas regras, e é importante que você as respeite. Mas, veja bem, não estou falando aqui de coisas óbvias, como evitar discurso de ódio ou preconceito. Isso é o mínimo que se espera de qualquer pessoa minimamente consciente, não é mesmo? Estou falando de coisas um pouco mais sutis, mas igualmente importantes.

Primeiro, vamos falar de acessibilidade, um tema crucial para tornar a experiência de todos mais inclusiva. O mastodon possui uma ferramenta poderosa de descrição de imagens, que você deve usar sempre que postar qualquer imagem. Dedique um tempinho para criar boas descrições, que possam descrever a imagem para pessoas com problemas de visão, mesmo que sejam leves. Acredite, isso fará toda a diferença para muitos usuários. Além disso, há uma ferramenta para marcar conteúdo sensível, que serve para você alertar outros usuários sobre possíveis temas que podem causar desconforto, como suicídios, traumas ou violência. É importante marcar essa opção sempre que abordar esses assuntos, pois assim outros usuários podem desviar facilmente de suas postagens e você não vai inadvertidamente causar mal a ninguém.

Será que vale a pena?

Talvez você se pergunte se todo esse esforço vale a pena, não é mesmo? Migrar para uma nova rede social é trabalhoso, será que vale a pena? Saiba que a resposta a essa indagação reside em seus próprios princípios. Na atualidade, é crucial repensar nossa permanência em plataformas que se beneficiam da propagação do discurso de ódio, que promovem ideologias extremistas de direita, que manipulam a opinião pública a seu bel-prazer, que demitem em massa conforme a própria conveniência e que influenciam diretamente nos resultados eleitorais. Insistir em permanecer nesses ambientes é compactuar com tais práticas nefastas, permitindo que tais comportamentos perdurem e se proliferem ainda mais. Talvez você não alcance a mesma quantidade de likes e compartilhamentos que costumava ter em plataformas anteriores, mas é preciso questionar: isso realmente importa? Em vez de buscar a validação através de métricas vazias, talvez seja mais valioso encontrar um espaço onde você possa se expressar livremente, interagir com comunidades que compartilham dos mesmos valores e ideias, e onde você possa contribuir para uma experiência digital mais positiva e construtiva. É hora de repensar o que realmente valorizamos em nossas interações online e encontrar um lugar onde possamos nos sentir verdadeiramente conectados.

 
Leia mais...

from elysion

Em space inédito das instâncias brasileiras do Mastodon, surge uma questão: seria interessante para o governo brasileiro criar a sua própria instância no Mastodon? A Alemanha oferece um caso importante para a nossa análise.

foto da sede do BfDI Neste dia 28 de abril (uma data bem legal, pois nesse mesmo dia, em 1945, Mussolini era executado e pendurado por partisans antifascistas), a administradora da instância de esquerda, Ursal, promoveu um Space, por meio da plataforma Audon Space, no qual participaram vários membros da instância e de outras instâncias brasileiras, inclusive o administrador da Bolha.

Em determinado momento os administradores das instâncias conversavam sobre a possibilidade de os órgãos de comunicação do governo federal brasileiro, ministérios e autoridades, fundarem sua própria instância no Mastodon, deixando de depender, gerar conteúdo e engajar usuários para as plataformas de capitalistas do vale do silício.

Logo um usuário pensou em uma questão muito pertinente, um problema real: uma instância governamental brasileira poderia sofrer uma terrível influência em uma eventual mudança de governo (cabe ressaltar que o governo de extrema direita brasileiro de 2019-2022 estava em plena consonância com a disseminação de notícias falsas e discurso de ódio, fartamente disseminados no Twitter, Facebook e Youtube).

Foi por isso que pedi a palavra para dar como exemplo o caso do governo alemão. Visto que naquele País existe um órgão independente, não submetido à supervisão do governo (uma espécie de autarquia federal autônoma), que tem por função a proteção de dados e a liberdade de informação, que hospeda uma instância no Mastodon. Tal iniciativa poderia muito bem ser implantada por aqui. Descrevo abaixo as informações que consegui recolher.

Autoridades do Governo Federal Alemão no Mastodon

Segundo a Wikipedia, o Comissário Federal para Proteção de Dados e Liberdade de Informação (BfDI) é uma autoridade federal suprema independente para proteção de dados e liberdade de informação. Sua sede é em Bonn, no distrito de Castell.

Nesta função no sistema federal da Alemanha, ele é de acordo com a Seção 9 da Lei Federal de Proteção de Dados responsável pelo monitoramento da proteção de dados em órgãos públicos federais e em empresas que fornecem serviços de telecomunicações e correios (BDSG). Desde que a Lei Federal de Liberdade de Informação entrou em vigor em 1º de janeiro de 2006, ele também passou a ser Comissário Federal para Liberdade de Informação.

O Comissário Federal para Proteção de Dados e Liberdade de Informação é indicado pelo Governo Federal e eleito pelo Bundestag (parlamento alemão). O mandato é de cinco anos. Ele pode ser reeleito uma vez.

O Comissário Federal monitora a conformidade com as normas de proteção de dados das autoridades federais, outros órgãos públicos do governo federal, bem como empresas de telecomunicações e serviços postais. Além disso suas atribuições incluem proteção de dados tecnológicos, telecomunicações, telemídia e serviços de mensagens.

O atual comissário federal de proteção de dados, Ulrich Kelber, defende que o governo federal desenvolva suas próprias capacidades na área de mídias sociais favoráveis ​​à proteção de dados. Recentemente elaborou um relatório de atividades de sua autoridade, convocando o Centro Federal de Tecnologia da Informação (ITZ Bund) para operar uma instância federal como alternativa gratuita ao Twitter, no Mastodon.

Kelber é considerado um crítico severo das principais plataformas comerciais de mídia social. Além do Twitter, ele está de olho no Facebook em particular. Kelber enfatizou que a operação de uma página de fãs no Facebook não é possível para uma autoridade em conformidade com a proteção de dados.

Já em meados de fevereiro, ele havia instruído a Assessoria de Imprensa Federal (ABP) a parar de operar a fanpage do governo federal no Facebook.

Kelber enfatiza no relatório achar importante o seguinte:

que as mais altas autoridades federais, em particular, deem um bom exemplo e usem as mídias sociais legalmente compatíveis

Quando pensamos na possibilidade de sucesso do Mastodon no Brasil, temos que ter em mente que os principais atores da política, da ciência e da sociedade civil, que se conectam, debatem e divulgam notícias exclusivas, são decisivos para o significado social de uma plataforma.

Se o Mastodon poderá assumir esse papel, isso dependerá de quantas contas importantes chegarão e permanecerão na plataforma.

Na Alemanha há indícios de que isso pode ocorrer:

Além do próprio BfDI, com seus 42 mil seguidores, e do atual Comissário, com 12 mil seguidores, vários ministérios federais alemães já estão com o Mastodon, dentre outros:

No caso dos políticos, são principalmente as pessoas com experiência em rede que ousaram pular para o Mastodon, por exemplo, Saskia Esken (SPD), Konstantin von Notz (Verdes), Anke Domscheit-Berg (Esquerda).

Algumas universidades alemãs estão no Mastodon há algum tempo, a Universidade de Mannheim desde abril de 2022, a Universidade de Freiburg desde 2021, a Universidade de Ulm desde 2020.

Já possuímos as bases legais

A Lei brasileira do Marco Civil da Internet estabelece uma série de princípios e conteúdos programáticos para o uso da internet pelas autoridades governamentais da União, Estados, Municípios e DF.

Como fundamentos e princípios, dentre vários, destaco a liberdade de expressão, os direitos humanos, exercício da cidadania em meios digitais, abertura e colaboração, livre concorrência, proteção da privacidade, proteção dos dados pessoais e a finalidade social da rede.

Dito isso, acho que órgãos oficiais de comunicação do governo, o próprio Presidente da República, não deveriam estar em uma rede social como o Twitter, que promoveu uma série de mudanças abruptas e arbitrárias que violaram a liberdade de expressão (inclusive com banimento de jornalistas e escárnio com a imprensa) e a todos os demais princípios esposados acima.

Inclusive foi o que motivou o Governo Alemão a abrir uma instância própria no Mastodon para a comunicação do governo, bem como de autoridades governamentais. Foi o que levou a autoridade em assuntos de internet a requerer que a Comissão Europeia supervisionasse o Twitter com base em comportamentos anticompetitivos e de ameaça a liberdade de expressão.

A legislação brasileira é bem importante e representa um avanço, mas precisa ser observada e colocada em prática.

 
Leia mais...

from Dennis Nunes

Lista de supermercado do lembretes

Eu não sei vocês, mas aqui em casa a gente criou e compartilha uma lista de supermercado no aplicativo lembretes da Apple, que vamos adicionando itens quando vemos que eles estão acabando.

Lista de compras da Alexa

A lista compartilhada de supermercado já é muito útil, mas é bem mais interessante não ter que pegar no celular e adicionar manualmente cada item se você tem um assistente do seu lado (No meu caso a Amazon Alexa).

Mas aí você pode pensar:

“E por quê você não usa a lista de compras no próprio aplicativo da alexa?”

O Aplicativo da amazon é horrivel de lento e cheio de etapas até se chegar na lista de compras, um completo desastre!

Como pegar sua lista da Alexa e adicionar na lista de supermercado do seu iOS

Existe uma forma bem simples de toda a vez que você adicionar algo na sua lista de compras adicionar um gatilho que atualiza sua lista criada no lembretes.

  • Basta baixar o aplicativo IFTTT.
  • Criar uma conta (Não precisa do plano PRO).
  • Autorizar o aplicativo a ter acesso ao lembretes caso ele peça
  • Buscar por algum Applet(é como o app chama as automações) que se chame Adding an item to Alexa's shopping list syncs to iOS Reminders ou algo bem parecido que signifique a mesma coisa.
  • Clicar em ligar (Isso vai te levar para o tópico 11 da lista abaixo.)

Uma forma alternativa seria você mesmo criar esse Applet, que é bem simples, como descrito abaixo.

Criando o Applet:

  1. Na barra inferior do aplicativo IFTTT aperte no botão central chamado criar
  2. O aplicativo vai mostrar a sequencia de ações a ser adicionadas começando com a opções if this (se isso), clicamos em adicionar para colocar a ação que servirá de gatilho para nossa automação.
  3. O app te mostrará a lista de serviços que ele tem como opções, vamos escolher Amazon Alexa.
  4. Agora temos todas as opções disponiveis de funções que podem servir de gatilho, vamos escolher a opção: Item added to your Shopping List
  5. Se você nunca criou uma automação com a Alexa, você vai precisar conectar sua conta da amazon no IFTTT, clicando no botão Connect
  6. Agora com sua conta selecionada abaixo de conta amazon alexa, aperte no botão de Criar gatilho
  7. Ao voltar para a lista de sequencia de ações, clicaremos em Then That (Então aquilo).
  8. Na lista de serviços clicaremos em iOS Reminders, caso não esteja visivel podemos pesquisar o nome na busca acima da lista de serviços.
  9. Caso você não tenha dado autorização de uso do lembrete ao abrir o app na primeira vez, ele deve pedir de novo agora, caso não peça, é interessante que você entre nos ajustes do iOS para ver se o app está com essa autorização ativa.
  10. A unica opção possivel do serviço de lembretes é a de Add reminder to list, que é a que queremos, pode clicar nela.
  11. Ao clicar no serviço do lembretes ele vai pedir para que você passe algumas informações, as unicas que precisamos são a List Name e a priority, que é o nome da lista que você criou no aplicativo lembretes da Apple(no meu caso a minha lista se chama “Supermercado”), e para prioridade podemos colocar none.
  12. Agora com o nome da lista e prioridade definidas podemos clicar em Criar ação.
  13. Escreva um titulo para seu Applet se quiser e clique em terminar.

Applet criado, agora basta pedir para a Alexa adicionar algo: “Alexa, adiciona feijão a minha lista de compras”.

 
Leia mais...

from Meu Blog

O termo Autoajuda

O termo “autoajuda”, surpreendentemente presente em nossos dicionários, é bastante curioso. Isso se deve ao fato de que o sufixo “auto” denota algo que se refere a si mesmo, enquanto “ajuda” implica em prestar auxílio a alguém que não é capaz de resolver seus próprios problemas. Portanto, tentar se ajudar por meio da autoajuda é, no mínimo, incoerente, já que pressupõe a necessidade de ajuda externa para solucionar um problema que o indivíduo não consegue resolver sozinho. Além disso, ninguém pede ajuda a si próprio, pois se fosse capaz de se ajudar, não precisaria de ajuda. Apesar dessas contradições, o termo ganhou popularidade e a autoajuda é amplamente explorada em livros, vídeos, palestras, aulas e cursos. É curioso perceber que existe até mesmo uma “metaajuda”, ou seja, a ajuda para ajudar a si mesmo.

Ainda assim, queremos nos autoajudar com o que exatamente? O que temos tanto a aprender com nós mesmos? Ah, temos muita coisa, temos autoajuda econômica, autoajuda financeira, autoajuda emocional, auto ajuda psicológica, autoajuda intelectual e mais qualquer palavra que você queira colocar na frente do termo autoajuda. E o que liga todas essas coisas sobre o mesmo guarda chuva? Como que tantas coisas podem ser autoajuda? A verdade é que a autoajuda não é realmente sobre ajuda; pelo contrário, ela nega qualquer tipo de auxílio e responsabiliza o indivíduo por sua condição social e material, fazendo-o acreditar que é o único culpado por sua realidade. Embora a autoajuda seja disfarçada como uma forma de aprimoramento pessoal, na verdade ela promove a individualização do sucesso e a terceirização de responsabilidades externas para nós mesmos. Não é por acaso que esse gênero literário tomou forma como é conhecido hoje no capitalismo do século XIX e se fortaleceu no neoliberalismo pós-depressão. A autoajuda sempre esteve ligada às promessas de ascensão social do capitalismo, ao sonho americano de que somos capazes de vencer na vida, independentemente de onde viemos. No entanto, essa promessa é inalcançável para a grande maioria das pessoas, deixando-lhes apenas uma falsa esperança de que as coisas um dia serão melhores. Talvez você discorde de mim, talvez você seja um dos que acredita que somos responsáveis pelos nossos próprios destinos, que cabe a nós mesmos lutar por um futuro melhor e que nossas oportunidades somos nós que criamos que os que não obtiveram o sucesso não foram determinados o suficiente e que portanto a autoajuda é uma forma fundamental de desenvolvimento pessoal para essas pessoas. É natural pensar assim o discurso meritocrático é tentador, ele nos empodera de nossos triunfos, da o tapinha em nossas costas e diz “parabéns, foi tudo graças a você” e nos sentimos bem com isso no final do dia. Mas a verdade é que temos menos controle sobre nossas vidas do que gostamos de acreditar, nossos esforços pouco importam a luz de nossas limitações, somos tolhidos pela nossa história, pela realidade imposta a nós, como Marx brilhantemente definiu “Os homens fazem sua própria história, mas não a fazem sob circunstâncias de sua escolha e sim sob aquelas com que se defrontam diretamente, legadas e transmitidas pelo passado”, ou seja, nosso futuro é herdado sob as condições de nosso passado, é impossível garantir uma vida de prosperidades a partir de condições hostis. Você só é capaz de melhorar quando existe a possibilidade, qual o mérito do sucesso de alguém que literalmente nasceu sobre ele e qual é o desmérito do “fracasso” de quem sempre foi privado de qualquer possibilidade de ascensão social. É infundado o pensamento que as coisas acontecem em razão do mérito quando certas escolhas não estão nas mãos dos indivíduos, seu emprego é tanto mérito seu quando das condições históricas e sociais que permitiram que ele existisse, você não controla essas variáveis, seu acesso a educação, amparo social e o desenvolvimento da demanda que geram possibilidades de emprego não podem ser alterados pelos seus esforços. É preciso entender que as pessoas se encontram na miséria não por preguiça ou falta de uma mentalidade de sucesso, as pessoas são miseráveis porque o mundo assim as fez, nunca tiveram acesso a educação, a serviços sociais, saúde, moradia ou qualquer tipo de rede de amparo, vivem com acesso somente a empregos precários que garantem unicamente meios de subsistência e nada mais, como é possível dizer que essas pessoas podem mudar de vida mudando sua mentalidade, sendo mais esforçadas, inteligentes e seguindo a cartilha de qualquer livro ou guru de autoajuda quando a realidade cerra qualquer tipo de querer?

Nesse sentido a autoajuda é a homeopatia fornecida pelo capitalismo, pequenas doses de esperança para o indivíduo manter-se operante acreditando na melhora enquanto o capitalismo constantemente nós rouba o protagonismo da história, nós desempodera da realidade, nós transformam em mero trabalhadores-consumidores vivendo vidas precárias e sem perspectiva reais de futuro como Mark Fisher descreve com precisão em Realismo Capitalista:

Para funcionar com eficiência como um componente do modo de produção just-in-time é necessário desenvolver uma capacidade de responder a eventos imprevisíveis, é preciso aprender a viver em condições de total instabilidade [...]. Períodos de trabalho alternam-se com dias de desemprego. De repente, você se vê preso em uma série de empregos de curto prazo,impossibilitado de planejar o futuro

É nesse ponto que a autoajuda surge nos condicionando as necessidades de um modo de produção desumanizante, as condições humanas vão se diluindo frente às exigências do capital e aos poucos vamos caminhando a total submissão. A autoajuda é por tanto no fim uma ferramenta de doutrinação neoliberal.

Individualização

Comentei brevemente que a autoajuda é a individualização do sucesso, voltemos a esse tópico da individualização por mais algumas linhas. Frases como “não reclame trabalhe”, “não pense em crise trabalhe”, “Deixe de ser vítima” são muito fáceis de se encontrar em livros de autoajuda, na boca de gurus e em discursos políticos, quase como se a situação social em que vivemos fosse culpa de uma má vontade de trabalhar e não consequência de péssimas políticas públicas. Novamente Mark Fisher descreve com exatidão:

Já há algum tempo, uma das táticas mais bem-sucedidas da classe dominante tem sido a da “responsabilização”. Cada membro individual da classe subordinada é encorajado a sentir que sua pobreza, falta de oportunidades, ou desemprego é culpa sua e somente sua. Os indivíduos culparão a si mesmos antes de culparem as estruturas sociais; estruturas que, em todo caso, foram induzidos a acreditar que de fato não existem (são apenas desculpas, invocadas pelos fracos).

O discurso de autoajuda misturado a política neoliberal fizeram conceitos como desigualdade, desemprego, educação e saúde passarem a ser problemas do indivíduo como se ele sozinho fosse responsável por campos sociais que estão muito acima de sua realidade, ele que lute contra o desemprego, ele que consiga acesso a saúde e educação, ele que lute contra sua desigualdade perante o patrão, a responsabilidade é dele. Nessa mesma linha problemas psicológicos foram individualizadas como decorrentes de desregulações do indivíduo e não como sintoma de um mundo cada vez mais desumano que ignora as demandas sociais, Mark Fisher aponta:

Considerá-los um problema químico e biológico individual é uma vantagem enorme para o capitalismo. Primeiramente, isso reforça a característica do próprio sistema em direcionar seus impulsos a uma individualização exacerbada (se você não está bem é bom por conta das reações químicas de seu cérebro). Em segundo lugar, cria um mercado enormemente lucrativo para multinacionais farmacêuticas desovarem seus produtos

Dessa forma acredito que é possível indicar a autoajuda como sintoma de um capitalismo neoliberal que tenta apontar que o motivo do nossos “fracassos” somos nós próprios e não toda a estrutura política imposta sobre nós. Assim é importante entender que nós como indivíduos não devemos nos afligir como responsáveis por coisas que estão muito acima de nós, assim como não somos responsáveis pela chuva que cai sobre nossas cabeças e o sol que castiga nossas costas, o desemprego, a solidão e a pobreza também não são de nossa culpa e muitas vezes nada podemos fazer para mudá los como indivíduos, para isso cabe a nós como coletivo mudar a ordem vigente a nosso favor.

Soluções

Abandonar a autoajuda pode ser uma tarefa difícil, muitas vezes ela acaba criando um efeito placebo sobre nossas vidas. Qualquer tipo de mudança positiva que encontramos acabamos por culpar a autoajuda mesmo não havendo evidência alguma que ela seja a responsável direta por qualquer tipo de melhora, então agarramos a esse remédio por acreditar que nada mais poderia fazer o mesmo efeito. A verdade é que muito provavelmente o único efeito que a autoajuda está gerando é a percepção da melhora e não a melhora em si. Para melhorarmos de verdade precisamos de ajuda e não de autoajuda, além de mudarmos a nós mesmos devemos mudar aquilo que nos aflige externamente, devemos mudar o mundo.

Vamos começar com as soluções individuais, se você está infeliz com sua vida talvez você precise de ajuda, e com ajuda quero dizer ajuda profissional, ajuda psicológica. A realidade que vivemos nos adoece e muitas vezes precisamos de ajuda para lidar com ela, a psicologia ou a psiquiatria nos darão as armas necessárias para isso. O mundo individualizado nos faz crer que devemos resolver nossos problemas sozinhos mas não há nada de errado em entender suas limitações e pedir ajuda quando necessária. O profissional correto pode mudar sua vida significativamente se você se permitir ser ajudado.

Agora a parte difícil. É impossível se sentir bem consigo mesmo em um mundo insalubre, as condições materiais o fazem infeliz e nenhuma mudança pessoal vai conseguir mudar isso, se quisermos melhorar como indivíduos temos que primeiro melhorar a realidade em que estamos inseridos e isso não é fácil e muito menos pode ser feito sozinho. Só somos capazes de melhorar o mundo ao nosso redor através de organização e trabalho, como se organizar e em o que trabalhar vai depender da realidade de cada um, talvez sua condição de trabalho seja ruim então vale se juntar com seus colegas para reivindicar condições melhores

 
Leia mais...

from elysion

Você já se perguntou qual o tamanho do Mastodon no Brasil? Estes dados do número de contas e de usuários ativos nas instâncias brasileiras oferece um panorama, embora impreciso, visto que muitos dos usuários brasileiros também se encontram em instâncias do exterior.

Essa tabela leva em consideração a lista de instâncias brasileiras organizada pelo Santiago Lema, bem como dados extraídos do Fediverse Observer e da indicação de usuários ativos dos próprios servidores.

lista de instâncias brasileiras

Pela minha vivência no Mastodon, chutaria que somando esse total de 2061 usuários ativos em instâncias brasileiras ao número de brasileiros que postam de instâncias brasileiras individuais (não catalogadas), familiares, bem como de instâncias estrangeiras, o resultado total de brasileiros ativos na plataforma pode crescer até 50%, resultando em cerca de 3.000 usuários ativos.

Considerando que a maior instância do Mastodon possui 191.000 usuários ativos e que existem dezenas de instâncias grandes, podemos concluir que a rede social do mastodonte não é uma tendência no Brasil e é muito mais aproveitada internacionalmente.

Ressalto que as instâncias mais ativas, Ursal e Bolha, fazem um belo trabalho em prol do acolhimento e interação com os novos usuários que buscam experimentar o fediverso.

#Fediverso

 
Leia mais...