Ver Fonte

convert to hugo

Jason há 7 meses atrás
pai
commit
25a26b8307
100 ficheiros alterados com 17198 adições e 24 exclusões
  1. 6 0
      .gitmodules
  2. 6 0
      archetypes/default.md
  3. 0 14
      build.sh
  4. 0 9
      compiled/01-gists.sh
  5. 28 0
      config.toml
  6. 6 0
      content/_index.md
  7. 69 0
      content/posts/gist/2013-04-30/5486455.md
  8. 236 0
      content/posts/gist/2013-06-06/5719743.md
  9. 76 0
      content/posts/gist/2013-06-13/5770182.md
  10. 109 0
      content/posts/gist/2013-12-23/8105640.md
  11. 153 0
      content/posts/gist/2014-02-28/9264937.md
  12. 76 0
      content/posts/gist/2014-03-05/9359839.md
  13. 171 0
      content/posts/gist/2014-07-25/382ce730f1f4c0fa51c2.md
  14. 276 0
      content/posts/gist/2014-07-29/542f067143918c237834.md
  15. 209 0
      content/posts/gist/2014-07-30/e5d2776d44f7ee31820a.md
  16. 16 0
      content/posts/gist/2014-09-03/169489838b9e5ee0d100.md
  17. 436 0
      content/posts/gist/2014-12-18/0ac511e0a3ec0cd5cf4a.md
  18. 185 0
      content/posts/gist/2015-02-28/1e8f24628ab13282145a.md
  19. 215 0
      content/posts/gist/2015-02-28/ae3fe23d8b6e0e5a36d1.md
  20. 33 0
      content/posts/gist/2015-03-26/0199179c7f57ea7a379a.md
  21. 39 0
      content/posts/gist/2015-04-22/23dc705d3a181f532484.md
  22. 31 0
      content/posts/gist/2015-04-22/d75343d1a8f7761212f6.md
  23. 46 0
      content/posts/gist/2015-07-13/2f8bc9aeabf8045e34c0.md
  24. 38 0
      content/posts/gist/2015-08-06/7783eac88f2fc8d914a7.md
  25. 103 0
      content/posts/gist/2015-08-19/4cf9bf1096c5d113a01a.md
  26. 67 0
      content/posts/gist/2016-03-04/0edc8df5ed5916434da2.md
  27. 175 0
      content/posts/gist/2016-03-23/7e547987c77cef5aa9fa.md
  28. 100 0
      content/posts/gist/2016-07-24/ee246668d672385bc451feab8b5bbad9.md
  29. 16 0
      content/posts/gist/2017-01-24/b19b585ee2379266d03ac1ee8f53d29f.md
  30. 25 0
      content/posts/gist/2018-07-27/fc3aa1bb41da024989c51c6ba968c3da.md
  31. 182 0
      content/posts/gist/2019-02-12/04805514b1fc07310000e8c770b6486c.md
  32. 55 0
      content/posts/gist/2019-03-27/e5f8dc43c748032917b25af478ef94df.md
  33. 152 0
      content/posts/gist/2019-07-21/54405be477a30d3588e47838cc91df9d.md
  34. 27 0
      content/posts/gist/2019-08-20/7413a1559856fd251657d93b28fbc366.md
  35. 20 0
      content/posts/gist/2020-01-16/0cbebc6297f24e39bba841f0a88fc459.md
  36. 68 0
      content/posts/gist/2020-01-29/c4da3b99bcdbf9c01a3d82a73211233d.md
  37. 7 0
      content/posts/new-site-with-hugo.md
  38. 0 1
      html
  39. 0 0
      layouts/partials/footer.html
  40. 17 0
      layouts/partials/header.html
  41. 93 0
      public/categories/index.html
  42. 14 0
      public/categories/index.xml
  43. 29 0
      public/css/my.css
  44. 406 0
      public/css/style.css
  45. 0 0
      public/images/Schwarzenberger.png
  46. 0 0
      public/images/cows.jpg
  47. 3434 0
      public/index.xml
  48. 1 0
      public/page/1/index.html
  49. 479 0
      public/page/2/index.html
  50. 480 0
      public/page/3/index.html
  51. 148 0
      public/page/4/index.html
  52. 172 0
      public/posts/gist/2013-04-30/5486455/index.html
  53. 343 0
      public/posts/gist/2013-06-06/5719743/index.html
  54. 182 0
      public/posts/gist/2013-06-13/5770182/index.html
  55. 230 0
      public/posts/gist/2013-12-23/8105640/index.html
  56. 259 0
      public/posts/gist/2014-02-28/9264937/index.html
  57. 182 0
      public/posts/gist/2014-03-05/9359839/index.html
  58. 288 0
      public/posts/gist/2014-07-25/382ce730f1f4c0fa51c2/index.html
  59. 395 0
      public/posts/gist/2014-07-29/542f067143918c237834/index.html
  60. 326 0
      public/posts/gist/2014-07-30/e5d2776d44f7ee31820a/index.html
  61. 119 0
      public/posts/gist/2014-09-03/169489838b9e5ee0d100/index.html
  62. 556 0
      public/posts/gist/2014-12-18/0ac511e0a3ec0cd5cf4a/index.html
  63. 305 0
      public/posts/gist/2015-02-28/1e8f24628ab13282145a/index.html
  64. 335 0
      public/posts/gist/2015-02-28/ae3fe23d8b6e0e5a36d1/index.html
  65. 136 0
      public/posts/gist/2015-03-26/0199179c7f57ea7a379a/index.html
  66. 159 0
      public/posts/gist/2015-04-22/23dc705d3a181f532484/index.html
  67. 134 0
      public/posts/gist/2015-04-22/d75343d1a8f7761212f6/index.html
  68. 152 0
      public/posts/gist/2015-07-13/2f8bc9aeabf8045e34c0/index.html
  69. 141 0
      public/posts/gist/2015-08-06/7783eac88f2fc8d914a7/index.html
  70. 206 0
      public/posts/gist/2015-08-19/4cf9bf1096c5d113a01a/index.html
  71. 170 0
      public/posts/gist/2016-03-04/0edc8df5ed5916434da2/index.html
  72. 295 0
      public/posts/gist/2016-03-23/7e547987c77cef5aa9fa/index.html
  73. 192 0
      public/posts/gist/2016-07-24/ee246668d672385bc451feab8b5bbad9/index.html
  74. 122 0
      public/posts/gist/2017-01-24/b19b585ee2379266d03ac1ee8f53d29f/index.html
  75. 131 0
      public/posts/gist/2018-07-27/fc3aa1bb41da024989c51c6ba968c3da/index.html
  76. 303 0
      public/posts/gist/2019-02-12/04805514b1fc07310000e8c770b6486c/index.html
  77. 161 0
      public/posts/gist/2019-03-27/e5f8dc43c748032917b25af478ef94df/index.html
  78. 267 0
      public/posts/gist/2019-07-21/54405be477a30d3588e47838cc91df9d/index.html
  79. 136 0
      public/posts/gist/2019-08-20/7413a1559856fd251657d93b28fbc366/index.html
  80. 128 0
      public/posts/gist/2020-01-16/0cbebc6297f24e39bba841f0a88fc459/index.html
  81. 174 0
      public/posts/gist/2020-01-29/c4da3b99bcdbf9c01a3d82a73211233d/index.html
  82. 106 0
      public/posts/gist_0199179c7f57ea7a379a/index.html
  83. 109 0
      public/posts/gist_04805514b1fc07310000e8c770b6486c/index.html
  84. 109 0
      public/posts/gist_0ac511e0a3ec0cd5cf4a/index.html
  85. 109 0
      public/posts/gist_0cbebc6297f24e39bba841f0a88fc459/index.html
  86. 106 0
      public/posts/gist_0edc8df5ed5916434da2/index.html
  87. 106 0
      public/posts/gist_169489838b9e5ee0d100/index.html
  88. 109 0
      public/posts/gist_1e8f24628ab13282145a/index.html
  89. 109 0
      public/posts/gist_23dc705d3a181f532484/index.html
  90. 109 0
      public/posts/gist_2f8bc9aeabf8045e34c0/index.html
  91. 106 0
      public/posts/gist_382ce730f1f4c0fa51c2/index.html
  92. 106 0
      public/posts/gist_4cf9bf1096c5d113a01a/index.html
  93. 106 0
      public/posts/gist_542f067143918c237834/index.html
  94. 109 0
      public/posts/gist_54405be477a30d3588e47838cc91df9d/index.html
  95. 106 0
      public/posts/gist_5486455/index.html
  96. 112 0
      public/posts/gist_5719743/index.html
  97. 109 0
      public/posts/gist_5770182/index.html
  98. 109 0
      public/posts/gist_7413a1559856fd251657d93b28fbc366/index.html
  99. 106 0
      public/posts/gist_7783eac88f2fc8d914a7/index.html
  100. 0 0
      public/posts/gist_7e547987c77cef5aa9fa/index.html

+ 6 - 0
.gitmodules

@@ -0,0 +1,6 @@
+[submodule "themes/ananke"]
+	path = themes/ananke
+	url = https://github.com/budparr/gohugo-theme-ananke.git
+[submodule "themes/anubis"]
+	path = themes/anubis
+	url = https://github.com/mitrichius/hugo-theme-anubis.git

+ 6 - 0
archetypes/default.md

@@ -0,0 +1,6 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+---
+

+ 0 - 14
build.sh

