Browse Source

Add project files

master
Matthew Jorgensen 1 month ago
commit
2be90a0cce

+ 0
- 0
.build.yml View File


+ 3
- 0
.gitignore View File

@@ -0,0 +1,3 @@
1
+_site
2
+.sass-cache
3
+.jekyll-metadata

+ 22
- 0
404.html View File

@@ -0,0 +1,22 @@
1
+---
2
+layout: page
3
+---
4
+
5
+<!-- <style type="text/css" media="screen">
6
+  .container {
7
+    margin: 10px auto;
8
+    max-width: 600px;
9
+    text-align: center;
10
+  }
11
+  h1 {
12
+    margin: 30px 0;
13
+    font-size: 4em;
14
+    line-height: 1;
15
+    letter-spacing: -1px;
16
+  }
17
+</style> -->
18
+
19
+<div class="content">
20
+  <div class="alert">
21
+    <strong>404 &mdash; Page Not Found</strong>
22
+</div>

+ 31
- 0
Gemfile View File

@@ -0,0 +1,31 @@
1
+source "https://rubygems.org"
2
+
3
+# Hello! This is where you manage which Jekyll version is used to run.
4
+# When you want to use a different version, change it below, save the
5
+# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
6
+#
7
+#     bundle exec jekyll serve
8
+#
9
+# This will help ensure the proper Jekyll version is running.
10
+# Happy Jekylling!
11
+gem "jekyll", "~> 3.8.5"
12
+
13
+# This is the default theme for new Jekyll sites. You may change this to anything you like.
14
+# gem "minima", "~> 2.0"
15
+
16
+# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
17
+# uncomment the line below. To upgrade, run `bundle update github-pages`.
18
+# gem "github-pages", group: :jekyll_plugins
19
+
20
+# If you have any plugins, put them here!
21
+group :jekyll_plugins do
22
+  gem "jekyll-feed", "~> 0.6"
23
+  gem "jekyll-paginate"
24
+end
25
+
26
+# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
27
+gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]
28
+
29
+# Performance-booster for watching directories on Windows
30
+gem "wdm", "~> 0.1.0" if Gem.win_platform?
31
+

+ 69
- 0
Gemfile.lock View File

@@ -0,0 +1,69 @@
1
+GEM
2
+  remote: https://rubygems.org/
3
+  specs:
4
+    addressable (2.6.0)
5
+      public_suffix (>= 2.0.2, < 4.0)
6
+    colorator (1.1.0)
7
+    concurrent-ruby (1.1.5)
8
+    em-websocket (0.5.1)
9
+      eventmachine (>= 0.12.9)
10
+      http_parser.rb (~> 0.6.0)
11
+    eventmachine (1.2.7)
12
+    ffi (1.10.0)
13
+    forwardable-extended (2.6.0)
14
+    http_parser.rb (0.6.0)
15
+    i18n (0.9.5)
16
+      concurrent-ruby (~> 1.0)
17
+    jekyll (3.8.5)
18
+      addressable (~> 2.4)
19
+      colorator (~> 1.0)
20
+      em-websocket (~> 0.5)
21
+      i18n (~> 0.7)
22
+      jekyll-sass-converter (~> 1.0)
23
+      jekyll-watch (~> 2.0)
24
+      kramdown (~> 1.14)
25
+      liquid (~> 4.0)
26
+      mercenary (~> 0.3.3)
27
+      pathutil (~> 0.9)
28
+      rouge (>= 1.7, < 4)
29
+      safe_yaml (~> 1.0)
30
+    jekyll-feed (0.12.1)
31
+      jekyll (>= 3.7, < 5.0)
32
+    jekyll-paginate (1.1.0)
33
+    jekyll-sass-converter (1.5.2)
34
+      sass (~> 3.4)
35
+    jekyll-watch (2.2.1)
36
+      listen (~> 3.0)
37
+    kramdown (1.17.0)
38
+    liquid (4.0.3)
39
+    listen (3.1.5)
40
+      rb-fsevent (~> 0.9, >= 0.9.4)
41
+      rb-inotify (~> 0.9, >= 0.9.7)
42
+      ruby_dep (~> 1.2)
43
+    mercenary (0.3.6)
44
+    pathutil (0.16.2)
45
+      forwardable-extended (~> 2.6)
46
+    public_suffix (3.0.3)
47
+    rb-fsevent (0.10.3)
48
+    rb-inotify (0.10.0)
49
+      ffi (~> 1.0)
50
+    rouge (3.3.0)
51
+    ruby_dep (1.5.0)
52
+    safe_yaml (1.0.5)
53
+    sass (3.7.4)
54
+      sass-listen (~> 4.0.0)
55
+    sass-listen (4.0.0)
56
+      rb-fsevent (~> 0.9, >= 0.9.4)
57
+      rb-inotify (~> 0.9, >= 0.9.7)
58
+
59
+PLATFORMS
60
+  ruby
61
+
62
+DEPENDENCIES
63
+  jekyll (~> 3.8.5)
64
+  jekyll-feed (~> 0.6)
65
+  jekyll-paginate
66
+  tzinfo-data
67
+
68
+BUNDLED WITH
69
+   2.0.1

+ 393
- 0
LICENSE View File

@@ -0,0 +1,393 @@
1
+The code that powers this site uses the following license:
2
+
3
+    Permission is hereby granted, free of charge, to any person obtaining a
4
+    copy of this software and associated documentation files (the "Software"),
5
+    to deal in the Software without restriction, including without limitation
6
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
7
+    and/or sell copies of the Software, and to permit persons to whom the
8
+    Software is furnished to do so, subject to the following conditions:
9
+
10
+    The above copyright notice and this permission notice shall be included in
11
+    all copies or substantial portions of the Software.
12
+
13
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
19
+    DEALINGS IN THE SOFTWARE.
20
+
21
+The articles themselves are CC-BY-SA 4.0:
22
+
23
+    Creative Commons Attribution-ShareAlike 4.0 International Public
24
+    License
25
+
26
+    By exercising the Licensed Rights (defined below), You accept and agree
27
+    to be bound by the terms and conditions of this Creative Commons
28
+    Attribution-ShareAlike 4.0 International Public License ("Public
29
+    License"). To the extent this Public License may be interpreted as a
30
+    contract, You are granted the Licensed Rights in consideration of Your
31
+    acceptance of these terms and conditions, and the Licensor grants You
32
+    such rights in consideration of benefits the Licensor receives from
33
+    making the Licensed Material available under these terms and
34
+    conditions.
35
+
36
+
37
+    Section 1 -- Definitions.
38
+
39
+      a. Adapted Material means material subject to Copyright and Similar
40
+         Rights that is derived from or based upon the Licensed Material
41
+         and in which the Licensed Material is translated, altered,
42
+         arranged, transformed, or otherwise modified in a manner requiring
43
+         permission under the Copyright and Similar Rights held by the
44
+         Licensor. For purposes of this Public License, where the Licensed
45
+         Material is a musical work, performance, or sound recording,
46
+         Adapted Material is always produced where the Licensed Material is
47
+         synched in timed relation with a moving image.
48
+
49
+      b. Adapter's License means the license You apply to Your Copyright
50
+         and Similar Rights in Your contributions to Adapted Material in
51
+         accordance with the terms and conditions of this Public License.
52
+
53
+      c. BY-SA Compatible License means a license listed at
54
+         creativecommons.org/compatiblelicenses, approved by Creative
55
+         Commons as essentially the equivalent of this Public License.
56
+
57
+      d. Copyright and Similar Rights means copyright and/or similar rights
58
+         closely related to copyright including, without limitation,
59
+         performance, broadcast, sound recording, and Sui Generis Database
60
+         Rights, without regard to how the rights are labeled or
61
+         categorized. For purposes of this Public License, the rights
62
+         specified in Section 2(b)(1)-(2) are not Copyright and Similar
63
+         Rights.
64
+
65
+      e. Effective Technological Measures means those measures that, in the
66
+         absence of proper authority, may not be circumvented under laws
67
+         fulfilling obligations under Article 11 of the WIPO Copyright
68
+         Treaty adopted on December 20, 1996, and/or similar international
69
+         agreements.
70
+
71
+      f. Exceptions and Limitations means fair use, fair dealing, and/or
72
+         any other exception or limitation to Copyright and Similar Rights
73
+         that applies to Your use of the Licensed Material.
74
+
75
+      g. License Elements means the license attributes listed in the name
76
+         of a Creative Commons Public License. The License Elements of this
77
+         Public License are Attribution and ShareAlike.
78
+
79
+      h. Licensed Material means the artistic or literary work, database,
80
+         or other material to which the Licensor applied this Public
81
+         License.
82
+
83
+      i. Licensed Rights means the rights granted to You subject to the
84
+         terms and conditions of this Public License, which are limited to
85
+         all Copyright and Similar Rights that apply to Your use of the
86
+         Licensed Material and that the Licensor has authority to license.
87
+
88
+      j. Licensor means the individual(s) or entity(ies) granting rights
89
+         under this Public License.
90
+
91
+      k. Share means to provide material to the public by any means or
92
+         process that requires permission under the Licensed Rights, such
93
+         as reproduction, public display, public performance, distribution,
94
+         dissemination, communication, or importation, and to make material
95
+         available to the public including in ways that members of the
96
+         public may access the material from a place and at a time
97
+         individually chosen by them.
98
+
99
+      l. Sui Generis Database Rights means rights other than copyright
100
+         resulting from Directive 96/9/EC of the European Parliament and of
101
+         the Council of 11 March 1996 on the legal protection of databases,
102
+         as amended and/or succeeded, as well as other essentially
103
+         equivalent rights anywhere in the world.
104
+
105
+      m. You means the individual or entity exercising the Licensed Rights
106
+         under this Public License. Your has a corresponding meaning.
107
+
108
+
109
+    Section 2 -- Scope.
110
+
111
+      a. License grant.
112
+
113
+           1. Subject to the terms and conditions of this Public License,
114
+              the Licensor hereby grants You a worldwide, royalty-free,
115
+              non-sublicensable, non-exclusive, irrevocable license to
116
+              exercise the Licensed Rights in the Licensed Material to:
117
+
118
+                a. reproduce and Share the Licensed Material, in whole or
119
+                   in part; and
120
+
121
+                b. produce, reproduce, and Share Adapted Material.
122
+
123
+           2. Exceptions and Limitations. For the avoidance of doubt, where
124
+              Exceptions and Limitations apply to Your use, this Public
125
+              License does not apply, and You do not need to comply with
126
+              its terms and conditions.
127
+
128
+           3. Term. The term of this Public License is specified in Section
129
+              6(a).
130
+
131
+           4. Media and formats; technical modifications allowed. The
132
+              Licensor authorizes You to exercise the Licensed Rights in
133
+              all media and formats whether now known or hereafter created,
134
+              and to make technical modifications necessary to do so. The
135
+              Licensor waives and/or agrees not to assert any right or
136
+              authority to forbid You from making technical modifications
137
+              necessary to exercise the Licensed Rights, including
138
+              technical modifications necessary to circumvent Effective
139
+              Technological Measures. For purposes of this Public License,
140
+              simply making modifications authorized by this Section 2(a)
141
+              (4) never produces Adapted Material.
142
+
143
+           5. Downstream recipients.
144
+
145
+                a. Offer from the Licensor -- Licensed Material. Every
146
+                   recipient of the Licensed Material automatically
147
+                   receives an offer from the Licensor to exercise the
148
+                   Licensed Rights under the terms and conditions of this
149
+                   Public License.
150
+
151
+                b. Additional offer from the Licensor -- Adapted Material.
152
+                   Every recipient of Adapted Material from You
153
+                   automatically receives an offer from the Licensor to
154
+                   exercise the Licensed Rights in the Adapted Material
155
+                   under the conditions of the Adapter's License You apply.
156
+
157
+                c. No downstream restrictions. You may not offer or impose
158
+                   any additional or different terms or conditions on, or
159
+                   apply any Effective Technological Measures to, the
160
+                   Licensed Material if doing so restricts exercise of the
161
+                   Licensed Rights by any recipient of the Licensed
162
+                   Material.
163
+
164
+           6. No endorsement. Nothing in this Public License constitutes or
165
+              may be construed as permission to assert or imply that You
166
+              are, or that Your use of the Licensed Material is, connected
167
+              with, or sponsored, endorsed, or granted official status by,
168
+              the Licensor or others designated to receive attribution as
169
+              provided in Section 3(a)(1)(A)(i).
170
+
171
+      b. Other rights.
172
+
173
+           1. Moral rights, such as the right of integrity, are not
174
+              licensed under this Public License, nor are publicity,
175
+              privacy, and/or other similar personality rights; however, to
176
+              the extent possible, the Licensor waives and/or agrees not to
177
+              assert any such rights held by the Licensor to the limited
178
+              extent necessary to allow You to exercise the Licensed
179
+              Rights, but not otherwise.
180
+
181
+           2. Patent and trademark rights are not licensed under this
182
+              Public License.
183
+
184
+           3. To the extent possible, the Licensor waives any right to
185
+              collect royalties from You for the exercise of the Licensed
186
+              Rights, whether directly or through a collecting society
187
+              under any voluntary or waivable statutory or compulsory
188
+              licensing scheme. In all other cases the Licensor expressly
189
+              reserves any right to collect such royalties.
190
+
191
+
192
+    Section 3 -- License Conditions.
193
+
194
+    Your exercise of the Licensed Rights is expressly made subject to the
195
+    following conditions.
196
+
197
+      a. Attribution.
198
+
199
+           1. If You Share the Licensed Material (including in modified
200
+              form), You must:
201
+
202
+                a. retain the following if it is supplied by the Licensor
203
+                   with the Licensed Material:
204
+
205
+                     i. identification of the creator(s) of the Licensed
206
+                        Material and any others designated to receive
207
+                        attribution, in any reasonable manner requested by
208
+                        the Licensor (including by pseudonym if
209
+                        designated);
210
+
211
+                    ii. a copyright notice;
212
+
213
+                   iii. a notice that refers to this Public License;
214
+
215
+                    iv. a notice that refers to the disclaimer of
216
+                        warranties;
217
+
218
+                     v. a URI or hyperlink to the Licensed Material to the
219
+                        extent reasonably practicable;
220
+
221
+                b. indicate if You modified the Licensed Material and
222
+                   retain an indication of any previous modifications; and
223
+
224
+                c. indicate the Licensed Material is licensed under this
225
+                   Public License, and include the text of, or the URI or
226
+                   hyperlink to, this Public License.
227
+
228
+           2. You may satisfy the conditions in Section 3(a)(1) in any
229
+              reasonable manner based on the medium, means, and context in
230
+              which You Share the Licensed Material. For example, it may be
231
+              reasonable to satisfy the conditions by providing a URI or
232
+              hyperlink to a resource that includes the required
233
+              information.
234
+
235
+           3. If requested by the Licensor, You must remove any of the
236
+              information required by Section 3(a)(1)(A) to the extent
237
+              reasonably practicable.
238
+
239
+      b. ShareAlike.
240
+
241
+         In addition to the conditions in Section 3(a), if You Share
242
+         Adapted Material You produce, the following conditions also apply.
243
+
244
+           1. The Adapter's License You apply must be a Creative Commons
245
+              license with the same License Elements, this version or
246
+              later, or a BY-SA Compatible License.
247
+
248
+           2. You must include the text of, or the URI or hyperlink to, the
249
+              Adapter's License You apply. You may satisfy this condition
250
+              in any reasonable manner based on the medium, means, and
251
+              context in which You Share Adapted Material.
252
+
253
+           3. You may not offer or impose any additional or different terms
254
+              or conditions on, or apply any Effective Technological
255
+              Measures to, Adapted Material that restrict exercise of the
256
+              rights granted under the Adapter's License You apply.
257
+
258
+
259
+    Section 4 -- Sui Generis Database Rights.
260
+
261
+    Where the Licensed Rights include Sui Generis Database Rights that
262
+    apply to Your use of the Licensed Material:
263
+
264
+      a. for the avoidance of doubt, Section 2(a)(1) grants You the right
265
+         to extract, reuse, reproduce, and Share all or a substantial
266
+         portion of the contents of the database;
267
+
268
+      b. if You include all or a substantial portion of the database
269
+         contents in a database in which You have Sui Generis Database
270
+         Rights, then the database in which You have Sui Generis Database
271
+         Rights (but not its individual contents) is Adapted Material,
272
+
273
+         including for purposes of Section 3(b); and
274
+      c. You must comply with the conditions in Section 3(a) if You Share
275
+         all or a substantial portion of the contents of the database.
276
+
277
+    For the avoidance of doubt, this Section 4 supplements and does not
278
+    replace Your obligations under this Public License where the Licensed
279
+    Rights include other Copyright and Similar Rights.
280
+
281
+
282
+    Section 5 -- Disclaimer of Warranties and Limitation of Liability.
283
+
284
+      a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
285
+         EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
286
+         AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
287
+         ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
288
+         IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
289
+         WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
290
+         PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
291
+         ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
292
+         KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
293
+         ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
294
+
295
+      b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
296
+         TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
297
+         NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
298
+         INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
299
+         COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
300
+         USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
301
+         ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
302
+         DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
303
+         IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
304
+
305
+      c. The disclaimer of warranties and limitation of liability provided
306
+         above shall be interpreted in a manner that, to the extent
307
+         possible, most closely approximates an absolute disclaimer and
308
+         waiver of all liability.
309
+
310
+
311
+    Section 6 -- Term and Termination.
312
+
313
+      a. This Public License applies for the term of the Copyright and
314
+         Similar Rights licensed here. However, if You fail to comply with
315
+         this Public License, then Your rights under this Public License
316
+         terminate automatically.
317
+
318
+      b. Where Your right to use the Licensed Material has terminated under
319
+         Section 6(a), it reinstates:
320
+
321
+           1. automatically as of the date the violation is cured, provided
322
+              it is cured within 30 days of Your discovery of the
323
+              violation; or
324
+
325
+           2. upon express reinstatement by the Licensor.
326
+
327
+         For the avoidance of doubt, this Section 6(b) does not affect any
328
+         right the Licensor may have to seek remedies for Your violations
329
+         of this Public License.
330
+
331
+      c. For the avoidance of doubt, the Licensor may also offer the
332
+         Licensed Material under separate terms or conditions or stop
333
+         distributing the Licensed Material at any time; however, doing so
334
+         will not terminate this Public License.
335
+
336
+      d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
337
+         License.
338
+
339
+
340
+    Section 7 -- Other Terms and Conditions.
341
+
342
+      a. The Licensor shall not be bound by any additional or different
343
+         terms or conditions communicated by You unless expressly agreed.
344
+
345
+      b. Any arrangements, understandings, or agreements regarding the
346
+         Licensed Material not stated herein are separate from and
347
+         independent of the terms and conditions of this Public License.
348
+
349
+
350
+    Section 8 -- Interpretation.
351
+
352
+      a. For the avoidance of doubt, this Public License does not, and
353
+         shall not be interpreted to, reduce, limit, restrict, or impose
354
+         conditions on any use of the Licensed Material that could lawfully
355
+         be made without permission under this Public License.
356
+
357
+      b. To the extent possible, if any provision of this Public License is
358
+         deemed unenforceable, it shall be automatically reformed to the
359
+         minimum extent necessary to make it enforceable. If the provision
360
+         cannot be reformed, it shall be severed from this Public License
361
+         without affecting the enforceability of the remaining terms and
362
+         conditions.
363
+
364
+      c. No term or condition of this Public License will be waived and no
365
+         failure to comply consented to unless expressly agreed to by the
366
+         Licensor.
367
+
368
+      d. Nothing in this Public License constitutes or may be interpreted
369
+         as a limitation upon, or waiver of, any privileges and immunities
370
+         that apply to the Licensor or You, including from the legal
371
+         processes of any jurisdiction or authority.
372
+
373
+
374
+    =======================================================================
375
+
376
+    Creative Commons is not a party to its public
377
+    licenses. Notwithstanding, Creative Commons may elect to apply one of
378
+    its public licenses to material it publishes and in those instances
379
+    will be considered the “Licensor.” The text of the Creative Commons
380
+    public licenses is dedicated to the public domain under the CC0 Public
381
+    Domain Dedication. Except for the limited purpose of indicating that
382
+    material is shared under a Creative Commons public license or as
383
+    otherwise permitted by the Creative Commons policies published at
384
+    creativecommons.org/policies, Creative Commons does not authorize the
385
+    use of the trademark "Creative Commons" or any other trademark or logo
386
+    of Creative Commons without its prior written consent including,
387
+    without limitation, in connection with any unauthorized modifications
388
+    to any of its public licenses or any other arrangements,
389
+    understandings, or agreements concerning use of licensed material. For
390
+    the avoidance of doubt, this paragraph does not form part of the
391
+    public licenses.
392
+
393
+    Creative Commons may be contacted at creativecommons.org.

+ 16
- 0
_config.yml View File

@@ -0,0 +1,16 @@
1
+title: Matthew's Blog
2
+description: >- # this means to ignore newlines until "baseurl:"
3
+  Thoughts, stories, hacks, and ideas.
4
+baseurl: "" # the subpath of your site, e.g. /blog
5
+url: "" # the base hostname & protocol for your site, e.g. http://example.com
6
+# permalink: /:year/:month/:day/:title:output_ext
7
+markdown: kramdown
8
+# theme: minima
9
+plugins:
10
+  - jekyll-paginate
11
+paginate: 5
12
+paginate_path: /page/:num
13
+collections:
14
+  projects:
15
+    output: true
16
+    permalink: /project/:name

+ 38
- 0
_drafts/The-Reboot-that-Removed-the-Operating-System.md View File

@@ -0,0 +1,38 @@
1
+---
2
+layout: post
3
+title: The Reboot that Removed the Operating System
4
+---
5
+
6
+One of the most gut-wrenching feelings I've recently experienced
7
+occurred shortly after rebooting an internal virtual machine at work.
8
+I've been slowly upgrading our systems to Windows Server 2016 or better.
9
+Up until this incident, things were going fine.
10
+
11
+I was configuring virtual memory at the time which requires a reboot for
12
+settings to take effect. Since it's a server and we hide the
13
+Shutdown/Restart options via Policy, a quick `shutdown /t 0 /r` and I
14
+was on my way...
15
+
16
+Or so I thought. A few more minutes pass than usual when I notice my
17
+`ping` shell was scrolling along: `Destination Host Unreachable`. Usually, a
18
+reboot only produces a handful of `Request timed out`. messages.
19
+Fortunately, since this is an internal VM, I have console access. I
20
+hopped into vSphere and opened the console on the machine in question.
21
+
22
+    An operating system wasn't found. Try disconnecting any drives that
23
+    don't contain an operating system.
24
+    Press Ctrl+Alt+Del to restart
25
+
26
+After staring at the blank, black screen for several minutes as I was
27
+trying to figure out *what happened to the operating system I was just
28
+using!*
29
+
30
+A coworker had reconfigured the backup job a few hours prior, but that
31
+shouldn't affect any running VMs. In addition to changing the job, he
32
+also removed backups older than X days; still, this can't be the issue.
33
+
34
+I phoned my coworker who hadn't seen this issue before. I ran a few
35
+search queries online and started sifting through the results.
36
+
37
+Diskpart, snapshots, Disk Management in Windows, drive letter
38
+free-for-all

+ 2
- 0
_includes/author_bio.md View File

@@ -0,0 +1,2 @@
1
+I'm a systems administrator, front-end and back-end developer, and an IT
2
+guru in Minneapolis, MN. It’s nice to meet you.

+ 6
- 0
_includes/footer.html View File

@@ -0,0 +1,6 @@
1
+<footer class="site-footer">
2
+  <div class="inner">
3
+    The content for this site is <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC-BY-SA</a>. The <a href="https://git.sr.ht/~mjorgensen/jrgnsn.net">code</a> for this site is
4
+    <a href="https://opensource.org/licenses/MIT/">MIT</a>.
5
+  </div>
6
+</footer>

+ 21
- 0
_includes/navigation.html View File

@@ -0,0 +1,21 @@
1
+{%- assign default_paths = site.pages | map: "path" -%}
2
+{%- assign page_paths = site.header_pages | default: default_paths -%}
3
+{%- if page_paths -%}
4
+  <div class="navigation">
5
+    <ul class="nav" role="menu">
6
+      <li class="nav-home{% if page.url == '/' %} nav-current{% endif %}"><a href="{{ site.url }}">Home</a></li>
7
+      {%- for path in page_paths -%}
8
+        {%- assign my_page = site.pages | where: "path", path | first -%}
9
+        {%- if my_page.title -%}
10
+          {%- unless my_page.enableMenu == false -%}
11
+          <li class="nav-{{ my_page.title | slugify }}{% if page.url == my_page.url %} nav-current{% endif %}" role="menuitem">
12
+          <a class="page-link" href="{{ my_page.url | relative_url }}">
13
+          {{  | my_page.title | escape }}
14
+          </a>
15
+          </li>
16
+            {%- endunless -%}
17
+        {%- endif -%}
18
+      {%- endfor -%}
19
+    </ul>
20
+  </div>
21
+{%- endif -%}

+ 21
- 0
_includes/post-stub.html View File

@@ -0,0 +1,21 @@
1
+<div class="post-stub">
2
+  <h2>
3
+    <span class="date hidden-xs">
4
+      {{ include.post.date | date: "%Y-%m-%d" }}
5
+    </span>
6
+    <span class="title">
7
+      {% if include.post._url %}
8
+      <a href="{{ include.post._url }}" target="_blank">
9
+        {{ include.post.title }}
10
+        <i class="fa fa-external-link"></i>
11
+      </a>
12
+      {% else %}
13
+      <a href="{{ include.post.url }}">{{ include.post.title }}</a>
14
+      {% endif %}
15
+    </span>
16
+  </h2>
17
+  {% if include.post._url %}
18
+  {% else %}
19
+  {{ include.post.excerpt }}
20
+  {% endif %}
21
+</div>

+ 8
- 0
_includes/widget-author-bio.html View File

@@ -0,0 +1,8 @@
1
+
2
+    <p class="hero-avatar"><img src="/avatar.png" alt="{{name}}" class="avatar" /></p>
3
+    <p class="hero-greeting">
4
+      Hi there!
5
+    </p>
6
+    <p class="hero-bio">
7
+      {%- include author_bio.md -%}
8
+    </p>

+ 22
- 0
_includes/widget-external-links.html View File

@@ -0,0 +1,22 @@
1
+<div class="external-links">
2
+  <p>
3
+    <span class="context">sourcehut</span>
4
+    <a href="https://git.sr.ht/~mjorgensen">~mjorgensen</a>
5
+  </p>
6
+  <p>
7
+    <span class="context">github</span>
8
+    <a href="https://github.com">mtthwjrgnsn</a>
9
+  </p>
10
+  <p>
11
+    <span class="context">instagram</span>
12
+    <a href="https://instagram.com/matthewjorgensen">matthewjorgensen</a>
13
+  </p>
14
+  <p>
15
+    <span class="context">mastodon</span>
16
+    <a href="https://splat.soy/@AstroBadger">@AstroBadger@splat.soy</a>
17
+  </p>
18
+  <p>
19
+    <span class="context">email</span>
20
+    <a href="mailto:matthew@jrgnsn.net">matthew@jrgnsn.net</a>
21
+  </p>
22
+</div>

+ 14
- 0
_includes/widget-recent-posts.html View File

@@ -0,0 +1,14 @@
1
+{{^is "index"}}
2
+<hr />
3
+
4
+<h3>Recent Posts</h3>
5
+<div class="recent-posts">
6
+  {% for post in site.posts limit:3 %}
7
+  <div class="post-stub">
8
+    {{ post.date || date: "%Y-%m-%d" }}<br />
9
+    <a class="recent-post-link" href="{{ post.url }}">
10
+      {{ post.title }}
11
+    </a>
12
+  </div>
13
+  {% endfor %}
14
+</div>

+ 41
- 0
_layouts/base.html View File

@@ -0,0 +1,41 @@
1
+<!DOCTYPE html>
2
+<html>
3
+<head>
4
+  <!-- Document Settings -->
5
+  <heta http-equiv="Content-Type" content="text/html" charset="utf-8" />
6
+  <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+
8
+  <!-- Page Meta -->
9
+  <title>{{ site.title }}</title>
10
+  <meta name="description=" content="True" />
11
+  <link rel="icon" type="image/png" href="/avatar.png" />
12
+
13
+  <!-- Stylesheets -->
14
+  <link rel="stylesheet" type="text/css" href="/css/style.css" />
15
+</head>
16
+
17
+<body>
18
+  <div class="container">
19
+
20
+    {{ content }}
21
+
22
+    <div class="sidebar">
23
+
24
+      {%- include widget-author-bio.html -%}
25
+
26
+      {%- include navigation.html -%}
27
+
28
+      {%- include widget-external-links.html -%}
29
+
30
+      {% if page.url != '/' %}
31
+      {%- include widget-recent-posts.html -%}
32
+      {% endif %}
33
+
34
+      <hr />
35
+
36
+      {%- include footer.html -%}
37
+
38
+    </div>
39
+  </div>
40
+</body>
41
+</html>

+ 32
- 0
_layouts/page.html View File

@@ -0,0 +1,32 @@
1
+---
2
+layout: base
3
+---
4
+
5
+<h1 class="page-title">
6
+  {% if page.title %}
7
+  {{ page.title }}
8
+  {% else %}
9
+  {{ site.title }}
10
+  {% endif %}
11
+</h1>
12
+
13
+<div class="content">
14
+  {% if page.url contains '/archive/' %}
15
+  {% else %}
16
+  {% unless page.url == '/' %}
17
+  <p class="meta date">
18
+    {% if page.date %}Published {{ page.date | date: "%Y-%m-%d" }}{% endif %}
19
+    on <a href="/">{{ site.title }}</a>
20
+    <span class=" hidden-xs">
21
+      &mdash;
22
+      <a href="{{ page.url }}">
23
+        Permalink
24
+      </a>
25
+    </span>
26
+  </p>
27
+  {% endunless %}
28
+  {% endif %}
29
+  <article>
30
+    {{ content }}
31
+  </article>
32
+</div>

+ 6
- 0
_layouts/post.html View File

@@ -0,0 +1,6 @@
1
+---
2
+layout: page
3
+showTitle: true
4
+---
5
+
6
+{{ content }}

+ 23
- 0
_layouts/project.html View File

@@ -0,0 +1,23 @@
1
+---
2
+layout: base
3
+---
4
+
5
+<h1 class="project-title">
6
+  {{ page.title }}
7
+</h1>
8
+
9
+<div class="content">
10
+  <p class="meta date">
11
+    {% if page.created %}Created {{ page.created }}{% endif %}
12
+    on <a href="/">{{ site.title }}</a>
13
+    <span class=" hidden-xs">
14
+      &mdash;
15
+      <a href="{{ page.url }}">
16
+        Permalink
17
+      </a>
18
+    </span>
19
+  </p>
20
+  <article>
21
+    {{ content }}
22
+  </article>
23
+</div>

+ 12
- 0
_posts/2017-11-10-Welcome-to-My-Blog.md View File

@@ -0,0 +1,12 @@
1
+---
2
+layout: post
3
+title: Welcome to My Blog!
4
+---
5
+
6
+I'm finally getting around to officiating my online presence. My plans for this site/domain are as follows:
7
+
8
+- A web page (Done!)
9
+- A blog (Done!)
10
+- A portfolio
11
+    - For projects
12
+    - For photography

+ 168
- 0
_posts/2017-11-11-Trip-to-Chicago.md View File

@@ -0,0 +1,168 @@
1
+---
2
+layout: post
3
+title: Trip to Chicago
4
+---
5
+
6
+*I went to Chicago over the weekend of 3 November 2017 to see the Used
7
+*play at Aragon Ballroom. Here is how things went down.*
8
+
9
+## Friday ### MPLS >> Chicago I departed immediately after work on 3
10
+Nov. The trip itself was extremely uneventful (in the best possible
11
+ways) but the tollway kinda beat me up. I was expecting a toll or two,
12
+but I ended up spending about $10 in tolls on the way to Chicago. Next
13
+time I’m using an E-ZPass for sure.
14
+
15
+Originally I was planning on sleeping in my car and driving back the day
16
+after. After getting to Chicago, I decided that was a silly idea and
17
+decided to get a room and spend another day. I left on Sunday, 5 Nov.
18
+
19
+As soon as I got to my hotel, I found a parking ramp, parked my car and
20
+quickly grabbed all my valuables and checking into the hotel. I
21
+initially spent about 5 minutes at the hotel, just enough time to stash
22
+my valuables and get a Lyft to the Aragon Ballroom. My first Lyft driver
23
+was very friendly, and gave me a few recommendations/places to check
24
+out. I learned that Chicago sold a good portion of the tollways to a
25
+joint venture between a company in Australia and Spain(?).
26
+
27
+### The Used w/ Glassjaw @ Aragon Ballroom
28
+
29
+![IMG_9048-1](/content/images/2017/11/IMG_9048-1.JPG)
30
+
31
+Since I got to Chicago a little later than expected I, unfortunately,
32
+missed most of Glassjaw as I arrived at the venue at approximately
33
+19:30. I bought one *very expensive* beer and found a spot near the
34
+stage. I was probably about 20 feet away from the stage. The people
35
+around me were pretty cool, I talked to a couple of them briefly.
36
+
37
+The Used put on a great show. Something about the Used and how they
38
+interact with the crowd seems to make everyone feel like they can be
39
+themselves. I even moved around a little bit! I had a great time.
40
+
41
+### My After Party After the show, I felt a little lost in a new city. I
42
+wasn’t very familiar with the area around the ballroom and my Lyft
43
+driver mentioned it wasn’t a very nice neighborhood anyway. I decided to
44
+go back to my hotel to get my bearings and do some research. I was very
45
+hungry and I found a place called *Pick Me Up Cafe*. They have a lot of
46
+specific vegan options on their menu, I wanted one of each, however
47
+after consulting the server, she talked me out of it as the servings
48
+were large. *She was right.* Here’s what I ordered (all vegan, of
49
+course):
50
+
51
+* Mozzarella sticks Seitan Sloppy Joe with onion rings on top and (very
52
+* peppery) fries on the side a strawberry shake spiked with Jameson.
53
+
54
+![IMG_0252](/content/images/2017/11/IMG_0252.JPG)
55
+
56
+In hindsight, Jameson wasn't the best thing to spike a shake with. It
57
+tasted kind of odd. Next time I'll consider a vodka or a schnapps.
58
+
59
+The food was delicious and I left the cafe feeling good and full. I went
60
+back to my room and talked to a friend for a few hours before deciding
61
+to turn in about 03:45.
62
+
63
+## Saturday I woke up on Saturday to the sound of rain pattering against
64
+the window. I was as surprised as anyone would be who hadn't checked the
65
+weather. After all, the rest of this trip after Friday night was
66
+entirely impromptu. There was a lot of fog, too, which was neat because
67
+the tops of buildings were hidden in the abyss.  ### Kitchen17 For lunch
68
+I ate at Kitchen17, an all-vegan pizzeria. This was my first experience
69
+with a Chicago-style deep dish pizza and I was thoroughly impressed. I
70
+was overly optimistic by thinking I could eat it all. I quickly learned
71
+I was wrong. ### CTA My main method of transportation were buses and
72
+trains operated by the Chicago Transit Authority. This city continued to
73
+impress me. My only other experience with public transportation has been
74
+Metro Transit in Minneapolis, and CTA *blew it right out of the water.*
75
+There were plenty of routes to choose from, and the train got me out of
76
+the loop and to my next stop in half an hour flat. For comparison, that
77
+would've been about a 45 minutes drive, or at least an hour long bus
78
+ride. ### Mall On Saturday evening I decided to go to the Water Tower
79
+Place, a mall in downtown Chicago in the Loop. It was fairly similar to
80
+the Mall of America, with less stores overall and more
81
+expensive/high-end stores.
82
+
83
+I learned that Amazon has some retail footprints (called pop-ups, I
84
+believe). I was looking for a longer lightning cable since I've been
85
+using USB extension cabled and they're starting to wear apart. An
86
+employee noticed me looking at them and the exchange went something like
87
+this:
88
+
89
+> Amazon Employee: If you're looking for a lightning cable, the 6'
90
+lightning cabled charges the iPhone faster than any other cable I've
91
+seen. >  > Me: ...*oh really,* tell me more! >  > AE (already visibly
92
+under pressure): It's MFi certified, so it charged better than
93
+non-certified cables. >  > Me (points to 3' MFi certified cable): This
94
+cable says it's also certified.
95
+
96
+At that point, he realized I knew he was blowing smoke, and I was going
97
+to buy the 6' cable anyway, so I didn't push him any farther. I do get a
98
+kick out of those conversations though! ### Kal’ish After the mall, I
99
+was hungry again and ate at a vegan short-order restaurant called
100
+*Kal'ish.* I got what I presume was a black-bean burger, and fries. I
101
+would go back. 
102
+
103
+![IMG_6956](/content/images/2017/11/IMG_6956.JPG)
104
+
105
+## Sunday ### Handlebar I was originally going to eat at the Chicago
106
+Diner, but after being told there was a 15-45 minute wait, I decided to
107
+take a 45 minute bus ride to the Handlebar, and I'm glad I did. As soon
108
+as you walk in the door you're greeted with punk music and similar
109
+artwork on the wall. I ordered a vegan breakfast burrito and a plate of
110
+chili cheese fries.
111
+
112
+![IMG_0277](/content/images/2017/11/IMG_0277.JPG)
113
+
114
+I could've been fine with just the plate of chili cheese fries. the
115
+plate was *massive.* However, leftovers are never a bad thing. ###
116
+Departure My time in Chicago was coming to a close, and I was feeling
117
+rather sad about it. However, I convinced myself I can always come back,
118
+and departed to spend a few days in Milwaukee.
119
+
120
+As I was driving on the freeway, my car was making a really loud
121
+thumping noise coming from the rear passenger-side tire. I figured I
122
+should get it looked at in Milwaukee, however, me being cheap, I decided
123
+to ignore it.  ## Detour to MKE That Sunday night, I met up with a
124
+friend in Milwaukee and we went to the Landmark bar to catch up and play
125
+some arcade games. Afterwards we went to the Comet Cafe to grab a bite
126
+to eat.
127
+
128
+I'm always impressed to find places that serve vegan food, *and
129
+especially good vegan food.* Sometimes I'm inspired to get some little
130
+cards made to let the owners and staff know that I ate there
131
+specifically because they serve vegan food. ## Monday Monday in
132
+Milwaukee was relatively uneventful. After all, it was Monday, and it
133
+Milwaukee is in Wisconsin. /s
134
+
135
+I did eat some rad vegan pizza thought. It was from Ian's Pizza by the
136
+Slice and I ordered the Taco Pizza.
137
+
138
+![IMG_8116](/content/images/2017/11/IMG_8116.JPG)
139
+
140
+## Final departure I left Milwaukee at approximately 0900. After about
141
+an hour into my trip, just North of Madison, my fears became real.
142
+Remember the noise my tire was making? Apparently there was tire
143
+ply-separation. The tread of my tire separated from the tube underneath
144
+and caught on something sharp in the wheel well and literally shredded
145
+apart. At 80MPH on the interstate, that's a terrifying experience. I
146
+managed to quickly pull off onto the side of the road, unfortunately
147
+there was a barrier on the right side of the shoulder, so I was only two
148
+feet away from the traffic lane - and not everyone moves over. 
149
+
150
+I called Roadside Assistance and was able to get a tow to a shop that
151
+could help me out. The first shop we went to was booked for almost a
152
+week out - that wasn't going to be acceptable. Thankfully the tow truck
153
+driver was able to get my ride and I to a shop closer to Madison that
154
+would be able to help me out the same day.
155
+
156
+![IMG_2192](/content/images/2017/11/IMG_2192.JPG)
157
+
158
+![IMG_3926](/content/images/2017/11/IMG_3926.JPG)
159
+
160
+## Final Thoughts I liked Chicago, a lot. I almost fell in love, but
161
+after being back in Minneapolis, I'm reminded why I like it here.
162
+
163
+My final impression of Chicago is this: I think I would like to live
164
+there someday, but that day isn't today, and I doubt it will be that day
165
+for some time yet. I was very impressed at the amount of strictly vegan
166
+restaurants that exist in Chicago (at least in the neighborhood I was
167
+in), and the options at not-strictly-vegan places were mighty tasty
168
+also.

+ 32
- 0
_posts/2018-05-12-Block-Sponsored-Posts-on-Nextdoor-with-Pi-hole.md View File

@@ -0,0 +1,32 @@
1
+---
2
+layout: post
3
+title: Block Sponsored Posts on Nextdoor with Pi-hole
4
+---
5
+
6
+I occasionally use Nextdoor to list items for sale, or to see what's going on in my neighborhood and surrounding area. I have to say, I like Nextdoor since it allows me to connect with my neighbors in a relatively locked-down place, even though I'm sure most of them are in local Facebook groups already.
7
+
8
+However, I don't like seeing sponsored content. **Period.**
9
+
10
+Here's how I managed to hide sponsored posts on Nextdoor.
11
+
12
+## Using Pi-hole
13
+
14
+If you have a [Pi-hole][pi-hole] set up on your network, go ahead and add the following to your Blacklist:
15
+
16
+    flask.nextdoor.com
17
+
18
+I added it as an "exact" filter and it seems to work fine.
19
+
20
+[pi-hole]: https://pi-hole.net
21
+
22
+## Using uBlock Origin
23
+
24
+You can create a custom filter in uBlock Origin that blocks the following domain:
25
+
26
+    ||flask.nextdoor.com/events/*$xmlhttprequest,first-party
27
+    
28
+Add the above to the end of your filters on "My filters" in uBlock settings.
29
+
30
+## Disclaimer
31
+
32
+I expect this to break in the future as Nextdoor catches on (or finds this post!) and as ad-serving becomes more sophisticated.

+ 54
- 0
_posts/2018-05-16-Base64-Encoding-in-Python-3.md View File

@@ -0,0 +1,54 @@
1
+---
2
+layout: post
3
+title: Base64 Encoding in Python 3
4
+---
5
+
6
+Recently I've been working on a backup script to backup a folder to a
7
+Backblaze B2 bucket. If only I had known I was about to spend an hour
8
+working on four silly lines of python code...
9
+
10
+Backblaze's documentation has absolutely *no mention* that this only
11
+works with Python 2. [I'm not the only one][0]. Pronoy had this exact
12
+issue with a Google API. Again, *no mention* it only works in Python 2.
13
+In fact, the moment I stumbled across Pronoy's post is the same moment I
14
+stopped ripping my hair out.
15
+
16
+[0]: https://www.pronoy.in/2016/10/20/python-3-5-x-base64-encoding-3/
17
+
18
+Let's get into the code. According to Backblaze's API docs, they require
19
+the Account ID and Key to be base64 encoded in the following format: 
20
+`'accoundId:accountKey'`. Seems easy enough.
21
+
22
+Try this in a Python 2 shell:
23
+
24
+    base64.b64encode('A string')
25
+    
26
+You get an output like:
27
+
28
+    'QSBzdHJpbmc='
29
+    
30
+Try running the same thing in a Python 3 shell and you see something
31
+closer to this:
32
+
33
+      File "<stdin>", line 1, in <module>
34
+      File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/ Versions/3.6/lib/python3.6/base64.py", line 58, in b64encode 
35
+        encoded = binascii.b2a_base64(s, newline=False)
36
+    TypeError: a bytes-like object is required, not 'str'
37
+    
38
+The solution? There's a few. Pronoy's works: which is to encode the
39
+string in `UTF-8`. Then, once it's base64 encoded, you decode that as
40
+`ASCII`.
41
+
42
+This works:
43
+
44
+    base64.b64encode('A string'.encode('UTF-8')).decode('ascii')
45
+
46
+After doing some more scouring, I found [this Stackoverflow thread][1].
47
+
48
+    # The following works, too, and looks a little neater.
49
+    base64.b64encode(bytes('A string', 'utf-8')).decode('ascii')
50
+
51
+Here's [another Stackoverflow thread][2] explaining why.
52
+
53
+[1]: https://stackoverflow.com/questions/40454177/how-to-encode-a-string-with-base64-in-python-3-and-remove-the-new-lines
54
+[2]: https://stackoverflow.com/questions/8908287/why-do-i-need-b-to-encode-a-python-string-with-base64

+ 31
- 0
_posts/2018-09-17-Security-Self-Defense-presented-by-the-Electronic-Frontier-Foundation.md View File

@@ -0,0 +1,31 @@
1
+---
2
+layout: post
3
+title: >-
4
+  Security Self-Defense, presented by the Electronic Frontier Foundation
5
+---
6
+
7
+For awhile now, I've been aware of the [Electronic Frontier Foundation][eff]
8
+(the EFF), and I make good use of a fair number of their projects. The
9
+following is not an exhaustive list:
10
+
11
+- [Privacy Tools][privacy-tools]
12
+- [HTTPS Everywhere][https-everywhere]
13
+- [Privacy Badger][privacy-badger]
14
+
15
+I also follow a fair share of recommendations from [Privacy Tools][privacy-tools]
16
+including using uMatrix and CookieAutoDelete.
17
+
18
+Now I recently came across another of their projects that I will most
19
+likely end up pointing people from now on. That project is Security
20
+Self-Defense, and they have a plethora of how-to guides explaining how
21
+to protect personal data and delete personal data. There's also a ton of
22
+information on steps you can take to protect against hackers. One of my
23
+favorite articles outlines [precautions to keep in mind at U.S. border
24
+crossings](https://ssd.eff.org/en/module/things-consider-when-crossing-us-border).
25
+
26
+Check it out: [Security Self-Defense from the EFF](https://ssd.eff.org).
27
+
28
+[eff]: https://www.eff.org/
29
+[privacy-tools]: https://www.privacytools.io/
30
+[https-everywhere]: https://www.eff.org/https-everywhere
31
+[privacy-badger]: https://www.eff.org/privacybadger

+ 81
- 0
_posts/2019-05-07-There-Once-Was-a-Sysadmin.md View File

@@ -0,0 +1,81 @@
1
+---
2
+layout: post
3
+title: There Once Was a Sysadmin...
4
+---
5
+
6
+That sysadmin really enjoyed working on silly programs in his free time,
7
+he even runs a few websites! Oftentimes, this sysadmin is fairly
8
+surprised he has a real job as a Systems Engineer/Web Developer.
9
+
10
+This is one of those times.
11
+
12
+---
13
+
14
+I recently decided to switch my domains' name servers from CloudFlare to
15
+[FastMail][fastmail-ref]. There were a few reasons for this, all of
16
+which turned out to be the wrong answers to the original questions. 
17
+
18
+It all started when I had `mail.jrgnsn.net` set to redirect to
19
+`fastmail.com`. I kept getting *Invalid Certificate* errors since the
20
+domain was `jrgnsn.net` but the server is (and the certificate was for)
21
+`fastmail.com`. I spent a good few months perplexed why there would be
22
+an issue, *"mail dot" all my other domains* worked just fine, after all.
23
+
24
+So I went ahead and switched name servers on all of my domains to
25
+FastMail's domain servers. This accomplishes several things:
26
+
27
+1. I don't have to worry about configuring all the MX, TXT, and other
28
+records related to mail systems.
29
+2. FastMail is much more convinient for me to access than CloudFlare.
30
+3. I don't necessarily require DDoS protection (which I wasn't paying
31
+for anyhow).
32
+4. FastMail makes it incredibly easy to serve a file or directory from
33
+my file storage at FastMail.
34
+
35
+Unfortunately, all of the existing issues remained and I even added a
36
+few issues to the list! `mail.jrgnsn.net` was still returning
37
+certificate errors. Additionally, `https://veganmsp.com` wasn't being
38
+resolved at all. dig-ing at `1.1.1.1`, `1.0.0.1`, `8.8.8.8`, and
39
+`8.8.4.4` were all returning SERVFAIL for `veganmsp.com`.
40
+
41
+This was frustrating to say the least, but I learned a valuable lesson
42
+throughout this process that I have yet to put into practice.
43
+**Documentation is important.**
44
+
45
+I'll say it again, **DOCUMENTATION IS IMPORTANT!**
46
+
47
+It turns out there was an HTTP Strict Transport Security (HSTS)
48
+directive tucked neatly away in an Nginx snippet. I don't remember
49
+putting it there, perhaps Ghost did that automatically when I upgraded.
50
+After removing the HSTS directive and forcing Firefox to "Forget About
51
+This Site", my `jrgnsn.net` domain was behaving as expected!
52
+
53
+`veganmsp.com` was still giving me trouble, though, and it was worse
54
+than `jrgnsn.net`. Certain DNS resolvers would return a `SERVFAIL` while
55
+others would return `NOERROR` with the correct values. I was baffled!
56
+*Why in the hell are some resolvers working while others, especially the
57
+"big name" resolvers weren't?!* Turns out the answer was simple and if I
58
+weren't so curious, perhaps I could have avoided this issue altogether.
59
+
60
+There was a DNSSEC record for veganmsp.com. 🙄
61
+
62
+After some quick research, I learned one of the better methods to
63
+changing name servers with a DNSSEC record is to delete the record at
64
+the Registrar, wait 24 hours, delete the record at the name server, and
65
+then change name servers.
66
+
67
+I changed name servers, was looking into this for a few days, and then
68
+deleted the record at the registrar.
69
+
70
+---
71
+
72
+At the time of this writing `1.1.1.1`, `1.0.0.1`, `8.8.8.8`, and
73
+`8.8.4.4` still return `SERVFAIL`. I'll give it 24-48 hours until I
74
+continue the investigation.
75
+
76
+And maybe I'll start a local wiki to keep domain, DNS, and security
77
+configurations in a central location.
78
+
79
+How am I employed in this industry, again?
80
+
81
+[fastmail-ref]: https://www.fastmail.com/?STKI=17835792

+ 68
- 0
_posts/2019-05-12-Update-May-2019.md View File

@@ -0,0 +1,68 @@
1
+---
2
+layout: post
3
+title: "Update: May 2019"
4
+---
5
+
6
+It's been a year and a half since starting this version of the blog.
7
+Behind the scenes, it's been through a lot. Originally hosted on a Vultr
8
+VPS, this blog had been passed around to Linode, it had a long stay on a
9
+prgmr.com instance, and currently resides on a Linode instance again. As
10
+I host more and more things for myself and others, I've found I need to
11
+take more care into how much load another website might add, etc.
12
+
13
+This blog was also originally published using the Ghost platform. I've
14
+been a big fan of Ghost for a long time, but recently they changed the
15
+main method of writing posts[^1], so I've made the switch to using 
16
+[Jekyll][jekyll] instead! One additional bonus here is the reduced
17
+overhead. Ghost relied on a database, an HTTP server in addition to the
18
+Nginx proxy, and regular updates. Jekyll, on the other hand, generated
19
+static HTML pages that Nginx can simply serve out of a directory.
20
+Publishing is a cinch, thanks to [build.sr.ht][buildsrht]. On every git
21
+push, the build will generate the static content and `rsync` it to my
22
+server! See the [About page](/about/#about-this-site) for more
23
+information on the website. 
24
+
25
+I do still have plans to add a photography portfolio to the site, but I
26
+haven't figured out implementation yet. Lately I've been on a fun
27
+development kick, so it's very likely I'll be writing something from
28
+scratch.
29
+
30
+## Current Projects
31
+
32
+Here's what I've been spending more of my non-company time on:
33
+
34
+- [VeganMSP.com]
35
+
36
+    WordPress is not the CMS I need for this project. I'd love to be
37
+    able to have a database of restaurants with a few properties,
38
+    including a list of tags, and then the website would be able to
39
+    filter against those tags. This would allow me to keep redundancies
40
+    down for items that may, for example, fit in a "Pizza" tag and
41
+    an "Uptown" tag. Right now I would need to manually update the
42
+    pizzeria in two locations should an update be necessary.
43
+
44
+    A custom CMS is more or less in progress. I'm calling it "stocfs",
45
+    that's for a **S**imple **T**ag **O**rganized **C**ontent
46
+    **F**iltering **S**ystem. Feel free to check out the [project page]
47
+    [stocfs].
48
+
49
+- stocfs, as mentioned above
50
+- General upkeep on my various servers
51
+
52
+    For reasons I won't go into, I've managed to let my general upkeep
53
+    schedule slip and neglected my servers, and most projects, for
54
+    awhile. I've since gotten back into the swing of things and the
55
+    servers are happier because of it! I added a new VPS to the mix. I
56
+    decided to host my own [Mastodon] instance, and the server I threw
57
+    it on was often under high load. I've moved a few things off the
58
+    Mastodon server now onto the new VPS.
59
+
60
+[jekyll]: https://jekyllrb.com/
61
+[buildsrht]: https://build.sr.ht/
62
+[VeganMSP.com]: https://veganmsp.com/
63
+[stocfs]: /project/stocfs
64
+
65
+[^1]: Ghost used to be pure Markdown, but they've since moved to a more
66
+    card-focused editing style. One of the biggst complaints I've seen
67
+    and share is the lack of support for these wonderful footnotes! -
68
+    <https://blog.ghost.org/2-0/>

+ 36
- 0
_projects/stocfs.md View File

@@ -0,0 +1,36 @@
1
+---
2
+layout: project
3
+title: stocfs
4
+created: 2019
5
+tagline: A Simple Tag Organized Content Filtering System
6
+---
7
+
8
+A **S**imple **T**ag **O**rganized **C**ontent **F**iltering **S**ystem
9
+designed for websites with a need to display content through a variety of
10
+filters.
11
+
12
+**Resources:**
13
+
14
+* [Source Code][git]
15
+* [Issue Tracker][todo]
16
+* [Documentation][man]
17
+
18
+## Updates
19
+
20
+### 2019-05-12
21
+
22
+This project is what will eventually replace WordPress for 
23
+[VeganMSP.com]. I've been meaning to get my ideas onto paper so I don't
24
+lose them, but I'm still trying to figure out the requirements and the
25
+best implementations of them. If you browse to the repository today,
26
+you'll note it's bare. This project hasn't quite gotten its feet off the
27
+ground yet.
28
+
29
+Stay tuned for a post announcing the project in the coming weeks.
30
+
31
+---
32
+
33
+[git]:https://git.sr.ht/~mjorgensen/stocfs
34
+[todo]:https://todo.sr.ht/~mjorgensen/stocfs
35
+[man]:https://man.sr.ht/~mjorgensen/stocfs
36
+[VeganMSP.com]: https://veganmsp.com

+ 41
- 0
_projects/veganmsp.com.md View File

@@ -0,0 +1,41 @@
1
+---
2
+title: VeganMSP.com
3
+created: 2018
4
+tagline: Just another vegan information site.
5
+layout: project
6
+---
7
+
8
+Late one evening, I was having dinner with some vegan friends of mine at
9
+[Comet Cafe][comet-cafe] in Milwaukee, Wisconsin. The Comet is a
10
+relatively punky-style small diner in the Lower East Side. We stopped in
11
+Milwaukee for dinner after spending about 16 hours on the road. The
12
+three of us had all rode together to a small vegan get-together in
13
+Knoxville, Tennessee.
14
+
15
+While we were having dinner, I had been thinking about creating a
16
+website that listed restaurants, stores and other places that may be
17
+good knowledge for vegans. After a visit to a sticker-covered restroom,
18
+I had my inspiration. Now, almost a year later the fruits of my (so far,
19
+little) labor are live on the internet: [VeganMSP.com].
20
+
21
+## What took almost a year?
22
+
23
+This is embarrassingly simple: I just got done thinking I have to build
24
+all of my projects from scratch. (In terms of this project, that would
25
+have involved creating a CMS.) I have finally come to realize that the
26
+important thing was the data, not the presentation of the data. Thus, I
27
+have settled on using Wordpress for now. If Wordpress happens to be a
28
+wrong choice a year later, I'll reevaluate.
29
+
30
+## Want to help?
31
+
32
+This is a side project of mine. I have a few other projects I'm working
33
+on right now in addition to a full-time job. I would greatly appreciate
34
+any help you could offer! That could mean you contribute regularly, or
35
+simply send me a quick note letting me know I got something wrong, or
36
+any other improvement you might suggest.
37
+
38
+<!-- TODO: Add contact methods -->
39
+
40
+[comet-cafe]: https://www.thecometcafe.com/
41
+[VeganMSP.com]: https://veganmsp.com

+ 41
- 0
about.md View File

@@ -0,0 +1,41 @@
1
+---
2
+layout: page
3
+title: About
4
+permalink: /about/
5
+---
6
+
7
+## About The Author
8
+
9
+As you may already know by now, my name is Matthew Jorgensen. I live in
10
+Minneapolis, MN and am currently doing IT for a medical trial software
11
+company. During the day I oversee a plethora of servers and systems. By
12
+night I explore my hobbies to help keep me busy. Most notably, my
13
+hobbies include programming,
14
+photography, Linux systems administration, and software and web
15
+development.
16
+
17
+Sometimes I get sick of being inside. Then, I'll typically be found
18
+outside on my bicycle or longboard; or, I could be spotted hiking around
19
+any one of the countless parks around me.
20
+
21
+My fascination with computers, technology, and the Internet began at a
22
+very young age.
23
+
24
+## About This Site
25
+
26
+This website is a [jekyll][jekyll] blog. The server is hosted by
27
+[Linode][linode-ref]. 
28
+
29
+I collect absolutely nothing from visitors. There's no tracking or data
30
+collection of any kind.
31
+
32
+You can [browse the source code][source] for this website. It's licensed
33
+under the terms of the [MIT license][mit]. The articles themselves are 
34
+[CC-BY-SA 4.0][cc-by-sa-4.0].
35
+
36
+[jekyll]: https://jekyllrb.com/
37
+[aura-theme]: https://git.sr.ht/~mjorgensen/aura
38
+[linode-ref]: https://www.linode.com/?r=6bc69166de6a9b923e4e42b4259c0ed8e1769d8c
39
+[source]: https://git.sr.ht/~mjorgensen/jrgnsn.net
40
+[mit]: https://opensource.org/licenses/MIT/
41
+[cc-by-sa-4.0]: https://creativecommons.org/licenses/by-sa/4.0/

BIN
avatar.png View File


+ 444
- 0
css/style.css View File

@@ -0,0 +1,444 @@
1
+/* Table of Contents
2
+/* --------------------------------------------------------------------------------
3
+
4
+This is a development CSS file which is built to a minified production
5
+stylesheet in asset/built/screen.css
6
+
7
+  1. Layout
8
+  2. Widgets
9
+  2.1. Hero Avatar
10
+  2.2. Author Bio
11
+  2.3. Navigation
12
+  2.4. External Links
13
+  2.5. Recent Posts
14
+  2.6. Tag cloud
15
+  3. Article
16
+  3.1. Article Meta
17
+  3.2. Article Stub (index)
18
+  4. Pagination Buttons
19
+  5. Footer
20
+  6. @media Properties
21
+  7. Ghost Required Classes
22
+
23
+*/
24
+
25
+/* 1. Layout - Basic Layout & Main Content
26
+/* ---------------------------------------------------------- */
27
+html, body {
28
+  /* overflow-x: hidden; */
29
+  font-family: sans-serif;
30
+  font-size: 12pt;
31
+}
32
+
33
+body {
34
+  background: #fff;
35
+  padding-bottom: 2rem;
36
+  max-width: 100%;
37
+}
38
+
39
+article p {
40
+  line-height: 1.25;
41
+  font-size: 12pt;
42
+}
43
+
44
+pre {
45
+  border: 1px #ddd solid;
46
+  border-radius: 0;
47
+  overflow-x: auto;
48
+  background: transparent;
49
+  line-height: 1.2;
50
+  margin: 0 auto;
51
+  padding: 1rem;
52
+  background: #efefef;
53
+  display: grid;
54
+}
55
+
56
+pre code {
57
+  white-space: pre;
58
+  word-wrap: normal;
59
+  font-size: 10pt;
60
+  display: inline-block;
61
+  overflow-x: scroll;
62
+}
63
+
64
+code {
65
+  font-family: monospace;
66
+  color: #000;
67
+}
68
+
69
+blockquote {
70
+
71
+}
72
+blockquote p {
73
+  font-size: 11pt !important;
74
+}
75
+
76
+a {
77
+  color: blue;
78
+  text-decoration: underline;
79
+}
80
+
81
+hr {
82
+    border-top: red;
83
+    width: 85%;
84
+}
85
+
86
+.container {
87
+  max-width: 960px;
88
+  margin: 0 auto;
89
+  display: grid;
90
+  grid-template-columns: 2fr 1fr;
91
+}
92
+
93
+.container .content {
94
+  grid-column-start: 1;
95
+}
96
+
97
+.post-class .post-title,
98
+.container .site-title {
99
+  grid-column-start: 1;
100
+  grid-column-end: 3;
101
+}
102
+
103
+.page-title {
104
+  margin-bottom: 0;
105
+}
106
+
107
+.container .site-title a {
108
+  color: black;
109
+  text-decoration: none;
110
+}
111
+
112
+/* 2. Widgets
113
+/* ---------------------------------------------------------- */
114
+.container .sidebar {
115
+  grid-column-start: 2;
116
+  padding-left: 1rem;
117
+}
118
+
119
+.sidebar,
120
+.sidebar a {
121
+  color: #444;
122
+}
123
+
124
+.sidebar hr {
125
+  border-top: #aaa;
126
+  width: 75%;
127
+}
128
+
129
+/* 2.1. Hero Avatar
130
+/* ---------------------------------------------------------- */
131
+.hero-avatar {
132
+  width: 150px;
133
+  height: 150px;
134
+  margin: 0 auto;
135
+}
136
+
137
+img.avatar {
138
+  border-radius: 10%;
139
+}
140
+
141
+/* 2.2. Author Bio
142
+/* ---------------------------------------------------------- */
143
+.hero-greeting,
144
+.hero-bio {
145
+  font-size: 12pt;
146
+}
147
+
148
+/* 2.3. Navigation
149
+/* ---------------------------------------------------------- */
150
+.navigation {
151
+  text-align: center;
152
+  position: relative;
153
+  margin: 1em;
154
+  overflow: hidden;
155
+}
156
+
157
+.navigation ul {
158
+  display: flex;
159
+  flex-direction: row;
160
+  flex-wrap: wrap;
161
+  justify-content: space-between;
162
+  margin-left: -1px;
163
+}
164
+
165
+.navigation li {
166
+  flex-grow: 1;
167
+  flex-basis: auto;
168
+  margin: .25em 0;
169
+  padding: 0 1em;
170
+  text-align: center;
171
+  border-left: 1px solid #ccc;
172
+  background-color: #fff;
173
+}
174
+
175
+.nav {
176
+  list-style-type: none;
177
+  margin: 0;
178
+  padding: 0;
179
+}
180
+
181
+.sidebar .navigation a {
182
+  color: blue;
183
+}
184
+
185
+li[role=menuitem] {
186
+  display: inline;
187
+}
188
+
189
+/* 2.4. External Links
190
+/* ---------------------------------------------------------- */
191
+.external-links .context {
192
+  position: absolute;
193
+  top: -0.9rem;
194
+  left: 0;
195
+  font-size: 0.8rem;
196
+  color: black;
197
+}
198
+
199
+.external-links > p {
200
+  position: relative;
201
+}
202
+
203
+.external-links > p:not(:last-child) {
204
+  padding-bottom: 0.5rem;
205
+}
206
+
207
+/* 2.5. Recent Posts
208
+/* ---------------------------------------------------------- */
209
+.recent-posts {
210
+  font-size: 11pt;
211
+  padding-bottom: 1rem;
212
+}
213
+
214
+.recent-post-item {
215
+  margin: .5rem 0;
216
+}
217
+
218
+.recent-post-date {
219
+
220
+}
221
+
222
+.recent-post-link {
223
+
224
+}
225
+
226
+/* 3. Article
227
+/* ---------------------------------------------------------- */
228
+
229
+.post-content {
230
+  margin: 6px 0;
231
+}
232
+
233
+.post-footer .post-tags {
234
+  font-size: 10pt;
235
+}
236
+
237
+img {
238
+  max-width: 100%;
239
+  margin: 0 auto;
240
+  display: block;
241
+}
242
+
243
+h1 {
244
+  padding-top: 0px;
245
+  font-size: 16pt;
246
+}
247
+
248
+.post-stub h2 {
249
+  font-size: 12pt;
250
+}
251
+
252
+.post-stub .date {
253
+  color: #999;
254
+  display: inline-block;
255
+  min-width: 6rem;
256
+}
257
+
258
+@media (min-width: 576px) {
259
+  .visible-xs {
260
+  display: none;
261
+  }
262
+}
263
+
264
+.post-content p {
265
+  line-height: 1.25;
266
+  font-size: 12pt;
267
+}
268
+
269
+/* 3.1. Article Meta
270
+/* ---------------------------------------------------------- */
271
+
272
+.post-meta-container {
273
+  grid-column-start: 1;
274
+  grid-column-end: 3;
275
+}
276
+
277
+.meta {
278
+  color: #999;
279
+}
280
+
281
+.meta a {
282
+  color: #999;
283
+}
284
+
285
+.post-feature-image-container {
286
+
287
+}
288
+
289
+.post-feature-image {
290
+
291
+}
292
+
293
+/* 3.2. Article Stub (index)
294
+/* ---------------------------------------------------------- */
295
+
296
+.post-stub .post-content a {
297
+  color: #444;
298
+}
299
+
300
+.post-stub .post-tags {
301
+  font-size: 10pt;
302
+}
303
+
304
+/* 4. Pagination Buttons
305
+/* ---------------------------------------------------------- */
306
+
307
+.pagination-container {
308
+  display: grid;
309
+  grid-template-areas:
310
+  'left center right';
311
+  grid-template-columns: 1.5fr 1fr 1.5fr;
312
+  grid-gap: 10px;
313
+  padding: 10px;
314
+}
315
+
316
+.pull-left {
317
+  margin-right: auto;
318
+  grid-area: left;
319
+}
320
+
321
+.pull-center {
322
+  text-align: center;
323
+  grid-area: center;
324
+}
325
+
326
+.pull-center > p {
327
+  font-size: 11pt;
328
+}
329
+
330
+.pull-right {
331
+  margin-left: auto;
332
+  grid-area: right;
333
+}
334
+
335
+.btn {
336
+  display: inline-block;
337
+  padding: .1rem .75rem;
338
+  background: #e9ecef;
339
+  border: #343a40 1px solid;
340
+  font-size: 0.9rem;
341
+  font-weight: 400;
342
+  line-height: 1.5;
343
+  cursor: pointer;
344
+  color: #000;
345
+  text-decoration: none;
346
+  margin: 12px 0 0 0;
347
+  transition: color .15s ease-in-out,
348
+  background-color .15s ease-in-out,
349
+  border-color .15s ease-in-out,
350
+  box-shadow .15s ease-in-out;
351
+}
352
+.btn:hover {
353
+  text-decoration: none;
354
+  background: #f8f9fa;
355
+  color: #000;
356
+}
357
+
358
+.icon {
359
+  display: inline-block;
360
+  line-height: 0.75em;
361
+  width: 0.4em;
362
+  vertical-align: -0.2em;
363
+}
364
+
365
+.icon path {
366
+  fill: currentColor;
367
+}
368
+
369
+/* #. Projects
370
+/* ---------------------------------------------------------- */
371
+.project-title h2 {
372
+  font-size: 12pt;
373
+  display: inline;
374
+}
375
+
376
+.project-title .date {
377
+  display: inline-block;
378
+  min-width: 3rem;
379
+}
380
+
381
+/* #. Special Formatting
382
+/* ---------------------------------------------------------- */
383
+.alert, .tip {
384
+  padding: 0.5rem;
385
+  margin-bottom: 0.5rem;
386
+  border-width: 1px;
387
+  border-style: solid;
388
+}
389
+
390
+.alert {
391
+  color: white;
392
+  background-color: #f64d27;
393
+  border-color: #ab2e14;
394
+}
395
+
396
+.tip {
397
+  color: #004085;
398
+  background-color: #cce5ff;
399
+  border-color: #b8daff;
400
+}
401
+
402
+/* 5. Footer
403
+/* ---------------------------------------------------------- */
404
+.site-footer {
405
+  font-size: 10pt;
406
+  padding-top: 0.5rem;
407
+}
408
+
409
+/* 6. @media Properties
410
+/* ---------------------------------------------------------- */
411
+@media (max-width: 768px) {
412
+  .container {
413
+    display:block
414
+  }
415
+  .container .sidebar {
416
+    padding: 3rem 0 0 0;
417
+  }
418
+  .site-footer {
419
+    text-align: center;
420
+  }
421
+  .btn {
422
+   font-size: 0.8rem;
423
+  }
424
+}
425
+
426
+@media (min-width: 576px) {
427
+  .visible-xs {
428
+  display:none
429
+  }
430
+}
431
+
432
+/* 7. Ghost Required Classes
433
+/* The following classes are required for this theme to pass
434
+/* gscan validation. 
435
+/* ---------------------------------------------------------- */
436
+.kg-gallery-container,
437
+.kg-gallery-row,
438
+.kg-gallery-image {
439
+
440
+}
441
+.kg-width-full img,
442
+.kg-width-wide img{
443
+
444
+}

+ 43
- 0
index.html View File

@@ -0,0 +1,43 @@
1
+---
2
+layout: page
3
+---
4
+
5
+<div class="media">
6
+  <article class="post-stub">
7
+  {% for post in paginator.posts %}
8
+  {% include post-stub.html post=post %}
9
+  {% endfor %}
10
+  </article>
11
+  <div class="pagination-container">
12
+  {% if paginator.previous_page %}
13
+
14
+  <div class="pull-left">
15
+    <a href="{{paginator.previous_page_path}}" class="btn">
16
+      <span class="icon">
17
+       <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z"/></svg>
18
+      </span>
19
+      Page {{paginator.previous_page}}
20
+    </a>
21
+  </div>
22
+  {% endif %}
23
+
24
+  {% if paginator.next_page %}
25
+  <div class="pull-right">
26
+    <a href="{{paginator.next_page_path}}" class="btn">
27
+      Page {{paginator.next_page}}
28
+      <span class="icon">
29
+       <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"/></svg>
30
+      </span>
31
+    </a>
32
+  </div>
33
+  {% endif %}
34
+
35
+  <div class="pull-center">
36
+    {% assign x = paginator.page %}
37
+    {% assign y = paginator.total_pages %}
38
+    <p>
39
+      Page {{ x }} of {{ y }}
40
+    </p>
41
+  </div>
42
+</div>
43
+</div>

+ 248
- 0
nexxt.html View File

@@ -0,0 +1,248 @@
1
+---
2
+layout: page
3
+permalink: /temp/
4
+---
5
+
6
+<p>Since I've started doing more traveling, I thought
7
+   having
8
+   a
9
+   nice
10
+    central location to save all of my favorite places to eat around the
11
+    States. Goal: Cross a border and make this "Favorite Places to Eat in
12
+the World."</p>
13
+<h2 id="florida">Florida</h2>
14
+<h3 id="tampa">Tampa</h3>
15
+<ul>
16
+    <li>
17
+        <a href="http://www.cicciocali.com/">Ciccio Cali</a>
18
+    </li>
19
+    <li>
20
+        <a href="https://farmacyvegankitchen.com/">
21
+            Farmacy Vegan Kitchen &amp; Bakery
22
+        </a>
23
+    </li>
24
+    <li>
25
+        <a href="http://otbdelightcafe.com/">
26
+        O.T.B. Delight Cafe</a>
27
+    </li>
28
+    <li>
29
+        <a href="https://tampapizzacompany.com/">
30
+            <strong>Tampa Pizza Company</strong>
31
+        </a>
32
+    </li>
33
+</ul>
34
+<h2 id="illinois">Illinois</h2>
35
+<h3 id="chicago">Chicago</h3>
36
+<ul>
37
+    <li>
38
+        <a href="https://www.handlebarchicago.com/">
39
+            Handlebar
40
+        </a>
41
+    </li>
42
+    <li>
43
+        <a href="https://www.kalishvegan.com/">Kal'ish</a>
44
+    </li>
45
+    <li>
46
+        <a href="https://www.kitchen17.com/">
47
+            <strong>Kitchen 17</strong>
48
+        </a>
49
+    </li>
50
+    <li>
51
+        <a href="http://pmucafe.com/">
52
+            <strong>Pick Me Up Cafe</strong>
53
+        </a>
54
+    </li>
55
+</ul>
56
+<h2 id="kentucky">Kentucky</h2>
57
+<h3 id="louisville">Louisville</h3>
58
+<ul>
59
+    <li>
60
+        <a href="https://www.morelscafe.com/">
61
+            <strong>Morel's Cafe</strong>
62
+        </a> - "Vegan food that doesn't suck"
63
+    </li>
64
+    <li>
65
+        <a href="https://www.vgrits.com/">
66
+            V-Grits &amp; False Idol
67
+        </a> - "Our passions -
68
+        <em>food, craft beer, overall health and wellness,
69
+        animal welfare, sustainability</em> - make V-Grits and
70
+        False Idol a <strong>mission-driven</strong>
71
+        partnership."
72
+    </li>
73
+</ul>
74
+<h2 id="minnesota">Minnesota</h2>
75
+<h3 id="anoka">Anoka</h3>
76
+<ul>
77
+    <li>
78
+        <a href="https://tacoslapaloma.weebly.com/">
79
+            Tacos La Paloma
80
+        </a>
81
+    </li>
82
+</ul>
83
+<h3 id="burnsville">Burnsville</h3>
84
+<ul>
85
+    <li>
86
+        <a href="https://buzzcoffeeandcafe.com/">
87
+            The Buzz Coffee and Cafe
88
+        </a>
89
+    </li>
90
+</ul>
91
+<h3 id="duluth">Duluth</h3>
92
+<ul>
93
+    <li>
94
+        <a href="http://burritounion.com/">
95
+            Burrito Union
96
+        </a>
97
+    </li>
98
+</ul>
99
+<h3 id="eden-prarie">Eden Prarie</h3>
100
+<ul>
101
+    <li>
102
+        <a href="https://pizzakarma.com/">
103
+            Pizza Karma
104
+        </a>
105
+    </li>
106
+</ul>
107
+<h3 id="hopkins">Hopkins</h3>
108
+<ul>
109
+    <li>
110
+        <a href="http://www.tibet-corner.com/">
111
+            Tibet Corner
112
+        </a>
113
+    </li>
114
+</ul>
115
+<h3 id="minneapolis">Minneapolis</h3>
116
+<ul>
117
+    <li>
118
+        <a href="https://blackcoffeeandwaffle.com/">
119
+            Black Coffee &amp; Waffle Bar
120
+        </a>
121
+    </li>
122
+    <li>
123
+        <a href="https://thedepottavern.com/">
124
+            The Depot Tavern
125
+        </a>
126
+    </li>
127
+    <li>
128
+        <a href="https://www.figandfarro.com/">
129
+            Fig + Farro
130
+        </a>
131
+    </li>
132
+    <li>
133
+        <a href="http://galacticpizza.com/">
134
+            Galactic Pizza
135
+        </a>
136
+    </li>
137
+    <li>
138
+        Hard Times Cafe
139
+    </li>
140
+    <li>
141
+        <a href="https://pizzaluce.com/">
142
+            Pizza Luce
143
+        </a>
144
+    </li>
145
+    <li>
146
+        <a href="http://www.pizzanea.com/">
147
+            Pizza Nea
148
+        </a>
149
+    </li>
150
+    <li>
151
+        <a href="https://www.trioplantbased.com/">
152
+            Trio Plant-Based
153
+        </a>
154
+    </li>
155
+</ul>
156
+<h3 id="st-louis-park">St. Louis Park</h3>
157
+<ul>
158
+    <li>
159
+        <a href="https://www.parkwaypizzamn.com/">
160
+            Parkway Pizza
161
+        </a>
162
+    </li>
163
+    <li>
164
+        <a href="http://wokintheparkrestaurant.com/">
165
+            Wok in the Park
166
+        </a>
167
+    </li>
168
+</ul>
169
+<h3 id="st-paul">St. Paul</h3>
170
+<ul>
171
+    <li>
172
+        <a href="http://www.jselbys.com/">
173
+            J. Selby's
174
+        </a>
175
+    </li>
176
+</ul>
177
+<h2 id="tennessee">Tennessee</h2>
178
+<h3 id="knoxville">Knoxville</h3>
179
+<ul>
180
+    <li>
181
+        <a href="https://www.bidasaigoncafe.com/">
182
+            Bida Saigon
183
+        </a>
184
+    </li>
185
+    <li>
186
+        <a href="https://www.cinnaholic.com/">
187
+            Cinnaholic
188
+        </a>
189
+    </li>
190
+    <li>
191
+        <a href="http://sanctuaryvegancafe.net/">
192
+            <strong>Sanctuary Vegan Cafe</strong>
193
+        </a>
194
+    </li>
195
+    <li>
196
+        <a href="http://www.yassinsfalafelhouse.com/">
197
+            <strong>Yassin's Falafel House</strong>
198
+        </a>
199
+    </li>
200
+</ul>
201
+<h3 id="nashville">Nashville</h3>
202
+<ul>
203
+    <li>
204
+        <a href="https://fivepointspizza.com/">
205
+            Five Points Pizza
206
+        </a>
207
+    </li>
208
+</ul>
209
+<h2 id="texas">Texas</h2>
210
+<h3 id="austin">Austin</h3>
211
+<ul>
212
+    <li>
213
+        <strong>
214
+            <a href="https://arloscurbside.com/">
215
+                Arlo's Food Truck
216
+            </a>
217
+        </strong> - this is hands-down my all-time favorite food
218
+        truck. They serve the most delicious vegan comfort food I've
219
+        ever had. Their house-made burgers are the best vegan patty
220
+        I've ever had. They had the most scrumptious sweet potato
221
+        fries I've ever had. Really, this place is doing everything
222
+        right.
223
+    </li>
224
+    <li>
225
+        <a href="http://www.bodhivietvegan.com/">
226
+            Bodhi Viet Vegan
227
+        </a> - Vietnamese Vegan Cuisine
228
+    </li>
229
+</ul>
230
+<h2 id="wisconsin">Wisconsin</h2>
231
+<h3 id="milwaukee">Milwaukee</h3>
232
+<ul>
233
+    <li>
234
+        <a href="http://www.beerlinecafe.com/">
235
+            Beerline Cafe
236
+        </a>
237
+    </li>
238
+    <li>
239
+        <a href="https://www.thecometcafe.com/">
240
+            <strong>Comet Cafe</strong>
241
+        </a>
242
+    </li>
243
+    <li>
244
+        <a href="https://ianspizza.com">
245
+            <strong>Ian's Pizza</strong>
246
+        </a>
247
+    </li>
248
+</ul>

+ 28
- 0
projects.html View File

@@ -0,0 +1,28 @@
1
+---
2
+layout: page
3
+title: Projects
4
+permalink: /projects/
5
+enableMenu: true
6
+---
7
+
8
+{% for project in site.projects %}
9
+<div class="project-title">
10
+  <h2>
11
+    <span class="date hidden-xs">
12
+      {{ project.created }}
13
+    </span>
14
+    <span class="title">
15
+      {% assign content = project.content | strip_newlines %}
16
+      {% if content == "" or content == nil or content == blank %}
17
+        {{ project.title }}
18
+      {% else %}
19
+        <a href="{{ project.url }}">{{ project.title }}</a>
20
+      {% endif %}
21
+    </span>
22
+  </h2>
23
+  {% if project.tagline %}
24
+  &mdash;
25
+  {{ project.tagline }}
26
+  {% endif %}
27
+</div>
28
+{% endfor %}

Loading…
Cancel
Save