s
Português English

Blogs

maxresdefault-1994702608.jpg
2022.11.26

Owner of Social Network Data aka Indieweb

During the campaign for Congress, I had to transform my social networks into a real sales platform. They all had to be super aligned with the same purpose.

I should have already installed/hired some social media manager, like Hootsuite or Zoho Social (Zoho has been my online service provider for years), as this is no trivial task. There were more than 8 networks. And many of the contents are copies of each other.

In addition to the difficulty of managing the various networks, there is confusion as to what content I would release as official. Canonical. Especially networks that are essentially competitors.

  • Twitter or Mastodon?
  • Tiktok or YouTube Shorts or Instagram Stories?
  • Facebook or my blog?

It gets substantially worse with stories like Elon Musk’s takeover of Twitter. He’s made so many changes to the platform that it’s not impossible to think the company will eventually go broke. Thus, years of content would be thrown away. And the constant changes in rules and permissions?!

Indieweb: The owner of the content is ME

To address some of these concerns, I’m trying to centralize the source of information to a system that I have full control over. And nothing better than this site itself to be responsible. Here I do whatever I want, optimize images (one of my concerns is that I’ve never had much discipline in removing the metadata from images), and customize their appearance. This then becomes the official center of what I do.

POSSE is the practice of Publish (on your) Own Site, Syndicate Elsewhere, in other words, publish links or copies on other social networks always citing the source of the content, so that anyone can follow you directly at the source.

Reposting on Twitter and Mastodon is easy as they are usually text and few images. Meta/Facebook sites are more boring because they are richer in content and have no API to automate. Video ones are even more work, as hosting videos in person is quite expensive (I’ve always felt that YouTube does an almost humanitarian job in hosting such a volume of data).

For now, I must keep old content on its source platforms. Gradually I will try to write only here. Eventually start to even export all the old content from these services to have back and put static on the site.

Microformats, Fediverse and Webmention

To adapt the site to be the center of the online universe, some changes need to be made:

✅ Make it easier for computers to also understand the site

I also implemented microformats on the site and in the contents, so that any other system that reads the site can extract the main information: the author, title, content, and publication date. Several of this information already appears visually on the site. As humans, we can understand easily, but computers cannot. Therefore, a series of modifications were made so that the contents are also easily understood by machines.

Separating the different types of content

As I use the blog as a tool for longer texts, daydreams, and ideas, I’m thinking of creating specific lists for small texts (tweet/toot) and maybe images (today the site has a tag that points to my posts of photos). So everything would be better indexed and found. Blog and notes. My site manager, Hugo, allows for several approaches. The question is how to do a better implementation.

Integrate comments, replies, and shares made on other sites

I’ve tried using some commenting tools before, like Discus and Cactus.chat (super cool concept of using Matrix as a comment source). I don’t have a lot of traffic here, so it wouldn’t matter. But the goal is now bigger: to include comments and reposts of my content made on other sites.

The W3C’s standard (the organization that standardizes the internet) created webmentions, a way to formalize that someone is commenting on someone else’s content. That’s the only way I can maintain a great discussion about the content I’ve posted on any network.

“Automatically” republish content written here on other social networks

This will take some time as I will need to use some external services that will read my site’s RSS and try to post on social media instead. Essentially using a HootSuite/Zoho Social type solution. Even better if it’s open source. I will investigate the use of n8n.


As soon as I manage to implement more things, I’ll post them here. I want to give the least amount of work to the next ones who are excited to take control of their own digital lives.

616989-delpixart-gettyimages-1136178136.jpg
2022.07.08

Books From 2022 (So Far)

Every year I try to compile a list of games, books, and movies I experienced. Here we go.

I continue to read (listen, in fact) almost every day for the past few years. It’s in my daily routine when I walk the dogs. It’s a very different proposition from laying down and dedicating some time to read them. I have an urge for a secondary task when I am performing a no-brainier routine, just like.. walking the dogs. Otherwise, I feel wasting my time by just like walking and not thinking.