@@ -1,14 +0,0 @@
-dir=/var/www/1j.nz/
-
-head -n 10 $dir/template/index.html
-
-cat $dir/template/header.html
-cat $dir/sections/*.html
-
-ls $dir/compiled/*.sh | bash
-
-cat $dir/template/footer.html
-
-echo "<!-- generated: $(date -Iseconds) -->"
-
-tail -n 3 $dir/template/index.html

+ 0 - 9
compiled/01-gists.sh

@@ -1,9 +0,0 @@
-echo "	<section class=\"gists\">"
-echo "		<h3>Gists</h3>"
-curl --silent -s "https://api.github.com/users/master5o1/gists" \
- | jq '.[0:10] | map("<article class=\"gist\"><a href=\"\(.html_url)\">\(.files | keys | .[0])</a><time datetime=\"\(.created_at)\">\(.created_at)</time><p class=\"caption\">\(.description)</p></article>") | add' \
- | sed -e 's/\\"/"/g' \
- | cut -c 2- | rev | cut -c 2- | rev \
- | sed -e 's/^/\t\t/'
-echo "	</section>"
-echo ""

+ 28 - 0
config.toml

@@ -0,0 +1,28 @@
+languageCode = 'en-us'
+baseUrl = 'https://jason.schwarzenberger.nz/'
+title = 'Jason Schwarzenberger'
+description = 'Software engineer from New Zealand.'
+theme = 'anubis'
+paginate = 10.0
+disqusShortname = ''
+googleAnalytics = ''
+[[menu.main]]
+identifier = 'posts'
+name = 'Archive'
+title = 'Archive'
+url = '/posts/'
+weight = 1.0
+
+[[menu.main]]
+identifier = 'tags'
+name = 'Tags'
+title = 'Tags'
+url = '/tags/'
+weight = 1.0
+
+[params]
+author = 'Jason'
+description = 'Software engineer from New Zealand.'
+images = ['images/Schwarzenberger.png']
+customCSS = ['css/my.css']
+dateFormat = '2006-01-02 15:04'

+ 6 - 0
content/_index.md

@@ -0,0 +1,6 @@
+**email:** jason@master5o1.com  
+**repositories:** [github.com/master5o1](https://github.com/master5o1), [git.1j.nz](https://git.1j.nz)  
+**twitter:** [https://twitter.com/master5o1](@master5o1)  
+**keybase:** [master5o1](https://keybase.io/master5o1)  
+
+![cows](/images/cows.jpg)

+ 69 - 0
content/posts/gist/2013-04-30/5486455.md

@@ -0,0 +1,69 @@
+---
+title: "lolcrypt.py"
+date: 2013-04-30T03:33:46Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/5486455)
+
+
+
+
+
+```python
+# vim: noai:ts=4:sw=4:expandtab:syntax=python
+
+import re
+from xbotpp.modules import Module
+
+
+class lolcrypt(Module):
+    """\
+    Provide lolcryption.
+    """
+
+    def __init__(self):
+        Module.__init__(self)
+
+    def action(self, bot, event, args, buf):
+        """\
+        Lolcrypt the given arguments, or the buffer (if present)
+
+        Pass "-d" as the first parameter to de-lolcrypt.
+        """
+
+        if len(args) is 0 and buf == "":
+            return "%slolcrypt [-d] <text> or %scommand | lolcrypt [-d]" % (self.bot.prefix, self.bot.prefix)
+
+        delol = (len(args) != 0 and args[0] == "-d")
+        cipher = list("aeioubcdfghjklmnpqrstvwxyz")
+        text = buf if buf != "" else " ".join(args[1:]) if delol else " ".join(args[0:])
+        mod = lambda a, n: ((a%n)+n)%n
+        buf = "" 
+
+        for char in text:
+            caps = re.match("[A-Z]", char)
+            char = char.lower()
+            
+            if not char in cipher:
+                buf += char.upper() if caps else char
+                continue
+            
+            i = cipher.index(char)
+            if re.match("[" + "".join(cipher[0:5]) + "]", char):
+                if delol:
+                    char = cipher[mod(i-2,5)]
+                else:
+                    char = cipher[(i+2)%5]
+            else:
+                if delol:
+                    char = cipher[mod(i-15,21)+5]
+                else:
+                    char = cipher[(i+5)%21+5]
+
+            buf += char.upper() if caps else char
+
+        return buf
+
+```
+

+ 236 - 0
content/posts/gist/2013-06-06/5719743.md

@@ -0,0 +1,236 @@
+---
+title: "array things.js"
+date: 2013-06-06T06:47:55Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/5719743)
+
+
+I've been nursing this in a JS Fiddle for a short time now. Just been playing with the LINQ methods and how they would be in JS.
+
+I find OrderBy and GroupBy are interesting.
+
+
+```javascript
+var run = function (arr) {
+    'use strict';
+    var onlyStrings = l('x => typeof x === "string"');
+    var onlyNums = l('x => typeof x === "number"');
+    var selector = l('x => typeof x');
+    var grouper = l('x => typeof x');
+    var selectE = l('x => x');
+    var evenIndex = l('(x, index) => index % 2 === 0');
+
+    console.clear();
+    console.log(l.memory());
+    console.log(arr.Select(), arr.Count());
+    console.log(arr.First(), arr.Last());
+    console.log('First', arr.First(onlyStrings));
+    console.log('Last', arr.Last(onlyStrings));
+    console.log('Select', arr.Select(selector));
+    console.log('Count', arr.Count(onlyStrings));
+    console.log('GroupBy', arr.GroupBy(grouper));
+    console.log('Sum', arr.Sum(selectE));
+    console.log('OrderBy', arr.OrderBy(selectE));
+    console.log('OrderByDescending', arr.OrderByDescending(selectE));
+    console.log('GroupBy (x, index) => index % 2 === 0', arr.GroupBy(evenIndex));
+    console.log('GroupBy (x, index) => index % 2 === 0', arr.GroupBy('(x, index) => index % 2 === 0'));
+
+};
+
+var l = (function () {
+    var memory = {};
+    var lx = function (lambdaString) {
+        if (memory[lambdaString] !== undefined) {
+            return memory[lambdaString];
+        }
+
+        var oneArg = /([a-zA-Z_][a-zA-Z0-9_]*)\ [\=\-]\>\ (.*)/;
+        var multiArgs = /\((([a-zA-Z_][a-zA-Z0-9_]*,?\ ?)+)\)\ [\=\-]\>\ (.*)/;
+        var parts = lambdaString.match(oneArg) || lambdaString.match(multiArgs);
+        var param = parts[1];
+        var body = parts[parts.length - 1];
+
+        body = body.split(/; ?/);
+        body = body.map(function (line, i) {
+            line = line.replace(/(^ +)|( +$)/, '');
+            if (i === (body.length - 1) && !/return/.test(line)) {
+                line = 'return ' + line;
+            }
+            return '  ' + line;
+        });
+        memory[lambdaString] = new Function(param, body.join(';\n') + ';');
+        return memory[lambdaString];
+    };
+    lx.memory = function () {
+        return memory;
+    };
+    return lx;
+})();
+
+var first = function (arr, filter) {
+    filter = filter || (function (e) {
+        return true;
+    });
+    var filtered = arr.filter(filter);
+    return filtered[0];
+};
+var last = function (arr, filter) {
+    filter = filter || (function (e) {
+        return true;
+    });
+    var filtered = arr.filter(filter);
+    return filtered[filtered.length - 1];
+};
+var select = function (arr, selector) {
+    selector = selector || (function (e) {
+        return e;
+    });
+    return arr.map(selector);
+};
+var count = function (arr, filter) {
+    filter = filter || (function (e) {
+        return true;
+    });
+    return arr.filter(filter).length;
+};
+var groupBy = function (arr, grouper) {
+    grouper = grouper || (function (e) {
+        return e;
+    });
+    var grouping = {};
+    arr.forEach(function (e, i, a) {
+        var groups = this;
+        var group = grouper(e, i, a);
+        if (groups[group] === undefined) {
+            groups[group] = [];
+        }
+        groups[group].push(e);
+    }, grouping);
+    return Object.keys(grouping).map(function (e) {
+        return grouping[e];
+    });
+};
+var sum = function (arr, selector, initial) {
+    initial = initial || 0;
+    selector = selector || (function (e) {
+        return e;
+    });
+    return arr.reduce(function (p, c) {
+        return p + selector(c);
+    }, initial);
+};
+var orderBy = function (arr, selector) {
+    selector = selector || (function (e) {
+        return e;
+    });
+    var compare = function (a, b) {
+        var type = typeof selector(a);
+        if (type === 'number') {
+            return selector(a) - selector(b);
+        } else if (type === 'string') {
+            return selector(a).localeCompare(selector(b));
+        }
+    };
+    return [].slice.call(arr).sort(compare);
+};
+var orderByDescending = function (arr, selector) {
+    return orderBy(arr, selector).reverse();
+};
+var take = function (arr, number) {
+    return arr.slice(0, number);
+};
+var skip = function (arr, number) {
+    return arr.slice(number);
+};
+var any = function (arr, condition) {
+    if (condition === null) {
+        return arr.length > 0;
+    }
+    return arr.some(condition);
+};
+var where = function (arr, condition) {
+    condition = condition || (function (e) {
+        return true;
+    });
+    return arr.filter(condition);
+};
+
+Array.prototype.First = function (filter) {
+    if (typeof filter === 'string') {
+        filter = l(filter);
+    }
+    return first(this, filter);
+};
+Array.prototype.Last = function (filter) {
+    if (typeof filter === 'string') {
+        filter = l(filter);
+    }
+    return last(this, filter);
+};
+Array.prototype.Select = function (selector) {
+    if (typeof selector === 'string') {
+        selector = l(selector);
+    }
+    return select(this, selector);
+};
+Array.prototype.Count = function (filter) {
+    if (typeof filter === 'string') {
+        filter = l(filter);
+    }
+
+    return count(this, filter);
+};
+Array.prototype.GroupBy = function (grouper) {
+    if (typeof grouper === 'string') {
+        grouper = l(grouper);
+    }
+    return groupBy(this, grouper);
+};
+Array.prototype.Sum = function (selector) {
+    if (typeof selector === 'string') {
+        selector = l(selector);
+    }
+    return sum(this, selector);
+};
+Array.prototype.OrderBy = function (selector) {
+    if (typeof selector === 'string') {
+        selector = l(selector);
+    }
+    return orderBy(this, selector);
+};
+Array.prototype.OrderByDescending = function (selector) {
+    if (typeof selector === 'string') {
+        selector = l(selector);
+    }
+    return orderByDescending(this, selector);
+};
+Array.prototype.Take = function (number) {
+    if (typeof number === 'string') {
+        number = l(number);
+    }
+    return take(this, number);
+};
+Array.prototype.Skip = function (number) {
+    if (typeof number === 'string') {
+        number = l(number);
+    }
+    return skip(this, number);
+};
+Array.prototype.Any = function (condition) {
+    if (typeof condition === 'string') {
+        condition = l(condition);
+    }
+    return any(this, condition);
+};
+Array.prototype.Where = function (condition) {
+    if (typeof condition === 'string') {
+        condition = l(condition);
+    }
+    return where(this, condition);
+};
+
+run([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'one', 'two', 'three']);
+```
+

+ 76 - 0
content/posts/gist/2013-06-13/5770182.md

@@ -0,0 +1,76 @@
+---
+title: "thing about Question.js"
+date: 2013-06-13T00:00:40Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/5770182)
+
+
+Why do I even do these things.
+
+
+```javascript
+// Consider this a class for the Question object.
+function Question(question) {
+  var self = this;
+  
+  // Private variables:
+  
+  var correct = null;
+  var answers = [];
+  
+  // Public Methods:
+  
+  self.getQuestion = function () {
+    // This is a 'Getter' method.
+    // It exposes the value of a (private) property of the object.
+    // The property value cannot be changed.
+    return question;
+  };
+  
+  self.getAnswers = function () {
+    // Because JavaScript passes by reference, if this Getter was set up as:
+    // return answers;
+    // Then it would be possible to overwrite the answers array.
+    // By concatenating answers onto an empty array we are actually passing
+    // a copy of the answers array.
+    return [].concat(answers);
+  };
+  
+  self.addAnswer = function (answer, isCorrect) {
+    // Add an answer to the answers array.
+    // If it exists in the array, set it as correct if it is also correct.
+    var index = answers.indexOf(answer);
+    if (index > -1) {
+      correct = isCorrect ? index : correct;
+      return;
+    }
+    answers.push(answer);
+    // Recursively call so that it can be set to correct.
+    self.addAnswer(answer, isCorrect);
+  };
+  
+  self.checkAnswer = function (answer, answerIndex) {
+    answerIndex = answerIndex || answers.indexOf(answer);
+    return answerIndex === correct;
+  };
+}
+
+
+var question = new Question('What colours are on the flag of Switzerland?');
+question.addAnswer('Black, Red and Yellow');
+question.addAnswer('Red, White and Blue');
+question.addAnswer('Red and White', true);
+question.addAnswer('Yellow and Green');
+
+console.log(question);
+
+console.log(question.getQuestion());
+
+console.log(question.getAnswers());
+
+console.log(question.checkAnswer('Black, Red and Yellow'));
+console.log(question.checkAnswer('Red and White'));
+```
+

+ 109 - 0
content/posts/gist/2013-12-23/8105640.md

@@ -0,0 +1,109 @@
+---
+title: "bookmarklet.js"
+date: 2013-12-23T22:02:42Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/8105640)
+
+
+
+
+
+| Attachment | Type | Size |
+| - | - | - |
+| [bookmarklet.js](https://gist.githubusercontent.com/master5o1/8105640/raw/470cf05c4cb7ac8c00723d3f4b696f218d4897c3/bookmarklet.js) | application/javascript | 498.0B |
+| [clickingbad_seconds_info.js](https://gist.githubusercontent.com/master5o1/8105640/raw/fb26590702f717e298df77c9b3b0ba8945877427/clickingbad_seconds_info.js) | application/javascript | 912.0B |
+| [fiddle.js](https://gist.githubusercontent.com/master5o1/8105640/raw/fb26590702f717e298df77c9b3b0ba8945877427/fiddle.js) | application/javascript | 912.0B |
+| [fiddle.manifest](https://gist.githubusercontent.com/master5o1/8105640/raw/bfdcda218c01b44ae6692d3e906dac41d6f04d45/fiddle.manifest) | text/cache-manifest | 126.0B |
+***
+
+### [bookmarklet.js](https://gist.githubusercontent.com/master5o1/8105640/raw/470cf05c4cb7ac8c00723d3f4b696f218d4897c3/bookmarklet.js) -- application/javascript, 498.0B
+```javascript
+javascript:window.setInterval(function(){$("#clickers, #sellers, #upgrades, #banks").find('[id$="_cst"]').each(function(){var b=$(this),a=b.text().replace(/[\$,]/g,""),c=a.replace(/[0-9\.]/g,""),a=1*a.replace(/[A-Z]/,""),c={Q:1E15,T:1E12,B:1E9,M:1E6}[c]||1,a=a*c,d=$("#seller_rps"),c=$("#sell_amt"),d=d.text().replace(/,/g,""),c=c.text().replace(/,/g,""),a=(a-c)/d,b="#"+b.attr("id").replace("_cst","_btn"),b=$(b);0<a?(a="Purchase in "+a.toFixed(0)+" seconds",b.html(a)):b.html("Purchase")})},1E3);
+```
+***
+### [clickingbad_seconds_info.js](https://gist.githubusercontent.com/master5o1/8105640/raw/fb26590702f717e298df77c9b3b0ba8945877427/clickingbad_seconds_info.js) -- application/javascript, 912.0B
+```javascript
+window.setInterval(function () {
+	$('#clickers, #sellers, #upgrades, #banks').find('[id$="_cst"]').each(function () {
+		var multipliers = {
+			Qt: 1E18,
+			Q: 1E15,
+			T: 1E12,
+			B: 1E9,
+			M: 1E6
+		};
+		var $this = $(this);
+		var price = $this.text().replace(/[\$,]/g, "");
+		var multiplier = price.replace(/[0-9\.]/g, "");
+		price = price.replace(/[A-Z]/gi, "") * 1;
+		multiplier = multipliers[multiplier] || 1;
+		price = price * multiplier;
+		var $income = $("#seller_rps");
+		var $cash = $("#sell_amt");
+		var income = $income.text()
+			.replace(/,/g, "");
+		var cash = $cash.text()
+			.replace(/,/g, "");
+		var seconds = (price - cash) / income;
+		var buybtn = "#" + $this.attr("id")
+				.replace("_cst", "_btn");
+		var $buybtn = $(buybtn);
+		if (seconds > 0) {
+			var text = "Purchase in " + seconds.toFixed(0) + " seconds";
+			$buybtn.html(text);
+		} else {
+			$buybtn.html('Purchase');
+		}
+	});
+}, 1E3);
+```
+***
+### [fiddle.js](https://gist.githubusercontent.com/master5o1/8105640/raw/fb26590702f717e298df77c9b3b0ba8945877427/fiddle.js) -- application/javascript, 912.0B
+```javascript
+window.setInterval(function () {
+	$('#clickers, #sellers, #upgrades, #banks').find('[id$="_cst"]').each(function () {
+		var multipliers = {
+			Qt: 1E18,
+			Q: 1E15,
+			T: 1E12,
+			B: 1E9,
+			M: 1E6
+		};
+		var $this = $(this);
+		var price = $this.text().replace(/[\$,]/g, "");
+		var multiplier = price.replace(/[0-9\.]/g, "");
+		price = price.replace(/[A-Z]/gi, "") * 1;
+		multiplier = multipliers[multiplier] || 1;
+		price = price * multiplier;
+		var $income = $("#seller_rps");
+		var $cash = $("#sell_amt");
+		var income = $income.text()
+			.replace(/,/g, "");
+		var cash = $cash.text()
+			.replace(/,/g, "");
+		var seconds = (price - cash) / income;
+		var buybtn = "#" + $this.attr("id")
+				.replace("_cst", "_btn");
+		var $buybtn = $(buybtn);
+		if (seconds > 0) {
+			var text = "Purchase in " + seconds.toFixed(0) + " seconds";
+			$buybtn.html(text);
+		} else {
+			$buybtn.html('Purchase');
+		}
+	});
+}, 1E3);
+```
+***
+### [fiddle.manifest](https://gist.githubusercontent.com/master5o1/8105640/raw/bfdcda218c01b44ae6692d3e906dac41d6f04d45/fiddle.manifest) -- text/cache-manifest, 126.0B
+```
+name: Clicking bad bookmarklet
+description: Clicking bad thing
+authors:
+  - Jason Schwarzenberger
+resources:
+normalize_css: no
+```
+

+ 153 - 0
content/posts/gist/2014-02-28/9264937.md

@@ -0,0 +1,153 @@
+---
+title: "brainfuck.js"
+date: 2014-02-28T03:56:45Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/9264937)
+
+
+unfinshed brainfuck interpreter in js. Still need to do [ and ].
+
+
+```javascript
+console.group('helloWorld');
+var helloWorldScript = 'this is hello world: ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.';
+var helloWorld = new BrainFuck(helloWorldScript);
+console.log('script:', helloWorldScript);
+console.log('validate:', helloWorld.validate());
+console.log('execute:', helloWorld.execute());
+console.groupEnd('helloWorld');
+
+
+function BrainFuck(str, cells) {
+    var script = str.replace(/[^<>\-\+\[\]\.\,]/g, '');
+    var MAX_CELLS = cells || 30000;
+
+    this.validate = function () {
+        return validate();
+    };
+    this.execute = function (stdin) {
+        return execute(stdin || '');
+    };
+
+    function checkBrackets() {
+        var stack = [];
+        var arr = script.replace(/[^\[\]]/g, '').split('');
+        var openers = [],
+            closers = [];
+        if (arr.length === 0) {
+            return true;
+        }
+        if (arr[0] !== '[') {
+            return false;
+        }
+        for (var i = 0; i < arr.length; i++) {
+            if (arr[i] === '[') {
+                stack.push(arr[i]);
+                openers.push(arr[i]);
+            } else if (arr[i] === ']') {
+                stack.pop();
+                closers.push(arr[i]);
+            }
+        }
+        if (stack.length > 0 || openers.length !== closers.length) {
+            return false;
+        }
+        return true;
+    }
+
+    function bracketsPc() {
+        var stack = [];
+        var brackets = {};
+        var arr = script.split('');
+        for (var i = 0; i < arr.length; i++) {
+            if (arr[i] === '[') {
+                stack.push(i);
+                brackets[i] = {
+                    '[': i,
+                    ']': -1
+                };
+            } else if (arr[i] === ']') {
+                var pc = stack.pop();
+                brackets[pc][']'] = i;
+                brackets[i] = {
+                    '[': pc,
+                    ']': i
+                };
+            }
+        }
+        return brackets;
+    }
+
+    function validate() {
+        var matchingBrackets = checkBrackets();
+        return matchingBrackets;
+    }
+
+    function execute(stdin) {
+        if (!validate()) {
+            throw new Error("Invalid Syntax");
+        }
+
+        var index = 0;
+        var arr = new Array(MAX_CELLS + 1).join('a').split('');
+        var stdin_arr = stdin.split('');
+        var stdout = [];
+        var pc_stack = [];
+        var brackets = bracketsPc();
+
+        arr = arr.map(function () {
+            return 0;
+        });
+
+        var opcodes = {};
+        opcodes['<'] = function (pc) {
+            index -= 1;
+            return pc;
+        };
+        opcodes['>'] = function (pc) {
+            index += 1;
+            return pc;
+        };
+        opcodes['+'] = function (pc) {
+            arr[index] += 1;
+            return pc;
+        };
+        opcodes['-'] = function (pc) {
+            arr[index] -= 1;
+            return pc;
+        };
+        opcodes['['] = function (pc) {
+            if (arr[index] === 0) {
+                pc = brackets[pc][']'];
+            }
+            return pc;
+        };
+        opcodes[']'] = function (pc) {
+            if (arr[index] !== 0) {
+                pc = brackets[pc]['['];
+            }
+            return pc;
+        };
+        opcodes[','] = function (pc) {
+            var chr = stdin_arr.shift();
+            arr[index] = chr.charCodeAt(0);
+            return pc;
+        };
+        opcodes['.'] = function (pc) {
+            stdout.push(String.fromCharCode(arr[index]));
+            return pc;
+        };
+
+        var ops = script.split('');
+        for (var pc = 0; pc < ops.length; pc++) {
+            var op = ops[pc];
+            pc = opcodes[op](pc);
+        }
+
+        return stdout.join('');
+    }
+}
+```
+

+ 76 - 0
content/posts/gist/2014-03-05/9359839.md

@@ -0,0 +1,76 @@
+---
+title: "gistfile1.txt"
+date: 2014-03-05T02:02:15Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/9359839)
+
+
+WIP: LOLcryption in BrainFuck. Cannot handle characters with a code less than 'a'. Will infinite loop in that case. If it isn't an [a-z] then it should just echo the character. Try it out at http://brainfuck.master5o1.com
+
+
+```text
+,[
+ ---------- ---------- ---------- ---------- ----------
+ ---------- ---------- ---------- ---------- -------              a
+ [-                                                               b
+  [-                                                              c
+   [-                                                             d
+    [-                                                            e
+     [-                                                           f
+      [-                                                          g
+       [-                                                         h
+         [-                                                       i
+          [-                                                      j
+           [-                                                     k
+            [-                                                    l
+             [-                                                   m
+              [-                                                  n
+               [-                                                 o
+                [-                                                p
+                 [-                                               q
+                  [-                                              r
+                   [-                                             s
+                    [-                                            t
+                     [-                                           u
+                      [-                                          v
+                       [-                                         w
+                        [-                                        x
+                         [-                                       y
+                          [-                                      z
+                           [-]
+                          >+<]
+                         >+<]
+                        >+<]
+                       >++<]
+                      >+++<]
+                     >--<]
+                    >+<]
+                   >++<]
+                  >+<]
+                 >+<]
+                >+<]
+               >----- ----- ----- ----- -----<]
+              >+<]
+             >+<]
+            >+<]
+           >+<]
+          >+<]
+         >+<]
+        >+<]
+       >+<]
+      >+++<]
+     >--<]
+    >+<]
+   >++<]
+  >+++++<]
+ >
+ ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++
+ ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++
+ +++++
+ .
+ [-]<
+,]
+```
+

+ 171 - 0
content/posts/gist/2014-07-25/382ce730f1f4c0fa51c2.md

@@ -0,0 +1,171 @@
+---
+title: "BitNZ.js"
+date: 2014-07-25T23:27:46Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/382ce730f1f4c0fa51c2)
+
+
+
+
+
+| Attachment | Type | Size |
+| - | - | - |
+| [BitNZ.js](https://gist.githubusercontent.com/master5o1/382ce730f1f4c0fa51c2/raw/f1165dabdcb0ab8f14bd6d0318f80a91db84ddcd/BitNZ.js) | application/javascript | 3.2KiB |
+| [play.js](https://gist.githubusercontent.com/master5o1/382ce730f1f4c0fa51c2/raw/89824c3d61f06f5a10ddec274c943825497246eb/play.js) | application/javascript | 488.0B |
+***
+
+### [BitNZ.js](https://gist.githubusercontent.com/master5o1/382ce730f1f4c0fa51c2/raw/f1165dabdcb0ab8f14bd6d0318f80a91db84ddcd/BitNZ.js) -- application/javascript, 3.2KiB
+```javascript
+var crypto = require('crypto');
+var request = require('request');
+
+module.exports = function BitNZ(username, apiKey, apiSecret) {
+  var self = this;
+  var hostname = 'https://bitnz.com';
+  var api = '/api/0';
+  var noop = function() {};
+
+  var sign = function(obj){
+    obj = obj || {};
+    obj.nonce = new Date().getTime() + '' + new Date().getMilliseconds();
+    obj.signature = crypto.createHmac('sha256', apiSecret)
+                          .update(obj.nonce + username + apiKey)
+                          .digest('hex')
+                          .toUpperCase();
+    obj.key = apiKey;
+    return obj;
+  };
+
+  self.sign = sign;
+
+  var post = function(action, parameters, callback) {
+    callback = callback || noop;
+    console.log('URL', hostname + api + action, parameters);
+    request.post(hostname + api + action, {
+      form: parameters,
+      headers: {
+        'User-Agent': 'Mozilla/4.0 (compatible; bitNZ node.js client by master5o1)'
+      }
+    }, callback);
+  }
+
+  var get = function(action, parameters, callback) {
+    callback = callback || noop;
+    var params = [];
+    Object.keys(parameters).forEach(function(key){
+      this.push(key + '=' + parameters[key]);
+    }, params);
+    request.get(hostname + api + action + '?' + params.join('&'), callback);
+  };
+
+  // Open/Public API Calls:
+
+  self.getTicker = function(callback){
+    return get('/ticker', {}, callback);
+  };
+
+  self.getTrades = function(since, date, callback){
+    return get('/trades', {
+      since: since,
+      'since_date': date
+    }, callback);
+  };
+
+  self.getOrderBook = function(parmeters, callback){
+    return get('/orderbook', parameters, callback);
+  };
+
+  // Private API Calls:
+
+  self.getBalance = function(callback) {
+    return post('/private/balance', sign({}), callback);
+  };
+
+  self.openBids = function(callback) {
+    return post('/private/orders/buy/open', sign({}), callback);
+  };
+
+  self.openAsks = function(callback) {
+    return post('/private/orders/sell/open', sign({}), callback);
+  };
+
+  self.closedBids = function(skip, limit, callback) {
+    return post('/private/orders/buy/close', sign({
+      offset: skip,
+      limit: limit
+    }), callback);
+  };
+
+  self.closedAsks = function(skip, limit, callback) {
+    return post('/private/orders/sell/close', sign({
+      offset: skip,
+      limit: limit
+    }), callback);
+  };
+
+  self.cancelBid = function(id, callback) {
+    return post('/private/orders/buy/cancel', sign({
+      id: id
+    }), callback);
+  };
+
+  self.cancelAsk = function(id, callback) {
+    return post('/private/orders/sell/cancel', sign({
+      id: id
+    }), callback);
+  };
+
+  self.createBid = function(amount, price, callback) {
+    return post('/private/orders/buy/create', sign({
+      amount: amount,
+      price: price
+    }), callback);
+  };
+
+  self.createAsk = function(amount, price, callback) {
+    return post('/private/orders/sell/create', sign({
+      amount: amount,
+      price: price
+    }), callback);
+  };
+
+  self.depositAddress = function(callback) {
+    return post('/private/btc/address', sign({}), callback);
+  };
+
+  self.withdraw = function(address, amount, callback) {
+    return post('/private/btc/withdraw', sign({
+      address: address,
+      amount: amount
+    }), callback);
+  };
+};
+```
+***
+### [play.js](https://gist.githubusercontent.com/master5o1/382ce730f1f4c0fa51c2/raw/89824c3d61f06f5a10ddec274c943825497246eb/play.js) -- application/javascript, 488.0B
+```javascript
+var BitNZ = require('./BitNZ.js');
+
+var username = "username"
+  , apiKey = "key"
+  , apiSecret = "sekrit";
+
+var bitnz = new BitNZ(username, apiKey, apiSecret);
+
+bitnz.getBalance(function(error, response, body){
+  console.log(response.statusCode);
+  if (!error && response.statusCode === 200) {
+    console.log(body);
+  }
+});
+
+bitnz.getTicker(function(error, response, body){
+  console.log(response.statusCode);
+  if (!error && response.statusCode === 200) {
+    console.log(body);
+  }
+});
+```
+

+ 276 - 0
content/posts/gist/2014-07-29/542f067143918c237834.md

@@ -0,0 +1,276 @@
+---
+title: "BitNZService.js"
+date: 2014-07-29T10:23:12Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/542f067143918c237834)
+
+
+
+
+
+| Attachment | Type | Size |
+| - | - | - |
+| [BitNZService.js](https://gist.githubusercontent.com/master5o1/542f067143918c237834/raw/9ba5b4c3876a0bdab45e6bcb4ecd1ba0ec56320e/BitNZService.js) | application/javascript | 3.8KiB |
+| [PlayApp.js](https://gist.githubusercontent.com/master5o1/542f067143918c237834/raw/b7e80d8cd2ac0cc37586ab563670d006db445755/PlayApp.js) | application/javascript | 959.0B |
+| [index.html](https://gist.githubusercontent.com/master5o1/542f067143918c237834/raw/5158c5dd6e0ff1b0cc98390bcae99a1ee6f79e2a/index.html) | text/html | 1.2KiB |
+***
+
+### [BitNZService.js](https://gist.githubusercontent.com/master5o1/542f067143918c237834/raw/9ba5b4c3876a0bdab45e6bcb4ecd1ba0ec56320e/BitNZService.js) -- application/javascript, 3.8KiB
+```javascript
+angular.module('BitNZ', []).factory('Api', ['$http', '$log', function ($http, $log) {
+  'use strict';
+  var api = {};
+  var host = 'https://bitnz.com/api/0';
+
+  var config = {
+    username: '',
+    key: '',
+    secret: ''
+  };
+  
+  var sign = function(parameters){
+    parameters = parameters || {};
+    var d = new Date();
+    parameters.nonce = d.getTime() + ''+ d.getMilliseconds();
+    parameters.key = config.key;
+    parameters.signature = CryptoJS.algo.HMAC
+                                .create(CryptoJS.algo.SHA256, config.secret)
+                                .update(parameters.nonce + config.username + config.key)
+                                .finalize()
+                                .toString(CryptoJS.enc.Hex)
+                                .toUpperCase();
+    return parameters;
+  };
+
+  var serialize = function(parameters) {
+    var params = [];
+    Object.keys(parameters).forEach(function(key){
+      this.push(key + '=' + parameters[key]);
+    }, params);
+    return params.join('&');
+  };
+
+  var request = function(method, action, parameters){
+    var config = {
+      method: method,
+      url: host + action,
+      data: serialize(parameters),
+      headers: {}
+    };
+    if (method === 'GET') {
+      config.params = serialize(parameters);
+    }
+    if (method === 'POST') {
+      config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
+    }
+    return $http(config);
+  };
+ 
+  var get = function(action, parameters){
+      return request('GET', action, parameters);
+  };
+
+  var post = function(action, parameters){
+    return request('POST', '/private' + action, sign(parameters));
+  };
+
+  // Save keys:
+  api.authorize = function(username, key, secret){
+    if (username.key !== undefined) {
+      key = username.key;
+      secret = username.secret;
+      username = username.username;
+    }
+    config = {
+      username: username,
+      key: key,
+      secret: secret
+    };
+  };
+
+  api.sign = sign;
+
+  // Open/Public API Calls:
+  api.ticker = function(){
+    return get('/ticker', {});
+  };
+
+  api.trades = function(lastTrade, fromDate) {
+    return get('/trades', {
+      'since': lastTrade || 0,
+      'since_date': fromDate || 0
+    });
+  };
+
+  api.chart = function(fromDate, width, height, background) {
+    return host + '/trades_chart?' + serialize({
+      'since_date': fromDate || 0,
+      'width': width || 600,
+      'height': height || 400,
+      'bgcolor': background || ''
+    });
+  };
+
+  api.orderbook = function() {
+    return get('/orderbook', {});
+  };
+
+  // Private API Calls:
+
+  api.balance = function() {
+    return post('/balance', {});
+  };
+
+  api.orders_buy_open = function() {
+    return post('/orders/buy/open', {});
+  };
+
+  api.orders_sell_open = function() {
+    return post('/orders/sell/open', {});
+  };
+
+  api.orders_buy_closed = function(offset, limit) {
+    return post('/orders/buy/closed', {
+      offset: offset || 0,
+      limit: limit || 0
+    });
+  };
+
+  api.orders_sell_closed = function(offset, limit) {
+    return post('/orders/sell/closed', {
+      offset: offset || 0,
+      limit: limit || 0
+    });
+  };
+
+  api.orders_buy_cancel = function(id) {
+    return post('/orders/buy/cancel', {
+      id: id
+    });
+  };
+
+  api.orders_sell_cancel = function(id) {
+    return post('/orders/sell/cancel', {
+      id: id
+    });
+  };
+
+  api.orders_buy_create = function(amount, price) {
+    return post('/orders/buy/create', {
+      amount: amount,
+      price: price
+    });
+  };
+
+  api.orders_sell_create = function(amount, price) {
+    return post('/orders/sell/create', {
+      amount: amount,
+      price: price
+    });
+  };
+
+  api.btc_deposit_address = function() {
+    return post('/btc/address', {});
+  };
+
+  api.btc_withdraw = function(address, amount) {
+    return post('/btc/withdraw', {
+      address: address,
+      amount: amount
+    });
+  };
+
+  return api;
+}]);
+```
+***
+### [PlayApp.js](https://gist.githubusercontent.com/master5o1/542f067143918c237834/raw/b7e80d8cd2ac0cc37586ab563670d006db445755/PlayApp.js) -- application/javascript, 959.0B
+```javascript
+ var app = angular.module('Play', ['BitNZ']);
+app.controller('Example', ['$scope', '$log', 'Api', function($scope, $log, bitnz){
+  
+  $log.log('bitNZ', bitnz);
+
+  $scope.config = {
+    username: '',
+    key: '',
+    secret: ''
+  };
+
+  $scope.results = [];
+
+  $scope.Authorize = function(){
+    bitnz.authorize($scope.config);
+  };
+
+  $scope.GetTicker = function(){
+    if (!bitnz) {
+      $log.log('Uh oh!');
+      return;
+    }
+    bitnz.ticker().success(function(data, status){
+      $log.log('ticker', data, status);
+    });
+  };
+
+  $scope.GetChart = function() {
+    $scope.imageUrl = bitnz.chart();
+    return $scope.imageUrl;
+  };
+
+  $scope.OrderBook = function(){
+    bitnz.orderbook().success(function(data) {
+      $log.log('orderbook', data);
+    });
+  };
+
+  $scope.Balance = function(){
+    bitnz.balance().success(function(data) {
+      $log.log('balance', data);
+    }).error(function(){
+      $log.log('error', arguments);
+    });
+  };
+
+  
+
+}]);
+```
+***
+### [index.html](https://gist.githubusercontent.com/master5o1/542f067143918c237834/raw/5158c5dd6e0ff1b0cc98390bcae99a1ee6f79e2a/index.html) -- text/html, 1.2KiB
+```html
+<!DOCTYPE html>
+<html>
+    <head>
+        <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha256.js"></script>
+        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.17/angular.min.js"></script>
+        <script src="BitNZService.js"></script>
+        <script src="PlayApp.js"></script>
+
+    </head>
+    <body ng-app="Play">
+        <div ng-controller="Example">
+            <div>
+                <input ng-model="config.username" placeholder="Username" />
+                <input ng-model="config.key" placeholder="Key" />
+                <input ng-model="config.secret" placeholder="Secret" />
+                <button ng-click="Authorize()">Authorize</button>
+            </div>
+
+            <button ng-click="GetTicker()">Ticker</button>
+            <button ng-click="OrderBook()">OrderBook</button>
+            <button ng-click="Balance()">Balance</button>
+            
+
+            <pre style="margin-top: 50px; border: solid 1px; background: #f1f1f1; padding: 10px;">
+                Config: {{ config }}
+            </pre>
+
+            <img ng-src="{{ GetChart() }}" alt="trade chart" />
+        </div>
+    </body>
+</html>
+```
+

+ 209 - 0
content/posts/gist/2014-07-30/e5d2776d44f7ee31820a.md

@@ -0,0 +1,209 @@
+---
+title: "index.html"
+date: 2014-07-30T12:16:05Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/e5d2776d44f7ee31820a)
+
+
+
+
+
+| Attachment | Type | Size |
+| - | - | - |
+| [index.html](https://gist.githubusercontent.com/master5o1/e5d2776d44f7ee31820a/raw/544210b01298dd60e5a1c0f6efe89b99b8867db0/index.html) | text/html | 2.3KiB |
+| [pretty-bitnz.js](https://gist.githubusercontent.com/master5o1/e5d2776d44f7ee31820a/raw/d25de702b311eb7901cab11a42ddc8671eb47e9e/pretty-bitnz.js) | application/javascript | 2.8KiB |
+***
+
+### [index.html](https://gist.githubusercontent.com/master5o1/e5d2776d44f7ee31820a/raw/544210b01298dd60e5a1c0f6efe89b99b8867db0/index.html) -- text/html, 2.3KiB
+```html
+<!DOCTYPE html>
+<html>
+    <head>
+        <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha256.js"></script>
+        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.17/angular.min.js"></script>
+        <script src="libs/bitnz-angular/bitnz-angular.js"></script>
+        <script src="js/pretty-bitnz.js"></script>
+        <style>
+        </style>
+    </head>
+    <body ng-app="PrettyBitNZ">
+        <div style="border: solid 1px #000">
+            <div ng-controller="Ticker">
+                <button ng-click="Start()">Start</button> <button ng-click="Stop()">Stop</button>
+                {{ ticker }}
+            </div>
+        </div>
+        <div style="border: solid 1px #000;">
+            <form ng-controller="Configuration" ng-submit="Authorize()">
+                <input type="text" placeholder="username" ng-model="username" />
+                <input type="text" placeholder="key" ng-model="key" />
+                <input type="text" placeholder="secret" ng-model="secret" />
+                <input type="submit" value="Authorize" />
+            </form>
+        </div>
+        <div style="border: solid 1px #000">
+            <div ng-controller="Balance">
+                <button ng-click="Start()">Start</button> <button ng-click="Stop()">Stop</button>
+                {{ balance }}
+            </div>
+        </div>
+        <div style="border: solid 1px #000">
+            <div ng-controller="OrderBook">
+                <div>
+                    <button ng-click="Start()">Start</button> <button ng-click="Stop()">Stop</button>
+                </div>
+                <div style="width: 50%; float: left;">
+                    <strong>Bids</strong>
+                    <ol>
+                        <li ng-repeat="bid in orderbook.bids | priceasc | reverse">{{ bid[1] | number : 8 }} @ ${{ bid[0] | number : 8 }}</li>
+                    </ol>
+                </div>
+                <div style="width: 50%; float: right;">
+                    <strong>Asks</strong>
+                    <ol>
+                        <li ng-repeat="ask in orderbook.asks | priceasc">{{ ask[1] | number : 8 }} @ ${{ ask[0] | number : 8 }}</li>
+                    </ol>
+                </div>
+                <div style="clear: both;"></div>
+            </div>
+        </div>
+    </body>
+</html>
+```
+***
+### [pretty-bitnz.js](https://gist.githubusercontent.com/master5o1/e5d2776d44f7ee31820a/raw/d25de702b311eb7901cab11a42ddc8671eb47e9e/pretty-bitnz.js) -- application/javascript, 2.8KiB
+```javascript
+var app = angular.module('PrettyBitNZ', ['BitNZ']);
+
+app.filter('priceasc', function() {
+  return function(items) {
+    var list = items.slice();
+    list.sort(function(a, b) {
+      return a[0] - b[0];
+    });
+    return list;
+  };
+});
+
+app.filter('reverse', function() {
+  return function(items) {
+    return items.slice().reverse();
+  };
+});
+
+app.controller('Configuration', ['$scope', '$log', 'BitNZ', function($scope, $log, bitnz){
+  $scope.username = '';
+  $scope.key = '';
+  $scope.secret = '';
+
+  $scope.Authorize = function() {
+    bitnz.authorize($scope.username, $scope.key, $scope.secret);
+  };
+}]);
+
+app.controller('Ticker', ['$scope', '$interval', '$log', 'BitNZ', function($scope, $interval, $log, bitnz){
+  $scope.ticker = {};
+
+  var interval = null;
+
+  var fn = function(){
+    $log.info('run');
+    bitnz.ticker().success(function(data){
+      $log.log('ticker', data);
+      $scope.ticker = data;
+    }).error(function(data){
+      $log.error('ticker', data);
+      $scope.Stop();
+    });
+  };
+
+  $scope.Start = function() {
+    $log.info('ticker', 'start');
+    fn();
+    interval = $interval(fn, 60 * 1000);
+  };
+
+  $scope.Stop = function() {
+    $log.info('ticker', 'stop');
+    if (angular.isDefined(interval)) {
+      $interval.cancel(interval);
+      interval = undefined;
+    }
+  };
+
+}]);
+
+app.controller('OrderBook', ['$scope', '$interval', '$log', 'BitNZ', function($scope, $interval, $log, bitnz){
+  $scope.orderbook = {
+    bids: [],
+    asks: []
+  };
+
+  var interval = null;
+
+  var fn = function(){
+    $log.info('run');
+    bitnz.orderbook().success(function(data){
+      $log.log('orderbook', data);
+      $scope.orderbook = data;
+    }).error(function(data){
+      $log.error('orderbook', data);
+      $scope.Stop();
+    });
+  };
+
+  $scope.Start = function() {
+    $log.info('orderbook', 'start');
+    fn();
+    interval = $interval(fn, 60 * 1000);
+  };
+
+  $scope.Stop = function() {
+    $log.info('orderbook', 'stop');
+    if (angular.isDefined(interval)) {
+      $interval.cancel(interval);
+      interval = undefined;
+    }
+  };
+
+}]);
+
+app.controller('Balance', ['$scope', '$interval', '$log', 'BitNZ', function($scope, $interval, $log, bitnz){
+  $scope.balance = {};
+
+  var interval = null;
+
+  var fn = function(){
+    $log.info('run');
+    bitnz.balance().success(function(data){
+      if (data.result === false) {
+        $scope.Stop();
+        return;
+      }
+      $log.log('balance', data);
+      $scope.balance = data;
+    }).error(function(data){
+      $log.error('balance', data);
+      $scope.Stop();
+    });
+  };
+
+  $scope.Start = function() {
+    $log.info('balance', 'start');
+    fn();
+    interval = $interval(fn, 60 * 1000);
+  };
+
+  $scope.Stop = function() {
+    $log.info('balance', 'stop');
+    if (angular.isDefined(interval)) {
+      $interval.cancel(interval);
+      interval = undefined;
+    }
+  };
+
+}]);
+```
+

+ 16 - 0
content/posts/gist/2014-09-03/169489838b9e5ee0d100.md

@@ -0,0 +1,16 @@
+---
+title: "gistfile1.txt"
+date: 2014-09-03T01:33:51Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/169489838b9e5ee0d100)
+
+
+
+
+
+```text
+Verifying that +master5o1 is my Bitcoin username. You can send me #bitcoin here: https://onename.io/master5o1
+```
+

+ 436 - 0
content/posts/gist/2014-12-18/0ac511e0a3ec0cd5cf4a.md

@@ -0,0 +1,436 @@
+---
+title: "WebSocketRpc.js"
+date: 2014-12-18T04:29:14Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/0ac511e0a3ec0cd5cf4a)
+
+
+WebSocket RPC
+
+
+| Attachment | Type | Size |
+| - | - | - |
+| [WebSocketRpc.js](https://gist.githubusercontent.com/master5o1/0ac511e0a3ec0cd5cf4a/raw/242aff878b0c1736788e89c14ca67fec6a58cbb5/WebSocketRpc.js) | application/javascript | 7.4KiB |
+| [index.html](https://gist.githubusercontent.com/master5o1/0ac511e0a3ec0cd5cf4a/raw/c6d7194451487aa18a0163fcac7f420cf377cbc2/index.html) | text/html | 2.4KiB |
+***
+
+### [WebSocketRpc.js](https://gist.githubusercontent.com/master5o1/0ac511e0a3ec0cd5cf4a/raw/242aff878b0c1736788e89c14ca67fec6a58cbb5/WebSocketRpc.js) -- application/javascript, 7.4KiB
+```javascript
+function WebSocketRpc(url, batchOperationsDisabled) {
+  'use strict';
+  var self = this;
+  var socket = null;
+  var queue = [];
+  var history = {};
+  var methods = {};
+  var noop = function () {};
+  var noopFactory = function () {
+    return noop;
+  };
+
+  var eventHandlers = {
+    error: noop,
+    ready: noop,
+    close: noop,
+    notification: noop,
+    message: noop
+  };
+
+  var exceptions = {
+    ParseError: {
+      code: -32700,
+      message: 'Parse error'
+    },
+    MethodNotFound: {
+      code: -32601,
+      message: 'Method not found'
+    }
+  };
+
+  init();
+
+  function init() {
+    self.call = function () {
+      queue.push([].slice.call(arguments));
+      return self;
+    };
+    self.batch = function () {
+      if (batchOperationsDisabled) {
+        throw new Error('Batch Operations Disabled');
+      }
+      queue = queue.concat([].slice.call(arguments));
+      return self;
+    };
+
+    self.connect = connect;
+    self.expose = expose;
+    self.exceptions = exceptions;
+  }
+
+  function connect() {
+    socket = new WebSocket(url);
+    self.ws = socket;
+    socket.onopen = opened;
+    socket.onerror = error;
+    socket.onmessage = handler;
+    socket.onclose = onclose;
+    return self;
+  }
+
+  function opened(event) {
+    eventHandlers.ready.call(self, event);
+
+    if (batchOperationsDisabled) {
+      while (queue.length > 0) {
+        call.apply(self, queue.shift());
+      }
+    } else {
+      batch.apply(self, queue);
+    }
+
+    self.call = call;
+    self.batch = batch;
+    self.connect = noop;
+  }
+
+  function error(event) {
+    eventHandlers.error.call(self, event);
+  }
+
+  function handler(event) {
+    eventHandlers.message.call(self, event);
+    var data;
+    try {
+      data = JSON.parse(event.data);
+    } catch (e) {
+      console.error(e);
+      var request = formatResponse(exceptions.ParseError, null, {
+        id: null
+      });
+      socket.send(JSON.stringify(request));
+    }
+    if (!data) {
+      return;
+    }
+    if (Object.prototype.toString.call(data) === '[object Array]') {
+      new Batched(data, event).handle();
+      return;
+    }
+    new Single(data, event).handle();
+  }
+
+  function onclose(event) {
+    eventHandlers.close.call(self, event);
+  }
+
+  function Batched(responses, event) {
+    var _self = this;
+    var batchRequest = [];
+    var batchNofications = [];
+    _self.handle = handle;
+
+    function trySend() {
+      var combined = batchRequest.length + batchNofications.length;
+      if (combined >= responses.length) {
+        socket.send(JSON.stringify(batchRequest));
+        return;
+      }
+    }
+
+    function next(res) {
+      return function (error, result) {
+        var request = formatResponse(error, result, res);
+        batchRequest.push(request);
+        trySend();
+      };
+    }
+
+    function notify(res) {
+      return function (error, result) {
+        batchNofications.push(res);
+      };
+    }
+
+    function handle() {
+      responses.forEach(function (response) {
+        new Single(response, event, next, notify).handle();
+      });
+      return _self;
+    }
+
+    return _self;
+  }
+
+  function Single(response, event, _next, _nextNoop) {
+    var _self = this;
+    _nextNoop = _nextNoop || noopFactory;
+    _self.next = next;
+    _self.handle = handle;
+    _self.method = method;
+    _self.notification = notification;
+    _self.results = results;
+
+    function next(res) {
+      return function (error, result) {
+        var request = formatResponse(error, result, res);
+        socket.send(JSON.stringify(request));
+      };
+    }
+
+    function handle() {
+      if (response.method !== undefined && response.params !== undefined) {
+        return !!method(response, event);
+      }
+      if (response.id === null) {
+        return !!notification(response, event);
+      }
+      results(response, event);
+      return _self;
+    }
+
+    function method(response, event) {
+      var cb = methods[response.method] || rpcException(exceptions.MethodNotFound);
+      var n = _next || next;
+      if (response.id === null) {
+        n = _nextNoop || noopFactory;
+      }
+      cb.call(self, response.params, n(response), response, response.id === null);
+      return _self;
+    }
+
+    function notification(response, event) {
+      response.id = response.error === undefined ? response.id : response.error.id;
+      response.id = response.id || null;
+      if (response.id === null) {
+        console.log('notification:', response);
+        eventHandlers.notification.call(self, response.error, response.result, response, event);
+        return _self;
+      }
+      handle(response, event);
+      return _self;
+    }
+
+    function results(response, event) {
+      var item = history[response.id] || {};
+      item.response = response;
+      item.callback.call(self, item.response.error, item.response.result, item.response, item.request, event);
+      return _self;
+    }
+    return _self;
+  }
+
+  function formatResponse(error, result, response) {
+    var request = {
+      jsonrpc: '2.0',
+      id: response.id || null
+    };
+    if ( !! error) {
+      request.error = error;
+    }
+    if ( !! result) {
+      request.result = result;
+    }
+    return request;
+  }
+
+  function onErrorCallback(error) {
+    return function (params, callback, response, isNotification) {
+      callback(error);
+      var cb = onError || noop;
+      cb.call(self, error);
+    };
+  }
+
+  function rpcException(error) {
+    return function (params, callback, response, isNotification) {
+      callback(error);
+    };
+  }
+
+  function send(id) {
+    var request = collateRequest(id);
+    socket.send(JSON.stringify(request));
+  }
+
+  function collateRequest(id) {
+    var ids = id;
+    if (typeof id === 'string') {
+      return prepareRequest(id);
+    }
+    return ids.map(prepareRequest);
+  }
+
+  function prepareRequest(id) {
+    var item = history[id];
+    if (typeof item.callback !== 'function') {
+      item.request.id = null;
+    }
+    return item.request;
+  }
+
+  function identity(size, v) {
+    v = new Array(size || 20).join('.').split('').map(function () {
+      return Math.round(Math.random() * 100);
+    }).join('');
+    return (1 * v).toString(36);
+  }
+
+  function createRequest(method, parameters, callback, id) {
+    id = id || identity();
+    var request = {
+      jsonrpc: '2.0',
+      id: id || null,
+      method: method,
+      params: parameters
+    };
+    history[id] = {
+      method: method,
+      request: request,
+      callback: callback,
+      response: null
+    };
+    return id;
+  }
+
+  function call(method, parameters, callback, id) {
+    id = createRequest(method, parameters, callback, id);
+    send(id);
+    return self;
+  }
+
+  function batch(requests) {
+    if (batchOperationsDisabled) {
+      throw new Error('Batch Operations Disabled');
+    }
+    requests = [].slice.call(arguments);
+    if (requests.length === 1) {
+      call.apply(self, requests[0]);
+      return;
+    }
+    var ids = requests.map(function (request) {
+      return createRequest.apply(self, request);
+    });
+    send(ids);
+    return self;
+  }
+
+  function expose(method, fn) {
+    if (typeof fn !== 'function') {
+      Object.keys(fn).forEach(function (key) {
+        methods[method + '.' + key] = fn[key];
+      }, methods);
+    }
+    methods[method] = fn;
+    return self;
+  }
+
+  function on(eventName, handler) {
+    eventHandlers[eventName] = handler;
+    return self;
+  }
+
+  function off(eventName) {
+    eventHandlers[eventName] = noop;
+    return self;
+  }
+
+  function close() {
+    if (socket !== null) {
+      socket.close();
+    }
+  }
+
+  self.close = close;
+  self.on = on;
+  self.off = off;
+  self.ws = socket;
+
+  return self;
+}
+```
+***
+### [index.html](https://gist.githubusercontent.com/master5o1/0ac511e0a3ec0cd5cf4a/raw/c6d7194451487aa18a0163fcac7f420cf377cbc2/index.html) -- text/html, 2.4KiB
+```html
+<html>
+  <head>
+    <script src="WebSocketRpc.js"></script>
+    <script>
+
+    // Setup RPC
+    var rpc = new WebSocketRpc('ws://echo.websocket.org'/*, true */); // pass true to disable sending batched calls.
+    
+    // Want to do stuff on open, error and close.
+    rpc.on('ready', function(event){ console.log('socket is ready'); })
+       .on('error', function(event){ console.log('oh my an error occurred', event); })
+       .on('close', function(event){ console.log('socket is closed'); })
+       
+    // We'll use this for handling JSON-RPC 2.0 notification result/error messages.
+    rpc.on('notification', function(error, results, response, event){
+      if (error) {
+        console.error('what, an error notification?', error);
+        return;
+      }
+      console.log('oh good, a notification', results);
+    })
+
+    // Let's set up a method that the server can call for the client to do.
+    rpc.expose('add', function(params, callback) {
+      console.log('exposed add:', params);
+      var result = params[0] + params[1];
+      callback(null, result);
+    });
+
+    // Let's set up another one, which we'll use as a notification.
+    rpc.expose('notification', function(params, callback){
+      console.log('exposed notification:', params);
+      callback();
+    });
+
+    // Can also set up a namedspaced object of methods.
+    rpc.expose('math', {
+      add: function(params, callback) {
+        callback(null, params[0] + params[1]);
+      },
+      subtract: function(params, callback) {
+        callback(null, params[0] - params[1]);
+      },
+      multiply: function(params, callback) {
+        callback(null, params[0] * params[1]);
+      }
+    });
+
+    // Call a method on the server.
+    rpc.call('add', [5, 10], function(error, result, response, request, event){
+      console.log(arguments);
+    });
+
+    // Send the notification to the server.
+    rpc.call('notification', 'Still Alive');
+
+    // Call a namespaced method.
+    rpc.call('math.multiply', [21, 34], function(error, results){
+      console.log('math.multiply', results);
+    });
+
+    rpc.batch(['math.subtract', [5, 3], function(error, result) {
+      console.log('subtract', result);
+    }], ['math.divide', [5, 3], function(error, result) {
+      if (error) {
+        console.error('divide', error);
+        return;
+      }
+      console.log('divide', result);
+    }]);
+
+    rpc.connect();
+
+    </script>
+  </head>
+  <body>
+    Look in the JS console.
+  </body>
+</html>
+```
+

+ 185 - 0
content/posts/gist/2015-02-28/1e8f24628ab13282145a.md

@@ -0,0 +1,185 @@
+---
+title: "index.html"
+date: 2015-02-28T10:18:44Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/1e8f24628ab13282145a)
+
+
+Simpler Name Generator Thing
+
+
+| Attachment | Type | Size |
+| - | - | - |
+| [index.html](https://gist.githubusercontent.com/master5o1/1e8f24628ab13282145a/raw/8b137e14ee76a08417e76655dd57b72fb2065201/index.html) | text/html | 746.0B |
+| [script.js](https://gist.githubusercontent.com/master5o1/1e8f24628ab13282145a/raw/bf25b704bb18cbf6048d2300086e71d984f7428a/script.js) | application/javascript | 3.7KiB |
+***
+
+### [index.html](https://gist.githubusercontent.com/master5o1/1e8f24628ab13282145a/raw/8b137e14ee76a08417e76655dd57b72fb2065201/index.html) -- text/html, 746.0B
+```html
+<html>
+    
+    <head></head>
+    
+    <body>
+        <strong>Markov Team Name Generator</strong><br />
+        <button id="get-markov-name">Get Name</button><br />
+        <strong>Generated Name:</strong>
+        <span id="generated-name">click Get Name to generate a name</span><br />
+        <textarea style="min-width:200px; min-height: 400px;" id="previous-names"></textarea><br />
+        <span>Source names based on people in the <a href="http://en.wikipedia.org/wiki/New_Zealand_national_cricket_team#Current_squad">Black Caps</a>, the New Zealand national cricket team<br />
+        <a href="https://gist.github.com/master5o1/1e8f24628ab13282145a">gist source</a> on GitHub.
+        <script src="script.js"></script>
+    </body>
+
+</html>
+```
+***
+### [script.js](https://gist.githubusercontent.com/master5o1/1e8f24628ab13282145a/raw/bf25b704bb18cbf6048d2300086e71d984f7428a/script.js) -- application/javascript, 3.7KiB
+```javascript
+document.getElementById('get-markov-name').onclick = team;
+
+function team() {
+    var players = [
+        ['Brendon', 'McCullum'],
+        ['Kane', 'Williamson'],
+        ['Ross', 'Taylor'],
+        ['Martin', 'Guptill'],
+        ['Hamish', 'Rutherford'],
+        ['Dean', 'Brownlie'],
+        ['Colin', 'Munro'],
+        ['Tom', 'Latham'],
+        ['BJ', 'Watling'],
+        ['Luke', 'Ronchi'],
+        ['Corey', 'Anderson'],
+        ['Grant', 'Elliott'],
+        ['Nathan', 'McCullum'],
+        ['Anton', 'Devcich'],
+        ['Jimmy', 'Neesham'],
+        ['Daniel', 'Vettori'],
+        ['Pace', 'Bowlers'],
+        ['Trent', 'Boult'],
+        ['Doug', 'Bracewell'],
+        ['Mitchell', 'McClenaghan'],
+        ['Kyle', 'Mills'],
+        ['Tim', 'Southee'],
+        ['Neil', 'Wagner'],
+        ['Hamish', 'Bennett'],
+        ['Andrew', 'Ellis'],
+        ['Matt', 'Henry'],
+        ['Adam', 'Milne'],
+        ['Ish', 'Sodhi'],
+        ['Mark', 'Craig']
+    ];
+
+    var firstNames = players.map(function (player) {
+        return player[0];
+    });
+
+    var lastNames = players.map(function (player) {
+        return player[1];
+    });
+    
+    var firstName = processList(firstNames, Infinity, true);
+    var lastName = processList(lastNames, Infinity, true);
+    var fullName = firstName + ' ' + lastName;
+
+    var html = document.getElementById('previous-names').innerHTML;
+    document.getElementById('previous-names').innerHTML = fullName + '\r\n' + html;
+    document.getElementById('generated-name').innerHTML = fullName;
+}
+
+function processList(namesList, useAverageNameLength, useRandomFirstLetters) {
+    var firstTwoLetters = mode(namesList.map(function (name) {
+        return name.substring(0, 2);
+    }));
+    
+    if (useRandomFirstLetters) {
+        firstTwoLetters = pickRandomly(namesList.map(function (name) {
+            return name.substring(0, 2);
+        }));   
+    }
+
+    var avgNameLength = avg(namesList.map(function (name) {
+        return name.length;
+    }));
+
+    var markov = processWords(namesList);
+
+    if (useAverageNameLength === true) {
+        return buildString(markov, firstTwoLetters, avgNameLength);
+    }
+
+    return buildString(markov, firstTwoLetters, useAverageNameLength);
+}
+
+function processWords(words) {
+    var dict = {};
+    for (var i = 0; i < words.length; i++) {
+        dict = generateMarkov(words[i], dict);
+    }
+    return dict;
+}
+
+function generateMarkov(letters, dict) {
+    var i, key, letter, first, second, third;
+
+    i = 0;
+    first = letters[i++];
+    second = letters[i++];
+    while (i < letters.length) {
+        third = letters[i++];
+        key = first + second;
+        dict[key] = dict[key] || [];
+        dict[key].push(third);
+        first = second;
+        second = third;
+    }
+
+    return dict;
+}
+
+function buildString(dict, start, maxLength) {
+    var dictKeys = Object.keys(dict);
+    var key = start;
+    var str = start;
+    while (typeof dict[key] !== 'undefined' && str.length < maxLength) {
+        var value = dict[key];
+        var third = pickRandomly(value);
+        str = str + third;
+        key = key.split('')[1] + third;
+    }
+    return str;
+}
+
+function mode(list) {
+    var frequency, items;
+
+    frequency = {};
+    list.forEach(function (item) {
+        this[item] = this[item] || 0;
+        this[item] = this[item] + 1;
+    }, frequency);
+    items = Object.keys(frequency);
+    items.sort(function (a, b) {
+        return frequency[b] - frequency[a];
+    });
+
+    return items[0];
+}
+
+function pickRandomly(list) {
+    var index = Math.round(Math.random() * list.length) % list.length;
+    return list[index];
+}
+
+function avg(list) {
+    var sum = list.reduce(function (p, c) {
+        return p + c;
+    }, 0);
+    var total = list.length;
+    return Math.round(sum / total);
+}
+```
+

+ 215 - 0
content/posts/gist/2015-02-28/ae3fe23d8b6e0e5a36d1.md

@@ -0,0 +1,215 @@
+---
+title: "index.html"
+date: 2015-02-28T09:58:05Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/ae3fe23d8b6e0e5a36d1)
+
+
+Name Generator
+
+
+| Attachment | Type | Size |
+| - | - | - |
+| [index.html](https://gist.githubusercontent.com/master5o1/ae3fe23d8b6e0e5a36d1/raw/3d0c9a13b24e0b8fe365ff7884c51b18116b8449/index.html) | text/html | 1.2KiB |
+| [script.js](https://gist.githubusercontent.com/master5o1/ae3fe23d8b6e0e5a36d1/raw/c271ba3182622ca42d4a6770faea8996a19d4996/script.js) | application/javascript | 4.2KiB |
+***
+
+### [index.html](https://gist.githubusercontent.com/master5o1/ae3fe23d8b6e0e5a36d1/raw/3d0c9a13b24e0b8fe365ff7884c51b18116b8449/index.html) -- text/html, 1.2KiB
+```html
+<html>
+    
+    <head></head>
+    
+    <body>
+<strong>Markov Team Name Generator</strong>
+        <br />
+        <button id="get-markov-name">Get Name</button>
+        <p>First table shows names generated by creating a first name starting with the most common first two letters, and a last name starting with the most common first two letters.</p>
+        <table border=1>
+            <thead>
+                <th>Max name length 15 characters</th>
+                <th>Using Average Name Length</th>
+                <th>No Max Length</th>
+            </thead>
+            <tbody id="output"></tbody>
+        </table>
+        <p>Second table creates names where the first name starts with a random pair of first letters and same case for the last name.</p>
+        <table border=1>
+            <thead>
+                <th>Max name length 15 characters</th>
+                <th>Using Average Name Length</th>
+                <th>No Max Length</th>
+            </thead>
+            <tbody id="output-arbitrary"></tbody>
+        </table>
+        <a href="https://gist.github.com/master5o1/ae3fe23d8b6e0e5a36d1">gist source</a> on github
+        <script src="script.js"></script>
+    </body>
+
+</html>
+```
+***
+### [script.js](https://gist.githubusercontent.com/master5o1/ae3fe23d8b6e0e5a36d1/raw/c271ba3182622ca42d4a6770faea8996a19d4996/script.js) -- application/javascript, 4.2KiB
+```javascript
+document.getElementById('get-markov-name').onclick = team;
+
+function team() {
+    var players = [
+        ['Brendon', 'McCullum'],
+        ['Kane', 'Williamson'],
+        ['Ross', 'Taylor'],
+        ['Martin', 'Guptill'],
+        ['Hamish', 'Rutherford'],
+        ['Dean', 'Brownlie'],
+        ['Colin', 'Munro'],
+        ['Tom', 'Latham'],
+        ['BJ', 'Watling'],
+        ['Luke', 'Ronchi'],
+        ['Corey', 'Anderson'],
+        ['Grant', 'Elliott'],
+        ['Nathan', 'McCullum'],
+        ['Anton', 'Devcich'],
+        ['Jimmy', 'Neesham'],
+        ['Daniel', 'Vettori'],
+        ['Pace', 'Bowlers'],
+        ['Trent', 'Boult'],
+        ['Doug', 'Bracewell'],
+        ['Mitchell', 'McClenaghan'],
+        ['Kyle', 'Mills'],
+        ['Tim', 'Southee'],
+        ['Neil', 'Wagner'],
+        ['Hamish', 'Bennett'],
+        ['Andrew', 'Ellis'],
+        ['Matt', 'Henry'],
+        ['Adam', 'Milne'],
+        ['Ish', 'Sodhi'],
+        ['Mark', 'Craig']
+    ];
+
+    var firstNames = players.map(function (player) {
+        return player[0];
+    });
+
+    var lastNames = players.map(function (player) {
+        return player[1];
+    });
+    
+    var html = '';
+    
+    
+    html = '<tr>';
+    html = addHtml(html, firstNames, lastNames, 15);
+    html = addHtml(html, firstNames, lastNames, true);
+    html = addHtml(html, firstNames, lastNames, Infinity);
+    html += '</tr>';
+    document.getElementById('output').innerHTML += html;
+    
+    html = '<tr>';
+    html = addHtml(html, firstNames, lastNames, 15, true);
+    html = addHtml(html, firstNames, lastNames, true, true);
+    html = addHtml(html, firstNames, lastNames, Infinity, true);
+    html += '</tr>';
+    document.getElementById('output-arbitrary').innerHTML += html;
+}
+
+function addHtml(html, firstNames, lastNames, maxLength, useRandomFirstLetters) {
+    firstName = processList(firstNames, maxLength, useRandomFirstLetters);
+    lastName = processList(lastNames, maxLength, useRandomFirstLetters);
+    return html + '<td>' + firstName + ' ' + lastName + '</td>';
+}
+
+function processList(namesList, useAverageNameLength, useRandomFirstLetters) {
+    var firstTwoLetters = mode(namesList.map(function (name) {
+        return name.substring(0, 2);
+    }));
+    
+    if (useRandomFirstLetters) {
+        firstTwoLetters = pickRandomly(namesList.map(function (name) {
+            return name.substring(0, 2);
+        }));   
+    }
+
+    var avgNameLength = avg(namesList.map(function (name) {
+        return name.length;
+    }));
+
+    var markov = processWords(namesList);
+
+    if (useAverageNameLength === true) {
+        return buildString(markov, firstTwoLetters, avgNameLength);
+    }
+
+    return buildString(markov, firstTwoLetters, useAverageNameLength);
+}
+
+function processWords(words) {
+    var dict = {};
+    for (var i = 0; i < words.length; i++) {
+        dict = generateMarkov(words[i], dict);
+    }
+    return dict;
+}
+
+function generateMarkov(letters, dict) {
+    var i, key, letter, first, second, third;
+
+    i = 0;
+    first = letters[i++];
+    second = letters[i++];
+    while (i < letters.length) {
+        third = letters[i++];
+        key = first + second;
+        dict[key] = dict[key] || [];
+        dict[key].push(third);
+        first = second;
+        second = third;
+    }
+
+    return dict;
+}
+
+function buildString(dict, start, maxLength) {
+    var dictKeys = Object.keys(dict);
+    var key = start;
+    var str = start;
+    while (typeof dict[key] !== 'undefined' && str.length < maxLength) {
+        var value = dict[key];
+        var third = pickRandomly(value);
+        str = str + third;
+        key = key.split('')[1] + third;
+    }
+    return str;
+}
+
+function mode(list) {
+    var frequency, items;
+
+    frequency = {};
+    list.forEach(function (item) {
+        this[item] = this[item] || 0;
+        this[item] = this[item] + 1;
+    }, frequency);
+    items = Object.keys(frequency);
+    items.sort(function (a, b) {
+        return frequency[b] - frequency[a];
+    });
+
+    return items[0];
+}
+
+function pickRandomly(list) {
+    var index = Math.round(Math.random() * list.length) % list.length;
+    return list[index];
+}
+
+function avg(list) {
+    var sum = list.reduce(function (p, c) {
+        return p + c;
+    }, 0);
+    var total = list.length;
+    return Math.round(sum / total);
+}
+```
+

+ 33 - 0
content/posts/gist/2015-03-26/0199179c7f57ea7a379a.md

@@ -0,0 +1,33 @@
+---
+title: "konami.js"
+date: 2015-03-26T03:29:02Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/0199179c7f57ea7a379a)
+
+
+
+
+
+```javascript
+konami(function(){
+  console.log('KONAMI!!!');
+});
+
+function konami(fn, match) {
+  var konamiCode = '3838404037393739666513';
+  var sequence = '';
+  match = match || konamiCode;
+  window.addEventListener('keyup', function(event){
+    sequence += event.keyCode;
+    if (match === sequence) {
+      fn();
+    }
+    if (match.indexOf(sequence) === -1) {
+      sequence = '';
+    }
+  }, false); 
+}
+```
+

+ 39 - 0
content/posts/gist/2015-04-22/23dc705d3a181f532484.md

@@ -0,0 +1,39 @@
+---
+title: "not-ie.js"
+date: 2015-04-22T05:19:17Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/23dc705d3a181f532484)
+
+
+Small is or is not internet explorer. Provides .ie or .is-ie and .not-ie css classes.
+
+
+| Attachment | Type | Size |
+| - | - | - |
+| [not-ie.js](https://gist.githubusercontent.com/master5o1/23dc705d3a181f532484/raw/ccfc6ce0e4801dd4893b4b22f092b89d092e84ee/not-ie.js) | application/javascript | 440.0B |
+| [not-ie.min.js](https://gist.githubusercontent.com/master5o1/23dc705d3a181f532484/raw/ce1bf33634ef7b8c46226f7864284ea023ce78c2/not-ie.min.js) | application/javascript | 368.0B |
+***
+
+### [not-ie.js](https://gist.githubusercontent.com/master5o1/23dc705d3a181f532484/raw/ccfc6ce0e4801dd4893b4b22f092b89d092e84ee/not-ie.js) -- application/javascript, 440.0B
+```javascript
+(function(n, o, t, i, e){
+	n.isIE = t;
+	if (t) {
+		o.styleSheets[0].addRule('.ie, .is-ie', 'display: initial');
+		o.styleSheets[0].addRule('.not-ie', 'display: none');
+		return;
+	}
+	i = o.createElement('style');
+	i.innerHTML = '.ie,.is-ie { display: none; } .not-ie: { display: initial; }'
+	e = document.getElementsByTagName('script')[0];
+	e.parentNode.insertBefore(i, e);
+})(window, document, /*@cc_on!@*/false || !!document.documentMode);
+```
+***
+### [not-ie.min.js](https://gist.githubusercontent.com/master5o1/23dc705d3a181f532484/raw/ce1bf33634ef7b8c46226f7864284ea023ce78c2/not-ie.min.js) -- application/javascript, 368.0B
+```javascript
+(function(d,a,e,b,c){(d.isIE=e)?(a.styleSheets[0].addRule(".ie, .is-ie","display: initial"),a.styleSheets[0].addRule(".not-ie","display: none")):(b=a.createElement("style"),b.innerHTML=".ie,.is-ie { display: none; } .not-ie: { display: initial; }",c=document.getElementsByTagName("script")[0],c.parentNode.insertBefore(b,c))})(window,document,!!document.documentMode);
+```
+

+ 31 - 0
content/posts/gist/2015-04-22/d75343d1a8f7761212f6.md

@@ -0,0 +1,31 @@
+---
+title: "hangman.js"
+date: 2015-04-22T23:14:47Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/d75343d1a8f7761212f6)
+
+
+
+
+
+```javascript
+function hangman(word) {
+    var reference = word.replace(/[a-zA-Z]/g,'-');
+    function reveal(letter) {
+        reference = reference.split('').map(function(v, i){
+            return word[i] === letter ? letter : v;
+        }).join('');
+        return reference;
+    };
+    return {
+        reveal: reveal
+    };
+}
+
+var game = hangman('carrot');
+console.log(game.reveal('r'));
+console.log(game.reveal('a'));
+```
+

+ 46 - 0
content/posts/gist/2015-07-13/2f8bc9aeabf8045e34c0.md

@@ -0,0 +1,46 @@
+---
+title: "MockAjax.js"
+date: 2015-07-13T23:48:29Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/2f8bc9aeabf8045e34c0)
+
+
+silly little thing.
+
+
+```javascript
+function MockAjax() {
+	var self = this;
+	var responses = {
+		'http://api.example.com/cart/add.json?a=5&b=3': {
+			"data": 8
+		}
+	};
+
+	function request(url, success, failure) {
+		window.setTimeout(function () {
+			if (responses[url] === undefined) {
+				failure();
+				return;
+			}
+			success(responses[url]);
+		}, Math.random() * 1000);
+	}
+
+	self.mock = function(url, response) {
+		responses[url] = response;
+	};
+	self.get = function(url, success, failure) {
+		request(url, success, failure);
+	};
+	
+	self.post = function(url, success, failure) {
+		request(url, success, failure);
+	};
+
+	return self;
+}
+```
+

+ 38 - 0
content/posts/gist/2015-08-06/7783eac88f2fc8d914a7.md

@@ -0,0 +1,38 @@
+---
+title: "radionz-rss-feeds.html"
+date: 2015-08-06T09:05:39Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/7783eac88f2fc8d914a7)
+
+
+
+
+
+```html
+<a href="http://www.radionz.co.nz/podcasts/atthemovies.rss">http://www.radionz.co.nz/podcasts/atthemovies.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/aucklandstories.rss">http://www.radionz.co.nz/podcasts/aucklandstories.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/bestoftheweek.rss">http://www.radionz.co.nz/podcasts/bestoftheweek.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/businessnews.rss">http://www.radionz.co.nz/podcasts/businessnews.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/checkpoint.rss">http://www.radionz.co.nz/podcasts/checkpoint.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/downthelist.rss">http://www.radionz.co.nz/podcasts/downthelist.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/focusonpolitics.rss">http://www.radionz.co.nz/podcasts/focusonpolitics.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/greatencounters.rss">http://www.radionz.co.nz/podcasts/greatencounters.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/inparliament.rss">http://www.radionz.co.nz/podcasts/inparliament.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/insight.rss">http://www.radionz.co.nz/podcasts/insight.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/introducing.rss">http://www.radionz.co.nz/podcasts/introducing.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/afternoons.rss">http://www.radionz.co.nz/podcasts/afternoons.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/lateedition.rss">http://www.radionz.co.nz/podcasts/lateedition.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/mediawatch.rss">http://www.radionz.co.nz/podcasts/mediawatch.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/morningreport.rss">http://www.radionz.co.nz/podcasts/morningreport.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/nights.rss">http://www.radionz.co.nz/podcasts/nights.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/ninetonoon.rss">http://www.radionz.co.nz/podcasts/ninetonoon.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/ourchangingworld.rss">http://www.radionz.co.nz/podcasts/ourchangingworld.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/saturday.rss">http://www.radionz.co.nz/podcasts/saturday.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/thepanel.rss">http://www.radionz.co.nz/podcasts/thepanel.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/theweekinreview.rss">http://www.radionz.co.nz/podcasts/theweekinreview.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/thiswayup.rss">http://www.radionz.co.nz/podcasts/thiswayup.rss</a>
+<br /> <a href="http://www.radionz.co.nz/podcasts/parliament.rss">http://www.radionz.co.nz/podcasts/parliament.rss</a>
+```
+

+ 103 - 0
content/posts/gist/2015-08-19/4cf9bf1096c5d113a01a.md

@@ -0,0 +1,103 @@
+---
+title: "lolcryption.py"
+date: 2015-08-19T09:24:48Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/4cf9bf1096c5d113a01a)
+
+
+
+
+
+```python
+"""
+lolcryption.py
+Translates text into LOLcrypted ciphertext. <http://lolcryption.master5o1.com/>
+Created By:
+    - Jason Schwarzenberger <https://github.com/master5o1>
+License:
+    MIT
+"""
+
+from cloudbot import hook
+import math
+
+@hook.command()
+def enlolcrypt(text):
+	""" enlolcrypt <text> -- enLOLcrypts <text> in <ciphertext>. """
+	return tr(text, "aeioubcdfghjklmnpqrstvwxyz", "iouaenpqrstvwxyzbcdfghjklm")
+
+@hook.command()
+def delolcrypt(text):
+	""" delolcrypt <ciphertext> -- deLOLcrypts <ciphertext> in <text>. """
+	return tr(text, "iouaenpqrstvwxyzbcdfghjklm", "aeioubcdfghjklmnpqrstvwxyz")
+
+@hook.command()
+def detheucon(text):
+    """ detheucon <text> -- unscrambles Theucon scrambled <text>. """
+    return theucon_decrypt(text)
+    
+@hook.command()
+def entheucon(text):
+    """ entheucon <text> -- scrambles <text> using Theucon algorithm. """
+    return theucon_encrypt(text)
+
+def theucon_encrypt(text):
+    output = ""
+    remaining = text
+    while len(remaining) > 0:
+        primeIndexed = ""
+        nonPrimeIndexed = ""
+        for i in range(0, len(remaining)):
+            if i == 0 or is_prime(i):
+                primeIndexed = primeIndexed + remaining[i]
+            else:
+                nonPrimeIndexed = nonPrimeIndexed + remaining[i]
+        output = output + primeIndexed
+        remaining = nonPrimeIndexed
+    return output
+
+def theucon_decrypt(text):
+    output = make_empty_list(len(text), '')
+    remaining = text
+    while len(remaining) > 0:
+        primes = [0] + primes_until(len(remaining))
+        currentOutput = make_empty_list(len(remaining), '')
+        current = remaining[0:len(primes)]
+        remaining = remaining[len(primes):]
+        for i in range(0, len(primes)):
+            currentOutput[primes[i]] = current[i]
+        if len(output) == 0:
+            output = currentOutput
+        else:
+            for i in range(0, len(output)):
+                if output[i] == '':
+                    output[i] = currentOutput[0]
+                    currentOutput = currentOutput[1:]
+    return str.join("", output)
+        
+def is_prime(n):
+    if n < 2 or n % 2 == 0 and n > 2: 
+        return False
+    return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))
+
+
+def primes_until(n):
+    list = []
+    for x in range(1, n):
+        if is_prime(x):
+            list.append(x)
+    return list
+    
+def make_empty_list(n, sep=""):
+    list = []
+    for x in range(0, n):
+        list.append(sep)
+    return list
+
+def tr(text, inAlphabet, outAlphabet):
+	text = text.translate(str.maketrans(inAlphabet, outAlphabet))
+	return text.translate(str.maketrans(inAlphabet.upper(), outAlphabet.upper()))
+```
+

+ 67 - 0
content/posts/gist/2016-03-04/0edc8df5ed5916434da2.md

@@ -0,0 +1,67 @@
+---
+title: "pgp_public.asc"
+date: 2016-03-04T07:57:41Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/0edc8df5ed5916434da2)
+
+
+
+
+
+```public key
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1
+
+mQINBFbZPwEBEACsF8oNkQ/LSe4bS7bqjeTzfV+c3F+QFMDq5c/Z40YLlg4dILEz
+CxnfAGj5+F8Gxele/WKicf8YRhsMTXbarFuL5PKibiQPFAE2Jo06TbIRHqc1GW1C
+xDplF0sww7Kl/D1ly++xp7MQV4bJZz1U+mUxylPLNpM9Xd6WuSv0xN8dN4cALVnB
+vu/G/6+qrsJ/rLsPqdPSPttET5g5p7dRaXpKY8RlRFh+RBsZ0f4+7x9pCkvJrgEZ
+NcTzjn/r/r7Vk0GGrp8PxNrOTTXelljkMxK60KZvTSL5+ksdX0d1GJ8Nxm9Ah5LY
+XmMjv09XD/5YFG6RkE9itPIwfk7+aJ4T6hAgrJBAUa4kytkTgJwAUkarn77hfHad
+rFK7hlxRBmR5ntYNmr0QkoQ1buHSJ2szr72uXSfoobP3Onig0Z0G04fkTU0tFBVy
+30hfSTnJ6aGfuJrhG/7SsC59EIO5DMpbo/idfcuMYpzWr9ERCLx7mozLFhZY9s6d
+WzlsiE9tvxgJCLitNBpV3OgSMSpcu5gf+X/VyRuXWsc9qnFnzcwTbFost7mVMmNL
+9/QPGEVcnEV6adMavL1ds1DQzdzs8X93k0nuQewdcwnC9iG0FqVDEK4d3m45+ltr
+jfEHPVgjIWCVnKin/XZpJJxHNpoZmnbXus/k2BhJAOx71jmmagGo4cDUNQARAQAB
+tCtKYXNvbiBTY2h3YXJ6ZW5iZXJnZXIgPGphc29uQG1hc3RlcjVvMS5jb20+iQI4
+BBMBAgAiBQJW2T8BAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRBetMMH
+7jF7rjZoD/0UZgMU7tAnLbLe9VBtgxVXC9RYcUt/Ijqinsooyc9lHlbpADZYmRZV
+wcGU4q0V433kYbZhx8Dhl3tpz5a3D3Dc74YUKdLrKSuEXwnftrV3GV3QAVfPeYEP
+xyGPW07y7b1YoeHUfYbz0l1lOy0GYLxcX6yMYih5sbgYHuF9clDxD47R6tQTMogg
+tYq/Utr3wZpJfs1viIAZtC+u1qQrwWDykR4TRatg7JqQv1lxIcTKlLuVliO04DMG
+unzSUwEfuLI4/5ssLbdf/hZhndL1NgD8OUXKN3kG71k6J6KVWlab9SoQ+Yupm1UC
+jfcLRPSxdMUNNWKv8zKFswdUwfBB4NhrEHDwzOb8DqIw3JBbNIkrIa0XqRYxnrEo
+JJGk8WTjE0Vq/XU+SDXhFkvBhBL7izRGQBXhiCwJYsVctVBf8uFCGUPCHheDA1p3
+M+3LZg8LkqXJA6Mx4Kjg8mLA0vLAOsY7uFHhSB41xw+dtBk7MhEy892085PK4F5x
++PIG4w5UUN598bzshOwEDbtX9Cfqkfm5BCFjufc1+4MyR5aHT1HGPdF6CSdPSJ95
+BxZVER8oCbv0Hf2EkajFgmHPc58hDBSgxxAzI7rPHEu2PEfBUcU+gapjRyipSQxw
+VtYZiS64s1bspMdz200w+UFrWHatBgCRt0xAUXIqWLLWVqwqYezuSbkCDQRW2T8B
+ARAAxtPH7/bHertfUlBQzIinu4boP0x3ShL9yqvxTiGRqpGHPYaSWBvHNjRkuxrn
+7xGKwlVFyV42MmSFuYyC+N9c31heq5E1aOF179YbLQyfhYgnt/CH6PduU8RUj4zf
+7yB6dsm7xf/oeHdNA4Yx8oZ4+lx5dla6OW4q5udWmnxLYFxu23o2E0hTblAs3md+
+aDj5rkWRQ3amTCeODIRgAvY3V6L7NAcDrN0hOhwhzvnppE66KvJA5gBVem7aac9K
+XT6pnEF8/YpcQsdqDH/guzREkFbkMy7YxfeD6biE6dRfpvzzFUQZ282VVrEWVgUK
+7Ask48SoS2tL+3XHyTL0n5wuc2iANEtxNpR48DcSGxVNHvOsF4wEDSeJbRVkDcIx
+O37KLSgY4iau2u/CqHB3EIxzVL4ou3z/Stuf8mImQmDhhd7Q7wa3z2dZHwX736FS
+7N0EQhLTHTYym1RtTJL5ZZVQqrann4OfOwpD8RY4TZU29NtUEcm4Wgm+ktG00Djw
+07sMb5EfBVga0IMzJSQTnpc1rSlDPf+8K7dZEMogH+ioePG7NaKIyRFk8Vns5uEh
++4Zh0s7pMzoJ4+asK2rTy0PaXAp5d2QU3clybnlECwfKpFJQYKYf0TPKrVP1HMRL
+lY9N1TrkKWFnWwQKbaJnM2d5wlazrd2ejJ0bA1xnFP5xqyMAEQEAAYkCHwQYAQIA
+CQUCVtk/AQIbDAAKCRBetMMH7jF7rg1WD/4/m4SHWToQF+AJp4QEQZbcfFDsXtft
+onqw6pjblMz42p4G21yMwMpJndLsNFdYlLadP4mCK1tp7I8uIXcmc9EbA3k+rLu8
+6LfAElNak4YKgXD7/J7AGeN/lMXP2R49xNcn+JEN4xhvpgYyU9Fr67oPEQUvEdHm
+9VQ3Ya2iIsPRJQ+PPTFYJMXA+igPG4LU5W79Dxn2hAF7+4EVjefa6kazCqU0+Oa6
+YaTzqER/q9zmf7NQPrQpa/kA1Zfn794SFWHVHEwYxxF0HuyE5vuCCpKTVWzko+/w
+qjdwJu5zB546jmbrHv6YmJxw/jS/K93r7vwp6eIjmjLgOxmDswQMU2+2oWlge7Nv
+7/O8KpnBKXrBF/AGPq7G5/LIvA1A7Ui7KFjfbBZ/jLJm86u308eFAGTH9AY15Twp
+9hCREdQyWGQhhBHKlOlSX6/UgDg2mssQKGClHQUW59Lcu5A3tr0huobNSVrV7xOq
+oncvcmlZ79Z+Nmu/QB9aZbbQiBAgEbLbFyv2ITrAy26jycP5PNFm9shR7c+/wzWZ
+NX1B1OC20LFsogWEAX9Ss7ZQy2bhgqP/++lQTt+ZKs17nY63teJ0AhlDcY9UC4sP
+LffkGN/JUU4Xotl7mALnzZsJaEPa61zCgOGPcqaWAjUVr0QxRhQ1c+0iL2o7i9lL
+wwROoQ9/0RsxTQ==
+=Atnx
+-----END PGP PUBLIC KEY BLOCK-----
+```
+

+ 175 - 0
content/posts/gist/2016-03-23/7e547987c77cef5aa9fa.md

@@ -0,0 +1,175 @@
+---
+title: "angular-websocket-rpc.js"
+date: 2016-03-23T22:13:29Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/7e547987c77cef5aa9fa)
+
+
+angular websockets json-rpc2 service that uses [angular-websockets](https://github.com/AngularClass/angular-websocket). JSFiddle example: https://jsfiddle.net/master5o1/bxvauLcw/
+
+
+| Attachment | Type | Size |
+| - | - | - |
+| [angular-websocket-rpc.js](https://gist.githubusercontent.com/master5o1/7e547987c77cef5aa9fa/raw/11cbc817d106d55789f8a1b58d95723a7fff68f4/angular-websocket-rpc.js) | application/javascript | 3.1KiB |
+| [guid.js](https://gist.githubusercontent.com/master5o1/7e547987c77cef5aa9fa/raw/70f5de52653ab5f964c97143f20f67b6d6a86dc0/guid.js) | application/javascript | 548.0B |
+***
+
+### [angular-websocket-rpc.js](https://gist.githubusercontent.com/master5o1/7e547987c77cef5aa9fa/raw/11cbc817d106d55789f8a1b58d95723a7fff68f4/angular-websocket-rpc.js) -- application/javascript, 3.1KiB
+```javascript
+angular.module('ngWebsocketRpc', ['ngWebSocket', 'guid'])
+  .factory('$rpc', ['$websocket', '$q', 'guid', function($websocket, $q, guid) {
+    var seconds = 1000;
+    var history = {};
+    var methods = {};
+    var $ws;
+
+    var handlers = {
+      onOpen: angular.noop,
+      onClose: angular.noop,
+      onError: angular.noop
+    };
+
+    var rpcErrors = {
+      ParseError: RpcError(-32700, 'Parse error'),
+      InvalidRequest: RpcError(-32600, 'Invalid Request'),
+      MethodNotFound: RpcError(-32601, 'Method not found'),
+      InvalidParams: RpcError(-32602, 'Invalid params'),
+      InternalError: RpcError(-32603, 'Internal error'),
+      ServerError: RpcError(-32000, 'Server Error'),
+    };
+
+    function open(url) {
+      $ws = $websocket(url);
+      $ws.onMessage(messageRouter);
+    }
+
+    function close(force) {
+      return $ws.close(force);
+    }
+
+    function messageRouter(event, message) {
+      message = JSON.parse(event.data);
+      if (!!message.method) {
+        handlerMethodCall(event, message);
+        return;
+      }
+      handleCallResponse(event, message);
+    }
+
+    function handleCallResponse(event, message){
+      var call = history[message.id];
+      if (!!message.result) {
+        call.deferred.resolve(message.result, message, event);
+        return;
+      }
+      call.deferred.reject(message.error, message, event);
+    }
+
+    function handlerMethodCall(event, message) {
+      var response = {
+        "jsonrpc": "2.0",
+        "id": message.id
+      };
+      var params = message.params;
+      var fn = methods[message.method];
+
+      if (typeof fn === 'function'){
+        response = angular.extend(response, fn(params));
+      } else {
+        response = angular.extend(response, {
+          error: rpcErrors.MethodNotFound
+        });
+      }
+
+      var promise = $ws.send(JSON.stringify(response));
+    }
+
+    function callMethod(method, parameters) {
+      var id = guid();
+      var data = {
+        "jsonrpc": "2.0",
+        "method": method,
+        "params": parameters,
+        "id": id
+      };
+      var deferred = $q.defer();
+      var send = $ws.send(JSON.stringify(data));
+
+      history[id] = {
+        call: data,
+        messages: [],
+        send: send,
+        deferred: deferred
+      };
+      // cancel if somehow it doesn't make it to the websocket.
+      send.then(angular.noop, deferred.reject);
+      return deferred.promise;
+    }
+
+    function exposeMethod(method, handler){
+      methods[method] = handler;
+    }
+
+    function RpcError(code, message) {
+      return {
+        error: {
+          code: code,
+          message: message
+        }
+      };
+    }
+
+    function RpcResult(result) {
+      return {
+        result: result
+      };
+    }
+
+
+    function onEventHandlerFactory(eventName) {
+      return function(fn){
+        $ws[eventName](fn);
+      };
+    }
+
+    return {
+      $ws: $ws,
+      open: open,
+      close: close,
+      onOpen: onEventHandlerFactory('onOpen'),
+      onClose: onEventHandlerFactory('onClose'),
+      onError: onEventHandlerFactory('onError'),
+      call: callMethod,
+      expose: exposeMethod,
+      _: {
+        Result: RpcResult,
+        Errors: rpcErrors
+      }
+    };
+  }]);
+
+```
+***
+### [guid.js](https://gist.githubusercontent.com/master5o1/7e547987c77cef5aa9fa/raw/70f5de52653ab5f964c97143f20f67b6d6a86dc0/guid.js) -- application/javascript, 548.0B
+```javascript
+angular.module('guid', [])
+  .factory('guid', [function() {
+    return function Guid() {
+      function S4() {
+        var num = (((1 + Math.random()) * 0x10000) | 0);
+        if (!!crypto && !!crypto.getRandomValues) {
+          num = crypto.getRandomValues(new Uint32Array(1))[0];
+        }
+        return num.toString(16).substring(1, 5);
+      }
+      // x = 4 characters, y = 3 characters
+      return 'xx-x-4y-x-xxx'.replace(/[xy]/g, function(v) {
+        return v === 'x' ? S4() : S4().substring(0, 3);
+      }).toLowerCase();
+    };
+  }]);
+
+```
+

+ 100 - 0
content/posts/gist/2016-07-24/ee246668d672385bc451feab8b5bbad9.md

@@ -0,0 +1,100 @@
+---
+title: "keybase"
+date: 2016-07-24T02:37:51Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/ee246668d672385bc451feab8b5bbad9)
+
+
+
+
+
+### Keybase proof
+
+I hereby claim:
+
+  * I am master5o1 on github.
+  * I am master5o1 (https://keybase.io/master5o1) on keybase.
+  * I have a public key whose fingerprint is 943F 643F 3D22 A79E AB07  85D2 4773 2B7C A17C F5FD
+
+To claim this, I am signing this object:
+
+```json
+{
+    "body": {
+        "key": {
+            "eldest_kid": "01206293cf1e63bc0bc30ead4a1902e5a33baa2875d5dd782fac3edccad162d55dfc0a",
+            "fingerprint": "943f643f3d22a79eab0785d247732b7ca17cf5fd",
+            "host": "keybase.io",
+            "key_id": "47732b7ca17cf5fd",
+            "kid": "010170c03cffa3ca23f256b7f26b3642601dbbde114754b541212e21a5712f76280a0a",
+            "uid": "f7e415cf883d1769e83fc88eea424819",
+            "username": "master5o1"
+        },
+        "service": {
+            "name": "github",
+            "username": "master5o1"
+        },
+        "type": "web_service_binding",
+        "version": 1
+    },
+    "ctime": 1469327834,
+    "expire_in": 157680000,
+    "prev": "808f9dd3332aab0bd34cf11227badb5b48052f967882175caf94dd2f20c064a8",
+    "seqno": 7,
+    "tag": "signature"
+}
+```
+
+with the key [943F 643F 3D22 A79E AB07  85D2 4773 2B7C A17C F5FD](https://keybase.io/master5o1), yielding the signature:
+
+```
+-----BEGIN PGP MESSAGE-----
+Version: Keybase OpenPGP v2.0.53
+Comment: https://keybase.io/crypto
+
+yMNhAnicfVJ7UFRVHF6C9QEllsgrG/UaGQ/znnPua3cqEqgdZ9RpbABnKLdz7zkX
+bsAu7C6vdtHUIZ3ENB6TEqQ8GnSMwHGIR+mwhjNMJBLENBERI6JpkJAj5QPqLqP/
+NZ2ZM2d+v/N933znO7/uJ/wNgX4WZ6yn1nNnzq/X+1GeIbUietjNyHZSxJjdTCZd
+OGgWoU6XNVMjjJlhAWQFaEKKCqiAZIWVFcRSTDgMTCykPEZIxhhKIk94QkQJqlhB
+lCgKJkCAhOeJqrCYiWNUzZZOHTkOzebSZU0cUgV9IwIhFk0Uy6wo8QRyooigLCoY
+iIrKq0QnZtidPoZuTsZO+oJm13t6YV2w9x/4R75ZILIKqxtXMVIwRCrkBVlUoSAj
+gYMCC4gsEwoAJ/KczHMAAkghwLwIoCoKUGLxgu+8BTlVpBzgFVWSEAGiYKISUhVJ
+ohRzkJOAyQd0UocNZ1MdnY2dLurg7YApjmP0dr6mUF+yD6/TNVdGnvw/FFdRjq9X
+QGXrQ7ZV1mxET1An5VOHU7PbGDPQkYpL89EBJ5gQFCXExTG0MEdzUKvmQ/CiILH6
+imNyHDRfl5RYSTURghCCWM9cJojTfxZAKMqYyLzMSSwPVZMgShIEIq9g1cQRAlWo
+RylwWGJ878m12RmzqNvE6bqkU0u3YVeegzLFF7xvBhj8Ag2LjI/5JssQuHT5o3mD
+hcHzzMXn6djtfXvV94TbYX6jb90o7x5Is7zcFXR5cGLZ1pmAovmpmzXE2B+YepLz
+C/Y/YCgpvyF9Hx9lTWAm3n+qJ2b9vcYVMLunsmlzSfvsRldEpveisdRwJ/nQJXQ/
+wD9ttDAjfIV99+C5p18fnipXz1mqYop3hL4aLNafaKw9nbtsLtK9smBHzuC+deOW
+yU+N325uH0pp3HlpyXRbYlvY4txtXzT1mSfbe0XzRFTkr0GzKOK15n92o4zLEa9c
+fefvqI2hx4fPC2d+6v+8cn1kRhSoX1WX1ZpVaHCXrEt6N6RgatGG7qoN353KRV+H
+7Wlt9/44XlnTUnfMr8+csCsxuOuWnSmvb378SdNEv9dbFNo88cfQntm5ewPpO8v6
+d22JrZ6enJS3JRkPHwTHUq6XVdaAB/evbH+x+q/gQxawmHmps+/DurdnE65tGrnQ
+5//DG1+tTVu61uJdnjB8xVPRUfXn9YbVDSGHSw4MdCRX8KfW7P+tsKXwamWw94g7
+sW4myRWbZ1s9cnasMyJmuuKZ3hp3m8fYEf3LyVxP8nBLGH2QuvvW6Gd3G9YwA+dn
+uIEPap4THFxKSEMISCmNb3BFxP/+JT1+JiC6rFPdPzbeUxeenHp0lbJljAlynThd
+e/PZvdo1T+vdj43zNUua+ubOdvWNVG8/mpE21LT14CdFLT/Hj06g2iMrk0vDv/kX
+KhTCBA==
+=AGx8
+-----END PGP MESSAGE-----
+
+```
+
+And finally, I am proving ownership of the github account by posting this as a gist.
+
+### My publicly-auditable identity:
+
+https://keybase.io/master5o1
+
+### From the command line:
+
+Consider the [keybase command line program](https://keybase.io/download).
+
+```bash
+# look me up
+keybase id master5o1
+```
+
+

+ 16 - 0
content/posts/gist/2017-01-24/b19b585ee2379266d03ac1ee8f53d29f.md

@@ -0,0 +1,16 @@
+---
+title: "html-quine.html"
+date: 2017-01-24T20:21:25Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/b19b585ee2379266d03ac1ee8f53d29f)
+
+
+html (+js) quine using data:text/html, for the url bar of a browser.
+
+
+```html
+data:text/html,<html><body><div></div><script>document.getElementsByTagName('div')[0].innerText = 'data:text/html,' + document.getElementsByTagName('html')[0].innerHTML</script></body></html>
+```
+

+ 25 - 0
content/posts/gist/2018-07-27/fc3aa1bb41da024989c51c6ba968c3da.md

@@ -0,0 +1,25 @@
+---
+title: "fizzbuzz es6"
+date: 2018-07-27T12:53:45Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/fc3aa1bb41da024989c51c6ba968c3da)
+
+
+Displays FizzBuzz without containing the string "Fizz" or "Buzz". Reads the source and extracts the characters from the destructured function parameters. https://jsfiddle.net/master5o1/8ekog4j9/
+
+
+```
+const GO=( F,i,z,{[z[0 ]]:B},u,  zz)=>B((F%      u?'':GO[z  [u/    u]] ()[z[zz-  zz/zz]](u- 
+u,u            **u          +zz       -zz        )[z    [u] ](z    [zz      ],''      )[  
+z[/*           **/         zz-       u/u]        ](u    -u, zz-    u/u     ))+       (F%
+zz?'':GO[z     [u/        u]]       ()[          z[zz-zz/   zz]    ](u    -u,u      **u
++zz            -zz       )[z       [u]           ](z   [zz  ],''   )[z   [zz       -u/     
+u]]            (zz      -u/       u))            ||F    )|| F<     zz**  u-u      **u      
++zz        -u?GO(F+1,i ,z,i[z[u- zz/zz]],u       ,zz):null   ;//)[z[z  z-u/u]])[ z[zz-u/u] 
+
+
+GO(1,this,['log', 'toString', 'console', 'replace', 'substring', /[^a-z]/gi],console,3,5);
+```
+

+ 182 - 0
content/posts/gist/2019-02-12/04805514b1fc07310000e8c770b6486c.md

@@ -0,0 +1,182 @@
+---
+title: "qif2json.ts"
+date: 2019-02-12T21:26:33Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/04805514b1fc07310000e8c770b6486c)
+
+
+This is qif2json.ts is a minor refactor to bring Typescript support to the qif2json package available on NPM. It is the basic QIF parsing without any other requirements from Node (fs) or NPM (iconv, jschardet). This means that it is possible to do the QIF parsing in the browser.
+
+
+| Attachment | Type | Size |
+| - | - | - |
+| [qif2json.ts](https://gist.githubusercontent.com/master5o1/04805514b1fc07310000e8c770b6486c/raw/cbf3caa12362720b00f305ac89bdee08059c5243/qif2json.ts) | video/MP2T | 3.9KiB |
+| [readme.md](https://gist.githubusercontent.com/master5o1/04805514b1fc07310000e8c770b6486c/raw/998e15c4d37a39cd142af8e6bbbc7de1249602bd/readme.md) | text/markdown | 594.0B |
+***
+
+### [qif2json.ts](https://gist.githubusercontent.com/master5o1/04805514b1fc07310000e8c770b6486c/raw/cbf3caa12362720b00f305ac89bdee08059c5243/qif2json.ts) -- video/MP2T, 3.9KiB
+```typescript
+/* Adapted by Jason Schwarzenberger
+ * for Typescript from
+ * qif2json
+ * https://github.com/spmason/qif2json
+ *
+ * Copyright (c) 2012 Steve Mason
+ * Licensed under the MIT license.
+ */
+
+function parseDate(str: string, format: string) {
+  const [day, month, year]: any[] = str.replace(' ', '').split(/[^0-9]/);
+  const output: {
+    year: number;
+    month: string;
+    day: string;
+  } = { year: 0, month: '00', day: '00' };
+  const yearNow = new Date().getFullYear();
+  const yearInt = parseInt(year, 10);
+  const year1900 = 1900 + yearInt;
+  const year2000 = 2000 + yearInt;
+
+  output.day = day.length < 2 ? `0${day}` : day;
+  output.month = month.length < 2 ? `0${month}` : day;
+  output.year = year;
+
+  if (year.length <= 2) {
+    output.year = year2000 > yearNow ? year1900 : year2000;
+  }
+
+  if (format === 'us') {
+    return `${output.year}-${output.day}-${output.month}`;
+  }
+  return `${output.year}-${output.month}-${output.day}`;
+}
+
+export interface QifOptions {
+  dateFormat?: string;
+  ignoreType?: boolean;
+}
+
+export interface Qif {
+  transactions: Transaction[];
+  type: string;
+}
+
+export interface Division {
+  amount: number;
+  category: string;
+  description: string;
+  subcategory: string;
+}
+
+export interface Transaction {
+  date: string;
+  amount: number;
+  number: string;
+  memo: string;
+  address: string[];
+  payee: string;
+  category: string;
+  subcategory: string;
+  clearedStatus: string;
+  division: Division[];
+  [key: string]: any;
+}
+
+export const parser = (qif: string, options: QifOptions = <QifOptions>{ ignoreType: false }): Qif => {
+  const lines = qif.split('\n');
+  let line = lines.shift();
+  let transaction: Transaction = <Transaction>{};
+  let division: Division = <Division>{};
+  const typeArray = /!Type:([^$]*)$/.exec(line!.trim()) || [];
+
+  if (!typeArray || !typeArray.length) {
+    if (!options.ignoreType) {
+      throw new Error('File does not appear to be a valid qif file: ' + line);
+    }
+    typeArray[1] = line!.trim();
+  }
+
+  const type = typeArray[1];
+  const transactions: Transaction[] = [];
+
+  // tslint:disable-next-line: no-conditional-assignment
+  while ((line = lines.shift())) {
+    line = line.trim();
+    if (line === '^') {
+      transactions.push(transaction);
+      transaction = <Transaction>{};
+      continue;
+    }
+    switch (line[0]) {
+      case 'D':
+        transaction.date = parseDate(line.substring(1), options.dateFormat || '');
+        break;
+      case 'T':
+        transaction.amount = parseFloat(line.substring(1).replace(',', ''));
+        break;
+      case 'N':
+        transaction.number = line.substring(1);
+        break;
+      case 'M':
+        transaction.memo = line.substring(1);
+        break;
+      case 'A':
+        transaction.address = (transaction.address || []).concat(line.substring(1));
+        break;
+      case 'P':
+        transaction.payee = line.substring(1).replace(/&amp;/g, '&');
+        break;
+      case 'L':
+        const lArray = line.substring(1).split(':');
+        transaction.category = lArray[0];
+        if (lArray[1] !== undefined) {
+          transaction.subcategory = lArray[1];
+        }
+        break;
+      case 'C':
+        transaction.clearedStatus = line.substring(1);
+        break;
+      case 'S':
+        const sArray = line.substring(1).split(':');
+        division.category = sArray[0];
+        if (sArray[1] !== undefined) {
+          division.subcategory = sArray[1];
+        }
+        break;
+      case 'E':
+        division.description = line.substring(1);
+        break;
+      case '$':
+        division.amount = parseFloat(line.substring(1));
+        if (!(transaction.division instanceof Array)) {
+          transaction.division = [];
+        }
+        transaction.division.push(division);
+        division = <Division>{};
+
+        break;
+
+      default:
+        throw new Error('Unknown Detail Code: ' + line[0]);
+    }
+  }
+
+  if (Object.keys(transaction).length) {
+    transactions.push(transaction);
+  }
+
+  return <Qif>{
+    transactions,
+    type
+  };
+};
+
+```
+***
+### [readme.md](https://gist.githubusercontent.com/master5o1/04805514b1fc07310000e8c770b6486c/raw/998e15c4d37a39cd142af8e6bbbc7de1249602bd/readme.md) -- text/markdown, 594.0B
+This is qif2json.ts is a minor refactor to bring Typescript support to the [qif2json](https://github.com/spmason/qif2json) package available on NPM. It is the basic QIF parsing without any other requirements from Node (fs) or NPM (iconv, jschardet). This means that it is possible to do the QIF parsing in the browser.
+
+I've written my own [QIF parser](https://stackblitz.com/edit/typescript-5qwgx1?file=qif.ts) on StackBlitz which is an improvement in terms of QIF support. Perhaps not as great performance, meh. Can see what it does using this [demo](https://typescript-5qwgx1.stackblitz.io).
+

+ 55 - 0
content/posts/gist/2019-03-27/e5f8dc43c748032917b25af478ef94df.md

@@ -0,0 +1,55 @@
+---
+title: "vue-signature-pad.d.ts"
+date: 2019-03-27T21:40:03Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/e5f8dc43c748032917b25af478ef94df)
+
+
+Typescript type definitions for [vue-signature-pad](https://www.npmjs.com/package/vue-signature-pad), probably not entirely correct.
+
+
+```typescript
+declare module 'vue-signature-pad' {
+  import signature_pad, * as SignaturePad from 'signature_pad';
+  import Vue from 'vue';
+
+  export interface IOptions extends SignaturePad.IOptions {}
+  export interface IPointGroup extends SignaturePad.IPointGroup {}
+
+  export interface Status {
+    isEmpty: boolean;
+    data?: any;
+  }
+
+  export default class VueSignaturePad extends Vue {
+    // props
+    width: string;
+    height: string;
+    customStyle: any;
+    saveType: string;
+    options: IOptions;
+    images: any[];
+
+    // computer
+    propsImagesAndCustomImages: any[];
+
+    // methods
+    resizeCanvas(): void;
+    saveSignature(): Status;
+    undoSignature(): void;
+    mergeImageAndSignature(customSignature: any): Promise<any>; // TODO: constrain to correct return type.
+    addImages(images: any[]): Promise<any>; // TODO: constrain to correct param type and return type.
+    fromDataURL(data: string): void;
+    lockSignaturePad(): void;
+    openSignaturePad(): void;
+    isEmpty(): boolean;
+    getPropImagesAndCacheImages(): any[];
+    clearCacheImages(): 'this.cacheImages';
+    clearSignature(): void;
+  }
+}
+
+```
+

+ 152 - 0
content/posts/gist/2019-07-21/54405be477a30d3588e47838cc91df9d.md

@@ -0,0 +1,152 @@
+---
+title: "NZHerald Bypass"
+date: 2019-07-21T22:11:19Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/54405be477a30d3588e47838cc91df9d)
+
+
+Bypasses the new NZHerald Premium paywall using Javascript to peek at the LD+JSON Schema to figure out which CSS selector is being used to hide content.
+
+
+| Attachment | Type | Size |
+| - | - | - |
+| [NZHerald Bypass.md](https://gist.githubusercontent.com/master5o1/54405be477a30d3588e47838cc91df9d/raw/9839e0b2c10d012b0c8c144464415d97e2c2963b/NZHerald%20Bypass.md) | text/markdown | 1.5KiB |
+| [inject.js](https://gist.githubusercontent.com/master5o1/54405be477a30d3588e47838cc91df9d/raw/ea91d26e5b7f4929f72a0b78bfadcd8860936b18/inject.js) | application/javascript | 1.6KiB |
+| [manifest.json](https://gist.githubusercontent.com/master5o1/54405be477a30d3588e47838cc91df9d/raw/a6c833c273fd1c25e1bb1de901b9fb9c387d4ddf/manifest.json) | application/json | 372.0B |
+| [style.css](https://gist.githubusercontent.com/master5o1/54405be477a30d3588e47838cc91df9d/raw/3b0877051849f79511d12b976eb5d01d63c11c02/style.css) | text/css | 110.0B |
+***
+
+### [NZHerald Bypass.md](https://gist.githubusercontent.com/master5o1/54405be477a30d3588e47838cc91df9d/raw/9839e0b2c10d012b0c8c144464415d97e2c2963b/NZHerald%20Bypass.md) -- text/markdown, 1.5KiB
+# NZHerald Bypass
+
+Bypasses the new NZHerald Premium paywall using Javascript to peek at the LD+JSON Schema to figure out which CSS selector is being used to hide content.
+
+I made this mostly for myself.
+
+## Repository
+
+Primary source repository is located on my gogs instance, https://git.1j.nz/firefox-extensions/nzherald-bypass.
+
+Firefox add-on page: https://addons.mozilla.org/en-US/firefox/addon/nzherald-bypass/
+
+## License
+
+MIT License
+
+Copyright (c) 2019 Jason
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+***
+### [inject.js](https://gist.githubusercontent.com/master5o1/54405be477a30d3588e47838cc91df9d/raw/ea91d26e5b7f4929f72a0b78bfadcd8860936b18/inject.js) -- application/javascript, 1.6KiB
+```javascript
+(function() {
+  const MAX_ITERATIONS = document.querySelector('html').innerHTML.length;
+  const loopParse = (json, iteration) => {
+    try {
+      return JSON.parse(json);
+    } catch (e) {
+      const [m, column] = e.message.match(/column (\d+) ?/);
+      const left = json.substring(0, Number(column) - 1).replace(/,$/, '');
+      const right = json.substring(Number(column));
+      if (iteration >= MAX_ITERATIONS) {
+        return null;
+      }
+      return loopParse(left + right, iteration + 1);
+    }
+  };
+  const ld = [].map
+    .call(document.querySelectorAll('script[type="application/ld+json"]'), e => {
+      return loopParse(e.innerText.replace(/[\r\n\ ]/g, ''), 0);
+    })
+    .find(l => {
+      if (!l) {
+        return false;
+      }
+      const isSchema = l['@context'] === 'http://schema.org';
+      const isArticle = l['@type'] === 'Article';
+      const hasPart = l.hasOwnProperty('hasPart');
+      return isSchema && isArticle && hasPart;
+    });
+
+  const content = document.querySelector('.premium-content');
+
+  if (!ld || !content) {
+    return;
+  }
+
+  const selector = ld.hasPart.cssSelector;
+  const inserted = content.parentElement.insertBefore(content.cloneNode(true), content);
+  const [displayed, hidden] = [content, inserted];
+
+  displayed.style.marginBottom = '75px';
+  displayed.removeAttribute('id');
+  displayed.classList.replace('premium-content', 'content');
+  Array.from(displayed.querySelectorAll(selector)).forEach(e => {
+    e.classList.remove(selector.substring(1));
+    e.style = '';
+  });
+
+  hidden.style.opacity = 0.1;
+  hidden.style.height = '1px';
+  hidden.style.overflow = 'hidden';
+})();
+
+```
+***
+### [manifest.json](https://gist.githubusercontent.com/master5o1/54405be477a30d3588e47838cc91df9d/raw/a6c833c273fd1c25e1bb1de901b9fb9c387d4ddf/manifest.json) -- application/json, 372.0B
+```json
+{
+  "manifest_version": 2,
+  "name": "NZHerald Bypass",
+  "version": "1.1.6",
+  "description": "Improves the NZHerald experience",
+  "content_scripts": [
+    {
+      "js": [
+        "inject.js"
+      ],
+      "css": [
+        "style.css"
+      ],
+      "matches": [
+        "https://www.nzherald.co.nz/*"
+      ]
+    }
+  ],
+  "icons": {
+    "128": "img/icon-128.png"
+  }
+}
+```
+***
+### [style.css](https://gist.githubusercontent.com/master5o1/54405be477a30d3588e47838cc91df9d/raw/3b0877051849f79511d12b976eb5d01d63c11c02/style.css) -- text/css, 110.0B
+```css
+.premium-sub,
+.article-offer {
+  display: none !important;
+}
+
+.ellipsis:after {
+  content: None !important;
+}
+
+```
+

+ 27 - 0
content/posts/gist/2019-08-20/7413a1559856fd251657d93b28fbc366.md

@@ -0,0 +1,27 @@
+---
+title: "Declutter"
+date: 2019-08-20T22:35:10Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/7413a1559856fd251657d93b28fbc366)
+
+
+
+
+
+Removes the clutter from various New Zealand news websites and creates a page for the article on telegra.ph.
+
+Website: https://declutter.1j.nz  
+Repository: https://github.com/master5o1/declutter
+
+## Supported websites
+
+- Newsroom
+- Noted
+- NZ Herald
+- Radio NZ
+- Stuff
+- The Spinoff
+
+

+ 20 - 0
content/posts/gist/2020-01-16/0cbebc6297f24e39bba841f0a88fc459.md

@@ -0,0 +1,20 @@
+---
+title: "Skinny 4G Broadband renewal script"
+date: 2020-01-16T00:17:03Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/0cbebc6297f24e39bba841f0a88fc459)
+
+
+
+
+
+Repository: https://git.1j.nz/jason/skinny-renewal
+
+I was looking for options to get better than ADSL internet for my rural house. I had a prepay [Skinny 4G Broadband](https://www.skinny.co.nz/broadband/)  Huawei b315s-608 modem.
+
+I couldn't purchase the 300GB/$59 pack for my address so wondered how I can achieve a reasonable* price for high data usage. Figured out that $5/24 hour unlimited Data Binge would give me a max price of $200 a month.
+
+It would probably only be cost effective if monthly usage were greater than 4x120GB.
+

+ 68 - 0
content/posts/gist/2020-01-29/c4da3b99bcdbf9c01a3d82a73211233d.md

@@ -0,0 +1,68 @@
+---
+title: "Scrabble"
+date: 2020-01-29T08:45:29Z
+tags: ["gist"]
+draft: false
+---
+[gist link](https://gist.github.com/c4da3b99bcdbf9c01a3d82a73211233d)
+
+
+A scrabble-like arrangement of Tannercoin related words (ie, mostly pokemon names). - https://txt.t0.vc/NYZN
+
+
+```
+                            V                                              
+                       SLOWPOKE          PERSIAN                           
+                            L         H  I                                 
+                       FARFETCH'D     Y  D   S    D     VENONAT            
+                            O         PIDGEOTTO   E     I   I              
+                         BEFRIEND     N  E   A    W     L   D        C     
+                         A  B       BOOP Y   R  MAGNEMITE   O        H     
+                         T             R  Mr.MIME O  A  P   R        A     
+               SEADRA  NATTY    PAUL GLOOM   I    N  G CLEFAIRY  VICTREEBEL
+            HODL       U L    FARM  B  B    WEEZING  M  U   N        M     
+               O       M E      I  GAMBLING          A  M   ODDISH   E     
+               W  Q  BWB  OMAIR M   B  E      MEW   PRIMEAPE I   I   L     
+           M KABUTO I  E  E  SOMEBODY  MEWTWO O  R P     B   G   TANGELA   
+           A R R  TANNERCOIN  S S            ALAKAZAM  PARAS L   M   O     
+           C A O    T  P  S TWIN    L  EKANS  T  T R     A  VENOMOTH N     
+           H B      E  H      E M V A  X   P  RAPIDASH       T   N         
+           O B   BINGO ISABEL   O I U  E Z E  E  C S       A T P CLEFABLE  
+        MANKEY   E  E  L  L   P L R R  GYARADOS  A EXEGGUTOR   I H         
+           E  STARTER  E  A  ROULETTE  G P R   W T C   E   C KANGASKHAN    
+                 R   F  DICE  S I U N  C DROWZEE E T  PONYTA   S N         
+      F         JYNX E    K   E O ARTICUNO W   E       D   N   I      G    
+      A      T    I  A    J   I T L    T S     D      DUGTRIO DRAGONAIR    
+  WATER   C METAPOD  RUSSIAN  D T    B E   KINGLER     D   N       I  O    
+  E   MATURE N  I O  O    C  DOM     E         E   y SHELLDER      D  W    
+  E       O  T  K R  W  POKEMON   TELETHON      G         I  MAGNETON L    
+  P  J    P RATTATA     A    M       D O   POLIWRATH  ZUBAT  I     R  I    
+  I  O       C  C NORAH I     M BUTTERFREE   I  I   C   U T  S     A  T    
+SANDSLASH    O  H ♂     GREATBALL A  I S   MACAHMP  U   L OMASTAR  N  H    
+T B  T  A   GOLDUCK   C E L   S A U BLUE   U K  E   B   B    I  H  ♀       
+A E  E  R    L A      H   E   T S R  L ARBOK I  R   O H A    N  Y          
+T L  O  V      M MAGIKARP C ELECTRODE N   N  T    GENGARS D  G RHYDON      
+S L  N  E      A   R  R   T L R O S E I RAICHU    A E U A O  N  O  D       
+   H    S      TENTAQUIL  A E B I   V D   X  N    S   N U D  O  R  ALEX    
+  WIGGLYTUFF G H   V  Z   B CHANSEY E O S    GOLBAT  STARYU W BANG I       
+   T         O YAY E  A   U T L E  SEAKING      E L   E   O A              
+   M         L     LAPRAS Z R L       I O      CLOYSTER     R              
+   O      K  D     E  D   Z O      ZENN R       L  E    NINETALES          
+   NIDORINA  E     R        DODRIO    GOLEM SANDSHREW       O              
+   L      B MEOWTH      KANYE R      F  A       P  L  SCYTHER  P           
+   E NIDOQUEEN    KADABRA     A  M VULPIX V     R     Q     T  O           
+   E      T        E  A KOFFING  A E A    A  JASON    U  P CLICK           
+          O    P   R  N U     O  R N R    PBUO  U     I  O  E  E           
+          PIDGEOT PORYGON  C  NIDOQUEEN   O  N  TENTACRUEL     DUCK        
+          S R  L   D    ALVANDI  W S O O  R  S        T  I  S  E           
+            A  I   A       T  T  A A N M  E  HAKA     L  W  E  X           
+            T  W   CHARMANDER E  K U  MACHOP          E  A  E              
+            I  H   T       R P     R   N  N            RIGGED              
+            N JIGGLYPUFF   P S         Y                                   
+            I  R   L       IVYSAUR     T                                   
+               L           E D         E                                   
+                             U                                             
+                             C                                             
+                             K                                             
+```
+

+ 7 - 0
content/posts/new-site-with-hugo.md

@@ -0,0 +1,7 @@
+---
+title: "New Site With Hugo"
+date: 2020-06-02T22:14:57Z
+draft: false
+---
+
+I'm building a new site using [Hugo](https://gohugo.io/).  I hope this can help me with making a few things simpler.

+ 0 - 1
html

@@ -1 +0,0 @@
-public

template/footer.html → layouts/partials/footer.html


+ 17 - 0
layouts/partials/header.html

@@ -0,0 +1,17 @@
+<div class="site-header">
+    <a class="site-logo" href="{{ .Site.BaseURL | relLangURL }}">
+        <img src="/images/Schwarzenberger.png" alt="logo" />
+    </a>
+
+    <h1>
+        <a href="{{ .Site.BaseURL | relLangURL }}">{{ .Site.Title }}</a>
+    </h1>
+    <div>{{ .Site.Params.description }}</div>
+</div>
+<nav>
+    {{ $currentPage := . }}
+    {{ range .Site.Menus.main }}
+    <a class="{{if or ($currentPage.IsMenuCurrent "main" .) ($currentPage.HasMenuCurrent "main" .) }} active{{end}}"
+        href="{{ .URL | absLangURL }}" title="{{ .Title }}">{{ .Name }}</a>
+    {{ end }}
+</nav>

+ 93 - 0
public/categories/index.html

@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>Categories  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="alternate" type="application/rss+xml" href="https://jason.schwarzenberger.nz/categories/index.xml" title="Jason Schwarzenberger" />
+<link rel="icon" type="image/x-icon" href="https://jason.schwarzenberger.nz/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://jason.schwarzenberger.nz/favicon.png">
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/style.css?rnd=1591147581" />
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/my.css?rnd=1591147581">
+
+<meta property="og:title" content="Categories" />
+<meta property="og:description" content="Software engineer from New Zealand." />
+<meta property="og:type" content="website" />
+<meta property="og:url" content="https://jason.schwarzenberger.nz/categories/" />
+<meta property="og:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="Categories"/>
+<meta name="twitter:description" content="Software engineer from New Zealand."/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div class="site-header">
+    <a class="site-logo" href="/">
+        <img src="/images/Schwarzenberger.png" alt="logo" />
+    </a>
+
+    <h1>
+        <a href="/">Jason Schwarzenberger</a>
+    </h1>
+    <div>Software engineer from New Zealand.</div>
+</div>
+<nav>
+    
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/posts/" title="Archive">Archive</a>
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/tags/" title="Tags">Tags</a>
+    
+</nav>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+    <div class="index-content">
+        
+    </div>
+
+    <h1>Categories</h1>
+
+    <ul class="terms">
+        
+    </ul>
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 14 - 0
public/categories/index.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>Categories on Jason Schwarzenberger</title>
+    <link>https://jason.schwarzenberger.nz/categories/</link>
+    <description>Jason Schwarzenberger (Categories)</description>
+    <generator>Hugo -- gohugo.io</generator>
+    <language>en-us</language>
+    
+    <atom:link href="https://jason.schwarzenberger.nz/categories/index.xml" rel="self" type="application/rss+xml" />
+    
+    
+  </channel>
+</rss>

+ 29 - 0
public/css/my.css

@@ -0,0 +1,29 @@
+.site-header {
+	text-align: left;
+}
+
+.site-header > .site-logo {
+	margin: 1rem 0.5rem 0 0;
+	float: left;
+	
+}
+.site-logo > img {
+	max-width: 4.5rem;
+}
+.site-header > .site-logo:hover {
+	border-bottom: unset;
+}
+
+.site-header > h1 {
+	margin-top: 1rem;
+	font-size: 1.6em;
+}
+.site-header > div {
+	font-size: 0.9em;
+	color: #666;
+}
+
+img[alt=cows] {
+	max-width: 100%;
+	border: solid 1px #f9f9f9;
+}

+ 406 - 0
public/css/style.css

@@ -0,0 +1,406 @@
+/* Basic */
+@import url('https://fonts.googleapis.com/css?family=Montserrat&display=swap');
+html {
+    font-family: -apple-system, BlinkMacSystemFont, 'Montserrat', 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+    /* 1 */
+    -ms-text-size-adjust: 100%;
+    /* 2 */
+    -webkit-text-size-adjust: 100%;
+    /* 2 */
+}
+
+body {
+    margin: 0;
+    background: #ffffff;
+    color: #333;
+    font-size: 18px;
+    line-height: 1.5;
+    -webkit-font-smoothing: antialiased;
+}
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+    display: block;
+}	
+
+.container {
+    max-width: 42em;
+    margin: 0 auto;
+}
+
+main {
+    outline:none;
+}
+
+/* Headers */
+h1 {
+    font-size: 1.35em;
+}
+
+h2 {
+    font-size: 1.2em;
+}
+
+h3 {
+    font-size: 1.1em;
+}
+
+/* Links */
+
+a {
+    color: #1d60a3;
+    text-decoration: none;
+}
+
+a:active,
+a:hover {
+    outline: 0;
+}
+
+a:hover,
+a:focus {
+    color: #a31d1d;
+    border-bottom: 1px solid rgba(163, 29, 29, .5);
+}
+
+a:active {
+    color: #a31d1d;
+    opacity: 0.9;
+    border-bottom: 1px solid rgba(163, 29, 29, .5);
+}
+
+a.skip-main {
+    left:-999px;
+    position:absolute;
+    top:auto;
+    width:1px;
+    height:1px;
+    overflow:hidden;
+    z-index:-999;
+}
+
+a.skip-main:focus, 
+a.skip-main:active {
+    left: auto;
+    top: 0px;
+    width: auto;
+    height: auto;
+    overflow:auto;
+    z-index:999;
+    padding: 4px 6px 4px 6px;
+    text-decoration: underline;
+    border: none;
+}
+
+/* Table */
+.table-wrapper {
+    overflow-x: auto;
+}
+
+table {
+    max-width: 100%;
+    border-spacing: 0;
+}
+
+thead {
+    background: lightgrey;
+}
+
+th, td {
+    padding: 0.5em 1em;
+    border: 1px double lightgrey;
+}
+
+/* Code */
+pre {
+    padding: 1em;
+    background-color: #f1f1f1;
+    max-width: 100%;
+    overflow: auto;
+}
+
+code,
+pre,
+kbd {
+    font-family: monospace;
+    font-size: 0.90em;
+    line-height: 154%;
+}
+
+/* Styles */
+
+blockquote {
+    border-left: 2px solid #cccccc;
+    padding: 0.1em 1em;
+    margin-left: 0.75em;
+}
+
+p {
+    margin-top: 0.5em;
+    margin-bottom: 0.5em;
+}
+
+hr {
+    height: 1px;
+    border: 0;
+    border-top: 1px solid #cccccc;
+}
+
+ul ol, ol ol, ul ul {
+    margin: 0em 2em;
+}
+
+/* Header */
+
+header {
+    display: flex;
+    justify-content: space-between;
+}
+
+header h1 {
+    font-size: 1em;
+    margin-top: 1em;
+    margin-bottom: 0;
+    font-weight: normal;
+}
+
+header h2 {
+    font-size: 1em;
+    margin: 0;
+    font-weight: normal;
+}
+
+header nav {
+    margin-top: 1em;
+    max-width: 100%;
+    text-align: right;
+    margin-bottom: 1em;
+}
+
+header nav a {
+    margin-left: 2em;
+}
+
+header a {
+    color: #333;
+}
+
+.site-header {
+    white-space: nowrap;
+}
+
+/* Pages */
+main h1 {
+    margin-top: 1em;
+    font-weight: normal;
+    line-height: 1.1em;
+    margin-bottom: 0.5em;
+    font-weight: 600;
+}
+
+.post-short-list:first-of-type {
+    margin-top: 1em;
+}
+
+/* Articles */
+
+
+article:not(:last-of-type) {
+    border-bottom: thin solid #f1f1f1;
+    padding-bottom: 2em;
+}
+
+article header h1 {
+    font-size: 1.35em;
+    line-height: 1.1em;
+    margin-bottom: 0.5em;
+    font-weight: 600;
+}
+
+article header h1 a {
+    border: none;
+    text-decoration: none;
+    color: #333;
+}
+
+.article-info {
+    font-size: 0.75em;
+    color: grey;
+    margin-top: 1em;
+}
+
+.article-info a {
+    color: grey;
+}
+
+.article-info a:hover {
+    color: #a31d1d;
+}
+
+.post-short-list .article-info {
+    margin-top: 0;
+    margin-bottom: 1.5em;
+}
+
+.article-taxonomies {
+    display: inline;
+}
+
+.article-date {
+    white-space: nowrap;
+}
+
+.article-categories {
+    display: inline;
+    list-style-type: none;
+    padding: 0;
+}
+
+.article-categories li {
+    display: inline;
+    margin-right: 1em;
+}
+
+.article-tags {
+    display: inline;
+    list-style-type: none;
+    padding: 0;
+    margin: 0;
+}
+
+.article-tags li {
+    display: inline;
+    margin-right: 1em;
+}
+
+article img {
+    max-width: 100%;
+    display: block;
+    height: auto;
+    margin: 0 auto .5em;
+}
+
+.read-more {
+    font-size: 0.85em;
+}
+
+.divider {
+    display: block;
+    height: 1px;
+    border: 0;
+    border-top: thin solid #f1f1f1;
+    width: 25%;
+    margin: 1em auto;
+}
+
+/* Other pages */
+.terms {
+    list-style-type: none;
+    padding: 0;
+    line-height: 2em;
+}
+
+/* Pagination */
+
+.pagination {
+    display: flex;
+    justify-content: space-between;
+    margin-top: 3em;
+}
+
+.pagination {
+    text-align: center;   
+}
+
+.pagination-item {
+    background: #fafafa;
+    padding: 0.75em 0.75em;
+}
+
+.disabled {
+    visibility: hidden;
+}
+
+.pagination-item a {
+    color: #333333;
+}
+
+.pagination-item a:hover, .pagination-item   a:focus {
+    color: #a31d1d;
+    border-bottom: 0;
+}
+
+/* Footer */
+
+footer {
+    border-top: thin solid #f1f1f1;
+    margin-top: 3em;
+    font-size: 16px;
+}
+
+ul.language-select {
+    padding-left: 0;
+    list-style: none;
+    display: flex;
+}
+
+ul.language-select > li {
+    margin-right: 1em;
+}
+
+/* Media Queries */
+
+@media (max-width: 840px) {
+    .main-wrapper {
+        margin: 0;
+        max-width: none;
+        overflow-x: hidden;
+        padding-left: 25px;
+        padding-right: 25px;
+    }
+
+    .container {
+        max-width: 90%;
+        margin: 0 auto;
+    }
+
+    .pagination-item {
+        padding: 0.5em 0.5em;
+        font-size: 14px;
+    }
+
+    header {
+        display: block;
+    }
+
+    .site-header {
+        text-align: center;
+    }
+
+    header nav {
+        margin-top: 1em;
+        max-width: 100%;
+        text-align: center;
+        background: #fafafa;
+        padding: 0.5em 0;
+    }
+
+    header nav a:first-of-type {
+        margin-left: 0;
+    }
+
+    header nav a {
+        margin-left: 5%;
+    }
+}

public/Schwarzenberger.png → public/images/Schwarzenberger.png


public/img/cows.jpg → public/images/cows.jpg


Diff do ficheiro suprimidas por serem muito extensas
+ 3434 - 0
public/index.xml


+ 1 - 0
public/page/1/index.html

@@ -0,0 +1 @@
+<!DOCTYPE html><html><head><title>https://jason.schwarzenberger.nz/</title><link rel="canonical" href="https://jason.schwarzenberger.nz/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://jason.schwarzenberger.nz/" /></head></html>

Diff do ficheiro suprimidas por serem muito extensas
+ 479 - 0
public/page/2/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 480 - 0
public/page/3/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 148 - 0
public/page/4/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 172 - 0
public/posts/gist/2013-04-30/5486455/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 343 - 0
public/posts/gist/2013-06-06/5719743/index.html


+ 182 - 0
public/posts/gist/2013-06-13/5770182/index.html

@@ -0,0 +1,182 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>thing about Question.js  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://jason.schwarzenberger.nz/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://jason.schwarzenberger.nz/favicon.png">
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/style.css?rnd=1591147580" />
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/my.css?rnd=1591147580">
+
+<meta property="og:title" content="thing about Question.js" />
+<meta property="og:description" content="gist link
+Why do I even do these things.
+// Consider this a class for the Question object. function Question(question) { var self = this; // Private variables:  var correct = null; var answers = []; // Public Methods:  self.getQuestion = function () { // This is a &#39;Getter&#39; method.  // It exposes the value of a (private) property of the object.  // The property value cannot be changed." />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://jason.schwarzenberger.nz/posts/gist/2013-06-13/5770182/" />
+<meta property="og:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2013-06-13T00:00:40+00:00" />
+<meta property="article:modified_time" content="2013-06-13T00:00:40+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="thing about Question.js"/>
+<meta name="twitter:description" content="gist link
+Why do I even do these things.
+// Consider this a class for the Question object. function Question(question) { var self = this; // Private variables:  var correct = null; var answers = []; // Public Methods:  self.getQuestion = function () { // This is a &#39;Getter&#39; method.  // It exposes the value of a (private) property of the object.  // The property value cannot be changed."/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div class="site-header">
+    <a class="site-logo" href="/">
+        <img src="/images/Schwarzenberger.png" alt="logo" />
+    </a>
+
+    <h1>
+        <a href="/">Jason Schwarzenberger</a>
+    </h1>
+    <div>Software engineer from New Zealand.</div>
+</div>
+<nav>
+    
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/posts/" title="Archive">Archive</a>
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/tags/" title="Tags">Tags</a>
+    
+</nav>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>thing about Question.js</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/5770182">gist link</a></p>
+<p>Why do I even do these things.</p>
+<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-javascript" data-lang="javascript"><span style="color:#75715e">// Consider this a class for the Question object.
+</span><span style="color:#75715e"></span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">Question</span>(<span style="color:#a6e22e">question</span>) {
+  <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">self</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">this</span>;
+  
+  <span style="color:#75715e">// Private variables:
+</span><span style="color:#75715e"></span>  
+  <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">correct</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">null</span>;
+  <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">answers</span> <span style="color:#f92672">=</span> [];
+  
+  <span style="color:#75715e">// Public Methods:
+</span><span style="color:#75715e"></span>  
+  <span style="color:#a6e22e">self</span>.<span style="color:#a6e22e">getQuestion</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">function</span> () {
+    <span style="color:#75715e">// This is a &#39;Getter&#39; method.
+</span><span style="color:#75715e"></span>    <span style="color:#75715e">// It exposes the value of a (private) property of the object.
+</span><span style="color:#75715e"></span>    <span style="color:#75715e">// The property value cannot be changed.
+</span><span style="color:#75715e"></span>    <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">question</span>;
+  };
+  
+  <span style="color:#a6e22e">self</span>.<span style="color:#a6e22e">getAnswers</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">function</span> () {
+    <span style="color:#75715e">// Because JavaScript passes by reference, if this Getter was set up as:
+</span><span style="color:#75715e"></span>    <span style="color:#75715e">// return answers;
+</span><span style="color:#75715e"></span>    <span style="color:#75715e">// Then it would be possible to overwrite the answers array.
+</span><span style="color:#75715e"></span>    <span style="color:#75715e">// By concatenating answers onto an empty array we are actually passing
+</span><span style="color:#75715e"></span>    <span style="color:#75715e">// a copy of the answers array.
+</span><span style="color:#75715e"></span>    <span style="color:#66d9ef">return</span> [].<span style="color:#a6e22e">concat</span>(<span style="color:#a6e22e">answers</span>);
+  };
+  
+  <span style="color:#a6e22e">self</span>.<span style="color:#a6e22e">addAnswer</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">function</span> (<span style="color:#a6e22e">answer</span>, <span style="color:#a6e22e">isCorrect</span>) {
+    <span style="color:#75715e">// Add an answer to the answers array.
+</span><span style="color:#75715e"></span>    <span style="color:#75715e">// If it exists in the array, set it as correct if it is also correct.
+</span><span style="color:#75715e"></span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">index</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">answers</span>.<span style="color:#a6e22e">indexOf</span>(<span style="color:#a6e22e">answer</span>);
+    <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">index</span> <span style="color:#f92672">&gt;</span> <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>) {
+      <span style="color:#a6e22e">correct</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">isCorrect</span> <span style="color:#f92672">?</span> <span style="color:#a6e22e">index</span> <span style="color:#f92672">:</span> <span style="color:#a6e22e">correct</span>;
+      <span style="color:#66d9ef">return</span>;
+    }
+    <span style="color:#a6e22e">answers</span>.<span style="color:#a6e22e">push</span>(<span style="color:#a6e22e">answer</span>);
+    <span style="color:#75715e">// Recursively call so that it can be set to correct.
+</span><span style="color:#75715e"></span>    <span style="color:#a6e22e">self</span>.<span style="color:#a6e22e">addAnswer</span>(<span style="color:#a6e22e">answer</span>, <span style="color:#a6e22e">isCorrect</span>);
+  };
+  
+  <span style="color:#a6e22e">self</span>.<span style="color:#a6e22e">checkAnswer</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">function</span> (<span style="color:#a6e22e">answer</span>, <span style="color:#a6e22e">answerIndex</span>) {
+    <span style="color:#a6e22e">answerIndex</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">answerIndex</span> <span style="color:#f92672">||</span> <span style="color:#a6e22e">answers</span>.<span style="color:#a6e22e">indexOf</span>(<span style="color:#a6e22e">answer</span>);
+    <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">answerIndex</span> <span style="color:#f92672">===</span> <span style="color:#a6e22e">correct</span>;
+  };
+}
+
+
+<span style="color:#66d9ef">var</span> <span style="color:#a6e22e">question</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">Question</span>(<span style="color:#e6db74">&#39;What colours are on the flag of Switzerland?&#39;</span>);
+<span style="color:#a6e22e">question</span>.<span style="color:#a6e22e">addAnswer</span>(<span style="color:#e6db74">&#39;Black, Red and Yellow&#39;</span>);
+<span style="color:#a6e22e">question</span>.<span style="color:#a6e22e">addAnswer</span>(<span style="color:#e6db74">&#39;Red, White and Blue&#39;</span>);
+<span style="color:#a6e22e">question</span>.<span style="color:#a6e22e">addAnswer</span>(<span style="color:#e6db74">&#39;Red and White&#39;</span>, <span style="color:#66d9ef">true</span>);
+<span style="color:#a6e22e">question</span>.<span style="color:#a6e22e">addAnswer</span>(<span style="color:#e6db74">&#39;Yellow and Green&#39;</span>);
+
+<span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#a6e22e">question</span>);
+
+<span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#a6e22e">question</span>.<span style="color:#a6e22e">getQuestion</span>());
+
+<span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#a6e22e">question</span>.<span style="color:#a6e22e">getAnswers</span>());
+
+<span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#a6e22e">question</span>.<span style="color:#a6e22e">checkAnswer</span>(<span style="color:#e6db74">&#39;Black, Red and Yellow&#39;</span>));
+<span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#a6e22e">question</span>.<span style="color:#a6e22e">checkAnswer</span>(<span style="color:#e6db74">&#39;Red and White&#39;</span>));
+</code></pre></div>
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2013-06-13 00:00</div>
+    
+    <div class="article-taxonomies">
+        
+            
+                <ul class="article-tags">
+                    
+                        <li><a href="https://jason.schwarzenberger.nz/tags/gist">#gist</a></li>
+                    
+                </ul>
+        
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

Diff do ficheiro suprimidas por serem muito extensas
+ 230 - 0
public/posts/gist/2013-12-23/8105640/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 259 - 0
public/posts/gist/2014-02-28/9264937/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 182 - 0
public/posts/gist/2014-03-05/9359839/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 288 - 0
public/posts/gist/2014-07-25/382ce730f1f4c0fa51c2/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 395 - 0
public/posts/gist/2014-07-29/542f067143918c237834/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 326 - 0
public/posts/gist/2014-07-30/e5d2776d44f7ee31820a/index.html


+ 119 - 0
public/posts/gist/2014-09-03/169489838b9e5ee0d100/index.html

@@ -0,0 +1,119 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>gistfile1.txt  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://jason.schwarzenberger.nz/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://jason.schwarzenberger.nz/favicon.png">
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/style.css?rnd=1591147581" />
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/my.css?rnd=1591147581">
+
+<meta property="og:title" content="gistfile1.txt" />
+<meta property="og:description" content="gist link
+Verifying that &#43;master5o1 is my Bitcoin username. You can send me #bitcoin here: https://onename.io/master5o1 " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://jason.schwarzenberger.nz/posts/gist/2014-09-03/169489838b9e5ee0d100/" />
+<meta property="og:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2014-09-03T01:33:51+00:00" />
+<meta property="article:modified_time" content="2014-09-03T01:33:51+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="gistfile1.txt"/>
+<meta name="twitter:description" content="gist link
+Verifying that &#43;master5o1 is my Bitcoin username. You can send me #bitcoin here: https://onename.io/master5o1 "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div class="site-header">
+    <a class="site-logo" href="/">
+        <img src="/images/Schwarzenberger.png" alt="logo" />
+    </a>
+
+    <h1>
+        <a href="/">Jason Schwarzenberger</a>
+    </h1>
+    <div>Software engineer from New Zealand.</div>
+</div>
+<nav>
+    
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/posts/" title="Archive">Archive</a>
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/tags/" title="Tags">Tags</a>
+    
+</nav>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>gistfile1.txt</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/169489838b9e5ee0d100">gist link</a></p>
+<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">Verifying that +master5o1 is my Bitcoin username. You can send me #bitcoin here: https://onename.io/master5o1
+</code></pre></div>
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2014-09-03 01:33</div>
+    
+    <div class="article-taxonomies">
+        
+            
+                <ul class="article-tags">
+                    
+                        <li><a href="https://jason.schwarzenberger.nz/tags/gist">#gist</a></li>
+                    
+                </ul>
+        
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

Diff do ficheiro suprimidas por serem muito extensas
+ 556 - 0
public/posts/gist/2014-12-18/0ac511e0a3ec0cd5cf4a/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 305 - 0
public/posts/gist/2015-02-28/1e8f24628ab13282145a/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 335 - 0
public/posts/gist/2015-02-28/ae3fe23d8b6e0e5a36d1/index.html


+ 136 - 0
public/posts/gist/2015-03-26/0199179c7f57ea7a379a/index.html

@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>konami.js  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://jason.schwarzenberger.nz/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://jason.schwarzenberger.nz/favicon.png">
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/style.css?rnd=1591147581" />
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/my.css?rnd=1591147581">
+
+<meta property="og:title" content="konami.js" />
+<meta property="og:description" content="gist link
+konami(function(){ console.log(&#39;KONAMI!!!&#39;); }); function konami(fn, match) { var konamiCode = &#39;3838404037393739666513&#39;; var sequence = &#39;&#39;; match = match || konamiCode; window.addEventListener(&#39;keyup&#39;, function(event){ sequence &#43;= event.keyCode; if (match === sequence) { fn(); } if (match.indexOf(sequence) === -1) { sequence = &#39;&#39;; } }, false); } " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://jason.schwarzenberger.nz/posts/gist/2015-03-26/0199179c7f57ea7a379a/" />
+<meta property="og:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2015-03-26T03:29:02+00:00" />
+<meta property="article:modified_time" content="2015-03-26T03:29:02+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="konami.js"/>
+<meta name="twitter:description" content="gist link
+konami(function(){ console.log(&#39;KONAMI!!!&#39;); }); function konami(fn, match) { var konamiCode = &#39;3838404037393739666513&#39;; var sequence = &#39;&#39;; match = match || konamiCode; window.addEventListener(&#39;keyup&#39;, function(event){ sequence &#43;= event.keyCode; if (match === sequence) { fn(); } if (match.indexOf(sequence) === -1) { sequence = &#39;&#39;; } }, false); } "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div class="site-header">
+    <a class="site-logo" href="/">
+        <img src="/images/Schwarzenberger.png" alt="logo" />
+    </a>
+
+    <h1>
+        <a href="/">Jason Schwarzenberger</a>
+    </h1>
+    <div>Software engineer from New Zealand.</div>
+</div>
+<nav>
+    
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/posts/" title="Archive">Archive</a>
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/tags/" title="Tags">Tags</a>
+    
+</nav>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>konami.js</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/0199179c7f57ea7a379a">gist link</a></p>
+<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-javascript" data-lang="javascript"><span style="color:#a6e22e">konami</span>(<span style="color:#66d9ef">function</span>(){
+  <span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#e6db74">&#39;KONAMI!!!&#39;</span>);
+});
+
+<span style="color:#66d9ef">function</span> <span style="color:#a6e22e">konami</span>(<span style="color:#a6e22e">fn</span>, <span style="color:#a6e22e">match</span>) {
+  <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">konamiCode</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;3838404037393739666513&#39;</span>;
+  <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">sequence</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;&#39;</span>;
+  <span style="color:#a6e22e">match</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">match</span> <span style="color:#f92672">||</span> <span style="color:#a6e22e">konamiCode</span>;
+  window.<span style="color:#a6e22e">addEventListener</span>(<span style="color:#e6db74">&#39;keyup&#39;</span>, <span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">event</span>){
+    <span style="color:#a6e22e">sequence</span> <span style="color:#f92672">+=</span> <span style="color:#a6e22e">event</span>.<span style="color:#a6e22e">keyCode</span>;
+    <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">match</span> <span style="color:#f92672">===</span> <span style="color:#a6e22e">sequence</span>) {
+      <span style="color:#a6e22e">fn</span>();
+    }
+    <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">match</span>.<span style="color:#a6e22e">indexOf</span>(<span style="color:#a6e22e">sequence</span>) <span style="color:#f92672">===</span> <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>) {
+      <span style="color:#a6e22e">sequence</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;&#39;</span>;
+    }
+  }, <span style="color:#66d9ef">false</span>); 
+}
+</code></pre></div>
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2015-03-26 03:29</div>
+    
+    <div class="article-taxonomies">
+        
+            
+                <ul class="article-tags">
+                    
+                        <li><a href="https://jason.schwarzenberger.nz/tags/gist">#gist</a></li>
+                    
+                </ul>
+        
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

Diff do ficheiro suprimidas por serem muito extensas
+ 159 - 0
public/posts/gist/2015-04-22/23dc705d3a181f532484/index.html


+ 134 - 0
public/posts/gist/2015-04-22/d75343d1a8f7761212f6/index.html

@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>hangman.js  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://jason.schwarzenberger.nz/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://jason.schwarzenberger.nz/favicon.png">
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/style.css?rnd=1591147581" />
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/my.css?rnd=1591147581">
+
+<meta property="og:title" content="hangman.js" />
+<meta property="og:description" content="gist link
+function hangman(word) { var reference = word.replace(/[a-zA-Z]/g,&#39;-&#39;); function reveal(letter) { reference = reference.split(&#39;&#39;).map(function(v, i){ return word[i] === letter ? letter : v; }).join(&#39;&#39;); return reference; }; return { reveal: reveal }; } var game = hangman(&#39;carrot&#39;); console.log(game.reveal(&#39;r&#39;)); console.log(game.reveal(&#39;a&#39;)); " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://jason.schwarzenberger.nz/posts/gist/2015-04-22/d75343d1a8f7761212f6/" />
+<meta property="og:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2015-04-22T23:14:47+00:00" />
+<meta property="article:modified_time" content="2015-04-22T23:14:47+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="hangman.js"/>
+<meta name="twitter:description" content="gist link
+function hangman(word) { var reference = word.replace(/[a-zA-Z]/g,&#39;-&#39;); function reveal(letter) { reference = reference.split(&#39;&#39;).map(function(v, i){ return word[i] === letter ? letter : v; }).join(&#39;&#39;); return reference; }; return { reveal: reveal }; } var game = hangman(&#39;carrot&#39;); console.log(game.reveal(&#39;r&#39;)); console.log(game.reveal(&#39;a&#39;)); "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div class="site-header">
+    <a class="site-logo" href="/">
+        <img src="/images/Schwarzenberger.png" alt="logo" />
+    </a>
+
+    <h1>
+        <a href="/">Jason Schwarzenberger</a>
+    </h1>
+    <div>Software engineer from New Zealand.</div>
+</div>
+<nav>
+    
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/posts/" title="Archive">Archive</a>
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/tags/" title="Tags">Tags</a>
+    
+</nav>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>hangman.js</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/d75343d1a8f7761212f6">gist link</a></p>
+<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-javascript" data-lang="javascript"><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">hangman</span>(<span style="color:#a6e22e">word</span>) {
+    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">reference</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">word</span>.<span style="color:#a6e22e">replace</span>(<span style="color:#e6db74">/[a-zA-Z]/g</span>,<span style="color:#e6db74">&#39;-&#39;</span>);
+    <span style="color:#66d9ef">function</span> <span style="color:#a6e22e">reveal</span>(<span style="color:#a6e22e">letter</span>) {
+        <span style="color:#a6e22e">reference</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">reference</span>.<span style="color:#a6e22e">split</span>(<span style="color:#e6db74">&#39;&#39;</span>).<span style="color:#a6e22e">map</span>(<span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">v</span>, <span style="color:#a6e22e">i</span>){
+            <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">word</span>[<span style="color:#a6e22e">i</span>] <span style="color:#f92672">===</span> <span style="color:#a6e22e">letter</span> <span style="color:#f92672">?</span> <span style="color:#a6e22e">letter</span> <span style="color:#f92672">:</span> <span style="color:#a6e22e">v</span>;
+        }).<span style="color:#a6e22e">join</span>(<span style="color:#e6db74">&#39;&#39;</span>);
+        <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">reference</span>;
+    };
+    <span style="color:#66d9ef">return</span> {
+        <span style="color:#a6e22e">reveal</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">reveal</span>
+    };
+}
+
+<span style="color:#66d9ef">var</span> <span style="color:#a6e22e">game</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">hangman</span>(<span style="color:#e6db74">&#39;carrot&#39;</span>);
+<span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#a6e22e">game</span>.<span style="color:#a6e22e">reveal</span>(<span style="color:#e6db74">&#39;r&#39;</span>));
+<span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#a6e22e">game</span>.<span style="color:#a6e22e">reveal</span>(<span style="color:#e6db74">&#39;a&#39;</span>));
+</code></pre></div>
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2015-04-22 23:14</div>
+    
+    <div class="article-taxonomies">
+        
+            
+                <ul class="article-tags">
+                    
+                        <li><a href="https://jason.schwarzenberger.nz/tags/gist">#gist</a></li>
+                    
+                </ul>
+        
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

Diff do ficheiro suprimidas por serem muito extensas
+ 152 - 0
public/posts/gist/2015-07-13/2f8bc9aeabf8045e34c0/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 141 - 0
public/posts/gist/2015-08-06/7783eac88f2fc8d914a7/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 206 - 0
public/posts/gist/2015-08-19/4cf9bf1096c5d113a01a/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 170 - 0
public/posts/gist/2016-03-04/0edc8df5ed5916434da2/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 295 - 0
public/posts/gist/2016-03-23/7e547987c77cef5aa9fa/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 192 - 0
public/posts/gist/2016-07-24/ee246668d672385bc451feab8b5bbad9/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 122 - 0
public/posts/gist/2017-01-24/b19b585ee2379266d03ac1ee8f53d29f/index.html


+ 131 - 0
public/posts/gist/2018-07-27/fc3aa1bb41da024989c51c6ba968c3da/index.html

@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>fizzbuzz es6  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://jason.schwarzenberger.nz/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://jason.schwarzenberger.nz/favicon.png">
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/style.css?rnd=1591147581" />
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/my.css?rnd=1591147581">
+
+<meta property="og:title" content="fizzbuzz es6" />
+<meta property="og:description" content="gist link
+Displays FizzBuzz without containing the string &ldquo;Fizz&rdquo; or &ldquo;Buzz&rdquo;. Reads the source and extracts the characters from the destructured function parameters. https://jsfiddle.net/master5o1/8ekog4j9/
+const GO=( F,i,z,{[z[0 ]]:B},u, zz)=&gt;B((F% u?&#39;&#39;:GO[z [u/ u]] ()[z[zz- zz/zz]](u- u,u **u &#43;zz -zz )[z [u] ](z [zz ],&#39;&#39; )[ z[/* **/ zz- u/u] ](u -u, zz- u/u ))&#43; (F% zz?&#39;&#39;:GO[z [u/ u]] ()[ z[zz-zz/ zz] ](u -u,u **u &#43;zz -zz )[z [u] ](z [zz ],&#39;&#39; )[z [zz -u/ u]] (zz -u/ u)) ||F )|| F&lt; zz** u-u **u &#43;zz -u?" />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://jason.schwarzenberger.nz/posts/gist/2018-07-27/fc3aa1bb41da024989c51c6ba968c3da/" />
+<meta property="og:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2018-07-27T12:53:45+00:00" />
+<meta property="article:modified_time" content="2018-07-27T12:53:45+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="fizzbuzz es6"/>
+<meta name="twitter:description" content="gist link
+Displays FizzBuzz without containing the string &ldquo;Fizz&rdquo; or &ldquo;Buzz&rdquo;. Reads the source and extracts the characters from the destructured function parameters. https://jsfiddle.net/master5o1/8ekog4j9/
+const GO=( F,i,z,{[z[0 ]]:B},u, zz)=&gt;B((F% u?&#39;&#39;:GO[z [u/ u]] ()[z[zz- zz/zz]](u- u,u **u &#43;zz -zz )[z [u] ](z [zz ],&#39;&#39; )[ z[/* **/ zz- u/u] ](u -u, zz- u/u ))&#43; (F% zz?&#39;&#39;:GO[z [u/ u]] ()[ z[zz-zz/ zz] ](u -u,u **u &#43;zz -zz )[z [u] ](z [zz ],&#39;&#39; )[z [zz -u/ u]] (zz -u/ u)) ||F )|| F&lt; zz** u-u **u &#43;zz -u?"/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div class="site-header">
+    <a class="site-logo" href="/">
+        <img src="/images/Schwarzenberger.png" alt="logo" />
+    </a>
+
+    <h1>
+        <a href="/">Jason Schwarzenberger</a>
+    </h1>
+    <div>Software engineer from New Zealand.</div>
+</div>
+<nav>
+    
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/posts/" title="Archive">Archive</a>
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/tags/" title="Tags">Tags</a>
+    
+</nav>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>fizzbuzz es6</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/fc3aa1bb41da024989c51c6ba968c3da">gist link</a></p>
+<p>Displays FizzBuzz without containing the string &ldquo;Fizz&rdquo; or &ldquo;Buzz&rdquo;. Reads the source and extracts the characters from the destructured function parameters. <a href="https://jsfiddle.net/master5o1/8ekog4j9/">https://jsfiddle.net/master5o1/8ekog4j9/</a></p>
+<pre><code>const GO=( F,i,z,{[z[0 ]]:B},u,  zz)=&gt;B((F%      u?'':GO[z  [u/    u]] ()[z[zz-  zz/zz]](u- 
+u,u            **u          +zz       -zz        )[z    [u] ](z    [zz      ],''      )[  
+z[/*           **/         zz-       u/u]        ](u    -u, zz-    u/u     ))+       (F%
+zz?'':GO[z     [u/        u]]       ()[          z[zz-zz/   zz]    ](u    -u,u      **u
++zz            -zz       )[z       [u]           ](z   [zz  ],''   )[z   [zz       -u/     
+u]]            (zz      -u/       u))            ||F    )|| F&lt;     zz**  u-u      **u      
++zz        -u?GO(F+1,i ,z,i[z[u- zz/zz]],u       ,zz):null   ;//)[z[z  z-u/u]])[ z[zz-u/u] 
+
+
+GO(1,this,['log', 'toString', 'console', 'replace', 'substring', /[^a-z]/gi],console,3,5);
+</code></pre>
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2018-07-27 12:53</div>
+    
+    <div class="article-taxonomies">
+        
+            
+                <ul class="article-tags">
+                    
+                        <li><a href="https://jason.schwarzenberger.nz/tags/gist">#gist</a></li>
+                    
+                </ul>
+        
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

Diff do ficheiro suprimidas por serem muito extensas
+ 303 - 0
public/posts/gist/2019-02-12/04805514b1fc07310000e8c770b6486c/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 161 - 0
public/posts/gist/2019-03-27/e5f8dc43c748032917b25af478ef94df/index.html


Diff do ficheiro suprimidas por serem muito extensas
+ 267 - 0
public/posts/gist/2019-07-21/54405be477a30d3588e47838cc91df9d/index.html


+ 136 - 0
public/posts/gist/2019-08-20/7413a1559856fd251657d93b28fbc366/index.html

@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>Declutter  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://jason.schwarzenberger.nz/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://jason.schwarzenberger.nz/favicon.png">
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/style.css?rnd=1591147581" />
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/my.css?rnd=1591147581">
+
+<meta property="og:title" content="Declutter" />
+<meta property="og:description" content="gist link
+Removes the clutter from various New Zealand news websites and creates a page for the article on telegra.ph.
+Website: https://declutter.1j.nz
+Repository: https://github.com/master5o1/declutter
+Supported websites  Newsroom Noted NZ Herald Radio NZ Stuff The Spinoff  " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://jason.schwarzenberger.nz/posts/gist/2019-08-20/7413a1559856fd251657d93b28fbc366/" />
+<meta property="og:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2019-08-20T22:35:10+00:00" />
+<meta property="article:modified_time" content="2019-08-20T22:35:10+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="Declutter"/>
+<meta name="twitter:description" content="gist link
+Removes the clutter from various New Zealand news websites and creates a page for the article on telegra.ph.
+Website: https://declutter.1j.nz
+Repository: https://github.com/master5o1/declutter
+Supported websites  Newsroom Noted NZ Herald Radio NZ Stuff The Spinoff  "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div class="site-header">
+    <a class="site-logo" href="/">
+        <img src="/images/Schwarzenberger.png" alt="logo" />
+    </a>
+
+    <h1>
+        <a href="/">Jason Schwarzenberger</a>
+    </h1>
+    <div>Software engineer from New Zealand.</div>
+</div>
+<nav>
+    
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/posts/" title="Archive">Archive</a>
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/tags/" title="Tags">Tags</a>
+    
+</nav>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>Declutter</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/7413a1559856fd251657d93b28fbc366">gist link</a></p>
+<p>Removes the clutter from various New Zealand news websites and creates a page for the article on telegra.ph.</p>
+<p>Website: <a href="https://declutter.1j.nz">https://declutter.1j.nz</a><br>
+Repository: <a href="https://github.com/master5o1/declutter">https://github.com/master5o1/declutter</a></p>
+<h2 id="supported-websites">Supported websites</h2>
+<ul>
+<li>Newsroom</li>
+<li>Noted</li>
+<li>NZ Herald</li>
+<li>Radio NZ</li>
+<li>Stuff</li>
+<li>The Spinoff</li>
+</ul>
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2019-08-20 22:35</div>
+    
+    <div class="article-taxonomies">
+        
+            
+                <ul class="article-tags">
+                    
+                        <li><a href="https://jason.schwarzenberger.nz/tags/gist">#gist</a></li>
+                    
+                </ul>
+        
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 128 - 0
public/posts/gist/2020-01-16/0cbebc6297f24e39bba841f0a88fc459/index.html

@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>Skinny 4G Broadband renewal script  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://jason.schwarzenberger.nz/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://jason.schwarzenberger.nz/favicon.png">
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/style.css?rnd=1591147581" />
+
+<link rel="stylesheet" href="https://jason.schwarzenberger.nz/css/my.css?rnd=1591147581">
+
+<meta property="og:title" content="Skinny 4G Broadband renewal script" />
+<meta property="og:description" content="gist link
+Repository: https://git.1j.nz/jason/skinny-renewal
+I was looking for options to get better than ADSL internet for my rural house. I had a prepay Skinny 4G Broadband Huawei b315s-608 modem.
+I couldn&rsquo;t purchase the 300GB/$59 pack for my address so wondered how I can achieve a reasonable* price for high data usage. Figured out that $5/24 hour unlimited Data Binge would give me a max price of $200 a month.
+It would probably only be cost effective if monthly usage were greater than 4x120GB." />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://jason.schwarzenberger.nz/posts/gist/2020-01-16/0cbebc6297f24e39bba841f0a88fc459/" />
+<meta property="og:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2020-01-16T00:17:03+00:00" />
+<meta property="article:modified_time" content="2020-01-16T00:17:03+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://jason.schwarzenberger.nz/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="Skinny 4G Broadband renewal script"/>
+<meta name="twitter:description" content="gist link
+Repository: https://git.1j.nz/jason/skinny-renewal
+I was looking for options to get better than ADSL internet for my rural house. I had a prepay Skinny 4G Broadband Huawei b315s-608 modem.
+I couldn&rsquo;t purchase the 300GB/$59 pack for my address so wondered how I can achieve a reasonable* price for high data usage. Figured out that $5/24 hour unlimited Data Binge would give me a max price of $200 a month.
+It would probably only be cost effective if monthly usage were greater than 4x120GB."/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div class="site-header">
+    <a class="site-logo" href="/">
+        <img src="/images/Schwarzenberger.png" alt="logo" />
+    </a>
+
+    <h1>
+        <a href="/">Jason Schwarzenberger</a>
+    </h1>
+    <div>Software engineer from New Zealand.</div>
+</div>
+<nav>
+    
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/posts/" title="Archive">Archive</a>
+    
+    <a class=""
+        href="https://jason.schwarzenberger.nz/tags/" title="Tags">Tags</a>
+    
+</nav>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>Skinny 4G Broadband renewal script</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/0cbebc6297f24e39bba841f0a88fc459">gist link</a></p>
+<p>Repository: <a href="https://git.1j.nz/jason/skinny-renewal">https://git.1j.nz/jason/skinny-renewal</a></p>
+<p>I was looking for options to get better than ADSL internet for my rural house. I had a prepay <a href="https://www.skinny.co.nz/broadband/">Skinny 4G Broadband</a>  Huawei b315s-608 modem.</p>
+<p>I couldn&rsquo;t purchase the 300GB/$59 pack for my address so wondered how I can achieve a reasonable* price for high data usage. Figured out that $5/24 hour unlimited Data Binge would give me a max price of $200 a month.</p>
+<p>It would probably only be cost effective if monthly usage were greater than 4x120GB.</p>
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2020-01-16 00:17</div>
+    
+    <div class="article-taxonomies">
+        
+            
+                <ul class="article-tags">
+                    
+                        <li><a href="https://jason.schwarzenberger.nz/tags/gist">#gist</a></li>
+                    
+                </ul>
+        
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

Diff do ficheiro suprimidas por serem muito extensas
+ 174 - 0
public/posts/gist/2020-01-29/c4da3b99bcdbf9c01a3d82a73211233d/index.html


+ 106 - 0
public/posts/gist_0199179c7f57ea7a379a/index.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>konami.js  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135233" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135233">
+
+<meta property="og:title" content="konami.js" />
+<meta property="og:description" content="https://gist.github.com/0199179c7f57ea7a379a
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_0199179c7f57ea7a379a/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2015-03-26T03:29:02+00:00" />
+<meta property="article:modified_time" content="2015-03-26T03:29:02+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="konami.js"/>
+<meta name="twitter:description" content="https://gist.github.com/0199179c7f57ea7a379a
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>konami.js</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/0199179c7f57ea7a379a">https://gist.github.com/0199179c7f57ea7a379a</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/0199179c7f57ea7a379a.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2015-03-26 03:29</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 109 - 0
public/posts/gist_04805514b1fc07310000e8c770b6486c/index.html

@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>qif2json.ts  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135233" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135233">
+
+<meta property="og:title" content="qif2json.ts" />
+<meta property="og:description" content="This is qif2json.ts is a minor refactor to bring Typescript support to the qif2json package available on NPM. It is the basic QIF parsing without any other requirements from Node (fs) or NPM (iconv, jschardet). This means that it is possible to do the QIF parsing in the browser.
+https://gist.github.com/04805514b1fc07310000e8c770b6486c
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_04805514b1fc07310000e8c770b6486c/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2019-02-12T21:26:33+00:00" />
+<meta property="article:modified_time" content="2019-02-12T21:26:33+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="qif2json.ts"/>
+<meta name="twitter:description" content="This is qif2json.ts is a minor refactor to bring Typescript support to the qif2json package available on NPM. It is the basic QIF parsing without any other requirements from Node (fs) or NPM (iconv, jschardet). This means that it is possible to do the QIF parsing in the browser.
+https://gist.github.com/04805514b1fc07310000e8c770b6486c
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>qif2json.ts</h1>
+        </header>
+        <div class="content">
+            <p>This is qif2json.ts is a minor refactor to bring Typescript support to the qif2json package available on NPM. It is the basic QIF parsing without any other requirements from Node (fs) or NPM (iconv, jschardet). This means that it is possible to do the QIF parsing in the browser.</p>
+<p><a href="https://gist.github.com/04805514b1fc07310000e8c770b6486c">https://gist.github.com/04805514b1fc07310000e8c770b6486c</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/04805514b1fc07310000e8c770b6486c.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2019-02-12 21:26</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 109 - 0
public/posts/gist_0ac511e0a3ec0cd5cf4a/index.html

@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>WebSocketRpc.js  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135233" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135233">
+
+<meta property="og:title" content="WebSocketRpc.js" />
+<meta property="og:description" content="WebSocket RPC
+https://gist.github.com/0ac511e0a3ec0cd5cf4a
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_0ac511e0a3ec0cd5cf4a/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2014-12-18T04:29:14+00:00" />
+<meta property="article:modified_time" content="2014-12-18T04:29:14+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="WebSocketRpc.js"/>
+<meta name="twitter:description" content="WebSocket RPC
+https://gist.github.com/0ac511e0a3ec0cd5cf4a
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>WebSocketRpc.js</h1>
+        </header>
+        <div class="content">
+            <p>WebSocket RPC</p>
+<p><a href="https://gist.github.com/0ac511e0a3ec0cd5cf4a">https://gist.github.com/0ac511e0a3ec0cd5cf4a</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/0ac511e0a3ec0cd5cf4a.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2014-12-18 04:29</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 109 - 0
public/posts/gist_0cbebc6297f24e39bba841f0a88fc459/index.html

@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>Skinny 4G Broadband renewal script.md  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135233" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135233">
+
+<meta property="og:title" content="Skinny 4G Broadband renewal script.md" />
+<meta property="og:description" content="Balance checker and data pack renewal script for Skinny 4G Broadband.
+https://gist.github.com/0cbebc6297f24e39bba841f0a88fc459
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_0cbebc6297f24e39bba841f0a88fc459/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2020-01-16T00:17:03+00:00" />
+<meta property="article:modified_time" content="2020-01-16T00:17:03+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="Skinny 4G Broadband renewal script.md"/>
+<meta name="twitter:description" content="Balance checker and data pack renewal script for Skinny 4G Broadband.
+https://gist.github.com/0cbebc6297f24e39bba841f0a88fc459
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>Skinny 4G Broadband renewal script.md</h1>
+        </header>
+        <div class="content">
+            <p>Balance checker and data pack renewal script for Skinny 4G Broadband.</p>
+<p><a href="https://gist.github.com/0cbebc6297f24e39bba841f0a88fc459">https://gist.github.com/0cbebc6297f24e39bba841f0a88fc459</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/0cbebc6297f24e39bba841f0a88fc459.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2020-01-16 00:17</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 106 - 0
public/posts/gist_0edc8df5ed5916434da2/index.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>pgp_public.asc  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135233" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135233">
+
+<meta property="og:title" content="pgp_public.asc" />
+<meta property="og:description" content="https://gist.github.com/0edc8df5ed5916434da2
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_0edc8df5ed5916434da2/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2016-03-04T07:57:41+00:00" />
+<meta property="article:modified_time" content="2016-03-04T07:57:41+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="pgp_public.asc"/>
+<meta name="twitter:description" content="https://gist.github.com/0edc8df5ed5916434da2
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>pgp_public.asc</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/0edc8df5ed5916434da2">https://gist.github.com/0edc8df5ed5916434da2</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/0edc8df5ed5916434da2.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2016-03-04 07:57</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 106 - 0
public/posts/gist_169489838b9e5ee0d100/index.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>gistfile1.txt  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135233" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135233">
+
+<meta property="og:title" content="gistfile1.txt" />
+<meta property="og:description" content="https://gist.github.com/169489838b9e5ee0d100
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_169489838b9e5ee0d100/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2014-09-03T01:33:51+00:00" />
+<meta property="article:modified_time" content="2014-09-03T01:33:51+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="gistfile1.txt"/>
+<meta name="twitter:description" content="https://gist.github.com/169489838b9e5ee0d100
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>gistfile1.txt</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/169489838b9e5ee0d100">https://gist.github.com/169489838b9e5ee0d100</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/169489838b9e5ee0d100.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2014-09-03 01:33</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 109 - 0
public/posts/gist_1e8f24628ab13282145a/index.html

@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>index.html  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135233" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135233">
+
+<meta property="og:title" content="index.html" />
+<meta property="og:description" content="Simpler Name Generator Thing
+https://gist.github.com/1e8f24628ab13282145a
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_1e8f24628ab13282145a/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2015-02-28T10:18:44+00:00" />
+<meta property="article:modified_time" content="2015-02-28T10:18:44+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="index.html"/>
+<meta name="twitter:description" content="Simpler Name Generator Thing
+https://gist.github.com/1e8f24628ab13282145a
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>index.html</h1>
+        </header>
+        <div class="content">
+            <p>Simpler Name Generator Thing</p>
+<p><a href="https://gist.github.com/1e8f24628ab13282145a">https://gist.github.com/1e8f24628ab13282145a</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/1e8f24628ab13282145a.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2015-02-28 10:18</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 109 - 0
public/posts/gist_23dc705d3a181f532484/index.html

@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>not-ie.js  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135233" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135233">
+
+<meta property="og:title" content="not-ie.js" />
+<meta property="og:description" content="Small is or is not internet explorer. Provides .ie or .is-ie and .not-ie css classes.
+https://gist.github.com/23dc705d3a181f532484
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_23dc705d3a181f532484/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2015-04-22T05:19:17+00:00" />
+<meta property="article:modified_time" content="2015-04-22T05:19:17+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="not-ie.js"/>
+<meta name="twitter:description" content="Small is or is not internet explorer. Provides .ie or .is-ie and .not-ie css classes.
+https://gist.github.com/23dc705d3a181f532484
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>not-ie.js</h1>
+        </header>
+        <div class="content">
+            <p>Small is or is not internet explorer. Provides .ie or .is-ie and .not-ie css classes.</p>
+<p><a href="https://gist.github.com/23dc705d3a181f532484">https://gist.github.com/23dc705d3a181f532484</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/23dc705d3a181f532484.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2015-04-22 05:19</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 109 - 0
public/posts/gist_2f8bc9aeabf8045e34c0/index.html

@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>MockAjax.js  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135233" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135233">
+
+<meta property="og:title" content="MockAjax.js" />
+<meta property="og:description" content="silly little thing.
+https://gist.github.com/2f8bc9aeabf8045e34c0
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_2f8bc9aeabf8045e34c0/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2015-07-13T23:48:29+00:00" />
+<meta property="article:modified_time" content="2015-07-13T23:48:29+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="MockAjax.js"/>
+<meta name="twitter:description" content="silly little thing.
+https://gist.github.com/2f8bc9aeabf8045e34c0
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>MockAjax.js</h1>
+        </header>
+        <div class="content">
+            <p>silly little thing.</p>
+<p><a href="https://gist.github.com/2f8bc9aeabf8045e34c0">https://gist.github.com/2f8bc9aeabf8045e34c0</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/2f8bc9aeabf8045e34c0.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2015-07-13 23:48</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 106 - 0
public/posts/gist_382ce730f1f4c0fa51c2/index.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>BitNZ.js  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135233" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135233">
+
+<meta property="og:title" content="BitNZ.js" />
+<meta property="og:description" content="https://gist.github.com/382ce730f1f4c0fa51c2
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_382ce730f1f4c0fa51c2/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2014-07-25T23:27:46+00:00" />
+<meta property="article:modified_time" content="2014-07-25T23:27:46+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="BitNZ.js"/>
+<meta name="twitter:description" content="https://gist.github.com/382ce730f1f4c0fa51c2
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>BitNZ.js</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/382ce730f1f4c0fa51c2">https://gist.github.com/382ce730f1f4c0fa51c2</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/382ce730f1f4c0fa51c2.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2014-07-25 23:27</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 106 - 0
public/posts/gist_4cf9bf1096c5d113a01a/index.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>lolcryption.py  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135233" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135233">
+
+<meta property="og:title" content="lolcryption.py" />
+<meta property="og:description" content="https://gist.github.com/4cf9bf1096c5d113a01a
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_4cf9bf1096c5d113a01a/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2015-08-19T09:24:48+00:00" />
+<meta property="article:modified_time" content="2015-08-19T09:24:48+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="lolcryption.py"/>
+<meta name="twitter:description" content="https://gist.github.com/4cf9bf1096c5d113a01a
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>lolcryption.py</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/4cf9bf1096c5d113a01a">https://gist.github.com/4cf9bf1096c5d113a01a</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/4cf9bf1096c5d113a01a.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2015-08-19 09:24</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 106 - 0
public/posts/gist_542f067143918c237834/index.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>BitNZService.js  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135234" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135234">
+
+<meta property="og:title" content="BitNZService.js" />
+<meta property="og:description" content="https://gist.github.com/542f067143918c237834
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_542f067143918c237834/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2014-07-29T10:23:12+00:00" />
+<meta property="article:modified_time" content="2014-07-29T10:23:12+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="BitNZService.js"/>
+<meta name="twitter:description" content="https://gist.github.com/542f067143918c237834
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>BitNZService.js</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/542f067143918c237834">https://gist.github.com/542f067143918c237834</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/542f067143918c237834.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2014-07-29 10:23</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 109 - 0
public/posts/gist_54405be477a30d3588e47838cc91df9d/index.html

@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>NZHerald Bypass.md  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135234" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135234">
+
+<meta property="og:title" content="NZHerald Bypass.md" />
+<meta property="og:description" content="Bypasses the new NZHerald Premium paywall using Javascript to peek at the LD&#43;JSON Schema to figure out which CSS selector is being used to hide content. I made this mostly for myself.
+https://gist.github.com/54405be477a30d3588e47838cc91df9d
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_54405be477a30d3588e47838cc91df9d/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2019-07-21T22:11:19+00:00" />
+<meta property="article:modified_time" content="2019-07-21T22:11:19+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="NZHerald Bypass.md"/>
+<meta name="twitter:description" content="Bypasses the new NZHerald Premium paywall using Javascript to peek at the LD&#43;JSON Schema to figure out which CSS selector is being used to hide content. I made this mostly for myself.
+https://gist.github.com/54405be477a30d3588e47838cc91df9d
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>NZHerald Bypass.md</h1>
+        </header>
+        <div class="content">
+            <p>Bypasses the new NZHerald Premium paywall using Javascript to peek at the LD+JSON Schema to figure out which CSS selector is being used to hide content.  I made this mostly for myself.</p>
+<p><a href="https://gist.github.com/54405be477a30d3588e47838cc91df9d">https://gist.github.com/54405be477a30d3588e47838cc91df9d</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/54405be477a30d3588e47838cc91df9d.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2019-07-21 22:11</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 106 - 0
public/posts/gist_5486455/index.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>lolcrypt.py  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135234" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135234">
+
+<meta property="og:title" content="lolcrypt.py" />
+<meta property="og:description" content="https://gist.github.com/5486455
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_5486455/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2013-04-30T03:33:46+00:00" />
+<meta property="article:modified_time" content="2013-04-30T03:33:46+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="lolcrypt.py"/>
+<meta name="twitter:description" content="https://gist.github.com/5486455
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>lolcrypt.py</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/5486455">https://gist.github.com/5486455</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/5486455.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2013-04-30 03:33</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 112 - 0
public/posts/gist_5719743/index.html

@@ -0,0 +1,112 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>array things.js  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135234" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135234">
+
+<meta property="og:title" content="array things.js" />
+<meta property="og:description" content="I&rsquo;ve been nursing this in a JS Fiddle for a short time now. Just been playing with the LINQ methods and how they would be in JS.
+I find OrderBy and GroupBy are interesting.
+https://gist.github.com/5719743
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_5719743/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2013-06-06T06:47:55+00:00" />
+<meta property="article:modified_time" content="2013-06-06T06:47:55+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="array things.js"/>
+<meta name="twitter:description" content="I&rsquo;ve been nursing this in a JS Fiddle for a short time now. Just been playing with the LINQ methods and how they would be in JS.
+I find OrderBy and GroupBy are interesting.
+https://gist.github.com/5719743
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>array things.js</h1>
+        </header>
+        <div class="content">
+            <p>I&rsquo;ve been nursing this in a JS Fiddle for a short time now. Just been playing with the LINQ methods and how they would be in JS.</p>
+<p>I find OrderBy and GroupBy are interesting.</p>
+<p><a href="https://gist.github.com/5719743">https://gist.github.com/5719743</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/5719743.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2013-06-06 06:47</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 109 - 0
public/posts/gist_5770182/index.html

@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>thing about Question.js  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135234" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135234">
+
+<meta property="og:title" content="thing about Question.js" />
+<meta property="og:description" content="Why do I even do these things.
+https://gist.github.com/5770182
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_5770182/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2013-06-13T00:00:40+00:00" />
+<meta property="article:modified_time" content="2013-06-13T00:00:40+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="thing about Question.js"/>
+<meta name="twitter:description" content="Why do I even do these things.
+https://gist.github.com/5770182
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>thing about Question.js</h1>
+        </header>
+        <div class="content">
+            <p>Why do I even do these things.</p>
+<p><a href="https://gist.github.com/5770182">https://gist.github.com/5770182</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/5770182.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2013-06-13 00:00</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 109 - 0
public/posts/gist_7413a1559856fd251657d93b28fbc366/index.html

@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>Declutter.md  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135234" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135234">
+
+<meta property="og:title" content="Declutter.md" />
+<meta property="og:description" content="Removes the clutter from various New Zealand news websites and creates a page for the article on telegra.ph. https://declutter.1j.nz
+https://gist.github.com/7413a1559856fd251657d93b28fbc366
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_7413a1559856fd251657d93b28fbc366/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2019-08-20T22:35:10+00:00" />
+<meta property="article:modified_time" content="2019-08-20T22:35:10+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="Declutter.md"/>
+<meta name="twitter:description" content="Removes the clutter from various New Zealand news websites and creates a page for the article on telegra.ph. https://declutter.1j.nz
+https://gist.github.com/7413a1559856fd251657d93b28fbc366
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>Declutter.md</h1>
+        </header>
+        <div class="content">
+            <p>Removes the clutter from various New Zealand news websites and creates a page for the article on telegra.ph. <a href="https://declutter.1j.nz">https://declutter.1j.nz</a></p>
+<p><a href="https://gist.github.com/7413a1559856fd251657d93b28fbc366">https://gist.github.com/7413a1559856fd251657d93b28fbc366</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/7413a1559856fd251657d93b28fbc366.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2019-08-20 22:35</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 106 - 0
public/posts/gist_7783eac88f2fc8d914a7/index.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+    
+        
+<meta charset="utf-8">
+<meta name="HandheldFriendly" content="True">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="referrer" content="no-referrer-when-downgrade">
+
+<title>radionz-rss-feeds.html  - Jason Schwarzenberger</title>
+<meta name="description" content="Software engineer from New Zealand.">
+
+<link rel="icon" type="image/x-icon" href="https://1j.nz/new/favicon.ico">
+<link rel="apple-touch-icon-precomposed" href="https://1j.nz/new/favicon.png">
+
+<link rel="stylesheet" href="https://1j.nz/new/css/style.css?rnd=1591135234" />
+
+<link rel="stylesheet" href="https://1j.nz/new/css/my.css?rnd=1591135234">
+
+<meta property="og:title" content="radionz-rss-feeds.html" />
+<meta property="og:description" content="https://gist.github.com/7783eac88f2fc8d914a7
+ " />
+<meta property="og:type" content="article" />
+<meta property="og:url" content="https://1j.nz/new/posts/gist_7783eac88f2fc8d914a7/" />
+<meta property="og:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+<meta property="article:published_time" content="2015-08-06T09:05:39+00:00" />
+<meta property="article:modified_time" content="2015-08-06T09:05:39+00:00" />
+
+<meta name="twitter:card" content="summary_large_image"/>
+<meta name="twitter:image" content="https://1j.nz/new/images/Schwarzenberger.png"/>
+
+<meta name="twitter:title" content="radionz-rss-feeds.html"/>
+<meta name="twitter:description" content="https://gist.github.com/7783eac88f2fc8d914a7
+ "/>
+
+
+
+
+
+
+    
+</head>
+<body>
+    <a class="skip-main" href="#main">Skip to main content</a>
+    <div class="container">
+        <header> 
+            
+                <div>
+    <div class="site-header">
+        <h1>
+            <a href="/new">Jason Schwarzenberger</a>
+        </h1>
+        <div>Software engineer from New Zealand.</div>
+    </div>
+</div>
+<div>
+    <img src="/images/Schwarzenberger.png" alt="logo" class="site-logo" />
+    
+</div>
+            
+        </header>
+        <main id="main" tabindex="-1"> 
+            
+
+    <article class="post">
+        <header>
+            <h1>radionz-rss-feeds.html</h1>
+        </header>
+        <div class="content">
+            <p><a href="https://gist.github.com/7783eac88f2fc8d914a7">https://gist.github.com/7783eac88f2fc8d914a7</a></p>
+<script type="application/javascript" src="https://gist.github.com/master5o1/7783eac88f2fc8d914a7.js"></script>
+
+
+        </div>
+        
+
+    
+
+
+<div class="article-info">
+    
+        <div class="article-date">2015-08-06 09:05</div>
+    
+    <div class="article-taxonomies">
+        
+            
+    </div>
+</div>
+
+    </article>
+    
+
+
+        </main>
+        <footer>
+            
+                
+                
+
+                
+            
+        </footer>
+    </div>
+</body>
+</html>

+ 0 - 0
public/posts/gist_7e547987c77cef5aa9fa/index.html


Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff