<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Thiago Cardoso</title>
		<link>https://tncardoso.com/</link>
		<description>Recent content on Thiago Cardoso</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Thu, 09 Jul 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://tncardoso.com/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Pare de corrigir o resultado. Corrija o loop.</title>
				<link>https://tncardoso.com/blog/2026/07/pare-corrigir-resultado-corrija-loop/</link>
				<pubDate>Thu, 09 Jul 2026 00:00:00 +0000</pubDate>
				<guid>https://tncardoso.com/blog/2026/07/pare-corrigir-resultado-corrija-loop/</guid>
				<description>&lt;p&gt;Toda vez que um agente de IA erra, você tem duas opções: corrigir o resultado ou corrigir o processo que o produziu. A maioria das pessoas corrige o resultado. Ajusta o código na mão, faz o merge e encontra o mesmo erro de novo na semana seguinte. A correção morre com o diff, e a pessoa continua sendo o gargalo de tudo que o agente produz.&lt;/p&gt;&#xA;&lt;p&gt;Quem constrói essas ferramentas já não trabalha assim. Boris Cherny, head do Claude Code, e Peter Steinberger, criador do OpenClaw, compartilharam que quase não escrevem mais prompts. Eles investem o tempo melhorando os loops que seus agentes executam. Nas palavras do Peter:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Stop fixing the output. Fix the loop.</title>
				<link>https://tncardoso.com/blog/2026/07/stop-fixing-output-fix-loop/</link>
				<pubDate>Thu, 09 Jul 2026 00:00:00 +0000</pubDate>
				<guid>https://tncardoso.com/blog/2026/07/stop-fixing-output-fix-loop/</guid>
				<description>&lt;p&gt;Every time an AI agent gets something wrong, you have two options: fix the output, or fix the process that produced it. Most people fix the output. They correct the code by hand, merge it, and meet the same mistake again next week. The correction dies with the diff, and they stay the bottleneck of everything the agent produces.&lt;/p&gt;&#xA;&lt;p&gt;The people building these tools have stopped working that way. Boris Cherny, head of Claude Code, and Peter Steinberger, creator of OpenClaw, both wrote that they barely write prompts anymore. They spend their time improving the loops their agents run in. As Peter puts it:&lt;/p&gt;</description>
			</item>
			<item>
				<title>linux/misc</title>
				<link>https://tncardoso.com/snippets/linux_misc/</link>
				<pubDate>Sat, 09 May 2026 20:15:12 -0300</pubDate>
				<guid>https://tncardoso.com/snippets/linux_misc/</guid>
				<description>&lt;h3 id=&#34;chrome-headless-fetch&#34;&gt;Chrome headless fetch&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;chromium --headless --no-sandbox --disable-gpu --virtual-time-budget=8000 --dump-dom http://127.0.0.1:3011/docs&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>The rules of code quality have changed</title>
				<link>https://tncardoso.com/blog/2026/03/the-rules-of-code-quality-have-changed/</link>
				<pubDate>Fri, 27 Mar 2026 00:00:00 +0000</pubDate>
				<guid>https://tncardoso.com/blog/2026/03/the-rules-of-code-quality-have-changed/</guid>
				<description>&lt;p&gt;We&amp;rsquo;ve spent decades working on what good code looks like. Don&amp;rsquo;t repeat yourself. Keep functions small. Reduce cyclomatic complexity. Low coupling and high cohesion. These rules were derived from hard earned experience with what makes code maintainable by &lt;em&gt;humans&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Then we handed the keyboard to an AI, and some of those rules became unnecessary.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-rules-were-always-for-us&#34;&gt;The rules were always for us&lt;/h2&gt;&#xA;&lt;p&gt;The DRY (Don&amp;rsquo;t Repeat Yourself) principle is a heuristic for human memory. When a developer writes the same logic twice, they&amp;rsquo;ll eventually change one copy and forget the other. Bugs compound. The rule exists because humans lose track.&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenClaw brings social engineering to digital systems</title>
				<link>https://tncardoso.com/blog/2026/02/openclaw-brings-social-engineering-to-digital-systems/</link>
				<pubDate>Sat, 21 Feb 2026 00:00:00 +0000</pubDate>
				<guid>https://tncardoso.com/blog/2026/02/openclaw-brings-social-engineering-to-digital-systems/</guid>
				<description>&lt;p&gt;OpenClaw is incredibly useful and a security nightmare. If you&amp;rsquo;re not following recent developments in AI agents, OpenClaw (previously ClawdBot, MoltBot) is an AI personal assistant that can manage your inbox, send emails, handle your calendar, and check you in for flights. All from WhatsApp, Telegram, or any chat app you already use. In my routine, it has replaced a lot of different prompts, scripts, and tooling, centralizing all my automation in a single place. If you haven&amp;rsquo;t tried it, I recommend you do.&lt;/p&gt;</description>
			</item>
			<item>
				<title>InfiniDB: the unreliable database of everything!</title>
				<link>https://tncardoso.com/blog/2025/12/infinidb-the-unreliable-database-of-everything/</link>
				<pubDate>Tue, 23 Dec 2025 00:00:00 +0000</pubDate>
				<guid>https://tncardoso.com/blog/2025/12/infinidb-the-unreliable-database-of-everything/</guid>
				<description>&lt;figure &gt;&#xA;&#xA;  &lt;img src=&#34;https://tncardoso.com/blog/2025/12/infinidb-the-unreliable-database-of-everything/img/logo_hu_6bb7f5b42ec04378.webp&#34; alt=&#34;InfiniDB logo, an infinite symbol with a database attached.&#34; width=&#34;300&#34; /&gt;&#xA;&#xA;  &lt;figcaption&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;The holiday season is a magical moment that fosters interesting projects and ideas. This Christmas, I experimented with a new way to query LLMs. Since LLMs essentially &lt;a href=&#34;https://arxiv.org/abs/2309.10668&#34; target=&#34;_blank&#34;&gt;compress vast amounts of information&lt;/a&gt;&#xA;, why not treat them as databases? That&amp;rsquo;s how &lt;strong&gt;InfiniDB&lt;/strong&gt; was born: the unrealiable database of everything.&lt;/p&gt;&#xA;&lt;p&gt;In InfiniDB, you can dynamically create tables and fill them with data generated on the fly. Here&amp;rsquo;s a simple example query and its results:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Don&#39;t be a bagholder: AI coding is a higher level abstraction</title>
				<link>https://tncardoso.com/blog/2025/12/dont-be-a-bagholder-ai-coding-is-a-higher-level-abstraction/</link>
				<pubDate>Fri, 19 Dec 2025 00:00:00 +0000</pubDate>
				<guid>https://tncardoso.com/blog/2025/12/dont-be-a-bagholder-ai-coding-is-a-higher-level-abstraction/</guid>
				<description>&lt;p&gt;In a profession defined by constant innovation, you don&amp;rsquo;t want to be a &lt;a href=&#34;https://www.worldwidewords.org/qa/qa-lef1.htm&#34; target=&#34;_blank&#34;&gt;bagholder&lt;/a&gt;&#xA;. In financial slang, bagholders are the ones left holding worthless stocks after their decline. They refuse to acknowledge changing conditions and wait too long to act. I remind myself of this whenever I encounter something potentially transformative, like AI-assisted programming.&lt;/p&gt;&#xA;&lt;h2 id=&#34;moving-to-a-higher-level-abstraction&#34;&gt;Moving to a higher level abstraction&lt;/h2&gt;&#xA;&lt;p&gt;Throughout history, we&amp;rsquo;ve repeatedly moved up the ladder of abstraction. We started by counting on our fingers, then invented the abacus. Mechanical calculators arrived and were later replaced by their digital counterparts. Computers are now ubiquitous, and software followed a similar path. Programming began close to the machine and evolved into high-level languages. Some languages even abstracted away memory management (e.g. via garbage collection), creating a generation of developers who rarely need to think about those concepts.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Construindo Agentes com LLMs</title>
				<link>https://tncardoso.com/blog/2025/10/construindo-agentes-com-llms/</link>
				<pubDate>Sun, 19 Oct 2025 00:00:00 +0000</pubDate>
				<guid>https://tncardoso.com/blog/2025/10/construindo-agentes-com-llms/</guid>
				<description>&lt;p&gt;Com os avanços da IA Generativa, ficou muito mais simples tirar sistemas de IA do papel. Porém, essa simplicidade esconde algumas armadilhas. Neste artigo, compartilho aprendizados e boas práticas para montar agentes confiáveis de forma ágil.&lt;/p&gt;&#xA;&lt;h2 id=&#34;agentes&#34;&gt;Agentes&lt;/h2&gt;&#xA;&lt;p&gt;De acordo com a definição em &amp;ldquo;Artificial Intelligence: A Modern Approach&amp;rdquo;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, Inteligência Artificial é o estudo de agentes racionais. Simplificando, são sistemas que &amp;ldquo;tentam fazer a coisa certa&amp;rdquo; segundo algum objetivo. Eles podem perceber um ambiente (utilizando sensores) e agir sobre ele (com atuadores).&lt;/p&gt;</description>
			</item>
			<item>
				<title>linux/tools</title>
				<link>https://tncardoso.com/snippets/linux_tools/</link>
				<pubDate>Wed, 27 Aug 2025 08:59:23 -0300</pubDate>
				<guid>https://tncardoso.com/snippets/linux_tools/</guid>
				<description>&lt;h3 id=&#34;linux-tools&#34;&gt;Linux Tools&lt;/h3&gt;&#xA;&lt;p&gt;Some tools I usually use.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://fight-flash-fraud.readthedocs.io/en/latest/introduction.html&#34; target=&#34;_blank&#34;&gt;f3 - Fight Flash Fraud&lt;/a&gt;&#xA;: tool for detecting counterfeit memory.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>infra/systemd</title>
				<link>https://tncardoso.com/snippets/infra_systemd/</link>
				<pubDate>Sun, 17 Aug 2025 12:59:23 -0300</pubDate>
				<guid>https://tncardoso.com/snippets/infra_systemd/</guid>
				<description>&lt;h3 id=&#34;hardening-systemd&#34;&gt;Hardening systemd&lt;/h3&gt;&#xA;&lt;p&gt;It is possible to harden systemd services adding restrictions to file access, syscalls, network and more. The command:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ systemd-analyze security &amp;lt;service&amp;gt;&#xA;&#xA;---------&#xA;&#xA;NAME                                                        DESCRIPTION                                                             EXPOSURE&#xA;✗ PrivateNetwork=                                             Service has access to the host&#39;s network                                     0.5&#xA;✗ User=/DynamicUser=                                          Service runs as root user                                                    0.4&#xA;✗ CapabilityBoundingSet=~CAP_SET(UID|GID|PCAP)                Service may change UID/GID identities/capabilities                           0.3&#xA;✗ CapabilityBoundingSet=~CAP_SYS_ADMIN                        Service has administrator privileges                                         0.3&#xA;✗ CapabilityBoundingSet=~CAP_SYS_PTRACE                       Service has ptrace() debugging abilities                                     0.3&#xA;✗ RestrictAddressFamilies=~AF_(INET|INET6)                    Service may allocate Internet sockets                                        0.3&#xA;...&#xA;&#xA;→ Overall exposure level for xxx.service: 9.6 UNSAFE 😨&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Returns the status for every directive with a final security score. In the &lt;a href=&#34;https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html&#34; target=&#34;_blank&#34;&gt;systemd documentation&lt;/a&gt;&#xA; you can find information about all directives.&lt;/p&gt;</description>
			</item>
			<item>
				<title>apps/git</title>
				<link>https://tncardoso.com/snippets/apps_git/</link>
				<pubDate>Sat, 05 Jul 2025 17:18:43 -0300</pubDate>
				<guid>https://tncardoso.com/snippets/apps_git/</guid>
				<description>&lt;h3 id=&#34;conditional-includes&#34;&gt;Conditional includes&lt;/h3&gt;&#xA;&lt;p&gt;It is possible to have different configs for different directories using&#xA;&lt;a href=&#34;https://git-scm.com/docs/git-config#_conditional_includes&#34; target=&#34;_blank&#34;&gt;conditional includes&lt;/a&gt;&#xA;.&#xA;Configuration can be changed by path or branch.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[user]&#xA;    email = email@example.com&#xA;    name = name&#xA;&#xA;[includeIf &amp;#34;gitdir/i:~/especial-dir/&amp;#34;]&#xA;    path = &amp;#34;~/.gitconfig-especialdir&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>I shared my thermal printer with the internet. What could go wrong?</title>
				<link>https://tncardoso.com/blog/2025/05/i-shared-my-thermal-printer-with-the-internet.-what-could-go-wrong/</link>
				<pubDate>Thu, 08 May 2025 22:00:11 -0300</pubDate>
				<guid>https://tncardoso.com/blog/2025/05/i-shared-my-thermal-printer-with-the-internet.-what-could-go-wrong/</guid>
				<description>&lt;p&gt;Remember those old website guestbooks—where you’d scribble a note to the webmaster and it’d proudly show up on the homepage? It sounds risky now, but back in the early naive days of the internet, it was a badge of honor for any blog.&lt;/p&gt;&#xA;&lt;p&gt;I got hit by a wave of nostalgia (and I happened to have a thermal printer lying around), so I thought: why not bring the guestbook into the real world? What if anyone visiting my site could send me a message that pops out on a little slip of paper right on my desk?&lt;/p&gt;</description>
			</item>
			<item>
				<title>Guess Who? Evaluating AI models with games</title>
				<link>https://tncardoso.com/blog/2025/02/guess-who-evaluating-ai-models-with-games/</link>
				<pubDate>Sun, 09 Feb 2025 18:45:12 -0300</pubDate>
				<guid>https://tncardoso.com/blog/2025/02/guess-who-evaluating-ai-models-with-games/</guid>
				<description>&lt;p&gt;We all love interesting AI benchmarks. They might only show part of the picture, but it&amp;rsquo;s fascinating to see AI models tackle vastly different challenges. From the &amp;ldquo;&lt;a href=&#34;https://lmarena.ai/&#34; target=&#34;_blank&#34;&gt;usual benchmarks&lt;/a&gt;&#xA;&amp;rdquo; , to &lt;a href=&#34;https://arcprize.org/arc&#34; target=&#34;_blank&#34;&gt;abstract reasoning&lt;/a&gt;&#xA;, &lt;a href=&#34;https://textarena.ai/&#34; target=&#34;_blank&#34;&gt;textual games&lt;/a&gt;&#xA;, and even &lt;a href=&#34;https://github.com/OpenGenerativeAI/llm-colosseum&#34; target=&#34;_blank&#34;&gt;Street Fighter&lt;/a&gt;&#xA;, researchers are always coming up with new ways to measure AI capacity.&lt;/p&gt;&#xA;&lt;p&gt;This brings us to a nostalgic twist: how about evaluating AI with the game &amp;ldquo;&lt;a href=&#34;https://en.wikipedia.org/wiki/Guess_Who%3F&#34; target=&#34;_blank&#34;&gt;Guess Who?&lt;/a&gt;&#xA;,&amp;rdquo; a beloved board game from the 90s and 2000s?&lt;/p&gt;</description>
			</item>
			<item>
				<title>A Era da Ação</title>
				<link>https://tncardoso.com/blog/2025/02/a-era-da-a%C3%A7%C3%A3o/</link>
				<pubDate>Fri, 07 Feb 2025 19:15:01 -0300</pubDate>
				<guid>https://tncardoso.com/blog/2025/02/a-era-da-a%C3%A7%C3%A3o/</guid>
				<description>&lt;p&gt;Estamos vivendo na &lt;strong&gt;Era da Ação&lt;/strong&gt;. Conversando com profissionais de tecnologia, vejo opiniões bem diferentes sobre como a IA impacta nosso dia-a-dia. De um lado pessoas que aumentam sua produtividade de forma significativa, de outro os que acreditam que IA ainda não cumpre sua promessa.&lt;/p&gt;&#xA;&lt;p&gt;A verdade é que precisamos olhar para IA em dois horizontes. Pensar nas capacidades (e promessas) nos ajuda a definir uma estratégia para o futuro: como o &lt;a href=&#34;https://x.com/sherwinwu/status/1886470795804991896&#34; target=&#34;_blank&#34;&gt;fundador de startup&lt;/a&gt;&#xA; que aposta em um produto que é só será viável com avanços nos modelos. Já uma visão &amp;ldquo;pé no chão&amp;rdquo; nos ajuda a colher os ganhos com o que é possível hoje.&lt;/p&gt;</description>
			</item>
			<item>
				<title>infra/cloudflare</title>
				<link>https://tncardoso.com/snippets/infra_cloudflare/</link>
				<pubDate>Sat, 01 Feb 2025 18:59:23 -0300</pubDate>
				<guid>https://tncardoso.com/snippets/infra_cloudflare/</guid>
				<description>&lt;h3 id=&#34;email-with-custom-domain&#34;&gt;Email with custom domain&lt;/h3&gt;&#xA;&lt;p&gt;If you are using Cloudflare&amp;rsquo;s custom email, it is possible to send&#xA;email using Gmail&amp;rsquo;s SMTP.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Make sure your Google account has &lt;a href=&#34;https://myaccount.google.com/signinoptions/two-step-verification&#34; target=&#34;_blank&#34;&gt;2FA&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Create an &lt;a href=&#34;https://security.google.com/settings/security/apppasswords&#34; target=&#34;_blank&#34;&gt;App Password&lt;/a&gt;&#xA; for using the SMTP server&lt;/li&gt;&#xA;&lt;li&gt;Add the Cloudflare-routed email address: In Gmail go to Settings -&amp;gt; Accounts -&amp;gt; Send email as -&amp;gt; Add another email address&lt;/li&gt;&#xA;&lt;li&gt;Config the SMTP server &lt;code&gt;smtp.gmail.com&lt;/code&gt;, your email as the username, and the App Password created in (2)&lt;/li&gt;&#xA;&lt;li&gt;Update the SPF config in your domain to include google.com. &lt;code&gt;v=spf1 include:_spf.mx.cloudflare.net include:_spf.google.com ~all&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;references&#34;&gt;References&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://community.cloudflare.com/t/solved-how-to-use-gmail-smtp-to-send-from-an-email-address-which-uses-cloudflare-email-routing/382769&#34; target=&#34;_blank&#34;&gt;How to use Gmail SMTP to send from an email address which uses Cloudflare email routing&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Trabalhando com IA e Aprendizagem de Máquina</title>
				<link>https://tncardoso.com/blog/2025/01/trabalhando-com-ia-e-aprendizagem-de-m%C3%A1quina/</link>
				<pubDate>Tue, 07 Jan 2025 13:00:00 -0300</pubDate>
				<guid>https://tncardoso.com/blog/2025/01/trabalhando-com-ia-e-aprendizagem-de-m%C3%A1quina/</guid>
				<description>&lt;p&gt;Já me perguntaram como se preparar para o mundo de Dados e Inteligência Artificial. Como essa área muda tão rápido, é difícil encontrar materiais que fiquem atualizados. Neste texto, vou compartilhar o que acho essencial saber e aprender.&lt;/p&gt;&#xA;&lt;p&gt;Se você já pesquisou sobre isso, sabe que programação, estatística, aprendizado de máquina e resolução de problemas são super importantes. Mas vou falar sobre habilidades menos discutidas: programação, fundamentos de computação e pensamento sistêmico.&lt;/p&gt;</description>
			</item>
			<item>
				<title>talks</title>
				<link>https://tncardoso.com/snippets/talks/</link>
				<pubDate>Fri, 01 Nov 2024 08:18:43 -0300</pubDate>
				<guid>https://tncardoso.com/snippets/talks/</guid>
				<description>&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://neofeed.com.br/videos/revolucao-ia/a-ia-e-mais-do-que-uma-opcao-do-cardapio-do-ifood/&#34; target=&#34;_blank&#34;&gt;2025 - NeoFeed - A IA é mais do que uma opção do cardápio do iFood&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=JDkGQGftkAE&#34; target=&#34;_blank&#34;&gt;2024 - Podcast AboutData com Gabriel Lages&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=LbW6WUva4NA&#34; target=&#34;_blank&#34;&gt;2024 - AIBrasil - Painel&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=XoDvxkJVHqI&#34; target=&#34;_blank&#34;&gt;2022 - CEFET-MG - Treinamento Data Science&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=vhO0RfNrmUI&#34; target=&#34;_blank&#34;&gt;2018 - Web.br - Ética e Responsabilidade em Inteligência Artificial&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=z07eo3kkLJg&#34; target=&#34;_blank&#34;&gt;2018 - Big Data Week - Inteligência Artificial em Foco&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Abstract Machine Learning Art</title>
				<link>https://tncardoso.com/blog/2024/07/abstract-machine-learning-art/</link>
				<pubDate>Sun, 07 Jul 2024 11:28:56 -0300</pubDate>
				<guid>https://tncardoso.com/blog/2024/07/abstract-machine-learning-art/</guid>
				<description>&lt;p&gt;Moving to a new home, I was confronted with empty walls. Thinking about images to decorate them reminded of an old project: creating abstract art using machine learning.&lt;/p&gt;&#xA;&lt;p&gt;It is fascinating to combine the rigidity of Linear Algebra with art and creativity. Inspired by the work of &lt;a href=&#34;https://drib.net/perception-engines&#34; target=&#34;_blank&#34;&gt;dribnet&lt;/a&gt;&#xA;, I aimed to create abstract images that could deceive Machine Learning algorithms while still being recognizable to humans. Different from dribnet&amp;rsquo;s approach, my objective was to generate those images with an end-to-end differentiable approach.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Turing Machine | Board Game</title>
				<link>https://tncardoso.com/blog/2023/11/turing-machine-board-game/</link>
				<pubDate>Sun, 26 Nov 2023 20:12:15 -0300</pubDate>
				<guid>https://tncardoso.com/blog/2023/11/turing-machine-board-game/</guid>
				<description>&lt;p&gt;Turing Machine is a competitive board game designed by Fabin Gridel and Yoann Levet. The goal is to uncover a three-digit code using minimal tests. The game features machines with multiple cards, each performing an unknown test. For example, one card might test if one digit is smaller than three, but the specific digit being tested remains a mystery until uncovered through gameplay. Players must strategically use their tests to deduce the correct code.&lt;/p&gt;</description>
			</item>
			<item>
				<title>sec/gdb</title>
				<link>https://tncardoso.com/snippets/sec_gdb/</link>
				<pubDate>Wed, 13 Sep 2023 08:00:23 -0300</pubDate>
				<guid>https://tncardoso.com/snippets/sec_gdb/</guid>
				<description>&lt;h3 id=&#34;coredump&#34;&gt;Coredump&lt;/h3&gt;&#xA;&lt;p&gt;Dumping the process memory can be useful for recovering data.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ # get the process pid&#xA;$ pgrep -l app_name&#xA;$ # attach gdb and dump core, this will kill the app&#xA;$ gdb &amp;lt;pid&amp;gt;&#xA;gcore app.dump&#xA;quit&#xA;$ # find data in dump&#xA;$ strings app.dump | grep &amp;quot;what i want to find&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>Generative AI reading (and watching) list</title>
				<link>https://tncardoso.com/blog/2023/05/generative-ai-reading-and-watching-list/</link>
				<pubDate>Mon, 08 May 2023 08:00:10 -0300</pubDate>
				<guid>https://tncardoso.com/blog/2023/05/generative-ai-reading-and-watching-list/</guid>
				<description>&lt;p&gt;Reading (and watching) list for getting started on Generative AI and&#xA;Prompting.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction-and-tools&#34;&gt;Introduction and Tools&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-link&#34; style=&#34;margin-right: 1em&#34;&gt;post&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.youtube.com/watch?v=zjkBMFhNj_g&#34; target=&#34;_blank&#34;&gt;Intro to Large Language Models&lt;/a&gt;&#xA;: Andrej Karpathy&amp;rsquo;s introductory content on LLMs. Explain a lot of the terms you usually find when reading about LLMs: training, hallucination, tools, etc.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-link&#34; style=&#34;margin-right: 1em&#34;&gt;post&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.youtube.com/watch?v=EWvNQjAaOHw&#34; target=&#34;_blank&#34;&gt;How I use LLMs&lt;/a&gt;&#xA;: A two hour video from Andrej Karpathy sharing how different tools can be used. How search, deep research, and thinking work. How to choose your tools, and other information.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;building-with-genai&#34;&gt;Building with GenAI&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-link&#34; style=&#34;margin-right: 1em&#34;&gt;post&lt;/span&gt;&#xA; &lt;a href=&#34;https://huyenchip.com/2023/04/11/llm-engineering.html&#34; target=&#34;_blank&#34;&gt;Building LLM applications for production&lt;/a&gt;&#xA;: &lt;a href=&#34;https://huyenchip.com/&#34; target=&#34;_blank&#34;&gt;Chip Huyen&lt;/a&gt;&#xA; has a lot of material on deploying Machine Learning models. This post is her considerations on moving LLM applications to production.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-link&#34; style=&#34;margin-right: 1em&#34;&gt;post&lt;/span&gt;&#xA; &lt;a href=&#34;https://huyenchip.com/2025/01/16/ai-engineering-pitfalls.html&#34; target=&#34;_blank&#34;&gt;Common pitfalls when building generative AI applications&lt;/a&gt;&#xA;: &lt;a href=&#34;https://huyenchip.com/&#34; target=&#34;_blank&#34;&gt;Chip Huyen&lt;/a&gt;&#xA;&amp;rsquo;s post on common mistakes.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-link&#34; style=&#34;margin-right: 1em&#34;&gt;post&lt;/span&gt;&#xA; &lt;a href=&#34;https://huyenchip.com/2025/01/07/agents.html&#34; target=&#34;_blank&#34;&gt;Agents&lt;/a&gt;&#xA;: Nice introduction about Agents, aligned with Anthropic&amp;rsquo;s &amp;lsquo;Building effective agents&amp;rsquo;.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-link&#34; style=&#34;margin-right: 1em&#34;&gt;post&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.anthropic.com/engineering/building-effective-agents&#34; target=&#34;_blank&#34;&gt;Building effective agents&lt;/a&gt;&#xA;: Anthropic&amp;rsquo;s lessons learned when building LLM agents.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;prompt-engineering&#34;&gt;Prompt Engineering&lt;/h2&gt;&#xA;&lt;p&gt;This section contains some information about Prompt Engineering, but keep in mind that as models improve, there is less need for complex techniques.&lt;/p&gt;</description>
			</item>
			<item>
				<title>ml/optimizers</title>
				<link>https://tncardoso.com/snippets/ml_optimizer/</link>
				<pubDate>Fri, 05 May 2023 08:18:43 -0300</pubDate>
				<guid>https://tncardoso.com/snippets/ml_optimizer/</guid>
				<description>&lt;h3 id=&#34;lion&#34;&gt;Lion&lt;/h3&gt;&#xA;&lt;p&gt;Lion is an learned optimizer that only uses the gradient sign for the&#xA;update vector. The paper &lt;a href=&#34;https://arxiv.org/abs/2302.06675&#34; target=&#34;_blank&#34;&gt;Symbolic Discovery of Optimization Algorithms&lt;/a&gt;&#xA; presents how they used symbolic AI.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def train(weight, gradient, momentum, lr):&#xA;    # default beta1 = 0.9, beta2 = 0.99&#xA;    # only tracks momentum and uses sign to compute update&#xA;    update = interp(gradient, momentum, beta1)&#xA;    update = sign(update)&#xA;    momentum = interp(gradient, momentum, beta2)&#xA;&#xA;    # regular weight decay&#xA;    weight_decay = weight * lambda&#xA;    update = update + weight_decay&#xA;&#xA;    update = update * lr&#xA;    return update, momentum&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>devices/huion</title>
				<link>https://tncardoso.com/snippets/devices_huion/</link>
				<pubDate>Thu, 03 Jun 2021 13:18:43 -0300</pubDate>
				<guid>https://tncardoso.com/snippets/devices_huion/</guid>
				<description>&lt;h3 id=&#34;map-device-to-primary-monitor&#34;&gt;Map device to primary monitor&lt;/h3&gt;&#xA;&lt;p&gt;It is possible to list devices using xsetwacom.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ xsetwacom --list devices&#xA;HUION Huion Tablet Pad pad      &#x9;id: 16&#x9;type: PAD&#xA;HUION Huion Tablet Pen stylus   &#x9;id: 17&#x9;type: STYLUS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The following script can be used to map the device:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ xsetwacom set &amp;quot;HUION Huion Tablet Pen stylus&amp;quot; MapToOutput &amp;quot;HEAD-1&amp;quot;&#xA;$ xsetwacom set &amp;quot;HUION Huion Tablet Pad pad&amp;quot; MapToOutput &amp;quot;HEAD-1&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Set coordinates when dealing with multiple monitors:&lt;/p&gt;</description>
			</item>
			<item>
				<title>git-wormhole: generating partial collisions in commits</title>
				<link>https://tncardoso.com/blog/2021/03/git-wormhole-generating-partial-collisions-in-commits/</link>
				<pubDate>Sat, 27 Mar 2021 16:40:10 -0300</pubDate>
				<guid>https://tncardoso.com/blog/2021/03/git-wormhole-generating-partial-collisions-in-commits/</guid>
				<description>&lt;p&gt;If you tried to add a substring from the git commit hash to your software version,  you may have noticed that it is not easy (or possible). For example, imagine you want to version your software as &amp;ldquo;0.0.0-aabbccdd&amp;rdquo;, being &amp;ldquo;aabbccdd&amp;rdquo; the commit&amp;rsquo;s prefix in which this version was defined.&lt;/p&gt;&#xA;&lt;p&gt;It turns out that the git hash is the sha1 of multiple pieces of information: the repository tree hash, the parent commit, author and committer name and email, Unix timestamp, timezone offset and message. You can visualize this information with &lt;code&gt;git cat-file&lt;/code&gt;:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Machine Learning reading (and watching) list</title>
				<link>https://tncardoso.com/blog/2020/10/machine-learning-reading-and-watching-list/</link>
				<pubDate>Thu, 08 Oct 2020 18:56:10 -0300</pubDate>
				<guid>https://tncardoso.com/blog/2020/10/machine-learning-reading-and-watching-list/</guid>
				<description>&lt;p&gt;Reading (and watching) list for getting started on Machine Learning.&lt;/p&gt;&#xA;&lt;h2 id=&#34;foundation&#34;&gt;Foundation&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-danger&#34; style=&#34;margin-right: 1em&#34;&gt;course&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.coursera.org/learn/machine-learning&#34; target=&#34;_blank&#34;&gt;Andrew Ng&amp;rsquo;s Machine Learning Course&lt;/a&gt;&#xA;: A good starting point. Although it is not recent, the course is a good overview of Machine Learning methods.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-danger&#34; style=&#34;margin-right: 1em&#34;&gt;course&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.coursera.org/specializations/deep-learning&#34; target=&#34;_blank&#34;&gt;Deep Learning Specialization&lt;/a&gt;&#xA;: Andrew&amp;rsquo;s specialization on Deep Learning methods that hold state of the art in many applications.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-danger&#34; style=&#34;margin-right: 1em&#34;&gt;course&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.coursera.org/learn/machine-learning-projects&#34; target=&#34;_blank&#34;&gt;Structuring Machine Learning Projects&lt;/a&gt;&#xA;: A course of the Deep Learning specialization that deserves mention. This is a short course with good practices for creating ML projects.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-info&#34; style=&#34;margin-right: 1em&#34;&gt;paper&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.researchgate.net/publication/260282920_A_Few_Useful_Things_to_Know_About_Machine_Learning&#34; target=&#34;_blank&#34;&gt;A Few Useful Things to Know About Machine Learning&lt;/a&gt;&#xA;: Paper with interesting thoughts on Machine Learning and our intuition when analyzing algorithms.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-link&#34; style=&#34;margin-right: 1em&#34;&gt;post&lt;/span&gt;&#xA; &lt;a href=&#34;https://medium.com/@karpathy/software-2-0-a64152b37c35&#34; target=&#34;_blank&#34;&gt;Software 2.0&lt;/a&gt;&#xA;: How Neural Networks change the way we program.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-success&#34; style=&#34;margin-right: 1em&#34;&gt;book&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.deeplearningbook.org/&#34; target=&#34;_blank&#34;&gt;Deep Learning&lt;/a&gt;&#xA;: Deep Learning go-to reference.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-success&#34; style=&#34;margin-right: 1em&#34;&gt;book&lt;/span&gt;&#xA; &lt;a href=&#34;https://web.stanford.edu/~hastie/ElemStatLearn/&#34; target=&#34;_blank&#34;&gt;The Elements of Statistical Learning&lt;/a&gt;&#xA;: A classic on Machine Learning.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-success&#34; style=&#34;margin-right: 1em&#34;&gt;book&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.microsoft.com/en-us/research/people/cmbishop/prml-book/&#34; target=&#34;_blank&#34;&gt;Pattern Recognition and Machine Learning&lt;/a&gt;&#xA;: A classic on Machine Learning.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-success&#34; style=&#34;margin-right: 1em&#34;&gt;book&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.cs.ubc.ca/~murphyk/MLbook/&#34; target=&#34;_blank&#34;&gt;Machine Learning: a Probabilistic Perspective&lt;/a&gt;&#xA;: A Machine Learning book with a probability view of algorithms.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;ml-in-production&#34;&gt;ML in Production&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-danger&#34; style=&#34;margin-right: 1em&#34;&gt;course&lt;/span&gt;&#xA; &lt;a href=&#34;https://stanford-cs329s.github.io/syllabus.html&#34; target=&#34;_blank&#34;&gt;CS 329S: Machine Learning Systems Design&lt;/a&gt;&#xA;: A full course on machine learning systems.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-link&#34; style=&#34;margin-right: 1em&#34;&gt;post&lt;/span&gt;&#xA; &lt;a href=&#34;https://developers.google.com/machine-learning/guides/rules-of-ml/&#34; target=&#34;_blank&#34;&gt;Rules of Machine Learning&lt;/a&gt;&#xA;: A guide with rules that should be considered when deploying models.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-info&#34; style=&#34;margin-right: 1em&#34;&gt;paper&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.kdd.org/kdd2019/accepted-papers/view/150-successful-machine-learning-models-6-lessons-learned-at-booking.com&#34; target=&#34;_blank&#34;&gt;150 successful Machine Learning models: 6 lessons learned at Booking.com&lt;/a&gt;&#xA;: Interesting remarks on deploying Machine Learning models to production.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-info&#34; style=&#34;margin-right: 1em&#34;&gt;paper&lt;/span&gt;&#xA; &lt;a href=&#34;https://research.google/pubs/pub43146/&#34; target=&#34;_blank&#34;&gt;Machine Learning: The High Interest Credit Card of Technical Debt&lt;/a&gt;&#xA;: Risk factors when deploying Machine Learning.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;reinforcement-learning&#34;&gt;Reinforcement Learning&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-danger&#34; style=&#34;margin-right: 1em&#34;&gt;course&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.coursera.org/specializations/reinforcement-learning?&#34; target=&#34;_blank&#34;&gt;Reinforcement Learning Specialization&lt;/a&gt;&#xA;: Reinforcement Learning specialization offered by University of Alberta.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-danger&#34; style=&#34;margin-right: 1em&#34;&gt;course&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.davidsilver.uk/teaching/&#34; target=&#34;_blank&#34;&gt;David Silver&amp;rsquo;s course on RL&lt;/a&gt;&#xA;: A good complement to the Reinforcement Learning specialization.&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-success&#34; style=&#34;margin-right: 1em&#34;&gt;book&lt;/span&gt;&#xA; &lt;a href=&#34;http://incompleteideas.net/book/the-book-2nd.html&#34; target=&#34;_blank&#34;&gt;Reinforcement Learning&lt;/a&gt;&#xA;: The reference in Reinforcement Learning.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;recommender-systems&#34;&gt;Recommender Systems&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;span class=&#34;tag is-danger&#34; style=&#34;margin-right: 1em&#34;&gt;course&lt;/span&gt;&#xA; &lt;a href=&#34;https://www.coursera.org/specializations/recommender-systems&#34; target=&#34;_blank&#34;&gt;Recommender Systems Specialization&lt;/a&gt;&#xA;: A starting point to Recommender Systems.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;changelog&#34;&gt;Changelog&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;[2021-03-27] Added Rules of ML and ML Systems Design.&lt;/li&gt;&#xA;&lt;li&gt;[2020-10-08] Published first version.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>LCD custom characters library</title>
				<link>https://tncardoso.com/blog/2020/07/lcd-custom-characters-library/</link>
				<pubDate>Sun, 26 Jul 2020 14:56:10 -0300</pubDate>
				<guid>https://tncardoso.com/blog/2020/07/lcd-custom-characters-library/</guid>
				<description>&lt;p&gt;If you use LCD components(1602, HD44780) and haven&amp;rsquo;t given up to modern OLEDs and e-ink displays, the chances are that you know the possibility of using custom characters.&lt;/p&gt;&#xA;&lt;p&gt;I was searching for some cut-and-paste characters for a project but could not find an easy solution. For that reason, I decided to assemble an editor and library with some characters.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://gh.tncardoso.com/lcd-custom-chars/&#34; target=&#34;_blank&#34;&gt;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;img src=&#34;https://tncardoso.com/blog/2020/07/lcd-custom-characters-library/img/screenshot_hu_c6636b8219306f9d.png&#34; alt=&#34;The editor with a selection of ready-to-use characters.&#34; /&gt;&#xA;  &lt;figcaption&gt;The editor with a selection of ready-to-use characters.&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Padoca: hotkey keyboard</title>
				<link>https://tncardoso.com/blog/2020/07/padoca-hotkey-keyboard/</link>
				<pubDate>Sun, 19 Jul 2020 18:36:30 -0300</pubDate>
				<guid>https://tncardoso.com/blog/2020/07/padoca-hotkey-keyboard/</guid>
				<description>&lt;p&gt;Online meetings became widespread during the 2020 COVID pandemic. Call etiquette mandates that you keep your microphone muted while not talking, as almost everyone knows. This mute-unmute dynamic inspired me to search for a more comfortable solution that didn&amp;rsquo;t involve pressing multiple keys on the keyboard or reaching for the mouse every time.&#xA;Luckily I stumbled upon this&#xA;&lt;a href=&#34;https://www.instructables.com/id/HotKeys-Keyboard-With-Custom-Profiles/&#34; target=&#34;_blank&#34;&gt;Instructable&lt;/a&gt;&#xA; by&#xA;&lt;a href=&#34;https://www.instructables.com/member/FabroLabs&amp;#43;Technologies/&#34; target=&#34;_blank&#34;&gt;FabroLabs Technologies&lt;/a&gt;&#xA;.&#xA;I decided to give it a try and build a hotkey keyboard from scratch: the casing, circuit, firmware, and keycaps.&lt;/p&gt;</description>
			</item>
			<item>
				<title>2017 electronic voting security tests</title>
				<link>https://tncardoso.com/blog/2018/01/2017-electronic-voting-security-tests/</link>
				<pubDate>Tue, 09 Jan 2018 17:18:43 -0300</pubDate>
				<guid>https://tncardoso.com/blog/2018/01/2017-electronic-voting-security-tests/</guid>
				<description>&lt;section class=&#34;section has-text-centered&#34;&gt;&#xA;  &lt;div class=&#34;is-inline-block&#34;&gt;&#xA;    &lt;img src=&#34;https://tncardoso.com/blog/2018/01/2017-electronic-voting-security-tests/img/eletronic-voting_hu_dcd5b2bf3a718628.webp&#34; width=&#34;213&#34; height=&#34;160&#34;&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/section&gt;&#xA;&#xA;&#xA;&lt;p&gt;During the public security tests of 2017, we were able to achieve&#xA;arbitrary code execution on the Brazilian voting machines. You can find&#xA;additional links and detailed information in&#xA;&lt;a href=&#34;https://urnaeletronica.info/links/&#34; target=&#34;_blank&#34;&gt;https://urnaeletronica.info/&lt;/a&gt;&#xA;&#xA;(Portuguese only). For an English version, access&#xA;&lt;a href=&#34;https://www.researchgate.net/publication/323470546_The_Return_of_Software_Vulnerabilities_in_the_Brazilian_Voting_Machine?channel=doi&amp;amp;linkId=5a9761de0f7e9ba42974d0c9&amp;amp;showFulltext=true&#34; target=&#34;_blank&#34;&gt;ResearchGate&lt;/a&gt;&#xA;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;links&#34;&gt;Links&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://urnaeletronica.info/links/&#34; target=&#34;_blank&#34;&gt;https://urnaeletronica.info/&lt;/a&gt;&#xA;:&#xA;portuguese links and information&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.researchgate.net/publication/323470546_The_Return_of_Software_Vulnerabilities_in_the_Brazilian_Voting_Machine?channel=doi&amp;amp;linkId=5a9761de0f7e9ba42974d0c9&amp;amp;showFulltext=true&#34; target=&#34;_blank&#34;&gt;Technical report&lt;/a&gt;&#xA; (EN)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/epicleet/tps2017&#34; target=&#34;_blank&#34;&gt;Github&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>apps/dbeaver</title>
				<link>https://tncardoso.com/snippets/apps_dbeaver/</link>
				<pubDate>Sat, 09 Sep 2017 17:18:43 -0300</pubDate>
				<guid>https://tncardoso.com/snippets/apps_dbeaver/</guid>
				<description>&lt;h3 id=&#34;single-connection-mode&#34;&gt;Single connection mode&lt;/h3&gt;&#xA;&lt;p&gt;dbeaver usually opens multiple connections to databases. If you have&#xA;limited connections, then it is necessary to restrict&#xA;the pool size or connection numbers. Since dbeaver does not have a&#xA;&amp;ldquo;Single connection mode&amp;rdquo;, a few tweaks are necessary.&lt;/p&gt;&#xA;&lt;p&gt;Disable using one exclusive connection for metadata:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Uncheck:&#xA;&#xA;&amp;gt; File&#xA;&amp;gt; Properties&#xA;&amp;gt; Metadata&#xA;&amp;gt; Open separate connection for metadata read&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Disable using exclusive connections for SQL Editors:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Dermis: libc wrapper with lua script</title>
				<link>https://tncardoso.com/blog/2017/09/dermis-libc-wrapper-with-lua-script/</link>
				<pubDate>Sat, 09 Sep 2017 17:18:43 -0300</pubDate>
				<guid>https://tncardoso.com/blog/2017/09/dermis-libc-wrapper-with-lua-script/</guid>
				<description>&lt;section class=&#34;section has-text-centered&#34;&gt;&#xA;  &lt;div class=&#34;is-inline-block&#34;&gt;&#xA;    &lt;img src=&#34;https://tncardoso.com/blog/2017/09/dermis-libc-wrapper-with-lua-script/img/dermis_hu_72653b51f42afa05.webp&#34; width=&#34;195&#34; height=&#34;169&#34;&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/section&gt;&#xA;&#xA;&#xA;&lt;p&gt;Dermis is a libc wrapper that can be dynamically loaded into a binary to&#xA;change its behavior using a lua script. For example, it is possible to avoid&#xA;sleep calls:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DERMIS=&amp;quot;example.lua&amp;quot; LD_PRELOAD=&amp;quot;/full/path/to/dermis.so&amp;quot; ./examples/sleep&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In &lt;code&gt;example.lua&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;function sleep(secs)&#xA;    print(&amp;quot;i should sleep&amp;quot;, secs, &amp;quot;seconds... nah&amp;quot;)&#xA;    return secs&#xA;end&#xA;dermis_register_sleep(sleep)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;links&#34;&gt;Links&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tncardoso/dermis&#34; target=&#34;_blank&#34;&gt;Github&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Gaming for the lazy</title>
				<link>https://tncardoso.com/blog/2014/09/gaming-for-the-lazy/</link>
				<pubDate>Mon, 01 Sep 2014 16:16:30 -0200</pubDate>
				<guid>https://tncardoso.com/blog/2014/09/gaming-for-the-lazy/</guid>
				<description>&lt;section class=&#34;section has-text-centered&#34;&gt;&#xA;  &lt;div class=&#34;is-inline-block&#34;&gt;&#xA;    &lt;img src=&#34;https://tncardoso.com/blog/2014/09/gaming-for-the-lazy/img/header_hu_373df022dda997b7.webp&#34; width=&#34;168&#34; height=&#34;118&#34;&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/section&gt;&#xA;&#xA;&#xA;&lt;p&gt;I come from a time when gaming was serious business. You could not beat&#xA;a game without hours of continuous effort. There was no such thing as&#xA;saving your progress and the only difficulty level was &amp;lsquo;Hard&amp;rsquo;.&lt;/p&gt;&#xA;&lt;p&gt;Once, as a kid, I was playing Sonic when someone accidentally kicked the&#xA;videogame, making the screen go black. After moments of tension, images&#xA;suddenly returned, surprisingly, in the final stage of the game.&#xA;Everyone claimed that the the more experienced player should finish it,&#xA;but I didn&amp;rsquo;t yield: it was my chance to shine. Of course, I would have&#xA;made a different decision if I knew I would lose in the first pit.&lt;/p&gt;</description>
			</item>
			<item>
				<title>artreepie, a procedural art bot</title>
				<link>https://tncardoso.com/blog/2014/08/artreepie-a-procedural-art-bot/</link>
				<pubDate>Sat, 09 Aug 2014 16:16:30 -0200</pubDate>
				<guid>https://tncardoso.com/blog/2014/08/artreepie-a-procedural-art-bot/</guid>
				<description>&lt;section class=&#34;section has-text-centered&#34;&gt;&#xA;  &lt;div class=&#34;is-inline-block&#34;&gt;&#xA;    &lt;img src=&#34;https://tncardoso.com/blog/2014/08/artreepie-a-procedural-art-bot/img/icon_hu_e214b1eb03bb96aa.webp&#34; width=&#34;128&#34; height=&#34;128&#34;&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/section&gt;&#xA;&#xA;&#xA;&lt;p&gt;Last week, I stumbled upon a great&#xA;&lt;a href=&#34;http://codegolf.stackexchange.com/questions/35569/tweetable-mathematical-art&#34; target=&#34;_blank&#34;&gt;stackexchange discussion on procedural art&lt;/a&gt;&#xA;.&#xA;The idea was to come up with three code snippets that would be used to generate an image.&#xA;More specifically, each snippet &amp;ndash; one for each&#xA;color channel (R, G, B) &amp;ndash; is a function that, given&#xA;a pixel coordinate, returns its intensity. Each snippet should fit in a single tweet.&lt;/p&gt;&#xA;&lt;p&gt;This very interesting exercise inspired me into creating&#xA;&lt;em&gt;&lt;a href=&#34;http://www.twitter.com/artreepie&#34; target=&#34;_blank&#34;&gt;@artreepie&lt;/a&gt;&#xA;&lt;/em&gt;. &lt;em&gt;artreepie&lt;/em&gt; is a Twitter bot that captures mentions to&#xA;him containing code snippets and generates art pieces. The three pieces of code sent to &lt;em&gt;artreepie&lt;/em&gt; from a&#xA;user are used to build the image, which is sent back to the user by the bot.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
