diff --git a/404.html b/404.html new file mode 100644 index 0000000..9cd702e --- /dev/null +++ b/404.html @@ -0,0 +1,71 @@ + + + + + + + + + + 404 - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +

404: Page not found

+

Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. Head back home to try finding it again.

+

+ + + +
+
+ + + + + + + diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..539f612 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +doingstuff.dev diff --git a/README.md b/README.md new file mode 100644 index 0000000..d40bce5 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Blog +https://doingstuff.dev + +# About +https://creekmore.dev \ No newline at end of file diff --git a/apple-touch-icon-144-precomposed.png b/apple-touch-icon-144-precomposed.png new file mode 100644 index 0000000..c46dac2 Binary files /dev/null and b/apple-touch-icon-144-precomposed.png differ diff --git a/atom.xml b/atom.xml new file mode 100644 index 0000000..5777b8e --- /dev/null +++ b/atom.xml @@ -0,0 +1,198 @@ + + + Doing Stuff + A blog about stuff + + + Zola + 2024-05-27T00:00:00+00:00 + https://doingstuff.dev/atom.xml + + Home Assistant - Linux tablet dashboard and voice assistant + 2024-05-27T00:00:00+00:00 + 2024-05-27T00:00:00+00:00 + + Morgan Creekmore + + + https://doingstuff.dev/posts/home-assistant-dashboard-tablet/ + + <p>Turning an Intel Atom based Lenovo Tablet 10 (20E4) into a Home Assistant dashboard and voice assistant. Most tutorials for dashboard displays are using Android tablets, but I had this old tablet laying around and figured out how to use it with Home Assistant.</p> +<figure class=center> + + <img src="https://doingstuff.dev/posts/home-assistant-dashboard-tablet/tablet_small.png" + alt="Lenovo tablet with home assistant dashboard" + style="max-width:100%"> + + +</figure> + + + + + Homelab Sidequest - Switching from Salt to Ansible + 2024-03-20T00:00:00+00:00 + 2024-03-20T00:00:00+00:00 + + Morgan Creekmore + + + https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/ + + <p>About a month ago I thought it would be nice to be able to configure VM's and Droplets with Salt by using my existing configuration I had setup in <a href="https://doingstuff.dev/posts/homelab-adventure-part-2/">Part 2: Configuration Management</a>.</p> + + + + + Homelab Adventure - Part 3: Internal Network + 2023-03-29T00:00:00+00:00 + 2023-03-29T00:00:00+00:00 + + Morgan Creekmore + + + https://doingstuff.dev/posts/homelab-adventure-part-3/ + + <p>Welcome to my journey in building my homelab. This is part of a multipart series, in the last part I gave an overview of how to do configuration management. This one will cover how I set up my internal network.</p> + + + + + Embedding Version Info into ELF Shared Libraries + 2023-03-22T00:00:00+00:00 + 2023-03-22T00:00:00+00:00 + + Morgan Creekmore + + + https://doingstuff.dev/posts/elf-shared-library-version/ + + <p><em>How to embed version information into an ELF shared library?</em></p> +<p>Here are the methods I have used for embedding version information.</p> + + + + + Sending MIDI from Reaper to Unreal Engine + 2022-04-11T00:00:00+00:00 + 2022-04-11T00:00:00+00:00 + + Morgan Creekmore + + + https://doingstuff.dev/posts/reaper-midi-unreal-engine/ + + <p>How to setup Reaper to send MIDI to Unreal Engine. If you are looking to use OSC instead, take a look at <a href="https://github.com/gamingrobot/daw-out">daw-out</a>.</p> + + + + + Commodore 64 Puzzle + 2020-02-27T00:00:00+00:00 + 2020-02-27T00:00:00+00:00 + + Morgan Creekmore + + + https://doingstuff.dev/posts/c64-puzzle/ + + <p>My college professor posted this image with the question</p> +<blockquote> +<p>What is the output when enter is pressed?</p> +</blockquote> +<figure class=center> + + <img src="https://doingstuff.dev/posts/c64-puzzle/problem.jpg" + alt="Commodore 64 screen with a BASIC program" + style="max-width:100%"> + + +</figure> + + + + + Homelab Adventure - Part 2: Configuration Management + 2020-02-06T00:00:00+00:00 + 2020-02-06T00:00:00+00:00 + + Morgan Creekmore + + + https://doingstuff.dev/posts/homelab-adventure-part-2/ + + <p>Welcome to my journey in building my homelab. This is part of a multipart series, in the last part I gave an overview of the homelab plan. This one will cover how I handle configuration management.</p> + + + + + Homelab Adventure - Part 1: The Adventure Begins + 2019-11-09T00:00:00+00:00 + 2019-11-09T00:00:00+00:00 + + Morgan Creekmore + + + https://doingstuff.dev/posts/homelab-adventure-part-1/ + + <p>Welcome to my journey in building my homelab. This will be an ongoing series of blog posts of my adventures in building my personal infrastructure.</p> + + + + + peaCTF 2019 Writeups + 2019-07-26T00:00:00+00:00 + 2019-07-26T00:00:00+00:00 + + Morgan Creekmore + + + https://doingstuff.dev/posts/ctf-peactf-2019/ + + <p>Writeups for <a href="https://peactf.com/">peaCTF</a> 2019</p> + + + + + InnoCTF 2019 Writeups + 2019-07-19T00:00:00+00:00 + 2019-07-19T00:00:00+00:00 + + Morgan Creekmore + + + https://doingstuff.dev/posts/ctf-innoctf-2019/ + + <p>Writeups for <a href="http://innoctf.com/">InnoCTF</a> 2019</p> + + + + + Floating Point Hell + 2014-03-16T00:00:00+00:00 + 2014-03-16T00:00:00+00:00 + + Morgan Creekmore + + + https://doingstuff.dev/posts/floating-point-hell/ + + <p>This blog post will show how to deal with floating-point error in JavaScript by encoding all uint64's, and int64's as strings in JSON Marshaling.</p> + + + + + Setup QEMU for ARM on Debian Wheezy + 2014-01-01T00:00:00+00:00 + 2014-01-01T00:00:00+00:00 + + Morgan Creekmore + + + https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/ + + <p>This is a quick little blog post for how to install QEMU for ARM on Debian 7.0 (Wheezy).</p> + + + + diff --git a/elasticlunr.min.js b/elasticlunr.min.js new file mode 100644 index 0000000..79dad65 --- /dev/null +++ b/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.6 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();oul{list-style-type:none;padding-left:0;margin-bottom:0}.toc>ul>li ul{list-style-type:none;padding-left:1em}.toc a{color:#0e73ba}input#tocToggle{display:none}input#tocToggle:checked~.toc{max-height:0} \ No newline at end of file diff --git a/img/lost.gif b/img/lost.gif new file mode 100644 index 0000000..4cf1dea Binary files /dev/null and b/img/lost.gif differ diff --git a/img/profile.png b/img/profile.png new file mode 100644 index 0000000..772b23c Binary files /dev/null and b/img/profile.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..8193b6b --- /dev/null +++ b/index.html @@ -0,0 +1,197 @@ + + + + + + + + + + Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+ +
Home Assistant - Linux tablet dashboard and voice assistant + May 27, 2024 + +

Turning an Intel Atom based Lenovo Tablet 10 (20E4) into a Home Assistant dashboard and voice assistant. Most tutorials for dashboard displays are using Android tablets, but I had this old tablet laying around and figured out how to use it with Home Assistant.

+
+ + Lenovo tablet with home assistant dashboard + + +
+ + +
+
+ +
Homelab Sidequest - Switching from Salt to Ansible + Mar 20, 2024 + +

About a month ago I thought it would be nice to be able to configure VM's and Droplets with Salt by using my existing configuration I had setup in Part 2: Configuration Management.

+ + +
+
+ +
Homelab Adventure - Part 3: Internal Network + Mar 29, 2023 + +

Welcome to my journey in building my homelab. This is part of a multipart series, in the last part I gave an overview of how to do configuration management. This one will cover how I set up my internal network.

+ + +
+
+ +
Embedding Version Info into ELF Shared Libraries + Mar 22, 2023 + +

How to embed version information into an ELF shared library?

+

Here are the methods I have used for embedding version information.

+ + +
+
+ +
Sending MIDI from Reaper to Unreal Engine + Apr 11, 2022 + +

How to setup Reaper to send MIDI to Unreal Engine. If you are looking to use OSC instead, take a look at daw-out.

+ + +
+
+ +
Commodore 64 Puzzle + Feb 27, 2020 + +

My college professor posted this image with the question

+
+

What is the output when enter is pressed?

+
+
+ + Commodore 64 screen with a BASIC program + + +
+ + +
+
+ +
Homelab Adventure - Part 2: Configuration Management + Feb 06, 2020 + +

Welcome to my journey in building my homelab. This is part of a multipart series, in the last part I gave an overview of the homelab plan. This one will cover how I handle configuration management.

+ + +
+
+ +
Homelab Adventure - Part 1: The Adventure Begins + Nov 09, 2019 + +

Welcome to my journey in building my homelab. This will be an ongoing series of blog posts of my adventures in building my personal infrastructure.

+ + +
+
+ +
peaCTF 2019 Writeups + Jul 26, 2019 + +

Writeups for peaCTF 2019

+ + +
+
+ +
InnoCTF 2019 Writeups + Jul 19, 2019 + +

Writeups for InnoCTF 2019

+ + +
+
+ +
+ + + + + + + +
+
+ + + + + + + diff --git a/js/search.js b/js/search.js new file mode 100644 index 0000000..e7efa2c --- /dev/null +++ b/js/search.js @@ -0,0 +1,190 @@ +function debounce(func, wait) { + var timeout; + + return function () { + var context = this; + var args = arguments; + clearTimeout(timeout); + + timeout = setTimeout(function () { + timeout = null; + func.apply(context, args); + }, wait); + }; +} + +// Taken from mdbook +// The strategy is as follows: +// First, assign a value to each word in the document: +// Words that correspond to search terms (stemmer aware): 40 +// Normal words: 2 +// First word in a sentence: 8 +// Then use a sliding window with a constant number of words and count the +// sum of the values of the words within the window. Then use the window that got the +// maximum sum. If there are multiple maximas, then get the last one. +// Enclose the terms in . +function makeTeaser(body, terms) { + var TERM_WEIGHT = 40; + var NORMAL_WORD_WEIGHT = 2; + var FIRST_WORD_WEIGHT = 8; + var TEASER_MAX_WORDS = 30; + + var stemmedTerms = terms.map(function (w) { + return elasticlunr.stemmer(w.toLowerCase()); + }); + var termFound = false; + var index = 0; + var weighted = []; // contains elements of ["word", weight, index_in_document] + + // split in sentences, then words + var sentences = body.toLowerCase().split(". "); + + for (var i in sentences) { + var words = sentences[i].split(" "); + var value = FIRST_WORD_WEIGHT; + + for (var j in words) { + var word = words[j]; + + if (word.length > 0) { + for (var k in stemmedTerms) { + if (elasticlunr.stemmer(word).startsWith(stemmedTerms[k])) { + value = TERM_WEIGHT; + termFound = true; + } + } + weighted.push([word, value, index]); + value = NORMAL_WORD_WEIGHT; + } + + index += word.length; + index += 1; // ' ' or '.' if last word in sentence + } + + index += 1; // because we split at a two-char boundary '. ' + } + + if (weighted.length === 0) { + return body; + } + + var windowWeights = []; + var windowSize = Math.min(weighted.length, TEASER_MAX_WORDS); + // We add a window with all the weights first + var curSum = 0; + for (var i = 0; i < windowSize; i++) { + curSum += weighted[i][1]; + } + windowWeights.push(curSum); + + for (var i = 0; i < weighted.length - windowSize; i++) { + curSum -= weighted[i][1]; + curSum += weighted[i + windowSize][1]; + windowWeights.push(curSum); + } + + // If we didn't find the term, just pick the first window + var maxSumIndex = 0; + if (termFound) { + var maxFound = 0; + // backwards + for (var i = windowWeights.length - 1; i >= 0; i--) { + if (windowWeights[i] > maxFound) { + maxFound = windowWeights[i]; + maxSumIndex = i; + } + } + } + + var teaser = []; + var startIndex = weighted[maxSumIndex][2]; + for (var i = maxSumIndex; i < maxSumIndex + windowSize; i++) { + var word = weighted[i]; + if (startIndex < word[2]) { + // missing text from index to start of `word` + teaser.push(body.substring(startIndex, word[2])); + startIndex = word[2]; + } + + // add around search terms + if (word[1] === TERM_WEIGHT) { + teaser.push(""); + } + startIndex = word[2] + word[0].length; + teaser.push(body.substring(word[2], startIndex)); + + if (word[1] === TERM_WEIGHT) { + teaser.push(""); + } + } + teaser.push("…"); + return teaser.join(""); +} + +function formatSearchResultItem(item) { + return '' + + `${item.doc.title} ` + // + `` // add when zola search index includes date + + ''; +} + +function initSearch() { + var $searchInput = document.getElementById("search"); + var $searchResultsItems = document.querySelector(".search-results__items"); + var MAX_ITEMS = 10; + + var options = { + bool: "AND", + fields: { + title: {boost: 2}, + body: {boost: 1}, + } + }; + var currentTerm = ""; + var index; + + var initIndex = async function () { + if (index === undefined) { + index = fetch("/search_index.en.json") + .then( + async function(response) { + return await elasticlunr.Index.load(await response.json()); + } + ); + } + let res = await index; + return res; + } + + $searchInput.addEventListener("keyup", debounce(async function() { + var term = $searchInput.value.trim(); + if (term === currentTerm) { + return; + } + $searchResultsItems.innerHTML = ""; + currentTerm = term; + if (term === "") { + return; + } + + var results = (await initIndex()).search(term, options); + if (results.length === 0) { + return; + } + + for (var i = 0; i < Math.min(results.length, MAX_ITEMS); i++) { + var item = document.createElement("li"); + item.innerHTML = formatSearchResultItem(results[i]); + $searchResultsItems.appendChild(item); + } + }, 150)); +} + + +if (document.readyState === "complete" || + (document.readyState !== "loading" && !document.documentElement.doScroll) +) { + initSearch(); +} else { + document.addEventListener("DOMContentLoaded", initSearch); +} diff --git a/page/1/index.html b/page/1/index.html new file mode 100644 index 0000000..ee78756 --- /dev/null +++ b/page/1/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/page/2/index.html b/page/2/index.html new file mode 100644 index 0000000..2c7f7d8 --- /dev/null +++ b/page/2/index.html @@ -0,0 +1,105 @@ + + + + + + + + + + Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+ +
Floating Point Hell + Mar 16, 2014 + +

This blog post will show how to deal with floating-point error in JavaScript by encoding all uint64's, and int64's as strings in JSON Marshaling.

+ + +
+
+ +
Setup QEMU for ARM on Debian Wheezy + Jan 01, 2014 + +

This is a quick little blog post for how to install QEMU for ARM on Debian 7.0 (Wheezy).

+ + +
+
+ +
+ + + + + + + +
+
+ + + + + + + diff --git a/pages/about/index.html b/pages/about/index.html new file mode 100644 index 0000000..4b124fb --- /dev/null +++ b/pages/about/index.html @@ -0,0 +1,101 @@ + + + + + + + + + + About - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ + + + + + +
+
+ + + + + + + diff --git a/posts/c64-puzzle/index.html b/posts/c64-puzzle/index.html new file mode 100644 index 0000000..f4be016 --- /dev/null +++ b/posts/c64-puzzle/index.html @@ -0,0 +1,262 @@ + + + + + + + + + + Commodore 64 Puzzle - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+
+

Commodore 64 Puzzle

+ +
+ +
+ + +
+ +
+
+ +
+

My college professor posted this image with the question

+
+

What is the output when enter is pressed?

+
+
+ + Commodore 64 screen with a BASIC program + + +
+ +

I recognized this as a Commodore 64 and decided to dive deeper into what happens when SYS 49152 is run.

+

Some Basics🔗

+

PEEK(<address>) is used to look at the memory for the specified address.

+

POKE <address>,<value> writes the value to the specified address.

+

The Main Program🔗

+

We can start by loading the program into a Commodore 64 Emulator.

+
10 X=49152
+15 PRINT X
+20 Y=11
+30 FOR M=0 TO Y
+40 PRINT PEEK(X+M);
+50 PRINT " ";
+60 NEXT M
+
+
+ + Commodore 64 screen with bad output from the main program + + +
+

The output doesn't match the output from the original picture. According to the C64 wiki, the 49152 address is the location of the MONITOR$C000. So the BASIC program is printing the bytes of the machine code program located in MONITOR$C000.

+

Matching the Contents🔗

+

We can attempt to match the contents of the 49152-49164 memory block by manually poking bytes into memory.

+
10 POKE 49152,169
+11 POKE 49153,83
+12 POKE 49154,141
+13 POKE 49155,244
+14 POKE 49156,5
+15 POKE 49157,169
+16 POKE 49158,2
+17 POKE 49159,141
+18 POKE 49160,244
+19 POKE 49161,217
+20 POKE 49162,96
+21 POKE 49163,0
+
+
+ + Commodore 64 screen with matching output from the original program + + +
+

Success?🔗

+

Now when running SYS 49152 we get a nice red heart.

+
+ + Commodore 64 screen with a red heart in the middle of the screen + + +
+

But Why?🔗

+

How does 169 83 141 244 5 169 2 141 244 217 96 0 result in a red heart on the screen?

+

The bytes are machine code for the Commodore 64. So we can look up the opcodes to convert them to assembly.

+

Decoding🔗

+

Converting the bytes into hex:

+

A9 53 8D F4 05 A9 02 8D F4 D9 60 00

+

Using the Opcode lookup table we can decode the bytes:

+
    +
  • A9: LDA #nn (LoaD Accumulator)
  • +
  • 53(83 dec): Value loaded into the accumulator
  • +
  • 8D: STA nnnn (STore Accumulator)
  • +
  • 05F4(1524 dec): Address to store the value from the accumulator
  • +
  • A9: LDA #nn
  • +
  • 02(2 dec): Value loaded into the accumulator
  • +
  • 8D: STA nnnn
  • +
  • D9F4(55796 dec): Address to store the value from the accumulator
  • +
  • 60: RTS (ReTurn from Subroutine)
  • +
+

Here is the full assembly code:

+
LDA #53
+STA 05F4
+LDA #02
+STA D9F4
+RTS
+
+

If we convert this to a BASIC program it would be:

+
10 POKE 1524,83
+20 POKE 55796,2
+
+

What is it doing?🔗

+

So we have figured out that the machine code is writing two values to two different memory addresses.

+

POKE 1524,83

+

The 1524 address is used by the C64 for Screen RAM allowing you to write characters directly to the screen. The value 83 is the character code for the heart in the C64's character set.

+

