浏览代码

Initial commit

Colin Powell 2 年之前
当前提交
4f3015e68a
共有 59 个文件被更改,包括 2901 次插入0 次删除
  1. 40 0
      .drone.yml
  2. 1 0
      .gitignore
  3. 2 0
      Makefile
  4. 42 0
      config.yaml
  5. 6 0
      content/page/about.md
  6. 15 0
      content/page/site-notice.md
  7. 23 0
      content/post/another-engine.md
  8. 34 0
      content/post/are-you-like-me.md
  9. 20 0
      content/post/campaigning.md
  10. 25 0
      content/post/coaching-soccer.md
  11. 28 0
      content/post/continuous-tool-improvement.md
  12. 44 0
      content/post/creation-and-learning.md
  13. 30 0
      content/post/distraction-free.md
  14. 34 0
      content/post/doomed-emacs.md
  15. 52 0
      content/post/emacs-everywhere.md
  16. 50 0
      content/post/email-in-emacs-redux.md
  17. 35 0
      content/post/email-in-emacs.md
  18. 31 0
      content/post/equity.md
  19. 38 0
      content/post/finding-meaing.md
  20. 35 0
      content/post/free-and-responsible.md
  21. 21 0
      content/post/imagining-yourself-doing.md
  22. 37 0
      content/post/in-pursuit-of-flow.md
  23. 41 0
      content/post/intentions.md
  24. 36 0
      content/post/leadership.md
  25. 23 0
      content/post/monarchs.md
  26. 23 0
      content/post/nethack.md
  27. 32 0
      content/post/off-days.md
  28. 19 0
      content/post/on-the-ballot.md
  29. 17 0
      content/post/reading-lists.md
  30. 31 0
      content/post/running-tired.md
  31. 28 0
      content/post/spacemacs.md
  32. 78 0
      content/post/trompe-l-oeil.md
  33. 22 0
      content/post/why-are-we-grateful.md
  34. 994 0
      onec.org
  35. 201 0
      themes/flex/LICENSE
  36. 148 0
      themes/flex/README.md
  37. 135 0
      themes/flex/assets/css/base.temp.css
  38. 39 0
      themes/flex/assets/css/contact.css
  39. 26 0
      themes/flex/assets/css/soundcloud.css
  40. 18 0
      themes/flex/assets/js/soundcloud.js
  41. 34 0
      themes/flex/assets/xml/base.temp.xml
  42. 38 0
      themes/flex/config.yaml
  43. 二进制
      themes/flex/images/screenshot.png
  44. 二进制
      themes/flex/images/tn.png
  45. 47 0
      themes/flex/layouts/_default/baseof.html
  46. 16 0
      themes/flex/layouts/_default/list.html
  47. 26 0
      themes/flex/layouts/_default/rss.xml
  48. 10 0
      themes/flex/layouts/_default/single.html
  49. 13 0
      themes/flex/layouts/_default/terms.html
  50. 48 0
      themes/flex/layouts/index.html
  51. 14 0
      themes/flex/layouts/partials/banner.html
  52. 5 0
      themes/flex/layouts/partials/comments.html
  53. 9 0
      themes/flex/layouts/partials/footer.html
  54. 10 0
      themes/flex/layouts/partials/heading.html
  55. 10 0
      themes/flex/layouts/partials/pagination.html
  56. 21 0
      themes/flex/layouts/partials/tags.html
  57. 31 0
      themes/flex/layouts/shortcodes/contact.html
  58. 3 0
      themes/flex/layouts/shortcodes/soundcloud.html
  59. 12 0
      themes/flex/theme.toml

+ 40 - 0
.drone.yml

@@ -0,0 +1,40 @@
+---
+##################
+# Build & Publish#
+##################
+
+kind: pipeline
+name: build and publish
+
+steps:
+  - name: build
+    image: klakegg/hugo:alpine
+    commands:
+      - hugo -d /tmp/.build/public
+    volumes:
+      - name: hugo
+        path: /tmp/.build/public
+  - name: publish
+    image: drillster/drone-rsync
+    settings:
+      user: root
+      delete: true
+      recursive: true
+      args: "-v"
+      key:
+        from_secret: key
+      hosts:
+        - box.unbl.ink
+      source: /tmp/.build/public/
+      target: /home/user-data/www/onec.me/
+      secrets: [ key ]
+    volumes:
+      - name: hugo
+        path: /tmp/.build/public
+volumes:
+  - name: docker
+    host:
+      path: /var/run/docker.sock
+  - name: hugo
+    host:
+      path: /tmp/cache/drone/hugo

+ 1 - 0
.gitignore

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

+ 2 - 0
Makefile

@@ -0,0 +1,2 @@
+publish:
+	hugo && rsync -avz --delete public/ root@box.unbl.ink:/home/user-data/www/onec.me/ && rsync -avz --delete ~/org/.export/books.html root@box.onec.me:/home/user-data/www/onec.me/org/ && rsync -avz --delete ~/org/.export/documentation.html root@box.onec.me:/home/user-data/www/onec.me/org/

+ 42 - 0
config.yaml

@@ -0,0 +1,42 @@
+title: "One C"
+
+theme: "flex"
+
+params:
+  color: black # Any color in CSS syntax
+  width: 42rem          # Any length in CSS syntax
+  footer: Except where otherwise noted, content on this site is licensed under a
+    a <a href="http://creativecommons.org/licenses/by/4.0/" rel="license">
+    Creative Commons Attribution 4.0 International License</a>.
+  rss: To subscribe to this RSS feed, copy its address and paste it into your
+    favorite feed reader.
+  summaries: false      # Set to true to show summaries of posts on homepage
+  divider: '\2015\2015' # Set to false to remove divider below posts on homepage
+  schema: false         # Set to true to add Schema.org metadata
+  opengraph: false      # Set to true to add Open Graph metadata
+  twittercards: false   # Set to true to add Twitter Cards metadata
+  utterances:
+    repo:               # Set to Utterances repo URL to add Utterances comments
+    issueterm: pathname
+    theme: github-light
+  netlify:
+    honeypot: false     # Set to true to add honeypot field in contact form
+    recaptcha: false    # Set to true to add recaptcha challenge in contact form
+
+menu:
+  nav:
+  - name: Archive
+    url: post/
+    weight: 2
+  - name: Categories
+    url: categories/
+    weight: 3
+  - name: Books
+    url: org/books.html
+    weight: 4
+  - name: Docs
+    url: org/documentation.html
+    weight: 5
+  - name: RSS
+    url: index.xml
+    weight: 6

+ 6 - 0
content/page/about.md

@@ -0,0 +1,6 @@
++++
+title = "About"
+date = "2018-02-09"
++++
+
+We know that an improvement is a themeless diploma. Those coughs are nothing more than distributors. Postiche authorizations show us how poisons can be organisations. The thumb of a tsunami becomes a widest downtown.

+ 15 - 0
content/page/site-notice.md

@@ -0,0 +1,15 @@
++++
+date = "2018-02-09"
+title = "Site notice"
+slug = "site-notice"
++++
+
+
+### Walruses
+Those drizzles are nothing more than mothers. Dewlapped laborers show us how flowers can be entrances. Nowhere is it disputed that the candle is a banker. The walruses could be said to resemble malar floors.
+
+### Radio
+Those facts are nothing more than velvets. Lambdoid dimes show us how anthonies can be trombones. An intense bookcase is a bookcase of the mind. The literature would have us believe that a bastioned copy is not but a radio.
+
+### Windshields
+A cork is a land from the right perspective. The first unpierced war is, in its own way, a field. Recent controversy aside, a creek is a burn's industry. Applied windshields show us how ideas can be segments.

+ 23 - 0
content/post/another-engine.md

