<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Cátia Barros — Blog</title>
    <link>https://catia.pt/blog</link>
    <description>O mundo aos olhos da geração Z: reflexões sobre jornalismo, tecnologia e o que aprendo pelo caminho.</description>
    <language>pt-PT</language>
    <atom:link href="https://catia.pt/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Os meus amigos engenheiros tinham razão</title>
      <link>https://catia.pt/blog/amigos-engenheiros-tinham-razao</link>
      <guid isPermaLink="true">https://catia.pt/blog/amigos-engenheiros-tinham-razao</guid>
      <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
      <description>Sobre desenrascar, reaproveitar mecânicas e a crítica que os meus amigos engenheiros sempre me fizeram: é preciso saber reutilizar.</description>
      <content:encoded><![CDATA[<p>Durante o secundário estudei ciências, uma escolha influenciada por um professor que via em mim uma futura engenheira. Não foram os anos em que me senti mais confortável (não ajudava ser a única rapariga da turma, com a sensação de que tudo me custava mais só por isso, mas esse é assunto para outro dia).</p>
<p>Guardo boas memórias dessa altura e, sobretudo, um grupo de amigos que ainda hoje aparece a qualquer hora. Ao contrário de mim, todos eles enveredaram por alguma engenharia e trabalham em informática. Eu fui pelo jornalismo, mas nunca deixei de querer juntar o mundo deles ao meu.</p>
<p>Sou finalista da pandemia. Acabei a licenciatura em junho de 2020, por Zoom, e foi por essa altura que decidi aprender desenvolvimento web, muito por nem ter a certeza de que o jornalismo era mesmo para mim. Comprei um curso de doze euros na Udemy e aprendi a viver na arte do desenrascanço: horas de Stack Overflow (confesso que até tenho saudades) e mensagens intermináveis aos meus amigos a perguntar como raio se fazia isto ou aquilo.</p>
<p>Eles nunca perceberam bem por que é que eu me dava a tanto trabalho. Achavam estranho, mas depressa se renderam à ideia de que eu tinha metido na cabeça seguir por ali e não havia volta a dar.</p>
<p>E foram sempre incansáveis. Não se chateiam quando lhes falo de gamificação durante horas ou lhes atiro dúvidas sem pés nem cabeça, e ainda não desistiram de me explicar o que é a programação orientada a objetos. Dizem-me que percebo mais do que julgo, mas há uma crítica que nunca falha: eu não penso como um engenheiro.</p>
<p>E é verdade. Um engenheiro trata de facilitar a própria vida: se uma mecânica funciona, torna-a reutilizável. Eu funcionava ao contrário, cada projeto começado do zero e deitado ao lixo no fim. Quando nos juntamos para um café lá na nossa terra natal, a conversa cai sempre no «então, e o trabalho?», e há uns tempos começou a escapar-lhes um «estás a começar a pensar como uma engenheira».</p>
<p>E acho que têm razão, não só sobre mim. Fala-se tanto de produtividade, de como a IA nos vai salvar a vida, mas antes disso há um gesto bem mais simples ao alcance de qualquer jornalista: pensar um bocadinho como engenheiro. Perguntar o que se pode montar agora para não andar a repetir o mesmo trabalho amanhã. No jornalismo isto faz ainda mais sentido, porque vivemos mergulhados na maré da atualidade e o mundo interrompe-nos a toda a hora.</p>
<p>Estes dias têm sido tomados por essa maré. O INE pôs fim ao vazio estatístico sobre <a href="https://expresso.pt/migracoes/2026-06-22-fim-do-vazio-estatistico-quem-sao-onde-vivem-e-de-onde-vem-os-imigrantes-em-portugal-7fe2b024" target="_blank" rel="noopener noreferrer">quem são e de onde vêm os imigrantes em Portugal</a>, a Venezuela <a href="https://expresso.pt/venezuela/2026-06-25-dois-sismos-em-39-segundos-onde-com-que-forca-e-ha-quanto-tempo-nao-tremia-assim-a-venezuela-2e498f2b" target="_blank" rel="noopener noreferrer">tremeu duas vezes em 39 segundos</a>, houve <a href="https://multimedia.expresso.pt/incendios2025/" target="_blank" rel="noopener noreferrer">incêndios</a> e mudaram as <a href="https://expresso.pt/sociedade/saude/2026-07-05-novas-regras-de-acesso-ao-sns-o-que-muda-e-quem-arrisca-perder-o-medico-de-familia--bdf4b551" target="_blank" rel="noopener noreferrer">regras de acesso ao SNS</a>. Escrevi sobre tudo isto nos últimos quinze dias. E, no meio da correria, ainda lancei dois newsgames com uma semana de intervalo. Um é um <a href="https://multimedia.expresso.pt/mundial2026quiz" target="_blank" rel="noopener noreferrer">quiz sobre os Mundiais de futebol</a>, com uma estética inspirada nos cromos e nas cadernetas da Panini. O outro conta os <a href="https://multimedia.expresso.pt/independenciaeua/" target="_blank" rel="noopener noreferrer">250 anos da independência dos EUA</a> numa timeline de presidentes e marcos, e saiu a 4 de julho.</p>
<p><img src="https://catia.pt/posts/quiz-mundiais-tribuna.png" alt="Ecrã inicial do quiz dos Mundiais: uma grelha de cartas azuis com jogadores de várias seleções, ao estilo de caderneta de cromos.">
<em>O quiz dos Mundiais, no Tribuna Expresso, com uma estética inspirada nos cromos da Panini.</em></p>
<p><img src="https://catia.pt/posts/jogo-250-anos-eua.png" alt="Ecrã inicial do jogo dos 250 anos dos EUA: uma fila de retratos de presidentes sobre uma linha do tempo que vai de 1776 a 2026.">
<em>Os 250 anos da independência dos EUA, dos presidentes aos momentos mais marcantes.</em></p>
<p>Os dois nascem da mesma ideia, gamificar timelines, uma coisa que o New York Times faz lindamente no seu <a href="https://www.nytimes.com/spotlight/flashback" target="_blank" rel="noopener noreferrer">quiz</a>. A mecânica é idêntica: recebes uma carta de cada vez, com uma pista, e tens de a encaixar no sítio certo da linha do tempo. A lógica de arrastar, validar e pontuar está escrita uma única vez; de um jogo para o outro, só troco o ficheiro de dados, que preparei com colegas que sabem muito mais de Mundiais e dos Estados Unidos do que eu.</p>
<p>É essa a parte de que mais gosto. Uma timeline à moda antiga é uma lista de datas por onde os olhos passam sem parar. Transformada em jogo, coloca quem lê no centro da história: em vez de a receber pronta, é a própria pessoa que arruma cada acontecimento no seu lugar e vai construindo a cronologia a seu ritmo. E, para quem só quer informar-se, fica sempre a porta aberta para passar tudo à frente e ler de seguida.</p>
<p>As interfaces não podiam ser mais diferentes, mas é a mesma engrenagem a contar 250 anos de história americana ou décadas de Mundiais. Há uns anos teria feito os dois do princípio ao fim, um a um. Desta vez fiz um motor, e para a próxima timeline jogável já não parto do zero. Se calhar era só isto que eles andavam a tentar dizer-me, ali sentados à mesa do café.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Cinco anos de dados dentro de uma tooltip</title>
      <link>https://catia.pt/blog/tooltip-datawrapper-grafico-mapa</link>
      <guid isPermaLink="true">https://catia.pt/blog/tooltip-datawrapper-grafico-mapa</guid>
      <pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate>
      <description>Como usei HTML para meter a evolução da população estrangeira desde 2021 dentro das tooltips de um mapa do Datawrapper.</description>
      <content:encoded><![CDATA[<p>Para quem faz jornalismo de dados, visual ou infográfico, as ferramentas que já existem facilitam imenso a vida. Com um ficheiro de Excel limpo ou um CSV, é possível pôr um mapa ou um gráfico no ar em talvez menos de cinco minutos.</p>
<p>O reverso é que personalizar dá trabalho. Com dados públicos, é natural que vários jornais cheguem a mapas parecidos: partem do mesmo ficheiro e as ferramentas, por defeito, levam a resultados semelhantes. Não tem nada de mal. Mas, neste caso, apeteceu-me ir um pouco mais além.</p>
<p>Esta segunda-feira, o INE voltou a publicar as estimativas da população. Tinha suspendido as publicações sobre imigração e população estrangeira para validar os <a href="https://expresso.pt/sociedade/2025-10-16-aima-reve-em-baixa-numero-de-estrangeiros-a-viver-em-portugal-sao-1.543.697-50d4eb45" target="_blank" rel="noopener noreferrer">dados da AIMA</a>, e foi assim que se chegou ao que no Expresso chamámos de <a href="https://expresso.pt/sociedade/2025-12-18-estado-nao-sabe-quantos-sao-e-onde-vivem-os-imigrantes-ine-suspende-estatisticas-e-admite-reavaliar-numeros-b0f222c3" target="_blank" rel="noopener noreferrer">‘vazio estatístico’</a>: em dezembro de 2025, o Estado não sabia ao certo quantos eram nem onde viviam os imigrantes.</p>
<p>A revisão do INE não foi só de 2025. O Instituto reviu também os números de 2021 a 2024 e, no caso da população estrangeira, publicou 2024 pela primeira vez. As correções foram grandes, e vieram quase todas da população estrangeira, que estava subavaliada. Para dar uma ideia: o total de residentes em 2024 subiu de 10,7 para 11,4 milhões, e o número de estrangeiros em 2023 passou de cerca de 1,05 para 1,35 milhões. Em 2025, a população residente chegou aos 11.424.031, o valor mais alto de que há registo, com mais de 800 mil pessoas do que em 2021, quase tudo por via da imigração.</p>
<p>Os números do INE são, ainda assim, de natureza diferente dos da AIMA. São uma estimativa de residentes, que cruza registos fiscais, da segurança social e escolares para apurar onde as pessoas vivem, e não uma contagem de títulos de residência.</p>
<p>Com tantos números novos, e com aquilo que o jornalismo de dados permite, deixar o leitor ver os dados onde quer, sabia que valia a pena fazer o retrato: quem são, onde vivem e de onde vêm os imigrantes em Portugal.</p>
<p>Mas havia um problema. Os dados iam de 2021 a 2025, e um coroplético mostra um número só, o de 2025. Sentia que anos e anos de informação iam ficar esquecidos, escondidos atrás de uma cor única.</p>
<p>E a web tem uma vantagem rara: deixa mexer por baixo do que está à vista. Foi o que fiz, uma versão do mapa onde, ao passar o cursor por um concelho, aparece a evolução desde 2021.</p>
<p><img src="https://images.impresa.pt/expresso/2026-06-22-pop_estrangeira_retrato-ff8a0742-1/original" alt="Mapa da população estrangeira por concelho, com a tooltip do concelho de Odemira aberta a mostrar a evolução desde 2021"></p>
<p>O Datawrapper é claro na documentação sobre isto: explica como <a href="https://www.datawrapper.de/academy/i-want-to-change-how-my-data-appears-in-tooltips" target="_blank" rel="noopener noreferrer">mudar a forma como os dados aparecem nas tooltips</a> e até como <a href="https://www.datawrapper.de/academy/how-to-embed-charts-into-tooltips" target="_blank" rel="noopener noreferrer">embeber gráficos dentro delas</a>. Era exatamente o que eu queria. Com HTML, consegui condensar os cinco anos numa tooltip: de um lado, os números absolutos de 2021 e 2025; do outro, um pequeno gráfico de barras com a percentagem de estrangeiros no total de residentes, ano a ano.</p>
<p>Impus duas regras. A escala do gráfico tinha de ser igual em todos os concelhos, para que as barras fossem comparáveis de tooltip para tooltip. E a cor de cada barra tinha de coincidir com a legenda do mapa, em vez de uma cor única, para que a barra de cada ano dissesse a mesma coisa que o concelho pintado.</p>
<p>As percentagens, a altura de cada barra e a cor de cada ano foram calculadas antes e juntas ao ficheiro como colunas. Na tooltip, é só encaixá-las no sítio, através de placeholders:</p>
<pre><code class="hljs language-html">{{ UPPER(nome) }} <span class="hljs-tag">&lt;<span class="hljs-name">hr</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;font-family:inherit;width:max-content;max-width:340px;padding:0px 0px&quot;</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;font-size:11px;color:#888;margin:2px 0 2px&quot;</span>&gt;</span>População estrangeira<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;display:flex;gap:4px;align-items:flex-start&quot;</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;flex:0 0 auto&quot;</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;font-size:11px;color:#888;line-height:1.1&quot;</span>&gt;</span>em 2021<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;font-size:13px;color:#888;margin-bottom:8px&quot;</span>&gt;</span>{{ FORMAT(valor_2021, &quot;0,0&quot;) }}<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;font-size:11px;color:#015782;line-height:1.1&quot;</span>&gt;</span>em 2025<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;font-size:22px;font-weight:bold;color:#015782;line-height:1.1&quot;</span>&gt;</span>{{ FORMAT(valor_2025, &quot;0,0&quot;) }}<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
   <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;flex:0 0 auto;border-left:1px solid #e5e5e5;padding-left:6px&quot;</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;font-size:10px;color:#888;margin-bottom:6px;white-space:nowrap&quot;</span>&gt;</span>% do total de residentes<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;display:flex;align-items:flex-end;gap:6px&quot;</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;display:flex;flex-direction:column;align-items:center;width:18px&quot;</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;font-size:9px;color:#888;line-height:1;margin-bottom:2px&quot;</span>&gt;</span>{{ FORMAT(percentagem_2021, &quot;0%&quot;) }}<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;width:12px;height:64px;background:#eef1f3;display:flex;align-items:flex-end&quot;</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;width:100%;height:{{ altura_2021 }}px;background:{{ cor_2021 }}&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
          <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;font-size:9px;color:#888;margin-top:3px&quot;</span>&gt;</span>&#x27;21<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
        <span class="hljs-comment">&lt;!-- &#x27;22, &#x27;23, &#x27;24 seguem o mesmo padrão --&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;display:flex;flex-direction:column;align-items:center;width:18px&quot;</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;font-size:9px;font-weight:bold;color:#015782;line-height:1;margin-bottom:2px&quot;</span>&gt;</span>{{ FORMAT(percentagem_2025, &quot;0%&quot;) }}<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;width:12px;height:64px;background:#eef1f3;display:flex;align-items:flex-end&quot;</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;width:100%;height:{{ altura_2025 }}px;background:{{ cor_2025 }}&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
          <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
          <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;font-size:9px;color:#015782;font-weight:bold;margin-top:3px&quot;</span>&gt;</span>&#x27;25<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></code></pre><p>A barra é o truque: um carril cinzento de altura fixa, 64px, e lá dentro um segundo elemento cuja altura e cor vêm do ficheiro. Encostado ao fundo, cresce de baixo para cima, como uma barra deve crescer.</p>
<p>Em Odemira, o concelho com maior peso de população estrangeira do país, a tooltip mostra 14 794 estrangeiros em 2021 e 22 930 em 2025, com a série de percentagens em 41%, 48%, 52%, 53% e 52%. Reparem que 2024 (53%) está acima de 2025 (52%). Não é uma subida limpa até ao fim, e era isso que eu queria mostrar: a trajetória, e não uma seta a apontar para cima.</p>
<p>No fim, por baixo, continua a ser o mesmo coroplético. O que muda é o que o leitor encontra quando se aproxima: cinco anos de história onde, por defeito, só apareceria um número. Foi isso que quis acrescentar.</p>
<p>Podes ler o artigo e explorar os dados <a href="https://expresso.pt/migracoes/2026-06-22-fim-do-vazio-estatistico-quem-sao-onde-vivem-e-de-onde-vem-os-imigrantes-em-portugal-7fe2b024" target="_blank" rel="noopener noreferrer">aqui</a>.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>