POKE 55796,2

+

The 55796 address is used to specify the color of the character on the screen using Color RAM. The value 2 is red on the color lookup table.

+

For more information on the C64's memory map you can look here.

+

Having Some Fun🔗

+

Now that we understand how this works we can write our own colorful characters to the screen.

+
+ + Commodore 64 screen with a red heart, a teal heart, and a green spade + + +
+ +
+ + + +
+ + + + + + +
+
+ + + + + + + + diff --git a/posts/c64-puzzle/problem.jpg b/posts/c64-puzzle/problem.jpg new file mode 100644 index 0000000..c300153 Binary files /dev/null and b/posts/c64-puzzle/problem.jpg differ diff --git a/posts/c64-puzzle/vice-screen-20200229000050.png b/posts/c64-puzzle/vice-screen-20200229000050.png new file mode 100644 index 0000000..2e7777e Binary files /dev/null and b/posts/c64-puzzle/vice-screen-20200229000050.png differ diff --git a/posts/c64-puzzle/vice-screen-20200229001253.png b/posts/c64-puzzle/vice-screen-20200229001253.png new file mode 100644 index 0000000..9014de2 Binary files /dev/null and b/posts/c64-puzzle/vice-screen-20200229001253.png differ diff --git a/posts/c64-puzzle/vice-screen-20200229001432.png b/posts/c64-puzzle/vice-screen-20200229001432.png new file mode 100644 index 0000000..22bbc61 Binary files /dev/null and b/posts/c64-puzzle/vice-screen-20200229001432.png differ diff --git a/posts/c64-puzzle/vice-screen-20200229004946.png b/posts/c64-puzzle/vice-screen-20200229004946.png new file mode 100644 index 0000000..4bbfc0e Binary files /dev/null and b/posts/c64-puzzle/vice-screen-20200229004946.png differ diff --git a/posts/ctf-innoctf-2019/call_me_flag.png b/posts/ctf-innoctf-2019/call_me_flag.png new file mode 100644 index 0000000..2a4a048 Binary files /dev/null and b/posts/ctf-innoctf-2019/call_me_flag.png differ diff --git a/posts/ctf-innoctf-2019/call_me_flag_patch.png b/posts/ctf-innoctf-2019/call_me_flag_patch.png new file mode 100644 index 0000000..22c262b Binary files /dev/null and b/posts/ctf-innoctf-2019/call_me_flag_patch.png differ diff --git a/posts/ctf-innoctf-2019/call_me_printf.png b/posts/ctf-innoctf-2019/call_me_printf.png new file mode 100644 index 0000000..dd028cf Binary files /dev/null and b/posts/ctf-innoctf-2019/call_me_printf.png differ diff --git a/posts/ctf-innoctf-2019/index.html b/posts/ctf-innoctf-2019/index.html new file mode 100644 index 0000000..0c556ef --- /dev/null +++ b/posts/ctf-innoctf-2019/index.html @@ -0,0 +1,251 @@ + + + + + + + + + + InnoCTF 2019 Writeups - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+
+

InnoCTF 2019 Writeups

+ +
+ +
+ + +
+ +
+
+ +
+

Writeups for InnoCTF 2019

+

BG's🔗

+

Can you check if this site is hiding something?

+

Solution🔗

+

style.css had a background property that lead to an image that contained the flag.

+

InnoCTF{HVQMGcp00mN0MnmqwRNBExEBPFTMgnPQ}

+

RF🔗

+

