PageSourceSearch

https://feudo.org/sobre.html

html feudo.org collected 2026-10-06 11:16:32 UTC 33,863 bytes, 795 lines download raw bytes

1<!DOCTYPE html>
2<html xmlns="http://www.w3.org/1999/xhtml" lang="pt-BR" xml:lang="pt-BR"><head>
3
4<meta charset="utf-8">
5<meta name="generator" content="quarto-1.7.30">
6
7<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
8
9<meta name="author" content="Ricardo Sodré Andrade">
10<meta name="description" content="Ricardo Sodré Andrade — Arquivista, pesquisador e coordenador de projetos em Arquivologia, Humanidades Digitais e IA aplicada a arquivos">
11
12<title>Sobre – Ricardo Sodré Andrade</title>
13<style>
14code{white-space: pre-wrap;}
15span.smallcaps{font-variant: small-caps;}
16div.columns{display: flex; gap: min(4vw, 1.5em);}
17div.column{flex: auto; overflow-x: auto;}
18div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
19ul.task-list{list-style: none;}
20ul.task-list li input[type="checkbox"] {
21  width: 0.8em;
22  margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ 
23  vertical-align: middle;
24}
25</style>
26
27
28<script src="site_libs/quarto-nav/quarto-nav.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 28
28
29<script src="site_libs/quarto-nav/headroom.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 29
29
30<script src="site_libs/clipboard/clipboard.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 30
30
31<script src="site_libs/quarto-search/autocomplete.umd.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 31
31
32<script src="site_libs/quarto-search/fuse.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 32
32
33<script src="site_libs/quarto-search/quarto-search.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
33
34<meta name="quarto:offset" content="./">
35<link href="./files/images/favicon.svg" rel="icon" type="image/svg+xml">
36<script src="site_libs/quarto-html/quarto.js" type="108c8082abfc27108d2e4514-module"></script>
vendor: 1 bytes, line 36
36
37<script src="site_libs/quarto-html/tabsets/tabsets.js" type="108c8082abfc27108d2e4514-module"></script>
vendor: 1 bytes, line 37
37
38<script src="site_libs/quarto-html/popper.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 38
38
39<script src="site_libs/quarto-html/tippy.umd.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 39
39
40<script src="site_libs/quarto-html/anchor.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
40
41<link href="site_libs/quarto-html/tippy.css" rel="stylesheet">
42<link href="site_libs/quarto-html/quarto-syntax-highlighting-de070a7b0ab54f8780927367ac907214.css" rel="stylesheet" id="quarto-text-highlighting-styles">
43<script src="site_libs/bootstrap/bootstrap.min.js" type="108c8082abfc27108d2e4514-text/javascript"></script>
43
44<link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
45<link href="site_libs/bootstrap/bootstrap-64d7a16b0ddfb989e2d46c79f25fe6d2.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
46<script id="quarto-search-options" type="application/json">{
47  "location": "navbar",
48  "copy-button": false,
49  "collapse-after": 3,
50  "panel-placement": "end",
51  "type": "textbox",
52  "limit": 50,
53  "keyboard-shortcut": [
54    "f",
55    "/",
56    "s"
57  ],
58  "language": {
59    "search-no-results-text": "Nenhum resultado",
60    "search-matching-documents-text": "documentos correspondentes",
61    "search-copy-link-title": "Copiar link para a busca",
62    "search-hide-matches-text": "Esconder correspondências adicionais",
63    "search-more-match-text": "mais correspondência neste documento",
64    "search-more-matches-text": "mais correspondências neste documento",
65    "search-clear-button-title": "Limpar",
66    "search-text-placeholder": "",
67    "search-detached-cancel-button-title": "Cancelar",
68    "search-submit-button-title": "Enviar",
69    "search-label": "Procurar"
70  }
71}</script>
71
72
73<!-- 
74Load Academicons v1: https://jpswalsh.github.io/academicons/
75-->
76<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/jpswalsh/academicons@1/css/academicons.min.css">
77
78<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
79
80
81<!---
82The following code are needed to show dimension citation and altmetrics.
83https://api.altmetric.com/embeds.html
84https://badge.dimensions.ai/
85--->
86
87<script type="108c8082abfc27108d2e4514-text/javascript" src="https://d1bxh8uas1mnw7.cloudfront.net/assets/embed.js"></script>
87
88
89<script async="" src="https://badge.dimensions.ai/badge.js" charset="utf-8" type="108c8082abfc27108d2e4514-text/javascript"></script>
89
90
91<script type="108c8082abfc27108d2e4514-text/javascript" src="//cdn.plu.mx/widget-popup.js"></script>
91
92
93
94<link rel="stylesheet" href="styles.css">
95<meta property="og:title" content="Sobre – Ricardo Sodré Andrade">
96<meta property="og:description" content="Ricardo Sodré Andrade, arquivista, pesquisador e coordenador de projetos em Arquivologia, Humanidades Digitais e IA aplicada a arquivos">
97<meta property="og:image" content="https://feudo.org/files/images/foto.png">
98<meta property="og:site_name" content="Ricardo Sodré Andrade">
99<meta property="og:image:height" content="610">
100<meta property="og:image:width" content="1000">
101<meta name="twitter:title" content="Sobre – Ricardo Sodré Andrade">
102<meta name="twitter:description" content="Ricardo Sodré Andrade, arquivista, pesquisador e coordenador de projetos em Arquivologia, Humanidades Digitais e IA aplicada a arquivos">
103<meta name="twitter:image" content="https://feudo.org/files/images/foto.png">
104<meta name="twitter:image-height" content="610">
105<meta name="twitter:image-width" content="1000">
106<meta name="twitter:card" content="summary_large_image">
107</head>
108
109<body class="nav-fixed quarto-light">
110
111<div id="quarto-search-results"></div>
112  <header id="quarto-header" class="headroom fixed-top">
113    <nav class="navbar navbar-expand-lg " data-bs-theme="dark">
114      <div class="navbar-container container-fluid">
115      <div class="navbar-brand-container mx-auto">
116    <a class="navbar-brand" href="./index.html">
117    <span class="navbar-title">Ricardo Sodré Andrade</span>
118    </a>
119  </div>
120            <div id="quarto-search" class="" title="Procurar"></div>
121          <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Alternar de navegação" onclick="if (!window.__cfRLUnblockHandlers) return false; if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }" data-cf-modified-108c8082abfc27108d2e4514-="">
122  <span class="navbar-toggler-icon"></span>
123</button>
124          <div class="collapse navbar-collapse" id="navbarCollapse">
125            <ul class="navbar-nav navbar-nav-scroll me-auto">
126  <li class="nav-item dropdown ">
127    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-sobre" role="link" data-bs-toggle="dropdown" aria-expanded="false">
128 <span class="menu-text">Sobre</span>
129    </a>
130    <ul class="dropdown-menu" aria-labelledby="nav-menu-sobre">    
131        <li>
132    <a class="dropdown-item" href="./sobre.html">
133 <span class="dropdown-text">Bio</span></a>
134  </li>  
135        <li>
136    <a class="dropdown-item" href="./contato.html">
137 <span class="dropdown-text">Contato</span></a>
138  </li>  
139    </ul>
140  </li>
141  <li class="nav-item">
142    <a class="nav-link" href="./trajetoria.html"> 
143<span class="menu-text">Trajetória</span></a>
144  </li>  
145  <li class="nav-item dropdown ">
146    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-pesquisa" role="link" data-bs-toggle="dropdown" aria-expanded="false">
147 <span class="menu-text">Pesquisa</span>
148    </a>
149    <ul class="dropdown-menu" aria-labelledby="nav-menu-pesquisa">    
150        <li>
151    <a class="dropdown-item" href="./labhdufba.html">
152 <span class="dropdown-text">LABHDUFBA</span></a>
153  </li>  
154        <li>
155    <a class="dropdown-item" href="./grupos-anteriores.html">
156 <span class="dropdown-text">Grupos de Pesquisa</span></a>
157  </li>  
158        <li>
159    <a class="dropdown-item" href="./publicacoes.html">
160 <span class="dropdown-text">Publicações</span></a>
161  </li>  
162        <li>
163    <a class="dropdown-item" href="./apresentacoes.html">
164 <span class="dropdown-text">Apresentações</span></a>
165  </li>  
166    </ul>
167  </li>
168  <li class="nav-item dropdown ">
169    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-desenvolvimento" role="link" data-bs-toggle="dropdown" aria-expanded="false">
170 <span class="menu-text">Desenvolvimento</span>
171    </a>
172    <ul class="dropdown-menu" aria-labelledby="nav-menu-desenvolvimento">    
173        <li>
174    <a class="dropdown-item" href="./farinha.html">
175 <span class="dropdown-text">Farinha</span></a>
176  </li>  
177        <li>
178    <a class="dropdown-item" href="./archives-world-map.html">
179 <span class="dropdown-text">Archives World Map</span></a>
180  </li>  
181        <li>
182    <a class="dropdown-item" href="./inteligencia-artificial.html">
183 <span class="dropdown-text">Inteligência Artificial</span></a>
184  </li>  
185    </ul>
186  </li>
187  <li class="nav-item dropdown ">
188    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-textos" role="link" data-bs-toggle="dropdown" aria-expanded="false">
189 <span class="menu-text">Textos</span>
190    </a>
191    <ul class="dropdown-menu" aria-labelledby="nav-menu-textos">    
192        <li>
193    <a class="dropdown-item" href="./textos.html#category=medium">
194 <span class="dropdown-text">Medium</span></a>
195  </li>  
196        <li>
197    <a class="dropdown-item" href="./textos.html#category=arquivista-net">
198 <span class="dropdown-text">ricardo.arquivista.net</span></a>
199  </li>  
200    </ul>
201  </li>
202</ul>
203            <ul class="navbar-nav navbar-nav-scroll ms-auto">
204  <li class="nav-item compact">
205    <a class="nav-link" href="https://github.com/rsandrade" target="_blank"> <i class="bi bi-github" role="img">
206</i> 
207<span class="menu-text"></span></a>
208  </li>  
209  <li class="nav-item compact">
210    <a class="nav-link" href="https://www.linkedin.com/in/rsandrade/" target="_blank"> <i class="bi bi-linkedin" role="img">
211</i> 
212<span class="menu-text"></span></a>
213  </li>  
214  <li class="nav-item compact">
215    <a class="nav-link" href="https://instagram.com/todosaquelesarquivos" target="_blank"> <i class="bi bi-instagram" role="img">
216</i> 
217<span class="menu-text"></span></a>
218  </li>  
219  <li class="nav-item compact">
220    <a class="nav-link" href="./posts.xml" target="_blank"> <i class="bi bi-rss" role="img">
221</i> 
222<span class="menu-text"></span></a>
223  </li>  
224</ul>
225          </div> <!-- /navcollapse -->
226            <div class="quarto-navbar-tools">
227</div>
228      </div> <!-- /container-fluid -->
229    </nav>
230</header>
231<!-- content -->
232<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
233<!-- sidebar -->
234<!-- margin-sidebar -->
235    <div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
236        <nav id="TOC" role="doc-toc" class="toc-active">
237    <h2 id="toc-title">Nesta página</h2>
238   
239  <ul>
240  <li><a href="#bio" id="toc-bio" class="nav-link active" data-scroll-target="#bio">Bio</a></li>
241  <li><a href="#habilidades-técnicas" id="toc-habilidades-técnicas" class="nav-link" data-scroll-target="#habilidades-técnicas">Habilidades Técnicas</a></li>
242  </ul>
243</nav>
244    </div>
245<!-- main -->
246<main class="content" id="quarto-document-content">
247
248<header id="title-block-header" class="quarto-title-block default">
249<div class="quarto-title">
250<h1 class="title">Sobre</h1>
251</div>
252
253<div>
254  <div class="description">
255    Ricardo Sodré Andrade, arquivista, pesquisador e coordenador de projetos em Arquivologia, Humanidades Digitais e IA aplicada a arquivos
256  </div>
257</div>
258
259
260<div class="quarto-title-meta">
261
262    
263  
264    
265  </div>
266  
267
268
269</header>
270
271
272<script type="108c8082abfc27108d2e4514-text/javascript">document.body.dataset.i18nPageTitle='page-about-title';document.body.dataset.i18nPageDesc='page-about-desc';</script>
272
273<section id="bio" class="level2" data-i18n="about-bio-title">
274<h2 class="anchored" data-anchor-id="bio">Bio</h2>
275</section>
276<div data-i18n-html="about-bio-p1">
277<p>Mestre em Ciência da Informação e bacharel em Arquivologia pela Universidade Federal da Bahia (UFBA). Atualmente exerce o cargo de <strong>Chefe do Escritório Regional Nordeste (ERE-NE) do Arquivo Nacional</strong> (2025–) e é servidor da UFBA, onde atua como arquivista, estando cedido ao Arquivo Nacional. Coordena os projetos <strong><a href="https://farinha.info">Farinha</a></strong>, software livre para criação de plataformas de acesso a acervos permanentes e memoriais, e <strong><a href="https://arquivos.ufba.br">Arquivos da UFBA</a></strong>, plataforma de integração e acesso aos arquivos e coleções da Universidade Federal da Bahia.</p>
278</div>
279<div data-i18n-html="about-bio-p2">
280<p>Possui trajetória voltada à gestão de acervos, ao tratamento técnico da informação arquivística e ao desenvolvimento de iniciativas de acesso, difusão e inovação. Tem experiência em descrição arquivística, representação da informação e desenvolvimento de plataformas digitais voltadas ao acesso a acervos, incluindo iniciativas com uso de inteligência artificial (agentes e RAG).</p>
281</div>
282<div data-i18n-html="about-bio-p3">
283<p>Desde 2024, atua no <strong><a href="https://labhd.ufba.br">LABHDUFBA</a></strong> (Laboratório de Humanidades Digitais da UFBA). Foi coordenador do <strong>CRIDI</strong> (Grupo de Estudos sobre Cultura, Representação e Informação Digitais) entre 2019 e 2026, grupo do qual é membro desde 2008. Passou também pelos grupos de pesquisa GEPICC (2003–2008) e GEPINDI (2004–2007).</p>
284</div>
285<div data-i18n-html="about-bio-p4">
286<p>Sua atuação percorre as interfaces entre Arquivologia, Humanidades Digitais, acesso à informação, cultura hacker, software livre e tecnologias aplicadas aos arquivos, com pesquisa aplicada em IA e acervos documentais. É radioamador (PU6RIC), de nacionalidade brasileira e portuguesa, e foi delegado eleito para a I CNARQ e delegado designado para a II CNARQ (Conferência Nacional de Arquivos).</p>
287</div>
288<section id="habilidades-técnicas" class="level2" data-i18n="about-skills-title">
289<h2 class="anchored" data-anchor-id="habilidades-técnicas">Habilidades Técnicas</h2>
290</section>
291<ul>
292<li><span data-i18n="skill-1">Gestão de documentos e arquivos</span></li>
293<li><span data-i18n="skill-2">Descrição arquivística e representação da informação</span></li>
294<li><span data-i18n="skill-3">Humanidades Digitais</span></li>
295<li><span data-i18n="skill-4">Inteligência Artificial aplicada a arquivos (agentes e RAG)</span></li>
296<li><span data-i18n="skill-5">Desenvolvimento de sistemas para gestão arquivística</span></li>
297<li><span data-i18n="skill-6">Gestão na administração pública</span></li>
298<li><span data-i18n="skill-7">Coordenação de projetos tecnológicos</span></li>
299<li><span data-i18n="skill-8">Liderança técnica (Tech Lead)</span></li>
300<li><span data-i18n="skill-9">Administração de sistemas e infraestrutura digital</span></li>
301<li><span data-i18n="skill-10">Preservação digital</span></li>
302<li><span data-i18n="skill-11">Software Livre e Ciência Aberta</span></li>
303<li><span data-i18n="skill-12">Certificado EMPRETEC</span></li>
304</ul>
305
306
307
308</main> <!-- /main -->
309<!-- feudo.org i18n: language detection + selector -->
310<!-- All styles inline to guarantee they override Bootstrap/Quarto -->
311<!-- NOTE: Quarto navbar always has data-bs-theme="dark" so we style for dark navbar context -->
312<style>
313.lang-selector {
314  display: flex !important;
315  gap: 0.3rem !important;
316  align-items: center !important;
317  flex-shrink: 0 !important;
318  padding: 0 0.5rem !important;
319}
320.lang-selector .lang-btn {
321  background: #3a5068 !important;
322  border: 1px solid rgba(255,255,255,0.3) !important;
323  border-radius: 3px !important;
324  color: #fff !important;
325  font-size: 0.72rem !important;
326  font-weight: 700 !important;
327  padding: 0.3rem 0.55rem !important;
328  cursor: pointer !important;
329  transition: all 0.15s ease !important;
330  letter-spacing: 0.04em !important;
331  line-height: 1.3 !important;
332  white-space: nowrap !important;
333  text-decoration: none !important;
334  display: inline-block !important;
335  opacity: 1 !important;
336  visibility: visible !important;
337}
338.lang-selector .lang-btn:hover {
339  background: #4a6278 !important;
340  border-color: rgba(255,255,255,0.5) !important;
341  transform: translateY(-1px);
342  box-shadow: 0 2px 4px rgba(0,0,0,0.2) !important;
343}
344.lang-selector .lang-btn-active {
345  background: #c0392b !important;
346  border-color: transparent !important;
347  color: #fff !important;
348  font-weight: 800 !important;
349  box-shadow: 0 1px 3px rgba(192,57,43,0.4) !important;
350}
351@media (max-width: 991.98px) {
352  .lang-selector { padding: 0.5rem 0 !important; gap: 0.4rem !important; justify-content: center !important; width: 100% !important; border-top: 1px solid rgba(255,255,255,0.1); }
353  .lang-selector .lang-btn { padding: 0.4rem 0.8rem !important; font-size: 0.9rem !important; }
354  .navbar-collapse .navbar-nav.ms-auto { display: flex !important; flex-direction: row !important; gap: 0.25rem !important; justify-content: center !important; width: 100% !important; }
355  .navbar-collapse .navbar-nav.ms-auto .nav-item.compact { margin: 0 !important; padding: 0 !important; }
356}
357</style>
358<script src="https://feudo.org/i18n/i18n.js?v=6" type="108c8082abfc27108d2e4514-text/javascript"></script>
vendor: 1 bytes, line 358
358
359<script id="quarto-html-after-body" type="108c8082abfc27108d2e4514-application/javascript">
360  window.document.addEventListener("DOMContentLoaded", function (event) {
361    const icon = "";
362    const anchorJS = new window.AnchorJS();
363    anchorJS.options = {
364      placement: 'right',
365      icon: icon
366    };
367    anchorJS.add('.anchored');
368    const isCodeAnnotation = (el) => {
369      for (const clz of el.classList) {
370        if (clz.startsWith('code-annotation-')) {                     
371          return true;
372        }
373      }
374      return false;
375    }
376    const onCopySuccess = function(e) {
377      // button target
378      const button = e.trigger;
379      // don't keep focus
380      button.blur();
381      // flash "checked"
382      button.classList.add('code-copy-button-checked');
383      var currentTitle = button.getAttribute("title");
384      button.setAttribute("title", "Copiada");
385      let tooltip;
386      if (window.bootstrap) {
387        button.setAttribute("data-bs-toggle", "tooltip");
388        button.setAttribute("data-bs-placement", "left");
389        button.setAttribute("data-bs-title", "Copiada");
390        tooltip = new bootstrap.Tooltip(button, 
391          { trigger: "manual", 
392            customClass: "code-copy-button-tooltip",
393            offset: [0, -8]});
394        tooltip.show();    
395      }
396      setTimeout(function() {
397        if (tooltip) {
398          tooltip.hide();
399          button.removeAttribute("data-bs-title");
400          button.removeAttribute("data-bs-toggle");
401          button.removeAttribute("data-bs-placement");
402        }
403        button.setAttribute("title", currentTitle);
404        button.classList.remove('code-copy-button-checked');
405      }, 1000);
406      // clear code selection
407      e.clearSelection();
408    }
409    const getTextToCopy = function(trigger) {
410        const codeEl = trigger.previousElementSibling.cloneNode(true);
411        for (const childEl of codeEl.children) {
412          if (isCodeAnnotation(childEl)) {
413            childEl.remove();
414          }
415        }
416        return codeEl.innerText;
417    }
418    const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
419      text: getTextToCopy
420    });
421    clipboard.on('success', onCopySuccess);
422    if (window.document.getElementById('quarto-embedded-source-code-modal')) {
423      const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
424        text: getTextToCopy,
425        container: window.document.getElementById('quarto-embedded-source-code-modal')
426      });
427      clipboardModal.on('success', onCopySuccess);
428    }
429      var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
430      var mailtoRegex = new RegExp(/^mailto:/);
431        var filterRegex = new RegExp("https:\/\/feudo\.org");
432      var isInternal = (href) => {
433          return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
434      }
435      // Inspect non-navigation links and adorn them if external
436     var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
437      for (var i=0; i<links.length; i++) {
438        const link = links[i];
439        if (!isInternal(link.href)) {
440          // undo the damage that might have been done by quarto-nav.js in the case of
441          // links that we want to consider external
442          if (link.dataset.originalHref !== undefined) {
443            link.href = link.dataset.originalHref;
444          }
445            // target, if specified
446            link.setAttribute("target", "_blank");
447            if (link.getAttribute("rel") === null) {
448              link.setAttribute("rel", "noopener");
449            }
450        }
451      }
452    function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
453      const config = {
454        allowHTML: true,
455        maxWidth: 500,
456        delay: 100,
457        arrow: false,
458        appendTo: function(el) {
459            return el.parentElement;
460        },
461        interactive: true,
462        interactiveBorder: 10,
463        theme: 'quarto',
464        placement: 'bottom-start',
465      };
466      if (contentFn) {
467        config.content = contentFn;
468      }
469      if (onTriggerFn) {
470        config.onTrigger = onTriggerFn;
471      }
472      if (onUntriggerFn) {
473        config.onUntrigger = onUntriggerFn;
474      }
475      window.tippy(el, config); 
476    }
477    const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
478    for (var i=0; i<noterefs.length; i++) {
479      const ref = noterefs[i];
480      tippyHover(ref, function() {
481        // use id or data attribute instead here
482        let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
483        try { href = new URL(href).hash; } catch {}
484        const id = href.replace(/^#\/?/, "");
485        const note = window.document.getElementById(id);
486        if (note) {
487          return note.innerHTML;
488        } else {
489          return "";
490        }
491      });
492    }
493    const xrefs = window.document.querySelectorAll('a.quarto-xref');
494    const processXRef = (id, note) => {
495      // Strip column container classes
496      const stripColumnClz = (el) => {
497        el.classList.remove("page-full", "page-columns");
498        if (el.children) {
499          for (const child of el.children) {
500            stripColumnClz(child);
501          }
502        }
503      }
504      stripColumnClz(note)
505      if (id === null || id.startsWith('sec-')) {
506        // Special case sections, only their first couple elements
507        const container = document.createElement("div");
508        if (note.children && note.children.length > 2) {
509          container.appendChild(note.children[0].cloneNode(true));
510          for (let i = 1; i < note.children.length; i++) {
511            const child = note.children[i];
512            if (child.tagName === "P" && child.innerText === "") {
513              continue;
514            } else {
515              container.appendChild(child.cloneNode(true));
516              break;
517            }
518          }
519          if (window.Quarto?.typesetMath) {
520            window.Quarto.typesetMath(container);
521          }
522          return container.innerHTML
523        } else {
524          if (window.Quarto?.typesetMath) {
525            window.Quarto.typesetMath(note);
526          }
527          return note.innerHTML;
528        }
529      } else {
530        // Remove any anchor links if they are present
531        const anchorLink = note.querySelector('a.anchorjs-link');
532        if (anchorLink) {
533          anchorLink.remove();
534        }
535        if (window.Quarto?.typesetMath) {
536          window.Quarto.typesetMath(note);
537        }
538        if (note.classList.contains("callout")) {
539          return note.outerHTML;
540        } else {
541          return note.innerHTML;
542        }
543      }
544    }
545    for (var i=0; i<xrefs.length; i++) {
546      const xref = xrefs[i];
547      tippyHover(xref, undefined, function(instance) {
548        instance.disable();
549        let url = xref.getAttribute('href');
550        let hash = undefined; 
551        if (url.startsWith('#')) {
552          hash = url;
553        } else {
554          try { hash = new URL(url).hash; } catch {}
555        }
556        if (hash) {
557          const id = hash.replace(/^#\/?/, "");
558          const note = window.document.getElementById(id);
559          if (note !== null) {
560            try {
561              const html = processXRef(id, note.cloneNode(true));
562              instance.setContent(html);
563            } finally {
564              instance.enable();
565              instance.show();
566            }
567          } else {
568            // See if we can fetch this
569            fetch(url.split('#')[0])
570            .then(res => res.text())
571            .then(html => {
572              const parser = new DOMParser();
573              const htmlDoc = parser.parseFromString(html, "text/html");
574              const note = htmlDoc.getElementById(id);
575              if (note !== null) {
576                const html = processXRef(id, note);
577                instance.setContent(html);
578              } 
579            }).finally(() => {
580              instance.enable();
581              instance.show();
582            });
583          }
584        } else {
585          // See if we can fetch a full url (with no hash to target)
586          // This is a special case and we should probably do some content thinning / targeting
587          fetch(url)
588          .then(res => res.text())
589          .then(html => {
590            const parser = new DOMParser();
591            const htmlDoc = parser.parseFromString(html, "text/html");
592            const note = htmlDoc.querySelector('main.content');
593            if (note !== null) {
594              // This should only happen for chapter cross references
595              // (since there is no id in the URL)
596              // remove the first header
597              if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
598                note.children[0].remove();
599              }
600              const html = processXRef(null, note);
601              instance.setContent(html);
602            } 
603          }).finally(() => {
604            instance.enable();
605            instance.show();
606          });
607        }
608      }, function(instance) {
609      });
610    }
611        let selectedAnnoteEl;
612        const selectorForAnnotation = ( cell, annotation) => {
613          let cellAttr = 'data-code-cell="' + cell + '"';
614          let lineAttr = 'data-code-annotation="' +  annotation + '"';
615          const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
616          return selector;
617        }
618        const selectCodeLines = (annoteEl) => {
619          const doc = window.document;
620          const targetCell = annoteEl.getAttribute("data-target-cell");
621          const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
622          const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
623          const lines = annoteSpan.getAttribute("data-code-lines").split(",");
624          const lineIds = lines.map((line) => {
625            return targetCell + "-" + line;
626          })
627          let top = null;
628          let height = null;
629          let parent = null;
630          if (lineIds.length > 0) {
631              //compute the position of the single el (top and bottom and make a div)
632              const el = window.document.getElementById(lineIds[0]);
633              top = el.offsetTop;
634              height = el.offsetHeight;
635              parent = el.parentElement.parentElement;
636            if (lineIds.length > 1) {
637              const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
638              const bottom = lastEl.offsetTop + lastEl.offsetHeight;
639              height = bottom - top;
640            }
641            if (top !== null && height !== null && parent !== null) {
642              // cook up a div (if necessary) and position it 
643              let div = window.document.getElementById("code-annotation-line-highlight");
644              if (div === null) {
645                div = window.document.createElement("div");
646                div.setAttribute("id", "code-annotation-line-highlight");
647                div.style.position = 'absolute';
648                parent.appendChild(div);
649              }
650              div.style.top = top - 2 + "px";
651              div.style.height = height + 4 + "px";
652              div.style.left = 0;
653              let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
654              if (gutterDiv === null) {
655                gutterDiv = window.document.createElement("div");
656                gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
657                gutterDiv.style.position = 'absolute';
658                const codeCell = window.document.getElementById(targetCell);
659                const gutter = codeCell.querySelector('.code-annotation-gutter');
660                gutter.appendChild(gutterDiv);
661              }
662              gutterDiv.style.top = top - 2 + "px";
663              gutterDiv.style.height = height + 4 + "px";
664            }
665            selectedAnnoteEl = annoteEl;
666          }
667        };
668        const unselectCodeLines = () => {
669          const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
670          elementsIds.forEach((elId) => {
671            const div = window.document.getElementById(elId);
672            if (div) {
673              div.remove();
674            }
675          });
676          selectedAnnoteEl = undefined;
677        };
678          // Handle positioning of the toggle
679      window.addEventListener(
680        "resize",
681        throttle(() => {
682          elRect = undefined;
683          if (selectedAnnoteEl) {
684            selectCodeLines(selectedAnnoteEl);
685          }
686        }, 10)
687      );
688      function throttle(fn, ms) {
689      let throttle = false;
690      let timer;
691        return (...args) => {
692          if(!throttle) { // first call gets through
693              fn.apply(this, args);
694              throttle = true;
695          } else { // all the others get throttled
696              if(timer) clearTimeout(timer); // cancel #2
697              timer = setTimeout(() => {
698                fn.apply(this, args);
699                timer = throttle = false;
700              }, ms);
701          }
702        };
703      }
704        // Attach click handler to the DT
705        const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
706        for (const annoteDlNode of annoteDls) {
707          annoteDlNode.addEventListener('click', (event) => {
708            const clickedEl = event.target;
709            if (clickedEl !== selectedAnnoteEl) {
710              unselectCodeLines();
711              const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
712              if (activeEl) {
713                activeEl.classList.remove('code-annotation-active');
714              }
715              selectCodeLines(clickedEl);
716              clickedEl.classList.add('code-annotation-active');
717            } else {
718              // Unselect the line
719              unselectCodeLines();
720              clickedEl.classList.remove('code-annotation-active');
721            }
722          });
723        }
724    const findCites = (el) => {
725      const parentEl = el.parentElement;
726      if (parentEl) {
727        const cites = parentEl.dataset.cites;
728        if (cites) {
729          return {
730            el,
731            cites: cites.split(' ')
732          };
733        } else {
734          return findCites(el.parentElement)
735        }
736      } else {
737        return undefined;
738      }
739    };
740    var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
741    for (var i=0; i<bibliorefs.length; i++) {
742      const ref = bibliorefs[i];
743      const citeInfo = findCites(ref);
744      if (citeInfo) {
745        tippyHover(citeInfo.el, function() {
746          var popup = window.document.createElement('div');
747          citeInfo.cites.forEach(function(cite) {
748            var citeDiv = window.document.createElement('div');
749            citeDiv.classList.add('hanging-indent');
750            citeDiv.classList.add('csl-entry');
751            var biblioDiv = window.document.getElementById('ref-' + cite);
752            if (biblioDiv) {
753              citeDiv.innerHTML = biblioDiv.innerHTML;
754            }
755            popup.appendChild(citeDiv);
756          });
757          return popup.innerHTML;
758        });
759      }
760    }
761  });
762  </script>
762
763</div> <!-- /content -->
764<footer class="footer">
765  <div class="nav-footer">
766    <div class="nav-footer-left">
767Ricardo Sodré Andrade ©
768<script type="108c8082abfc27108d2e4514-text/javascript">document.write(new Date().getFullYear())</script>
768
769</div>   
770    <div class="nav-footer-center">
771<p>Construído com <a href="https://quarto.org">Quarto</a> · Template <a href="https://github.com/drganghe/quarto-academic-website-template">Dr.&nbsp;Gang He</a></p>
772</div>
773    <div class="nav-footer-right">
774      <ul class="footer-items list-unstyled">
775    <li class="nav-item compact">
776    <a class="nav-link" href="https://github.com/rsandrade" target="_blank">
777      <i class="bi bi-github" role="img">
778</i> 
779    </a>
780  </li>  
781    <li class="nav-item compact">
782    <a class="nav-link" href="./posts.xml" target="_blank">
783      <i class="bi bi-rss" role="img">
784</i> 
785    </a>
786  </li>  
787</ul>
788    </div>
789  </div>
790</footer>
vendor: 147 bytes, lines 790-795
790
791
792
793
794
795<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="108c8082abfc27108d2e4514-|49" defer></script>
795</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.