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.