I was walking on rails when suddenly i found this on wooden fence: I3_nase7ncamco_r1cCt_t4T07_}Fnhs{1

+

Solution🔗

+

I looked at various ciphers and stumbled across the Rail Fence cipher. Then increasing the number of rails until it formed a flag.

+
I.............3............._.....
+.n...........a.s...........e.7....
+..n.........c...a.........m...c...
+...o......._.....r.......1.....c..
+....C.....t......._.....t.......4.
+.....T...0.........7..._.........}
+......F.n...........h.s...........
+.......{.............1............
+
+

InnoCTF{n0t_ca3sar_7h1s_t1me_7cc4}

+

Robots🔗

+

I need your clothes your boots and your motorcycle

+

Solution🔗

+

robots.txt was in the root of the web server with the contents of:

+
Disallow: /*/super-secret-admin-panel
+
+

The super-secret-admin-panel then required sql injection of ' or 1=1 -- .

+

Call Me🔗

+

Solution🔗

+

Using Ghidra I replaced the existing printf function in main to point to void flag() address instead.

+
    +
  • Import the file as Raw Binary (this is because Ghidra messes up the ELF header if imported as a ELF binary)
  • +
  • Find the memory address of the flag function
  • +
+
+ + Ghidra output of the flag function + + +
+
    +
  • Find the main function
  • +
+
+ + Ghidra output of the main function with a call to printf + + +
+
    +
  • Right click on the printf function and select patch instruction
  • +
  • Change the call address to be the address of the flag function
  • +
+
+ + Ghidra output of the printf call patched to the flag function + + +
+
    +
  • Export Program from Ghidra
  • +
  • Run the executable
  • +
+

InnoCTF{How_d1d_y0u_f1nd_m3_7f1bc88}

+

Quick Peek🔗

+

Solution🔗

+

I discovered that this was a .NET executable, so I used dnSpy to run the executable with debugging.

+
+ + dnSpy at a breakpoint in the flag function with the locals window showing the flag + + +
+

InnoCTF{1337_SPAgh377i_CoD3}

+ +
+ + + +
+ + + + + + +
+
+ + + + + + + + diff --git a/posts/ctf-innoctf-2019/quick_peek.png b/posts/ctf-innoctf-2019/quick_peek.png new file mode 100644 index 0000000..6897a8e Binary files /dev/null and b/posts/ctf-innoctf-2019/quick_peek.png differ diff --git a/posts/ctf-peactf-2019/index.html b/posts/ctf-peactf-2019/index.html new file mode 100644 index 0000000..340f476 --- /dev/null +++ b/posts/ctf-peactf-2019/index.html @@ -0,0 +1,322 @@ + + + + + + + + + + peaCTF 2019 Writeups - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+
+

peaCTF 2019 Writeups

+ +
+ +
+ + +
+ +
+
+ +
+

Writeups for peaCTF 2019

+

RSA🔗

+

Can you help Bob retrieve the two messages for a flag?

+

Solution🔗

+

The challenge included two files:

+

auth_channel.txt

+
Authenticated (unhashed) channel:
+n = 59883006898206291499785811163190956754007806709157091648869
+e = 65537
+c = 23731413167627600089782741107678182917228038671345300608183
+
+

enc_channel.txt

+
Encrypted channel:
+n = 165481207658568424313022356820498512502867488746572300093793
+e = 65537
+c = 150635433712900935381157860417761227624682377134647578768653
+
+

I had never done a RSA crypto CTF challenge before, so I read this great blog post Attacking RSA for fun and CTF points.

+

enc_channel.txt🔗

+

The n value in the enc_channel.txt file had known factors

+

So we now have p, q, and e, I came across a Crypto StackExchange question about decrypting c given p, q, e.

+

I attempted to use the python script in the answer but had difficulty getting it to work with our inputs. Eventually I converted the script to C# using the BouncyCastle NuGet package for the BigInteger and modInverse function. The following script was written in LINQPad for the nice dump functions.

+
var p = new BigInteger("404796306518120759733507156677");
+var q = new BigInteger("408801179738927870766525808109");
+var e = new BigInteger("65537");
+var c = new BigInteger("150635433712900935381157860417761227624682377134647578768653");
+
+var n = p.Multiply(q);
+
+var one = new BigInteger("1");
+var phi = (p.Subtract(one).Multiply(q.Subtract(one)));
+
+var d = e.ModInverse(phi);
+d.Dump("d");
+
+var result = c.ModPow(d, n);
+result.Dump("Decoded");
+result.ToString(16).Dump("hex");
+
+

Output:

+
d: 125212438875455843161244268921851095575914294443076546907249
+Decoded: 8904929771347223901285886734450
+hex: 7065614354467b663463743072
+
+

Converting the hex to ascii we get: peaCTF{f4ct0r

+

auth_channel.txt🔗

+

The n value in the auth_channel.txt file had known factors

+

I attempted to use the same script with the data from the auth_channel.txt file but ended up getting garbage hex out. After looking at a BSidesSF 2018 CTF writeup I came across this section:

+
+

RSA can be used for encryption and decryption:

+
    +
  • Encrypt a text message m into ciphertext c: c = m^e mod n
  • +
  • Decrypt a ciphertext c: m = c^d mod n
  • +
+

It can also be used to produce and verify digital signatures:

+
    +
  • Produce a signature for a message m: s = m^d mod n
  • +
  • Verify a signature s, for m: m == s^e mod n
  • +
+
+

That gave me the idea to try verifying the signature instead of trying to decrypt the ciphertext. This script is very similar to the first one the only changes are the input and var result = c.ModPow(e, n); instead of var result = c.ModPow(d, n);

+
var p = new BigInteger("192355607880290234740980693973");
+var q = new BigInteger("311314068553039667905603427153");
+var e = new BigInteger("65537");
+var c = new BigInteger("23731413167627600089782741107678182917228038671345300608183");
+
+var n = p.Multiply(q);
+
+var one = new BigInteger("1");
+var phi = (p.Subtract(one).Multiply(q.Subtract(one)));
+
+var d = e.ModInverse(phi);
+d.Dump("d");
+
+var result = c.ModPow(e, n);
+result.Dump("Decoded");
+result.ToString(16).Dump("hex");
+
+

Output:

+
d: 42870301015457570297495318493842594795392515721010421474689
+Decoded: 911845841250251271805
+hex: 316e67317366756e7d
+
+

Converting the hex to ascii we get: 1ng1sfun}

+

The final flag is peaCTF{f4ct0r1ng1sfun}

+

Song of My People🔗

+

A specific soundcloud rapper needs help getting into his password protected zipped file directory. The initial password is in the title. You just have to know your memes, and pick the right instrument! We were on the fence on giving you an image to go along with this puzzle, but the loincloth was too scandalous. Alternatively, you could bruteforce.

+

Solution🔗

+

The start of the challenge is a password protected zip file.

+

The challenge description lead me to The Song of My People! meme, which originates from an image of a Native American playing the violin. In the challenge description, it says "pick the right instrument", so the password ended up being violin.

+

The contents of the zip file were:

+
    +
  • +

    a lengthy issue.png

    +
      +
    • This is a broken PNG image
    • +
    +
  • +
  • +

    Ice Cube - Check Yo Self Remix (Clean).mp3

    +
      +
    • You better check yo self before you wreck yo self
    • +
    +
  • +
  • +

    README.txt

    +
  • +
+
one of the three files is a red herring, but a helpful one at that.
+does any of this ADD up? This is a LONG problem.
+
+

a lengthy issue.png🔗

+

Running pngcheck on the broken png file:

+
File: a lengthy issue.png (44525 bytes)
+  chunk IHDR at offset 0x0000c, length 13
+    1280 x 720 image, 8-bit palette, interlaced
+  chunk sRGB at offset 0x00025, length 1
+    rendering intent = perceptual
+  chunk gAMA at offset 0x00032, length 4: 0.45455
+  chunk PLTE at offset 0x00042, length 1212501072:  invalid number of entries (4.04167+08)
+
+

Opening a lengthy issue.png in HxD and finding the PLTE chunk:

+
+ + Hex output with PLTE highlighted + + +
+

Looking at the libpng spec and a similar writeup. I figured out that the HELP text before the PLTE was the 4-byte length for the PLTE chunk.

+

Using the HxD data inspector I edited these 4 bytes to be the value of 453 in big-endian. The value for the PLTE header was the number of bytes between the end of PLTE and the beginning of the CRC for PLTE. The length also must be divisible by 3 for the PLTE chunk.

+
+ + Hex output with the 4 bytes before PLTE highlighted + + +
+

The fixed image:

+
+ + {(howmany)_thousand_spaces, or seats, were left at the most recent concert of [redacted]? + _(page number)} of the concert archive + + +
+

Image hex🔗

+

The hex in the image:

+
54 68 65 20 4c 69 62 72 61 72 79 20 6f 66 20 42 61 62 65 6c 3a 0a 28 77 69 74 68 20 6e
+65 77 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 61 6c 6c 20 74 68 65 20 70 6f 73 73 69 62 6c
+65 20 64 69 73 73 20 74 72 61 63 6b 73 20 74 6f 20 65 76 65 72 20 62 65 20 6d 61 64 65
+20 61 6e 64 20 65 76 65 72 20 63 6f 75 6c 64 20 62 65 20 6d 61 64 65 29
+
+

Decoding this to ascii results in:

+
+

The Library of Babel: (with new addition of all the possible diss tracks to ever be made and ever could be made)

+
+

Soundcloud🔗

+

Link to soundcloud

+

Soundcloud description:

+
+

this concert is part of a larger tour that is archived completely in some kind of hexagonal library. The archive is named between "maybe" and a "repeat". Should be on the 371st page.

+

I would give you an mp3 of this audio, but I don't know how to navigate those sketchy websites.

+
+

The soundcloud "song" sounded like Morse code, after downloading the mp3 I discovered a Morse code audio decoder.

+

The decoded text:

+
+

SUP YALL ITS YA BOI LIL ICE CUBE MELTING OUT HERE IN THE HAWAII HEAT FOR ALL OF YOU. YOU GUESSED IT THIS IS LIVE AUDIO FROM MY WORLD TOUR. I REPEAT LIL ICE CUBES WORLD TOUR MAYBE A LIBRARY WILL HELP

+
+

Library of Babel🔗

+

With the hint of Library of Babel I tried inputting the hex from the image as the Hex Name but that ended up being a dead end. I tried using the search for lil ice cubes world tour:

+
exact match:
+Title: weif.rfgkd,zvjxxd Page: 371
+Location: 2nhptm68h2sputfsdlbmi75s6qcfgu...-w2-s4-v08
+
+

Nice! The page number matches the soundcloud description.

+

I downloaded the book and counted the number of spaces in the book (48558), and tried the flag {48_thousand_spaces_371} but it was incorrect. The image said thousand_spaces or seats, so I searched how many times the word seat appears in book (3).

+

The final flag was {3_thousand_spaces_371}

+ +
+ + + +
+ + + + + + +
+
+ + + + + + + + diff --git a/posts/ctf-peactf-2019/song_issue.png b/posts/ctf-peactf-2019/song_issue.png new file mode 100644 index 0000000..0e8ed00 Binary files /dev/null and b/posts/ctf-peactf-2019/song_issue.png differ diff --git a/posts/ctf-peactf-2019/song_issue_hxd.png b/posts/ctf-peactf-2019/song_issue_hxd.png new file mode 100644 index 0000000..4d2b6af Binary files /dev/null and b/posts/ctf-peactf-2019/song_issue_hxd.png differ diff --git a/posts/ctf-peactf-2019/song_issue_hxd_fixed.png b/posts/ctf-peactf-2019/song_issue_hxd_fixed.png new file mode 100644 index 0000000..912b4dc Binary files /dev/null and b/posts/ctf-peactf-2019/song_issue_hxd_fixed.png differ diff --git a/posts/elf-shared-library-version/index.html b/posts/elf-shared-library-version/index.html new file mode 100644 index 0000000..001007d --- /dev/null +++ b/posts/elf-shared-library-version/index.html @@ -0,0 +1,207 @@ + + + + + + + + + + Embedding Version Info into ELF Shared Libraries - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+
+

Embedding Version Info into ELF Shared Libraries

+ +
+ +
+ + + +
+ +
+

How to embed version information into an ELF shared library?

+

Here are the methods I have used for embedding version information.

+ +

These methods are for embedding a version into libraries distributed outside of a package. Packages have their own version information, so we don't need to embed one in the library.

+

What about the ABI version?🔗

+

ABI version can be separate from your product/release version. If you haven't changed the ABI interface, you can keep the same ABI version while updating the product/release version on new builds. There are some great resources, policy, and tools for how to handle ABI versioning.

+
+ + + +

Symbol versioning is another way to handle ABI changes without changing the ABI version, this blog post is all about symbol versioning.

+
+
+

Ways of embedding version information🔗

+

Okay, so you want to embed a version in your ELF shared libraries. How should you do it?

+

SCCS String🔗

+

Probably the easiest to add, this method uses the Source Code Control System @(#) convention to embed the version.

+
#define VERSION "1.2.3"
+
+static char sccsid[] __attribute__((used)) = "@(#)Version " VERSION;
+
+

Then the version can be retrieved via what(1) or strings libfoo.so | grep "@(#)"

+
$ strings libfoo.so | grep "@(#)"
+@(#)Version 1.2.3
+
+

This is human-readable but slow since it has to look at all the strings in the binary. If you want to get the version programmatically, we have another method.

+

ELF Note Header🔗

+

This method creates an ELF note header by defining a note struct with the descriptor field. Then uses __attribute__((used, section(...), aligned(4))) to tell the compiler to add the ELF header.

+
#include <elf.h>
+
+#define VERSION "1.2.3"
+#define NOTE_SECTION ".note.foo.version"
+
+//Elf64_Nhdr + desc
+struct version_note {
+    Elf64_Word	namesz;
+    Elf64_Word	descsz;
+    Elf64_Word	type;
+    char    desc[sizeof(VERSION)];
+};
+
+__attribute__((used, section(NOTE_SECTION), aligned(4)))
+static const struct version_note version = {
+    .namesz = 0,
+    .descsz = sizeof(VERSION),
+    .type = NT_VERSION,
+    .desc = VERSION
+};
+
+
+

Note sections contain a series of notes. Each note is followed by the name field (whose length is defined in namesz) then by the descriptor field (whose length is defined in descsz) and whose starting address has a 4 byte alignment. Neither field is defined in the note struct due to their arbitrary lengths.

+
+
+ + + +

More details in the elf manpage under the Notes (Nhdr) section.

+
+
+

Then readelf -Wn or an ELF parsing library can read the version header.

+
$ readelf -Wn libfoo.so
+Displaying notes found in: .note.foo.version
+  Owner                 Data size       Description
+  (NONE)               0x00000006       NT_VERSION (version)       description data: 31 2e 32 2e 33 00
+
+

The downside is the output is in hex when using readelf, unlike the human-readable format of SCCS above. But this method is faster since it's only reading the ELF headers rather than the whole binary.

+

Can executables use these methods?🔗

+

Yup, if you need to provide a version without executing. But the more intuitive solution is to have a --version argument.

+ +
+ + + +
+ + + + + + +
+
+ + + + + + + + diff --git a/posts/floating-point-hell/index.html b/posts/floating-point-hell/index.html new file mode 100644 index 0000000..c57ac73 --- /dev/null +++ b/posts/floating-point-hell/index.html @@ -0,0 +1,179 @@ + + + + + + + + + + Floating Point Hell - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+
+

Floating Point Hell

+ +
+ +
+

This blog post will show how to deal with floating-point error in JavaScript by encoding all uint64's, and int64's as strings in JSON Marshaling.

+ +

JavaScript has 53-bits of integer precision, this is a problem when trying to represent a 64-bit number. Ways of solving this in JavaScript is to use bigint or math.js, but when parsing JSON we can't use this.

+
+

When it goes wrong🔗

+

This is an example of how it can go wrong. Go encodes the JSON correctly, but when parsed by JavaScript the number does not match.

+

Go🔗

+

Base data structure

+
type LargeId uint64
+
+type Data struct {
+    Id      LargeId
+    BigNum int64
+}
+
+

Encode and Decode data

+
data := Data{Id: 12345678901234567892, BigNum: 12000000000002539}
+output, _ := json.Marshal(data)
+fmt.Println("Data -> Json", string(output))
+input := string(output)
+output2 := Data{}
+json.Unmarshal([]byte(input), &output2)
+fmt.Printf("Json -> Data %+v\n", output2)
+
+//Output
+Data -> Json {"Id":12345678901234567892,"BigNum":12000000000002539}
+Json -> Data {Id:12345678901234567892 BigNum:12000000000002539}
+
+

As you can see Go has no problem encoding and decoding the large integers. But let's see what happens when JavaScript tries to decode the same integers.

+

JavaScript🔗

+
var data = '{"Id":12345678901234567892,"BigNum":12000000000002539}'
+console.log(JSON.parse(data))
+
+//Output
+Object {Id: 12345678901234567000, BigNum: 12000000000002540}
+
+

JavaScript ended up decoding the number, but its wrong. But if we check for equivalence in JavaScript it returns true.

+
> 12000000000002539 === 12000000000002540
+true
+
+
+

How to fix it🔗

+

The easiest way to fix this is to encode the int64 to a string, that way when parsed in JavaScript the number is represented correctly.

+

Below I have added json:",string" tag to the end of every int64, this tells the encoding/json package to encode that field as a string instead of an integer.

+

Go🔗

+

Base data structure with tags

+
type LargeId uint64
+
+type Data struct {
+    Id      LargeId `json:",string"`
+    BigNum int64  `json:",string"`
+}
+
+

Encode and Decode data

+
data := Data{Id: 12345678901234567892, BigNum: 12000000000002539}
+output, _ := json.Marshal(data)
+fmt.Println("Data -> Json", string(output))
+input := string(output)
+output2 := Data{}
+json.Unmarshal([]byte(input), &output2)
+fmt.Printf("Json -> Data %+v\n", output2)
+
+//Output
+Data -> Json {"Id":"12345678901234567892","BigNum":"12000000000002539"}
+Json -> Data {Id:12345678901234567892 BigNum:12000000000002539}
+
+

With the tag we can encode and decode the JSON and keep the int64 type in Go.

+

JavaScript🔗

+
var data = '{"Id":"12345678901234567892","BigNum":"12000000000002539"}'
+console.log(JSON.parse(data))
+
+//Output
+Object {Id: "12345678901234567892", BigNum: "12000000000002539"}
+
+

Now the number is represented correctly in JavaScript. This is useful if you are using the number as an identifier, but makes it difficult to do arithmetic operations on the number.

+ +
+ + + +
+ + + + + + +
+
+ + + + + + + + diff --git a/posts/home-assistant-dashboard-tablet/index.html b/posts/home-assistant-dashboard-tablet/index.html new file mode 100644 index 0000000..22664fb --- /dev/null +++ b/posts/home-assistant-dashboard-tablet/index.html @@ -0,0 +1,397 @@ + + + + + + + + + + Home Assistant - Linux tablet dashboard and voice assistant - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+
+

Home Assistant - Linux tablet dashboard and voice assistant

+ +
+ + + +
+

Turning an Intel Atom based Lenovo Tablet 10 (20E4) into a Home Assistant dashboard and voice assistant. Most tutorials for dashboard displays are using Android tablets, but I had this old tablet laying around and figured out how to use it with Home Assistant.

+
+ + Lenovo tablet with home assistant dashboard + + +
+

Home Assistant setup🔗

+

In the Home Assistant UI:

+
    +
  • Create a kiosk user that can only login from the local network
  • +
  • Create an Assist voice assistant, Settings -> Voice Assistants -> Add Assistant
  • +
+

Picking a Linux distro🔗

+

I wanted a Linux distro that ran well on the low-powered Atom processor while having a good touch interface.

+
    +
  • Ubuntu 24.04 +
      +
    • Performance: Gnome ran poorly, this would possibly be improved by gnome-tweaks and disabling animations.
    • +
    • Keyboard: Gnome on-screen keyboard would popup but wouldn't accept input.
    • +
    • Touch: Gnome has a good tablet mode with display scaling.
    • +
    +
  • +
  • Fedora Workstation 40 +
      +
    • Performance: Same Gnome performance issues as Ubuntu.
    • +
    • Keyboard: Gnome on-screen keyboard worked but had an odd quirk where the shift key acted like caps lock.
    • +
    • Touch: Same as Ubuntu
    • +
    +
  • +
  • Lubuntu/Kubuntu 24.04 +
      +
    • Performance: LXQt and KDE Plasma 5 both were lighter than Gnome and ran well.
    • +
    • Keyboard: Onboard keyboard crashes. Florence isn't in the package repos. Maliit keyboard seems to only work under Wayland (which is current not the default).
    • +
    • Touch: Touch worked but the mouse pointer was visible.
    • +
    +
  • +
  • KDE Neon +
      +
    • Performance: KDE Plasma 6 ran well but had some missing icons.
    • +
    • Keyboard: I had to manually set the virtual keyboard to Maliit keyboard but then worked well.
    • +
    • Touch: KDE Plasma 6 has a tablet mode making icons larger, display scaling settings and the mouse pointer is not visible.
    • +
    +
  • +
  • Fedora Spin KDE Desktop 40 +
      +
    • Performance: KDE Plasma 6 ran well and was not missing icons.
    • +
    • Keyboard: Defaulted to the Maliit keyboard.
    • +
    • Touch: Same as KDE Neon.
    • +
    +
  • +
+

KDE Plasma 6 with the Maliit keyboard gave me the best tablet mode and on-screen keyboard. The difference between KDE Neon and Fedora Spin KDE Desktop was that the Fedora Spin version does not use the bleeding edge version of the KDE apps. (KDE Neon is also based on Ubuntu LTS and Fedora Spin KDE Desktop is based on Fedora)

+

Alternative on-screen keyboards🔗

+ +

Installing Linux🔗

+
    +
  1. Shutdown the tablet
  2. +
  3. Power on the tablet and hold the volume-up button until the ThinkPad Tablet Setup app starts
  4. +
  5. Plug-in Linux USB drive
  6. +
  7. Reorder USB to be the first boot device
  8. +
  9. Reboot
  10. +
+
+ + + +

When installing you might want leave the Recovery Partition. I removed it and the ThinkPad Tablet Setup broke.

+
+
+

After installation🔗

+

These are the changes I made to make it function as a kiosk:

+
    +
  • Make a kiosk user and login as kiosk
  • +
  • Setup Firefox +
      +
    • Set homepage to http://homeassistant.local:8123
    • +
    • Add autofullscreen Extension to auto-fullscreen on startup.
    • +
    • Disable resuming on crash about:config -> browser.sessionstore.resume_from_crash -> false
    • +
    +
  • +
  • Setup KDE to start Firefox on login +
      +
    • Settings -> Autostart -> Add -> Firefox
    • +
    +
  • +
  • Tweak screen sleep time +
      +
    • Settings -> Energy Saving
    • +
    +
  • +
  • Disable screen locking +
      +
    • Settings -> Screen Locking
    • +
    +
  • +
  • Disable animations +
      +
    • Quick Settings -> Animation Speed: Instant
    • +
    +
  • +
  • Set hostname +
      +
    • sudo hostnamectl set-hostname --static <new-name>
    • +
    +
  • +
  • Enable SSH (optional)
  • +
+

Tablet voice assistant setup🔗

+

Test MIC and playback🔗

+
$ arecord -r 16000 -c 1 -f S16_LE -t wav -d 5 test.wav
+$ aplay -r 22050 -c 1 -f S16_LE -t wav test.wav
+
+

Install Python 3.11🔗

+

Python 3.12 is currently not supported by tflight-runtime

+
# yum install git python3.11
+
+

Setup wyoming-openwakeword🔗

+

wyoming-openwakeword allows us to use local wake word detection rather than Home Assistant's wake word detection.

+

Clone and setup python venv🔗

+
$ git clone https://github.com/rhasspy/wyoming-openwakeword.git /opt/ha-assist/wyoming-openwakeword
+$ cd /opt/ha-assist/wyoming-openwakeword
+$ python3.11 script/setup
+
+

Setup wyoming-openwakeword systemd service🔗

+
    +
  • Replace ok_nabu with whichever wake word model you want
  • +
+

See wyoming-openwakeword docs for more information.

+
# systemctl edit --force --full wyoming-openwakeword.service
+
+
[Unit]
+Description=Wyoming openWakeWord
+
+[Service]
+Type=simple
+User=kiosk
+Group=kiosk
+ExecStart=python3.11 script/run --uri 'tcp://127.0.0.1:10400' --preload-model 'ok_nabu'
+WorkingDirectory=/opt/ha-assist/wyoming-openwakeword
+Restart=always
+RestartSec=1
+
+[Install]
+WantedBy=default.target
+
+

Enable and start wyoming-openwakeword service🔗

+
# systemctl daemon-reload
+# systemctl enable wyoming-openwakeword.service
+# systemctl start wyoming-openwakeword.service
+
+

Setup wyoming-satellite🔗

+

wyoming-satellite communicates with Home Assistant using the wyoming protocol.

+

Clone and setup python venv and install webrtc-noise-gain🔗

+
$ git clone https://github.com/rhasspy/wyoming-satellite.git /opt/ha-assist/wyoming-satellite
+$ cd /opt/ha-assist/wyoming-satellite
+$ python3.11 script/setup
+$ .venv/bin/pip3 install 'webrtc-noise-gain==1.2.3'
+
+

Setup wyoming-satellite systemd service🔗

+
    +
  • Replace ok_nabu with whichever wake word model you picked.
  • +
  • Change ha-kiosk to the name you want to see in Home Assistant.
  • +
  • Change the /run/user/<uid> uid to match your kiosk user, setting XDG_RUNTIME_DIR is required for arecord and aplay to work when run from a systemd service. (Otherwise you will get a error: arecord: main:850: audio open error: Host is down)
  • +
+

See wyoming-satellite docs for additional settings.

+
# systemctl edit --force --full wyoming-satellite.service
+
+
[Unit]
+Description=Wyoming Satellite
+Wants=network-online.target
+After=network-online.target
+Requires=wyoming-openwakeword.service
+
+[Service]
+Type=simple
+User=kiosk
+Group=kiosk
+Environment=XDG_RUNTIME_DIR=/run/user/1001
+ExecStart=python3.11 script/run --name 'ha-kiosk' --wake-word-name 'ok_nabu' --awake-wav "/opt/ha-assist/sounds/awake.wav" --mic-no-mute-during-awake-wav --mic-auto-gain 5 --mic-noise-suppression 2 --uri 'tcp://0.0.0.0:10700' --mic-command 'arecord -r 16000 -c 1 -f S16_LE -t raw' --snd-command 'aplay -r 22050 -c 1 -f S16_LE -t raw' --wake-uri 'tcp://127.0.0.1:10400'
+WorkingDirectory=/opt/ha-assist/wyoming-satellite
+Restart=always
+RestartSec=1
+
+[Install]
+WantedBy=default.target
+
+

Enable and start wyoming-satellite service🔗

+
# systemctl daemon-reload
+# systemctl enable wyoming-satellite.service
+# systemctl start wyoming-satellite.service
+
+

Additional settings I used🔗

+
    +
  • --mic-no-mute-during-awake-wav - Keeps the mic enabled when playing the wake word detection sound.
  • +
  • --awake-wav "/opt/ha-assist/sounds/awake.wav"- Plays the /opt/ha-assist/sounds/awake.wav wav file when the wake word is detected.
  • +
  • --mic-auto-gain 5 --mic-noise-suppression 2 - Settings for webrtc-noise-gain to reduce noise and boost gain.
  • +
+

Setup wake word detection sound (optional)🔗

+

Save the sound you want to play when the wake word is detected as /opt/ha-assist/sounds/awake.wav

+

Check wyoming-satellite and wyoming-openwakeword are working🔗

+
    +
  • systemctl status wyoming-satellite.service wyoming-openwakeword.service
  • +
  • Test your wake word with "ok nabu. What is the weather?"
  • +
  • --debug can be added to both wyoming-satellite and wyoming-openwakeword for additional logging.
  • +
+

Additional Home Assistant integrations🔗

+

These are some integrations that further augment the tablet:

+ + +
+ + + +
+ + + + + + +
+
+ + + + + + + + diff --git a/posts/home-assistant-dashboard-tablet/tablet.png b/posts/home-assistant-dashboard-tablet/tablet.png new file mode 100644 index 0000000..8b10d0c Binary files /dev/null and b/posts/home-assistant-dashboard-tablet/tablet.png differ diff --git a/posts/home-assistant-dashboard-tablet/tablet_small.png b/posts/home-assistant-dashboard-tablet/tablet_small.png new file mode 100644 index 0000000..c7d151f Binary files /dev/null and b/posts/home-assistant-dashboard-tablet/tablet_small.png differ diff --git a/posts/homelab-adventure-part-1/index.html b/posts/homelab-adventure-part-1/index.html new file mode 100644 index 0000000..514fd7c --- /dev/null +++ b/posts/homelab-adventure-part-1/index.html @@ -0,0 +1,252 @@ + + + + + + + + + + Homelab Adventure - Part 1: The Adventure Begins - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+
+

Homelab Adventure - Part 1: The Adventure Begins

+ +
+ +
+ + + +
+ +
+

Welcome to my journey in building my homelab. This will be an ongoing series of blog posts of my adventures in building my personal infrastructure.

+ +

Part 1: The Adventure Begins (You are here!)
+Part 2: Configuration Management
+Part 3: Internal Network

+

What is a Homelab🔗

+

The primary idea behind a homelab is a place to learn about infrastructure, servers and development.

+

/r/homelab defines a homelab as:

+
+

Homelab [hom-læb](n): a laboratory of (usually slightly outdated) awesome in the domicile

+
+

Now by this definition a homelab should reside in a home. In my case part of my homelab will exist outside of my home, due to space and noise constraints. So my homelab is somewhere between a homelab and a "cloudlab".

+

The /r/homelab wiki has a more information on how to get started with a homelab.

+

Inventory🔗

+

At the time of writing here is my current inventory of servers. It will most likely grow and evolve as time goes on.

+
    +
  • 1 VPS +
      +
    • CPU: 2 Cores
    • +
    • RAM: 2GB
    • +
    • Disk: 40GB SSD
    • +
    +
  • +
  • 1 NAS +
      +
    • CPU: Intel i5-6600K
    • +
    • RAM: 32GB
    • +
    • Disk: 2x 250GB SSD, 4x 12TB HDD
    • +
    +
  • +
  • 2 Dedicated Servers +
      +
    • Dedicated Server 1 +
        +
      • CPU: Intel
      • +
      • RAM: 32GB
      • +
      • Disk: 2x 1TB HDD
      • +
      +
    • +
    • Dedicated Server 2 +
        +
      • CPU: Intel
      • +
      • RAM: 32GB
      • +
      • Disk: 2x 3TB HDD
      • +
      +
    • +
    +
  • +
+

Goals🔗

+
    +
  • Ability to host applications easily, there is a lot of good self hosted software out there.
  • +
  • Keep ongoing maintenance to a minimum.
  • +
  • Automatic encrypted backups, because RAID is not a backup
  • +
  • Ability to easily add and remove servers.
  • +
  • An internal network between servers, some of my servers exist outside of my home network.
  • +
  • Alerting and Monitoring, so I know when servers go down, failing drives, backups didn't run, etc.
  • +
+

The Plan🔗

+

These are the tools/software I decided on to meet each of the above goals.

+

Hosting Applications🔗

+
    +
  • Docker for hosting most applications and allows me to move services around.
  • +
  • Portainer for managing the docker containers on specific servers.
  • +
  • Salt for everything else that doesn't fit into a container.
  • +
  • Traefik provides routing and certificates for services.
  • +
+

Minimizing Ongoing Maintenance🔗

+ +

Automatic Backups🔗

+
    +
  • restic for backups, including deduplication and encryption.
  • +
  • Backblaze B2 for offsite storage of backups.
  • +
+

Adding and Removing Servers🔗

+
    +
  • Salt allows me to have a declarative configuration for servers.
  • +
  • netboot.xyz simplifies installs with PXE booting.
  • +
  • DNS for servers and services to ease container movement. This will be configured automatically or through dnscontrol.
  • +
+

Internal Network🔗

+
    +
  • Zerotier is for my internal network. It's not decentralized like tinc but has some trade offs that make it easier to use, you can read more about it here.
  • +
+

Alerting and Monitoring🔗

+
    +
  • netdata will be used for metrics and basic alerting.
  • +
  • uptime-kuma will be used for custom monitoring/alerting.
  • +
+

Here we go!🔗

+

I hope you will join me in this adventure into homelabbing. In the next post in the series we will cover configuration management.

+

Part 1: The Adventure Begins (You are here!)
+Part 2: Configuration Management
+Part 3: Internal Network

+ +
+ + + +
+ + + + + + +
+
+ + + + + + + + diff --git a/posts/homelab-adventure-part-2/index.html b/posts/homelab-adventure-part-2/index.html new file mode 100644 index 0000000..04a744a --- /dev/null +++ b/posts/homelab-adventure-part-2/index.html @@ -0,0 +1,316 @@ + + + + + + + + + + Homelab Adventure - Part 2: Configuration Management - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+
+

Homelab Adventure - Part 2: Configuration Management

+ +
+ +
+ + +
+ +
+
+ +
+

Welcome to my journey in building my homelab. This is part of a multipart series, in the last part I gave an overview of the homelab plan. This one will cover how I handle configuration management.

+ +

Part 1: The Adventure Begins
+Part 2: Configuration Management (You are here!)
+Part 3: Internal Network

+
+ + + +

Since this blog post was written I have switched from Salt to Ansible.

+
+
+

What is Salt🔗

+
+

Salt is a configuration management and orchestration tool.

+
+

What this means is it allows me to declare a "state" that the infrastructure should be in. It also allows me to run commands/modules across the infrastructure. Some alternatives to Salt are Ansible, Chef, Puppet.

+

How I am using Salt🔗

+

Salt is the base of my infrastructure, once a server is installed Salt then provisions the rest it.

+

The idea is anything not in docker is configured by Salt. That way when a server needs to be reinstalled or added, I know configuration isn't missing due to manual changes.

+

Folder Structure🔗

+

This is a view of my Salt configuration git repo, some files/directories are missing from this view for the sake of readability. It is useful to see an example of how other people have laid out their Salt configuration when setting up your own.

+
salt
+├── _modules
+│   └── zerotier.py
+├── _states
+│   └── zerotier.py
+├── app
+│   ├── at
+│   ├── btrfs
+│   ├── docker
+│   ├── fail2ban
+│   ├── ntp
+│   ├── nullmailer
+│   ├── powerpanel
+│   ├── restic
+│   ├── smart
+│   └── zerotier
+├── config
+│   ├── apt
+│   ├── salt-minion
+│   ├── ssh
+│   ├── timezone
+│   └── users
+├── container
+│   ├── portainer
+│   ├── portainer-agent
+│   ├── salt-master
+│   ├── traefik
+│   └── watchtower
+├── trait
+│   ├── backup.sls
+│   ├── battery-backup.sls
+│   ├── btrfs.sls
+│   ├── docker-extra.sls
+│   ├── docker-master.sls
+│   ├── docker-proxy.sls
+│   ├── docker.sls
+│   ├── internal-network.sls
+│   ├── mailer.sls
+│   └── salt-master.sls
+├── default-packages.sls
+└── top.sls
+pillar
+├── app
+│   ├── docker
+│   ├── restic
+│   ├── nullmailer.sls
+│   ├── portainer.sls
+│   ├── traefik.sls
+│   └── zerotier.sls
+├── config
+│   ├── network.sls
+│   └── users.sls
+├── default-schedule.sls
+└── top.sls
+
+

Salt🔗

+
_module/_states🔗
+

These are custom modules and states that are synced to minions. I will cover the custom zerotier module/state in another blog post.

+
App🔗
+

These are states that require the installation of a package. The configuration of the application also lives here.

+
Config🔗
+

These are states that are pure configuration and nothing new is installed.

+
Container🔗
+

These are docker containers that are either going to be on every server (watchtower) or are required to bootstrap other containers (portainer).

+
Trait🔗
+

Salt has many ways for targeting states to a machine in the top.sls file. The top.sls file is what Salt looks at when you run highstate for what states should be applied to a minion.

+

The Salt community has this idea of using grains to apply roles to a server called Role-based infrastructure. This works if the server has a specific role like database or webserver.

+

Traits are a similar idea but are more targeted at what you need on the server and are more fine-grained than database or webserver.

+

This setup allows me to have a very small initial highstate and then apply traits as I need them for specific servers.

+
default-packages.sls🔗
+

This is a list of helpful packages that are installed by default on all minions.

+
install-default-packages:
+  pkg.installed:
+    - pkgs:
+      - rsync
+      - curl
+      - vim
+      - htop
+      - iotop
+      - git
+      - ncdu
+      - openssh-client
+      - ncurses-term # for putty profiles
+      - traceroute
+      - jq
+      - virt-what # for salt virtual grains
+      - net-tools # ifconfig/route
+
+
top.sls🔗
+

This is the file looked at when highstate is run. As you can see I have a very simple base that gets installed by default and then everything else is defined by traits.

+
base:
+  '*':
+    - default-packages
+    - config.users
+    - config.timezone
+    - config.salt-minion
+    - config.ssh
+    - config.apt
+    - app.at
+    - app.ntp
+    - app.fail2ban
+
+{% set traits = salt['grains.get']('traits', []) %}
+{% for trait in traits %}
+  'traits:{{ trait }}':
+    - match: grain
+    - trait.{{ trait }}
+{% endfor %}
+
+

Pillar🔗

+

This is where the any machine specific configuration and sensitive data lives.

+

I store both my Salt states and pillar data in the same git repository so I can test and update configurations. Any secrets in the pillars are PGP encrypted using Salt's gpg renderer. Salt supports many pillar sources and they can even be used in combination.

+
top.sls🔗
+

This is the pillar top file which defines what minions have access to specific pillar data.

+
base:
+  '*':
+    - default-schedule
+    - config.users
+    - config.network
+
+  'traits:internal-network':
+    - match: grain
+    - app.zerotier
+
+  'traits:mailer':
+    - match: grain
+    - app.nullmailer
+
+  'traits:backup':
+    - match: grain
+    - app.restic.base
+    - app.restic.{{ grains.id }}
+
+  'traits:docker-proxy':
+    - match: grain
+    - app.traefik
+
+  'traits:docker-extra':
+    - match: grain
+    - app.portainer
+
+  'traits:docker-master':
+    - match: grain
+    - app.portainer
+
+
+ + + +

Grains are controlled by the minion, so a server can access pillar data for other traits due to matching on grains.

+
+
+

Maximum Saltiness🔗

+

I hope this gave you a good view of how I use Salt to configure my servers. In the next part we will cover how to have an internal network over the internet.

+

Part 1: The Adventure Begins
+Part 2: Configuration Management (You are here!)
+Part 3: Internal Network

+ +
+ + + +
+ + + + + + +
+
+ + + + + + + + diff --git a/posts/homelab-adventure-part-3/index.html b/posts/homelab-adventure-part-3/index.html new file mode 100644 index 0000000..ea1a705 --- /dev/null +++ b/posts/homelab-adventure-part-3/index.html @@ -0,0 +1,159 @@ + + + + + + + + + + Homelab Adventure - Part 3: Internal Network - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+
+

Homelab Adventure - Part 3: Internal Network

+ +
+ +
+ + +
+ +
+
+ +
+

Welcome to my journey in building my homelab. This is part of a multipart series, in the last part I gave an overview of how to do configuration management. This one will cover how I set up my internal network.

+ +

Part 1: The Adventure Begins
+Part 2: Configuration Management
+Part 3: Internal Network (You are here!)

+

Why?🔗

+

It's helpful to have an internal and external network for your homelab. This allows hosting of internal services without exposing them to the internet.

+

Since my homelab lives in multiple datacenters (and at home), it's less convenient to use a site-to-site VPN. So a peer-to-peer VPN between all my servers is ideal. This also makes it easy for me to add non-servers to the network like my phone or desktop to access those internal services.

+

What is ZeroTier🔗

+
+

ZeroTier is a distributed network hypervisor built atop a cryptographically secure global peer to peer network. It provides advanced network virtualization and management capabilities on par with an enterprise SDN switch, but across both local and wide area networks and connecting almost any kind of app or device.

+
+

This means ZeroTier is "mostly" a peer-to-peer VPN, what I mean by "mostly" is that it still uses a "centralized" network controller (you can host your own if you want). The bulk of the traffic is peer-to-peer, and the network controller is only for the initial routing. This has some trade-offs with something that is entirely peer-to-peer.

+

Alternatives🔗

+

These are some other options for peer-to-peer VPNs:

+

tinc is one of the oldest peer-to-peer VPN's, but to set it up you have to share the generated public keys for each node with all the other nodes you want to connect.

+

Nebula (inspired by tinc) has similar issues to tinc with certificate distribution. One advantage over tinc is that a discovery server is present in the Nebula network to ease node discovery.

+

Tailscale while a great alternative to ZeroTier, it didn't exist at the time I set up ZeroTier. This is a great comparison between Tailscale and ZeroTier.

+

ZeroTier and Salt🔗

+

I have written a salt formula for managing ZeroTier with salt. It allows interacting with the local agent and the network controller's API.

+

https://github.com/gamingrobot/salt-formula-zerotier

+

Part 1: The Adventure Begins
+Part 2: Configuration Management
+Part 3: Internal Network (You are here!)

+ +
+ + + +
+ + + + + + +
+
+ + + + + + + + diff --git a/posts/homelab-switching-salt-to-ansible/index.html b/posts/homelab-switching-salt-to-ansible/index.html new file mode 100644 index 0000000..dacb008 --- /dev/null +++ b/posts/homelab-switching-salt-to-ansible/index.html @@ -0,0 +1,245 @@ + + + + + + + + + + Homelab Sidequest - Switching from Salt to Ansible - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+
+

Homelab Sidequest - Switching from Salt to Ansible

+ +
+ +
+ + + +
+ +
+

About a month ago I thought it would be nice to be able to configure VM's and Droplets with Salt by using my existing configuration I had setup in Part 2: Configuration Management.

+ +

I could have gone the normal route of installing the Salt minion and attaching it to the Salt master then running the highstate. But since these would be resource constrained machines I had concerns about the resource usage of the minion.

+

So I decided to try Salt SSH, which uses ssh to transfer a lightweight minion that executes the states and then exits. It would also allow me to to use Salt from my local machine instead of remoting into the server hosting the Salt master.

+

This worked great until I attempted to run it and hit this lovely bug where if you are using gpg-encrypted pillars the minion will attempt to decrypt them rather than decrypting locally and when rendering the state.

+

This wasn't the first time I had run into a nasty Salt bug, this bug caused watchtower to break and I had to rollback to a previous version.

+

Giving Ansible a try🔗

+

I read Jeff Geerling's Ansible for DevOps book, which gave a really good overview of Ansible and how I could map what I knew from Salt to Ansible. I also looked for blog posts of people migrating from Salt to Ansible, but almost all of them were company blogs talking about how they outgrew Ansible and migrated to Salt.

+

I ported some of my simpler states to Ansible to try and get a feel for how my Salt traits and states mapped to Ansible playbooks and roles.

+

These are the Ansible concepts explained in terms of Salt:

+
    +
  • Playbook +
      +
    • Ansible playbooks are the mapping between host and roles/tasks.
    • +
    • Salt's top file is also a mapping between hosts to states.
    • +
    +
  • +
  • Role +
      +
    • Ansible roles contain tasks, files, variables and handlers.
    • +
    • Salt formulas contain states, files and variables.
    • +
    +
  • +
  • Variables +
      +
    • Ansible has two types of vars group_varsand host_vars. group_vars are scoped to the group in the inventory while host_vars are scoped to a specific host.
    • +
    • Salt pillars contain the variables specific to a host. Pillars can contain gpg encrypted values for Ansible it encrypts the whole yaml via ansible-vault.
    • +
    +
  • +
  • Handlers +
      +
    • Ansible handlers are tasks but are triggered via notify, these most closely map to Salt Reactors. But are primarily used to achieve the same result that Salt's on_change does to have states that trigger off other states changing.
    • +
    +
  • +
  • Inventory +
      +
    • Ansible needs to know what hosts its going to be connecting to.
    • +
    • Salt's master keeps track of the connected minions and in Salt SSH it uses a roster.
    • +
    +
  • +
  • Galaxy +
      +
    • Ansible Galaxy is a repository of roles created by the community.
    • +
    • Salt's version of this is the saltstack-formulas repos.
    • +
    +
  • +
+

After porting 1000 lines of yaml🔗

+

After porting all my Salt states to Ansible there were a few things that tripped me up.

+

Salt allows for jinja templating inside state files, instead Ansible only allows jinja templating inside yaml values and template files. This affects how loops are done, in Salt they are handled with a jinja for loop, but in Ansible you use a loop and loop_control in the yaml.

+

Salt🔗

+
{% for name in salt['pillar.get']('certs', {}).keys() %}
+cert-{{ name }}:
+  file.managed:
+    - name: /opt/certs/{{ name }}.cert
+    - contents_pillar: certs:{{ name }}:cert
+{% endfor %}
+
+

Ansible🔗

+
- name: cert
+  ansible.builtin.copy:
+    dest: /opt/certs/{{ item.key }}.cert
+    content: "{{ item.value.cert }}"
+  loop: "{{ certs | dict2items }}"
+  loop_control:
+    label: "{{ item.key }}"
+
+

With Salt you can specify the source of a local file via salt://{{ tpldir }}. In Ansible when specifying a local file it will first look in a role's files folder.

+

Salt🔗

+
dynamic-config:
+  file.managed:
+    - name: /opt/config/dynamic.yaml
+    - source: salt://{{ tpldir }}/config/dynamic.yaml
+
+

Ansible🔗

+
- name: dynamic-config
+  ansible.builtin.template:
+    src: dynamic.yaml
+    dest: /opt/config/dynamic.yaml
+
+

Salt has targeting as part of the state.apply command, in Ansible you can limit the scope of the playbook by using --limit

+
$ salt 'testserver' state.apply
+$ ansible-playbook servers.yml --limit testserver
+
+

Living with Ansible for a few months🔗

+

Things I liked🔗

+

I really like that when you hit Ctrl+C during execution Ansible stops the playbook execution. This is nice when I have forgotten to make a change or something failed on one host but not another. With Salt you get a job id that you have to cancel manually or let it finish.

+

Because I am running Ansible locally, iteration time is quicker. In Salt I am committing then pushing my changes, pulling them down on the master and running highstate.

+

Documentation is considerably better for Ansible. The documentation pages include multiple examples for a module. Since many other homelabbers run Ansible there are many blog posts and examples on how to do something.

+

Ansible Vault is much easier to use than gpg encrypting pillar data. By default it encrypts entire files but you can encrypt specific values like Salt's gpg pillars.

+

Things I disliked🔗

+

The roles folder structure is verbose but only requires the folders you use.

+

The largest complaint I saw about Ansible was how slow it was compared to Salt. I saw speeds similar to Salt with this additional configuration:

+
[defaults]
+strategy = free # don't block on each host per task
+[ssh_connection]
+pipelining = True # reduce the number of network operations
+
+ +
+ + + +
+ + + + + + +
+
+ + + + + + + + diff --git a/posts/index.html b/posts/index.html new file mode 100644 index 0000000..6974d9f --- /dev/null +++ b/posts/index.html @@ -0,0 +1,165 @@ + + + + + + + + + + Posts - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+
+ + +
+
+ + + + +
+
+ + + + + + + + + diff --git a/posts/reaper-midi-unreal-engine/game-instance.png b/posts/reaper-midi-unreal-engine/game-instance.png new file mode 100644 index 0000000..66d972d Binary files /dev/null and b/posts/reaper-midi-unreal-engine/game-instance.png differ diff --git a/posts/reaper-midi-unreal-engine/index.html b/posts/reaper-midi-unreal-engine/index.html new file mode 100644 index 0000000..fef5541 --- /dev/null +++ b/posts/reaper-midi-unreal-engine/index.html @@ -0,0 +1,224 @@ + + + + + + + + + + Sending MIDI from Reaper to Unreal Engine - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+
+

Sending MIDI from Reaper to Unreal Engine

+ +
+ +
+

How to setup Reaper to send MIDI to Unreal Engine. If you are looking to use OSC instead, take a look at daw-out.

+

Setting up Reaper🔗

+
    +
  • +

    Install loopMIDI (This allows us to create a loopback MIDI device)

    +
  • +
  • +

    Add a new MIDI device in loopMIDI called unreal_port +

    + + loopMIDI with unreal_port added + + +
    +

    +
  • +
  • +

    Enable new MIDI output in Reaper via Options -> Preferences -> Audio -> MIDI Devices
    +

    + + + +

    Only enable the MIDI Output

    +
    +
    + +
    + + Reaper MIDI devices with unreal_port enabled + + +
    +

    +
  • +
  • +

    Setup MIDI output routing per track via: +

    + + Routing Matrix (View -> Routing Matrix) + + +
    + Routing Matrix (View -> Routing Matrix) +
    + +
    + +OR +
    + + Track routing settings (IO button on track) + + +
    + Track routing settings (IO button on track) +
    + +
    +

    +
  • +
+

Set each track to a separate MIDI channel, so each track number maps to its corresponding channel number.

+

Setting up Unreal Engine🔗

+

Based on this forum thread

+
    +
  • +

    Enable MIDI Device Support Plugin +

    + + Unreal Engine's MIDI Device Support plugin enabled + + +
    +

    +
  • +
  • +

    Import Midi Blueprints

    +
  • +
  • +

    Create Blueprint Interface with OnNoteAction and OffNoteAction functions called MidiListener

    +
  • +
  • +

    Set Game Instance Class via Edit -> Project Settings -> Maps & Modes -> Game Instance -> Game Instance Class +

    + + Unreal Engine's Game Instance Class set to MidiManager + + +
    +

    +
  • +
  • +

    Set MidiDeviceId in MidiManager to map to the output of unreal_port (You can find this out from the debug logs in the console)

    +
  • +
  • +

    Place MidiDebug in the scene to print note debug information to the console

    +
  • +
  • +

    Place TestListener in the scene and set MidiChannel to whichever track # in Reaper

    +
  • +
+

Test it out🔗

+

If you have added MIDI to the track, set the MidiInput number and MidiChannel number on the TestListener. Hit play in Unreal Engine and then Play in Reaper, the TestListener cube should respond to MIDI input.

+ +
+ + + +
+ + + + + + +
+
+ + + + + + + + diff --git a/posts/reaper-midi-unreal-engine/loopmidi.png b/posts/reaper-midi-unreal-engine/loopmidi.png new file mode 100644 index 0000000..e0f666d Binary files /dev/null and b/posts/reaper-midi-unreal-engine/loopmidi.png differ diff --git a/posts/reaper-midi-unreal-engine/midi-output.png b/posts/reaper-midi-unreal-engine/midi-output.png new file mode 100644 index 0000000..11c724f Binary files /dev/null and b/posts/reaper-midi-unreal-engine/midi-output.png differ diff --git a/posts/reaper-midi-unreal-engine/midi-plugin.png b/posts/reaper-midi-unreal-engine/midi-plugin.png new file mode 100644 index 0000000..4fa8f62 Binary files /dev/null and b/posts/reaper-midi-unreal-engine/midi-plugin.png differ diff --git a/posts/reaper-midi-unreal-engine/reaper-routematrix.png b/posts/reaper-midi-unreal-engine/reaper-routematrix.png new file mode 100644 index 0000000..a1c0741 Binary files /dev/null and b/posts/reaper-midi-unreal-engine/reaper-routematrix.png differ diff --git a/posts/reaper-midi-unreal-engine/reaper-routetrack.png b/posts/reaper-midi-unreal-engine/reaper-routetrack.png new file mode 100644 index 0000000..2404518 Binary files /dev/null and b/posts/reaper-midi-unreal-engine/reaper-routetrack.png differ diff --git a/posts/setup-qemu-for-arm-on-wheezy/index.html b/posts/setup-qemu-for-arm-on-wheezy/index.html new file mode 100644 index 0000000..c1c8fdd --- /dev/null +++ b/posts/setup-qemu-for-arm-on-wheezy/index.html @@ -0,0 +1,160 @@ + + + + + + + + + + Setup QEMU for ARM on Debian Wheezy - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+
+

Setup QEMU for ARM on Debian Wheezy

+ +
+ +
+

This is a quick little blog post for how to install QEMU for ARM on Debian 7.0 (Wheezy).

+

Installing Toolchains🔗

+

Edit /etc/apt/sources.list and add

+
deb http://emdebian.org/debian/ stable main
+deb http://ftp.us.debian.org/debian/ squeeze main
+
+

The squeeze repo is for the package libgmp3c2 that is unavailable on wheezy.

+

Install the emdebian public key

+
# apt-get install emdebian-archive-keyring
+# apt-get update
+
+

Install ARM toolchains

+
# apt-get install linux-libc-dev-armel-cross libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi gcc-4.4-arm-linux-gnueabi g++-4.4-arm-linux-gnueabi
+
+

Installing QEMU🔗

+

Install QEMU

+
# apt-get install qemu qemu-user-static
+
+

Optional: Install QEMU GUI

+
# apt-get install aqemu
+
+

Hello ARM🔗

+

Time to test everything is working.

+

helloarm.s

+
.text
+.globl _start
+_start:
+        mov   r0, #5         @ Load register r0 with the value 5
+        mov   r1, #4         @ Load register r1 with the value 4
+        add   r2, r1, r0     @ Add r0 and r1 and store in r2
+
+stop:   b stop               @ Infinite loop to stop execution
+
+

Assemble, Link, Build

+
$ arm-linux-gnueabi-as -o helloarm.o helloarm.s
+$ arm-linux-gnueabi-ld -o helloarm.elf helloarm.o
+$ arm-linux-gnueabi-objcopy -O binary helloarm.elf helloarm.bin
+
+

Setup flash.bin

+
$ dd if=/dev/zero of=flash.bin bs=4096 count=4096
+$ dd if=helloarm.bin of=flash.bin bs=4096 conv=notrunc
+
+

Launch QEMU

+
$ qemu-system-arm -M connex -pflash flash.bin -nographic -serial /dev/null
+
+

There should now be a (qemu) prompt, type info registers and should see something like this

+
R00=00000005 R01=00000004 R02=00000009 R03=00000000
+R04=00000000 R05=00000000 R06=00000000 R07=00000000
+R08=00000000 R09=00000000 R10=00000000 R11=00000000
+R12=00000000 R13=00000000 R14=00000000 R15=0000000c
+PSR=400001d3 -Z-- A svc32
+
+

R02=00000009 Register 2 has the value 9 in it so everything is working.

+ +
+ + + +
+ + + + + + +
+
+ + + + + + + + diff --git a/print.css b/print.css new file mode 100644 index 0000000..3cf8238 --- /dev/null +++ b/print.css @@ -0,0 +1 @@ +@page{margin:1cm !important}body{font-size:1rem;line-height:1.3;background:#fff;color:#000}.content{margin:0 auto;width:100%;float:none;display:initial}.container{width:100%;float:none;display:initial;padding-left:1rem;padding-right:1rem;margin:0 auto}img{max-width:100%}blockquote,ul{margin:0}.topbar{display:none !important}.toc-wrapper{display:none !important}.navigation{display:none !important}.post__related{display:none !important}.gist-meta{display:none !important}#disqus_thread{display:none !important} \ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..e9b2d3a --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://doingstuff.dev/sitemap.xml diff --git a/search_index.en.json b/search_index.en.json new file mode 100644 index 0000000..4d33d89 --- /dev/null +++ b/search_index.en.json @@ -0,0 +1 @@ +{"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}},"0":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":2},"2":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}},"5":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1,"f":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}}}}},"a":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"x":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}},"c":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"5":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}},"1":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":6,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.7320508075688772}},"df":1}}}},"0":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":2,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1},"2":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.0}},"df":1}},"4":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}},"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}},"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}},"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"8":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}},"3":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":2},"4":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1,"1":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1}},"5":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1,",":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1}}}}}},"6":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}},"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"9":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1}},"7":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1},"8":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1},"9":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1},"=":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"1":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}},"2":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":7,"0":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":4.47213595499958}},"df":2,"1":{"docs":{},"df":0,"8":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"9":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":2}},"e":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1,"7":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}},"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}},"4":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1}},"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"g":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}},"8":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"9":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"e":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1},"g":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"h":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"h":{"docs":{},"df":0,"2":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"s":{"docs":{},"df":0,"6":{"docs":{},"df":0,"q":{"docs":{},"df":0,"c":{"docs":{},"df":0,"f":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.7320508075688772}},"df":1}},"3":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.7320508075688772}},"df":4,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1},"2":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"0":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1},"1":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1,"6":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"e":{"docs":{},"df":0,"7":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"2":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1,"g":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.7320508075688772}},"df":1}}},"3":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1},"7":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"a":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}},"4":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":3,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"+":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}},"4":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1}},"0":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":2,"g":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}},"2":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"5":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.0}},"df":1,",":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}},"3":{"docs":{},"df":0,",":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}},"4":{"docs":{},"df":0,",":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}},"5":{"docs":{},"df":0,",":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}},"6":{"docs":{},"df":0,",":{"docs":{},"df":0,"5":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}},"7":{"docs":{},"df":0,",":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}},"8":{"docs":{},"df":0,",":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}},"9":{"docs":{},"df":0,",":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}}},"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,",":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{},"df":0,",":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}},"2":{"docs":{},"df":0,",":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}},"3":{"docs":{},"df":0,",":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}},"4":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}},"c":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"x":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}},"5":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":3,"0":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1},"3":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":2,"(":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}},"4":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1,",":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1}}}}}},"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"6":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1,"0":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.7320508075688772}},"df":1},"1":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.8284271247461903}},"df":1},"2":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979}},"df":1},"3":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1},"4":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.6457513110645907},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":3},"5":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":3.605551275463989}},"df":1,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}},"6":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}},"8":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1},"9":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.449489742783178}},"df":1},"b":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"c":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979}},"df":1},"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1},"f":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.449489742783178}},"df":1}},"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"b":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979}},"df":1,"0":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"3":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979}},"df":1},"4":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979}},"df":1},"5":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"6":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1},"7":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1},"9":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"8":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1,"3":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1},"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.0}},"df":1}},"9":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"6":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}},"_":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"_":{"docs":{},"df":0,"(":{"docs":{},"df":0,"(":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}},"a":{"docs":{},"df":0,"9":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.0}},"df":1},"b":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":2.6457513110645907}},"df":1,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}},"v":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":2}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.449489742783178}},"df":1}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":5,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.7320508075688772}},"df":7,"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.8284271247461903},"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":2.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":3}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.7320508075688772}},"df":3}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"=":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3}}},"o":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.7320508075688772}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":7}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":4}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1,";":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":1}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":5.744562646538029}},"df":2,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":1}}},"p":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"2":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772}},"df":1,"c":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":2}}}},"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":2.23606797749979}},"df":2}},"q":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":2}}}},"e":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1}}}}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":3.3166247903554}},"df":1,"e":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.7320508075688772}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":2}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.872983346207417}},"df":1,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.449489742783178}},"df":1}}}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"'":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1},"p":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1},"k":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":3}}}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":3}}},"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":1,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1,"2":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1}}},"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.449489742783178}},"df":1,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":1}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":4},"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":4}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":5}}}}}},"g":{"docs":{},"df":0,"'":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.449489742783178}},"df":1,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":3}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":2}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}},"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":7}},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":3,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"y":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}},"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":1},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":5},"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":2}}}}},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":3}}}},"c":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":3.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":2,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"_":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"6":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1,"'":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1}}},"^":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":3}},"m":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}},"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.6457513110645907}},"df":1,"i":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979}},"df":1}}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":6},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":2}}}},"r":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.23606797749979}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":4}},"f":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.6457513110645907}},"df":1}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951}},"df":1,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":3}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.0}},"df":1}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1},"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":2,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":1}}},"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"y":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":3.7416573867739413},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.0}},"df":4}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":2}},"x":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.0}},"df":5}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":3,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"'":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}}}}}},"v":{"docs":{},"df":0,"=":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1},"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":2}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.7320508075688772}},"df":1}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1,"=":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3}}}},"p":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}},"c":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":4}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.7320508075688772}},"df":1}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1},"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"+":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":2}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":2}}}}}},"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"9":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1,"f":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}}}}}},"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":4.242640687119285},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":5,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":1}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}},"{":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}},"w":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"l":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}},"b":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":3}}},"c":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.449489742783178}},"df":3}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":2}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.7320508075688772}},"df":1}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.8284271247461903},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":3}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":2.6457513110645907},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":3,"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1,"[":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"w":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1}}}}}},"s":{"docs":{},"df":0,"z":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.7320508075688772}},"df":1}}},"k":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2}}}},"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.449489742783178}},"df":1}}}},"v":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":2.0}},"df":3}},"o":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"2":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1,"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":1}}}}}},"k":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.0}},"df":1},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":2}}}},"s":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":2}}}},"o":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://doingstuff.dev/":{"tf":1.0},"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":2,"c":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.6457513110645907}},"df":2,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":2}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}},"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}},"w":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":3},"m":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"y":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.449489742783178}},"df":1,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":5}},"s":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951}},"df":1}}}}},"d":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":4}}},"l":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":3.0}},"df":2,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"h":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.7320508075688772}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":2.0}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":2.0}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.7320508075688772}},"df":2}}},"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.8284271247461903}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.449489742783178}},"df":4}}}}},"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":2,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":2.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"=":{"docs":{},"df":0,"x":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"=":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":2}}}},"t":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":3}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":3}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"=":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":4}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4}},"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}},"f":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"4":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2,"2":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.449489742783178}},"df":1}}}},"e":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":2}},"w":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":2.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":2}}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":3}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":3.1622776601683795},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":3.0}},"df":5,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}},"d":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":3},"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":3}}},"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1},"x":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":2}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":2},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1}}}}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}},"m":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}}}}}}},"l":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":2}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1},"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":2}}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":2,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":4}}}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}},"g":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.23606797749979}},"df":1,"=":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"e":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.7320508075688772}},"df":1}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":5}}},"c":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"'":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":2}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.7320508075688772}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772}},"df":2},"v":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"j":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}},"l":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.6457513110645907}},"df":1}}},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":2.449489742783178}},"df":1}}}}}},"o":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":6,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":2},"n":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4}}},"p":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.0}},"df":2}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":3.4641016151377544}},"df":1,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4}},"p":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1,"=":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}},"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}}}}},"w":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":3.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.1622776601683795},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":2.8284271247461903}},"df":3},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":1}}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":2,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.7320508075688772}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":2.23606797749979}},"df":3}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.7320508075688772}},"df":1}},"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1,"o":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1}}}}}}},"p":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3}},"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1,"e":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":6}},"x":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":3.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":2}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"m":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":3.4641016151377544},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4,"b":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.8284271247461903}},"df":4,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,":":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1}}}},"x":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"_":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"3":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"7":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"1":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"4":{"docs":{},"df":0,"t":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"_":{"docs":{},"df":0,"}":{"docs":{},"df":0,"f":{"docs":{},"df":0,"n":{"docs":{},"df":0,"h":{"docs":{},"df":0,"s":{"docs":{},"df":0,"{":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"5":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1},"c":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":1,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":1}}},"d":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"\"":{"docs":{},"df":0,",":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,",":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"\"":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772}},"df":3,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}}}}}},"f":{"docs":{},"df":0,"=":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}}}}}},"h":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":3.0}},"df":3}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":2,"r":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":2.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":5}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.0}},"df":2}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951}},"df":1,"{":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"i":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"1":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"y":{"docs":{},"df":0,"0":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"1":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"3":{"docs":{},"df":0,"_":{"docs":{},"df":0,"7":{"docs":{},"df":0,"f":{"docs":{},"df":0,"1":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"q":{"docs":{},"df":0,"m":{"docs":{},"df":0,"g":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"m":{"docs":{},"df":0,"n":{"docs":{},"df":0,"0":{"docs":{},"df":0,"m":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"q":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"p":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"q":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"0":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"3":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"7":{"docs":{},"df":0,"h":{"docs":{},"df":0,"1":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"1":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"7":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":4}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":3.3166247903554}},"df":6},"n":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.7320508075688772}},"df":1},"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":5}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.23606797749979}},"df":1,"'":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.0}},"df":1,"r":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.7320508075688772}},"df":2},"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":3}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":2.6457513110645907}},"df":3,"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":2}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"'":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":3},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}}}}}}},"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":3.3166247903554}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":1}}}},"o":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3}}}}}},"q":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":3.1622776601683795}},"df":1,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"[":{"docs":{},"df":0,"]":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,"\"":{"docs":{},"df":0,",":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}},"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.7416573867739413}},"df":1}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":5}},"y":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":4,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":4.0}},"df":1}}}}},"r":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.8284271247461903}},"df":1}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"w":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.0}},"df":1}},"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1,"a":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}},"v":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.7320508075688772}},"df":2,"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":1}}}},"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"'":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1,"6":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.7320508075688772}},"df":1}}}}}},"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"3":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":2.449489742783178}},"df":2}}}}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"l":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1},"k":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":2},"q":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"x":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":2.6457513110645907}},"df":2}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4}}},"n":{"docs":{},"df":0,"x":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":2}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.23606797749979}},"df":3},"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":2}},"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":1}},"g":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":7,"u":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1}}},"p":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":2,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":1}}}}}},"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1},"v":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"w":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,",":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"/":{"docs":{},"df":0,"k":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"q":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"æ":{"docs":{},"df":0,"b":{"docs":{},"df":0,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":3,"=":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}},"^":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":3}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":3,":":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.7320508075688772}},"df":1}}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":5}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.23606797749979}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4}},"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":3},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4}}}},"p":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.7320508075688772}},"df":3},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.0}},"df":2,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":1}}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.8284271247461903}},"df":5}},"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":1}}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":2}},"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":2.6457513110645907}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.0}},"df":1},"d":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":3.605551275463989}},"df":1,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":1}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.6457513110645907},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.23606797749979}},"df":2}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":2}}},"o":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":1,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":2,"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":1}},"i":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951}},"df":1,"$":{"docs":{},"df":0,"c":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":5},"s":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"y":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}},"v":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2}}},"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":3.7416573867739413}},"df":1,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"7":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.8284271247461903}},"df":4,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"z":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.7320508075688772}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":6.324555320336759}},"df":1}}}}}}}}},"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":5}},"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1}},"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":2,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"x":{"docs":{},"df":0,"y":{"docs":{},"df":0,"z":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":3.7416573867739413},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":5,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"w":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":3.3166247903554},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":4},"x":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":3}}},"h":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":3}}},"n":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1,"n":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.7320508075688772}},"df":1}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":2}},"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1,"e":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":3.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"w":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":5}},"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"p":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.6457513110645907},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":2.0}},"df":5}}}}}},"o":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.7320508075688772}},"df":1,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"_":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}}}}},"d":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"=":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"f":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}},"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1}}}}},"a":{"docs":{},"df":0,"y":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":5,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}},"c":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"o":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.7320508075688772}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.3166247903554}},"df":1,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.23606797749979}},"df":1}}}}}}}}}}}}}}}},"r":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"y":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.8284271247461903}},"df":1}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":4}}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":2}}}}},"s":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1},"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.7320508075688772}},"df":6,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":2.0}},"df":5,"2":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.0}},"df":1}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951}},"df":2}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}}}}}}},"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":1,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"q":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"q":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1,"s":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.7320508075688772}},"df":2},"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.8284271247461903},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":3.1622776601683795},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":3.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":5,"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1,"{":{"docs":{},"df":0,"f":{"docs":{},"df":0,"4":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"0":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1,"1":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"1":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"+":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":3.7416573867739413}},"df":1}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}}},"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.449489742783178}},"df":1}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"h":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":2},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.8284271247461903},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.23606797749979}},"df":2}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":2}},"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.23606797749979}},"df":1}}},"y":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":3,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.449489742783178}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.8284271247461903}},"df":1}},"u":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":4.242640687119285}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":1,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":2}}}},"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":8}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":2,"f":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":2}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":2,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3},"s":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"=":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"d":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}},"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":2}}}},"x":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":2,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}},"q":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":1,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":3.1622776601683795}},"df":1}}},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":2}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":2.0}},"df":1,"0":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}},"1":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}},"2":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"3":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}},"4":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}},"5":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}},"6":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}},"7":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}},"8":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}},"9":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}}},"1":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":2.0}},"df":1,"0":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}},"1":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}},"2":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}},"3":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}},"4":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}},"5":{"docs":{},"df":0,"=":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}}}}}}}},"2":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1},"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1},"l":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.7320508075688772}},"df":1}},"m":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":2.0}},"df":2},"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.23606797749979}},"df":1},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"w":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":2}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.7320508075688772}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":2.449489742783178}},"df":1}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":2,"u":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":2.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1},"v":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951}},"df":2}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":2}}},"o":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":4,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.7320508075688772}},"df":1}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"w":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":2}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"=":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":2}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":2}}}}},"f":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":2}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.23606797749979}},"df":2,"'":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":2.0}},"df":4}}},"s":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":1},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1},"u":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.449489742783178}},"df":7,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1}}}}},"4":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"^":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":4.69041575982343},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":5.5677643628300215}},"df":4,"'":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.23606797749979}},"df":2},"[":{"docs":{},"df":0,"'":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"'":{"docs":{},"df":0,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"'":{"docs":{},"df":0,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"'":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":6}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.3166247903554}},"df":1,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}},"w":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":1}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.6457513110645907}},"df":2}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979}},"df":1,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"d":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.7320508075688772}},"df":2,"(":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2}}},"e":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":4,"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":2}}},"f":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":2}},"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":3.605551275463989},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":3.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":5,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.6457513110645907},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":3}}}},"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.7416573867739413},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":3.0}},"df":5,"u":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.605551275463989},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":5}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}},"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":2}},"z":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":3}},"v":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":4}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":2,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.449489742783178}},"df":1}}}}}}},"r":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":3}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":4,"i":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":2}}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1}}},"q":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951}},"df":1},"h":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":3,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.0}},"df":1,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":5,"u":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.6457513110645907},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":3.1622776601683795}},"df":2,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":3}},"u":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.7320508075688772}},"df":2},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":3}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":2.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.7320508075688772}},"df":2,"(":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.0}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":2.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":2,"u":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}}}}}},"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951}},"df":1}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":3}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}}},"v":{"docs":{},"df":0,"c":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}}}}},"y":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.0}},"df":1}}},"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":1}}}}}}},"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"7":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"_":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.605551275463989}},"df":1}}}},"g":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.7320508075688772}},"df":1},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":1}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":1}}},"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":1}}}}},"r":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":4,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.7320508075688772}},"df":1}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}}}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":2}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":1},"k":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":6,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":2.0}},"df":2}},"t":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":2,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":1}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}}}}}}}},"p":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.449489742783178}},"df":1}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.6457513110645907}},"df":1}},"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":1}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}},"k":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":2.6457513110645907}},"df":3}},"d":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":3.605551275463989},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772}},"df":3,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":4,"=":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.0}},"df":1}}}}},"i":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1,"'":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":2.0}},"df":1,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}}}},"p":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.4142135623730951}},"df":10,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":4}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.6457513110645907},"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":2.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":3.1622776601683795},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":11,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"b":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":3,"=":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"\\":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951}},"df":1}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.8284271247461903},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.7320508075688772}},"df":4}},"r":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":4.47213595499958},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"3":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":2,"f":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":5.477225575051661},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.4142135623730951}},"df":3,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.7320508075688772}},"df":3},"e":{"docs":{},"df":0,"w":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":2}},"m":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}},"m":{"docs":{},"df":0,"'":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.23606797749979}},"df":1},"d":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":2.0}},"df":1,"'":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.3166247903554}},"df":1}},"l":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.23606797749979},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.4142135623730951}},"df":3,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"=":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}}}},"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":3}}}}}},"v":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.6457513110645907}},"df":1},"y":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.7320508075688772},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":3,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.7320508075688772}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"g":{"docs":{},"df":0,"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,",":{"docs":{},"df":0,"z":{"docs":{},"df":0,"v":{"docs":{},"df":0,"j":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3}}},"l":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.23606797749979}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.7320508075688772}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":2}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.7320508075688772}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}},"k":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":2}}}}}},"n":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.4142135623730951}},"df":1},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":3.1622776601683795}},"df":2},"k":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":2.449489742783178},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.4142135623730951}},"df":6,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"=":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":2.0},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":2,"u":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":2.0}},"df":2}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.7320508075688772}},"df":1}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":4.795831523312719}},"df":1}}}},"x":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":2,"=":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"y":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1,"=":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}},"a":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":2.0}},"df":1}}},"o":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1},"u":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1},"p":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}},"z":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":3.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.7320508075688772}},"df":1}}}}},"title":{"root":{"docs":{},"df":0,"1":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1},"2":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":2}}}},"3":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1},"6":{"docs":{},"df":0,"4":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.4142135623730951},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3}}}}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"m":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.4142135623730951}},"df":1}}}}}},"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://doingstuff.dev/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":4}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"tf":1.0},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/floating-point-hell/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/c64-puzzle/":{"tf":1.0}},"df":1}}}}},"q":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://doingstuff.dev/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://doingstuff.dev/posts/elf-shared-library-version/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"tf":1.0},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"tf":1.0}},"df":2}}}}}}}}}},"documentStore":{"save":true,"docs":{"https://doingstuff.dev/":{"body":"","id":"https://doingstuff.dev/","title":"Doing Stuff"},"https://doingstuff.dev/posts/c64-puzzle/":{"body":"My college professor posted this image with the question\n\nWhat is the output when enter is pressed?\n\n\n \n \n \n \n\n\nI recognized this as a Commodore 64 and decided to dive deeper into what happens when SYS 49152 is run.\nSome Basics🔗\nPEEK(<address>) is used to look at the memory for the specified address.\nPOKE <address>,<value> writes the value to the specified address.\nThe Main Program🔗\nWe can start by loading the program into a Commodore 64 Emulator.\n10 X=49152\n15 PRINT X\n20 Y=11\n30 FOR M=0 TO Y\n40 PRINT PEEK(X+M);\n50 PRINT \" \";\n60 NEXT M\n\n\n \n \n \n \n\nThe output doesn't match the output from the original picture. According to the C64 wiki, the 49152 address is the location of the MONITOR$C000. So the BASIC program is printing the bytes of the machine code program located in MONITOR$C000.\nMatching the Contents🔗\nWe can attempt to match the contents of the 49152-49164 memory block by manually poking bytes into memory.\n10 POKE 49152,169\n11 POKE 49153,83\n12 POKE 49154,141\n13 POKE 49155,244\n14 POKE 49156,5\n15 POKE 49157,169\n16 POKE 49158,2\n17 POKE 49159,141\n18 POKE 49160,244\n19 POKE 49161,217\n20 POKE 49162,96\n21 POKE 49163,0\n\n\n \n \n \n \n\nSuccess?🔗\nNow when running SYS 49152 we get a nice red heart.\n\n \n \n \n \n\nBut Why?🔗\nHow does 169 83 141 244 5 169 2 141 244 217 96 0 result in a red heart on the screen?\nThe bytes are machine code for the Commodore 64. So we can look up the opcodes to convert them to assembly.\nDecoding🔗\nConverting the bytes into hex:\nA9 53 8D F4 05 A9 02 8D F4 D9 60 00\nUsing the Opcode lookup table we can decode the bytes:\n\nA9: LDA #nn (LoaD Accumulator)\n53(83 dec): Value loaded into the accumulator\n8D: STA nnnn (STore Accumulator)\n05F4(1524 dec): Address to store the value from the accumulator\nA9: LDA #nn\n02(2 dec): Value loaded into the accumulator\n8D: STA nnnn\nD9F4(55796 dec): Address to store the value from the accumulator\n60: RTS (ReTurn from Subroutine)\n\nHere is the full assembly code:\nLDA #53\nSTA 05F4\nLDA #02\nSTA D9F4\nRTS\n\nIf we convert this to a BASIC program it would be:\n10 POKE 1524,83\n20 POKE 55796,2\n\nWhat is it doing?🔗\nSo we have figured out that the machine code is writing two values to two different memory addresses.\nPOKE 1524,83\nThe 1524 address is used by the C64 for Screen RAM allowing you to write characters directly to the screen. The value 83 is the character code for the heart in the C64's character set.\nPOKE 55796,2\nThe 55796 address is used to specify the color of the character on the screen using Color RAM. The value 2 is red on the color lookup table.\nFor more information on the C64's memory map you can look here.\nHaving Some Fun🔗\nNow that we understand how this works we can write our own colorful characters to the screen.\n\n \n \n \n \n\n","id":"https://doingstuff.dev/posts/c64-puzzle/","title":"Commodore 64 Puzzle"},"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"body":"Writeups for InnoCTF 2019\nBG's🔗\nCan you check if this site is hiding something?\nSolution🔗\nstyle.css had a background property that lead to an image that contained the flag.\nInnoCTF{HVQMGcp00mN0MnmqwRNBExEBPFTMgnPQ}\nRF🔗\nI was walking on rails when suddenly i found this on wooden fence: I3_nase7ncamco_r1cCt_t4T07_}Fnhs{1\nSolution🔗\nI looked at various ciphers and stumbled across the Rail Fence cipher. Then increasing the number of rails until it formed a flag.\nI.............3............._.....\n.n...........a.s...........e.7....\n..n.........c...a.........m...c...\n...o......._.....r.......1.....c..\n....C.....t......._.....t.......4.\n.....T...0.........7..._.........}\n......F.n...........h.s...........\n.......{.............1............\n\nInnoCTF{n0t_ca3sar_7h1s_t1me_7cc4}\nRobots🔗\nI need your clothes your boots and your motorcycle\nSolution🔗\nrobots.txt was in the root of the web server with the contents of:\nDisallow: /*/super-secret-admin-panel\n\nThe super-secret-admin-panel then required sql injection of ' or 1=1 -- .\nCall Me🔗\nSolution🔗\nUsing Ghidra I replaced the existing printf function in main to point to void flag() address instead.\n\nImport the file as Raw Binary (this is because Ghidra messes up the ELF header if imported as a ELF binary)\nFind the memory address of the flag function\n\n\n \n \n \n \n\n\nFind the main function\n\n\n \n \n \n \n\n\nRight click on the printf function and select patch instruction\nChange the call address to be the address of the flag function\n\n\n \n \n \n \n\n\nExport Program from Ghidra\nRun the executable\n\nInnoCTF{How_d1d_y0u_f1nd_m3_7f1bc88}\nQuick Peek🔗\nSolution🔗\nI discovered that this was a .NET executable, so I used dnSpy to run the executable with debugging.\n\n \n \n \n \n\nInnoCTF{1337_SPAgh377i_CoD3}\n","id":"https://doingstuff.dev/posts/ctf-innoctf-2019/","title":"InnoCTF 2019 Writeups"},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"body":"Writeups for peaCTF 2019\nRSA🔗\nCan you help Bob retrieve the two messages for a flag?\nSolution🔗\nThe challenge included two files:\nauth_channel.txt\nAuthenticated (unhashed) channel:\nn = 59883006898206291499785811163190956754007806709157091648869\ne = 65537\nc = 23731413167627600089782741107678182917228038671345300608183\n\nenc_channel.txt\nEncrypted channel:\nn = 165481207658568424313022356820498512502867488746572300093793\ne = 65537\nc = 150635433712900935381157860417761227624682377134647578768653\n\nI had never done a RSA crypto CTF challenge before, so I read this great blog post Attacking RSA for fun and CTF points.\nenc_channel.txt🔗\nThe n value in the enc_channel.txt file had known factors\nSo we now have p, q, and e, I came across a Crypto StackExchange question about decrypting c given p, q, e.\nI attempted to use the python script in the answer but had difficulty getting it to work with our inputs. Eventually I converted the script to C# using the BouncyCastle NuGet package for the BigInteger and modInverse function. The following script was written in LINQPad for the nice dump functions.\nvar p = new BigInteger(\"404796306518120759733507156677\");\nvar q = new BigInteger(\"408801179738927870766525808109\");\nvar e = new BigInteger(\"65537\");\nvar c = new BigInteger(\"150635433712900935381157860417761227624682377134647578768653\");\n\nvar n = p.Multiply(q);\n\nvar one = new BigInteger(\"1\");\nvar phi = (p.Subtract(one).Multiply(q.Subtract(one)));\n\nvar d = e.ModInverse(phi);\nd.Dump(\"d\");\n\nvar result = c.ModPow(d, n);\nresult.Dump(\"Decoded\");\nresult.ToString(16).Dump(\"hex\");\n\nOutput:\nd: 125212438875455843161244268921851095575914294443076546907249\nDecoded: 8904929771347223901285886734450\nhex: 7065614354467b663463743072\n\nConverting the hex to ascii we get: peaCTF{f4ct0r\nauth_channel.txt🔗\nThe n value in the auth_channel.txt file had known factors\nI attempted to use the same script with the data from the auth_channel.txt file but ended up getting garbage hex out. After looking at a BSidesSF 2018 CTF writeup I came across this section:\n\nRSA can be used for encryption and decryption:\n\nEncrypt a text message m into ciphertext c: c = m^e mod n\nDecrypt a ciphertext c: m = c^d mod n\n\nIt can also be used to produce and verify digital signatures:\n\nProduce a signature for a message m: s = m^d mod n\nVerify a signature s, for m: m == s^e mod n\n\n\nThat gave me the idea to try verifying the signature instead of trying to decrypt the ciphertext. This script is very similar to the first one the only changes are the input and var result = c.ModPow(e, n); instead of var result = c.ModPow(d, n);\nvar p = new BigInteger(\"192355607880290234740980693973\");\nvar q = new BigInteger(\"311314068553039667905603427153\");\nvar e = new BigInteger(\"65537\");\nvar c = new BigInteger(\"23731413167627600089782741107678182917228038671345300608183\");\n\nvar n = p.Multiply(q);\n\nvar one = new BigInteger(\"1\");\nvar phi = (p.Subtract(one).Multiply(q.Subtract(one)));\n\nvar d = e.ModInverse(phi);\nd.Dump(\"d\");\n\nvar result = c.ModPow(e, n);\nresult.Dump(\"Decoded\");\nresult.ToString(16).Dump(\"hex\");\n\nOutput:\nd: 42870301015457570297495318493842594795392515721010421474689\nDecoded: 911845841250251271805\nhex: 316e67317366756e7d\n\nConverting the hex to ascii we get: 1ng1sfun}\nThe final flag is peaCTF{f4ct0r1ng1sfun}\nSong of My People🔗\nA specific soundcloud rapper needs help getting into his password protected zipped file directory. The initial password is in the title. You just have to know your memes, and pick the right instrument! We were on the fence on giving you an image to go along with this puzzle, but the loincloth was too scandalous. Alternatively, you could bruteforce.\nSolution🔗\nThe start of the challenge is a password protected zip file.\nThe challenge description lead me to The Song of My People! meme, which originates from an image of a Native American playing the violin. In the challenge description, it says \"pick the right instrument\", so the password ended up being violin.\nThe contents of the zip file were:\n\n\na lengthy issue.png\n\nThis is a broken PNG image\n\n\n\nIce Cube - Check Yo Self Remix (Clean).mp3\n\nYou better check yo self before you wreck yo self\n\n\n\nREADME.txt\n\n\none of the three files is a red herring, but a helpful one at that.\ndoes any of this ADD up? This is a LONG problem.\n\na lengthy issue.png🔗\nRunning pngcheck on the broken png file:\nFile: a lengthy issue.png (44525 bytes)\n chunk IHDR at offset 0x0000c, length 13\n 1280 x 720 image, 8-bit palette, interlaced\n chunk sRGB at offset 0x00025, length 1\n rendering intent = perceptual\n chunk gAMA at offset 0x00032, length 4: 0.45455\n chunk PLTE at offset 0x00042, length 1212501072: invalid number of entries (4.04167+08)\n\nOpening a lengthy issue.png in HxD and finding the PLTE chunk:\n\n \n \n \n \n\nLooking at the libpng spec and a similar writeup. I figured out that the HELP text before the PLTE was the 4-byte length for the PLTE chunk.\nUsing the HxD data inspector I edited these 4 bytes to be the value of 453 in big-endian. The value for the PLTE header was the number of bytes between the end of PLTE and the beginning of the CRC for PLTE. The length also must be divisible by 3 for the PLTE chunk.\n\n \n \n \n \n\nThe fixed image:\n\n \n \n \n \n\nImage hex🔗\nThe hex in the image:\n54 68 65 20 4c 69 62 72 61 72 79 20 6f 66 20 42 61 62 65 6c 3a 0a 28 77 69 74 68 20 6e\n65 77 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 61 6c 6c 20 74 68 65 20 70 6f 73 73 69 62 6c\n65 20 64 69 73 73 20 74 72 61 63 6b 73 20 74 6f 20 65 76 65 72 20 62 65 20 6d 61 64 65\n20 61 6e 64 20 65 76 65 72 20 63 6f 75 6c 64 20 62 65 20 6d 61 64 65 29\n\nDecoding this to ascii results in:\n\nThe Library of Babel: (with new addition of all the possible diss tracks to ever be made and ever could be made)\n\nSoundcloud🔗\nLink to soundcloud\nSoundcloud description:\n\nthis concert is part of a larger tour that is archived completely in some kind of hexagonal library. The archive is named between \"maybe\" and a \"repeat\". Should be on the 371st page.\nI would give you an mp3 of this audio, but I don't know how to navigate those sketchy websites.\n\nThe soundcloud \"song\" sounded like Morse code, after downloading the mp3 I discovered a Morse code audio decoder.\nThe decoded text:\n\nSUP YALL ITS YA BOI LIL ICE CUBE MELTING OUT HERE IN THE HAWAII HEAT FOR ALL OF YOU. YOU GUESSED IT THIS IS LIVE AUDIO FROM MY WORLD TOUR. I REPEAT LIL ICE CUBES WORLD TOUR MAYBE A LIBRARY WILL HELP\n\nLibrary of Babel🔗\nWith the hint of Library of Babel I tried inputting the hex from the image as the Hex Name but that ended up being a dead end. I tried using the search for lil ice cubes world tour:\nexact match:\nTitle: weif.rfgkd,zvjxxd Page: 371\nLocation: 2nhptm68h2sputfsdlbmi75s6qcfgu...-w2-s4-v08\n\nNice! The page number matches the soundcloud description.\nI downloaded the book and counted the number of spaces in the book (48558), and tried the flag {48_thousand_spaces_371} but it was incorrect. The image said thousand_spaces or seats, so I searched how many times the word seat appears in book (3).\nThe final flag was {3_thousand_spaces_371}\n","id":"https://doingstuff.dev/posts/ctf-peactf-2019/","title":"peaCTF 2019 Writeups"},"https://doingstuff.dev/posts/elf-shared-library-version/":{"body":"How to embed version information into an ELF shared library?\nHere are the methods I have used for embedding version information.\n\nThese methods are for embedding a version into libraries distributed outside of a package. Packages have their own version information, so we don't need to embed one in the library.\nWhat about the ABI version?🔗\nABI version can be separate from your product/release version. If you haven't changed the ABI interface, you can keep the same ABI version while updating the product/release version on new builds. There are some great resources, policy, and tools for how to handle ABI versioning.\n\n \n \n \n Symbol versioning is another way to handle ABI changes without changing the ABI version, this blog post is all about symbol versioning.\n\n\nWays of embedding version information🔗\nOkay, so you want to embed a version in your ELF shared libraries. How should you do it?\nSCCS String🔗\nProbably the easiest to add, this method uses the Source Code Control System @(#) convention to embed the version. \n#define VERSION \"1.2.3\"\n\nstatic char sccsid[] __attribute__((used)) = \"@(#)Version \" VERSION;\n\nThen the version can be retrieved via what(1) or strings libfoo.so | grep \"@(#)\"\n$ strings libfoo.so | grep \"@(#)\"\n@(#)Version 1.2.3\n\nThis is human-readable but slow since it has to look at all the strings in the binary. If you want to get the version programmatically, we have another method.\nELF Note Header🔗\nThis method creates an ELF note header by defining a note struct with the descriptor field. Then uses __attribute__((used, section(...), aligned(4))) to tell the compiler to add the ELF header.\n#include <elf.h>\n\n#define VERSION \"1.2.3\"\n#define NOTE_SECTION \".note.foo.version\"\n\n//Elf64_Nhdr + desc\nstruct version_note {\n Elf64_Word\tnamesz;\n Elf64_Word\tdescsz;\n Elf64_Word\ttype;\n char desc[sizeof(VERSION)];\n};\n\n__attribute__((used, section(NOTE_SECTION), aligned(4)))\nstatic const struct version_note version = {\n .namesz = 0,\n .descsz = sizeof(VERSION),\n .type = NT_VERSION,\n .desc = VERSION\n};\n\n\nNote sections contain a series of notes. Each note is followed by the name field (whose length is defined in namesz) then by the descriptor field (whose length is defined in descsz) and whose starting address has a 4 byte alignment. Neither field is defined in the note struct due to their arbitrary lengths.\n\n\n \n \n \n More details in the elf manpage under the Notes (Nhdr) section.\n\n\nThen readelf -Wn or an ELF parsing library can read the version header.\n$ readelf -Wn libfoo.so\nDisplaying notes found in: .note.foo.version\n Owner Data size Description\n (NONE) 0x00000006 NT_VERSION (version) description data: 31 2e 32 2e 33 00\n\nThe downside is the output is in hex when using readelf, unlike the human-readable format of SCCS above. But this method is faster since it's only reading the ELF headers rather than the whole binary.\nCan executables use these methods?🔗\nYup, if you need to provide a version without executing. But the more intuitive solution is to have a --version argument.\n","id":"https://doingstuff.dev/posts/elf-shared-library-version/","title":"Embedding Version Info into ELF Shared Libraries"},"https://doingstuff.dev/posts/floating-point-hell/":{"body":"This blog post will show how to deal with floating-point error in JavaScript by encoding all uint64's, and int64's as strings in JSON Marshaling.\n\nJavaScript has 53-bits of integer precision, this is a problem when trying to represent a 64-bit number. Ways of solving this in JavaScript is to use bigint or math.js, but when parsing JSON we can't use this.\n\nWhen it goes wrong🔗\nThis is an example of how it can go wrong. Go encodes the JSON correctly, but when parsed by JavaScript the number does not match.\nGo🔗\nBase data structure\ntype LargeId uint64\n\ntype Data struct {\n Id LargeId\n BigNum int64\n}\n\nEncode and Decode data\ndata := Data{Id: 12345678901234567892, BigNum: 12000000000002539}\noutput, _ := json.Marshal(data)\nfmt.Println(\"Data -> Json\", string(output))\ninput := string(output)\noutput2 := Data{}\njson.Unmarshal([]byte(input), &output2)\nfmt.Printf(\"Json -> Data %+v\\n\", output2)\n\n//Output\nData -> Json {\"Id\":12345678901234567892,\"BigNum\":12000000000002539}\nJson -> Data {Id:12345678901234567892 BigNum:12000000000002539}\n\nAs you can see Go has no problem encoding and decoding the large integers. But let's see what happens when JavaScript tries to decode the same integers.\nJavaScript🔗\nvar data = '{\"Id\":12345678901234567892,\"BigNum\":12000000000002539}'\nconsole.log(JSON.parse(data))\n\n//Output\nObject {Id: 12345678901234567000, BigNum: 12000000000002540}\n\nJavaScript ended up decoding the number, but its wrong. But if we check for equivalence in JavaScript it returns true.\n> 12000000000002539 === 12000000000002540\ntrue\n\n\nHow to fix it🔗\nThe easiest way to fix this is to encode the int64 to a string, that way when parsed in JavaScript the number is represented correctly.\nBelow I have added json:\",string\" tag to the end of every int64, this tells the encoding/json package to encode that field as a string instead of an integer.\nGo🔗\nBase data structure with tags\ntype LargeId uint64\n\ntype Data struct {\n Id LargeId `json:\",string\"`\n BigNum int64 `json:\",string\"`\n}\n\nEncode and Decode data\ndata := Data{Id: 12345678901234567892, BigNum: 12000000000002539}\noutput, _ := json.Marshal(data)\nfmt.Println(\"Data -> Json\", string(output))\ninput := string(output)\noutput2 := Data{}\njson.Unmarshal([]byte(input), &output2)\nfmt.Printf(\"Json -> Data %+v\\n\", output2)\n\n//Output\nData -> Json {\"Id\":\"12345678901234567892\",\"BigNum\":\"12000000000002539\"}\nJson -> Data {Id:12345678901234567892 BigNum:12000000000002539}\n\nWith the tag we can encode and decode the JSON and keep the int64 type in Go.\nJavaScript🔗\nvar data = '{\"Id\":\"12345678901234567892\",\"BigNum\":\"12000000000002539\"}'\nconsole.log(JSON.parse(data))\n\n//Output\nObject {Id: \"12345678901234567892\", BigNum: \"12000000000002539\"}\n\nNow the number is represented correctly in JavaScript. This is useful if you are using the number as an identifier, but makes it difficult to do arithmetic operations on the number.\n","id":"https://doingstuff.dev/posts/floating-point-hell/","title":"Floating Point Hell"},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"body":"Turning an Intel Atom based Lenovo Tablet 10 (20E4) into a Home Assistant dashboard and voice assistant. Most tutorials for dashboard displays are using Android tablets, but I had this old tablet laying around and figured out how to use it with Home Assistant.\n\n \n \n \n \n\nHome Assistant setup🔗\nIn the Home Assistant UI:\n\nCreate a kiosk user that can only login from the local network\nCreate an Assist voice assistant, Settings -> Voice Assistants -> Add Assistant\n\nPicking a Linux distro🔗\nI wanted a Linux distro that ran well on the low-powered Atom processor while having a good touch interface.\n\nUbuntu 24.04\n\nPerformance: Gnome ran poorly, this would possibly be improved by gnome-tweaks and disabling animations.\nKeyboard: Gnome on-screen keyboard would popup but wouldn't accept input.\nTouch: Gnome has a good tablet mode with display scaling.\n\n\nFedora Workstation 40\n\nPerformance: Same Gnome performance issues as Ubuntu.\nKeyboard: Gnome on-screen keyboard worked but had an odd quirk where the shift key acted like caps lock.\nTouch: Same as Ubuntu\n\n\nLubuntu/Kubuntu 24.04\n\nPerformance: LXQt and KDE Plasma 5 both were lighter than Gnome and ran well.\nKeyboard: Onboard keyboard crashes. Florence isn't in the package repos. Maliit keyboard seems to only work under Wayland (which is current not the default).\nTouch: Touch worked but the mouse pointer was visible.\n\n\nKDE Neon\n\nPerformance: KDE Plasma 6 ran well but had some missing icons.\nKeyboard: I had to manually set the virtual keyboard to Maliit keyboard but then worked well.\nTouch: KDE Plasma 6 has a tablet mode making icons larger, display scaling settings and the mouse pointer is not visible.\n\n\nFedora Spin KDE Desktop 40\n\nPerformance: KDE Plasma 6 ran well and was not missing icons.\nKeyboard: Defaulted to the Maliit keyboard.\nTouch: Same as KDE Neon.\n\n\n\nKDE Plasma 6 with the Maliit keyboard gave me the best tablet mode and on-screen keyboard. The difference between KDE Neon and Fedora Spin KDE Desktop was that the Fedora Spin version does not use the bleeding edge version of the KDE apps. (KDE Neon is also based on Ubuntu LTS and Fedora Spin KDE Desktop is based on Fedora)\nAlternative on-screen keyboards🔗\n\nOnboard\nMaliit Keyboard\nFlorence\nGJS OSK\nCoreKeyboard\n\nInstalling Linux🔗\n\nShutdown the tablet\nPower on the tablet and hold the volume-up button until the ThinkPad Tablet Setup app starts\nPlug-in Linux USB drive\nReorder USB to be the first boot device\nReboot\n\n\n \n \n \n When installing you might want leave the Recovery Partition. I removed it and the ThinkPad Tablet Setup broke.\n\n\nAfter installation🔗\nThese are the changes I made to make it function as a kiosk:\n\nMake a kiosk user and login as kiosk\nSetup Firefox\n\nSet homepage to http://homeassistant.local:8123\nAdd autofullscreen Extension to auto-fullscreen on startup.\nDisable resuming on crash about:config -> browser.sessionstore.resume_from_crash -> false\n\n\nSetup KDE to start Firefox on login\n\nSettings -> Autostart -> Add -> Firefox\n\n\nTweak screen sleep time\n\nSettings -> Energy Saving\n\n\nDisable screen locking\n\nSettings -> Screen Locking\n\n\nDisable animations\n\nQuick Settings -> Animation Speed: Instant\n\n\nSet hostname\n\nsudo hostnamectl set-hostname --static <new-name>\n\n\nEnable SSH (optional)\n\nTablet voice assistant setup🔗\nTest MIC and playback🔗\n$ arecord -r 16000 -c 1 -f S16_LE -t wav -d 5 test.wav\n$ aplay -r 22050 -c 1 -f S16_LE -t wav test.wav\n\nInstall Python 3.11🔗\nPython 3.12 is currently not supported by tflight-runtime\n# yum install git python3.11\n\nSetup wyoming-openwakeword🔗\nwyoming-openwakeword allows us to use local wake word detection rather than Home Assistant's wake word detection.\nClone and setup python venv🔗\n$ git clone https://github.com/rhasspy/wyoming-openwakeword.git /opt/ha-assist/wyoming-openwakeword\n$ cd /opt/ha-assist/wyoming-openwakeword\n$ python3.11 script/setup\n\nSetup wyoming-openwakeword systemd service🔗\n\nReplace ok_nabu with whichever wake word model you want\n\nSee wyoming-openwakeword docs for more information.\n# systemctl edit --force --full wyoming-openwakeword.service\n\n[Unit]\nDescription=Wyoming openWakeWord\n\n[Service]\nType=simple\nUser=kiosk\nGroup=kiosk\nExecStart=python3.11 script/run --uri 'tcp://127.0.0.1:10400' --preload-model 'ok_nabu'\nWorkingDirectory=/opt/ha-assist/wyoming-openwakeword\nRestart=always\nRestartSec=1\n\n[Install]\nWantedBy=default.target\n\nEnable and start wyoming-openwakeword service🔗\n# systemctl daemon-reload\n# systemctl enable wyoming-openwakeword.service\n# systemctl start wyoming-openwakeword.service\n\nSetup wyoming-satellite🔗\nwyoming-satellite communicates with Home Assistant using the wyoming protocol.\nClone and setup python venv and install webrtc-noise-gain🔗\n$ git clone https://github.com/rhasspy/wyoming-satellite.git /opt/ha-assist/wyoming-satellite\n$ cd /opt/ha-assist/wyoming-satellite\n$ python3.11 script/setup\n$ .venv/bin/pip3 install 'webrtc-noise-gain==1.2.3'\n\nSetup wyoming-satellite systemd service🔗\n\nReplace ok_nabu with whichever wake word model you picked.\nChange ha-kiosk to the name you want to see in Home Assistant.\nChange the /run/user/<uid> uid to match your kiosk user, setting XDG_RUNTIME_DIR is required for arecord and aplay to work when run from a systemd service. (Otherwise you will get a error: arecord: main:850: audio open error: Host is down)\n\nSee wyoming-satellite docs for additional settings.\n# systemctl edit --force --full wyoming-satellite.service\n\n[Unit]\nDescription=Wyoming Satellite\nWants=network-online.target\nAfter=network-online.target\nRequires=wyoming-openwakeword.service\n\n[Service]\nType=simple\nUser=kiosk\nGroup=kiosk\nEnvironment=XDG_RUNTIME_DIR=/run/user/1001\nExecStart=python3.11 script/run --name 'ha-kiosk' --wake-word-name 'ok_nabu' --awake-wav \"/opt/ha-assist/sounds/awake.wav\" --mic-no-mute-during-awake-wav --mic-auto-gain 5 --mic-noise-suppression 2 --uri 'tcp://0.0.0.0:10700' --mic-command 'arecord -r 16000 -c 1 -f S16_LE -t raw' --snd-command 'aplay -r 22050 -c 1 -f S16_LE -t raw' --wake-uri 'tcp://127.0.0.1:10400'\nWorkingDirectory=/opt/ha-assist/wyoming-satellite\nRestart=always\nRestartSec=1\n\n[Install]\nWantedBy=default.target\n\nEnable and start wyoming-satellite service🔗\n# systemctl daemon-reload\n# systemctl enable wyoming-satellite.service\n# systemctl start wyoming-satellite.service\n\nAdditional settings I used🔗\n\n--mic-no-mute-during-awake-wav - Keeps the mic enabled when playing the wake word detection sound.\n--awake-wav \"/opt/ha-assist/sounds/awake.wav\"- Plays the /opt/ha-assist/sounds/awake.wav wav file when the wake word is detected.\n--mic-auto-gain 5 --mic-noise-suppression 2 - Settings for webrtc-noise-gain to reduce noise and boost gain.\n\nSetup wake word detection sound (optional)🔗\nSave the sound you want to play when the wake word is detected as /opt/ha-assist/sounds/awake.wav\nCheck wyoming-satellite and wyoming-openwakeword are working🔗\n\nsystemctl status wyoming-satellite.service wyoming-openwakeword.service\nTest your wake word with \"ok nabu. What is the weather?\"\n--debug can be added to both wyoming-satellite and wyoming-openwakeword for additional logging.\n\nAdditional Home Assistant integrations🔗\nThese are some integrations that further augment the tablet:\n\nDashboard modifications\n\nbrowser_mod 2\nkiosk-mode\nWallPanel\n\n\nLinux sensor\n\nLNXlink\nGo Hass Agent\n\n\n\n","id":"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/","title":"Home Assistant - Linux tablet dashboard and voice assistant"},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"body":"Welcome to my journey in building my homelab. This will be an ongoing series of blog posts of my adventures in building my personal infrastructure.\n\nPart 1: The Adventure Begins (You are here!)\nPart 2: Configuration Management\nPart 3: Internal Network\nWhat is a Homelab🔗\nThe primary idea behind a homelab is a place to learn about infrastructure, servers and development.\n/r/homelab defines a homelab as:\n\nHomelab [hom-læb](n): a laboratory of (usually slightly outdated) awesome in the domicile\n\nNow by this definition a homelab should reside in a home. In my case part of my homelab will exist outside of my home, due to space and noise constraints. So my homelab is somewhere between a homelab and a \"cloudlab\".\nThe /r/homelab wiki has a more information on how to get started with a homelab.\nInventory🔗\nAt the time of writing here is my current inventory of servers. It will most likely grow and evolve as time goes on.\n\n1 VPS\n\nCPU: 2 Cores\nRAM: 2GB\nDisk: 40GB SSD\n\n\n1 NAS\n\nCPU: Intel i5-6600K\nRAM: 32GB\nDisk: 2x 250GB SSD, 4x 12TB HDD\n\n\n2 Dedicated Servers\n\nDedicated Server 1\n\nCPU: Intel\nRAM: 32GB\nDisk: 2x 1TB HDD\n\n\nDedicated Server 2\n\nCPU: Intel\nRAM: 32GB\nDisk: 2x 3TB HDD\n\n\n\n\n\nGoals🔗\n\nAbility to host applications easily, there is a lot of good self hosted software out there.\nKeep ongoing maintenance to a minimum.\nAutomatic encrypted backups, because RAID is not a backup\nAbility to easily add and remove servers.\nAn internal network between servers, some of my servers exist outside of my home network.\nAlerting and Monitoring, so I know when servers go down, failing drives, backups didn't run, etc.\n\nThe Plan🔗\nThese are the tools/software I decided on to meet each of the above goals.\nHosting Applications🔗\n\nDocker for hosting most applications and allows me to move services around.\nPortainer for managing the docker containers on specific servers.\nSalt for everything else that doesn't fit into a container.\nTraefik provides routing and certificates for services.\n\nMinimizing Ongoing Maintenance🔗\n\nAutomatic security updates will reduce some of the maintenance involved in updating.\nWatchtower will keep selected containers up to date.\n\nAutomatic Backups🔗\n\nrestic for backups, including deduplication and encryption.\nBackblaze B2 for offsite storage of backups.\n\nAdding and Removing Servers🔗\n\nSalt allows me to have a declarative configuration for servers.\nnetboot.xyz simplifies installs with PXE booting.\nDNS for servers and services to ease container movement. This will be configured automatically or through dnscontrol.\n\nInternal Network🔗\n\nZerotier is for my internal network. It's not decentralized like tinc but has some trade offs that make it easier to use, you can read more about it here.\n\nAlerting and Monitoring🔗\n\nnetdata will be used for metrics and basic alerting.\nuptime-kuma will be used for custom monitoring/alerting.\n\nHere we go!🔗\nI hope you will join me in this adventure into homelabbing. In the next post in the series we will cover configuration management.\nPart 1: The Adventure Begins (You are here!)\nPart 2: Configuration Management\nPart 3: Internal Network\n","id":"https://doingstuff.dev/posts/homelab-adventure-part-1/","title":"Homelab Adventure - Part 1: The Adventure Begins"},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"body":"Welcome to my journey in building my homelab. This is part of a multipart series, in the last part I gave an overview of the homelab plan. This one will cover how I handle configuration management.\n\nPart 1: The Adventure Begins\nPart 2: Configuration Management (You are here!)\nPart 3: Internal Network\n\n \n \n \n Since this blog post was written I have switched from Salt to Ansible.\n\n\nWhat is Salt🔗\n\nSalt is a configuration management and orchestration tool.\n\nWhat this means is it allows me to declare a \"state\" that the infrastructure should be in. It also allows me to run commands/modules across the infrastructure. Some alternatives to Salt are Ansible, Chef, Puppet.\nHow I am using Salt🔗\nSalt is the base of my infrastructure, once a server is installed Salt then provisions the rest it.\nThe idea is anything not in docker is configured by Salt. That way when a server needs to be reinstalled or added, I know configuration isn't missing due to manual changes.\nFolder Structure🔗\nThis is a view of my Salt configuration git repo, some files/directories are missing from this view for the sake of readability. It is useful to see an example of how other people have laid out their Salt configuration when setting up your own.\nsalt\n├── _modules\n│   └── zerotier.py\n├── _states\n│   └── zerotier.py\n├── app\n│   ├── at\n│   ├── btrfs\n│   ├── docker\n│   ├── fail2ban\n│   ├── ntp\n│   ├── nullmailer\n│   ├── powerpanel\n│   ├── restic\n│   ├── smart\n│   └── zerotier\n├── config\n│   ├── apt\n│   ├── salt-minion\n│   ├── ssh\n│   ├── timezone\n│   └── users\n├── container\n│   ├── portainer\n│   ├── portainer-agent\n│   ├── salt-master\n│   ├── traefik\n│   └── watchtower\n├── trait\n│   ├── backup.sls\n│   ├── battery-backup.sls\n│   ├── btrfs.sls\n│   ├── docker-extra.sls\n│   ├── docker-master.sls\n│   ├── docker-proxy.sls\n│   ├── docker.sls\n│   ├── internal-network.sls\n│   ├── mailer.sls\n│   └── salt-master.sls\n├── default-packages.sls\n└── top.sls\npillar\n├── app\n│   ├── docker\n│   ├── restic\n│   ├── nullmailer.sls\n│   ├── portainer.sls\n│   ├── traefik.sls\n│   └── zerotier.sls\n├── config\n│   ├── network.sls\n│   └── users.sls\n├── default-schedule.sls\n└── top.sls\n\nSalt🔗\n_module/_states🔗\nThese are custom modules and states that are synced to minions. I will cover the custom zerotier module/state in another blog post.\nApp🔗\nThese are states that require the installation of a package. The configuration of the application also lives here.\nConfig🔗\nThese are states that are pure configuration and nothing new is installed.\nContainer🔗\nThese are docker containers that are either going to be on every server (watchtower) or are required to bootstrap other containers (portainer).\nTrait🔗\nSalt has many ways for targeting states to a machine in the top.sls file. The top.sls file is what Salt looks at when you run highstate for what states should be applied to a minion.\nThe Salt community has this idea of using grains to apply roles to a server called Role-based infrastructure. This works if the server has a specific role like database or webserver.\nTraits are a similar idea but are more targeted at what you need on the server and are more fine-grained than database or webserver.\nThis setup allows me to have a very small initial highstate and then apply traits as I need them for specific servers.\ndefault-packages.sls🔗\nThis is a list of helpful packages that are installed by default on all minions.\ninstall-default-packages:\n pkg.installed:\n - pkgs:\n - rsync\n - curl\n - vim\n - htop\n - iotop\n - git\n - ncdu\n - openssh-client\n - ncurses-term # for putty profiles\n - traceroute\n - jq\n - virt-what # for salt virtual grains\n - net-tools # ifconfig/route\n\ntop.sls🔗\nThis is the file looked at when highstate is run. As you can see I have a very simple base that gets installed by default and then everything else is defined by traits.\nbase:\n '*':\n - default-packages\n - config.users\n - config.timezone\n - config.salt-minion\n - config.ssh\n - config.apt\n - app.at\n - app.ntp\n - app.fail2ban\n\n{% set traits = salt['grains.get']('traits', []) %}\n{% for trait in traits %}\n 'traits:{{ trait }}':\n - match: grain\n - trait.{{ trait }}\n{% endfor %}\n\nPillar🔗\nThis is where the any machine specific configuration and sensitive data lives.\nI store both my Salt states and pillar data in the same git repository so I can test and update configurations. Any secrets in the pillars are PGP encrypted using Salt's gpg renderer. Salt supports many pillar sources and they can even be used in combination.\ntop.sls🔗\nThis is the pillar top file which defines what minions have access to specific pillar data.\nbase:\n '*':\n - default-schedule\n - config.users\n - config.network\n\n 'traits:internal-network':\n - match: grain\n - app.zerotier\n\n 'traits:mailer':\n - match: grain\n - app.nullmailer\n\n 'traits:backup':\n - match: grain\n - app.restic.base\n - app.restic.{{ grains.id }}\n\n 'traits:docker-proxy':\n - match: grain\n - app.traefik\n\n 'traits:docker-extra':\n - match: grain\n - app.portainer\n\n 'traits:docker-master':\n - match: grain\n - app.portainer\n\n\n \n \n \n Grains are controlled by the minion, so a server can access pillar data for other traits due to matching on grains.\n\n\nMaximum Saltiness🔗\nI hope this gave you a good view of how I use Salt to configure my servers. In the next part we will cover how to have an internal network over the internet.\nPart 1: The Adventure Begins\nPart 2: Configuration Management (You are here!)\nPart 3: Internal Network\n","id":"https://doingstuff.dev/posts/homelab-adventure-part-2/","title":"Homelab Adventure - Part 2: Configuration Management"},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"body":"Welcome to my journey in building my homelab. This is part of a multipart series, in the last part I gave an overview of how to do configuration management. This one will cover how I set up my internal network.\n\nPart 1: The Adventure Begins\nPart 2: Configuration Management\nPart 3: Internal Network (You are here!)\nWhy?🔗\nIt's helpful to have an internal and external network for your homelab. This allows hosting of internal services without exposing them to the internet.\nSince my homelab lives in multiple datacenters (and at home), it's less convenient to use a site-to-site VPN. So a peer-to-peer VPN between all my servers is ideal. This also makes it easy for me to add non-servers to the network like my phone or desktop to access those internal services.\nWhat is ZeroTier🔗\n\nZeroTier is a distributed network hypervisor built atop a cryptographically secure global peer to peer network. It provides advanced network virtualization and management capabilities on par with an enterprise SDN switch, but across both local and wide area networks and connecting almost any kind of app or device.\n\nThis means ZeroTier is \"mostly\" a peer-to-peer VPN, what I mean by \"mostly\" is that it still uses a \"centralized\" network controller (you can host your own if you want). The bulk of the traffic is peer-to-peer, and the network controller is only for the initial routing. This has some trade-offs with something that is entirely peer-to-peer.\nAlternatives🔗\nThese are some other options for peer-to-peer VPNs:\ntinc is one of the oldest peer-to-peer VPN's, but to set it up you have to share the generated public keys for each node with all the other nodes you want to connect.\nNebula (inspired by tinc) has similar issues to tinc with certificate distribution. One advantage over tinc is that a discovery server is present in the Nebula network to ease node discovery.\nTailscale while a great alternative to ZeroTier, it didn't exist at the time I set up ZeroTier. This is a great comparison between Tailscale and ZeroTier.\nZeroTier and Salt🔗\nI have written a salt formula for managing ZeroTier with salt. It allows interacting with the local agent and the network controller's API.\nhttps://github.com/gamingrobot/salt-formula-zerotier\nPart 1: The Adventure Begins\nPart 2: Configuration Management\nPart 3: Internal Network (You are here!)\n","id":"https://doingstuff.dev/posts/homelab-adventure-part-3/","title":"Homelab Adventure - Part 3: Internal Network"},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"body":"About a month ago I thought it would be nice to be able to configure VM's and Droplets with Salt by using my existing configuration I had setup in Part 2: Configuration Management.\n\nI could have gone the normal route of installing the Salt minion and attaching it to the Salt master then running the highstate. But since these would be resource constrained machines I had concerns about the resource usage of the minion.\nSo I decided to try Salt SSH, which uses ssh to transfer a lightweight minion that executes the states and then exits. It would also allow me to to use Salt from my local machine instead of remoting into the server hosting the Salt master.\nThis worked great until I attempted to run it and hit this lovely bug where if you are using gpg-encrypted pillars the minion will attempt to decrypt them rather than decrypting locally and when rendering the state.\nThis wasn't the first time I had run into a nasty Salt bug, this bug caused watchtower to break and I had to rollback to a previous version.\nGiving Ansible a try🔗\nI read Jeff Geerling's Ansible for DevOps book, which gave a really good overview of Ansible and how I could map what I knew from Salt to Ansible. I also looked for blog posts of people migrating from Salt to Ansible, but almost all of them were company blogs talking about how they outgrew Ansible and migrated to Salt.\nI ported some of my simpler states to Ansible to try and get a feel for how my Salt traits and states mapped to Ansible playbooks and roles.\nThese are the Ansible concepts explained in terms of Salt:\n\nPlaybook\n\nAnsible playbooks are the mapping between host and roles/tasks.\nSalt's top file is also a mapping between hosts to states.\n\n\nRole\n\nAnsible roles contain tasks, files, variables and handlers.\nSalt formulas contain states, files and variables.\n\n\nVariables\n\nAnsible has two types of vars group_varsand host_vars. group_vars are scoped to the group in the inventory while host_vars are scoped to a specific host.\nSalt pillars contain the variables specific to a host. Pillars can contain gpg encrypted values for Ansible it encrypts the whole yaml via ansible-vault.\n\n\nHandlers\n\nAnsible handlers are tasks but are triggered via notify, these most closely map to Salt Reactors. But are primarily used to achieve the same result that Salt's on_change does to have states that trigger off other states changing.\n\n\nInventory\n\nAnsible needs to know what hosts its going to be connecting to.\nSalt's master keeps track of the connected minions and in Salt SSH it uses a roster.\n\n\nGalaxy\n\nAnsible Galaxy is a repository of roles created by the community.\nSalt's version of this is the saltstack-formulas repos.\n\n\n\nAfter porting 1000 lines of yaml🔗\nAfter porting all my Salt states to Ansible there were a few things that tripped me up.\nSalt allows for jinja templating inside state files, instead Ansible only allows jinja templating inside yaml values and template files. This affects how loops are done, in Salt they are handled with a jinja for loop, but in Ansible you use a loop and loop_control in the yaml.\nSalt🔗\n{% for name in salt['pillar.get']('certs', {}).keys() %}\ncert-{{ name }}:\n file.managed:\n - name: /opt/certs/{{ name }}.cert\n - contents_pillar: certs:{{ name }}:cert\n{% endfor %}\n\nAnsible🔗\n- name: cert\n ansible.builtin.copy:\n dest: /opt/certs/{{ item.key }}.cert\n content: \"{{ item.value.cert }}\"\n loop: \"{{ certs | dict2items }}\"\n loop_control:\n label: \"{{ item.key }}\"\n\nWith Salt you can specify the source of a local file via salt://{{ tpldir }}. In Ansible when specifying a local file it will first look in a role's files folder.\nSalt🔗\ndynamic-config:\n file.managed:\n - name: /opt/config/dynamic.yaml\n - source: salt://{{ tpldir }}/config/dynamic.yaml\n\nAnsible🔗\n- name: dynamic-config\n ansible.builtin.template:\n src: dynamic.yaml\n dest: /opt/config/dynamic.yaml\n\nSalt has targeting as part of the state.apply command, in Ansible you can limit the scope of the playbook by using --limit\n$ salt 'testserver' state.apply\n$ ansible-playbook servers.yml --limit testserver\n\nLiving with Ansible for a few months🔗\nThings I liked🔗\nI really like that when you hit Ctrl+C during execution Ansible stops the playbook execution. This is nice when I have forgotten to make a change or something failed on one host but not another. With Salt you get a job id that you have to cancel manually or let it finish.\nBecause I am running Ansible locally, iteration time is quicker. In Salt I am committing then pushing my changes, pulling them down on the master and running highstate. \nDocumentation is considerably better for Ansible. The documentation pages include multiple examples for a module. Since many other homelabbers run Ansible there are many blog posts and examples on how to do something.\nAnsible Vault is much easier to use than gpg encrypting pillar data. By default it encrypts entire files but you can encrypt specific values like Salt's gpg pillars.\nThings I disliked🔗\nThe roles folder structure is verbose but only requires the folders you use.\nThe largest complaint I saw about Ansible was how slow it was compared to Salt. I saw speeds similar to Salt with this additional configuration:\n[defaults]\nstrategy = free # don't block on each host per task\n[ssh_connection]\npipelining = True # reduce the number of network operations\n\n","id":"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/","title":"Homelab Sidequest - Switching from Salt to Ansible"},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"body":"How to setup Reaper to send MIDI to Unreal Engine. If you are looking to use OSC instead, take a look at daw-out.\nSetting up Reaper🔗\n\n\nInstall loopMIDI (This allows us to create a loopback MIDI device)\n\n\nAdd a new MIDI device in loopMIDI called unreal_port\n\n \n \n \n \n\n\n\n\nEnable new MIDI output in Reaper via Options -> Preferences -> Audio -> MIDI Devices\n\n \n \n \n Only enable the MIDI Output\n\n\n\n\n \n \n \n \n\n\n\n\nSetup MIDI output routing per track via:\n\n \n \n \n \n \n Routing Matrix (View -> Routing Matrix)\n \n \n\n\nOR\n\n \n \n \n \n \n Track routing settings (IO button on track)\n \n \n\n\n\n\nSet each track to a separate MIDI channel, so each track number maps to its corresponding channel number.\nSetting up Unreal Engine🔗\nBased on this forum thread\n\n\nEnable MIDI Device Support Plugin\n\n \n \n \n \n\n\n\n\nImport Midi Blueprints\n\n\nCreate Blueprint Interface with OnNoteAction and OffNoteAction functions called MidiListener\n\n\nSet Game Instance Class via Edit -> Project Settings -> Maps & Modes -> Game Instance -> Game Instance Class\n\n \n \n \n \n\n\n\n\nSet MidiDeviceId in MidiManager to map to the output of unreal_port (You can find this out from the debug logs in the console)\n\n\nPlace MidiDebug in the scene to print note debug information to the console\n\n\nPlace TestListener in the scene and set MidiChannel to whichever track # in Reaper\n\n\nTest it out🔗\nIf you have added MIDI to the track, set the MidiInput number and MidiChannel number on the TestListener. Hit play in Unreal Engine and then Play in Reaper, the TestListener cube should respond to MIDI input.\n","id":"https://doingstuff.dev/posts/reaper-midi-unreal-engine/","title":"Sending MIDI from Reaper to Unreal Engine"},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"body":"This is a quick little blog post for how to install QEMU for ARM on Debian 7.0 (Wheezy).\nInstalling Toolchains🔗\nEdit /etc/apt/sources.list and add\ndeb http://emdebian.org/debian/ stable main\ndeb http://ftp.us.debian.org/debian/ squeeze main\n\nThe squeeze repo is for the package libgmp3c2 that is unavailable on wheezy.\nInstall the emdebian public key\n# apt-get install emdebian-archive-keyring\n# apt-get update\n\nInstall ARM toolchains\n# apt-get install linux-libc-dev-armel-cross libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi gcc-4.4-arm-linux-gnueabi g++-4.4-arm-linux-gnueabi\n\nInstalling QEMU🔗\nInstall QEMU\n# apt-get install qemu qemu-user-static\n\nOptional: Install QEMU GUI\n# apt-get install aqemu\n\nHello ARM🔗\nTime to test everything is working.\nhelloarm.s\n.text\n.globl _start\n_start:\n mov r0, #5 @ Load register r0 with the value 5\n mov r1, #4 @ Load register r1 with the value 4\n add r2, r1, r0 @ Add r0 and r1 and store in r2\n\nstop: b stop @ Infinite loop to stop execution\n\nAssemble, Link, Build\n$ arm-linux-gnueabi-as -o helloarm.o helloarm.s\n$ arm-linux-gnueabi-ld -o helloarm.elf helloarm.o\n$ arm-linux-gnueabi-objcopy -O binary helloarm.elf helloarm.bin\n\nSetup flash.bin\n$ dd if=/dev/zero of=flash.bin bs=4096 count=4096\n$ dd if=helloarm.bin of=flash.bin bs=4096 conv=notrunc\n\nLaunch QEMU\n$ qemu-system-arm -M connex -pflash flash.bin -nographic -serial /dev/null\n\nThere should now be a (qemu) prompt, type info registers and should see something like this\nR00=00000005 R01=00000004 R02=00000009 R03=00000000\nR04=00000000 R05=00000000 R06=00000000 R07=00000000\nR08=00000000 R09=00000000 R10=00000000 R11=00000000\nR12=00000000 R13=00000000 R14=00000000 R15=0000000c\nPSR=400001d3 -Z-- A svc32\n\nR02=00000009 Register 2 has the value 9 in it so everything is working.\n","id":"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/","title":"Setup QEMU for ARM on Debian Wheezy"}},"docInfo":{"https://doingstuff.dev/":{"body":0,"title":2},"https://doingstuff.dev/posts/c64-puzzle/":{"body":315,"title":3},"https://doingstuff.dev/posts/ctf-innoctf-2019/":{"body":137,"title":3},"https://doingstuff.dev/posts/ctf-peactf-2019/":{"body":752,"title":3},"https://doingstuff.dev/posts/elf-shared-library-version/":{"body":289,"title":6},"https://doingstuff.dev/posts/floating-point-hell/":{"body":252,"title":3},"https://doingstuff.dev/posts/home-assistant-dashboard-tablet/":{"body":795,"title":7},"https://doingstuff.dev/posts/homelab-adventure-part-1/":{"body":316,"title":6},"https://doingstuff.dev/posts/homelab-adventure-part-2/":{"body":505,"title":6},"https://doingstuff.dev/posts/homelab-adventure-part-3/":{"body":224,"title":6},"https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/":{"body":501,"title":5},"https://doingstuff.dev/posts/reaper-midi-unreal-engine/":{"body":172,"title":5},"https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/":{"body":213,"title":5}},"length":13},"lang":"English"} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..40760f6 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,84 @@ + + + + https://doingstuff.dev/ + + + https://doingstuff.dev/page/1/ + + + https://doingstuff.dev/page/2/ + + + https://doingstuff.dev/pages/about/ + + + https://doingstuff.dev/posts/ + + + https://doingstuff.dev/posts/c64-puzzle/ + 2020-02-27 + + + https://doingstuff.dev/posts/ctf-innoctf-2019/ + 2019-07-19 + + + https://doingstuff.dev/posts/ctf-peactf-2019/ + 2019-07-26 + + + https://doingstuff.dev/posts/elf-shared-library-version/ + 2023-03-22 + + + https://doingstuff.dev/posts/floating-point-hell/ + 2014-03-16 + + + https://doingstuff.dev/posts/home-assistant-dashboard-tablet/ + 2024-05-27 + + + https://doingstuff.dev/posts/homelab-adventure-part-1/ + 2019-11-09 + + + https://doingstuff.dev/posts/homelab-adventure-part-2/ + 2020-02-06 + + + https://doingstuff.dev/posts/homelab-adventure-part-3/ + 2023-03-29 + + + https://doingstuff.dev/posts/homelab-switching-salt-to-ansible/ + 2024-03-20 + + + https://doingstuff.dev/posts/reaper-midi-unreal-engine/ + 2022-04-11 + + + https://doingstuff.dev/posts/setup-qemu-for-arm-on-wheezy/ + 2014-01-01 + + + https://doingstuff.dev/tags/ + + + https://doingstuff.dev/tags/ctf/ + + + https://doingstuff.dev/tags/home-assistant/ + + + https://doingstuff.dev/tags/homelab/ + + + https://doingstuff.dev/tags/linux/ + + + https://doingstuff.dev/tags/music/ + + diff --git a/tags/ctf/index.html b/tags/ctf/index.html new file mode 100644 index 0000000..c65ae19 --- /dev/null +++ b/tags/ctf/index.html @@ -0,0 +1,91 @@ + + + + + + + + + + CTF - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+

