PageSourceSearch

https://www.maartengrootendorst.com/projects/

html maartengrootendorst.com collected 2026-09-24 09:10:25 UTC 32,009 bytes, 990 lines download raw bytes

1
2<!doctype html>
3<html lang="en" class="no-js">
4  <head>
5    
6      <meta charset="utf-8">
7      <meta name="viewport" content="width=device-width,initial-scale=1">
8      
9        <meta name="description" content="My Personal Website">
10      
11      
12        <meta name="author" content="Maarten Grootendorst">
13      
14      
15        <link rel="canonical" href="https://maartengrootendorst.com/projects/">
16      
17      
18        <link rel="prev" href="../blog/">
19      
20      
21        <link rel="next" href="../talks/">
22      
23      
24      <link rel="icon" href="../images/favicon.ico">
25      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.15">
26    
27    
28      
29        <title>Open Source - Maarten Grootendorst</title>
30      
31    
32    
33      <link rel="stylesheet" href="../assets/stylesheets/main.342714a4.min.css">
34      
35        
36        <link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
37      
38      
39
40
41    
42    
43      
44    
45    
46      
47        
48        
49        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
50        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lora:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
51        <style>:root{--md-text-font:"Lora";--md-code-font:"Roboto Mono"}</style>
52      
53    
54    
55      <link rel="stylesheet" href="../stylesheets/extra.css">
56    
57      <link rel="stylesheet" href="../stylesheets/custom_box.css">
58    
59      <link rel="stylesheet" href="../stylesheets/hbox.css">
60    
61      <link rel="stylesheet" href="../stylesheets/profile.css">
62    
63    
63<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
63
64    
65      
66
67    
68    
69    
70  </head>
71  
72  
73    
74    
75    
76    
77    
78    <body dir="ltr" data-md-color-scheme="light" data-md-color-primary="indigo" data-md-color-accent="indigo">
79  
80    
81    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
82    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
83    <label class="md-overlay" for="__drawer"></label>
84    <div data-md-component="skip">
85      
86        
87        <a href="#open-source" class="md-skip">
88          Skip to content
89        </a>
90      
91    </div>
92    <div data-md-component="announce">
93      
94    </div>
95    
96    
97      <!--
98  Copyright (c) 2016-2024 Martin Donath <[email protected]>
99
100  Permission is hereby granted, free of charge, to any person obtaining a copy
101  of this software and associated documentation files (the "Software"), to
102  deal in the Software without restriction, including without limitation the
103  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
104  sell copies of the Software, and to permit persons to whom the Software is
105  furnished to do so, subject to the following conditions:
106
107  The above copyright notice and this permission notice shall be included in
108  all copies or substantial portions of the Software.
109
110  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
111  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
112  FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
113  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
114  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
115  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
116  IN THE SOFTWARE.
117-->
118
119<!-- Determine classes -->
120
121
122
123<!-- Header -->
124<header class="md-header" data-md-component="header">
125  <nav
126    class="md-header__inner md-grid"
127    aria-label="Header"
128  >
129
130    <!-- Link to home -->
131    <a
132      href=".."
133      title="Maarten Grootendorst"
134      class="md-header__button md-logo"
135      aria-label="Maarten Grootendorst"
136      data-md-component="logo"
137    >
138      
139  <img src="../images/logo.png" alt="logo">
140
141    </a>
142
143    <!-- Button to open drawer -->
144    <label class="md-header__button md-icon" for="__drawer">
145      
146      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
147    </label>
148
149    <!-- Header title -->
150    <div class="md-header__title">
151      <div class="md-header__ellipsis">
152        <div class="md-header__topic">
153          <span class="md-ellipsis">
154            Maarten Grootendorst
155          </span>
156        </div>
157        <div class="md-header__topic" data-md-component="header-topic">
158          <span class="md-ellipsis">
159            
160              Open Source
161            
162          </span>
163        </div>
164      </div>
165    </div>
166
167    <!-- Color palette toggle -->
168    
169      
170    
171
172    <!-- User preference: color palette -->
173    
174
175    <!-- Site language selector -->
176    
177
178    <!-- Button to open search modal -->
179    
180      <label class="md-header__button md-icon" for="__search">
181        
182        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
183      </label>
184
185      <!-- Search interface -->
186      <div class="md-search" data-md-component="search" role="dialog">
187  <label class="md-search__overlay" for="__search"></label>
188  <div class="md-search__inner" role="search">
189    <form class="md-search__form" name="search">
190      <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
191      <label class="md-search__icon md-icon" for="__search">
192        
193        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
193<path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
194        
195        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
196      </label>
197      <nav class="md-search__options" aria-label="Search">
198        
199        <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
200          
201          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
202        </button>
203      </nav>
204      
205    </form>
206    <div class="md-search__output">
207      <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
208        <div class="md-search-result" data-md-component="search-result">
209          <div class="md-search-result__meta">
210            Initializing search
211          </div>
212          <ol class="md-search-result__list" role="presentation"></ol>
213        </div>
214      </div>
215    </div>
216  </div>
217</div>
218    
219
220    <!-- Repository information -->
221    
222  </nav>
223
224  <!-- Navigation tabs (sticky) -->
225  
226</header>
227    
228    <div class="md-container" data-md-component="container">
229      
230      
231        
232          
233            
234<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
235  <div class="md-grid">
236    <ul class="md-tabs__list">
237      
238        
239  
240  
241  
242  
243    <li class="md-tabs__item">
244      <a href=".." class="md-tabs__link">
245        
246  
247  
248    
249  
250  Home
251
252      </a>
253    </li>
254  
255
256      
257        
258  
259  
260  
261  
262    <li class="md-tabs__item">
263      <a href="../book/" class="md-tabs__link">
264        
265  
266  
267    
268  
269  Books
270
271      </a>
272    </li>
273  
274
275      
276        
277  
278  
279  
280  
281    <li class="md-tabs__item">
282      <a href="../blog/" class="md-tabs__link">
283        
284  
285  
286    
287  
288  Newsletter
289
290      </a>
291    </li>
292  
293
294      
295        
296  
297  
298  
299    
300  
301  
302    <li class="md-tabs__item md-tabs__item--active">
303      <a href="./" class="md-tabs__link">
304        
305  
306  
307    
308  
309  Open Source
310
311      </a>
312    </li>
313  
314
315      
316        
317  
318  
319  
320  
321    <li class="md-tabs__item">
322      <a href="../talks/" class="md-tabs__link">
323        
324  
325  
326    
327  
328  Talks
329
330      </a>
331    </li>
332  
333
334      
335        
336  
337  
338  
339  
340    <li class="md-tabs__item">
341      <a href="../contact/" class="md-tabs__link">
342        
343  
344  
345    
346  
347  Contact
348
349      </a>
350    </li>
351  
352
353      
354    </ul>
355  </div>
356</nav>
357          
358        
359      
360      <main class="md-main" data-md-component="main">
361        <div class="md-main__inner md-grid">
362          
363            
364              
365                
366              
367              <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" hidden>
368                <div class="md-sidebar__scrollwrap">
369                  <div class="md-sidebar__inner">
370                    
371
372
373  
374
375
376<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
377  <label class="md-nav__title" for="__drawer">
378    <a href=".." title="Maarten Grootendorst" class="md-nav__button md-logo" aria-label="Maarten Grootendorst" data-md-component="logo">
379      
380  <img src="../images/logo.png" alt="logo">
381
382    </a>
383    Maarten Grootendorst
384  </label>
385  
386  <ul class="md-nav__list" data-md-scrollfix>
387    
388      
389      
390  
391  
392  
393  
394    <li class="md-nav__item">
395      <a href=".." class="md-nav__link">
396        
397  
398  
399  <span class="md-ellipsis">
400    Home
401    
402  </span>
403  
404
405      </a>
406    </li>
407  
408
409    
410      
411      
412  
413  
414  
415  
416    <li class="md-nav__item">
417      <a href="../book/" class="md-nav__link">
418        
419  
420  
421  <span class="md-ellipsis">
422    Books
423    
424  </span>
425  
426
427      </a>
428    </li>
429  
430
431    
432      
433      
434  
435  
436  
437  
438    <li class="md-nav__item">
439      <a href="../blog/" class="md-nav__link">
440        
441  
442  
443  <span class="md-ellipsis">
444    Newsletter
445    
446  </span>
447  
448
449      </a>
450    </li>
451  
452
453    
454      
455      
456  
457  
458    
459  
460  
461  
462    <li class="md-nav__item md-nav__item--active">
463      
464      <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
465      
466      
467        
468      
469      
470      <a href="./" class="md-nav__link md-nav__link--active">
471        
472  
473  
474  <span class="md-ellipsis">
475    Open Source
476    
477  </span>
478  
479
480      </a>
481      
482    </li>
483  
484
485    
486      
487      
488  
489  
490  
491  
492    <li class="md-nav__item">
493      <a href="../talks/" class="md-nav__link">
494        
495  
496  
497  <span class="md-ellipsis">
498    Talks
499    
500  </span>
501  
502
503      </a>
504    </li>
505  
506
507    
508      
509      
510  
511  
512  
513  
514    <li class="md-nav__item">
515      <a href="../contact/" class="md-nav__link">
516        
517  
518  
519  <span class="md-ellipsis">
520    Contact
521    
522  </span>
523  
524
525      </a>
526    </li>
527  
528
529    
530  </ul>
531</nav>
532                  </div>
533                </div>
534              </div>
535            
536            
537              
538                
539              
540              <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" hidden>
541                <div class="md-sidebar__scrollwrap">
542                  <div class="md-sidebar__inner">
543                    
544
545<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
546  
547  
548  
549    
550  
551  
552</nav>
553                  </div>
554                </div>
555              </div>
556            
557          
558          
559            <div class="md-content" data-md-component="content">
560              <article class="md-content__inner md-typeset">
561                
562                  
563  
564
565
566
567
568<h1 id="open-source">Open Source</h1>
569<p>Over the last few years, I have developed several open-source packages that used widely by the community.
570You can find an overview of these projects and packages here. </p>
571<div class="custom-box" onclick="location.href='https://github.com/MaartenGr/BERTopic';">
572  <div class="custom-box-image">
573    <img src="/images/projects/bertopic.png" alt="Post Image">
574  </div>
575  <div class="custom-box-content">
576    <div class="custom-box-title">BERTopic</div>
577    <div class="custom-box-body">BERTopic is a novel topic modeling technique that leverages BERT embeddings and c-TF-IDF to create dense clusters allowing for easily interpretable topics.<br><br>
578    <img src="https://img.shields.io/badge/LLM-black">
579    <img src="https://img.shields.io/badge/Topic%20Modeling-black">
580    <img src="https://img.shields.io/badge/UMAP-black">
581    <img src="https://img.shields.io/badge/HDBSCAN-black">
582    <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/maartengr/bertopic">
583
584    </div>
585  </div>
586</div>
587
588<div class="custom-box" 
589     onclick="if (event.button === 0) window.location.href='https://github.com/MaartenGr/polyfuzz';" 
590     onmousedown="if (event.button === 1) window.open('https://github.com/MaartenGr/polyfuzz', '_blank');" 
591     oncontextmenu="return true;">
592  <div class="custom-box-image">
593    <img src="/images/projects/polyfuzz.png" alt="Post Image">
594  </div>
595  <div class="custom-box-content">
596    <div class="custom-box-title">PolyFuzz</div>
597    <div class="custom-box-body">
598      PolyFuzz performs fuzzy string matching, string grouping, and contains extensive evaluation functions. 
599      PolyFuzz is meant to bring fuzzy string matching techniques together within a single framework.
600      <br><br>
601      <img src="https://img.shields.io/badge/NLP-black">
602      <img src="https://img.shields.io/badge/RapidFuzz-black">
603      <img src="https://img.shields.io/badge/Embeddings-black">
604      <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/maartengr/polyfuzz">
605    </div>
606  </div>
607</div>
608
609<div class="custom-box" onclick="location.href='https://github.com/MaartenGr/keybert';">
610  <div class="custom-box-image">
611    <img src="/images/projects/keybert.png" alt="Post Image">
612  </div>
613  <div class="custom-box-content">
614    <div class="custom-box-title">KeyBERT</div>
615    <div class="custom-box-body">KeyBERT is a minimal and easy-to-use keyword extraction technique that leverages BERT embeddings to create keywords and keyphrases that are most similar to a document.<br><br>
616    <img src="https://img.shields.io/badge/LLM-black">
617    <img src="https://img.shields.io/badge/BERT-black">
618    <img src="https://img.shields.io/badge/MMR-black">
619    <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/maartengr/keybert">
620    </div>
621  </div>
622</div>
623
624<div class="custom-box" onclick="location.href='https://github.com/MaartenGr/concept';">
625  <div class="custom-box-image">
626    <img src="/images/projects/concept.png" alt="Post Image">
627  </div>
628  <div class="custom-box-content">
629    <div class="custom-box-title">Concept</div>
630    <div class="custom-box-body">Concept introduces the concept of Concept Modeling. It takes inspiration from topic modeling techniques to cluster images, find commonalities (i.e. concepts) and create a multimodal representation.<br><br>
631    <img src="https://img.shields.io/badge/NLP-black">
632    <img src="https://img.shields.io/badge/Computer%20Vision-black">
633    <img src="https://img.shields.io/badge/Topic%20Modeling-black">
634    <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/maartengr/concept">
635    </div>
636  </div>
637</div>
638
639<div class="custom-box" onclick="location.href='https://github.com/MaartenGr/soan';">
640  <div class="custom-box-image">
641    <img src="/images/projects/soan.jpg" alt="Post Image">
642  </div>
643  <div class="custom-box-content">
644    <div class="custom-box-title">SoAn</div>
645    <div class="custom-box-body">Created a package that allows in-depth analyses (sentiment analysis, topic modelling, etc.) on whatsapp conversations.
645<br><br>
646    <img src="https://img.shields.io/badge/Text%20Mining-black">
647    <img src="https://img.shields.io/badge/Sentiment%20Analysis-black">
648    <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/maartengr/soan">
649    </div>
650  </div>
651</div>
652
653<div class="custom-box" onclick="location.href='https://github.com/MaartenGr/vlac';">
654  <div class="custom-box-image">
655    <img src="/images/projects/vlac.jpg" alt="Post Image">
656  </div>
657  <div class="custom-box-content">
658    <div class="custom-box-title">VLAC</div>
659    <div class="custom-box-body">Leveraging clusters of word embeddings to create features from a collection of documents allowing for classification of documents.<br><br>
660    <img src="https://img.shields.io/badge/Published-black">
661    <img src="https://img.shields.io/badge/Embeddings-black">
662    <img src="https://img.shields.io/badge/Clustering-black">
663    <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/maartengr/vlac">
664    </div>
665  </div>
666</div>
667
668<div class="custom-box" onclick="location.href='https://github.com/MaartenGr/reinlife';">
669  <div class="custom-box-image">
670    <img src="/images/projects/reinlife.gif" alt="Post Image">
671  </div>
672  <div class="custom-box-content">
673    <div class="custom-box-title">ReinLife</div>
674    <div class="custom-box-body">Using Reinforcement Learning, entities learn to survive, reproduce, and make sure to maximize the fitness of their kin.<br><br>
675    <img src="https://img.shields.io/badge/Reinforcement%20Learning-black">
676    <img src="https://img.shields.io/badge/Pytorch-black">
677    <img src="https://img.shields.io/badge/Tensorflow-black">
678    <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/maartengr/reinlife">
679    </div>
680  </div>
681</div>
682
683<h1 id="analyses">Analyses</h1>
684<p>A small selection of projects and analyses I have done in the past to further develop my Data Science skills in my early career. It's nice to see where I started and how I ended.</p>
685<div class="custom-box" onclick="location.href='https://github.com/MaartenGr/reviewer';">
686  <div class="custom-box-image">
687    <img src="/images/projects/reviewer.jpg" alt="Post Image">
688  </div>
689  <div class="custom-box-content">
690    <div class="custom-box-title">Reviewer</div>
691    <div class="custom-box-body">A package for scraping user reviews from IMDB, generate C-TF-IDF based word clouds, and extract popular characters from reviews.<br><br>
692    <img src="https://img.shields.io/badge/BERT-black">
693    <img src="https://img.shields.io/badge/NER-black">
694    <img src="https://img.shields.io/badge/Scraper-black">
695    <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/maartengr/reviewer">
696    </div>
697  </div>
698</div>
699
700<div class="custom-box" onclick="location.href='https://github.com/MaartenGr/DisneyTournament';">
701  <div class="custom-box-image">
702    <img src="/images/projects/disney.jpg" alt="Post Image">
703  </div>
704  <div class="custom-box-content">
705    <div class="custom-box-title">Disney</div>
706    <div class="custom-box-body">Tournament brackets are generated based on a seed score calculated through scraping data from IMDB and RottenTomatoes.<br><br>
707    <img src="https://img.shields.io/badge/Scraper-black">
708    <img src="https://img.shields.io/badge/Statistical%20Analysis-black">
709    <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/maartengr/DisneyTournament">
710    </div>
711  </div>
712</div>
713
714<div class="custom-box" onclick='location.href="https://github.com/MaartenGr/Projects/blob/master/Notebooks/AppStoreAnalysis.ipynb";'>
715  <div class="custom-box-image">
716    <img src="/images/projects/appstore.jpg" alt="Post Image">
717  </div>
718  <div class="custom-box-content">
719    <div class="custom-box-title">Hurdle Model</div>
720    <div class="custom-box-body">Used Apple Store data to analyze which business model aspects (entry timing and technological innovation) influence performance of mobile games.<br><br>
721    <img src="https://img.shields.io/badge/Hurdle-black">
722    <img src="https://img.shields.io/badge/ZINB%20Regression-black">
723    </div>
724  </div>
725</div>
726
727<div class="custom-box" onclick="location.href='https://github.com/MaartenGr/boardgame';">
728  <div class="custom-box-image">
729    <img src="/images/projects/streamlit.jpg" alt="Post Image">
730  </div>
731  <div class="custom-box-content">
732    <div class="custom-box-title">Boardgame Exploration</div>
733    <div class="custom-box-body">Created an application for exploring board game matches that I tracked over the last year. Streamlit and Heroku were used for deployment.<br><br>
734    <img src="https://img.shields.io/badge/Streamlit-black">
735    <img src="https://img.shields.io/badge/Heroku-black">
736    <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/maartengr/boardgame">
737    </div>
738  </div>
739</div>
740
741
742
743
744
745
746
747  
748  
749
750
751
752
753  
754
755
756
757                
758              </article>
759            </div>
760          
761          
762<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
762
763        </div>
764        
765      </main>
766      
767        <footer class="md-footer">
768  
769  <div class="md-footer-meta md-typeset">
770    <div class="md-footer-meta__inner md-grid">
771      <div class="md-copyright">
772  
773  
774</div>
775      
776        <!--
777  Copyright (c) 2016-2024 Martin Donath <[email protected]>
778
779  Permission is hereby granted, free of charge, to any person obtaining a copy
780  of this software and associated documentation files (the "Software"), to
781  deal in the Software without restriction, including without limitation the
782  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
783  sell copies of the Software, and to permit persons to whom the Software is
784  furnished to do so, subject to the following conditions:
785
786  The above copyright notice and this permission notice shall be included in
787  all copies or substantial portions of the Software.
788
789  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
790  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
791  FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
792  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
793  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
794  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
795  IN THE SOFTWARE.
796-->
797
798<!-- Social links -->
799<div class="md-social">
800  
801
802    <!-- Automatically set rel=me for Mastodon -->
803    
804    
805
806    <!-- Compute title and render link -->
807    
808    
809      
810      
811    
812    <a
813      href="https://github.com/MaartenGr/"
814      target="_blank" rel="noopener"
815      title="GitHub"
816      class="md-social__link"
817    >
818    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
819    </a>
820    <a
821      href="https://github.com/MaartenGr/"
822      target="_blank" rel="noopener"
823      title="GitHub"
824      class="md-social__icons"
825    >
826    GitHub
827    </a>
828  
829
830    <!-- Automatically set rel=me for Mastodon -->
831    
832    
833
834    <!-- Compute title and render link -->
835    
836    
837      
838      
839    
840    <a
841      href="https://www.linkedin.com/in/mgrootendorst/"
842      target="_blank" rel="noopener"
843      title="LinkedIn"
844      class="md-social__link"
845    >
846    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg>
847    </a>
848    <a
849      href="https://www.linkedin.com/in/mgrootendorst/"
850      target="_blank" rel="noopener"
851      title="LinkedIn"
852      class="md-social__icons"
853    >
854    LinkedIn
855    </a>
856  
857
858    <!-- Automatically set rel=me for Mastodon -->
859    
860    
861
862    <!-- Compute title and render link -->
863    
864    
865      
866      
867    
868    <a
869      href="https://twitter.com/MaartenGr"
870      target="_blank" rel="noopener"
871      title="Twitter"
872      class="md-social__link"
873    >
874    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253"/></svg>
875    </a>
876    <a
877      href="https://twitter.com/MaartenGr"
878      target="_blank" rel="noopener"
879      title="Twitter"
880      class="md-social__icons"
881    >
882    Twitter
883    </a>
884  
885
886    <!-- Automatically set rel=me for Mastodon -->
887    
888    
889
890    <!-- Compute title and render link -->
891    
892    
893      
894      
895    
896    <a
897      href="https://newsletter.maartengrootendorst.com"
898      target="_blank" rel="noopener"
899      title="Newsletter"
900      class="md-social__link"
901    >
902    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M96 96c0-35.3 28.7-64 64-64h288c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H80c-44.2 0-80-35.8-80-80V128c0-17.7 14.3-32 32-32s32 14.3 32 32v272c0 8.8 7.2 16 16 16s16-
9027.2 16-16zm64 24v80c0 13.3 10.7 24 24 24h112c13.3 0 24-10.7 24-24v-80c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24m208-8c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16s-7.2-16-16-16h-48c-8.8 0-16 7.2-16 16m0 96c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16s-7.2-16-16-16h-48c-8.8 0-16 7.2-16 16m-208 96c0 8.8 7.2 16 16 16h256c8.8 0 16-7.2 16-16s-7.2-16-16-16H176c-8.8 0-16 7.2-16 16m0 96c0 8.8 7.2 16 16 16h256c8.8 0 16-7.2 16-16s-7.2-16-16-16H176c-8.8 0-16 7.2-16 16"/></svg>
903    </a>
904    <a
905      href="https://newsletter.maartengrootendorst.com"
906      target="_blank" rel="noopener"
907      title="Newsletter"
908      class="md-social__icons"
909    >
910    Newsletter
911    </a>
912  
913
914    <!-- Automatically set rel=me for Mastodon -->
915    
916    
917
918    <!-- Compute title and render link -->
919    
920    
921      
922      
923    
924    <a
925      href="https://www.youtube.com/@MaartenGrootendorst"
926      target="_blank" rel="noopener"
927      title="YouTube"
928      class="md-social__link"
929    >
930    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305m-317.51 213.508V175.185l142.739 81.205z"/></svg>
931    </a>
932    <a
933      href="https://www.youtube.com/@MaartenGrootendorst"
934      target="_blank" rel="noopener"
935      title="YouTube"
936      class="md-social__icons"
937    >
938    YouTube
939    </a>
940  
941
942    <!-- Automatically set rel=me for Mastodon -->
943    
944    
945
946    <!-- Compute title and render link -->
947    
948    
949      
950      
951    
952    <a
953      href="https://scholar.google.nl/citations?user=Q-zH_GwAAAAJ&hl=nl"
954      target="_blank" rel="noopener"
955      title="Scholar"
956      class="md-social__link"
957    >
958    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M390.9 298.5s0 .1.1.1c9.2 19.4 14.4 41.1 14.4 64C405.3 445.1 338.5 512 256 512s-149.3-66.9-149.3-149.3c0-22.9 5.2-44.6 14.4-64 1.7-3.6 3.6-7.2 5.6-10.7q6.6-11.4 15-21.3c27.4-32.6 68.5-53.3 114.4-53.3 33.6 0 64.6 11.1 89.6 29.9 9.1 6.9 17.4 14.7 24.8 23.5 5.6 6.6 10.6 13.8 15 21.3 2 3.4 3.8 7 5.5 10.5zm26.4-18.8c-30.1-58.4-91-98.4-161.3-98.4s-131.2 40-161.3 98.4L0 202.7 256 0l256 202.7-94.7 77.1z"/></svg>
959    </a>
960    <a
961      href="https://scholar.google.nl/citations?user=Q-zH_GwAAAAJ&hl=nl"
962      target="_blank" rel="noopener"
963      title="Scholar"
964      class="md-social__icons"
965    >
966    Scholar
967    </a>
968  
969</div>
970      
971    </div>
972  </div>
973</footer>
974      
975    </div>
976    <div class="md-dialog" data-md-component="dialog">
977      <div class="md-dialog__inner md-typeset"></div>
978    </div>
979    
980    
981    
982      
983      
983<script id="__config" type="application/json">{"base": "..", "features": ["navigation.tabs", "navigation.instant"], "search": "../assets/javascripts/workers/search.d50fe291.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
983
984    
985    
986      
986<script src="../assets/javascripts/bundle.56ea9cef.min.js"></script>
986
987      
988    
989  </body>
990</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.