1<!DOCTYPE html> 2 3<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang=""> 4 5<head> 6 <meta charset="utf-8"/> 7 <meta name="viewport" content="width=device-width, initial-scale=1"/> 8 <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/> 9 <meta name="generator" content="distill" /> 10 11 <style type="text/css"> 12 /* Hide doc at startup (prevent jankiness while JS renders/transforms) */ 13 body { 14 visibility: hidden; 15 } 16 </style> 17 18 <!--radix_placeholder_import_source--> 19 <!--/radix_placeholder_import_source--> 20 21<style type="text/css">code{white-space: pre;}</style> 22<style type="text/css" data-origin="pandoc"> 23pre > code.sourceCode { white-space: pre; position: relative; } 24pre > code.sourceCode > span { display: inline-block; line-height: 1.25; } 25pre > code.sourceCode > span:empty { height: 1.2em; } 26.sourceCode { overflow: visible; } 27code.sourceCode > span { color: inherit; text-decoration: inherit; } 28div.sourceCode { margin: 1em 0; } 29pre.sourceCode { margin: 0; } 30@media screen { 31div.sourceCode { overflow: auto; } 32} 33@media print { 34pre > code.sourceCode { white-space: pre-wrap; } 35pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; } 36} 37pre.numberSource code 38 { counter-reset: source-line 0; } 39pre.numberSource code > span 40 { position: relative; left: -4em; counter-increment: source-line; } 41pre.numberSource code > span > a:first-child::before 42 { content: counter(source-line); 43 position: relative; left: -1em; text-align: right; vertical-align: baseline; 44 border: none; display: inline-block; 45 -webkit-touch-callout: none; -webkit-user-select: none; 46 -khtml-user-select: none; -moz-user-select: none; 47 -ms-user-select: none; user-select: none; 48 padding: 0 4px; width: 4em; 49 color: #aaaaaa; 50 } 51pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; } 52div.sourceCode 53 { color: #00769e; background-color: #f1f3f5; } 54@media screen { 55pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; } 56} 57code span { color: #00769e; } /* Normal */ 58code span.al { color: #ad0000; } /* Alert */ 59code span.an { color: #5e5e5e; } /* Annotation */ 60code span.at { color: #657422; } /* Attribute */ 61code span.bn { color: #ad0000; } /* BaseN */ 62code span.bu { } /* BuiltIn */ 63code span.cf { color: #00769e; } /* ControlFlow */ 64code span.ch { color: #20794d; } /* Char */ 65code span.cn { color: #8f5902; } /* Constant */ 66code span.co { color: #5e5e5e; } /* Comment */ 67code span.cv { color: #5e5e5e; font-style: italic; } /* CommentVar */ 68code span.do { color: #5e5e5e; font-style: italic; } /* Documentation */ 69code span.dt { color: #ad0000; } /* DataType */ 70code span.dv { color: #ad0000; } /* DecVal */ 71code span.er { color: #ad0000; } /* Error */ 72code span.ex { } /* Extension */ 73code span.fl { color: #ad0000; } /* Float */ 74code span.fu { color: #4758ab; } /* Function */ 75code span.im { } /* Import */ 76code span.in { color: #5e5e5e; } /* Information */ 77code span.kw { color: #00769e; } /* Keyword */ 78code span.op { color: #5e5e5e; } /* Operator */ 79code span.ot { color: #00769e; } /* Other */ 80code span.pp { color: #ad0000; } /* Preprocessor */ 81code span.sc { color: #5e5e5e; } /* SpecialChar */ 82code span.ss { color: #20794d; } /* SpecialString */ 83code span.st { color: #20794d; } /* String */ 84code span.va { color: #111111; } /* Variable */ 85code span.vs { color: #20794d; } /* VerbatimString */ 86code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */ 87</style> 88 89 90 <!--radix_placeholder_meta_tags--> 91<title>
91VOSON Lab Code Blog: Welcome to the VOSON Lab Code Blog</title> 92 93<meta property="description" itemprop="description" content="The code blog is a space to share tools, methods, tips, examples and code. A place to collect data, construct and analyze online networks."/> 94 95<link rel="canonical" href="https://vosonlab.github.io/posts/2021-02-05_welcome/"/> 96<link rel="license" href="https://creativecommons.org/licenses/by/4.0/"/> 97<link rel="icon" type="image/png" href="../../images/favicon.png"/> 98 99<!-- https://schema.org/Article --> 100<meta property="article:published" itemprop="datePublished" content="2021-02-04"/> 101<meta property="article:created" itemprop="dateCreated" content="2021-02-04"/> 102<meta name="article:author" content="Robert Ackland"/> 103 104<!-- https://developers.facebook.com/docs/sharing/webmasters#markup --> 105<meta property="og:title" content="VOSON Lab Code Blog: Welcome to the VOSON Lab Code Blog"/> 106<meta property="og:type" content="article"/> 107<meta property="og:description" content="The code blog is a space to share tools, methods, tips, examples and code. A place to collect data, construct and analyze online networks."/> 108<meta property="og:url" content="https://vosonlab.github.io/posts/2021-02-05_welcome/"/> 109<meta property="og:image" content="https://vosonlab.github.io/posts/2021-02-05_welcome/square-cards.png"/> 110<meta property="og:image:width" content="800"/> 111<meta property="og:image:height" content="640"/> 112<meta property="og:locale" content="en_US"/> 113<meta property="og:site_name" content="VOSON Lab Code Blog"/> 114 115<!-- https://dev.twitter.com/cards/types/summary --> 116<meta property="twitter:card" content="summary_large_image"/> 117<meta property="twitter:title" content="VOSON Lab Code Blog: Welcome to the VOSON Lab Code Blog"/> 118<meta property="twitter:description" content="The code blog is a space to share tools, methods, tips, examples and code. A place to collect data, construct and analyze online networks."/> 119<meta property="twitter:url" content="https://vosonlab.github.io/posts/2021-02-05_welcome/"/> 120<meta property="twitter:image" content="https://vosonlab.github.io/posts/2021-02-05_welcome/square-cards.png"/> 121<meta property="twitter:image:width" content="800"/> 122<meta property="twitter:image:height" content="640"/> 123<meta property="twitter:site" content="@vosonlab"/> 124 125<!-- https://scholar.google.com/intl/en/scholar/inclusion.html#indexing --> 126<meta name="citation_title" content="VOSON Lab Code Blog: Welcome to the VOSON Lab Code Blog"/> 127<meta name="citation_fulltext_html_url" content="https://vosonlab.github.io/posts/2021-02-05_welcome/"/> 128<meta name="citation_fulltext_world_readable" content=""/> 129<meta name="citation_online_date" content="2021/02/04"/> 130<meta name="citation_publication_date" content="2021/02/04"/> 131<meta name="citation_author" content="Robert Ackland"/> 132<meta name="citation_author_institution" content="VOSON Lab, School of Sociology, Australian National University"/> 133<!--/radix_placeholder_meta_tags--> 134 <!--radix_placeholder_rmarkdown_metadata--> 135
136<script type="text/json" id="radix-rmarkdown-metadata"> 137{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["creative_commons","title","description","author","date","categories","preview","output","citation_url","canonical_url"]}},"value":[{"type":"character","attributes":{},"value":["CC BY"]},{"type":"character","attributes":{},"value":["Welcome to the VOSON Lab Code Blog"]},{"type":"character","attributes":{},"value":["The code blog is a space to share tools, methods, tips, examples and code. A place to collect data, construct and analyze online networks."]},{"type":"list","attributes":{},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["name","url","affiliation","affiliation_url"]}},"value":[{"type":"character","attributes":{},"value":["Robert Ackland"]},{"type":"character","attributes":{},"value":["http://vosonlab.net/"]},{"type":"character","attributes":{},"value":["VOSON Lab, School of Sociology, Australian National University"]},{"type":"character","attributes":{},"value":["http://vosonlab.net/"]}]}]},{"type":"character","attributes":{},"value":["February 4, 2021"]},{"type":"character","attributes":{},"value":["rstats","SNA","Computational Social Science"]},{"type":"character","attributes":{},"value":["square-cards.png"]},{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["distill::distill_article"]}},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["self_contained"]}},"value":[{"type":"logical","attributes":{},"value":[false]}]}]},{"type":"character","attributes":{},"value":["https://vosonlab.github.io/posts/2021-02-05_welcome/"]},{"type":"character","attributes":{},"value":["https://vosonlab.github.io/posts/2021-02-05_welcome/"]}]} 138</script>
138 139<!--/radix_placeholder_rmarkdown_metadata--> 140 141
141<script type="text/json" id="radix-resource-manifest"> 142 {"type":"character","attributes":{},"value":["square-cards.png","VOSON-tools.png","VOSON-tools_.png","welcome_files/anchor-4.2.2/anchor.min.js","welcome_files/bowser-1.9.3/bowser.min.js","welcome_files/distill-2.2.21/template.v2.js","welcome_files/header-attrs-2.14/header-attrs.js","welcome_files/header-attrs-2.6/header-attrs.js","welcome_files/header-attrs-2.7/header-attrs.js","welcome_files/header-attrs-2.9/header-attrs.js","welcome_files/jquery-1.11.3/jquery.min.js","welcome_files/jquery-3.6.0/jquery-3.6.0.js","welcome_files/jquery-3.6.0/jquery-3.6.0.min.js","welcome_files/jquery-3.6.0/jquery-3.6.0.min.map","welcome_files/popper-2.6.0/popper.min.js","welcome_files/tippy-6.2.7/tippy-bundle.umd.min.js","welcome_files/tippy-6.2.7/tippy-light-border.css","welcome_files/tippy-6.2.7/tippy.css","welcome_files/tippy-6.2.7/tippy.umd.min.js","welcome_files/webcomponents-2.0.0/webcomponents.js"]} 143 </script>
143 144 <!--radix_placeholder_navigation_in_header--> 145<meta name="distill:offset" content="../.."/> 146
147<script type="application/javascript"> 148 149 window.headroom_prevent_pin = false; 150 151 window.document.addEventListener("DOMContentLoaded", function (event) { 152 153 // initialize headroom for banner 154 var header = $('header').get(0); 155 var headerHeight = header.offsetHeight; 156 var headroom = new Headroom(header, { 157 tolerance: 5, 158 onPin : function() { 159 if (window.headroom_prevent_pin) { 160 window.headroom_prevent_pin = false; 161 headroom.unpin(); 162 } 163 } 164 }); 165 headroom.init(); 166 if(window.location.hash) 167 headroom.unpin(); 168 $(header).addClass('headroom--transition'); 169 170 // offset scroll location for banner on hash change 171 // (see: https://github.com/WickyNilliams/headroom.js/issues/38) 172 window.addEventListener("hashchange", function(event) { 173 window.scrollTo(0, window.pageYOffset - (headerHeight + 25)); 174 }); 175 176 // responsive menu 177 $('.distill-site-header').each(function(i, val) { 178 var topnav = $(this); 179 var toggle = topnav.find('.nav-toggle'); 180 toggle.on('click', function() { 181 topnav.toggleClass('responsive'); 182 }); 183 }); 184 185 // nav dropdowns 186 $('.nav-dropbtn').click(function(e) { 187 $(this).next('.nav-dropdown-content').toggleClass('nav-dropdown-active'); 188 $(this).parent().siblings('.nav-dropdown') 189 .children('.nav-dropdown-content').removeClass('nav-dropdown-active'); 190 }); 191 $("body").click(function(e){ 192 $('.nav-dropdown-content').removeClass('nav-dropdown-active'); 193 }); 194 $(".nav-dropdown").click(function(e){ 195 e.stopPropagation(); 196 }); 197 }); 198</script>
198 199 200<style type="text/css"> 201 202/* Theme (user-documented overrideables for nav appearance) */ 203 204.distill-site-nav { 205 color: rgba(255, 255, 255, 0.8); 206 background-color: #0F2E3D; 207 font-size: 15px; 208 font-weight: 300; 209} 210 211.distill-site-nav a { 212 color: inherit; 213 text-decoration: none; 214} 215 216.distill-site-nav a:hover { 217 color: white; 218} 219 220@media print { 221 .distill-site-nav { 222 display: none; 223 } 224} 225 226.distill-site-header { 227 228} 229 230.distill-site-footer { 231 232} 233 234 235/* Site Header */ 236 237.distill-site-header { 238 width: 100%; 239 box-sizing: border-box; 240 z-index: 3; 241} 242 243.distill-site-header .nav-left { 244 display: inline-block; 245 margin-left: 8px; 246} 247 248@media screen and (max-width: 768px) { 249 .distill-site-header .nav-left { 250 margin-left: 0; 251 } 252} 253 254 255.distill-site-header .nav-right { 256 float: right; 257 margin-right: 8px; 258} 259 260.distill-site-header a, 261.distill-site-header .title { 262 display: inline-block; 263 text-align: center; 264 padding: 14px 10px 14px 10px; 265} 266 267.distill-site-header .title { 268 font-size: 18px; 269 min-width: 150px; 270} 271 272.distill-site-header .logo { 273 padding: 0; 274} 275 276.distill-site-header .logo img { 277 display: none; 278 max-height: 20px; 279 width: auto; 280 margin-bottom: -4px; 281} 282 283.distill-site-header .nav-image img { 284 max-height: 18px; 285 width: auto; 286 display: inline-block; 287 margin-bottom: -3px; 288} 289 290 291 292@media screen and (min-width: 1000px) { 293 .distill-site-header .logo img { 294 display: inline-block; 295 } 296 .distill-site-header .nav-left { 297 margin-left: 20px; 298 } 299 .distill-site-header .nav-right { 300 margin-right: 20px; 301 } 302 .distill-site-header .title { 303 padding-left: 12px; 304 } 305} 306 307 308.distill-site-header .nav-toggle { 309 display: none; 310} 311 312.nav-dropdown { 313 display: inline-block; 314 position: relative; 315} 316 317.nav-dropdown .nav-dropbtn { 318 border: none; 319 outline: none; 320 color: rgba(255, 255, 255, 0.8); 321 padding: 16px 10px; 322 background-color: transparent; 323 font-family: inherit; 324 font-size: inherit; 325 font-weight: inherit; 326 margin: 0;
327 margin-top: 1px; 328 z-index: 2; 329} 330 331.nav-dropdown-content { 332 display: none; 333 position: absolute; 334 background-color: white; 335 min-width: 200px; 336 border: 1px solid rgba(0,0,0,0.15); 337 border-radius: 4px; 338 box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.1); 339 z-index: 1; 340 margin-top: 2px; 341 white-space: nowrap; 342 padding-top: 4px; 343 padding-bottom: 4px; 344} 345 346.nav-dropdown-content hr { 347 margin-top: 4px; 348 margin-bottom: 4px; 349 border: none; 350 border-bottom: 1px solid rgba(0, 0, 0, 0.1); 351} 352 353.nav-dropdown-active { 354 display: block; 355} 356 357.nav-dropdown-content a, .nav-dropdown-content .nav-dropdown-header { 358 color: black; 359 padding: 6px 24px; 360 text-decoration: none; 361 display: block; 362 text-align: left; 363} 364 365.nav-dropdown-content .nav-dropdown-header { 366 display: block; 367 padding: 5px 24px; 368 padding-bottom: 0; 369 text-transform: uppercase; 370 font-size: 14px; 371 color: #999999; 372 white-space: nowrap; 373} 374 375.nav-dropdown:hover .nav-dropbtn { 376 color: white; 377} 378 379.nav-dropdown-content a:hover { 380 background-color: #ddd; 381 color: black; 382} 383 384.nav-right .nav-dropdown-content { 385 margin-left: -45%; 386 right: 0; 387} 388 389@media screen and (max-width: 768px) { 390 .distill-site-header a, .distill-site-header .nav-dropdown {display: none;} 391 .distill-site-header a.nav-toggle { 392 float: right; 393 display: block; 394 } 395 .distill-site-header .title { 396 margin-left: 0; 397 } 398 .distill-site-header .nav-right { 399 margin-right: 0; 400 } 401 .distill-site-header { 402 overflow: hidden; 403 } 404 .nav-right .nav-dropdown-content { 405 margin-left: 0; 406 } 407} 408 409 410@media screen and (max-width: 768px) { 411 .distill-site-header.responsive {position: relative; min-height: 500px; } 412 .distill-site-header.responsive a.nav-toggle { 413 position: absolute; 414 right: 0; 415 top: 0; 416 } 417 .distill-site-header.responsive a, 418 .distill-site-header.responsive .nav-dropdown { 419 display: block; 420 text-align: left; 421 } 422 .distill-site-header.responsive .nav-left, 423 .distill-site-header.responsive .nav-right { 424 width: 100%; 425 } 426 .distill-site-header.responsive .nav-dropdown {float: none;} 427 .distill-site-header.responsive .nav-dropdown-content {position: relative;} 428 .distill-site-header.responsive .nav-dropdown .nav-dropbtn { 429 display: block; 430 width: 100%; 431 text-align: left; 432 } 433} 434 435/* Site Footer */ 436 437.distill-site-footer { 438 width: 100%; 439 overflow: hidden; 440 box-sizing: border-box; 441 z-index: 3; 442 margin-top: 30px; 443 padding-top: 30px; 444 padding-bottom: 30px; 445 text-align: center; 446} 447 448/* Headroom */ 449 450d-title { 451 padding-top: 6rem; 452} 453 454@media print { 455 d-title { 456 padding-top: 4rem; 457 } 458} 459 460.headroom { 461 z-index: 1000; 462 position: fixed; 463 top: 0; 464 left: 0; 465 right: 0; 466} 467 468.headroom--transition { 469 transition: all .4s ease-in-out; 470} 471 472.headroom--unpinned { 473 top: -100px; 474} 475 476.headroom--pinned { 477 top: 0; 478} 479 480/* adjust viewport for navbar height */ 481/* helps vertically center bootstrap (non-distill) content */ 482.min-vh-100 { 483 min-height: calc(100vh - 100px) !important; 484} 485 486</style> 487
488<script src="../../site_libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
488 489<link href="../../site_libs/font-awesome-5.1.0/css/all.css" rel="stylesheet"/> 490<link href="../../site_libs/font-awesome-5.1.0/css/v4-shims.css" rel="stylesheet"/>
491<script src="../../site_libs/headroom-0.9.4/headroom.min.js"></script>
vendor: 1 bytes, line 491
491
492<script src="../../site_libs/autocomplete-0.37.1/autocomplete.min.js"></script>
vendor: 1 bytes, line 492
492
493<script src="../../site_libs/fuse-6.4.1/fuse.min.js"></script>
493 494
495<script type="application/javascript"> 496 497function getMeta(metaName) { 498 var metas = document.getElementsByTagName('meta'); 499 for (let i = 0; i < metas.length; i++) { 500 if (metas[i].getAttribute('name') === metaName) { 501 return metas[i].getAttribute('content'); 502 } 503 } 504 return ''; 505} 506 507function offsetURL(url) { 508 var offset = getMeta('distill:offset'); 509 return offset ? offset + '/' + url : url; 510} 511 512function createFuseIndex() { 513 514 // create fuse index 515 var options = { 516 keys: [ 517 { name: 'title', weight: 20 }, 518 { name: 'categories', weight: 15 }, 519 { name: 'description', weight: 10 }, 520 { name: 'contents', weight: 5 }, 521 ], 522 ignoreLocation: true, 523 threshold: 0 524 }; 525 var fuse = new window.Fuse([], options); 526 527 // fetch the main search.json 528 return fetch(offsetURL('search.json')) 529 .then(function(response) { 530 if (response.status == 200) { 531 return response.json().then(function(json) { 532 // index main articles 533 json.articles.forEach(function(article) { 534 fuse.add(article); 535 }); 536 // download collections and index their articles 537 return Promise.all(json.collections.map(function(collection) { 538 return fetch(offsetURL(collection)).then(function(response) { 539 if (response.status === 200) { 540 return response.json().then(function(articles) { 541 articles.forEach(function(article) { 542 fuse.add(article); 543 }); 544 }) 545 } else { 546 return Promise.reject( 547 new Error('Unexpected status from search index request: ' + 548 response.status) 549 ); 550 } 551 }); 552 })).then(function() { 553 return fuse; 554 }); 555 }); 556 557 } else { 558 return Promise.reject( 559 new Error('Unexpected status from search index request: ' + 560 response.status) 561 ); 562 } 563 }); 564} 565 566window.document.addEventListener("DOMContentLoaded", function (event) { 567 568 // get search element (bail if we don't have one) 569 var searchEl = window.document.getElementById('distill-search'); 570 if (!searchEl) 571 return; 572 573 createFuseIndex() 574 .then(function(fuse) { 575 576 // make search box visible 577 searchEl.classList.remove('hidden'); 578 579 // initialize autocomplete 580 var options = { 581 autoselect: true, 582 hint: false, 583 minLength: 2, 584 }; 585 window.autocomplete(searchEl, options, [{ 586 source: function(query, callback) { 587 const searchOptions = { 588 isCaseSensitive: false, 589 shouldSort: true, 590 minMatchCharLength: 2, 591 limit: 10, 592 }; 593 var results = fuse.search(query, searchOptions); 594 callback(results 595 .map(function(result) { return result.item; }) 596 ); 597 }, 598 templates: { 599 suggestion: function(suggestion) { 600 var img = suggestion.preview && Object.keys(suggestion.preview).length > 0 601 ? `<img src="${offsetURL(suggestion.preview)}"</img>` 602 : ''; 603 var html = ` 604 <div class="search-item"> 605 <h3>${suggestion.title}</h3> 606 <div class="search-item-description"> 607 ${suggestion.description || ''} 608 </div> 609 <div class="search-item-preview"> 610 ${img} 611 </div> 612 </div> 613 `; 614 return html; 615 } 616 } 617 }]).on('autocomplete:selected', function(event, suggestion) { 618 window.location.href = offsetURL(suggestion.path); 619 }); 620 // remove inline display style on autocompleter (we want to 621 // manage responsive display via css) 622 $('.algolia-autocomplete').css("display", ""); 623 }) 624 .catch(function(error) { 625 console.log(error); 626 }); 627 628}); 629 630</script>
630 631 632<style type="text/css"> 633 634.nav-search { 635 font-size: x-small; 636} 637 638/* Algolioa Autocomplete */ 639 640.algolia-autocomplete { 641 display: inline-block; 642 margin-left: 10px; 643 vertical-align: sub; 644 background-color: white; 645 color: black; 646 padding: 6px; 647 padding-top: 8px; 648 padding-bottom: 0; 649 border-radius: 6px; 650 border: 1px #0F2E3D solid; 651 width: 180px; 652} 653 654 655@media screen and (max-width: 768px) { 656 .distill-site-nav .algolia-autocomplete { 657 display: none; 658 visibility: hidden; 659 } 660 .distill-site-nav.responsive .algolia-autocomplete { 661 display: inline-block; 662 visibility: visible; 663 } 664 .distill-site-nav.responsive .algolia-autocomplete .aa-dropdown-menu { 665 margin-left: 0; 666 width: 400px; 667 max-height: 400px; 668 } 669} 670 671.algolia-autocomplete .aa-input, .algolia-autocomplete .aa-hint { 672 width: 90%; 673 outline: none; 674 border: none; 675} 676 677.algolia-autocomplete .aa-hint { 678 color: #999; 679} 680.algolia-autocomplete .aa-dropdown-menu { 681 width: 550px; 682 max-height: 70vh; 683 overflow-x: visible; 684 overflow-y: scroll; 685 padding: 5px; 686 margin-top: 3px; 687 margin-left: -150px; 688 background-color: #fff; 689 border-radius: 5px; 690 border: 1px solid #999; 691 border-top: none; 692} 693 694.algolia-autocomplete .aa-dropdown-menu .aa-suggestion { 695 cursor: pointer; 696 padding: 5px 4px; 697 border-bottom: 1px solid #eee; 698} 699 700.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:last-of-type { 701 border-bottom: none; 702 margin-bottom: 2px; 703} 704 705.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item { 706 overflow: hidden; 707 font-size: 0.8em; 708 line-height: 1.4em; 709} 710 711.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item h3 { 712 font-size: 1rem; 713 margin-block-start: 0; 714 margin-block-end: 5px; 715} 716 717.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-description { 718 display: inline-block; 719 overflow: hidden; 720 height: 2.8em; 721 width: 80%; 722 margin-right: 4%; 723} 724 725.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview { 726 display: inline-block; 727 width: 15%; 728} 729 730.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img { 731 height: 3em; 732 width: auto; 733 display: none; 734} 735 736.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img[src] { 737 display: initial; 738} 739 740.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor { 741 background-color: #eee; 742} 743.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em { 744 font-weight: bold; 745 font-style: normal; 746} 747 748</style> 749 750 751<!--/radix_placeholder_navigation_in_header--> 752 <!--radix_placeholder_distill--> 753 754<style type="text/css"> 755 756body { 757 background-color: white; 758} 759 760.pandoc-table { 761 width: 100%; 762} 763 764.pandoc-table>caption { 765 margin-bottom: 10px; 766} 767 768.pandoc-table th:not([align]) { 769 text-align: left; 770} 771 772.pagedtable-footer { 773 font-size: 15px; 774} 775 776d-byline .byline { 777 grid-template-columns: 2fr 2fr; 778} 779 780d-byline .byline h3 { 781 margin-block-start: 1.5em; 782} 783 784d-byline .byline .authors-affiliations h3 { 785 margin-block-start: 0.5em; 786} 787 788.authors-affiliations .orcid-id { 789 width: 16px; 790 height:16px; 791 margin-left: 4px; 792 margin-right: 4px; 793 vertical-align: middle; 794 padding-bottom: 2px; 795} 796 797d-title .dt-tags { 798 margin-top: 1em; 799 grid-column: text; 800} 801 802.dt-tags .dt-tag { 803 text-decoration: none; 804 display: inline-block; 805 color: rgba(0,0,0,0.6); 806 padding: 0em 0.4em; 807 margin-right: 0.5em; 808 margin-bottom: 0.4em; 809 font-size: 70%; 810 border: 1px solid rgba(0,0,0,0.2); 811 border-radius: 3px; 812 text-transform: uppercase; 813 font-weight: 500; 814} 815 816d-article table.gt_table td, 817d-article table.gt_table th { 818 border-bottom: none; 819 font-size: 100%; 820} 821 822.html-widget { 823 margin-bottom: 2.0em; 824} 825 826.l-screen-inset { 827 padding-right: 16px; 828} 829 830.l-screen .caption { 831 margin-left: 10px; 832} 833 834.shaded { 835 background: rgb(247, 247, 247); 836 padding-top: 20px; 837 padding-bottom: 20px; 838 border-top: 1px solid rgba(0, 0, 0, 0.1); 839 border-bottom: 1px solid rgba(0, 0, 0, 0.1); 840} 841 842.shaded .html-widget { 843 margin-bottom: 0; 844 border: 1px solid rgba(0, 0, 0, 0.1); 845} 846 847.shaded .shaded-content { 848 background: white; 849} 850 851.text-output { 852 margin-top: 0; 853 line-height: 1.5em; 854} 855 856.hidden { 857 display: none !important; 858} 859 860d-article { 861 padding-top: 2.5rem; 862 padding-bottom: 30px; 863} 864 865d-appendix { 866 padding-top: 30px; 867} 868 869d-article>p>img { 870 width: 100%; 871} 872 873d-article h2 { 874 margin: 1rem 0 1.5rem 0; 875} 876 877d-article h3 { 878 margin-top: 1.5rem; 879} 880 881d-article iframe { 882 border: 1px solid rgba(0, 0, 0, 0.1); 883 margin-bottom: 2.0em; 884 width: 100%; 885} 886 887/* Tweak code blocks */ 888 889d-article div.sourceCode code, 890d-article pre code {
891 font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 892} 893 894d-article pre, 895d-article div.sourceCode, 896d-article div.sourceCode pre { 897 overflow: auto; 898} 899 900d-article div.sourceCode { 901 background-color: white; 902} 903 904d-article div.sourceCode pre { 905 padding-left: 10px; 906 font-size: 12px; 907 border-left: 2px solid rgba(0,0,0,0.1); 908} 909 910d-article pre { 911 font-size: 12px; 912 color: black; 913 background: none; 914 margin-top: 0; 915 text-align: left; 916 white-space: pre; 917 word-spacing: normal; 918 word-break: normal; 919 word-wrap: normal; 920 line-height: 1.5; 921 922 -moz-tab-size: 4; 923 -o-tab-size: 4; 924 tab-size: 4; 925 926 -webkit-hyphens: none; 927 -moz-hyphens: none; 928 -ms-hyphens: none; 929 hyphens: none; 930} 931 932d-article pre a { 933 border-bottom: none; 934} 935 936d-article pre a:hover { 937 border-bottom: none; 938 text-decoration: underline; 939} 940 941d-article details { 942 grid-column: text; 943 margin-bottom: 0.8em; 944} 945 946@media(min-width: 768px) { 947 948d-article pre, 949d-article div.sourceCode, 950d-article div.sourceCode pre { 951 overflow: visible !important; 952} 953 954d-article div.sourceCode pre { 955 padding-left: 18px; 956 font-size: 14px; 957} 958 959d-article pre { 960 font-size: 14px; 961} 962 963} 964 965figure img.external { 966 background: white; 967 border: 1px solid rgba(0, 0, 0, 0.1); 968 box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); 969 padding: 18px; 970 box-sizing: border-box; 971} 972 973/* CSS for d-contents */ 974 975.d-contents { 976 grid-column: text; 977 color: rgba(0,0,0,0.8); 978 font-size: 0.9em; 979 padding-bottom: 1em; 980 margin-bottom: 1em; 981 padding-bottom: 0.5em; 982 margin-bottom: 1em; 983 padding-left: 0.25em; 984 justify-self: start; 985} 986 987@media(min-width: 1000px) { 988 .d-contents.d-contents-float { 989 height: 0; 990 grid-column-start: 1; 991 grid-column-end: 4; 992 justify-self: center; 993 padding-right: 3em; 994 padding-left: 2em; 995 } 996} 997 998.d-contents nav h3 { 999 font-size: 18px; 1000 margin-top: 0; 1001 margin-bottom: 1em; 1002} 1003 1004.d-contents li { 1005 list-style-type: none 1006} 1007 1008.d-contents nav > ul { 1009 padding-left: 0; 1010} 1011 1012.d-contents ul { 1013 padding-left: 1em 1014} 1015 1016.d-contents nav ul li { 1017 margin-top: 0.6em; 1018 margin-bottom: 0.2em; 1019} 1020 1021.d-contents nav a { 1022 font-size: 13px; 1023 border-bottom: none; 1024 text-decoration: none 1025 color: rgba(0, 0, 0, 0.8); 1026} 1027 1028.d-contents nav a:hover { 1029 text-decoration: underline solid rgba(0, 0, 0, 0.6) 1030} 1031 1032.d-contents nav > ul > li > a { 1033 font-weight: 600; 1034} 1035 1036.d-contents nav > ul > li > ul { 1037 font-weight: inherit; 1038} 1039 1040.d-contents nav > ul > li > ul > li { 1041 margin-top: 0.2em; 1042} 1043 1044 1045.d-contents nav ul { 1046 margin-top: 0; 1047 margin-bottom: 0.25em; 1048} 1049 1050.d-article-with-toc h2:nth-child(2) { 1051 margin-top: 0; 1052} 1053 1054 1055/* Figure */ 1056 1057.figure { 1058 position: relative; 1059 margin-bottom: 2.5em; 1060 margin-top: 1.5em; 1061} 1062 1063.figure .caption { 1064 color: rgba(0, 0, 0, 0.6); 1065 font-size: 12px; 1066 line-height: 1.5em; 1067} 1068 1069.figure img.external { 1070 background: white; 1071 border: 1px solid rgba(0, 0, 0, 0.1); 1072 box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); 1073 padding: 18px; 1074 box-sizing: border-box; 1075} 1076 1077.figure .caption a { 1078 color: rgba(0, 0, 0, 0.6); 1079} 1080 1081.figure .caption b, 1082.figure .caption strong, { 1083 font-weight: 600; 1084 color: rgba(0, 0, 0, 1.0); 1085} 1086 1087/* Citations */ 1088 1089d-article .citation { 1090 color: inherit; 1091 cursor: inherit; 1092} 1093 1094div.hanging-indent{ 1095 margin-left: 1em; text-indent: -1em; 1096} 1097 1098/* Citation hover box */ 1099 1100.tippy-box[data-theme~=light-border] { 1101 background-color: rgba(250, 250, 250, 0.95); 1102} 1103 1104.tippy-content > p { 1105 margin-bottom: 0; 1106 padding: 2px; 1107} 1108 1109 1110/* Tweak 1000px media break to show more text */ 1111 1112@media(min-width: 1000px) { 1113 .base-grid, 1114 distill-header, 1115 d-title, 1116 d-abstract, 1117 d-article, 1118 d-appendix, 1119 distill-appendix, 1120 d-byline, 1121 d-footnote-list, 1122 d-citation-list, 1123 distill-footer { 1124 grid-template-columns: [screen-start] 1fr [page-start kicker-start] 80px [middle-start] 50px [text-start kicker-end] 65px 65px 65px 65px 65px 65px 65px 65px [text-end gutter-start] 65px [middle-end] 65px [page-end gutter-end] 1fr [screen-end]; 1125 grid-column-gap: 16px; 1126 } 1127 1128 .grid { 1129 grid-column-gap: 16px; 1130 } 1131 1132 d-article { 1133 font-size: 1.06rem; 1134 line-height: 1.7em; 1135 } 1136 figure .caption, .figure .caption, figure figcaption { 1137 font-size: 13px; 1138 } 1139} 1140 1141@media(min-width: 1180px) { 1142 .base-grid, 1143 distill-header, 1144 d-title, 1145 d-abstract, 1146 d-article, 1147 d-appendix, 1148 distill-appendix, 1149 d-byline, 1150 d-footnote-list, 1151 d-citation-list, 1152 distill-footer { 1153 grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end]; 1154 grid-column-gap: 32px; 1155 } 1156 1157 .grid { 1158 grid-column-gap: 32px; 1159 } 1160} 1161 1162 1163/* Get the citation styles for the appendix (not auto-injected on render since 1164 we do our own rendering of the citation appendix) */ 1165 1166d-appendix .citation-appendix, 1167.d-appendix .citation-appendix { 1168 font-size: 11px; 1169 line-height: 15px; 1170 border-left: 1px solid rgba(0, 0, 0, 0.1); 1171 padding-left: 18px; 1172 border: 1px solid rgba(0,0,0,0.1); 1173 background: rgba(0, 0, 0, 0.02); 1174 padding: 10px 18px; 1175 border-radius: 3px; 1176 color: rgba(150, 150, 150, 1); 1177 overflow: hidden; 1178 margin-top: -12px; 1179 white-space: pre-wrap; 1180 word-wrap: break-word; 1181} 1182 1183/* Include appendix styles here so they can be overridden */ 1184 1185d-appendix { 1186 contain: layout style; 1187 font-size: 0.8em; 1188 line-height: 1.7em; 1189 margin-top: 60px; 1190 margin-bottom: 0; 1191 border-top: 1px solid rgba(0, 0, 0, 0.1); 1192 color: rgba(0,0,0,0.5); 1193 padding-top: 60px; 1194 padding-bottom: 48px; 1195} 1196 1197d-appendix h3 { 1198 grid-column: page-start / text-start; 1199 font-size: 15px; 1200 font-weight: 500; 1201 margin-top: 1em; 1202 margin-bottom: 0; 1203 color: rgba(0,0,0,0.65); 1204} 1205 1206d-appendix h3 + * { 1207 margin-top: 1em; 1208} 1209 1210d-appendix ol { 1211 padding: 0 0 0 15px; 1212} 1213 1214@media (min-width: 768px) { 1215 d-appendix ol { 1216 padding: 0 0 0 30px; 1217 margin-left: -30px; 1218 } 1219} 1220 1221d-appendix li { 1222 margin-bottom: 1em; 1223} 1224 1225d-appendix a { 1226 color: rgba(0, 0, 0, 0.6); 1227} 1228 1229d-appendix > * { 1230 grid-column: text; 1231} 1232 1233d-appendix > d-footnote-list, 1234d-appendix > d-citation-list, 1235d-appendix > distill-appendix { 1236 grid-column: screen; 1237} 1238 1239/* Include footnote styles here so they can be overridden */ 1240 1241d-footnote-list { 1242 contain: layout style; 1243} 1244 1245d-footnote-list > * { 1246 grid-column: text; 1247} 1248
1249d-footnote-list a.footnote-backlink { 1250 color: rgba(0,0,0,0.3); 1251 padding-left: 0.5em; 1252} 1253 1254 1255 1256/* Anchor.js */ 1257 1258.anchorjs-link { 1259 /*transition: all .25s linear; */ 1260 text-decoration: none; 1261 border-bottom: none; 1262} 1263*:hover > .anchorjs-link { 1264 margin-left: -1.125em !important; 1265 text-decoration: none; 1266 border-bottom: none; 1267} 1268 1269/* Social footer */ 1270 1271.social_footer { 1272 margin-top: 30px; 1273 margin-bottom: 0; 1274 color: rgba(0,0,0,0.67); 1275} 1276 1277.disqus-comments { 1278 margin-right: 30px; 1279} 1280 1281.disqus-comment-count { 1282 border-bottom: 1px solid rgba(0, 0, 0, 0.4); 1283 cursor: pointer; 1284} 1285 1286#disqus_thread { 1287 margin-top: 30px; 1288} 1289 1290.article-sharing a { 1291 border-bottom: none; 1292 margin-right: 8px; 1293} 1294 1295.article-sharing a:hover { 1296 border-bottom: none; 1297} 1298 1299.sidebar-section.subscribe { 1300 font-size: 12px; 1301 line-height: 1.6em; 1302} 1303 1304.subscribe p { 1305 margin-bottom: 0.5em; 1306} 1307 1308 1309.article-footer .subscribe { 1310 font-size: 15px; 1311 margin-top: 45px; 1312} 1313 1314 1315.sidebar-section.custom { 1316 font-size: 12px; 1317 line-height: 1.6em; 1318} 1319 1320.custom p { 1321 margin-bottom: 0.5em; 1322} 1323 1324/* Styles for listing layout (hide title) */ 1325.layout-listing d-title, .layout-listing .d-title { 1326 display: none; 1327} 1328 1329/* Styles for posts lists (not auto-injected) */ 1330 1331 1332.posts-with-sidebar { 1333 padding-left: 45px; 1334 padding-right: 45px; 1335} 1336 1337.posts-list .description h2, 1338.posts-list .description p { 1339 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif; 1340} 1341 1342.posts-list .description h2 { 1343 font-weight: 700; 1344 border-bottom: none; 1345 padding-bottom: 0; 1346} 1347 1348.posts-list h2.post-tag { 1349 border-bottom: 1px solid rgba(0, 0, 0, 0.2); 1350 padding-bottom: 12px; 1351} 1352.posts-list { 1353 margin-top: 60px; 1354 margin-bottom: 24px; 1355} 1356 1357.posts-list .post-preview { 1358 text-decoration: none; 1359 overflow: hidden; 1360 display: block; 1361 border-bottom: 1px solid rgba(0, 0, 0, 0.1); 1362 padding: 24px 0; 1363} 1364 1365.post-preview-last { 1366 border-bottom: none !important; 1367} 1368 1369.posts-list .posts-list-caption { 1370 grid-column: screen; 1371 font-weight: 400; 1372} 1373 1374.posts-list .post-preview h2 { 1375 margin: 0 0 6px 0; 1376 line-height: 1.2em; 1377 font-style: normal; 1378 font-size: 24px; 1379} 1380 1381.posts-list .post-preview p { 1382 margin: 0 0 12px 0; 1383 line-height: 1.4em; 1384 font-size: 16px; 1385} 1386 1387.posts-list .post-preview .thumbnail { 1388 box-sizing: border-box; 1389 margin-bottom: 24px; 1390 position: relative; 1391 max-width: 500px; 1392} 1393.posts-list .post-preview img { 1394 width: 100%; 1395 display: block; 1396} 1397 1398.posts-list .metadata { 1399 font-size: 12px; 1400 line-height: 1.4em; 1401 margin-bottom: 18px; 1402} 1403 1404.posts-list .metadata > * { 1405 display: inline-block; 1406} 1407 1408.posts-list .metadata .publishedDate { 1409 margin-right: 2em; 1410} 1411 1412.posts-list .metadata .dt-authors { 1413 display: block; 1414 margin-top: 0.3em; 1415 margin-right: 2em; 1416} 1417 1418.posts-list .dt-tags { 1419 display: block; 1420 line-height: 1em; 1421} 1422 1423.posts-list .dt-tags .dt-tag { 1424 display: inline-block; 1425 color: rgba(0,0,0,0.6); 1426 padding: 0.3em 0.4em; 1427 margin-right: 0.2em; 1428 margin-bottom: 0.4em; 1429 font-size: 60%; 1430 border: 1px solid rgba(0,0,0,0.2); 1431 border-radius: 3px; 1432 text-transform: uppercase; 1433 font-weight: 500; 1434} 1435 1436.posts-list img { 1437 opacity: 1; 1438} 1439 1440.posts-list img[data-src] { 1441 opacity: 0; 1442} 1443 1444.posts-more { 1445 clear: both; 1446} 1447 1448 1449.posts-sidebar { 1450 font-size: 16px; 1451} 1452 1453.posts-sidebar h3 { 1454 font-size: 16px; 1455 margin-top: 0; 1456 margin-bottom: 0.5em; 1457 font-weight: 400; 1458 text-transform: uppercase; 1459} 1460 1461.sidebar-section { 1462 margin-bottom: 30px; 1463} 1464 1465.categories ul { 1466 list-style-type: none; 1467 margin: 0; 1468 padding: 0; 1469} 1470 1471.categories li { 1472 color: rgba(0, 0, 0, 0.8); 1473 margin-bottom: 0; 1474} 1475 1476.categories li>a { 1477 border-bottom: none; 1478} 1479 1480.categories li>a:hover { 1481 border-bottom: 1px solid rgba(0, 0, 0, 0.4); 1482} 1483 1484.categories .active { 1485 font-weight: 600; 1486} 1487 1488.categories .category-count { 1489 color: rgba(0, 0, 0, 0.4); 1490} 1491 1492 1493@media(min-width: 768px) { 1494 .posts-list .post-preview h2 { 1495 font-size: 26px; 1496 } 1497 .posts-list .post-preview .thumbnail { 1498 float: right; 1499 width: 30%; 1500 margin-bottom: 0; 1501 } 1502 .posts-list .post-preview .description { 1503 float: left; 1504 width: 45%; 1505 } 1506 .posts-list .post-preview .metadata { 1507 float: left; 1508 width: 20%; 1509 margin-top: 8px; 1510 } 1511 .posts-list .post-preview p { 1512 margin: 0 0 12px 0; 1513 line-height: 1.5em; 1514 font-size: 16px; 1515 } 1516 .posts-with-sidebar .posts-list { 1517 float: left; 1518 width: 75%; 1519 } 1520 .posts-with-sidebar .posts-sidebar { 1521 float: right; 1522 width: 20%; 1523 margin-top: 60px; 1524 padding-top: 24px; 1525 padding-bottom: 24px; 1526 } 1527} 1528 1529 1530/* Improve display for browsers without grid (IE/Edge <= 15) */ 1531 1532.downlevel { 1533 line-height: 1.6em; 1534 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif; 1535 margin: 0; 1536} 1537 1538.downlevel .d-title { 1539 padding-top: 6rem; 1540 padding-bottom: 1.5rem; 1541} 1542 1543.downlevel .d-title h1 { 1544 font-size: 50px; 1545 font-weight: 700; 1546 line-height: 1.1em; 1547 margin: 0 0 0.5rem; 1548} 1549 1550.downlevel .d-title p { 1551 font-weight: 300; 1552 font-size: 1.2rem; 1553 line-height: 1.55em; 1554 margin-top: 0; 1555} 1556 1557.downlevel .d-byline { 1558 padding-top: 0.8em; 1559 padding-bottom: 0.8em; 1560 font-size: 0.8rem; 1561 line-height: 1.8em; 1562} 1563 1564.downlevel .section-separator { 1565 border: none; 1566 border-top: 1px solid rgba(0, 0, 0, 0.1); 1567} 1568 1569.downlevel .d-article { 1570 font-size: 1.06rem; 1571 line-height: 1.7em; 1572 padding-top: 1rem; 1573 padding-bottom: 2rem; 1574} 1575 1576 1577.downlevel .d-appendix { 1578 padding-left: 0; 1579 padding-right: 0; 1580 max-width: none; 1581 font-size: 0.8em; 1582 line-height: 1.7em; 1583 margin-bottom: 0; 1584 color: rgba(0,0,0,0.5); 1585 padding-top: 40px; 1586 padding-bottom: 48px; 1587} 1588 1589.downlevel .footnotes ol { 1590 padding-left: 13px; 1591} 1592 1593.downlevel .base-grid, 1594.downlevel .distill-header, 1595.downlevel .d-title, 1596.downlevel .d-abstract, 1597.downlevel .d-article, 1598.downlevel .d-appendix, 1599.downlevel .distill-appendix, 1600.downlevel .d-byline, 1601.downlevel .d-footnote-list, 1602.downlevel .d-citation-list, 1603.downlevel .distill-footer, 1604.downlevel .appendix-bottom, 1605.downlevel .posts-container { 1606 padding-left: 40px; 1607 padding-right: 40px; 1608} 1609 1610@media(min-width: 768px) { 1611 .downlevel .base-grid, 1612 .downlevel .distill-header, 1613 .downlevel .d-title, 1614 .downlevel .d-abstract, 1615 .downlevel .d-article, 1616 .downlevel .d-appendix, 1617 .downlevel .distill-appendix, 1618 .downlevel .d-byline, 1619 .downlevel .d-footnote-list, 1620 .downlevel .d-citation-list, 1621 .downlevel .distill-footer, 1622 .downlevel .appendix-bottom, 1623 .downlevel .posts-container { 1624 padding-left: 150px; 1625 padding-right: 150px; 1626 max-width: 900px; 1627} 1628} 1629 1630.downlevel pre code { 1631 display: block; 1632 border-left: 2px solid rgba(0, 0, 0, .1); 1633 padding: 0 0 0 20px; 1634 font-size: 14px; 1635} 1636 1637.downlevel code, .downlevel pre { 1638 color: black; 1639 background: none;
1640 font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 1641 text-align: left; 1642 white-space: pre; 1643 word-spacing: normal; 1644 word-break: normal; 1645 word-wrap: normal; 1646 line-height: 1.5; 1647 1648 -moz-tab-size: 4; 1649 -o-tab-size: 4; 1650 tab-size: 4; 1651 1652 -webkit-hyphens: none; 1653 -moz-hyphens: none; 1654 -ms-hyphens: none; 1655 hyphens: none; 1656} 1657 1658.downlevel .posts-list .post-preview { 1659 color: inherit; 1660} 1661 1662 1663 1664</style> 1665
1666<script type="application/javascript"> 1667 1668function is_downlevel_browser() { 1669 if (bowser.isUnsupportedBrowser({ msie: "12", msedge: "16"}, 1670 window.navigator.userAgent)) { 1671 return true; 1672 } else { 1673 return window.load_distill_framework === undefined; 1674 } 1675} 1676 1677// show body when load is complete 1678function on_load_complete() { 1679 1680 // add anchors 1681 if (window.anchors) { 1682 window.anchors.options.placement = 'left'; 1683 window.anchors.add('d-article > h2, d-article > h3, d-article > h4, d-article > h5'); 1684 } 1685 1686 1687 // set body to visible 1688 document.body.style.visibility = 'visible'; 1689 1690 // force redraw for leaflet widgets 1691 if (window.HTMLWidgets) { 1692 var maps = window.HTMLWidgets.findAll(".leaflet"); 1693 $.each(maps, function(i, el) { 1694 var map = this.getMap(); 1695 map.invalidateSize(); 1696 map.eachLayer(function(layer) { 1697 if (layer instanceof L.TileLayer) 1698 layer.redraw(); 1699 }); 1700 }); 1701 } 1702 1703 // trigger 'shown' so htmlwidgets resize 1704 $('d-article').trigger('shown'); 1705} 1706 1707function init_distill() { 1708 1709 init_common(); 1710 1711 // create front matter 1712 var front_matter = $('<d-front-matter></d-front-matter>'); 1713 $('#distill-front-matter').wrap(front_matter); 1714 1715 // create d-title 1716 $('.d-title').changeElementType('d-title'); 1717 1718 // create d-byline 1719 var byline = $('<d-byline></d-byline>'); 1720 $('.d-byline').replaceWith(byline); 1721 1722 // create d-article 1723 var article = $('<d-article></d-article>'); 1724 $('.d-article').wrap(article).children().unwrap(); 1725 1726 // move posts container into article 1727 $('.posts-container').appendTo($('d-article')); 1728 1729 // create d-appendix 1730 $('.d-appendix').changeElementType('d-appendix'); 1731 1732 // flag indicating that we have appendix items 1733 var appendix = $('.appendix-bottom').children('h3').length > 0; 1734 1735 // replace footnotes with <d-footnote> 1736 $('.footnote-ref').each(function(i, val) { 1737 appendix = true; 1738 var href = $(this).attr('href'); 1739 var id = href.replace('#', ''); 1740 var fn = $('#' + id); 1741 var fn_p = $('#' + id + '>p'); 1742 fn_p.find('.footnote-back').remove(); 1743 var text = fn_p.html(); 1744 var dtfn = $('<d-footnote></d-footnote>'); 1745 dtfn.html(text); 1746 $(this).replaceWith(dtfn); 1747 }); 1748 // remove footnotes 1749 $('.footnotes').remove(); 1750 1751 // move refs into #references-listing 1752 $('#references-listing').replaceWith($('#refs')); 1753 1754 $('h1.appendix, h2.appendix').each(function(i, val) { 1755 $(this).changeElementType('h3'); 1756 }); 1757 $('h3.appendix').each(function(i, val) { 1758 var id = $(this).attr('id'); 1759 $('.d-contents a[href="#' + id + '"]').parent().remove(); 1760 appendix = true; 1761 $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('d-appendix')); 1762 }); 1763 1764 // show d-appendix if we have appendix content 1765 $("d-appendix").css('display', appendix ? 'grid' : 'none'); 1766 1767 // localize layout chunks to just output 1768 $('.layout-chunk').each(function(i, val) { 1769 1770 // capture layout 1771 var layout = $(this).attr('data-layout'); 1772 1773 // apply layout to markdown level block elements 1774 var elements = $(this).children().not('details, div.sourceCode, pre, script'); 1775 elements.each(function(i, el) { 1776 var layout_div = $('<div class="' + layout + '"></div>'); 1777 if (layout_div.hasClass('shaded')) { 1778 var shaded_content = $('<div class="shaded-content"></div>'); 1779 $(this).wrap(shaded_content); 1780 $(this).parent().wrap(layout_div); 1781 } else { 1782 $(this).wrap(layout_div); 1783 } 1784 }); 1785 1786 1787 // unwrap the layout-chunk div 1788 $(this).children().unwrap(); 1789 }); 1790 1791 // remove code block used to force highlighting css 1792 $('.distill-force-highlighting-css').parent().remove(); 1793 1794 // remove empty line numbers inserted by pandoc when using a 1795 // custom syntax highlighting theme 1796 $('code.sourceCode a:empty').remove(); 1797 1798 // load distill framework 1799 load_distill_framework(); 1800 1801 // wait for window.distillRunlevel == 4 to do post processing 1802 function distill_post_process() { 1803 1804 if (!window.distillRunlevel || window.distillRunlevel < 4) 1805 return; 1806 1807 // hide author/affiliations entirely if we have no authors 1808 var front_matter = JSON.parse($("#distill-front-matter").html()); 1809 var have_authors = front_matter.authors && front_matter.authors.length > 0; 1810 if (!have_authors) 1811 $('d-byline').addClass('hidden'); 1812 1813 // article with toc class 1814 $('.d-contents').parent().addClass('d-article-with-toc'); 1815 1816 // strip links that point to # 1817 $('.authors-affiliations').find('a[href="#"]').removeAttr('href'); 1818 1819 // add orcid ids 1820 $('.authors-affiliations').find('.author').each(function(i, el) {
1821 var orcid_id = front_matter.authors[i].orcidID; 1822 if (orcid_id) { 1823 var a = $('<a></a>'); 1824 a.attr('href', 'https://orcid.org/' + orcid_id); 1825 var img = $('<img></img>'); 1826 img.addClass('orcid-id'); 1827 img.attr('alt', 'ORCID ID'); 1828 img.attr('src','data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=='); 1829 a.append(img); 1830 $(this).append(a); 1831 } 1832 }); 1833 1834 // hide elements of author/affiliations grid that have no value 1835 function hide_byline_column(caption) { 1836 $('d-byline').find('h3:contains("' + caption + '")').parent().css('visibility', 'hidden'); 1837 } 1838 1839 // affiliations 1840 var have_affiliations = false; 1841 for (var i = 0; i<front_matter.authors.length; ++i) { 1842 var author = front_matter.authors[i]; 1843 if (author.affiliation !== " ") { 1844 have_affiliations = true; 1845 break; 1846 } 1847 } 1848 if (!have_affiliations) 1849 $('d-byline').find('h3:contains("Affiliations")').css('visibility', 'hidden'); 1850 1851 // published date 1852 if (!front_matter.publishedDate) 1853 hide_byline_column("Published"); 1854 1855 // document object identifier 1856 var doi = $('d-byline').find('h3:contains("DOI")'); 1857 var doi_p = doi.next().empty(); 1858 if (!front_matter.doi) { 1859 // if we have a citation and valid citationText then link to that 1860 if ($('#citation').length > 0 && front_matter.citationText) { 1861 doi.html('Citation'); 1862 $('<a href="#citation"></a>') 1863 .text(front_matter.citationText) 1864 .appendTo(doi_p); 1865 } else { 1866 hide_byline_column("DOI"); 1867 } 1868 } else { 1869 $('<a></a>') 1870 .attr('href', "https://doi.org/" + front_matter.doi) 1871 .html(front_matter.doi) 1872 .appendTo(doi_p); 1873 } 1874 1875 // change plural form of authors/affiliations 1876 if (front_matter.authors.length === 1) { 1877 var grid = $('.authors-affiliations'); 1878 grid.children('h3:contains("Authors")').text('Author'); 1879 grid.children('h3:contains("Affiliations")').text('Affiliation'); 1880 } 1881 1882 // remove d-appendix and d-footnote-list local styles 1883 $('d-appendix > style:first-child').remove(); 1884 $('d-footnote-list > style:first-child').remove(); 1885 1886 // move appendix-bottom entries to the bottom 1887 $('.appendix-bottom').appendTo('d-appendix').children().unwrap(); 1888 $('.appendix-bottom').remove(); 1889 1890 // hoverable references 1891 $('span.citation[data-cites]').each(function() { 1892 const citeChild = $(this).children()[0]
1893 // Do not process if @xyz has been used without escaping and without bibliography activated 1894 // https://github.com/rstudio/distill/issues/466 1895 if (citeChild === undefined) return true 1896 1897 if (citeChild.nodeName == "D-FOOTNOTE") { 1898 var fn = citeChild 1899 $(this).html(fn.shadowRoot.querySelector("sup")) 1900 $(this).id = fn.id 1901 fn.remove() 1902 } 1903 var refs = $(this).attr('data-cites').split(" "); 1904 var refHtml = refs.map(function(ref) { 1905 // Could use CSS.escape too here, we insure backward compatibility in navigator 1906 return "<p>" + $('div[id="ref-' + ref + '"]').html() + "</p>"; 1907 }).join("\n"); 1908 window.tippy(this, { 1909 allowHTML: true, 1910 content: refHtml, 1911 maxWidth: 500, 1912 interactive: true, 1913 interactiveBorder: 10, 1914 theme: 'light-border', 1915 placement: 'bottom-start' 1916 }); 1917 }); 1918 1919 // fix footnotes in tables (#411) 1920 // replacing broken distill.pub feature 1921 $('table d-footnote').each(function() { 1922 // we replace internal showAtNode methode which is triggered when hovering a footnote 1923 this.hoverBox.showAtNode = function(node) { 1924 // ported from https://github.com/distillpub/template/pull/105/files 1925 calcOffset = function(elem) { 1926 let x = elem.offsetLeft; 1927 let y = elem.offsetTop; 1928 // Traverse upwards until an `absolute` element is found or `elem` 1929 // becomes null. 1930 while (elem = elem.offsetParent && elem.style.position != 'absolute') { 1931 x += elem.offsetLeft; 1932 y += elem.offsetTop; 1933 } 1934 1935 return { left: x, top: y }; 1936 } 1937 // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop 1938 const bbox = node.getBoundingClientRect(); 1939 const offset = calcOffset(node); 1940 this.show([offset.left + bbox.width, offset.top + bbox.height]); 1941 } 1942 }) 1943 1944 // clear polling timer 1945 clearInterval(tid); 1946 1947 // show body now that everything is ready 1948 on_load_complete(); 1949 } 1950 1951 var tid = setInterval(distill_post_process, 50); 1952 distill_post_process(); 1953 1954} 1955 1956function init_downlevel() { 1957 1958 init_common(); 1959 1960 // insert hr after d-title 1961 $('.d-title').after($('<hr class="section-separator"/>')); 1962 1963 // check if we have authors 1964 var front_matter = JSON.parse($("#distill-front-matter").html()); 1965 var have_authors = front_matter.authors && front_matter.authors.length > 0; 1966
1967 // manage byline/border 1968 if (!have_authors) 1969 $('.d-byline').remove(); 1970 $('.d-byline').after($('<hr class="section-separator"/>')); 1971 $('.d-byline a').remove(); 1972 1973 // remove toc 1974 $('.d-contents').remove(); 1975 1976 // move appendix elements 1977 $('h1.appendix, h2.appendix').each(function(i, val) { 1978 $(this).changeElementType('h3'); 1979 }); 1980 $('h3.appendix').each(function(i, val) { 1981 $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('.d-appendix')); 1982 }); 1983 1984 1985 // inject headers into references and footnotes 1986 var refs_header = $('<h3></h3>'); 1987 refs_header.text('References'); 1988 $('#refs').prepend(refs_header); 1989 1990 var footnotes_header = $('<h3></h3'); 1991 footnotes_header.text('Footnotes'); 1992 $('.footnotes').children('hr').first().replaceWith(footnotes_header); 1993 1994 // move appendix-bottom entries to the bottom 1995 $('.appendix-bottom').appendTo('.d-appendix').children().unwrap(); 1996 $('.appendix-bottom').remove(); 1997 1998 // remove appendix if it's empty 1999 if ($('.d-appendix').children().length === 0) 2000 $('.d-appendix').remove(); 2001 2002 // prepend separator above appendix 2003 $('.d-appendix').before($('<hr class="section-separator" style="clear: both"/>')); 2004 2005 // trim code 2006 $('pre>code').each(function(i, val) { 2007 $(this).html($.trim($(this).html())); 2008 }); 2009 2010 // move posts-container right before article 2011 $('.posts-container').insertBefore($('.d-article')); 2012 2013 $('body').addClass('downlevel'); 2014 2015 on_load_complete(); 2016} 2017 2018 2019function init_common() { 2020 2021 // jquery plugin to change element types 2022 (function($) { 2023 $.fn.changeElementType = function(newType) { 2024 var attrs = {}; 2025 2026 $.each(this[0].attributes, function(idx, attr) { 2027 attrs[attr.nodeName] = attr.nodeValue; 2028 }); 2029 2030 this.replaceWith(function() { 2031 return $("<" + newType + "/>", attrs).append($(this).contents()); 2032 }); 2033 }; 2034 })(jQuery); 2035 2036 // prevent underline for linked images 2037 $('a > img').parent().css({'border-bottom' : 'none'}); 2038 2039 // mark non-body figures created by knitr chunks as 100% width 2040 $('.layout-chunk').each(function(i, val) { 2041 var figures = $(this).find('img, .html-widget'); 2042 // ignore leaflet img layers (#106) 2043 figures = figures.filter(':not(img[class*="leaflet"])') 2044 if ($(this).attr('data-layout') !== "l-body") { 2045 figures.css('width', '100%'); 2046 } else { 2047 figures.css('max-width', '100%'); 2048 figures.filter("[width]").each(function(i, val) { 2049 var fig = $(this); 2050 fig.css('width', fig.attr('width') + 'px'); 2051 }); 2052 2053 } 2054 }); 2055 2056 // auto-append index.html to post-preview links in file: protocol 2057 // and in rstudio ide preview 2058 $('.post-preview').each(function(i, val) { 2059 if (window.location.protocol === "file:") 2060 $(this).attr('href', $(this).attr('href') + "index.html"); 2061 }); 2062 2063 // get rid of index.html references in header 2064 if (window.location.protocol !== "file:") { 2065 $('.distill-site-header a[href]').each(function(i,val) { 2066 $(this).attr('href', $(this).attr('href').replace(/^index[.]html/, "./")); 2067 }); 2068 } 2069 2070 // add class to pandoc style tables 2071 $('tr.header').parent('thead').parent('table').addClass('pandoc-table'); 2072 $('.kable-table').children('table').addClass('pandoc-table'); 2073 2074 // add figcaption style to table captions 2075 $('caption').parent('table').addClass("figcaption"); 2076 2077 // initialize posts list 2078 if (window.init_posts_list) 2079 window.init_posts_list(); 2080 2081 // implmement disqus comment link 2082 $('.disqus-comment-count').click(function() { 2083 window.headroom_prevent_pin = true; 2084 $('#disqus_thread').toggleClass('hidden'); 2085 if (!$('#disqus_thread').hasClass('hidden')) { 2086 var offset = $(this).offset(); 2087 $(window).resize(); 2088 $('html, body').animate({ 2089 scrollTop: offset.top - 35 2090 }); 2091 } 2092 }); 2093} 2094 2095document.addEventListener('DOMContentLoaded', function() { 2096 if (is_downlevel_browser()) 2097 init_downlevel(); 2098 else 2099 window.addEventListener('WebComponentsReady', init_distill); 2100}); 2101 2102</script>
2102 2103 2104<!--/radix_placeholder_distill--> 2105
2105<script src="../../site_libs/header-attrs-2.20/header-attrs.js"></script>
2105 2106
2106<script src="../../site_libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
2106 2107
2107<script src="../../site_libs/popper-2.6.0/popper.min.js"></script>
2107 2108 <link href="../../site_libs/tippy-6.2.7/tippy.css" rel="stylesheet" /> 2109 <link href="../../site_libs/tippy-6.2.7/tippy-light-border.css" rel="stylesheet" /> 2110
2110<script src="../../site_libs/tippy-6.2.7/tippy.umd.min.js"></script>
2110 2111
2111<script src="../../site_libs/anchor-4.2.2/anchor.min.js"></script>
2111 2112
2112<script src="../../site_libs/bowser-1.9.3/bowser.min.js"></script>
2112 2113
2113<script src="../../site_libs/webcomponents-2.0.0/webcomponents.js"></script>
2113 2114
2114<script src="../../site_libs/distill-2.2.21/template.v2.js"></script>
2114 2115 <!--radix_placeholder_site_in_header-->
2116<script> 2117/* 2118script developed by @MilesMcBainon github 2119*/ 2120 document.addEventListener("DOMContentLoaded", function () { 2121 if (!/posts/.test(location.pathname)) { 2122 return; 2123 } 2124 2125 var script = document.createElement("script"); 2126 script.src = "https://utteranc.es/client.js"; 2127 script.setAttribute("repo", "vosonlab/vosonlab.github.io"); 2128 script.setAttribute("issue-term", "og:title"); 2129 script.setAttribute("crossorigin", "anonymous"); 2130 script.setAttribute("label", "comment_thread"); 2131 2132 /* wait for article to load, append script to article element */ 2133 var observer = new MutationObserver(function (mutations, observer) { 2134 var article = document.querySelector("d-article"); 2135 if (article) { 2136 observer.disconnect(); 2137 /* HACK: article scroll */ 2138 article.setAttribute("style", "overflow-y: hidden"); 2139 article.appendChild(script); 2140 } 2141 }); 2142 2143 observer.observe(document.body, { childList: true }); 2144 }); 2145</script>
2145 2146 2147<style type="text/css"> 2148.distill-site-header .logo img { 2149 max-height: 35px; 2150 margin-bottom: -12px; 2151 margin-top: 8px; 2152} 2153 2154.posts-list-caption { 2155 margin-top: -35px; 2156} 2157 2158d-title { 2159 padding-bottom: 0 !important; 2160} 2161 2162d-byline { 2163 padding: 0.2rem 0 !important; 2164} 2165 2166.posts-list .post-preview .thumbnail { 2167 /* 2168 max-width: 400px !important; 2169 max-height: 300px !important; 2170 */ 2171 padding-right: 4px; 2172} 2173 2174.posts-list .post-preview img { 2175 /* 2176 width: 100% !important; 2177 height: 100% !important; 2178 */ 2179} 2180 2181.bs-callout { 2182 margin: 20px 0; 2183 padding: 15px 30px 15px 15px; 2184 border-left: 5px solid #eee; 2185} 2186 2187.bs-callout h4 { 2188 margin-top: 0; 2189} 2190 2191.bs-callout p:last-child { 2192 margin-bottom: 0; 2193} 2194 2195.bs-callout code, 2196.bs-callout .highlight { 2197 background-color: #fff; 2198} 2199 2200.bs-callout-danger { 2201 background-color: #fcf2f2; 2202 border-color: #d9534f; 2203} 2204 2205.bs-callout-warning { 2206 background-color: #fefbed; 2207 border-color: #f0ad4e; 2208} 2209 2210.bs-callout-info { 2211 background-color: #f0f7fd; 2212 border-color: #5bc0de; 2213} 2214 2215</style> 2216<!--/radix_placeholder_site_in_header--> 2217 2218 2219</head> 2220 2221<body> 2222 2223<!--radix_placeholder_front_matter--> 2224
2225<script id="distill-front-matter" type="text/json"> 2226{"title":"Welcome to the VOSON Lab Code Blog","description":"The code blog is a space to share tools, methods, tips, examples and code. A place to collect data, construct and analyze online networks.","authors":[{"author":"Robert Ackland","authorURL":"http://vosonlab.net/","affiliation":"VOSON Lab, School of Sociology, Australian National University","affiliationURL":"http://vosonlab.net/","orcidID":""}],"publishedDate":"2021-02-04T00:00:00.000+11:00","citationText":"Ackland, 2021"} 2227</script>
2227 2228 2229<!--/radix_placeholder_front_matter--> 2230<!--radix_placeholder_navigation_before_body--> 2231<header class="header header--fixed" role="banner"> 2232<nav class="distill-site-nav distill-site-header"> 2233<div class="nav-left"> 2234<span class="logo"> 2235<img src="../../images/logo.png"/> 2236</span> 2237<a href="../../index.html" class="title">VOSON Lab Code Blog</a> 2238<input id="distill-search" class="nav-search hidden" type="text" placeholder="Search..."/> 2239</div> 2240<div class="nav-right"> 2241<a href="../../index.html">Home</a> 2242<a href="http://vosonlab.net/"> 2243<i class="fa fa-flask" aria-hidden="true"></i> 2244</a> 2245<a href="https://twitter.com/vosonlab"> 2246<i class="fa fa-twitter" aria-hidden="true"></i> 2247</a> 2248<a href="https://github.com/vosonlab"> 2249<i class="fa fa-github" aria-hidden="true"></i> 2250</a> 2251<a href="../../index.xml"> 2252<i class="fa fa-rss" aria-hidden="true"></i> 2253</a> 2254<a href="javascript:void(0);" class="nav-toggle">☰</a> 2255</div> 2256</nav> 2257</header> 2258<!--/radix_placeholder_navigation_before_body--> 2259<!--radix_placeholder_site_before_body--> 2260<!--/radix_placeholder_site_before_body--> 2261 2262<div class="d-title"> 2263<h1>Welcome to the VOSON Lab Code Blog</h1> 2264<!--radix_placeholder_categories--> 2265<div class="dt-tags"> 2266 <a href="../../index.html#category:rstats" class="dt-tag">rstats</a> 2267 <a href="../../index.html#category:SNA" class="dt-tag">SNA</a> 2268 <a href="../../index.html#category:Computational_Social_Science" class="dt-tag">Computational Social Science</a> 2269</div> 2270<!--/radix_placeholder_categories--> 2271<p><p>The code blog is a space to share tools, methods, tips, examples and code. A place to collect data, construct and analyze online networks.</p></p> 2272</div> 2273 2274<div class="d-byline"> 2275 Robert Ackland <a href="http://vosonlab.net/" class="uri">http://vosonlab.net/</a> (VOSON Lab, School of Sociology, Australian National University)<a href="http://vosonlab.net/" class="uri">http://vosonlab.net/</a> 2276 2277<br/>February 4, 2021 2278</div> 2279 2280<div class="d-article"> 2281<p>Welcome to the <a href="http://vosonlab.net/">VOSON Lab</a> Code Blog! We have created this space to share methods, tips, examples and code. Itâs also a place where we will demonstrate constructing and analyzing networks from various API and other online data sources.</p> 2282<p>Most of our posts will cover techniques around the tools we have developed at the Lab: <code>vosonSML</code>, <code>VOSONDash</code> and <code>voson.tcn</code>, which are available on both <a href="https://cran.r-project.org/package=vosonSML">CRAN</a> and <a href="https://github.com/vosonlab">GitHub</a>. But we also plan to use this space to cover other complementary R packages and open-source software, such as fantastic R packages within the <a href="https://www.tidyverse.org/"><code>tidyverse</code></a>, RStudioâs <a href="https://www.rstudio.com/products/shiny/"><code>shiny</code></a> for web apps, and visualization tools such as <a href="https://igraph.org/r/"><code>igraph</code></a> and <a href="https://gephi.org/"><code>Gephi</code></a>.</p> 2283<figure> 2284<img src="VOSON-tools.png" alt="VOSON Lab R Packages - Hex stickers" /> 2285<figcaption aria-hidden="true">VOSON Lab R Packages - Hex stickers</figcaption> 2286</figure> 2287<h3 id="voson-lab-open-source-tools">VOSON Lab Open Source Tools</h3> 2288<p><code>vosonSML</code> is a R package for social media data collection (currently twitter, youtube, and reddit), hyperlink collection and network generation. <code>VOSONDash</code> is a <code>Shiny</code> app that integrates tools for visualizing and manipulating network graphs, performing network and text analysis, as well as an interface for collecting data with <code>vosonSML</code>.</p> 2289<p>More information on these packages, their development and code can be found on our <a href="https://github.com/vosonlab/vosonSML"><code>vosonSML</code></a>, <a href="https://github.com/vosonlab/VOSONDash"><code>VOSONDash</code></a> and <a href="https://github.com/vosonlab/voson.tcn"><code>voson.tcn</code></a> github pages.</p> 2290<p>We also have some other guides for using the packages. Check the <a href="https://vosonlab.github.io/vosonSML/articles/Intro-to-vosonSML.html">vosonSML Vignette</a> and the <a href="https://vosonlab.github.io/VOSONDashDocs/">
2290VOSON Dash Userguide</a> for some practical examples and feature reference.</p> 2291<p>We hope you find this content useful!</p> 2292<p>The VOSON Lab team.</p> 2293<p><em>Virtual Observatory for the Study of Online Networks <a href="http://vosonlab.net/">VOSON Lab</a>, School of Sociology, The Australian National University.</em></p> 2294<div class="sourceCode" id="cb1"><pre class="sourceCode r distill-force-highlighting-css"><code class="sourceCode r"></code></pre></div> 2295<!--radix_placeholder_article_footer--> 2296<div class="article-footer"> 2297 <p class="social_footer"> 2298 <span class="article-sharing"> 2299 Share: 2300 <a href="https://twitter.com/share?text=Welcome%20to%20the%20VOSON%20Lab%20Code%20Blog&url=https%3A%2F%2Fvosonlab.github.io%2Fposts%2F2021-02-05_welcome%2F" aria-label="share on twitter"> 2301 <i class="fab fa-twitter" aria-hidden="true"></i> 2302 </a> 2303 <a href="https://www.facebook.com/sharer/sharer.php?s=100&p[url]=https%3A%2F%2Fvosonlab.github.io%2Fposts%2F2021-02-05_welcome%2F" aria-label="share on facebook"> 2304 <i class="fab fa-facebook" aria-hidden="true"></i> 2305 </a> 2306 </span> 2307 </p> 2308</div> 2309<!--/radix_placeholder_article_footer--> 2310</div> 2311 2312<div class="d-appendix"> 2313</div> 2314 2315 2316<!--radix_placeholder_site_after_body--> 2317<!--/radix_placeholder_site_after_body--> 2318<!--radix_placeholder_appendices--> 2319<div class="appendix-bottom"> 2320 <h3 id="reuse">Reuse</h3> 2321 <p>Text and figures are licensed under Creative Commons Attribution <a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".</p> 2322 <h3 id="citation">Citation</h3> 2323 <p>For attribution, please cite this work as</p> 2324 <pre class="citation-appendix short">Ackland (2021, Feb. 4). VOSON Lab Code Blog: Welcome to the VOSON Lab Code Blog. Retrieved from https://vosonlab.github.io/posts/2021-02-05_welcome/</pre> 2325 <p>BibTeX citation</p> 2326 <pre class="citation-appendix long">@misc{ackland2021welcome, 2327 author = {Ackland, Robert}, 2328 title = {VOSON Lab Code Blog: Welcome to the VOSON Lab Code Blog}, 2329 url = {https://vosonlab.github.io/posts/2021-02-05_welcome/}, 2330 year = {2021} 2331}</pre> 2332</div> 2333<!--/radix_placeholder_appendices--> 2334<!--radix_placeholder_navigation_after_body--> 2335<!--/radix_placeholder_navigation_after_body--> 2336 2337</body> 2338 2339</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.