PageSourceSearch

https://vosonlab.github.io/posts/2021-02-05_welcome/

html vosonlab.github.io collected 2026-10-03 10:09:01 UTC 63,670 bytes, 2,339 lines download raw bytes

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 !== "&nbsp;") {
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">&#9776;</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: &nbsp;
2300      <a href="https://twitter.com/share?text=Welcome%20to%20the%20VOSON%20Lab%20Code%20Blog&amp;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&amp;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.