Tag: CTF

+ +
+ + + + + + +
+
+ + + + + + + diff --git a/tags/home-assistant/index.html b/tags/home-assistant/index.html new file mode 100644 index 0000000..219123f --- /dev/null +++ b/tags/home-assistant/index.html @@ -0,0 +1,84 @@ + + + + + + + + + + Home Assistant - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+

Tag: Home Assistant

+ +
+ + + + + + +
+
+ + + + + + + diff --git a/tags/homelab/index.html b/tags/homelab/index.html new file mode 100644 index 0000000..604ba86 --- /dev/null +++ b/tags/homelab/index.html @@ -0,0 +1,105 @@ + + + + + + + + + + Homelab - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ + + + + + + + +
+
+ + + + + + + diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000..e6f829f --- /dev/null +++ b/tags/index.html @@ -0,0 +1,107 @@ + + + + + + + + + + Tags - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+

Tags

+ +
+ + + + + + +
+
+ + + + + + + diff --git a/tags/linux/index.html b/tags/linux/index.html new file mode 100644 index 0000000..269e261 --- /dev/null +++ b/tags/linux/index.html @@ -0,0 +1,91 @@ + + + + + + + + + + Linux - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+

Tag: Linux

+ +
+ + + + + + +
+
+ + + + + + + diff --git a/tags/music/index.html b/tags/music/index.html new file mode 100644 index 0000000..dce21b9 --- /dev/null +++ b/tags/music/index.html @@ -0,0 +1,84 @@ + + + + + + + + + + Music - Doing Stuff + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + Posts + + RSS + + About + + +
+
+
+
+ +
+

Tag: Music

+ +
+ + + + + + +
+
+ + + + + + +