@@ -0,0 +1,23 @@
++++
+title = "Another Engine"
+author = ["Colin Powell"]
+date = 2018-08-18T01:01:00-04:00
+lastmod = 2019-05-29T12:42:12-04:00
+tags = ["hugo", "tools"]
+categories = ["emacs"]
+draft = false
++++
+
+Once, I used Jekyll. Then I switched to Pelican. I'm finally here on Hugo, and
+hoping that this will make it easier to keep things updated. The eternal
+question when chosing a method to publish a blog is, why publish a blog. I don't
+really have an answer for that yet. I wish I did. Honestly, I do. You don't have
+to believe me, because I believe in myself, and if this is all one big
+simulation, you don't matter anyway.
+
+Incidentally, perhaps the best part of this transition is the
+[ox-hugo](<https://ox-hugo.scripter.co/>) plugin, which makes writing new posts
+and publishing them a dream. Now, instead of some complicated cocktail of adding
+a new file with the write filename and proper metadata, I can just org-mode
+capture the thing. The more I use emacs (and specifically
+[spacemacs](<http://spacemacs.org>)), the more in love I am.

+ 34 - 0
content/post/are-you-like-me.md

@@ -0,0 +1,34 @@
++++
+title = "Are you like me?"
+author = ["Colin Powell"]
+date = 2017-09-20T00:00:00-04:00
+tags = ["uu"]
+categories = ["thoughts"]
+draft = false
++++
+
+One of the aspects of my faith that I have the most difficulty with is accepting
+other people regardless of where they are. As a human, I like to hang with
+people like me. This is understandable, as tribalism exists in the world as an
+artifact of the world we have lived in for the last 10,000 years.
+
+And yet, UUism calls me to be accepting of others and to encourage others in
+their spiritual growth. How can I be tribal and accepting of others at the same
+time? I think a big part of that practice is being honest with yourself about
+the biases you may have. I value thoughtfulness and intelligence highly. I do
+not place as much value on art and entertainment. It is not that I don't like
+those things, but someone who orients their life around art make it immediately
+more difficult for me to find similarities and to enjoy their company.
+
+The best thing I've found in these situations is to keep plumbing for
+commonality. As awkward as tribalism can be, it's also a fantastic tool to build
+affinity for other people. If you can intentionally try to build a tribe with
+strangers, before you know it they are no longer a stranger and instead part of
+a new tribe that you just created. Maybe they have kids. I have kids and know
+that world all too well. Perhaps they have a Mormon grandmother who is difficult
+to be around :) Yet another opportunity to build the community that was missing
+before.
+
+The trick is not to disavow the aspects of our human psychology that make us
+able to accept others, but use them to our advantage to grow our tribe larger,
+or at least increase the number of small tribes we're a part of.

+ 20 - 0
content/post/campaigning.md

@@ -0,0 +1,20 @@
++++
+title = "Campaigning"
+author = ["Colin Powell"]
+date = 2017-10-27T00:00:00-04:00
+lastmod = 2019-05-29T12:39:14-04:00
+categories = ["life"]
+draft = false
++++
+
+Campaigning has been a very interesting trip. The most memoroable aspect of
+running for select board so far has been finding people standing up along side
+me and asking how they can help me gain a seat at the table. Mostly, that's
+because I tend to think of myself as a relatively unimportant person. And I am,
+even now. Yet my desire to serve the town intersects with a lot of other folks'
+desires for their town, and I'm amazed that they see me as someone who can help
+them.
+
+Mostly, what that means to me is that this has become a responsibility. Not that
+I didn't already know that to a certain degree, but extent to which service is
+really responsiblity has fully dawned on me now.

+ 25 - 0
content/post/coaching-soccer.md

@@ -0,0 +1,25 @@
++++
+title = "Coaching soccer"
+author = ["Colin Powell"]
+date = 2017-09-26T00:00:00-04:00
+lastmod = 2019-05-29T12:39:17-04:00
+categories = ["life"]
+draft = false
++++
+
+This is my second year coaching the middle school soccer team here in Castine.
+Each year I am filled with apprehension about the make up of the team, and
+wether coaching is actually something I can do. All those kids, just looking at
+you to say something, anything really, so long as it relates to soccer.
+
+And yet here I am. My second year of telling kids what to do. Interestingly,
+what's most stood out from year to year is the growth of the players. Fifth
+graders last year who had trouble paying attention and looked at me like I was
+speaking Greek when I told them to hustle to the ball, have become easily
+motivated. Older players seem almost excited to step into leadership roles,
+whether in the goal or taking a midfield position with lots of running.
+
+Really, it's the same as watching my own kids grow up. The miracle of humanity
+is how we grow and develop our own personality quirks and motivations which are
+at once totally our own, and also clearly cobbled together by experiences we've
+shared. For my part, I love it.

+ 28 - 0
content/post/continuous-tool-improvement.md

@@ -0,0 +1,28 @@
++++
+title = "Continuous tool improvement"
+author = ["Colin Powell"]
+date = 2018-08-25T00:00:00-04:00
+lastmod = 2019-05-29T12:42:44-04:00
+tags = ["tools"]
+categories = ["emacs"]
+draft = false
++++
+
+I was reviewing the feeds I subscribe to in [elfeed](https://github.com/skeeto/elfeed) this evening when it occurred
+to me that a lot of my feeds have to do with Emacs. I will often blow through
+updates on feeds, making sure to only pickup things that are truly useful. But I
+discovered an amazingly high signal to noise ratio regarding tips for using
+Emacs more effectively. This got me thinking about how I couldn't possible
+remember all this stuff, so I tossed some of the things I was learning in my
+learnings.org file to review later. At that point, it dawned on my how important
+tool choice is, and how important it is to learn how to use your tools
+effectively and be receptive to learning new things about them.
+
+This could apply equally to any well made tool for any discipline (woodworking,
+drawing, research), but for me that means Emacs. Not everyone is going to ever
+need to touch Emacs. For me, I can't imagine not having it, and everytime I
+learn something new, I get a little more effective with it.
+
+For reference, tonight [I learned how to make all URLs, regardless of buffer,
+clickable](http://xenodium.com/#actionable-urls-in-emacs-buffers) [I also learned how to break an org-mode block in two with a single
+keystroke to insert a comment](https://scripter.co/splitting-an-org-block-into-two/).

+ 44 - 0
content/post/creation-and-learning.md

@@ -0,0 +1,44 @@
++++
+title = "Creation and Learning"
+author = ["Colin Powell"]
+date = 2019-12-18T11:00:00-05:00
+tags = ["learning", "create", "mindset"]
+categories = ["thoughts"]
+draft = false
++++
+
+I recently embarked on a plan to learn to draw. I've done this a few times, in a
+few different ways. This time feels different. The lessons I've begun start with
+some very basic ideas, no home run or get rich quick schemes here.  Rather, I
+have a daily exercise of drawing basic shapes, holding the pencil, and just
+getting experience trying to see what I want on the paper before I touch the
+pencil down.
+
+This has been a revelation to me, not least of which because I like these sorts
+of small habit methods for kickstarting new skills. But the other part that has
+been interesting is seeing how things change when I start creating things. I
+often consider learning something new to come with consumption. I read a book,
+watch a video or get instruction from someone else. In this new pattern,
+learning comes from experimentation, comes from creation.
+
+There's something to this, and I think it's related to other discussions about
+closed versus open mindsets. A consumption mindset intrinsically comes from a
+belief that what will help you be your best self comes from outside of you.
+But experimentation and creation comes from a belief that the help you need is
+already inside of you, you just need room to play with an idea.
+
+This creation can come from writing, drawing, painting, software development,
+sculpture, music composition, active conversations with others, and a myriad
+other places. But the important part is that you give yourself room to
+experiment with what's in your own head. So often we fall into the trap of
+looking for something outside us to kick us into a new mindset, but often
+nurturing the creative spirit can have a much greater effect.
+
+One last observation, most of the disciplines I rattled off above fall into the
+realm of art at some level. There's truth there too. The thing that sets us free
+as humans and helps us to be our best self is often the exploration of the edges
+where mundane day-to-day life interacts with what we humans call art.
+
+Create more art. Explore your mind. Explore your world. Watch your creativity
+and ability to learn blossom. Then, perhaps most importantly, spend some time
+helping someone else discover the magic of creation.

+ 30 - 0
content/post/distraction-free.md

@@ -0,0 +1,30 @@
++++
+title = "Distraction free"
+author = ["Colin Powell"]
+date = 2019-11-27T09:48:00-05:00
+tags = ["notifications", "intention"]
+categories = ["thoughts"]
+draft = false
++++
+
+I try to keep notifications in my life to a bare minimum. I get tips from
+friends or co-workers about making sure notifications on my phone are disabled
+while I sleep. I disable them all the time. The one thing I allow are text
+messages to vibrate my Garmin watch, and I'm on the fence as to whether this is
+truly necessary.
+
+There are people who's professions wont allow this. I get that. But I also know
+that most people build narratives about getting a late night text about the
+health of a loved one to justify always getting pinged when Facebook needs your
+attention, or a new email comes in.  These are largely untrue, or at least
+building a process into your life for events that may never happen.
+
+Instead I've made distractions I encounter my own fault. I can't blame Facebook
+for pinging me in the middle of focused work. I took control of what I could and
+my responsibility now is to check for messages when I need to. I check slack
+quite often, after each chunk of work, emails a few times a day, and social
+media rarely.
+
+Have you ever thought about the value of all the different notifications in your
+life? If it not, it may be worthwile to audit all the things that vie for your
+time. It is your time after all, and with ownership comes responsibility.

+ 34 - 0
content/post/doomed-emacs.md

@@ -0,0 +1,34 @@
++++
+title = "Doomed Emacs"
+author = ["Colin Powell"]
+date = 2018-10-31T09:27:00-04:00
+lastmod = 2019-05-29T12:46:00-04:00
+tags = ["tools", "doom-emacs"]
+categories = ["emacs"]
+draft = false
++++
+
+After a year or so of dedicating myself to getting Spacemacs setup just right, I
+made a pretty substanial jump a few weeks ago. I'm now running [doom-emacs](https://github.com/hlissner/doom-emacs) which
+provides fewer nice surprises (missing evil-surround shortcuts by default) than
+spacemacs, but loads much ... much faster. The other day I found myself coding
+while sharing my screen on Zoom and is was painfully obvious what price I was
+paying for spacemacs not cleaning up after itself and generally lazy loading
+things leading to less than fast context switching.
+
+I was willing to struggle through some the slower operations for my own sake,
+but getting caught with other people watching as my editor on a brand new
+computer struggled to do basic things like searching for symbols in the codebase
+was embarrassing.
+
+I'm not done with Spacemacs. I still love the idea, and I also believe that half
+the problem was likely the way I was using it and configuring it. But part of
+the appeal of spacemacs are the defaults. And it was the defaults that was
+making it hard to use it on a daily basis.
+
+Another nice aspect of Doom Emacs is that aside from a handful of evil-mode
+shortcuts, a lot of what you're encouraged to use are stock emacs keystrokes.
+That means that I'm not learning some cryptic layer on org mode when I use
+emacs, I using the default keystrokes that I will find in vanilla emacs. That's
+very useful and will hopefully make me a more respectable member of the emacs
+community, rather than a vim outcast.

+ 52 - 0
content/post/emacs-everywhere.md

@@ -0,0 +1,52 @@
++++
+title = "Why Emacs?"
+author = ["Colin Powell"]
+date = 2020-01-21T11:45:00-05:00
+tags = ["onec", "emacs"]
+categories = ["emacs"]
+draft = false
++++
+
+There's an argument to be made for ease of use in software. The epiphany with
+Apple software in the early part of the 21st century was that most users had
+tasks they wanted done. They did not want to use a computer to do them, per se.
+But if a computer could do them, that was okay.
+
+The problem with this perspective is that it assumes a certain amount of
+laziness—or perhaps lack of discrimination‒on the part of the user. There are
+some excellent times to be lazy, but choice of tools is not one of them. Ask any
+accomplished carpenter if the Home Depot plane and the Lee Nielson plane is the
+same tool. They are not. But let us explore this analogy a bit more. It's
+actually damned appropriate.
+
+If a computer and the software running on it are tools, then, like a carpenter,
+an experienced computer user should be discriminating in their tools. This
+perspective took me a long time to arrive at. I enjoy learning about my tools.
+And yet, I have watched a number of highly productive software developers not
+give a second thought to their tools. Perhaps it's more fair to say they do not
+give a thought to how their tools work.
+
+This lack of curiosity in the things that enable their work means they will
+always suffer when their tool breaks. At some fundamental level they do not know
+how they are doing what they're doing. Any furniture maker knows at a basic
+level how a table planer works. Do you understand your linter works? How about
+the request and response cycle in your browser? The algorithm that kicks out
+the most appropriate answer on StackOverflow? I hope you've answered _yes_ to at
+least one of those. But what about how a compiler works? A JIT scripting
+language compiler? These are all the tools of our trade.
+
+In the case of software there's an even worse fate. What happens when your tool
+doesn't even allow you to be curious about it? Closed source software, or even
+just limited access to the source means you are working with a black box. You
+couldn't learn how it worked even if you wanted to. I can think of a worse fate
+for someone who does something professionally.
+
+All this is a round about way to explain why I am drawn to Emacs and tools like
+it. Popular open source tools that have survived, at this point _literally_, for
+generations of builders. There will always be a new and shiny thing. But I have
+made an intentional effort to lean into the open source tools that have served
+the curious among us for a long time now.
+
+I encourage you to find some part of the software stack that allows you to do
+work and lean into it. Learn why it exists, how it is built, the people who
+built it, and maybe even how you can help build it in the future.

+ 50 - 0
content/post/email-in-emacs-redux.md

@@ -0,0 +1,50 @@
++++
+title = "Email in Emacs Redux"
+author = ["Colin Powell"]
+date = 2019-12-04T11:33:00-05:00
+tags = ["tools", "email", "notmuch"]
+categories = ["emacs"]
+draft = false
++++
+
+I have moved to reading and responding to all my email in Emacs. I honestly
+didn't think I would ever be able to make this jump because of silly things like
+signatures, HTML email and my address book. But the reality of how I actually
+use email on a day to day basis is a big part of why this was possible.
+
+As it happens, most of my email work is replying to other people. As an engineer
+on a product team I start very few email threads, and even fewer with people
+outside the organization. Thus, the lack of the company standard HTML signature
+in my outgoing emails is rarely a problem. On the once or twice a month
+occurrence of needing to send an external-facing email, I can pop open Gmail in
+a browser and take care of it.
+
+But for quickly replying to folks, parsing tasks into my daypage (more on this
+later) and saving content to read later, Notmuch has been a dream.
+
+So the cat's out of the bag. As in my last post about email in Emacs, I use
+Notmuch along with mbsync for getting email and msmtp to send email. I also host
+my own email server on a Digital Ocean VPS running mailinabox&nbsp;[^fn:1]. This makes
+the configuration with mbsync and msmtp pretty painless.
+
+The other important discovery I made is muchsync&nbsp;[^fn:2]. This allows me to run
+the mbsync task for looking for new email on a server in the house that's always
+on. Then each other device I want to read and respond to email just runs a
+\`muchsync\` task that hits up that server and syncs the state of the notmuch tag
+database.
+
+The result is delightful. I can clear out my inbox on one machine and find it
+all cleared up on all the others. Combine that with the ability to quickly
+respond to email within Emacs, copy links to specific messages and capture them
+to Org Mode, and archive things I don't care about, the whole thing is really effective.
+
+One aspect of this is that I have my email setup to default to showing the
+plaintext version, with a tab-able HTML view powered by eww. This works
+surprisingly well. As usual, my configuration is in my dotfiles, specifically
+my \`+mail.el\`&nbsp;[^fn:3] configuration in Doom Emacs.
+
+Check it out and I hope you can get a handle on your email.
+
+[^fn:1]: <https://mailinabox.email>
+[^fn:2]: <http://www.muchsync.org>
+[^fn:3]: <https://git.unbl.ink/secstate/dotfiles/src/branch/master/emacs/.config/doom/+mail.el>

+ 35 - 0
content/post/email-in-emacs.md

@@ -0,0 +1,35 @@
++++
+title = "Email in Emacs"
+author = ["Colin Powell"]
+date = 2018-11-28T11:00:00-05:00
+lastmod = 2019-05-29T12:42:58-04:00
+tags = ["tools", "notmuch", "email"]
+categories = ["emacs"]
+draft = false
++++
+
+I really did try mu4e. Really. But the setup required a custom emacs build on
+macos, and I am unfortunately constrained to Macs for work at the moment, so it
+was kind of a non-starter to jump through so many hoops to get it working. And
+of course, I also highly value resilience, and nothing says unresilient than not
+being able to successfully build a crucial feature like mail handling into your
+editor of choice.
+
+So that occassioned a turn towards notmuch. Oh my, how delightful. At it's
+simplest, notmuch is just a xapian-powered tag database for your email. Imagine
+that, no crazy indexers or long-polling to check for new email. Notmuch just
+tags and allows you to search your email.
+
+Combined with isync's mbsync and msmtp, I now have a really functional _and_
+resilient email seutp in Emacs. Even more delightful is looking through my tag
+database and realizing that if I tag things effectively, finding all those board
+agenda emails for church are just a tag search away.
+
+Of course, such things were always available in Gmail or a mail client. But I
+was always unimpressed with how slow Thunderbird or Mail.app got with lots of
+messages. And Google is reading all my messages, so that sucks too.
+
+Combine the ease of syncing and tagging messages, and the fact that they exist
+in a directory on my computer, synced via Dropbox to all my other computers and
+my email suddenly mine again, not living on an IMAP server that I hope doesn't
+fail me.

+ 31 - 0
content/post/equity.md

@@ -0,0 +1,31 @@
++++
+title = "Equity"
+author = ["Colin Powell"]
+date = 2017-09-19T15:16:00-04:00
+tags = ["uu", "christianity"]
+categories = ["thoughts"]
+draft = false
++++
+
+The gospel of Matthew suggests that Christ's heaven is an equal opportunity
+saver. That is, it is not a place where those who worked the hardest receive the
+best, or those who took and never gave suffer. The parable of the vineyard
+laborers more or less spells out a universal salvation message for those who
+would be willing to work, not for how much they work. And, as a parable, that
+means that those who come to find love and compassion late in life are no less
+entitled to salvation than anyone else.
+
+In Unitarian Universalism, this reflects very accurately what we mean in our
+second principle. We affirm justice, equity and compassion in human relations.
+Note, carefully, that we do not include equality in what we affirm. Equality is
+a difficult concept for humans to hold in their minds, because it suggests that
+everyone needs the same thing. Instead, let us focus our energy on providing
+justice and equity. Because the abused child may need more love and patient
+understanding than the child raised in a loving home. The diversity and color of
+conditions that humans live in exclude the possibility of anything ever being
+equal when it comes to love.
+
+Instead let us strive for equity and considered justice, ensuring that needs are
+being met and that we are working towards making everyone whole. Indeed,
+laborers who did not have the advantage of being there at the start of the day
+deserve their full payment all the same.

+ 38 - 0
content/post/finding-meaing.md

@@ -0,0 +1,38 @@
++++
+title = "Finding meaning"
+author = ["Colin Powell"]
+date = 2017-09-27T00:00:00-04:00
+categories = ["thoughts"]
+draft = false
++++
+
+What does it mean to encourage others towards spiritual growth? At a recent
+board meeting, which included a fairly contentious issue, a number of friends
+and myself certainly did not encourage anyone towards spiritual growth. The root
+of the problem, as with many problems, lies with differences; differences of
+opinion, experience, and expectations. As a Unitarian Universalist congregation,
+we espouse the seven principles, which are as close to dogma as you're likely to
+see in UUism. One of these seven "pillars" of behavior as a UU calls us to
+accept others and help them towards spiritual growth. How can we do that when
+we're so different?
+
+I'm repeating myself here, but repetition is the best way to learn anything, so
+let's go again. Difference tends to cause us to build walls. Often we do not do
+so intentionally, but humans are animals, and there is a base tribalness to much
+of what animals do. It should not surprise us that we like to be with our own
+kind, to have our ideas reinforced, to spend time with those we've shared
+experiences. But that gets to the crux of it. Share experiences with other
+people. Embrace our tribalness to create connections with people who are
+currently strangers. This is not radical acceptance. If you believe that
+abortion is a sin against your chosen diety, that is not a good place to begin
+acceptance. Rather, why not talk about youre experience with your children? Talk
+about sports, the weather, and begin to ask questions.
+
+Do you know where the members on your board were born? Where they were raised?
+What they personally believe? The stand out experiences in their lives? Their
+favorite books? Movies? What they love? What drives them crazy? These are not
+retorical questions. Nor are they questions that I have asked yet. So no need to
+feel bad. Being an accepting and welcoming human being is difficult preciscely
+because of our earlier manifestation as uncooperative animals. But by some
+miracle have developed the skills of discernment and cooperation, and we should
+perform social exercises to keep our open-ness well conditioned.

+ 35 - 0
content/post/free-and-responsible.md

@@ -0,0 +1,35 @@
++++
+title = "Free and Responsible"
+author = ["Colin Powell"]
+date = 2017-09-28T00:00:00-04:00
+tags = ["religion", "uu"]
+categories = ["thoughts"]
+draft = false
++++
+
+The way I was raised, certain people were simply wrong. If they didn't share the
+same enthusiasm for science, they were incorrect. If they believed in a
+benevolent (or even malevolent) Christian god, they were wrong. There was very
+little gray in many of the positions that were espoused to me. One of the great
+aspects of humanity is that we are given the opportunity to raise our children
+with our values and beliefs. But, of course, there are responsibilities there
+too.
+
+It almost seems absurd to say this, but I don't think I was always responsibly
+educated. Absurd, because that's a high bar and I'm not sure anyone can ever
+claim to have been educated under the perfect paradigm. But to the extent that
+it took me many years to understand what it means to pursue a free and
+responsible search for truth and meaning, I think there could have been more
+openess to what I was exposed to. The Christian Bible is an amazing book. The
+Bhagavad Gita is absolutely beautiful. Darwin had his doubts about the extent to
+which evolution allows us to understand life. Newton was downright crazy half
+the time.
+
+The source of responsibility in our lives is humbleness. When we say we are
+responsible for our children, that does not mean if we fail to teach them the
+right things we have failed. It means if we fail to listen to them, and discern
+what they need based on what we understand about them and what they tell us, we
+have failed them. There is no test for responsible parenthood, just as there is
+no test of responsible searching for meaning in our lives. When we have the
+freedom to search for truth and meaning, we must use discernment and listening
+as our foundation for responsibility. Listen first, think second, act last.

+ 21 - 0
content/post/imagining-yourself-doing.md

@@ -0,0 +1,21 @@
++++
+title = "Imagining yourself doing"
+author = ["Colin Powell"]
+date = 2019-11-26T11:06:00-05:00
+tags = ["running", "habits", "bestself"]
+categories = ["thoughts"]
+draft = false
++++
+
+When people say "I can't do that" most of the time, they're actually saying "I
+can't see myself doing that." When I started running, a lot of people said they
+didn't know how I could run so far, or that they could never do that.
+
+When I started, I didn't imagine I'd run marathons. I just started with 1 or 2
+mile runs. Those 2-mile runs were hard, and sometimes they still are.
+
+Yet being out on the road gets you up on that hill where you have a better view of
+your future self. One day I saw myself going farther, and then I went farther.
+
+What do you see yourself doing? What steps can you take to get a better vantage
+point of where you could be? Little steps is all it takes.

+ 37 - 0
content/post/in-pursuit-of-flow.md

@@ -0,0 +1,37 @@
++++
+title = "In Pursuit of Flow"
+author = ["Colin Powell"]
+date = 2019-12-02T14:02:00-05:00
+categories = ["thoughts"]
+draft = false
++++
+
+I don't make a habit of watch the Olympics. But I remember a moment back in 2018
+when I happened to turn on coverage just as they were televising a gold-winning
+snowboard cross run by Red Gerard[^fn:1]. He blew out all the other riders in his group
+to take the gold. Silver was significantly behind him. What stood out to me
+watching him ride, however, was how keyed in he was to the whole thing.
+
+I don't know how much snowboarders are allowed to practice the cross course
+before the event, but given that he was on the hill with 9 other riders who
+didn't look nearly as keyed in meant there was likely more to what was going on
+than simple familiarity with a series of cuts, jumps and bombs.
+
+What Gerard was, of course, was in flow. I am not sure if you've ever
+experienced flow, but beyond snowboarder cross, the state of mind is also
+illustrated in Zhuang Zhou's philosophical writing from 4th century BCE China.
+In his seminal work, Zhuang discusses a butcher who, having so mastered his
+craft, he is not cutting into an animal, but rather his motion guides the blade
+of the knife through the various cuts he needs to make to perfectly separate the
+carcass.
+
+Life, it seems to me, is the pursuit of flow. In flow, everything goes from one
+to the next without deliberate thought of how to achieve a specific end. There
+is no value judgment on the task achieved. Flow is not about good or bad, it is
+about the accomplishment of a given task. There is different work to be done to
+assess value, but once value has been assessed and it's time to work, we all
+seek flow, that place where don't need to know we're our best selves, but where
+we simply are our best selves and are doing what we set out to do with as little
+thought as possible.
+
+[^fn:1]: <https://www.youtube.com/watch?v=m0nJr%5FcpYWU>

+ 41 - 0
content/post/intentions.md

@@ -0,0 +1,41 @@
++++
+title = "Intentions"
+author = ["Colin Powell"]
+date = 2018-08-19T00:00:00-04:00
+tags = ["intention"]
+categories = ["thoughts"]
+draft = false
++++
+
+The idea here, cribbed from Bryan Cantrill's talk on oral traditions in software
+development, is the importance of making as clear as possible your intentions
+when you do things. Often I feel as though intention gets a bad rap. The road to
+hell, and what-not. But the reality is that, if you are doing something, it is
+best to do it with intention. God help us the things we do impulsively or
+emotionally. Sometimes they work out alright, but it's usually best to go back
+and see if we can learn why it happened. That's still applicable when doing
+things intentionally, but because there was forethought, we are already a step
+ahead.
+
+Of course, what this really means is that we also need to make sure we document
+our intentions. This is where we come back to Bryan's talk. It's not enough to
+solve a problem, or build a product. You have to document the process that got
+you there. In software, you leave your intentions via comments, documentation,
+blog posts, podcasts, talks, or just conversations with co-workers and friends.
+But one way or another, you should document what you set out to do and whether
+you accomplished it. In the absence of this, we are really just throwing darts.
+I'd wager dollars to donuts that few significant works were created by throwing
+darts.
+
+I'm currently reading the book _Sing, Unburied, Sing_ by Jesymn Ward. The most
+disturbing aspect of one of the characters in Ward's brilliant story is the
+complete lack of intention in her actions. Her internal governor appears to be
+fueled entirely by impulse and emotion, leaving those around her hurt, confused,
+angry and afraid. When humans act without intention, the results tend to appear
+brutally selfish, even if the underlying logic is not. When we impulsively shoot
+off an email, we have, by definition, not given it any thought. The
+repercussions of such an action are hard to understand.
+
+Thus, while the road to hell may indeed be paved with good intentions, it's
+probably better than the road that's paved with impulsive and emotional
+outbursts.

+ 36 - 0
content/post/leadership.md

@@ -0,0 +1,36 @@
++++
+title = "Leadership"
+author = ["Colin Powell"]
+date = 2017-07-26T00:00:00-04:00
+lastmod = 2019-05-29T12:39:19-04:00
+categories = ["life"]
+draft = false
++++
+
+An interesting discussion occurred at work today where I was forced to put into
+words some thoughts I've been kicking around for a while on the nature of
+leadership. None of my thoughts are original, mind you. This one was cribbed
+from a blog post about leading without authority. I'll drop the link when I find
+it. The long and the short of that post was that leadership has only the loosest
+relationship with authority. In fact, it's often a sign of dysfunctional
+leadership which depends on having someone give you authority.
+
+In the world of power, authority is one of the most difficult types to wield,
+because it generally means someone has placed an expectation on you. You will be
+forced to live up to those expectations or be cut down from your place of
+authority quickly. Meanwhile, leadership is not actually a type of power, but a
+behavior. This alone should be mind-blowing if you're actually following along
+at home.
+
+You can lead without authority. You can lead with authority. You can actually
+lead without saying a thing. This is key tenant in modern stoicism, actually.
+Don't tell, do. And so it is in leadership as well. Don't tell people what to
+do, show them what is effective, and empathize with their plight.
+
+One of the more disappointing interactions I had recently was when a co-worker
+expressed a lack of joy in his work. It struck a nerve with me, in that I had
+felt many of the same things. And our lead engineer, who tends to lead through
+authority rather than trust, kind, sort of, well ... blew us off. I really
+didn't see that coming, and it's forced me to take a step back and realize that
+I need to do a better job of leading without authority. Of building trust
+amongst my co-workers so that when the need arises, I can step up.

+ 23 - 0
content/post/monarchs.md

@@ -0,0 +1,23 @@
++++
+title = "Monarchs"
+author = ["Colin Powell"]
+date = 2017-09-16T00:00:00-04:00
+lastmod = 2019-05-29T12:39:45-04:00
+categories = ["life"]
+draft = false
++++
+
+I knew that monarch butterflies were born somewhere in the north and then
+migrated to Mexico for the winter. But today on a hike on Sears Island we got to
+see a field of wildflowers, predominently milkweed, that was set aside
+specifically for monarchs to develop in.
+
+Indeed, we saw a few monarch caterpillers, which interesting actually share a
+color pattern with their flying form.
+
+Our enthusiasm was dampened slightly when the flying insects came out. They
+specifically seemed to want our lunch and recent traumatic events involving
+ground hornets meant we had to make a hasty retreat.
+
+The hike ended up being almost two miles and was through some really pretty
+paths. I would definitely enjoy hiking on Sears Island again.

+ 23 - 0
content/post/nethack.md

@@ -0,0 +1,23 @@
++++
+title = "Nethack"
+author = ["Colin Powell"]
+date = 2019-01-13T22:45:00-05:00
+categories = ["thoughts"]
+draft = false
++++
+
+I discovered Nethack for the first time this weekend. Well, I knew it existed
+for a while, but I had always sort of poked around at it, generally unimpressed.
+But on Friday there was a lobste.rs post about a speedrun of nethack that
+totally captured my attention. The runners used the inventory at the start of a
+randomly generated map to determine which seed was used by the RNG to build the
+dungeon. From there, they had a general sense of what would work. This resulted
+in an ascension, as victories are called, of sub 8 minutes. The previous best on
+the most popular nethack server, nethack.alt.org, was more than 90 minutes.
+Crazy.
+
+All that to say that reading about their speedrun made me realized how much more
+there was in nethack. Much more. And now I'm hooked. I also joined the IRC
+channel for NAO and with IRCCloud I get notifications when I'm done with a game
+with my final score. It's actually kind of delightful. Now I need to stop
+wasting time with it :)

+ 32 - 0
content/post/off-days.md

@@ -0,0 +1,32 @@
++++
+title = "Off days"
+author = ["Colin Powell"]
+date = 2017-09-23T00:00:00-04:00
+lastmod = 2019-05-29T12:39:21-04:00
+categories = ["life"]
+draft = false
++++
+
+We're all entitled to having off days, but it doesn't make them any easier to
+work around. I woke up today without much ambition, despite the fact that we
+have chickens that need to be slaughtered. To add insult to injury, after we
+decided not to worry about slaughter, I went downstairs to discover that the
+toilet is not filling. There's simply no water in the supply line. To make
+things weirder, the sink that's on the same line works fine. We've been working
+thorugh issues with sediment in our well water, and it seems like this is
+probably related. But we really have no idea.
+
+Yesterday was a funny day too where matters beyond my control led to me not
+being very responsive at work. That carries it's own stress as deadlines loom
+and people expect a certain result and you have to explain why the result is not
+there yet. Effectively, today is a day where the rug feels slightly frayed
+around the edges. Life is hardly falling apart, but things are just starting to
+slip a little bit.
+
+We're all entitled to days like these, but it doesn't make it any easier to
+weather, especially when working on remainig stoic about life, it can feel like
+a setback. That said, the feeling of discouragment is really pride. Pride that
+you thought you had things under control, when in reality you were never in
+control of the things around you, but simply your respones to the things around
+you. Centering in these moments involves acknowledging that all you can do is
+control your response and actions, and doing your best to return to those

+ 19 - 0
content/post/on-the-ballot.md

@@ -0,0 +1,19 @@
++++
+title = "On the ballot"
+author = ["Colin Powell"]
+date = 2017-09-18T00:00:00-04:00
+lastmod = 2019-05-29T12:39:43-04:00
+categories = ["life"]
+draft = false
++++
+
+I'm officially going to be on the ballot in Castine for selectmen this year!
+
+Turned in my nomination papers, and, pending a review of the voter signature, I
+will be on the ballot along with Patrick Haugen and Buzz Layton. It was a lot
+of fun talking to folks about the town while collecting signature, and I'm
+feeling really blessed to be in a community that not only provides me the
+opportunity to run for public office, but one where my friends and neighbors
+are actively enthuiastic about my campaign.
+
+Next stop, election day!

+ 17 - 0
content/post/reading-lists.md

@@ -0,0 +1,17 @@
++++
+title = "Reading Lists"
+author = ["Colin Powell"]
+date = 2018-08-20T22:06:00-04:00
+lastmod = 2019-05-29T12:42:15-04:00
+tags = ["spacemacs", "tools"]
+categories = ["emacs"]
+draft = false
++++
+
+Oh Goodreads. Your website is a cluttered mess. Your UX hasn't been improved in years. The only value I derive from keeping my reading list on you is that my friends can see what I'm reading. Which is a neat trick, but since I've mostly given up on Facebook too, it not really enough to keep me.
+
+I was an early adopter of Goodreads, but my life has taken a turn towards the personal and the text-based. I use Emacs (via [spacemacs](spacemacs.org)) as much as I can. Org-mode might be the single most impressive IDEA rendered into software I've ever seen. It simply makes the things I use on a regular basis more powerful and expressive, which is not something I can say for Word, Twitter, or Chrome.  Those are merely tools. They don't amplify my ability to document and create.
+
+Really the post _[Leaving Goodreads](<https://lepisma.github.io/2017/06/29/leaving-goodreads/index.html>)_ is what convinced me to go, one more time, back to my reading list in org mode. But the killer feature this time around was [ox-hugo](<https://ox-hugo.scripter.co/>), which allows me to easily dump Org-mode subtrees into a hugo-powered blog directory. A simple `rsync` later and I can publish random subtrees, including book reviews!
+
+The whole thing is so elegant, I couldn't have dreamed up the process if I had tried. The whole thing was truly an evolution of tools, and one that was only possible because each tool, Emacs, spacemacs, org-mode, hugo, ox-hugo, does it's job so elegantly.

+ 31 - 0
content/post/running-tired.md

@@ -0,0 +1,31 @@
++++
+title = "Running Tired"
+author = ["Colin Powell"]
+date = 2018-08-20T00:00:00-04:00
+tags = ["running"]
+categories = ["thoughts"]
+draft = false
++++
+
+After an angsty 25+ years of my life, I've come around to love running. This is
+obvious to anyone who knows me. I discovered it as a great hobby when you live
+in a rural area and can't get together on a regular basis to play sports.
+Combined with the ability to track running with technology, it has become a
+hobby that at this point I would even if I couldn't track, or had access to
+regular sports events. I just love being out on the road, listening to nature
+(or music) and feeling the air and precipitation.
+
+But that's not what this is about. This post is about when I'm less than joyful
+on a run. A big part of running is making it a habit so that it isn't a
+struggle. The hope is that you can condition yourself to be able to use
+relatively little effort to get out there. That's the goal. Of course, reality
+being what it is, running it not always effortless.
+
+The last few weeks I've changed my diet and had an explosion of personal and
+professional commitments. The changes in routine have led to runs that have been
+crammed in my schedule sideways and at times that are not my favorite. Which
+ultimately has led to runs that would normally be close to effortless, requiring
+more effort. But there's an opportunity here too. The opportunity is to toughten
+my mental state to run while under effort. Even when things don't go right, we
+have to practice a combination of mindfulness and grounding in your ability to
+push through, while still listening to your body and not pushing too hard.

+ 28 - 0
content/post/spacemacs.md

@@ -0,0 +1,28 @@
++++
+title = "Spacemacs"
+author = ["Colin Powell"]
+date = 2017-09-19
+lastmod = 2019-05-29T12:42:14-04:00
+tags = ["spacemacs", "tools"]
+categories = ["emacs"]
+draft = false
++++
+
+Emacs is very powerful. Amazingly so. But it's so arcane, the keystrokes could
+take you years to master. So what's a developer to do?
+
+Enter spacemacs. I honestly don't know where this idea came from, and my brain
+is structured in such a way that I could have ever pulled it off myself. But an
+emacs configured like Vim (thank you evil mode) with discoverable keystrokes ...
+I am always flabergasted.
+
+Tonight I discovered how to open the kill ring. While it sounds aggressive, it's
+really just Emacs version of a clipboard. Anything you cut or copy ends up on
+the kill ring. For so long I treated it like the opaque clipboard on so many
+operating systems. The last thing I cut is the only thing I have access to. And
+God help me if I cut something else, because I'll lose the last thing to
+oblivion.
+
+But not anymore, baby. With an interactive kill ring (SPC-r-y for those of you
+following along at home) you get a searchable compendium of everything you've
+cut or copied in the current session. Absolutely brilliant.

+ 78 - 0
content/post/trompe-l-oeil.md

@@ -0,0 +1,78 @@
++++
+title = "Trompe l'oeil"
+author = ["Colin Powell"]
+date = 2019-05-24T15:16:00-04:00
+tags = ["empathy", "running"]
+categories = ["thoughts"]
+draft = false
++++
+
+When running, you will sometimes come to a path that, for whatever reason, is
+difficult to read. While the incline may go up, your eye and, subsequently
+your mind, says it's going down. Such visual tricks are called trompe
+l'oeils, literally "trick of the eye" in French.
+
+Personally, these tricks often have the effect of letting me run harder
+uphill than I otherwise would, revealing the incredible amount of mental
+power that goes into distance running. If my mind does not believe I'm going
+uphill, I run faster, even if I am in fact going uphill. Most people would
+consider this a cool trick to get you to run faster. Unless you didn't want
+to run faster.
+
+In a race, such tricks would be welcome. I am going all-out, pushing myself
+to the limit to achieve a personal record, or, in rare cases, to actually win
+the race outright. But in training, such exertions are often unwelcome.
+Outside of races, pushing yourself as hard as you can go is generally frowned
+upon. There is no use destroying your capacity to run tomorrow with a hard
+training run today. Training theory says you should lay down a base of solid,
+slower running, and save faster, max-heartrate runs for the occasional
+intense workout.
+
+This, it occurs to me, is a perfect analogy for how we use our ability to
+reason, and to conversely to simply react. Danny Kahneman would have called
+this fast thinking and slow thinking. You would expect that in most cases,
+having a "gut feeling" about something would be great. But in practice, such
+impulsive decision making often gets us into trouble. Our slow thinking --
+our ability to reason -- ought to be a our base, slow training thinking. This
+sort of thinking prepares us for moments where we need our fast thinking, or
+our reactionary thought.
+
+This has sweeping implications for all sorts of personal interactions. I'm
+quite interested in how this plays into Nate Walker's ideas of "moral
+imagination" and radical empathy. You see, most of us are actually not every
+good at empathyzing. Sympathy comes naturally to a great many people. We can
+imagine the pain, or anger someone is feeling when we are in the presence of
+it. But empathy asks us not just to feel someone's emotional state, but to
+understand them.
+
+The problem, as I see it, is that, like with running, there are trompe
+l'oeils all around us. Places where we think we understand why someone is
+acting the way they are.
+
+"She's just pissed because I forgot to call last night."
+
+"He's still frustrated because he didn't have time to get coffee this morning"
+
+On the face of it, those very well might be true. Or they might not. When do
+we know we're running hard up hill? In most places in life, this is
+completely unimportant to quickly address someone's emotional state. Far more
+important is to be patient, and understanding without necessarily assuming
+that we _can know right now_ what's bothering someone, or why they're doing
+what they're doing.
+
+"She struggles with abandonment issues since her father left when she was 8,
+and while you didn't call, what upset her most was feeling alone."
+
+"He was up really late last night stressing about work that was supposed to
+be done. Not getting cofffee made things worse, but were hardly what cause
+his foul mood."
+
+In both of these cases, there are underlying mental states. It requires
+imagination and trust in our fellow humans to truly empathize in these
+circumstances. While the road appeared to go down hill, and we were all into
+bombing down it, the reality is that we burned ourselves out on a training
+run that tricked us into going up hill. We would have been better served to
+hold our judgment for a little longer, and asked more questions, and listened
+more closely. Rarely do we need to exercise empathy quickly, and applying
+Walker's "moral imagination" can get us a lot closer to understanding a lot
+more people, and making all our lives a lot easier.

+ 22 - 0
content/post/why-are-we-grateful.md

@@ -0,0 +1,22 @@
++++
+title = "Why are we grateful?"
+author = ["Colin Powell"]
+date = 2017-09-19T00:00:00-04:00
+tags = ["gratefulness"]
+categories = ["thoughts"]
+draft = false
++++
+
+I just finished the book **The Righteous Mind** by Jonathan Haidt and was struck
+by a line at the beginning of his acknowledgment section. Relaying what a
+graduate student once taught him he explains that we do not express gratitude to
+settle debts or sow the ground for favors. We give our gratitude out to make
+stronger relationships.
+
+I was struck by what a simple, yet profound thought that was. Gratefulness is
+not a selfish tool we wield to get the upper hand. Humans, while highly
+rational about a great many things, operate more like bees in a hive than most
+would give us credit for. Hives need cohesion. Strong relationships breed
+cohesion. The process is so clear.
+
+Do you imagine that chimps can express their gratitude to one another?

+ 994 - 0
onec.org

@@ -0,0 +1,994 @@
+#+TITLE: onec
+#+TODO: IDEA(i) DRAFT(d) | PUBLISHED(p)
+#+hugo_base_dir: ./.export/hugo/onec.me/
+#+hugo_section: ./post
+
+* Life :@life:
+** PUBLISHED Campaigning
+CLOSED: [2017-10-27]
+:PROPERTIES:
+:EXPORT_FILE_NAME: campaigning
+:END:
+
+Campaigning has been a very interesting trip. The most memoroable aspect of
+running for select board so far has been finding people standing up along side
+me and asking how they can help me gain a seat at the table. Mostly, that's
+because I tend to think of myself as a relatively unimportant person. And I am,
+even now. Yet my desire to serve the town intersects with a lot of other folks'
+desires for their town, and I'm amazed that they see me as someone who can help
+them.
+
+Mostly, what that means to me is that this has become a responsibility. Not that
+I didn't already know that to a certain degree, but extent to which service is
+really responsiblity has fully dawned on me now.
+
+** PUBLISHED Coaching soccer
+CLOSED: [2017-09-26]
+:PROPERTIES:
+:EXPORT_FILE_NAME: coaching-soccer
+:END:
+
+This is my second year coaching the middle school soccer team here in Castine.
+Each year I am filled with apprehension about the make up of the team, and
+wether coaching is actually something I can do. All those kids, just looking at
+you to say something, anything really, so long as it relates to soccer.
+
+And yet here I am. My second year of telling kids what to do. Interestingly,
+what's most stood out from year to year is the growth of the players. Fifth
+graders last year who had trouble paying attention and looked at me like I was
+speaking Greek when I told them to hustle to the ball, have become easily
+motivated. Older players seem almost excited to step into leadership roles,
+whether in the goal or taking a midfield position with lots of running.
+
+Really, it's the same as watching my own kids grow up. The miracle of humanity
+is how we grow and develop our own personality quirks and motivations which are
+at once totally our own, and also clearly cobbled together by experiences we've
+shared. For my part, I love it.
+
+** PUBLISHED Leadership
+CLOSED: [2017-07-26]
+:PROPERTIES:
+:EXPORT_FILE_NAME: leadership
+:END:
+
+An interesting discussion occurred at work today where I was forced to put into
+words some thoughts I've been kicking around for a while on the nature of
+leadership. None of my thoughts are original, mind you. This one was cribbed
+from a blog post about leading without authority. I'll drop the link when I find
+it. The long and the short of that post was that leadership has only the loosest
+relationship with authority. In fact, it's often a sign of dysfunctional
+leadership which depends on having someone give you authority.
+
+In the world of power, authority is one of the most difficult types to wield,
+because it generally means someone has placed an expectation on you. You will be
+forced to live up to those expectations or be cut down from your place of
+authority quickly. Meanwhile, leadership is not actually a type of power, but a
+behavior. This alone should be mind-blowing if you're actually following along
+at home.
+
+You can lead without authority. You can lead with authority. You can actually
+lead without saying a thing. This is key tenant in modern stoicism, actually.
+Don't tell, do. And so it is in leadership as well. Don't tell people what to
+do, show them what is effective, and empathize with their plight.
+
+One of the more disappointing interactions I had recently was when a co-worker
+expressed a lack of joy in his work. It struck a nerve with me, in that I had
+felt many of the same things. And our lead engineer, who tends to lead through
+authority rather than trust, kind, sort of, well ... blew us off. I really
+didn't see that coming, and it's forced me to take a step back and realize that
+I need to do a better job of leading without authority. Of building trust
+amongst my co-workers so that when the need arises, I can step up.
+
+** PUBLISHED Off days
+CLOSED: [2017-09-23]
+:PROPERTIES:
+:EXPORT_FILE_NAME: off-days
+:END:
+
+We're all entitled to having off days, but it doesn't make them any easier to
+work around. I woke up today without much ambition, despite the fact that we
+have chickens that need to be slaughtered. To add insult to injury, after we
+decided not to worry about slaughter, I went downstairs to discover that the
+toilet is not filling. There's simply no water in the supply line. To make
+things weirder, the sink that's on the same line works fine. We've been working
+thorugh issues with sediment in our well water, and it seems like this is
+probably related. But we really have no idea.
+
+Yesterday was a funny day too where matters beyond my control led to me not
+being very responsive at work. That carries it's own stress as deadlines loom
+and people expect a certain result and you have to explain why the result is not
+there yet. Effectively, today is a day where the rug feels slightly frayed
+around the edges. Life is hardly falling apart, but things are just starting to
+slip a little bit.
+
+We're all entitled to days like these, but it doesn't make it any easier to
+weather, especially when working on remainig stoic about life, it can feel like
+a setback. That said, the feeling of discouragment is really pride. Pride that
+you thought you had things under control, when in reality you were never in
+control of the things around you, but simply your respones to the things around
+you. Centering in these moments involves acknowledging that all you can do is
+control your response and actions, and doing your best to return to those
+
+** PUBLISHED On the ballot
+CLOSED: [2017-09-18]
+:PROPERTIES:
+:EXPORT_FILE_NAME: on-the-ballot
+:END:
+
+I'm officially going to be on the ballot in Castine for selectmen this year!
+
+Turned in my nomination papers, and, pending a review of the voter signature, I
+will be on the ballot along with Patrick Haugen and Buzz Layton. It was a lot
+of fun talking to folks about the town while collecting signature, and I'm
+feeling really blessed to be in a community that not only provides me the
+opportunity to run for public office, but one where my friends and neighbors
+are actively enthuiastic about my campaign.
+
+Next stop, election day!
+
+** PUBLISHED Monarchs
+CLOSED: [2017-09-16]
+:PROPERTIES:
+:EXPORT_FILE_NAME: monarchs
+:END:
+
+I knew that monarch butterflies were born somewhere in the north and then
+migrated to Mexico for the winter. But today on a hike on Sears Island we got to
+see a field of wildflowers, predominently milkweed, that was set aside
+specifically for monarchs to develop in.
+
+Indeed, we saw a few monarch caterpillers, which interesting actually share a
+color pattern with their flying form.
+
+Our enthusiasm was dampened slightly when the flying insects came out. They
+specifically seemed to want our lunch and recent traumatic events involving
+ground hornets meant we had to make a hasty retreat.
+
+The hike ended up being almost two miles and was through some really pretty
+paths. I would definitely enjoy hiking on Sears Island again.
+
+* Self-hosting :@selfhosting
+** DRAFT Self-hosted weather stations
+:PROPERTIES:
+:EXPORT_FILE_NAME: self-hosted-weather-stations
+:END:
+
+For a few years now, I've had a cobbled together weather station using Ecowitt
+sensors that one can readily buy on Amazon, and the fantastic open source tool
+`WeeWx`. I really don't think I can sign the praises of WeeWx loudly enough.
+
+The components of the setup:
+
++ Ecowitt GW3000 "gateway"
++ Ecowitt XXXX temperature sensor
++ Ecowitt rain guage
++ Ecowitt anemometer
++ FreeBSD jail (or any unix-like 24-7 server, an RPi would be fine here)
+
+Ecowitt is better know in the agricultural community for making very expensive,
+very high performing sensors for farms. But thankfully they've dipped their toes
+in the commercial waters and provided a highly cost-effective way to build a
+home weather station cluster, without dropping hundreds of dollars on a Davis
+instrument (and then being locked into their ecosystem).
+
+See, the real beauty of Ecowitt is that all the sensor communicate with the
+gateway over a 900Mhz channel which the GW listens for, parses and then
+transmits to a given IP address on the local network. The recipient of the
+gateway's communication is supposed to be a super janky phone app. But we can do
+one better and send it all to WeeWx!
+
+WeeWx handles a lot of different sensors. So you could probably replace
+everything I just said above with plugging in a $300 Davis weather station and
+use that with WeeWx. But your mileage will vary depending on model numbers and
+firmware and honestly, nobody got time for that. Instead, we'll use the Ecowitt
+plugin in WeeWx to intercept the gateway's messages, store them in a sqlite
+database and let WeeWx generate a really nice HTML page for our weather station
+(demo of mine here: https://wx.unbl.ink).
+
+Of course, now all that fine weather data is parsed and stuffed ina SQL data
+store, so you can also re-process it to a heavier weight DB engine, like
+postgres and go nuts. At least, that's what I've done. Having raw, time-based
+data from sensors on your own property gives you a chance to run historical
+calculations of specific events, and it also allows me to pull local data into
+other projects, so my run tracker doesn't get data from the airport 90 miles
+from my house, but can use super local weather data.
+
+* Thoughts :@thoughts:
+** PUBLISHED Why are we grateful? :gratefulness:
+CLOSED: [2017-09-19]
+:PROPERTIES:
+:EXPORT_FILE_NAME: why-are-we-grateful
+:END:
+
+I just finished the book *The Righteous Mind* by Jonathan Haidt and was struck
+by a line at the beginning of his acknowledgment section. Relaying what a
+graduate student once taught him he explains that we do not express gratitude to
+settle debts or sow the ground for favors. We give our gratitude out to make
+stronger relationships.
+
+I was struck by what a simple, yet profound thought that was. Gratefulness is
+not a selfish tool we wield to get the upper hand. Humans, while highly
+rational about a great many things, operate more like bees in a hive than most
+would give us credit for. Hives need cohesion. Strong relationships breed
+cohesion. The process is so clear.
+
+Do you imagine that chimps can express their gratitude to one another?
+
+** PUBLISHED Are you like me? :uu:
+CLOSED: [2017-09-20]
+:PROPERTIES:
+:EXPORT_FILE_NAME: are-you-like-me
+:END:
+
+One of the aspects of my faith that I have the most difficulty with is accepting
+other people regardless of where they are. As a human, I like to hang with
+people like me. This is understandable, as tribalism exists in the world as an
+artifact of the world we have lived in for the last 10,000 years.
+
+And yet, UUism calls me to be accepting of others and to encourage others in
+their spiritual growth. How can I be tribal and accepting of others at the same
+time? I think a big part of that practice is being honest with yourself about
+the biases you may have. I value thoughtfulness and intelligence highly. I do
+not place as much value on art and entertainment. It is not that I don't like
+those things, but someone who orients their life around art make it immediately
+more difficult for me to find similarities and to enjoy their company.
+
+The best thing I've found in these situations is to keep plumbing for
+commonality. As awkward as tribalism can be, it's also a fantastic tool to build
+affinity for other people. If you can intentionally try to build a tribe with
+strangers, before you know it they are no longer a stranger and instead part of
+a new tribe that you just created. Maybe they have kids. I have kids and know
+that world all too well. Perhaps they have a Mormon grandmother who is difficult
+to be around :) Yet another opportunity to build the community that was missing
+before.
+
+The trick is not to disavow the aspects of our human psychology that make us
+able to accept others, but use them to our advantage to grow our tribe larger,
+or at least increase the number of small tribes we're a part of.
+
+** PUBLISHED Finding meaning
+CLOSED: [2017-09-27]
+:PROPERTIES:
+:EXPORT_FILE_NAME: finding-meaing
+:END:
+
+What does it mean to encourage others towards spiritual growth? At a recent
+board meeting, which included a fairly contentious issue, a number of friends
+and myself certainly did not encourage anyone towards spiritual growth. The root
+of the problem, as with many problems, lies with differences; differences of
+opinion, experience, and expectations. As a Unitarian Universalist congregation,
+we espouse the seven principles, which are as close to dogma as you're likely to
+see in UUism. One of these seven "pillars" of behavior as a UU calls us to
+accept others and help them towards spiritual growth. How can we do that when
+we're so different?
+
+I'm repeating myself here, but repetition is the best way to learn anything, so
+let's go again. Difference tends to cause us to build walls. Often we do not do
+so intentionally, but humans are animals, and there is a base tribalness to much
+of what animals do. It should not surprise us that we like to be with our own
+kind, to have our ideas reinforced, to spend time with those we've shared
+experiences. But that gets to the crux of it. Share experiences with other
+people. Embrace our tribalness to create connections with people who are
+currently strangers. This is not radical acceptance. If you believe that
+abortion is a sin against your chosen diety, that is not a good place to begin
+acceptance. Rather, why not talk about youre experience with your children? Talk
+about sports, the weather, and begin to ask questions.
+
+Do you know where the members on your board were born? Where they were raised?
+What they personally believe? The stand out experiences in their lives? Their
+favorite books? Movies? What they love? What drives them crazy? These are not
+retorical questions. Nor are they questions that I have asked yet. So no need to
+feel bad. Being an accepting and welcoming human being is difficult preciscely
+because of our earlier manifestation as uncooperative animals. But by some
+miracle have developed the skills of discernment and cooperation, and we should
+perform social exercises to keep our open-ness well conditioned.
+
+** PUBLISHED Free and Responsible :religion:uu:
+CLOSED: [2017-09-28]
+:PROPERTIES:
+:EXPORT_FILE_NAME: free-and-responsible
+:END:
+
+The way I was raised, certain people were simply wrong. If they didn't share the
+same enthusiasm for science, they were incorrect. If they believed in a
+benevolent (or even malevolent) Christian god, they were wrong. There was very
+little gray in many of the positions that were espoused to me. One of the great
+aspects of humanity is that we are given the opportunity to raise our children
+with our values and beliefs. But, of course, there are responsibilities there
+too.
+
+It almost seems absurd to say this, but I don't think I was always responsibly
+educated. Absurd, because that's a high bar and I'm not sure anyone can ever
+claim to have been educated under the perfect paradigm. But to the extent that
+it took me many years to understand what it means to pursue a free and
+responsible search for truth and meaning, I think there could have been more
+openess to what I was exposed to. The Christian Bible is an amazing book. The
+Bhagavad Gita is absolutely beautiful. Darwin had his doubts about the extent to
+which evolution allows us to understand life. Newton was downright crazy half
+the time.
+
+The source of responsibility in our lives is humbleness. When we say we are
+responsible for our children, that does not mean if we fail to teach them the
+right things we have failed. It means if we fail to listen to them, and discern
+what they need based on what we understand about them and what they tell us, we
+have failed them. There is no test for responsible parenthood, just as there is
+no test of responsible searching for meaning in our lives. When we have the
+freedom to search for truth and meaning, we must use discernment and listening
+as our foundation for responsibility. Listen first, think second, act last.
+
+** PUBLISHED Intentions :intention:
+CLOSED: [2018-08-19]
+:PROPERTIES:
+:EXPORT_FILE_NAME: intentions
+:END:
+
+The idea here, cribbed from Bryan Cantrill's talk on oral traditions in software
+development, is the importance of making as clear as possible your intentions
+when you do things. Often I feel as though intention gets a bad rap. The road to
+hell, and what-not. But the reality is that, if you are doing something, it is
+best to do it with intention. God help us the things we do impulsively or
+emotionally. Sometimes they work out alright, but it's usually best to go back
+and see if we can learn why it happened. That's still applicable when doing
+things intentionally, but because there was forethought, we are already a step
+ahead.
+
+Of course, what this really means is that we also need to make sure we document
+our intentions. This is where we come back to Bryan's talk. It's not enough to
+solve a problem, or build a product. You have to document the process that got
+you there. In software, you leave your intentions via comments, documentation,
+blog posts, podcasts, talks, or just conversations with co-workers and friends.
+But one way or another, you should document what you set out to do and whether
+you accomplished it. In the absence of this, we are really just throwing darts.
+I'd wager dollars to donuts that few significant works were created by throwing
+darts.
+
+I'm currently reading the book /Sing, Unburied, Sing/ by Jesymn Ward. The most
+disturbing aspect of one of the characters in Ward's brilliant story is the
+complete lack of intention in her actions. Her internal governor appears to be
+fueled entirely by impulse and emotion, leaving those around her hurt, confused,
+angry and afraid. When humans act without intention, the results tend to appear
+brutally selfish, even if the underlying logic is not. When we impulsively shoot
+off an email, we have, by definition, not given it any thought. The
+repercussions of such an action are hard to understand.
+
+Thus, while the road to hell may indeed be paved with good intentions, it's
+probably better than the road that's paved with impulsive and emotional
+outbursts.
+
+** PUBLISHED Running Tired :running:
+CLOSED: [2018-08-20]
+:PROPERTIES:
+:EXPORT_FILE_NAME: running-tired
+:END:
+
+After an angsty 25+ years of my life, I've come around to love running. This is
+obvious to anyone who knows me. I discovered it as a great hobby when you live
+in a rural area and can't get together on a regular basis to play sports.
+Combined with the ability to track running with technology, it has become a
+hobby that at this point I would even if I couldn't track, or had access to
+regular sports events. I just love being out on the road, listening to nature
+(or music) and feeling the air and precipitation.
+
+But that's not what this is about. This post is about when I'm less than joyful
+on a run. A big part of running is making it a habit so that it isn't a
+struggle. The hope is that you can condition yourself to be able to use
+relatively little effort to get out there. That's the goal. Of course, reality
+being what it is, running it not always effortless.
+
+The last few weeks I've changed my diet and had an explosion of personal and
+professional commitments. The changes in routine have led to runs that have been
+crammed in my schedule sideways and at times that are not my favorite. Which
+ultimately has led to runs that would normally be close to effortless, requiring
+more effort. But there's an opportunity here too. The opportunity is to toughten
+my mental state to run while under effort. Even when things don't go right, we
+have to practice a combination of mindfulness and grounding in your ability to
+push through, while still listening to your body and not pushing too hard.
+
+** PUBLISHED Nethack
+CLOSED: [2019-01-13 Sun 22:45]
+:PROPERTIES:
+:EXPORT_FILE_NAME: nethack
+:END:
+
+I discovered Nethack for the first time this weekend. Well, I knew it existed
+for a while, but I had always sort of poked around at it, generally unimpressed.
+But on Friday there was a lobste.rs post about a speedrun of nethack that
+totally captured my attention. The runners used the inventory at the start of a
+randomly generated map to determine which seed was used by the RNG to build the
+dungeon. From there, they had a general sense of what would work. This resulted
+in an ascension, as victories are called, of sub 8 minutes. The previous best on
+the most popular nethack server, nethack.alt.org, was more than 90 minutes.
+Crazy.
+
+All that to say that reading about their speedrun made me realized how much more
+there was in nethack. Much more. And now I'm hooked. I also joined the IRC
+channel for NAO and with IRCCloud I get notifications when I'm done with a game
+with my final score. It's actually kind of delightful. Now I need to stop
+wasting time with it :)
+
+** PUBLISHED Trompe l'oeil :empathy:running:
+CLOSED: [2019-05-24 Fri 15:16]
+:PROPERTIES:
+:EXPORT_FILE_NAME: trompe-l-oeil
+:END:
+
+When running, you will sometimes come to a path that, for whatever reason, is
+difficult to read. While the incline may go up, your eye and, subsequently
+your mind, says it's going down. Such visual tricks are called trompe
+l'oeils, literally "trick of the eye" in French.
+
+Personally, these tricks often have the effect of letting me run harder
+uphill than I otherwise would, revealing the incredible amount of mental
+power that goes into distance running. If my mind does not believe I'm going
+uphill, I run faster, even if I am in fact going uphill. Most people would
+consider this a cool trick to get you to run faster. Unless you didn't want
+to run faster.
+
+In a race, such tricks would be welcome. I am going all-out, pushing myself
+to the limit to achieve a personal record, or, in rare cases, to actually win
+the race outright. But in training, such exertions are often unwelcome.
+Outside of races, pushing yourself as hard as you can go is generally frowned
+upon. There is no use destroying your capacity to run tomorrow with a hard
+training run today. Training theory says you should lay down a base of solid,
+slower running, and save faster, max-heartrate runs for the occasional
+intense workout.
+
+This, it occurs to me, is a perfect analogy for how we use our ability to
+reason, and to conversely to simply react. Danny Kahneman would have called
+this fast thinking and slow thinking. You would expect that in most cases,
+having a "gut feeling" about something would be great. But in practice, such
+impulsive decision making often gets us into trouble. Our slow thinking --
+our ability to reason -- ought to be a our base, slow training thinking. This
+sort of thinking prepares us for moments where we need our fast thinking, or
+our reactionary thought.
+
+This has sweeping implications for all sorts of personal interactions. I'm
+quite interested in how this plays into Nate Walker's ideas of "moral
+imagination" and radical empathy. You see, most of us are actually not every
+good at empathyzing. Sympathy comes naturally to a great many people. We can
+imagine the pain, or anger someone is feeling when we are in the presence of
+it. But empathy asks us not just to feel someone's emotional state, but to
+understand them.
+
+The problem, as I see it, is that, like with running, there are trompe
+l'oeils all around us. Places where we think we understand why someone is
+acting the way they are.
+
+"She's just pissed because I forgot to call last night."
+
+"He's still frustrated because he didn't have time to get coffee this morning"
+
+On the face of it, those very well might be true. Or they might not. When do
+we know we're running hard up hill? In most places in life, this is
+completely unimportant to quickly address someone's emotional state. Far more
+important is to be patient, and understanding without necessarily assuming
+that we /can know right now/ what's bothering someone, or why they're doing
+what they're doing.
+
+"She struggles with abandonment issues since her father left when she was 8,
+and while you didn't call, what upset her most was feeling alone."
+
+"He was up really late last night stressing about work that was supposed to
+be done. Not getting cofffee made things worse, but were hardly what cause
+his foul mood."
+
+In both of these cases, there are underlying mental states. It requires
+imagination and trust in our fellow humans to truly empathize in these
+circumstances. While the road appeared to go down hill, and we were all into
+bombing down it, the reality is that we burned ourselves out on a training
+run that tricked us into going up hill. We would have been better served to
+hold our judgment for a little longer, and asked more questions, and listened
+more closely. Rarely do we need to exercise empathy quickly, and applying
+Walker's "moral imagination" can get us a lot closer to understanding a lot
+more people, and making all our lives a lot easier.
+
+** PUBLISHED Equity :uu:christianity:
+CLOSED: [2017-09-19 Fri 15:16]
+:PROPERTIES:
+:EXPORT_FILE_NAME: equity
+:END:
+
+The gospel of Matthew suggests that Christ's heaven is an equal opportunity
+saver. That is, it is not a place where those who worked the hardest receive the
+best, or those who took and never gave suffer. The parable of the vineyard
+laborers more or less spells out a universal salvation message for those who
+would be willing to work, not for how much they work. And, as a parable, that
+means that those who come to find love and compassion late in life are no less
+entitled to salvation than anyone else.
+
+In Unitarian Universalism, this reflects very accurately what we mean in our
+second principle. We affirm justice, equity and compassion in human relations.
+Note, carefully, that we do not include equality in what we affirm. Equality is
+a difficult concept for humans to hold in their minds, because it suggests that
+everyone needs the same thing. Instead, let us focus our energy on providing
+justice and equity. Because the abused child may need more love and patient
+understanding than the child raised in a loving home. The diversity and color of
+conditions that humans live in exclude the possibility of anything ever being
+equal when it comes to love.
+
+Instead let us strive for equity and considered justice, ensuring that needs are
+being met and that we are working towards making everyone whole. Indeed,
+laborers who did not have the advantage of being there at the start of the day
+deserve their full payment all the same.
+
+** PUBLISHED Imagining yourself doing :running:habits:bestself:
+CLOSED: [2019-11-26 Tue 11:06]
+:PROPERTIES:
+:EXPORT_FILE_NAME: imagining-yourself-doing
+:END:
+
+When people say "I can't do that" most of the time, they're actually saying "I
+can't see myself doing that." When I started running, a lot of people said they
+didn't know how I could run so far, or that they could never do that.
+
+When I started, I didn't imagine I'd run marathons. I just started with 1 or 2
+mile runs. Those 2-mile runs were hard, and sometimes they still are.
+
+Yet being out on the road gets you up on that hill where you have a better view of
+your future self. One day I saw myself going farther, and then I went farther.
+
+What do you see yourself doing? What steps can you take to get a better vantage
+point of where you could be? Little steps is all it takes.
+
+** PUBLISHED Distraction free :notifications:intention:
+CLOSED: [2019-11-27 Wed 09:48]
+:PROPERTIES:
+:EXPORT_FILE_NAME: distraction-free
+:END:
+
+I try to keep notifications in my life to a bare minimum. I get tips from
+friends or co-workers about making sure notifications on my phone are disabled
+while I sleep. I disable them all the time. The one thing I allow are text
+messages to vibrate my Garmin watch, and I'm on the fence as to whether this is
+truly necessary.
+
+There are people who's professions wont allow this. I get that. But I also know
+that most people build narratives about getting a late night text about the
+health of a loved one to justify always getting pinged when Facebook needs your
+attention, or a new email comes in.  These are largely untrue, or at least
+building a process into your life for events that may never happen.
+
+Instead I've made distractions I encounter my own fault. I can't blame Facebook
+for pinging me in the middle of focused work. I took control of what I could and
+my responsibility now is to check for messages when I need to. I check slack
+quite often, after each chunk of work, emails a few times a day, and social
+media rarely.
+
+Have you ever thought about the value of all the different notifications in your
+life? If it not, it may be worthwile to audit all the things that vie for your
+time. It is your time after all, and with ownership comes responsibility.
+
+** PUBLISHED In Pursuit of Flow
+CLOSED: [2019-12-02 Mon 14:02]
+:PROPERTIES:
+:EXPORT_FILE_NAME: in-pursuit-of-flow
+:END:
+
+I don't make a habit of watch the Olympics. But I remember a moment back in 2018
+when I happened to turn on coverage just as they were televising a gold-winning
+snowboard cross run by Red Gerard[fn:1]. He blew out all the other riders in his group
+to take the gold. Silver was significantly behind him. What stood out to me
+watching him ride, however, was how keyed in he was to the whole thing.
+
+I don't know how much snowboarders are allowed to practice the cross course
+before the event, but given that he was on the hill with 9 other riders who
+didn't look nearly as keyed in meant there was likely more to what was going on
+than simple familiarity with a series of cuts, jumps and bombs.
+
+What Gerard was, of course, was in flow. I am not sure if you've ever
+experienced flow, but beyond snowboarder cross, the state of mind is also
+illustrated in Zhuang Zhou's philosophical writing from 4th century BCE China.
+In his seminal work, Zhuang discusses a butcher who, having so mastered his
+craft, he is not cutting into an animal, but rather his motion guides the blade
+of the knife through the various cuts he needs to make to perfectly separate the
+carcass.
+
+Life, it seems to me, is the pursuit of flow. In flow, everything goes from one
+to the next without deliberate thought of how to achieve a specific end. There
+is no value judgment on the task achieved. Flow is not about good or bad, it is
+about the accomplishment of a given task. There is different work to be done to
+assess value, but once value has been assessed and it's time to work, we all
+seek flow, that place where don't need to know we're our best selves, but where
+we simply are our best selves and are doing what we set out to do with as little
+thought as possible.
+
+[fn:1] https://www.youtube.com/watch?v=m0nJr_cpYWU
+
+** PUBLISHED Creation and Learning :learning:create:mindset:
+CLOSED: [2019-12-18 Wed 11:00]
+:PROPERTIES:
+:EXPORT_FILE_NAME: creation-and-learning
+:END:
+
+I recently embarked on a plan to learn to draw. I've done this a few times, in a
+few different ways. This time feels different. The lessons I've begun start with
+some very basic ideas, no home run or get rich quick schemes here.  Rather, I
+have a daily exercise of drawing basic shapes, holding the pencil, and just
+getting experience trying to see what I want on the paper before I touch the
+pencil down.
+
+This has been a revelation to me, not least of which because I like these sorts
+of small habit methods for kickstarting new skills. But the other part that has
+been interesting is seeing how things change when I start creating things. I
+often consider learning something new to come with consumption. I read a book,
+watch a video or get instruction from someone else. In this new pattern,
+learning comes from experimentation, comes from creation.
+
+There's something to this, and I think it's related to other discussions about
+closed versus open mindsets. A consumption mindset intrinsically comes from a
+belief that what will help you be your best self comes from outside of you.
+But experimentation and creation comes from a belief that the help you need is
+already inside of you, you just need room to play with an idea.
+
+This creation can come from writing, drawing, painting, software development,
+sculpture, music composition, active conversations with others, and a myriad
+other places. But the important part is that you give yourself room to
+experiment with what's in your own head. So often we fall into the trap of
+looking for something outside us to kick us into a new mindset, but often
+nurturing the creative spirit can have a much greater effect.
+
+One last observation, most of the disciplines I rattled off above fall into the
+realm of art at some level. There's truth there too. The thing that sets us free
+as humans and helps us to be our best self is often the exploration of the edges
+where mundane day-to-day life interacts with what we humans call art.
+
+Create more art. Explore your mind. Explore your world. Watch your creativity
+and ability to learn blossom. Then, perhaps most importantly, spend some time
+helping someone else discover the magic of creation.
+
+** DRAFT Mindset and gratitude :gratitude:mindset:
+
+Most of the time, when you're having a down day and someone tries to remind you
+to be grateful it takes effort not to punch them in the face, or at the very
+least to glare reproachfully. Which is unfortunate, because it's in those
+moments that we most need the perspective that comes with gratitude.
+
+** DRAFT Planting seeds :ideas:plant:consquences:
+
+Warren Buffet once said, "if we can't tolerate a possible consequence, remote
+though it may be, we steer clear of planting its seeds." What consequences might
+he have been thinking about? Given his position as a savvy investor, it's
+tempting to think he was talking about financial returns and, effectively
+gambling. Stated another way, don't gamble with anything you can't afford to
+lose.
+
+But he used a planting metaphor. Last time I checked few people consider
+gambling a form of seed planting. There's an inherent risk to gambling that I
+don't think Buffet was after. No, I don't think that's what he had in mind.
+
+Buffet is warning about the long-term. Seeds are inherently strategic. When you
+choose to plant half an acre of corn and 400 yards of tomatoes, you're
+committing that much land to those crops for the bulk of the year. In most of
+North America that's a huge time and space commitment. Nothing else will be able
+to grow there until the harvest comes in.
+
+So what about Buffet's metaphor now?
+
+** DRAFT [#B] Blog post on how to dream big and then aggressively de-scope :onec:
+
+When you're starting a new project you should harness your enthusiasm to talk
+through (or write down) all the awesome things you could do with the new feature
+or tool.
+
+Once you've laid out the big dream, you have to "de-scope" the project to break
+it into pieces that can actually be completed. You could call this the MVP
+process, and I suppose it is, but I've not heard it explained in quite this way
+before.
+
+*** Dream big, out loud
+
+Start the project either with your team, or by yourself, of writing down and
+turning over in your head all the awesome things you could do with this new
+functionality. Map it all out, and get a good sense of how it will solve the
+customer's need, whether you're a startup and have early adopters, or this is to
+scratch your own itch.
+
+Work hard to find the limits of the value of the various features. The value
+proposition will be worth it's weight in gold in the next step
+
+*** Break it down
+*** Common traps
+
+The idea here would be to avoid trying to break the big dream into resource
+pieces. It's tempting to think in a sort of Kanban manner of saying, well if
+backend can deliver this piece first, then frontend can come in and add
+our killer UI in the next step. In order to deliver value early and often, you
+have to de-scope without breaking the project into non-functional pieces, or at
+least, limited-functionality pieces.
+
+** DRAFT In Our Own Head
+:PROPERTIES:
+:EXPORT_FILE_NAME: in-our-own-head
+:END:
+
+Des Linden, finishing the Boston Marathon this year in a horizontal rain when it
+was eight degrees above freezing was more than just finishing a race. In fact,
+everyone who finished the race this year deserves major credit for pushing
+themselves. And yet, Linden did it while running faster than everyone else. I
+remember watching her take the lead around the 20th mile. She made her move and
+the previous first place racer didn't even try to keep up. Linden appeared to
+have hit a gear no one else had on that chilly, Boston morning.
+
+Thinking about her run after the fact, I am humbled by the fact that no one
+knows what stories of adversity and struggle lead people success. Occasionally
+someone is famous enough to have a story told in public, but more often than
+not, struggles are private, even kept to oneself. While it was possible to watch
+Linden struggle with horizontal rain, who knows what physical barriers others
+are pushing through every day.
+
+** DRAFT The Dark Hypothesis :consequences:
+:PROPERTIES:
+:EXPORT_FILE_NAME: dark-hypothesis
+:END:
+
+The lack of other life forms in our observable universe prompts us to ask a lot
+of questions. Carl Sagan was optimistic that the lack of evidence in such an
+expanse was not cause for alarm that we are alone. And yet, the absence of
+current life anywhere remotely close to us, despite increasing archaeological
+evidence of ancient life on Mars begins to paint a picture that life does, find
+a way, but may be rare, indeed.
+
+So here's my dark hypothesis. COVID19 was inevitable. So was COVID20, 21 and all
+future pandemics.
+
+* Emacs :@emacs:
+** PUBLISHED Reading Lists :spacemacs:tools:
+CLOSED: [2018-08-20 Mon 22:06]
+:PROPERTIES:
+:EXPORT_FILE_NAME: reading-lists
+:END:
+
+Oh Goodreads. Your website is a cluttered mess. Your UX hasn't been improved in years. The only value I derive from keeping my reading list on you is that my friends can see what I'm reading. Which is a neat trick, but since I've mostly given up on Facebook too, it not really enough to keep me.
+
+I was an early adopter of Goodreads, but my life has taken a turn towards the personal and the text-based. I use Emacs (via [spacemacs](spacemacs.org)) as much as I can. Org-mode might be the single most impressive IDEA rendered into software I've ever seen. It simply makes the things I use on a regular basis more powerful and expressive, which is not something I can say for Word, Twitter, or Chrome.  Those are merely tools. They don't amplify my ability to document and create.
+
+Really the post /[Leaving Goodreads](https://lepisma.github.io/2017/06/29/leaving-goodreads/index.html)/ is what convinced me to go, one more time, back to my reading list in org mode. But the killer feature this time around was [ox-hugo](https://ox-hugo.scripter.co/), which allows me to easily dump Org-mode subtrees into a hugo-powered blog directory. A simple ~rsync~ later and I can publish random subtrees, including book reviews!
+
+The whole thing is so elegant, I couldn't have dreamed up the process if I had tried. The whole thing was truly an evolution of tools, and one that was only possible because each tool, Emacs, spacemacs, org-mode, hugo, ox-hugo, does it's job so elegantly.
+
+** PUBLISHED Spacemacs :spacemacs:tools:
+:PROPERTIES:
+:EXPORT_DATE: 2017-09-19
+:EXPORT_FILE_NAME: spacemacs
+:END:
+
+Emacs is very powerful. Amazingly so. But it's so arcane, the keystrokes could
+take you years to master. So what's a developer to do?
+
+Enter spacemacs. I honestly don't know where this idea came from, and my brain
+is structured in such a way that I could have ever pulled it off myself. But an
+emacs configured like Vim (thank you evil mode) with discoverable keystrokes ...
+I am always flabergasted.
+
+Tonight I discovered how to open the kill ring. While it sounds aggressive, it's
+really just Emacs version of a clipboard. Anything you cut or copy ends up on
+the kill ring. For so long I treated it like the opaque clipboard on so many
+operating systems. The last thing I cut is the only thing I have access to. And
+God help me if I cut something else, because I'll lose the last thing to
+oblivion.
+
+But not anymore, baby. With an interactive kill ring (SPC-r-y for those of you
+following along at home) you get a searchable compendium of everything you've
+cut or copied in the current session. Absolutely brilliant.
+
+** PUBLISHED Another Engine :hugo:tools:
+CLOSED: [2018-08-18 Sat 01:01]
+:PROPERTIES:
+:EXPORT_FILE_NAME: another-engine
+:END:
+
+Once, I used Jekyll. Then I switched to Pelican. I'm finally here on Hugo, and
+hoping that this will make it easier to keep things updated. The eternal
+question when chosing a method to publish a blog is, why publish a blog. I don't
+really have an answer for that yet. I wish I did. Honestly, I do. You don't have
+to believe me, because I believe in myself, and if this is all one big
+simulation, you don't matter anyway.
+
+Incidentally, perhaps the best part of this transition is the
+[ox-hugo](https://ox-hugo.scripter.co/) plugin, which makes writing new posts
+and publishing them a dream. Now, instead of some complicated cocktail of adding
+a new file with the write filename and proper metadata, I can just org-mode
+capture the thing. The more I use emacs (and specifically
+[spacemacs](http://spacemacs.org)), the more in love I am.
+
+** PUBLISHED Doomed Emacs :tools:doom_emacs:
+CLOSED: [2018-10-31 Wed 09:27]
+:PROPERTIES:
+:EXPORT_FILE_NAME: doomed-emacs
+:END:
+
+After a year or so of dedicating myself to getting Spacemacs setup just right, I
+made a pretty substanial jump a few weeks ago. I'm now running [[https://github.com/hlissner/doom-emacs][doom-emacs]] which
+provides fewer nice surprises (missing evil-surround shortcuts by default) than
+spacemacs, but loads much ... much faster. The other day I found myself coding
+while sharing my screen on Zoom and is was painfully obvious what price I was
+paying for spacemacs not cleaning up after itself and generally lazy loading
+things leading to less than fast context switching.
+
+I was willing to struggle through some the slower operations for my own sake,
+but getting caught with other people watching as my editor on a brand new
+computer struggled to do basic things like searching for symbols in the codebase
+was embarrassing.
+
+I'm not done with Spacemacs. I still love the idea, and I also believe that half
+the problem was likely the way I was using it and configuring it. But part of
+the appeal of spacemacs are the defaults. And it was the defaults that was
+making it hard to use it on a daily basis.
+
+Another nice aspect of Doom Emacs is that aside from a handful of evil-mode
+shortcuts, a lot of what you're encouraged to use are stock emacs keystrokes.
+That means that I'm not learning some cryptic layer on org mode when I use
+emacs, I using the default keystrokes that I will find in vanilla emacs. That's
+very useful and will hopefully make me a more respectable member of the emacs
+community, rather than a vim outcast.
+
+** PUBLISHED Continuous tool improvement :tools:
+CLOSED: [2018-08-25]
+:PROPERTIES:
+:EXPORT_FILE_NAME: continuous-tool-improvement
+:END:
+
+I was reviewing the feeds I subscribe to in [[https://github.com/skeeto/elfeed][elfeed]] this evening when it occurred
+to me that a lot of my feeds have to do with Emacs. I will often blow through
+updates on feeds, making sure to only pickup things that are truly useful. But I
+discovered an amazingly high signal to noise ratio regarding tips for using
+Emacs more effectively. This got me thinking about how I couldn't possible
+remember all this stuff, so I tossed some of the things I was learning in my
+learnings.org file to review later. At that point, it dawned on my how important
+tool choice is, and how important it is to learn how to use your tools
+effectively and be receptive to learning new things about them.
+
+This could apply equally to any well made tool for any discipline (woodworking,
+drawing, research), but for me that means Emacs. Not everyone is going to ever
+need to touch Emacs. For me, I can't imagine not having it, and everytime I
+learn something new, I get a little more effective with it.
+
+For reference, tonight [[http://xenodium.com/#actionable-urls-in-emacs-buffers][I learned how to make all URLs, regardless of buffer,
+clickable]] [[https://scripter.co/splitting-an-org-block-into-two/][I also learned how to break an org-mode block in two with a single
+keystroke to insert a comment]].
+
+** PUBLISHED Email in Emacs :tools:notmuch:email:
+CLOSED: [2018-11-28 Wed 11:00]
+:PROPERTIES:
+:EXPORT_FILE_NAME: email-in-emacs
+:END:
+
+I really did try mu4e. Really. But the setup required a custom emacs build on
+macos, and I am unfortunately constrained to Macs for work at the moment, so it
+was kind of a non-starter to jump through so many hoops to get it working. And
+of course, I also highly value resilience, and nothing says unresilient than not
+being able to successfully build a crucial feature like mail handling into your
+editor of choice.
+
+So that occassioned a turn towards notmuch. Oh my, how delightful. At it's
+simplest, notmuch is just a xapian-powered tag database for your email. Imagine
+that, no crazy indexers or long-polling to check for new email. Notmuch just
+tags and allows you to search your email.
+
+Combined with isync's mbsync and msmtp, I now have a really functional /and/
+resilient email seutp in Emacs. Even more delightful is looking through my tag
+database and realizing that if I tag things effectively, finding all those board
+agenda emails for church are just a tag search away.
+
+Of course, such things were always available in Gmail or a mail client. But I
+was always unimpressed with how slow Thunderbird or Mail.app got with lots of
+messages. And Google is reading all my messages, so that sucks too.
+
+Combine the ease of syncing and tagging messages, and the fact that they exist
+in a directory on my computer, synced via Dropbox to all my other computers and
+my email suddenly mine again, not living on an IMAP server that I hope doesn't
+fail me.
+
+** PUBLISHED Why Emacs? :onec:emacs:
+CLOSED: [2020-01-21 Tue 11:45]
+:PROPERTIES:
+:EXPORT_FILE_NAME: emacs-everywhere
+:END:
+
+There's an argument to be made for ease of use in software. The epiphany with
+Apple software in the early part of the 21st century was that most users had
+tasks they wanted done. They did not want to use a computer to do them, per se.
+But if a computer could do them, that was okay.
+
+The problem with this perspective is that it assumes a certain amount of
+laziness—or perhaps lack of discrimination‒on the part of the user. There are
+some excellent times to be lazy, but choice of tools is not one of them. Ask any
+accomplished carpenter if the Home Depot plane and the Lee Nielson plane is the
+same tool. They are not. But let us explore this analogy a bit more. It's
+actually damned appropriate.
+
+If a computer and the software running on it are tools, then, like a carpenter,
+an experienced computer user should be discriminating in their tools. This
+perspective took me a long time to arrive at. I enjoy learning about my tools.
+And yet, I have watched a number of highly productive software developers not
+give a second thought to their tools. Perhaps it's more fair to say they do not
+give a thought to how their tools work.
+
+This lack of curiosity in the things that enable their work means they will
+always suffer when their tool breaks. At some fundamental level they do not know
+how they are doing what they're doing. Any furniture maker knows at a basic
+level how a table planer works. Do you understand your linter works? How about
+the request and response cycle in your browser? The algorithm that kicks out
+the most appropriate answer on StackOverflow? I hope you've answered /yes/ to at
+least one of those. But what about how a compiler works? A JIT scripting
+language compiler? These are all the tools of our trade.
+
+In the case of software there's an even worse fate. What happens when your tool
+doesn't even allow you to be curious about it? Closed source software, or even
+just limited access to the source means you are working with a black box. You
+couldn't learn how it worked even if you wanted to. I can think of a worse fate
+for someone who does something professionally.
+
+All this is a round about way to explain why I am drawn to Emacs and tools like
+it. Popular open source tools that have survived, at this point /literally/, for
+generations of builders. There will always be a new and shiny thing. But I have
+made an intentional effort to lean into the open source tools that have served
+the curious among us for a long time now.
+
+I encourage you to find some part of the software stack that allows you to do
+work and lean into it. Learn why it exists, how it is built, the people who
+built it, and maybe even how you can help build it in the future.
+
+** PUBLISHED Email in Emacs Redux :tools:email:notmuch:
+CLOSED: [2019-12-04 Wed 11:33]
+:PROPERTIES:
+:EXPORT_FILE_NAME: email-in-emacs-redux
+:END:
+
+I have moved to reading and responding to all my email in Emacs. I honestly
+didn't think I would ever be able to make this jump because of silly things like
+signatures, HTML email and my address book. But the reality of how I actually
+use email on a day to day basis is a big part of why this was possible.
+
+As it happens, most of my email work is replying to other people. As an engineer
+on a product team I start very few email threads, and even fewer with people
+outside the organization. Thus, the lack of the company standard HTML signature
+in my outgoing emails is rarely a problem. On the once or twice a month
+occurrence of needing to send an external-facing email, I can pop open Gmail in
+a browser and take care of it.
+
+But for quickly replying to folks, parsing tasks into my daypage (more on this
+later) and saving content to read later, Notmuch has been a dream.
+
+So the cat's out of the bag. As in my last post about email in Emacs, I use
+Notmuch along with mbsync for getting email and msmtp to send email. I also host
+my own email server on a Digital Ocean VPS running mailinabox [fn:1]. This makes
+the configuration with mbsync and msmtp pretty painless.
+
+The other important discovery I made is muchsync [fn:2]. This allows me to run
+the mbsync task for looking for new email on a server in the house that's always
+on. Then each other device I want to read and respond to email just runs a
+`muchsync` task that hits up that server and syncs the state of the notmuch tag
+database.
+
+The result is delightful. I can clear out my inbox on one machine and find it
+all cleared up on all the others. Combine that with the ability to quickly
+respond to email within Emacs, copy links to specific messages and capture them
+to Org Mode, and archive things I don't care about, the whole thing is really effective.
+
+One aspect of this is that I have my email setup to default to showing the
+plaintext version, with a tab-able HTML view powered by eww. This works
+surprisingly well. As usual, my configuration is in my dotfiles, specifically
+my `+mail.el` [fn:3] configuration in Doom Emacs.
+
+Check it out and I hope you can get a handle on your email.
+
+[fn:1] https://mailinabox.email
+[fn:2] http://www.muchsync.org
+[fn:3] https://git.unbl.ink/secstate/dotfiles/src/branch/master/emacs/.config/doom/+mail.el
+
+** DRAFT Getting things done with Emacs :onec:emacs:
+:PROPERTIES:
+:EXPORT_FILE_NAME: getting-things-done-emacs
+:END:
+
+I've gone back and forth a few times with trying to use Org Mode to manage my :w
+
+** DRAFT [#A] Blog post on leaving LSP behind in favor of eglot :onec:
+
+Upshot here is that LSP is pretty cumbersome with different packages for
+different languages and having the kitchen sink enabled by default. Eglot has a
+very simple interface and is pretty easy to reason about. I value being able to
+reason about things, as it's generally a good litmus test for design quailty and
+also means that while I don't comprehend everything about how LSP interaction
+with Emacs is implemented, I could if I wanted to.

+ 201 - 0
themes/flex/LICENSE

@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2019 Léo De Souza
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.

+ 148 - 0
themes/flex/README.md

@@ -0,0 +1,148 @@
+# Hugo Flex
+
+A lightweight Hugo theme leveraging CSS Flexbox
+
+
+## Features
+
+- Flexbox-based responsive layout
+- Full posts in RSS feed
+- Themed RSS feed
+- No framework
+- No javascript
+- 100% speed score on PageSpeed Insight
+
+Optional features:
+
+- Show summaries on homepage
+- Schema.org, Open Graph and Twitter Cards metadata
+- Utterances comments widget
+- CSS and JS can be [dynamically embedded](#dynamically-embedded-css-and-js) with shortcodes
+- Built-in shortcodes:
+  - Netlify contact form
+  - On-click Soundcloud player
+
+
+## Installation
+
+From the website root:
+
+```bash
+git submodule add https://github.com/de-souza/hugo-flex.git themes/hugo-flex
+```
+
+The theme must be set in the website config:
+
+```bash
+echo 'theme: hugo-flex' >> config.yaml
+```
+
+
+## Updating
+
+From the website root:
+
+```bash
+git submodule update --remote --rebase
+```
+
+
+## Example Site
+
+The official [hugoBasicExample](https://github.com/gohugoio/hugoBasicExample) repository may be used as an example site. For a complete starter template for using this theme with in-depth explanations, see [hugo-flex-example](https://github.com/scivision/hugo-flex-example).
+
+
+## Configuration
+
+Configuration options may be copied and modified from the theme defaults:
+
+```yaml
+params:
+  color: teal           # Any color in CSS syntax
+  width: 42rem          # Any length in CSS syntax
+  footer: Except where otherwise noted, content on this site is licensed under a
+    a <a href="http://creativecommons.org/licenses/by/4.0/" rel="license">
+    Creative Commons Attribution 4.0 International License</a>.
+  rss: To subscribe to this RSS feed, copy its address and paste it into your
+    favorite feed reader.
+  summaries: false      # Set to true to show summaries of posts on homepage
+  divider: '\2015\2015' # Set to false to remove divider below posts on homepage
+  schema: false         # Set to true to add Schema.org metadata
+  opengraph: false      # Set to true to add Open Graph metadata
+  twittercards: false   # Set to true to add Twitter Cards metadata
+  utterances:
+    repo:               # Set to Utterances repo URL to add Utterances comments
+    issueterm: pathname
+    theme: github-light
+  netlify:
+    honeypot: false     # Set to true to add honeypot field in contact form
+    recaptcha: false    # Set to true to add recaptcha challenge in contact form
+
+menu:
+  nav:
+  - name: About
+    url: about/
+    weight: 1
+  - name: Posts
+    url: post/
+    weight: 2
+  - name: Tags
+    url: tags/
+    weight: 3
+  - name: Categories
+    url: categories/
+    weight: 4
+  - name: RSS
+    url: index.xml
+    weight: 5
+```
+
+
+## Built-In Shortcodes
+
+### Netlify Contact Form
+
+A contact form working with the built-in Netlify form handling service is inserted with the shortcode:
+
+```
+{{< contact >}}
+```
+
+A custom success page URL may be given as a parameter:
+
+```
+{{< contact "/success" >}}
+```
+
+### On-Click Soundcloud Player
+
+An on-click Soundcloud Player is inserted with the shortcode:
+
+```
+{{< soundcloud 123456789 >}}
+```
+
+The parameter is a track ID and can be extracted from the "embed" sharing menu on the track webpage.
+
+
+## Dynamically embedded CSS and JS
+
+To embed additional CSS and JS in custom shortcodes, they must be loaded as resources by Hugo and added to the `.Scratch` variable. As a result, they will be loaded in pages where the shortcodes are used.
+
+For instance, from within a shortcode template:
+
+```html
+{{ resources.Get "myscript.js" | fingerprint | .Page.Scratch.SetInMap "js" "myscript" }}
+```
+
+As an example here is the shortcode template for the on-click Soundcloud player:
+
+```html
+{{ resources.Get "css/soundcloud.css" | minify | fingerprint | .Page.Scratch.SetInMap "css" "soundcloud" }}
+{{ resources.Get "js/soundcloud.js" | minify | fingerprint  | .Page.Scratch.SetInMap "js" "soundcloud" }}
+<div class="Soundcloud" data-id="{{ .Get 0 }}"></div>
+```
+
+## License
+
+This theme is licensed under the [Apache License 2.0](https://github.com/de-souza/hugo-flex/blob/master/LICENSE).

+ 135 - 0
themes/flex/assets/css/base.temp.css

@@ -0,0 +1,135 @@
+body {
+  display: flex;
+  flex-direction: column;
+  min-height: 100vh;
+  margin: 0;
+  padding: 0;
+  font-family: Georgia, serif;
+  font-size: 1.2em;
+  margin-top: 1.7em;
+}
+
+main {
+  flex-grow: 1;
+}
+
+img {
+  max-width: 100%;
+  border-radius: 0.2rem;
+}
+
+pre {
+  overflow-x: auto;
+  border: 0.1rem solid lightgray;
+  padding: 1rem;
+}
+
+code {
+  font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace;
+}
+
+.Banner {
+  list-style: none;
+  display: flex;
+  flex-flow: row-reverse wrap-reverse;
+  justify-content: space-between;
+  margin: 0;
+  padding: 0;
+}
+
+{{ $len := len site.Menus.nav }}
+{{ range seq $len }}
+
+.Banner-item:nth-child({{ . }}) {
+  order: {{ sub $len . | add 1 }};
+}
+
+{{ end }}
+
+.Banner-item--title {
+  flex-grow: 1;
+}
+
+.Banner-link {
+  font-size: 1.25rem;
+  color: black;
+  padding: 0.5rem 1rem;
+  text-decoration: none;
+}
+
+.Heading {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+  align-items: baseline;
+}
+
+.Heading-title {
+  margin: 1.5rem 0.5rem 0 0;
+}
+
+.Heading-link {
+  color: inherit;
+}
+
+.Tags {
+  list-style: none;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: center;
+  margin: 1.5rem 0;
+  padding: 0;
+}
+
+.Tags-item {
+  border-radius: 0.2rem;
+  margin: 0.2rem;
+  padding: 0 0.3rem;
+}
+
+.Tags-link {
+}
+
+{{ with site.Params.divider }}
+
+.Divider {
+  display: flex;
+  justify-content: center;
+}
+
+.Divider::after {
+  content: "{{ . }}";
+}
+
+{{ end }}
+
+.Pagination {
+  font-size: 1.25rem;
+  color: inherit;
+}
+
+.Pagination--right {
+  float: right;
+}
+
+.Footer {
+  text-align: center;
+  margin: 1rem 0;
+}
+
+.u-wrapper {
+  {{ with site.Params.width }}max-width: {{ . }};{{ end }}
+  margin: auto;
+}
+
+.u-padding {
+  padding: 0 1rem;
+}
+
+.u-background {
+}
+
+.u-clickable {
+  font-weight: bold;
+  display: inline-block;
+}

+ 39 - 0
themes/flex/assets/css/contact.css

@@ -0,0 +1,39 @@
+.Contact {
+  max-width: 30rem;
+  margin: 1.5rem auto;
+}
+
+  .Contact-group {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+  }
+
+  .Contact-hidden {
+    display: none;
+  }
+
+  .Contact-item {
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: space-between;
+    margin: 0.5rem 0;
+  }
+
+  .Contact-label {
+    flex-basis: 5rem;
+  }
+
+  .Contact-input {
+    flex-grow: 1;
+    flex-basis: 15rem;
+  }
+
+  .Contact-input--textbox {
+    resize: vertical;
+    height: 5rem;
+  }
+
+  .Contact-button {
+    margin-left: auto;
+  }

+ 26 - 0
themes/flex/assets/css/soundcloud.css

@@ -0,0 +1,26 @@
+.Soundcloud {
+  height: 166px;
+}
+
+.Soundcloud:empty {
+  display: none;
+}
+
+.Soundcloud-iframe {
+  height: 100%;
+  width: 100%;
+  border: 0;
+}
+
+.Soundcloud-player {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  width: 100%;
+  height: 100%;
+  border: 0.1rem solid lightgray;
+  border-radius: 0.3rem;
+  background: whitesmoke;
+  cursor: pointer;
+}

+ 18 - 0
themes/flex/assets/js/soundcloud.js

@@ -0,0 +1,18 @@
+for (const wrapper of document.querySelectorAll(".Soundcloud")) {
+  const iframe = document.createElement("iframe");
+  iframe.className = "Soundcloud-iframe";
+  iframe.setAttribute("src", `https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/${wrapper.getAttribute('data-id')}&show_comments=false`);
+  const link = document.createElement("a");
+  link.setAttribute("href", "https://soundcloud.com/pages/cookies");
+  link.textContent = "cookie policy";
+  link.onclick = e => e.stopPropagation();
+  link.onkeydown = e => e.stopPropagation();
+  const player = document.createElement("div");
+  player.className = "Soundcloud-player";
+  player.setAttribute("tabindex", "0");
+  player.textContent = 'Load player';
+  player.appendChild(link);
+  player.onclick = () => { wrapper.replaceChild(iframe, player) };
+  player.onkeydown = e => { if (e.keyCode == 13) wrapper.replaceChild(iframe, player) };
+  wrapper.appendChild(player);
+};

+ 34 - 0
themes/flex/assets/xml/base.temp.xml

@@ -0,0 +1,34 @@
+{{ `<?xml version="1.0" encoding="utf-8" ?>` | safeHTML }}
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+  <xsl:output method="html" doctype-system="about:legacy-compat" />
+  <xsl:template match="/rss/channel">
+    <html lang="{{ site.LanguageCode }}">
+      <head>
+        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+        {{ hugo.Generator }}
+        <title><xsl:value-of select="title" /></title>
+        {{ with .Scratch.Get "css" }}
+        <link rel="stylesheet" href="{{ .base.Permalink }}" integrity="{{ .base.Data.Integrity }}" />
+        {{ end }}
+      </head>
+      <body>
+        {{ partial "banner.html" . }}
+        <main>
+          <div class="u-wrapper">
+            <div class="u-padding">
+              <h2 class="Heading-title">
+                <a class="Heading-link u-clickable" href="{link}" rel="bookmark"><xsl:value-of select="title" /></a>
+              </h2>
+              {{ with site.Params.rss }}
+              <p>
+                {{ . | safeHTML }}
+              </p>
+              {{ end }}
+            </div>
+          </div>
+        </main>
+        {{ partial "footer.html" . }}
+      </body>
+    </html>
+  </xsl:template>
+</xsl:stylesheet>

+ 38 - 0
themes/flex/config.yaml

@@ -0,0 +1,38 @@
+params:
+  color: teal           # Any color in CSS syntax
+  width: 42rem          # Any length in CSS syntax
+  footer: Except where otherwise noted, content on this site is licensed under a
+    a <a href="http://creativecommons.org/licenses/by/4.0/" rel="license">
+    Creative Commons Attribution 4.0 International License</a>.
+  rss: To subscribe to this RSS feed, copy its address and paste it into your
+    favorite feed reader.
+  summaries: false      # Set to true to show summaries of posts on homepage
+  divider: '\2015\2015' # Set to false to remove divider below posts on homepage
+  schema: false         # Set to true to add Schema.org metadata
+  opengraph: false      # Set to true to add Open Graph metadata
+  twittercards: false   # Set to true to add Twitter Cards metadata
+  utterances:
+    repo:               # Set to Utterances repo URL to add Utterances comments
+    issueterm: pathname
+    theme: github-light
+  netlify:
+    honeypot: false     # Set to true to add honeypot field in contact form
+    recaptcha: false    # Set to true to add recaptcha challenge in contact form
+
+menu:
+  nav:
+  - name: About
+    url: about/
+    weight: 1
+  - name: Posts
+    url: post/
+    weight: 2
+  - name: Tags
+    url: tags/
+    weight: 3
+  - name: Categories
+    url: categories/
+    weight: 4
+  - name: RSS
+    url: index.xml
+    weight: 5

二进制
themes/flex/images/screenshot.png


二进制
themes/flex/images/tn.png


+ 47 - 0
themes/flex/layouts/_default/baseof.html

@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="{{ site.LanguageCode }}">
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  {{ hugo.Generator }}
+  {{ if site.Params.schema }}{{ template "_internal/schema.html" . }}{{ end }}
+  {{ if site.Params.opengraph }}{{ template "_internal/opengraph.html" . }}{{ end }}
+  {{ if site.Params.twittercards }}{{ template "_internal/twitter_cards.html" . }}{{ end }}
+  <title>
+    {{ if eq .Title site.Title }}
+    {{ site.Title }}
+    {{ else }}
+    {{ with .Title }}{{ . }} | {{ end }}{{ site.Title }}
+    {{ end }}
+  </title>
+  <link rel="canonical" href="{{ .Permalink }}">
+  {{ range .AlternativeOutputFormats }}
+  {{ printf "<link rel=%q type=%q href=%q title=%q>" .Rel .MediaType .Permalink site.Title | safeHTML }}
+  {{ end }}
+  {{ resources.Get "css/base.temp.css" | resources.ExecuteAsTemplate "css/base.css" . | minify | fingerprint | .Page.Scratch.SetInMap "css" "base" }}
+  {{/*
+    In this block Hugo is forced to load the page's content, effectively
+    pre-rendering all its shortcodes. Thanks to this pre-render,
+    shortcodes can load additional CSS and JS resources by adding them
+    to the "css" and "js" entries of the global .Scratch variable.
+  */}}
+  {{ block "loadshortcodes" . }}{{ with .Content }}{{ end }}{{ end }}
+  {{ range .Scratch.GetSortedMapValues "css" }}
+  <link rel="stylesheet" href="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
+  {{ end }}
+  {{ range .Scratch.GetSortedMapValues "js" }}
+  <script defer src="{{ .Permalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script>
+  {{ end }}
+</head>
+<body>
+  {{ partialCached "banner.html" . }}
+  <main>
+    <div class="u-wrapper">
+      <div class="u-padding">
+        {{ block "main" . }}{{ end }}
+      </div>
+    </div>
+  </main>
+  {{ partialCached "footer.html" . }}
+</body>
+</html>

+ 16 - 0
themes/flex/layouts/_default/list.html

@@ -0,0 +1,16 @@
+{{ define "main" }}
+
+{{ partial "heading.html" . }}
+{{ .Content }}
+{{ range .Pages.GroupByPublishDate "2006" }}
+<h3>{{ .Key }}</h3>
+<ul>
+  {{ range .Pages }}
+  <li>
+    {{ .PublishDate.Format "2006-01-02" }} – <a href="{{ .Permalink }}">{{ .Title }}</a>
+  </li>
+  {{ end }}
+</ul>
+{{ end }}
+
+{{ end }}

+ 26 - 0
themes/flex/layouts/_default/rss.xml

@@ -0,0 +1,26 @@
+{{ `<?xml version="1.0" encoding="utf-8" ?>` | safeHTML }}
+{{ with resources.Get "xml/base.temp.xml" | resources.ExecuteAsTemplate "xml/base.xml" . | minify -}}
+{{ printf `<?xml-stylesheet type="text/xsl" href=%q ?>` .Permalink | safeHTML }}
+{{ end -}}
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>{{ if eq .Title site.Title }}{{ site.Title }}{{ else }}{{ with .Title }}{{ . }} on {{ end }}{{ site.Title }}{{ end }}</title>
+    <link>{{ .Permalink }}</link>
+    <description>Recent content {{ if ne .Title site.Title }}{{ with .Title }}in {{ . }} {{ end }}{{ end }}on {{ site.Title }}</description>
+    <generator>Hugo -- gohugo.io</generator>{{ with site.LanguageCode }}
+    <language>{{ . }}</language>{{ end }}{{ with site.Author.email }}
+    <managingEditor>{{ . }}{{ with site.Author.name }} ({{ . }}){{ end }}</managingEditor>{{ end }}{{ with site.Author.email }}
+    <webMaster>{{ . }}{{ with site.Author.name }} ({{ . }}){{ end }}</webMaster>{{ end }}{{ with site.Copyright }}
+    <copyright>{{ . }}</copyright>{{ end }}{{ with .Date | default nil }}
+    <lastBuildDate>{{ .Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}{{ with .OutputFormats.Get "RSS" }}
+    {{ printf `<atom:link href=%q rel="self" type=%q />` .Permalink .MediaType | safeHTML }}{{ end }}{{ range where site.RegularPages "Type" "in" site.Params.mainSections }}
+    <item>
+      <title>{{ .Title }}</title>
+      <link>{{ .Permalink }}</link>
+      <pubDate>{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>{{ with site.Author.email }}
+      <author>{{ . }}{{ with site.Author.name }} ({{ . }}){{ end }}</author>{{ end }}
+      <guid>{{ .Permalink }}</guid>
+      <description>{{ .Content | html }}</description>
+    </item>{{ end }}
+  </channel>
+</rss>

+ 10 - 0
themes/flex/layouts/_default/single.html

@@ -0,0 +1,10 @@
+{{ define "main" }}
+
+<article>
+  {{ partial "heading.html" . }}
+  {{ .Content }}
+  {{ partial "tags.html" . }}
+  {{ partial "comments.html" . }}
+</article>
+
+{{ end }}

+ 13 - 0
themes/flex/layouts/_default/terms.html

@@ -0,0 +1,13 @@
+{{ define "main" }}
+
+{{ partial "heading.html" . }}
+{{ .Content }}
+<ul class="Tags">
+  {{ range .Pages }}
+  <li class="Tags-item u-background">
+    <a class="Tags-link u-clickable" href="{{ .Permalink }}">{{ .Title }}</a>
+  </li>
+  {{ end }}
+</ul>
+
+{{ end }}

+ 48 - 0
themes/flex/layouts/index.html

@@ -0,0 +1,48 @@
+{{ define "loadshortcodes" }}
+
+{{/*
+  Here Hugo is forced to cycle through all the items that will appear on
+  the page, effectively pre-rendering all their shortcodes. Afterwards,
+  when a shortcode contains a "css" or a "js" entry in their local
+  .Scratch variable, the content of this entry is merged to the content
+  of the corresponding entry in the global .Scratch variable. These
+  resources are then loaded in the head of the page from the global
+  .Scratch variable (see layout baseof.html).
+*/}}
+{{ $paginator := where site.RegularPages "Type" "in" site.Params.mainSections | .Paginate }}
+{{ range $paginator.Pages }}
+{{ with .Content }}{{ end }}
+{{ with .Scratch.Get "css" }}
+{{ . | merge ($.Scratch.Get "css") | $.Scratch.Set "css" }}
+{{ end }}
+{{ with .Scratch.Get "js" }}
+{{ . | merge ($.Scratch.Get "js") | $.Scratch.Set "js" }}
+{{ end }}
+{{ end }}
+{{ .Scratch.Set "paginator" $paginator }}
+
+{{ end }}
+
+{{ define "main" }}
+
+{{ $paginator := .Scratch.Get "paginator" }}
+{{ range $paginator.Pages }}
+<article>
+  {{ partial "heading.html" . }}
+  {{ if site.Params.summaries }}
+  {{ .Summary }}
+  {{ if .Truncated }}
+  <p>
+    <a class="u-clickable" href="{{ .Permalink }}">Read More…</a>
+  </p>
+  {{ end }}
+  {{ else }}
+  {{ .Content }}
+  {{ end }}
+  {{ partial "tags.html" . }}
+</article>
+{{ with site.Params.divider }}<div class="Divider"></div>{{ end }}
+{{ end }}
+{{ partial "pagination.html" $paginator }}
+
+{{ end }}

+ 14 - 0
themes/flex/layouts/partials/banner.html

@@ -0,0 +1,14 @@
+<nav class="u-background">
+  <div class="u-wrapper">
+    <ul class="Banner">
+      <li class="Banner-item Banner-item--title">
+        <a class="Banner-link u-clickable" href="{{ "" | absURL }}">{{ site.Title }}</a>
+      </li>
+      {{ range site.Menus.nav }}
+      <li class="Banner-item">
+        <a class="Banner-link u-clickable" href="{{ .URL | absURL }}">{{ .Name }}</a>
+      </li>
+      {{ end }}
+    </ul>
+  </div>
+</nav>

+ 5 - 0
themes/flex/layouts/partials/comments.html

@@ -0,0 +1,5 @@
+{{ with site.Params.utterances }}
+{{ if in site.Params.mainSections $.Type | and .repo }}
+<script src="https://utteranc.es/client.js" repo="{{ .repo }}" issue-term="{{ .issueterm }}" theme="{{ .theme }}" crossorigin="anonymous" async></script>
+{{end}}
+{{end}}

+ 9 - 0
themes/flex/layouts/partials/footer.html

@@ -0,0 +1,9 @@
+{{ with site.Params.footer }}
+<footer class="Footer">
+  <div class="u-wrapper">
+    <div class="u-padding">
+      {{ . | safeHTML }}
+    </div>
+  </div>
+</footer>
+{{ end }}

+ 10 - 0
themes/flex/layouts/partials/heading.html

@@ -0,0 +1,10 @@
+<header class="Heading">
+  <h2 class="Heading-title">
+    <a class="Heading-link u-clickable" href="{{ .Permalink }}" rel="bookmark">{{ .Title }}</a>
+  </h2>
+  {{ with .PublishDate | default nil }}
+  <time datetime="{{ .Format "2006-01-02T15:04:05Z07:00" }}">
+    {{ .Format "2 January, 2006" }}
+  </time>
+  {{ end }}
+</header>

+ 10 - 0
themes/flex/layouts/partials/pagination.html

@@ -0,0 +1,10 @@
+{{ if gt .TotalPages 1 }}
+<nav>
+  {{ with .Next }}
+  <a class="Pagination u-clickable" href="{{ .URL | absURL }}" rel="prev">« Previous</a>
+  {{ end }}
+  {{ with .Prev }}
+  <a class="Pagination Pagination--right u-clickable" href="{{ .URL | absURL }}" rel="next">Next »</a>
+  {{ end }}
+</nav>
+{{ end }}

+ 21 - 0
themes/flex/layouts/partials/tags.html

@@ -0,0 +1,21 @@
+{{ $taxonomies := slice }}
+{{ range $taxonomy, $pages := site.Taxonomies }}
+{{ $taxonomies = $taxonomies | append $taxonomy }}
+{{ end }}
+{{ if true | in (apply $taxonomies "isset" .Params ".") }}
+<footer>
+  {{ range $taxonomy := $taxonomies }}
+  {{ if isset $.Params $taxonomy }}
+  <ul class="Tags">
+    {{ range $term := index $.Params $taxonomy }}
+    {{ with $term | urlize | printf "/%s/%s" $taxonomy | site.GetPage }}
+    <li class="Tags-item u-background">
+      <a class="Tags-link u-clickable" href="{{ .Permalink }}" rel="tag">{{ $term }}</a>
+    </li>
+    {{ end }}
+    {{ end }}
+  </ul>
+  {{ end }}
+  {{ end }}
+</footer>
+{{ end }}

+ 31 - 0
themes/flex/layouts/shortcodes/contact.html

@@ -0,0 +1,31 @@
+{{ resources.Get "css/contact.css" | minify | fingerprint | .Page.Scratch.SetInMap "css" "contact" }}
+<form class="Contact" name="contact" method="POST" data-netlify="true"{{ if site.Params.netlify.honeypot }} data-netlify-honeypot="bot"{{ end }}{{ if site.Params.netlify.recaptcha }} data-netlify-recaptcha="true"{{ end }}{{ with .Get 0 }} action="{{ . }}"{{ end }}>
+  <ul class="Contact-group">
+    {{ if site.Params.netlify.honeypot }}
+    <li class="Contact-hidden">
+      <label>Don’t fill this out if you're human:</label>
+      <input name="bot">
+    </li>
+    {{ end }}
+    <li class="Contact-item">
+      <label class="Contact-label" for="Contact-name">Name:</label>
+      <input class="Contact-input" id="Contact-name" type="text" name="name" autofocus>
+    </li>
+    <li class="Contact-item">
+      <label class="Contact-label" for="Contact-email">Email:</label>
+      <input class="Contact-input" id="Contact-email" type="email" name="email">
+    </li>
+    <li class="Contact-item">
+      <label class="Contact-label" for="Contact-subject">Subject:</label>
+      <input class="Contact-input" id="Contact-subject" type="text" name="subject">
+    </li>
+    <li class="Contact-item">
+      <label class="Contact-label" for="Contact-message">Message:</label>
+      <textarea class="Contact-input Contact-input--textbox" id="Contact-message" name="message"></textarea>
+    </li>
+    <li class="Contact-item">
+      <button class="Contact-button" type="submit">Send</button>
+    </li>
+  </ul>
+  {{ if site.Params.netlify.recaptcha }}<div data-netlify-recaptcha="true"></div>{{ end }}
+</form>

+ 3 - 0
themes/flex/layouts/shortcodes/soundcloud.html

@@ -0,0 +1,3 @@
+{{ resources.Get "css/soundcloud.css" | minify | fingerprint | .Page.Scratch.SetInMap "css" "soundcloud" }}
+{{ resources.Get "js/soundcloud.js" | minify | fingerprint  | .Page.Scratch.SetInMap "js" "soundcloud" }}
+<div class="Soundcloud" data-id="{{ .Get 0 }}"></div>

+ 12 - 0
themes/flex/theme.toml

@@ -0,0 +1,12 @@
+name = "Hugo Flex"
+license = "Apache-2.0"
+licenselink = "https://github.com/de-souza/hugo-flex/blob/master/LICENSE"
+description = "A lightweight Hugo theme leveraging CSS Flexbox"
+homepage = "https://github.com/de-souza/hugo-flex/"
+tags = ["responsive", "minimal", "flexbox", "no-javascript"]
+features = ["posts"]
+min_version = "0.57.2"
+
+[author]
+  name = "Léo De Souza"
+  homepage = "https://github.com/de-souza/"