This is the list of this year’s books that I ingested. These lists are -definitively- not comprehensive ones. Since I’m not updating my GoodReads personal records nor writing about them in this blog, they are just the ones I remembered. I may edit this post if I remember other items.

  1. Piranesi (Susanna Clarke)(9★★★★★★★★★): Piranesi lives in a fantastic place. He has a memory issue but keeps detailed notes. A great mystery.
  2. The Well of AscensionThe Well of Ascension (Mistborn #2) (Brandon Sanderson)(8★★★★★★★★): just after the events of the first book, the protagonists now have to maintain the power they acquired. Fascinating.
  3. Steal Like an ArtistSteal Like an Artist: 10 Things Nobody Told You About Being Creative (Austin Kleon)(8★★★★★★★★): great super-short book about the creative process. He incentives people to leap forward in creative work disregarding self-judgment. Get inspired and try to copy the work of others to practice and find one’s voice.
  4. Keep GoingKeep Going: 10 Ways to Stay Creative in Good Times and Bad (Austin Kleon)(8★★★★★★★★): another small but very motivational work from Austin Kleon. Do not stop creating. Do small iterative work until it’s done.
  5. Show Your Work!Show Your Work!: 10 Ways to Share Your Creativity and Get Discovered (Austin Kleon)(8★★★★★★★★): another small piece of Austin. Create a blog, Twitter, Instagram, or Tiktok account and show people what you are working on. Even hobbies stuff, like sketches. Eventually, it could become your masterpiece.
  6. Parable of the Talents (Octavia E. Butler)(8★★★★★★★★): is the sequel of the excellent Parable of the Sower (Octavia E. Butler)(9★★★★★★★★★), telling about the protagonist is her daughter.
  7. The President Is Missing (James Patterson, Bill Clinton)(7★★★★★★★): modern cyber terrorism thriller. Very believable. Tips and checks are done by no other than Bill Clinton!
  8. The Power of HabitThe Power of Habit: Why We Do What We Do in Life and Business (Charles Duhigg)(7★★★★★★★): a modern classic self-helping book. It starts preaching the power of understanding and controlling habits. Then it exemplifies, chapter after chapter, the different facts of habits interfering in our decision-making. Very good.
  9. DifferentDifferent: Escaping the Competitive Herd (Youngme Moon)(7★★★★★★★): essay about the competitive advantage of being different in the market. Curiously enough, in the second half of the book, she acknowledges that being different might not be important depending on the situation and market. Good book.
  10. Communication Skills TrainingCommunication Skills Training: How to Talk to Anyone, Connect Effortlessly, Develop Charisma, and Become a People Person (James W. Williams)(7★★★★★★★): comprehensive discussion about communication skills. Nothing fantastic. But very good.
  11. JusticeJustice: What's the Right Thing to Do? (Michael J. Sandel)(7★★★★★★★): several philosophical aspects, situations, and approaches of what is justice. It does not, however, present definitive answers about anything.
  12. The 4-Hour BodyThe 4-Hour Body: An Uncommon Guide to Rapid Fat-Loss, Incredible Sex, and Becoming Superhuman (Timothy Ferriss)(5★★★★★): several tips about a proper workout, diet, and routines to get the body you want.
  13. The 10x RuleThe 10x Rule: The Only Difference Between Success and Failure (Grant Cardone)(4★★★★): salespeople kinda talk. Super aggressive, alpha behavior about using all your power and will to achieve goals and success. I tried to focus on the core messages and occasional motivation in his words, but it’s hard to not get pissed with the alpha male dominant attitude.
  14. Think Sex and Grow RichThink Sex and Grow Rich: How to use the power of your sex drive to succeed in business (Marcus El)(4★★★★): it tries to sell the idea that we are driven by sex and we should channel this constant desire towards business goals. It starts fun, then became very tedious.

From the second part of 2021 that was not on the mid-2021 list

  1. Dune (Frank Herbert)(8★★★★★★★★): read in 3 nights to watch the movie. Loved it.

For more books, you can check my online read list on GoodReads.

edited in 2022-07-14 because I forgot some books. Quite sure there are more.

multilanguage.jpg
2022.03.27

Multilanguage Site

brunomassa.com has been always an international site. Almost all posts were written in English. But now that I will venture into politics (more about this in a later post), it’s worth separating Brazilian Portuguese content apart. Mixing posts about programming, gaming, and movies will only confuse followers and voters.

Instead of removing non-related content, I decided to split languages. The Brazilian Portuguese edition will show up more posts about the Brazilian scene. Curiously, most of the old posts written in pt-br were already about politics or football, so they are already fit for the job!

I do not know how to create a hybrid model using Hugo, with most language-independent content intertwined. If I find it, I will enable it in the future. It will be especially useful for hot-pages, those pages that serve as an entry for promotions and special situations. It would not be good to create a hot-page for brunomassa.com/pt-br/hot-page, because it would defeat its purpose of being easy to remember and share. To help even further, I’ve just bought the brmassa.com domain, aligning with other social media usernames.

So, I’m going to start to work towards generating more content about politics and the Brazilian context. This week I plan to make the now-not-much-a-surprise announcement.

This very post is multi-language. Click on the small flags to switch.

netlify-cms.png
2022.03.19

Netlify CMS

I do maintain, for almost 10 years now, a personal journal. A diary. It’s self-psychotherapy. It’s a way to express my thoughts and feelings.

First, I used Google Docs. I created dozens and dozens of files, one for each day. Eventually, I realized that Google was not supposed to be trusted with confidential and personal information. Their spiders crawl and index everything. These thoughts may be still there, even after I delete all the files. Who knows.

Then I migrated to a secondary solution: WordPress. I hosted a blog and used an add-on to lock it up, allowing just me to see. It’s wonderful for blogging, with a lot of tools. I designed some extra add-ons to manage some aspects of the journal, like a word count and a title generator (based on the post date).

However, maintaining an up-to-date WordPress installation is critical. Due to its popularity, and broad usage for e-commerce, WordPress is a target for many, many hackers. I started to think that I could let hacked and let all my stuff be exposed. So I decided to export all posts and move once again.

I tried to only maintain it offline, on my computer. It’s, for sure, the most secure way. Anything that is on the internet, even if it’s secured, could be hacked. But sometimes I want to write while away from home. On a trip, for instance.

I looked for a solution that was hosted online, secure (bonus if it was encrypted), and versatile (super bonus if it was open source). I tried some days using SimpleNote, and then Notion. Notion is very nice, and I was using it not only to write my journal, but also I started to use it to track some daily routines, like checking weight, sleep time, and amount of water that I’ve consumed.

But again I was not very confident about security. So, I’ve exported everything and decided to host it only on my computer. This time, with a caveat: I was liking the usage of Hugo static site generator, so I designed a blog front end and only enable it locally. And use git to track changes and host at GitLab. If eventually I’m not at home and want to write, I could find an app to connect to the repository and write. Months passed, but I’ve never found a mobile app. So I was locked to just write locally or access the repository using VS Code or whatever.

Finally, the Main Topic

The other day I decided to check Netlify CMS. Created by Netlify hosting service, it tries to create a dynamic admin front end to manage static websites. The result will still be very much static, but the admin section is a single page with a JavaScript script that will do everything. It will communicate with an online git repository and commit any new post. The authentication is done through the git service, GitLab in my case. It could be GitHub or any other git service. If the user does not have access to the repository, the admin page will be blank. It reads the source in real-time.

Besides, I could also host the final journal online using GitLab pages, but with settings that are only visible to maintainers. The same authentication would be required to see both the front-end and admin pages. Nice solution.

Netlify CMS is VERY simple. I can only imagine how complex is under the hook, but the final experience for users is simplistic. However, it does the job: I can now access and write my journals from anywhere, including the browser on my phone.

The system relies on a monolithic configuration file that is hosted side by side with the content in the git repository. Traversing all the posts from a remote git repository is very slow and not efficient. I cannot imagine dealing with a more complex team structure using it at the same time.

A neat feature is the draft mode: it creates automatically a fork with the draft content. Only when the user clicks “Release”, it merges the content into the main branch and publishes. Netlify CMS does not require Netlify itself, but they are nicely integrated if you decided to use it.

After the successful first experience with my diary, I implemented it in my blog. By the way, this very post was written using this pseudo-CMS!

logo_large_monochrome_light.png
2022.02.10

Godot Jam Review

At the beginning of the year, I posted about the retrial of Godot, the most popular free and open source game engine around.

I’ve posted some pros and cons at the time. I then decided to enter into a JAM to motivate myself to try to use it myself for a real complete project. Even if it is a jam-like game.

Now it’s time to write a review the whole process.

TLDR: I failed to complete the game. I tried to create a pipeline to build a nightly version for the latest version, with C# support. It is partially running ok.

Bootstrapping

The Jam theme was “ocean”. Bonus points if:

  1. All sounds in-game are made with your mouth(s)
  2. Include a fishing mini-game
  3. Include your favorite quote or pun in-game

So I started. As previously said, I’ve planned to implement an old game of mine as the main game. The advantage was that I knew what was needed and the general need. Another plus was the fact that the game was abstract, so I could save a lot of resources and time on the presentation. And by doing the sound effects with the mouth, I could neglect this front until the end.

For the mini-game, I looked for a small board game that I could easily implement in digital form. After some research, I settled with Leaky Boat, a fast-paced pen-and-paper game with dice.

So I started to code. But the problems with the C# integration were getting on my nerves. Godot editor crashed more than 30 times on the very first night of coding. It was not blocking the path, but it was making it very, very difficult.

New Version from Scratch

As a potential solution, I checked if the undergoing development of Godot 4 (I was using the “stable” version of Godot 3.5) had any nightly build available. I’ve found a guy that was creating these nightly builds! But only the original non-C# version. The repository was open, so I checked if anything was possible to salvage. Not much.

So, as a detour, I decided to build a pipeline on GitLab that would compile the source code and build it. Eventually, I would schedule it to run every night. However, the process of creating a build pipeline online is very tedious and laborious: on every change, I had to run online. In the case of Godot, trigger the code compilation to eventually discover that 30 min the build started, it failed due to some dependency on the build stack was not fun. It took me a whole day to spend my CPU quota doing this.

So, as a second detour, I decided to host a local GitLab instance on my computer. It would allow me to develop the pipeline itself. Once ok, I would migrate back to the online service. It took me 2 days to set this. I first decided to go with local Kubernetes, but it was getting too complicated. Then I migrated to a solution that I am more familiar with: Docker-compose inside a virtual machine. I created it inside VirtualBox (instead of KVM) because I planned to reuse it when I decided to use Windows.

Downloading and building several docker images takes a lot of space! I had to resize the VMs to a much bigger size than originally planned to accommodate a dozen images created/downloaded.

The plan was to create a helper image with all the tools needed to compile the code with or without C#, host/register inside GitLab itself, and reuse it in the main pipeline. This step was working fine, but the actual build was failing time after time.

To check if the steps were right, I decided to compile them inside my machine. I did not want this to not pollute my pc. But worked. Since I “wasted” a couple of days on this detour, I decided to use this local compilation in my project again.

New Version, Old Problems

Godot 4 renamed vaious classes. Also, it changed countless small things internally, and it took me a couple of hours to migrate to the new environment. Good thing is that I did not have much to convert. Done. And the game was working the same as before.

Now it was time to continue the development. But the problems continue the same way: the editor was crashing time after time. I managed to make both the game and the mini-game functional, but with restrictions. The pace was slow because I had to investigate the way of doing things all the time. And the documentation was definitively not comprehensive for C# users.

After 5 days, I gave up. 😞 I could theoretically finish the game in a certain state, but I decided to focus my attention on other projects instead. I might try to go with this engine later in the future, but for now, I will return to Unity until I finish one of my projects.

A couple of days after the end of the jam, Godot 4 alpha 1 was released. I still think that, if the devs do not provide a nightly version by themselves, my project has some space.


Despite the failure, I’ve learned a lot about Godot, GitLab, and Kubernetes. Especially, the latter two. I will use it in the future for sure, so I do not feel the pressure of failure.

All the code, even incomplete, is open source in my GitLab profile.

Also, they are organizing a Jam every month. I can reuse all to the new jam, for certain.

Bruno MASSA