diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100755
index f807de9..0000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,21 +0,0 @@
-module.exports = {
- root: true,
- env: {
- browser: true,
- node: true
- },
- parserOptions: {
- parser: 'babel-eslint'
- },
- extends: [
- // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
- // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
- 'plugin:vue/essential'
- ],
- // required to lint *.vue files
- plugins: [
- 'vue'
- ],
- // add your custom rules here
- rules: {}
-}
diff --git a/.gitignore b/.gitignore
index b0d062f..89ff0a6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,23 +1,12 @@
-.DS_Store
-node_modules
-/dist
-
-# local env files
-.env.local
-.env.*.local
-
-# Log files
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# Editor directories and files
-.idea
-.vscode
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw*
-
-.nuxt
\ No newline at end of file
+# Hugo default output directory
+/public
+
+## OS Files
+# Windows
+Thumbs.db
+ehthumbs.db
+Desktop.ini
+$RECYCLE.BIN/
+
+# OSX
+.DS_Store
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
deleted file mode 100644
index ad1ee79..0000000
--- a/.prettierrc
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "bracketSpacing": true,
- "printWidth": 100,
- "semi": false,
- "singleQuote": true,
- "tabWidth": 2,
- "trailingComma": "none",
- "useTabs": false
-}
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index c2a1c0f..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2017 Rohan Verma
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/README.md b/README.md
deleted file mode 100755
index 2844d5f..0000000
--- a/README.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# rohanverma.net
-
-> Personal Website of Rohan Verma
-
-## Build Setup
-
-``` bash
-# install dependencies
-$ npm install # Or yarn install
-
-# serve with hot reload at localhost:3000
-$ npm run dev
-
-# build for production and launch server
-$ npm run build
-$ npm start
-
-# generate static project
-$ npm run generate
-```
-
-For detailed explanation on how things work, checkout the [Nuxt.js docs](https://github.com/nuxt/nuxt.js).
diff --git a/archetypes/default.md b/archetypes/default.md
new file mode 100644
index 0000000..0a5bae4
--- /dev/null
+++ b/archetypes/default.md
@@ -0,0 +1,6 @@
++++
+title = "{{ replace .TranslationBaseName "-" " " | title }}"
+date = {{ .Date }}
+description = "This text is displayed in search result listings."
+draft = true
++++
diff --git a/archetypes/post.md b/archetypes/post.md
new file mode 100644
index 0000000..938ba31
--- /dev/null
+++ b/archetypes/post.md
@@ -0,0 +1,86 @@
++++
+title = "{{ replace .TranslationBaseName "-" " " | title }}"
+date = {{ .Date }}
+description = "This text was generated using the After Dark post archetype."
+draft = true
+toc = false
+categories = ["hacking"]
+tags = ["after", "dark"]
+images = [
+ "https://source.unsplash.com/collection/983219/1600x900"
+] # overrides site-wide open graph image
++++
+
+Before continuing please create a post archetype. Archetypes are located within markdown files in the `archetypes` directory of your site:
+
+```
+flying-toasters
+├── archetypes
+│ ├── default.md
+│ └── post.md
+├── content
+```
+
+If `post.md` does not exist yet, copy it from the After Dark default:
+
+```sh
+$ cd flying-toasters
+$ cp themes/after-dark/archetypes/post.md archetypes/
+```
+
+Make some changes to `post.md` then use `hugo new` to draft a new post:
+
+```sh
+$ vi archetypes/post.md # or vim, emacs, nano ...
+$ hugo new post/totally-twisted.md
+```
+
+If `hugo server` is running with the `--navigateToChanged` flag your new post will appear automatically in JavaScript-enabled browsers. If you see an empty page you probably need to restart `hugo server` with the `--buildDrafts` flag.
+
+Use archetypes to maintain consistency when creating content for [Custom Layouts](http://localhost:1414/feature/custom-layouts). Like custom layouts {{< external href="https://gohugo.io/content-management/archetypes/" text="Hugo Archetypes" />}} may contain templating logic.
+
+
+
+---
+
+{{< hackcss-alert type="info" >}}
+Tip: This message appears below a {{< external href="https://gohugo.io/content-management/summaries/#manual-summary-splitting" text="Manual Summary Split" />}}.
+{{< /hackcss-alert >}}
+
+The above tip uses a shortcode called [Alert](http://localhost:1414/shortcode/alert/). In addition to a number of [Shortcodes](http://localhost:1414/shortcode/) After Dark provides a number of other [Features](http://localhost:1414/feature/).
+
+The [Module System](http://localhost:1414/feature/module-system/), for example, provides a module to display image animations with alpha transparency and something not possible using a GIF:
+
+
+
+If you do not see the above animation, you may install the [Fractal Forest](http://localhost:1414/module/fractal-forest/) module yourself or reinstall After Dark using the [Quick Install](http://localhost:1414/feature/quick-install/) for instant setup.
+
+Review the [Online Help](http://localhost:1414/) to learn about other useful features such as the [Section Menus](http://localhost:1414/feature/section-menu) navigational aid, responsive [Post Images](http://localhost:1414/feature/post-images/"), offline [Fuzzy Search](http://localhost:1414/feature/fuzzy-search/) and more.
+
+If online help isn't running, go ahead and start it using the corresponding command from the following cheat sheet within your site directory:
+
+```sh
+# After Dark scripts
+./themes/after-dark/bin/upgrade # check for updates and upgrade
+./themes/after-dark/bin/help # start online help docs
+./themes/after-dark/bin/install # run the quick installer
+
+# Hugo commands
+hugo # build site with default settings
+hugo --minify # build with minified sources (hugo 0.47 and above)
+hugo --config config.prod.toml # build with custom config
+hugo --templateMetrics # generate template metrics
+hugo new about.md # generate page content
+hugo new post/coming-soon.md # generate new post content
+hugo serve # serve locally with default settings
+hugo serve --buildDrafts --navigateToChanged # serve with drafts for editing
+hugo serve --buildExpired # serve locally showing expired content
+hugo serve --disableLiveReload # serve locally w/live reload disabled
+hugo list drafts # list draft content
+hugo list expired # list expired content
+hugo list future # list future content
+hugo [serve] --debug # build or serve hugo with debug info
+hugo [command] --help
+```
+
+Thank you for choosing After Dark.
diff --git a/archetypes/search.md b/archetypes/search.md
new file mode 100644
index 0000000..17736d6
--- /dev/null
+++ b/archetypes/search.md
@@ -0,0 +1,15 @@
++++
+title = "Search" # title of the page
+layout = "search" # sets the layout to use
+noindex = true # tell robots not to index
+[form]
+ helpblock = "Press s to focus input anytime."
+[form.input]
+ placeholder = "Enter search query…"
+ disabled = false
+[security.csp.directives]
+ scriptSrc = [
+ "'sha512-Bxby9zhln4Zc2thGA1E9CdT4qcCY52SxO/SBxAH6qQK6LK6/1gGq1xJ3Uz0SXTsPSL6quze7bYQUHr94xJS7jQ=='",
+ "'unsafe-eval'"
+ ]
++++
diff --git a/assets/README.md b/assets/README.md
deleted file mode 100755
index c67cf2e..0000000
--- a/assets/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# ASSETS
-
-This directory contains your un-compiled assets such as LESS, SASS, or JavaScript.
-
-More information about the usage of this directory in the documentation:
-https://nuxtjs.org/guide/assets#webpacked
-
-**This directory is not required, you can delete it if you don't want to use it.**
diff --git a/assets/css/_tailwind.css b/assets/css/_tailwind.css
deleted file mode 100644
index b71bedf..0000000
--- a/assets/css/_tailwind.css
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * This injects Tailwind's base styles, which is a combination of
- * Normalize.css and some additional base styles.
- *
- * You can see the styles here:
- * https://github.com/tailwindcss/tailwindcss/blob/master/css/preflight.css
- *
- * If using `postcss-import`, use this import instead:
- *
- * @import "tailwindcss/preflight";
- */
-@tailwind preflight;
-
-/**
- * This injects any component classes registered by plugins.
- *
- * If using `postcss-import`, use this import instead:
- *
- * @import "tailwindcss/components";
- */
-@tailwind components;
-
-/**
- * Here you would add any of your custom component classes; stuff that you'd
- * want loaded *before* the utilities so that the utilities could still
- * override them.
- *
- * Example:
- *
- * .btn { ... }
- * .form-input { ... }
- *
- * Or if using a preprocessor or `postcss-import`:
- *
- * @import "components/buttons";
- * @import "components/forms";
- */
-
-/**
- * This injects all of Tailwind's utility classes, generated based on your
- * config file.
- *
- * If using `postcss-import`, use this import instead:
- *
- * @import "tailwindcss/utilities";
- */
-@tailwind utilities;
-
-/**
- * Here you would add any custom utilities you need that don't come out of the
- * box with Tailwind.
- *
- * Example :
- *
- * .bg-pattern-graph-paper { ... }
- * .skew-45 { ... }
- *
- * Or if using a preprocessor or `postcss-import`:
- *
- * @import "utilities/background-patterns";
- * @import "utilities/skew-transforms";
- */
diff --git a/assets/css/custom.css b/assets/css/custom.css
new file mode 100644
index 0000000..1a50d43
--- /dev/null
+++ b/assets/css/custom.css
@@ -0,0 +1,50 @@
+body {
+ background: #fffcf5;
+}
+
+a[rel*="external"]::after {
+ content: " " url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20class='i-external'%20viewBox='0%200%2032%2032'%20width='14'%20height='14'%20fill='none'%20stroke='%23ff9800'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='9.38%'%3E%3Cpath%20d='M14%209%20L3%209%203%2029%2023%2029%2023%2018%20M18%204%20L28%204%2028%2014%20M28%204%20L14%2018'/%3E%3C/svg%3E");
+}
+nav a.active {
+ background-color: inherit;
+ color: #000;
+}
+a {
+ color: #422eff;
+ border-bottom: 1px solid #00ff9c;
+}
+a:hover {
+ color: #000;
+ background-color: #00ff9c;
+}
+.muted, .help-block {
+ opacity: 0.70;
+}
+.hack .muted,
+.hack .help-block {
+ color: #0e0e0e;
+}
+
+.hack > header {
+ display: grid;
+ grid-template-columns: 1fr minmax(min-content, auto);
+ column-gap: 20px;
+ grid-template-areas: "nav nav";
+}
+
+.leader{
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.myimage{
+ margin-right: 10px;
+ box-shadow: 0 4px 8px 0 rgba(0,0,0,.12),0 2px 4px 0 rgba(0,0,0,.08);
+ border-width: 1px;
+ border-radius: 9999px;
+ border-color: #22292f;
+ border-style: solid;
+ height: 4rem;
+ width: 4rem;
+}
\ No newline at end of file
diff --git a/assets/css/main.css b/assets/css/main.css
deleted file mode 100644
index 8d197fe..0000000
--- a/assets/css/main.css
+++ /dev/null
@@ -1,33 +0,0 @@
-/** ------------------------------------------------------------
- ## TAILWIND CSS
- --------------------------------------------------------- */
-
-@import '_tailwind';
-
-/** ------------------------------------------------------------
- ## CUSTOM CLASSES
- --------------------------------------------------------- */
-html {
- height: 100%;
-}
-
-body {
- background-color: #fafafa;
-
- min-height: 100%;
-}
-
-.btn {
- @apply text-xs font-semibold rounded-full px-4 py-1 leading-normal bg-white border border-black text-black;
-}
-.btn-black {
- @apply bg-white text-black;
-}
-.btn-black:hover {
- @apply bg-black text-white;
-}
-
-/* Temporary fix for https://github.com/vaso2/nuxt-fontawesome/issues/9 */
-.fix-fa-inlined span{
- width: 1em !important;
-}
\ No newline at end of file
diff --git a/components/ContactCard.vue b/components/ContactCard.vue
deleted file mode 100644
index d8f175f..0000000
--- a/components/ContactCard.vue
+++ /dev/null
@@ -1,26 +0,0 @@
-
- Rohan Verma Software Developer at Zerodha
- Recent Projects
-
- next
- /
- prev
-
-
-
👋 Hello World
-
-
-
- I’m a Software Developer working at Zerodha where
- I write Golang, Python and Javascript to build things that are used at scale.
-
-
- I am also developing upi.link, a small and nifty
- programmable UPI shortlink generator.
-
-
-
-
- You can read my blog where
- I try to write about what I am doing and things I find interesting.
-
.gitignore before commiting your keys in your own repo.
+
+
+
+If you create your own bot using this, we would love for you to also add it to the [audience][2] folder in the repo by sending a pull request.
+
+ [2]: https://github.com/ACM-SNU/api-bot-python/tree/master/audience
\ No newline at end of file
diff --git a/content/blog/2016-03-22-blip.md b/content/blog/2016-03-22-blip.md
new file mode 100644
index 0000000..d09e400
--- /dev/null
+++ b/content/blog/2016-03-22-blip.md
@@ -0,0 +1,39 @@
+---
+title: 'BLIP – Asset Tracking & Location Based Contextual Services Using Bluetooth Based Indoor Positioning'
+author: rhnvrm
+type: post
+date: 2016-03-22T23:43:41+00:00
+url: blog/2016/03/22/blip/
+categories:
+ - projects
+tags:
+ - hackathon
+ - iot
+ - python
+
+---
+**BLIP** is a naive solution for effective tracking of assets in indoor spaces, where satellite (GPS) based positioning systems are unreliable, and provide location based contextual services. This project was made at IndiaHacks: Internet Of Things Hackathon at SAP Labs, Gurgaon. It was an overnight hackathon and [Paul][1] and I were awake till the last moments and only slept after creating a small demo video.
+
+
+
+We were inspired by the The Time Machine (2002) movie’s scene where the protagonist enters a museum in the future.
+
+
+
+During the hackathon we were able to make an app that relays RSSI values to our real time Database (rethink-db) that works on a pub-sub model, queries the real time database for its calculated position and receives contextual information relating to its predicted position inside the building where beacons have been set up.
+
+
+
+Since, the final submission deadline was extended, we were able to reach back our campus at night and shoot a demo video at our university’s library.
+
+
+
+Finally, we were selected in the top 20 for the offline finals of IndiaHacks and went to Taj Vivanta, Bangalore. It was a nice experience where we got to improve our idea with the help of mentors that were available there. We tweaked the algorithm and the variables a bit for the demo room we made at the venue. We were surprised to be among the few student teams at the finale.
+
+
+
+We gave our best and demo’d the project and were finally awarded the 7th position and received two RaspberryPi 3B models as the prize.
+
+
+
+ [1]: https://twitter.com/commandpaul
\ No newline at end of file
diff --git a/content/blog/2016-04-15-foodify-app-hacknsit-2016.md b/content/blog/2016-04-15-foodify-app-hacknsit-2016.md
new file mode 100644
index 0000000..0992bde
--- /dev/null
+++ b/content/blog/2016-04-15-foodify-app-hacknsit-2016.md
@@ -0,0 +1,42 @@
+---
+title: Foodify App – HackNSIT 2016
+author: rhnvrm
+type: post
+date: 2016-04-15T00:22:24+00:00
+url: blog/2016/04/15/foodify-app-hacknsit-2016/
+categories:
+ - projects
+tags:
+ - android
+ - api
+ - hackathon
+ - python
+
+---
+[HackNSIT][1] is a 24 hour hackathon that took place at Netaji Subhash Institute of Technology, and had around 150 participants from all over India. The themes of the hackathon were diverse and we chose to build an app that can solve the problem of tracking the nutritional value of whatever you eat with just a simple snap. The app processes the image of a food item, retrieves nutritional content and also suggests recipes based on your daily calorie limit/goal. We won the third prize at this hackathon.
+
+
+
+Since we were a team of 4 composed of two python developers ([rhnvrm][2], [mrkaran_][3]) and two android developers ([mayank_saxena96][4], [arpit_gogia][5]), we started with a creating a [GitHub Organization][6] to organize our code. We had separate repositories for our _Backend API_ and _Android App_. Being lazy, we set up a webhook to Heroku to automatically deploy new builds whenever new code is pushed.
+
+**Tech Stack**: We used Python (Flask) for our API, Parse for the user database and Android for the mobile app. We have used CloudSight, NutritionX API and Spoonacular API. On the Android app, one of our main goals was to accomplish a low bandwidth connection to our server. Cameras on mobile device these days are capable of reproducing high quality photos measuring up to 6 MB in size. By using a simple Bitmap scaling down mechanism, we were able to reduce the size to around 200 kB, thus allowing users to use our app on low bandwidth connections like 2G.
+
+**User Flow**: We built our core API on Flask(Python) and hosted it on Heroku. The image is sent as multipart data from Android App as a POST request to /upload endpoint which calls CloudSIght API to retrieve food item name and then NutritionX API is called to retrieve relevant nutritional data of that item. The daily calorie limit is set at the time of signup, and this is deducted every time a new food item is added. Using Spoonacular API we get a list of recommended recipes which are within bounds of daily calorie limit.
+
+**Documentation**: We have properly documented our API endpoints for reference to other people. It is available [here][7]
+
+**Future Work**: Our aim is to integrate social features into this app, provide leaderboards, share healthy food items a user recommends to his/her followers. We will include some data insights on user’s food consumption and give him/her suggestions on what to consume to achieve his goal, provide visualizations, build a streak for providing an incentive to the user for eating healthy. We have already built our core API so porting this app to other platforms like iOS, web won’t be much difficult.
+
+You can see the demo video here:
+
+
+
+
+
+ [1]: http://www.hack-nsit.in/
+ [2]: https://twitter.com/rhnvrm
+ [3]: https://twitter.com/mrkaran_
+ [4]: https://twitter.com/mayank_saxena96
+ [5]: https://twitter.com/arpit_gogia
+ [6]: http://github.com/CapsLockHacks/
+ [7]: https://anypoint.mulesoft.com/apiplatform/rhnvrm/#/portals/organizations/ba699460-af7b-4192-b37f-7e7d635c9a8a/apis/62058/versions/64448
\ No newline at end of file
diff --git a/content/blog/2016-05-07-adding-support-for-vector-instructions-to-8051-architecture.md b/content/blog/2016-05-07-adding-support-for-vector-instructions-to-8051-architecture.md
new file mode 100644
index 0000000..b4c2f77
--- /dev/null
+++ b/content/blog/2016-05-07-adding-support-for-vector-instructions-to-8051-architecture.md
@@ -0,0 +1,15 @@
+---
+title: Adding Support for Vector Instructions to 8051 Architecture
+author: rhnvrm
+type: post
+date: 2016-05-07T00:00:48+00:00
+url: blog/2016/05/07/adding-support-for-vector-instructions-to-8051-architecture/
+categories:
+ - projects
+
+---
+This was a group project for the Computer Architecture course at SNU under Prof. Rajeev Kumar Singh. Our team wrote a theoretical paper in which the focus is on adding support for vector instructions to the Intel 8051 architecture. The proposed architecture has a new vector register bank and a unit to decode the vector addresses. The team was composed of Akhil Alluri, Dhiraj Balakrishnan, Manvendra Singh, Rohan Verma, and Pulkit Gairola. This project can be used to demonstrate how one can add specialized vectorisation capabilities to architectures found in microcontrollers.
+
+[View Fullscreen][1]
+
+ [1]: /wp-content/plugins/pdfjs-viewer-shortcode/pdfjs/web/viewer.php?file=/wp-content/uploads/2016/12/8051_Vectorization.pdf&download=true&print=true&openfile=false
\ No newline at end of file
diff --git a/content/blog/2016-05-10-participating-in-google-summer-of-code-2016.md b/content/blog/2016-05-10-participating-in-google-summer-of-code-2016.md
new file mode 100644
index 0000000..dfc3202
--- /dev/null
+++ b/content/blog/2016-05-10-participating-in-google-summer-of-code-2016.md
@@ -0,0 +1,34 @@
+---
+title: Participating in Google Summer of Code 2016
+author: rhnvrm
+type: post
+date: 2016-05-10T00:00:00+00:00
+url: blog/2016/05/10/participating-in-google-summer-of-code-2016/
+categories:
+ - gsoc
+ - projects
+
+---
+This summer I will be working on an open source project called [Apache
+
+Allura][1]. This software powers [SourceForge.net][2]
+
+and is developed
+
+under the [Apache Software Foundation][3]. My mentors are
+
+[Dave Brondsema][4]
+
+and [Heith Seewald][5] who have been guiding me along the way during the application
+
+period and the community bonding period and I hope to have an amazing summer working
+
+with them.
+
+I will keep updating my progress on this blog so stay tuned!
+
+ [1]: https://allura.apache.org/
+ [2]: http://sourceforge.net
+ [3]: https://www.apache.org/
+ [4]: http://brondsema.net
+ [5]: https://twitter.com/heiths
\ No newline at end of file
diff --git a/content/blog/2016-05-20-building-planet-gsoc.md b/content/blog/2016-05-20-building-planet-gsoc.md
new file mode 100644
index 0000000..928e492
--- /dev/null
+++ b/content/blog/2016-05-20-building-planet-gsoc.md
@@ -0,0 +1,48 @@
+---
+title: Building Planet GSoC
+author: rhnvrm
+type: post
+date: 2016-05-20T00:00:00+00:00
+url: blog/2016/05/20/building-planet-gsoc/
+categories:
+ - gsoc
+ - projects
+
+---
+There were many emails in the GSoC mailing list regarding ‘sharing’ blogs
+
+with the GSoC community. Many GSoC students keep blogs to track their
+
+progress. It becomes really tough to track hundreds of blogs so I thought
+
+of starting a blog aggregator.
+
+Most of the solutions that had been developed until now required setting up a server
+
+that would generate a static file of all the blogs. But I wanted a solution
+
+that was easy to set up and could be deployed by anyone by clicking a single button on github.
+
+The motivation for this was my conversation with James Lopeman (meflin) on irc who
+
+is an org-admin at the Python Software Foundation. Before
+
+that conversation, I had already set up a simple method using [river5][1]
+
+developed by
+
+[Dave Winer][2] but later I extended it to include a deploy on openshift button.
+
+Currently, around 48 blogs are indexed by [PlanetGSoC][3]. It
+
+can be forked by anyone to deploy their own planet on GitHub.io since it uses
+
+JSONP requests to fetch the JSON river from the server running on openshift.
+
+Feel free to fork the project or contribute! And if you have a blog related to GSoC be
+
+sure to send a pull request.
+
+ [1]: https://github.com/scripting/river5
+ [2]: https://github.com/scripting
+ [3]: http://planetGSoC.github.io
\ No newline at end of file
diff --git a/content/blog/2016-05-30-installing-apache-allura-on-digital-ocean.md b/content/blog/2016-05-30-installing-apache-allura-on-digital-ocean.md
new file mode 100644
index 0000000..651b0b1
--- /dev/null
+++ b/content/blog/2016-05-30-installing-apache-allura-on-digital-ocean.md
@@ -0,0 +1,46 @@
+---
+title: Installing Apache Allura on Digital Ocean
+author: rhnvrm
+type: post
+date: 2016-05-30T00:00:00+00:00
+url: blog/2016/05/30/installing-apache-allura-on-digital-ocean/
+categories:
+ - gsoc
+ - projects
+
+---
+Installing Apache Allura on your [Digital Ocean][1] droplet is now as easy as typing make install.
+
+[Apache Allura][2] is a Software Forge that powers [SourceForge.net][3]. Today,
+
+I created a Makefile that simplifies the process of setting up Allura on a Digital Ocean droplet. The source code is hosted
+
+on Ubuntu 14.04 droplet.
+ 2. SSH into your droplet’s root ssh root@<DO_id> and
+
+ clone the repository using git clone https://rhnvrm@forge-allura.apache.org/git/u/rhnvrm/allura-install
+ 3. Change your working directory into the cloned repository. cd allura-install
+ 4. Install git and make using apt-get install git make
+ 5. Run make install
+
+If you face an error during a make step, report it to the issue tracker on [github][5].
+
+If it is an error that you can fix or due to some network errors, you can run the next step listed in the make file.
+
+Suppose, you faced an error during the npm install inside the initialize-allura-taskd, you can run make initialize-allura-taskd again and
+
+then run each next step in a simlar fashion (such as initialize-allura-data)
+
+Finally, run make start (only required if make failed during a certain step)
+
+ [1]: http://digitalocean.com
+ [2]: http://allura.apache.org
+ [3]: http://sourceforge.net
+ [4]: http://github.com/rhnvrm/allura-install
+ [5]: http://github.com/rhnvrm/allura-install/issues
\ No newline at end of file
diff --git a/content/blog/2016-06-20-vim-as-your-daily-log-notebook.md b/content/blog/2016-06-20-vim-as-your-daily-log-notebook.md
new file mode 100644
index 0000000..f5947db
--- /dev/null
+++ b/content/blog/2016-06-20-vim-as-your-daily-log-notebook.md
@@ -0,0 +1,26 @@
+---
+title: Vim as your daily log notebook
+author: rhnvrm
+type: post
+date: 2016-06-20T00:00:00+00:00
+url: blog/2016/06/20/vim-as-your-daily-log-notebook/
+categories:
+ - uncategorized
+
+---
+There are probably hundreds of methods and software that have been written that can help you maintain a notebook that contains your daily logs and notes.
+
+I have tried tens of methods and software and after a few days they just feel like bloat or take up too much time to maintain regularly.
+
+So, I decided to break down my own problem and found a simplisitic method/solution that suits me. My need was to write two logs, one life log and one dev log which was distraction free and would not take more than a second to get started with.
+
+I finally ended up with editing my zshrc and vimrc. Now, I just end up doing the following every morning:
+
+ 1. Open the terminal (ctrl + t)
+ 2. type today [This opens a split window having my life log and dev log side by side]
+ 3. type nlog<space> to start a new log entry.
+
+You can look at my commits [here][1] and [here][2] to see how I have done it and modify it for yourself.
+
+ [1]: https://github.com/rhnvrm/dotfiles/commit/04a61fdb0a671e6de64f37730845b85fa7bf6109
+ [2]: https://github.com/rhnvrm/dotfiles/commit/81ebfa3f804032c8386d741232daa9744c54429c
\ No newline at end of file
diff --git a/content/blog/2016-08-04-to-draft-or-not-to-draft.md b/content/blog/2016-08-04-to-draft-or-not-to-draft.md
new file mode 100644
index 0000000..8076b77
--- /dev/null
+++ b/content/blog/2016-08-04-to-draft-or-not-to-draft.md
@@ -0,0 +1,13 @@
+---
+title: To Draft or not to Draft
+author: rhnvrm
+type: post
+date: 2016-08-04T00:00:00+00:00
+url: blog/2016/08/04/to-draft-or-not-to-draft/
+categories:
+ - uncategorized
+
+---
+I just realized that I have way more drafts pending in my blog than the actual posts that are published here. Maybe, it is because I am afraid of being incorrect. Well, today I have decided that I will not worry about being correct and will post rather than draft. The motivation to publish a pending draft drops exponentially for me with time. So, if any of my readers find any mistake in my posts; please notify me so that I can correct it for my and my reader’s sake.
+
+_Update_: The irony here is that I had left this post as a draft. Posting it here as a cruel joke on myself.
\ No newline at end of file
diff --git a/content/blog/2016-08-05-what-is-apache-allura-and-why-is-it-relevant-to-developers.md b/content/blog/2016-08-05-what-is-apache-allura-and-why-is-it-relevant-to-developers.md
new file mode 100644
index 0000000..b449c01
--- /dev/null
+++ b/content/blog/2016-08-05-what-is-apache-allura-and-why-is-it-relevant-to-developers.md
@@ -0,0 +1,62 @@
+---
+title: What is Apache Allura and why is it relevant to developers?
+author: rhnvrm
+type: post
+date: 2016-08-05T00:00:00+00:00
+url: blog/2016/08/05/what-is-apache-allura-and-why-is-it-relevant-to-developers/
+categories:
+ - gsoc
+
+---
+Apache Allura is a Top-Level Project under the Apache Software Foundation since April of 2014.
+
+It powers SourceForge, Open Source Projects Europe, DLR German Aerospace Center and DARPA’s VehicleForge.
+
+The most interesting features that distinguish Apache Allura from currently trending Forge Software like GitHub, GitLab and
+
+the Atlassian Toolkit are
+
+it’s modularity and use of well-known python technologies. It is one of the easiest to set up for personal or professional use
+
+and even for use by big organisations. It reaches millions of users and developers throught the ~500,000 projects hosted
+
+on SourceForge.
+
+With having minimal steps in setting up your own instance of Apache Allura on a DigitalOcean droplet, a RaspberryPi, or simply
+
+using SourceForge.net it is
+
+one of the most valueable products that you can deploy for your team for collaborating on code,
+
+documentation, research, or even blogging, chatting, discussing or even maintaining your personal Wiki. It is very convenient for new
+
+users to setup in terms of usablity by using the defaults and also provides enough tools, settings, access control and ways to modify your Forge
+
+for powerusers.
+
+This week, I will be posting a series of posts about Allura. So stay tuned!
+
+Further Reading:
+
+ * [An Open Forge][1]
+ * [The Apache Software Foundation Announces Apache™ Allura™ as a Top-Level Project][2]
+ * [Open Hub][3]
+ * [About SourceForge][4]
+ * [About DARPA VehicleForge][5]
+ * [SourceForge announces Apache Allura][6]
+ * [Apache Allura Wiki – Features][7]
+ * [Apache Allura Wiki – Feature Comparison][8]
+ * [Source Code][9]
+ * Also hosted as a mirror on Github: [![GitHub Stars][10]][11]
+
+ [1]: https://sourceforge.net/url: blog/an-open-forge/
+ [2]: https://blogs.apache.org/foundation/entry/the_apache_software_foundation_announces52
+ [3]: https://www.openhub.net/p/allura
+ [4]: https://sourceforge.net/about
+ [5]: http://cps-vo.org/group/avm/vehicleforge
+ [6]: https://sourceforge.net/url: blog/apache-allura-becomes-top-level-project/
+ [7]: https://forge-allura.apache.org/p/allura/wiki/Features/
+ [8]: https://forge-allura.apache.org/p/allura/wiki/Feature%20Comparison/
+ [9]: https://forge-allura.apache.org/p/allura/git/ci/master/tree/
+ [10]: https://img.shields.io/github/stars/apache/allura.svg
+ [11]: https://github.com/apache/allura/stargazers
\ No newline at end of file
diff --git a/content/blog/2016-08-06-topological-sort-for-problems-using-dag.md b/content/blog/2016-08-06-topological-sort-for-problems-using-dag.md
new file mode 100644
index 0000000..aac14df
--- /dev/null
+++ b/content/blog/2016-08-06-topological-sort-for-problems-using-dag.md
@@ -0,0 +1,111 @@
+---
+title: Topological Sort for problems using DAG
+author: rhnvrm
+type: post
+date: 2016-08-06T00:00:00+00:00
+url: blog/2016/08/06/topological-sort-for-problems-using-dag/
+categories:
+ - uncategorized
+
+---
+Given a DAG (Directed Acyclic Graph), in which we know the adjacencies represent the order in which to perform a task, and the
+
+vertices are tasks, we want to place the vertices in a sequence. We must find a sequence that must satisfy
+
+all dependencies of pre-requisites. This sequential arrangement of the vertices is called the topological sort of the DAG.
+
+The first examples that come in my mind are of pre-requisite chains in courses offered at universities. Suppose, you were
+
+given a challenge to plot a roadmap for everyone in your university about how they can complete their major and/or minor given
+
+the courses they have already completed. Another one to which I was exposed recently was of finding out the complete sequence
+
+of events that took place if only given a partial sequence and also to detect if the given information was accurate or not.
+
+Accuracy of the given information can be detected by checking if at any point in the algorithm we detect a cycle. Since,
+
+such problems are being expressed through DAGs, if there exists any cycle in the graph, it can be concluded that the graph will
+
+not have a topological sort. The proof for this can be found [here][1]
+
+Suppose we have the following graphs:
+
+<span class="n">graph1</span> <span class="o">=</span> <span class="p">{</span> <span class="s">"x"</span> <span class="p">:</span> <span class="p">[</span><span class="s">"y"</span><span class="p">],</span>
+ <span class="s">"z"</span> <span class="p">:</span> <span class="p">[</span><span class="s">"y"</span><span class="p">],</span>
+ <span class="s">"y"</span> <span class="p">:</span> <span class="p">[],</span>
+ <span class="s">"a"</span> <span class="p">:</span> <span class="p">[</span><span class="s">"b"</span><span class="p">],</span>
+ <span class="s">"b"</span> <span class="p">:</span> <span class="p">[</span><span class="s">"c"</span><span class="p">],</span>
+ <span class="s">"c"</span> <span class="p">:</span> <span class="p">[]</span> <span class="p">}</span>
+
+<span class="n">graph2</span> <span class="o">=</span> <span class="p">{</span><span class="s">"x"</span> <span class="p">:</span> <span class="p">[</span><span class="s">"y"</span><span class="p">],</span> <span class="s">"y"</span><span class="p">:</span> <span class="p">[</span><span class="s">"x"</span><span class="p">]}</span>
+
+graph1 has a toposort but for graph2, it does not exist. This is because of the fact there
+
+exists a cycle in the graph. We can also understand it using the proof of the statment I had mentioned above. “Topological
+
+sort exists only for a DAG” and since graph2 is not a DAG (since, it is cyclic) it must not have a toposort.
+
+We can find the toposort using a modified dfs algorithm or kahn’s algorithm.
+
+[Kahn’s algorithm][2] is discussed in the link and depends and utilizes
+
+on calculating the indegree of all the vertices and using Queue (although it can also be written using an array).
+
+Here is my implementation using Modified DFS and an array as a (kind-of) stack:
+
+<span class="k">def</span> <span class="nf">dfs_toposort</span><span class="p">(</span><span class="n">graph</span><span class="p">):</span>
+ <span class="n">L</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="n">color</span> <span class="o">=</span> <span class="p">{</span> <span class="n">u</span> <span class="p">:</span> <span class="s">"white"</span> <span class="k">for</span> <span class="n">u</span> <span class="ow">in</span> <span class="n">graph</span> <span class="p">}</span>
+ <span class="n">found_cycle</span> <span class="o">=</span> <span class="p">[</span><span class="bp">False</span><span class="p">]</span>
+
+ <span class="k">for</span> <span class="n">u</span> <span class="ow">in</span> <span class="n">graph</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">color</span><span class="p">[</span><span class="n">u</span><span class="p">]</span> <span class="o">==</span> <span class="s">"white"</span><span class="p">:</span>
+ <span class="n">dfs_visit</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">u</span><span class="p">,</span> <span class="n">color</span><span class="p">,</span> <span class="n">L</span><span class="p">,</span> <span class="n">found_cycle</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">found_cycle</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
+ <span class="k">break</span>
+
+ <span class="k">if</span> <span class="n">found_cycle</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
+ <span class="n">L</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="n">L</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
+ <span class="k">return</span> <span class="n">L</span>
+
+<span class="k">def</span> <span class="nf">dfs_visit</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">u</span><span class="p">,</span> <span class="n">color</span><span class="p">,</span> <span class="n">L</span><span class="p">,</span> <span class="n">found_cycle</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">found_cycle</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
+ <span class="k">return</span>
+ <span class="n">color</span><span class="p">[</span><span class="n">u</span><span class="p">]</span> <span class="o">=</span> <span class="s">"gray"</span>
+
+ <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">graph</span><span class="p">[</span><span class="n">u</span><span class="p">]:</span>
+ <span class="k">if</span> <span class="n">color</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">==</span> <span class="s">"gray"</span><span class="p">:</span>
+ <span class="n">found_cycle</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span>
+ <span class="k">return</span>
+ <span class="k">if</span> <span class="n">color</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">==</span> <span class="s">"white"</span><span class="p">:</span>
+ <span class="n">dfs_visit</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">color</span><span class="p">,</span> <span class="n">L</span><span class="p">,</span> <span class="n">found_cycle</span><span class="p">)</span>
+
+ <span class="n">color</span><span class="p">[</span><span class="n">u</span><span class="p">]</span> <span class="o">=</span> <span class="s">"black"</span>
+ <span class="n">L</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">u</span><span class="p">)</span>
+
+dfs_toposort returns an empty array if there exists a cycle in the graph.
+
+Also, it is important to note here that the topological sort need not be unique. (Hence, for competitive programming
+
+problems it might be easier to find problems that involve checking if a given graph is a DAG or not; or if a sequence
+
+satisfying the pre-req chain exists or not by detecting cycles). This is quite evident once you realize that there might
+
+be many 0-in-degree vertices that can lead the toposort result.
+
+You can also see [Erik Demaine’s][3] lecture on this topic given for MIT 6.006
+
+ [1]: https://ece.uwaterloo.ca/~cmoreno/ece250/2012-03-16--topological-sort.pdf
+ [2]: http://www.geeksforgeeks.org/topological-sorting-indegree-based-solution/
+ [3]: https://www.youtube.com/watch?v=AfSk24UTFS8
\ No newline at end of file
diff --git a/content/blog/2016-08-07-share-wifi-via-ethernet-on-gnome-3-20.md b/content/blog/2016-08-07-share-wifi-via-ethernet-on-gnome-3-20.md
new file mode 100644
index 0000000..d314c67
--- /dev/null
+++ b/content/blog/2016-08-07-share-wifi-via-ethernet-on-gnome-3-20.md
@@ -0,0 +1,25 @@
+---
+title: Share WiFi via Ethernet on Gnome 3.20
+author: rhnvrm
+type: post
+date: 2016-08-07T00:00:00+00:00
+url: blog/2016/08/07/share-wifi-via-ethernet-on-gnome-3-20/
+categories:
+ - foss
+ - notes
+tags:
+ - fedora
+ - gnome
+ - linux
+
+---
+There is a hidden method to share your WiFi over Ethernet in the latest Gnome. I stumbled upon this while trying to connect
+
+my RaspberryPi 3B with my University’s Internet.
+
+ 1. Type nm-connection-editor in your terminal.
+ 2. Add a shared network connection by pressing the Add button.
+ 3. Choose Ethernet from the list and press Create.
+ 4. Click IPv4 Settings in the left.
+ 5. Choose Shared to other computers by clicking the Method drop-down menu.
+ 6. Enter a new name like Shared WiFi LAN as the Connection name at the top
\ No newline at end of file
diff --git a/content/blog/2016-08-09-apache-allura-gsoc-2016-summary.md b/content/blog/2016-08-09-apache-allura-gsoc-2016-summary.md
new file mode 100644
index 0000000..b08e080
--- /dev/null
+++ b/content/blog/2016-08-09-apache-allura-gsoc-2016-summary.md
@@ -0,0 +1,171 @@
+---
+title: Apache Allura – GSoC 2016 Summary
+author: rhnvrm
+type: post
+date: 2016-08-09T00:00:00+00:00
+url: blog/2016/08/09/apache-allura-gsoc-2016-summary/
+categories:
+ - gsoc
+ - projects
+
+---
+This post has the summary of my work during GSoC 2016. Hopefully I was able to cover everything. You can also see my work on [forge-allura][1]. Also, you can visually see a list of my commits made during GSoC that also contains the miscellaneous work [here][2].
+
+### Discussion Tool Changes {#discussion-tool-changes}
+
+The idea behind this change was to promote discussions on the platform. Most conversations on the web are now displayed in a similar format. The replies to a comment are also now anchored to the left, i.e. don’t become shorter in length and are only shifted towards the left along with a smaller avatar. We have also moved away from shadows under the avatars since they do not match with the current design scheme.
+
+The design enhances the username and avatar of the user to make it easier to recognize who has authored the comment. Also, the buttons used to interact in the discussion are now displayed on the upper right side. Also, there is now a unified design theme for all buttons including the moderation buttons. These set of buttons can easily be extendened in the future as well. This also makes more space available for the content. Images now do not overflow outside these bubbles and fit inside the bubbles.
+
+![Design Example of Discussion][3]
+
+Another prominent change is how we now display attachments. There is now a dedicated download and delete button for all attachments and an icon beside the file name displaying the type of attachment.
+
+Support for viewing the photo attachments has also been added by clicking on the image thumbnail inside the attachment box.
+
+![Preview Images][4]
+
+There has also been a change in how we display meta posts which share information rather than conversational text that is generated by the interaction of the user with the tools. These are not highlighted and uses smaller fonts so it is easier for the eyes to find real content and also distinguish between meta information and the same.
+
+![Meta Posts][5]
+
+You can also use Unicode Emoji’s within the discussion tool and they will be rendered as Twitter Style Emoji. This is very useful since we now have support for displaying the emoji even if the user don’t have the proper font’s to render them in his browser.
+
+![Imgur][6]
+
+Emoji Support enables users to use their devices emoji input keyboards and enter data. Also, now teams can use a simple Thumbs Up emoji instead of writing words to express themselves.
+
+You can view the results live on [SourceForge][7] as well.
+
+### Improved Landing Page {#improved-landing-page}
+
+![Imgur][8]
+
+We now have a better landing page. A landing page is forms the first impression for the tool. Although, if you are probably using SourceForge, your landing page might be the Project Catalog.
+
+Now we list all the neighborhoods in a block showing it’s logo along with the name and number of projects it contains.
+
+It makes it easier to digest the concept of neighborhoods for users who are used to something similar to Github or GitLab.
+
+### Minor Improvements in Ticket Listing and Search {#minor-improvements-in-ticket-listing-and-search}
+
+Now you can resize the length of the columns in the ticket listing.
+
+![Resize][9]
+
+Also you can now click on the username in the Owner column to view all tickets that have been assigned to that user directly from the ticket listing.
+
+### Merge Request Flow Improvements {#merge-request-flow-improvements}
+
+Now we show a link to Merge Requests listing in the side panel in all tools that support them even if none have been created.
+
+![List if zero][10]
+
+Also the filtering of merge requests have changed a bit. Now we have a new set of filter buttons that we use to filter the merge requests that are either open, rejected, merged.
+
+![Filter MRs][11]
+
+Also, there are now dedicated buttons matching the Forge theme that you can use to manage your merge requests. We now have an array of buttons and a text message that displays the status of the merge conflicts and if a one click merge is possible if you have access to that information. Users with correct priveleges can also click on the Reject button to reject and close the MR in two clicks including a confirmation dialog.
+
+Also, you can now Refresh the commits without having to manually edit the merge request, saving 4-5 clicks using the Refresh Commits button.
+
+![Imgur][12]
+
+### What could not be completed or was not done {#what-could-not-be-completed-or-was-not-done}
+
+#### Implement async loading of comments and allow them to be paginated. {#implement-async-loading-of-comments-and-allow-them-to-be-paginated}
+
+This was not implemented since there would be a loss in the traffic for the discussions. This would have a huge impact in search rankings for comments since crawlers don’t index async loaded comments and searching for problems on the internet is a very important way to reach this content. Suppose you have a problem you have faced with TexStudio software and search about it on a search engine and someone else has also reported a problem on it’s bug tracker then if it is not indexed in the search engine we will not be able to find it on the search results.
+
+#### Make Allura Responsive {#make-allura-responsive}
+
+This is something which I worked on for atleast 2 weeks and trying to find the most optimal solution. Even before starting there was some doubt about the feasability. But my final decision was that it is not feasible to do. This was due to the fact that there is no way to move to a fully functional mobile experience without altering the current structure of the project. The best way forward would be to move to bootstrap or some similar project. Also, this way we would be able to have a good enough way to move forward with the project.
+
+The first major problem I faced was keeping intact the design so that it does not break SourceForge.
+
+My first approach was to change the current method of using viewport based widths instead of fixed pixel widths.
+
+My next approach was to add media queries and then change the pixel values accordingly.
+
+Next I tried to use the method suggested by mentor to detect if we have a mobile browser and display a different template. This works, but is of no use if all the templates are not modified. So for testing I edited the width of the holders to the viewport size but then I realized if the inside is not also properly updated it would be of no use. Also all tests relating to that component would fail.
+
+So I moved on to work on other parts of the project.
+
+#### Extend the models in the threads to allow voting(express +1, LGTM etc.) on individual comments. {#extend-the-models-in-the-threads-to-allow-votingexpress-1-lgtm-etc-on-individual-comments}
+
+There were two ways I tried to implement this.
+
+First was to add a thumbs up button on the menu of the discussion bubble along side reply.
+
+![Imgur][6]
+
+Clicking that button adds a meta post as a reply to the post. But it looks ugly and does not seem useful.
+
+![Plus 1][13]
+
+The other method was to try to make the artifact votable but here the problem was that I could not get it to work as per my thought of how it should look and work. In this way I wanted a menu on the bottom.
+
+The code for all of these unimplemented work is available on my forked repo on forge-allura [here][14]. You can find all the branches with the unimplemented work mentioned here as well as other experiments. (My Branches begin with feature or rhnvrm/)
+
+### Other Cool Stuff I did related to Allura {#other-cool-stuff-i-did-related-to-allura}
+
+#### Makefile to install Allura with one command {#makefile-to-install-allura-with-one-command}
+
+You can now install Allura very easily if you don’t have docker or are not able to use it due to some reason
+
+Ubuntu 14.04 droplet.
+ 2. SSH into your droplet’s root ssh root@<DO_id> and
+
+ clone the repository using git clone https://rhnvrm@forge-allura.apache.org/git/u/rhnvrm/allura-install
+ 3. Change your working directory into the cloned repository. cd allura-install
+ 4. Install git and make using apt-get install git make
+ 5. Run make install
+
+#### Installed Allura on a RaspberryPi B {#installed-allura-on-a-raspberrypi-b}
+
+To show how it can even be run on a low powered device I installed Allura for me and my friends on a RPi 3B model.
+
+There were various problems that I faced during installation due to it being an ARM based device. I first tried to install using docker since it was easier but after installing docker and docker-compose from hyperiot I soon realized that it was not possible as it is ARM based and we don’t provide docker support for that.
+
+Here the makefile was very useful. Although I did not use it directly but I atleast had an idea how to install Allura step by step instead of having to re read the manual again and again.
+
+![Imgur][16]
+
+#### Deployed Allura for my University {#deployed-allura-for-my-university}
+
+Using the Raspberry Pi I am planning to deploy it for my university for using it for our Coding Club and also for internal usage. I have emailed my department and am hoping for a positive response.
+
+#### Setup and hosted a small Allura Instance for testing on Digital Ocean {#setup-and-hosted-a-small-allura-instance-for-testing-on-digital-ocean}
+
+During GSoC I ran Allura on a droplet for testing since my old laptop was having some issues with it’s graphics card. I was able to use a netbook and vim to test my changes on the droplet until I got my new laptop.
+
+### ShoutOut to tools that I used during GSoC {#shoutout-to-tools-that-i-used-during-gsoc}
+
+ 1. ZimWiki
+ 2. PyCharm
+ 3. Vim
+ 4. Digital Ocean
+ 5. Docker
+ 6. Pomodoro Timer App for Gnome
+ 7. Postman
+ 8. HexChat
+ 9. Imgur for hosting the image album (
I’m back to using WordPress from Jekyll. I followed David Lynch’s blog post to import my posts from the jekyll blog hosted on github.io
+
+Although, I did not use the plugins made by him, they might be useful if you had a lot of Disqus comments in your blog.
\ No newline at end of file
diff --git a/content/blog/2016-10-22-labeled-tweet-generator-and-galaxy-image-classifier-featured-in-sirajologys-youtube-videos.md b/content/blog/2016-10-22-labeled-tweet-generator-and-galaxy-image-classifier-featured-in-sirajologys-youtube-videos.md
new file mode 100644
index 0000000..57c6cc1
--- /dev/null
+++ b/content/blog/2016-10-22-labeled-tweet-generator-and-galaxy-image-classifier-featured-in-sirajologys-youtube-videos.md
@@ -0,0 +1,35 @@
+---
+title: Labeled Tweet Generator and Galaxy Image Classifier featured in Sirajology’s Youtube Videos
+author: rhnvrm
+type: post
+date: 2016-10-22T18:57:59+00:00
+url: blog/2016/10/22/labeled-tweet-generator-and-galaxy-image-classifier-featured-in-sirajologys-youtube-videos/
+categories:
+ - projects
+
+---
+I have been learning about machine learning and data science recently. Coincidentally, I found this cool Youtube channel called Sirajology and I must recommend it to any one who has also just begun his journey on this path like me. Each video has a challenge attached with it in the end. I participated in two of them by submitting my projects based on the specifications of the challenge and they were featured on the channel.
+
+Siraj classified me as “Badass of the Week” in these videos.
+
+The first project I made was a Galaxy Image Classifier (sudo mkdir /usr/share/texmf/tex/latex/picins+ +
sudo wget -O /usr/share/texmf/tex/latex/picins/picins.sty http://ctan.imsc.res.in/macros/latex209/contrib/picins/picins.sty http://mirrors.ctan.org/macros/latex209/contrib/picins/picins.sty+ +
sudo /usr/bin/texconfig rehash+ +
\parpic{\includegraphics[width=1in,clip,keepaspectratio]{figures/photo.eps}}
+\noindent {\bf Lorem Ipsum} dolor sit amet, consectetur adipiscing elit. Vivamus at nulla velit. Aliquam neque purus, porta sit amet sodales non, scelerisque eu nibh. Nulla posuere accumsan dui nec dictum. Aliquam erat volutpat. Aliquam erat volutpat. In tristique, dolor et dignissim eleifend, diam eros sollicitudin odio, at consequat sapien odio nec velit. Aenean vel mi lacinia, viverra lorem et, venenatis velit. Duis fringilla purus nec tortor efficitur vestibulum. Donec vitae viverra diam, scelerisque bibendum magna. Nunc fringilla lobortis pharetra. Sed rhoncus arcu eget porta euismod. Vestibulum scelerisque, enim id condimentum sagittis, magna enim faucibus tortor, non volutpat tortor ipsum nec augue. Duis faucibus molestie dui, gravida vehicula ante porttitor et. Integer hendrerit ligula id magna ornare vestibulum.
+
\ No newline at end of file
diff --git a/content/blog/2016-11-12-reached-the-melia-sevilla-spain-tonight-pretty-excited.md b/content/blog/2016-11-12-reached-the-melia-sevilla-spain-tonight-pretty-excited.md
new file mode 100644
index 0000000..27f2ac8
--- /dev/null
+++ b/content/blog/2016-11-12-reached-the-melia-sevilla-spain-tonight-pretty-excited.md
@@ -0,0 +1,18 @@
+---
+title: Reached the Melia Sevilla Spain tonight Pretty excited…
+author: rhnvrm
+type: post
+date: 2016-11-12T21:42:21+00:00
+url: blog/2016/11/12/reached-the-melia-sevilla-spain-tonight-pretty-excited/
+categories:
+ - uncategorized
+tags:
+ - aceu16
+format: status
+
+---
+Reached the Melia Sevilla, Spain tonight. Pretty excited about ApacheCon. Am planning on finalizing the presentations about Allura by tomorrow night and discuss them with @brondsem on Monday.
+
+It was a long trip to Sevilla via Madrid and London with @gauravsaini03, he will be speaking about Apache OFBiz which is a complete enterprise solution.
+
+Met Dr Paul King(@paulk_asert), who is working on Apache Groovy and has worked on the “Groovy in Action” book by Manning publications. He has 3 back to back talks lined up at ApacheCon on Thursday about Groovy.
\ No newline at end of file
diff --git a/content/blog/2016-11-13-toured-seville-today-thanks-to-https-www-feelthecitytours.md b/content/blog/2016-11-13-toured-seville-today-thanks-to-https-www-feelthecitytours.md
new file mode 100644
index 0000000..1668494
--- /dev/null
+++ b/content/blog/2016-11-13-toured-seville-today-thanks-to-https-www-feelthecitytours.md
@@ -0,0 +1,18 @@
+---
+title: Toured Seville today thanks to https www feelthecitytours…
+author: rhnvrm
+type: post
+date: 2016-11-13T22:12:21+00:00
+url: blog/2016/11/13/toured-seville-today-thanks-to-https-www-feelthecitytours/
+categories:
+ - uncategorized
+tags:
+ - aceu16
+format: status
+
+---
+Toured Seville today thanks to https://www.feelthecitytours.com/en/tours/sevilla/ . They are an amazing company with a great tour of this beautiful city. Got to learn a lot about the city along with a bunch of great stories about the city. One of them was the story of Carmen (http://www.geocities.jp/wakaru_opera/englishcarmen.html) which is a pretty nice story.
+
+The TAC meeting was pretty nice and was followed by the TAC team dinner at a Tapas restaurant.
+
+Excited about the first day tomorrow.
\ No newline at end of file
diff --git a/content/blog/2016-11-14-day-1-apachecon-big-data-seville-2016.md b/content/blog/2016-11-14-day-1-apachecon-big-data-seville-2016.md
new file mode 100644
index 0000000..4193fea
--- /dev/null
+++ b/content/blog/2016-11-14-day-1-apachecon-big-data-seville-2016.md
@@ -0,0 +1,96 @@
+---
+title: Day 1 – ApacheCon Big Data, Seville 2016
+author: rhnvrm
+type: post
+date: 2016-11-14T21:59:52+00:00
+url: blog/2016/11/14/day-1-apachecon-big-data-seville-2016/
+categories:
+ - apache
+tags:
+ - aceu16
+
+---
+It was fun to volunteer for today’s sessions at Apache Big Data 2016. My responsibilites included helping the speakers setup their laptops and introduce them to the audience, keep time and remind them when time was running short, and finally helping out with the Q&A at the end. I also liveblogged the sessions via twitter and interacted with the speakers as most of the sessions were of my choice as the volunteer team had a shared spreadsheet on which we could choose our sessions in a first come first serve manner.
+
+The day began with the Keynote sessions at 9:30. Rich Bowen started the conference with his opening remarks followed by Stephan Ewen and Alan Gates who gave their talks.++ + + +The second session was interesting and I got to learn a lot more about Apache Solr. I learnt about Faceting which was new to me and I feel would be very useful for projects that use Solr. Even Apache Allura might be able to use it somewhere, but for this I will have to think where it can be used. + ++ Talk on Apache Gearpump going on in Arenal 1 @ApacheCon Seville pic.twitter.com/YxUxz9olVq +
+ ++ — Rohan Verma (@rhnvrm) November 14, 2016 +
+
++ + + +The next session was one which I was very interested in as I had worked on a similar project called [Blip][1]. I talked to the presenter, Thomas Burgess and told him about it as well. Their company, [indoo.rs][2] has works on the same thing of providing indoor positioning services. They have even deployed it in San Francisco Airport. Right now they are researching about the same and trying to find new ways using Big Data analytics to reduce the time it takes to deploy these solutions and wish to create ways to make the process automated. They are also looking into using some seed data points and then extrapolating them using crowdsourcing. Hopefully, I will try to get in touch with them and discuss the research that is going on at our University regarding the same. + ++ Talk by @anshumgupta on @ApacheSolr going on in Giralda V at @ApacheCon #apachebigdata pic.twitter.com/YqYggZtb2z +
+ ++ — Rohan Verma (@rhnvrm) November 14, 2016 +
+
++ + + +Next, was a talk by Tim Park from Microsoft. I did not anticipate that this would turn out to be one of my favorite talks of today’s sessions since I had not read much about what was going to be talked about in this talk. It turned out to be great for me as I got to learn a lot and was able to connect the dots. + ++ Talk on Crowd Learning for Indoor Navigation by @thomastburgess going on at Carmona at @ApacheCon #apachebigdata pic.twitter.com/IY6MoHrkhl +
+ ++ — Rohan Verma (@rhnvrm) November 14, 2016 +
+
++ + + +Since, the previous session ended a bit early, I was able to goto the central banquet area where I was able to socilize with a few Apache people like Jean-Frederic Clere and talked about the Bar Camp. Also, talked to some of the speakers and atendees that I had interacted with during the events. + +Afterwards, the last session I attended was about Druid and Apache Hive. It was also pretty good, but I did not have much knowledge about what was being covered. Although, looking at the demonstration I was able to figure out what had been discussed earlier and the benefits. + ++ Talk on "Processing Planetary Sized Datasets" by @timpark is going on in Carmona at @ApacheCon Seville #apachebigdata pic.twitter.com/uLgZbQFA5A +
+ ++ — Rohan Verma (@rhnvrm) November 14, 2016 +
+
++ + + +Hoping for a great day again tomorrow. + + [1]: https://github.com/rhnvrm/iot-hackerearth + [2]: http://indoo.rs/ \ No newline at end of file diff --git a/content/blog/2016-11-15-day-2-apachecon-big-data-seville.md b/content/blog/2016-11-15-day-2-apachecon-big-data-seville.md new file mode 100644 index 0000000..5a6abef --- /dev/null +++ b/content/blog/2016-11-15-day-2-apachecon-big-data-seville.md @@ -0,0 +1,99 @@ +--- +title: Day 2 – ApacheCon Big Data, Seville +author: rhnvrm +type: post +date: 2016-11-15T23:37:36+00:00 +url: blog/2016/11/15/day-2-apachecon-big-data-seville/ +categories: + - apache +tags: + - aceu16 + +--- +The second day of ApacheCon BigData was also successful and amazing. It was a long day that started with the Keynotes by Mayank Bansal from Uber who explained Uber’s big data stack and how they scaled up. + +The next keynote was by Sean Owen from Cloudera who explained how Apache is more than just another Github where people just dump their code. It’s a place for building the community. It was also nice to hear his shoutout to Apache Allura which he talked about to explain the diversity and the reach of the projects. He said how we usually just think of ASF as a place for the HTTPd and Big Data projects but it’s more than that and how there are projects as big as these projects like Apache Allura. + ++ Talk on "Interactive Analytics at Scale in Apache Hive using Druid" by @jcamachor is going on in Arenal 3/4 at @ApacheCon #apachebigdata pic.twitter.com/iOzTt1TYYa +
+ ++ — Rohan Verma (@rhnvrm) November 14, 2016 +
+
++ + + +Then, I attended the session on Distributed and Native Machine Learning using Apache Mahout by Suneel Marthi from Redhat. The talk was Math Intensive and demonstrated how easy it is for Data Scientists to forget about the implementation of the stack below and just write the code for their Data projects in their favorite language. He demonstrated how easy it is with Apache Mahout-Samsara to do distributed Linear Algebra with an example of the EigenFaces classification problem. + ++ #Apache #Allura was featured in today's keynote by @sean_r_owen at @ApacheCon @brondsem #apachebigdata pic.twitter.com/cASRUYchyN +
+ ++ — Rohan Verma (@rhnvrm) November 15, 2016 +
+
++ + + +Another interesting talk was given by Clemens Valiente from the Trivago Development team who explained his company’s big data stack and how they moved from simple Java platform to the Big Data stack that reduced their query time from 5 seconds to less than a second. + ++ Talk on Native and Distributed Machine Learning with @ApacheMahout by @suneelmarthi going on at @ApacheCon EU 2016 #apachebigdata pic.twitter.com/4kw5vrT8Ma +
+ ++ — Rohan Verma (@rhnvrm) November 15, 2016 +
+
++ + + +Then I spent some time with Melissa and Gaurav at the Apache Software Foundation Booth at the Showcase Foyer. + ++ Talk on Large ScaleOpen Source Data Processing Pipelines at @trivago at @ApacheCon #apachebigdata pic.twitter.com/yBo7kf12ZW +
+ ++ — Rohan Verma (@rhnvrm) November 15, 2016 +
+
++ + + +Julien Nioche gave a talk on Low Latency Web Crawling using Apache Storm. + ++ Do visit the @TheASF booth at @ApacheCon #apachebigdata pic.twitter.com/TTDO0fAZKH +
+ ++ — Rohan Verma (@rhnvrm) November 15, 2016 +
+
++ + + +Julien Herzen presented Meerkat, which is a system built at Swisscom to do real-time anomaly detection on time series. Meerkat uses a combination of machine learning and big data technologies in order to trigger alerts in case of problems in Swisscom network. + ++ Talk on Low Latency Web Crawling on Apache Storm by @JulienNioche at @ApacheCon #apachebigdata pic.twitter.com/IwOgFXi6xt +
+ ++ — Rohan Verma (@rhnvrm) November 15, 2016 +
+
++ + + + \ No newline at end of file diff --git a/content/blog/2016-11-16-day-3-apachecon-barcamp-and-apachecon.md b/content/blog/2016-11-16-day-3-apachecon-barcamp-and-apachecon.md new file mode 100644 index 0000000..3bf1f1e --- /dev/null +++ b/content/blog/2016-11-16-day-3-apachecon-barcamp-and-apachecon.md @@ -0,0 +1,105 @@ +--- +title: Day 3 – ApacheCon Barcamp and ApacheCon +author: rhnvrm +type: post +date: 2016-11-16T23:05:05+00:00 +url: blog/2016/11/16/day-3-apachecon-barcamp-and-apachecon/ +categories: + - apache +tags: + - aceu16 + +--- +The morning began with me waking up a little later. The previous night, we had the Attendee Reception. The BarCamp began around 10 AM. A barcamp is an ‘unconference’ with no set schedule, facilitated by those involved in various Apache projects. It was organized by Jean Fredric Clere and Sharon Foga. + +You can learn more about the BarCamp at: + +https://wiki.apache.org/apachecon/BarCampApacheSeville + +Since, most people don’t know what a barcamp is and might be confused I’d suggest reading up about it on https://en.wikipedia.org/wiki/BarCamp + ++ Meerkat: Anomaly Detection as a Service by Julien Herzen at @ApacheCon #apachebigdata pic.twitter.com/UEOaYYiB5q +
+ ++ — Rohan Verma (@rhnvrm) November 15, 2016 +
+
++ + + ++ #ApacheCon barcamp (done) topics pic.twitter.com/r1d0YrnoO3 +
+ ++ — jfclere (@jfclere) November 16, 2016 +
+
++ + + +The discussions were were nice and insightful, from all the attendees. I gave a presentation on Apache Allura and also a demonstration on what all can be done using Allura. + +Afterwards, we had the sessions of ApacheCon. I attended Jim Jagielski’s talk on Inner Sourcing. + ++ A big Thanks to @jfclere and Sharon for organizing the #apachebarcamp at #ApacheCon yesterday! Got to demonstrate #ApacheAllura https://t.co/e63p6x0EnP +
+ ++ — Rohan Verma (@rhnvrm) November 17, 2016 +
+
++ + + +Here are his slides. I would recommend them to anyone who is trying to build Open Communities. + +After a small break, it was time for the day’s keynotes and ApacheCon to officially begin. Rich Bowen gave the Opening Remarks and welcomed all the attendees and the speakers to the next set of days of ApacheCon. Jim Jagielski gave the State of the Feather speech. I was amazed to learn so much more about the Apache Software Foundation and it’s resolve to put Community First before Code. + ++ .@jimjag is talking about Inner Sourcing 101 at @ApacheCon #ApacheCon EU 2016 pic.twitter.com/vOewHmLm5L +
+ ++ — Rohan Verma (@rhnvrm) November 16, 2016 +
+
++ + + +This was the same day as Microsoft joined the Linux Foundation as a Platinum member which was also an organizer for ApacheCon and ApacheCon BigData 2016. + ++ State of the Feather being delivered by @jimjag at @ApacheCon #apachecon pic.twitter.com/p7q81Fud8v +
+ ++ — Rohan Verma (@rhnvrm) November 16, 2016 +
+
++ + + +Then we had the Lightning Talks. They were amazing, one of the most memorable lightning talk was given by someone who had made a drinking game out of code reviews. Another memorable one was given by Shane Curcuru about how he got involved with Apache and how others should do the same. + ++ .@Microsoft joins the @linuxfoundation the same day @googlecloud joins the @dotnetfdn#StrongerTogether 👏🎉😃 pic.twitter.com/XYBlyw33kW +
+ ++ — francesc (@francesc) November 16, 2016 +
+
++ + + + \ No newline at end of file diff --git a/content/blog/2016-11-17-day-4-apachecon-and-the-apache-way.md b/content/blog/2016-11-17-day-4-apachecon-and-the-apache-way.md new file mode 100644 index 0000000..dda6c1c --- /dev/null +++ b/content/blog/2016-11-17-day-4-apachecon-and-the-apache-way.md @@ -0,0 +1,103 @@ +--- +title: Day 4 – ApacheCon and The Apache Way +author: rhnvrm +type: post +date: 2016-11-17T23:28:01+00:00 +url: blog/2016/11/17/day-4-apachecon-and-the-apache-way/ +categories: + - apache +tags: + - aceu16 + +--- +On day 4, I attended the Apache Way track as I felt that I should get to know more about the ASF and how Apache works. I got to learn a lot and feel that this has paved my way to further get involved with Apache projects. The first session was a panel discussion having panel members from the ASF. It was hosted by Nick Burch and the panelists were members of the ASF. + ++ Get involved with Apache – lighting talk by @shanecurcuru +
+ ++ — Rohan Verma (@rhnvrm) November 16, 2016 +
+
++ + + +> The “Apache Way” is the process by which Apache Software Foundation projects are managed. It has evolved over many years and has produced over 100 highly successful open source projects. It generally works well! But not always.. +> +> In this session, we’ll follow on from the theory, and look more on the practice of how it works. We’ll look more at cases when it has worked well! And when it has had problems. We’ll see more of the boundaries, the things that can be changed, and those that are fixed firm rules. We’ll see how businesses can get involved, and where project independence means they need to step back. Licensing, Trademarks, Decisions, Marketing, Infrastructure and more. + +Then was the session by Wen Ming who talked about how they built a Tech Community in China using the Apache Way and discussed all the problems they faced while doing so. It was nice to hear how different places in the world face the problem of accepting that Open Source is as important as normal work. Most asian countries face this problem that employers expect their employees to work 24/7 on the work done at the company and work done beyond that is considered to be somewhat illegal. + ++ Insightful Panel Session of @TheASF members at @ApacheCon about Apache Way. @gagravarr @bdelacretaz Lars Eilebrecht @skr #ApacheCon pic.twitter.com/tmmwZilW2K +
+ ++ — Rohan Verma (@rhnvrm) November 17, 2016 +
+
++ + + +Then I attended Apache 2.4 Reverse Proxy talk by Jim Jagielski. He talked about the new and unique features of Apache httpd’s reverse proxy. + ++ .@_WenMing tasks about building Tech Community in China using the #Apache Way at @ApacheCon pic.twitter.com/sJxFSQfxY1 +
+ ++ — Rohan Verma (@rhnvrm) November 17, 2016 +
+
++ + + +After that there was a talk on how a company can capitalize and successfully profit from Apache Products and Brands by Shane Curcuru + ++ Apache 2.4 Reverse proxy by @jimjag at #ApacheCon Europe 2016 pic.twitter.com/ahhMKBSCo6 +
+ ++ — Daniel Oh (@danieloh30) November 17, 2016 +
+
++ + + +Afterwards, there was a lunch break and following was a talk by Bertrand Delacretaz in which he posed the question about whether Software Quality is a Cultural Thing or not. + ++ Talk on Successfully Profiting From Apache Projects And Brands – @shanecurcuru, @TheASF at @ApacheCon #ApacheCon pic.twitter.com/IrPRkUJ4gq +
+ ++ — Rohan Verma (@rhnvrm) November 17, 2016 +
+
++ + + +Then, we had the Attendee reception for ApacheCon. It was nice to interact with the attendees. + +It was followed by the PGP key signing event. It was nice to get to meet many people and get verified by them. + ++ .@bdelacretaz talking about Software Quality – Is it a cultural thing? at #ApacheCon @ApacheCon +
+ ++ — Rohan Verma (@rhnvrm) November 17, 2016 +
+
++ + + + \ No newline at end of file diff --git a/content/blog/2016-11-18-day-5-the-final-day-of-apachecon.md b/content/blog/2016-11-18-day-5-the-final-day-of-apachecon.md new file mode 100644 index 0000000..99261fd --- /dev/null +++ b/content/blog/2016-11-18-day-5-the-final-day-of-apachecon.md @@ -0,0 +1,113 @@ +--- +title: Day 5 – The final day of ApacheCon +author: rhnvrm +type: post +date: 2016-11-18T23:52:10+00:00 +url: blog/2016/11/18/day-5-the-final-day-of-apachecon/ +categories: + - apache +tags: + - aceu16 + +--- +The morning began with keynotes from Sebastian Blanc and Bertrand Delacretaz. After that I attended Jean Fredric Clere’s talk on HTTP/2 and SSL/TLS. He also demonstrated the new protocol and the extensions. + ++ Met lots of people at the PGP key signing at #ApacheCon. It was a very nice event. Thanks to @jfclere and @apachecon for organizing 🙂 pic.twitter.com/I6N8q5CcPv +
+ ++ — Rohan Verma (@rhnvrm) November 17, 2016 +
+
++ + + +Next, got to learn about security lessons from the Deserialization vulnerability in the Java Apache Commons Collections library and how prevalant they are by Tim Jarret. + ++ .@jfclere speaking on HTTP/2 and SSL/TLS State of Art in Our Servers at #ApacheCon @ApacheCon pic.twitter.com/olEkYsa15e +
+ ++ — Rohan Verma (@rhnvrm) November 18, 2016 +
+
++ + + +After that was a talk on “If you build it, They won’t come” by Ruth Suehle. She talked about how UI/UX and documentation can make or break open source projects. She presented various examples of small and large open source projects. She also analyzed [Apache Infra’s new website][1] that will be coming up soon. + ++ .@tojarrett taking on Object Lessons: Deserialization After Apache Commons Collections – Tim Jarrett, Veracode at @ApacheCon #ApacheCon pic.twitter.com/Hfz4izfnIn +
+ ++ — Rohan Verma (@rhnvrm) November 18, 2016 +
+
++ + + +Next talk was from Rod Cope who talked about the need to build Offline First apps and presented some of the features of PouchDB/CouchDB. I got to learn about the new MongoDB and PouchDB and will try using that for my next projects. + ++ .@suehle is giving her talk on If You Build It, They Won't Come at @ApacheCon #ApacheCon https://t.co/hn1JpOE1JS pic.twitter.com/0eZ1GaxStF +
+ ++ — Rohan Verma (@rhnvrm) November 18, 2016 +
+
++ + + +The final talk was by fellow TACer Pedro Giffuni on how his experience with Random Numbers. One specific cool thing I took from his presentation were XORshift randomizers. + ++ .@RodCope Speaking about going Offline First using tech like PouchDB at @ApacheCon #ApacheCon pic.twitter.com/pLduCRJcrT +
+ ++ — Rohan Verma (@rhnvrm) November 18, 2016 +
+
++ + + +And finally, after this we had the TACers meet hosted by Mellissa and Cristofer Dutz where we talked about our experiences at the event. + +In the end, I would like to thank the Apache Software Foundation, the Linux Foundation and the Apache Community for having me at the conference. Hope to keep connected with everyone I met at the conference and get more involved with the ASF. + ++ Talk by @pgiffuni on Random Numbers for Chaos in your Software https://t.co/NvhIfJek8F at @ApacheCon #ApacheCon pic.twitter.com/DmB8gYqFBe +
+ ++ — Rohan Verma (@rhnvrm) November 18, 2016 +
+
++ + + ++ Thanks for making ApacheCon Seville a great event. Join us in Miami, May 16-18 2017, for #ApacheCon North America. https://t.co/MLkvlAUIhp pic.twitter.com/pydIXhsHLT +
+ ++ — ApacheCon (@ApacheCon) November 18, 2016 +
+
++ + + + + + [1]: https://infra-test.apache.org/ \ No newline at end of file diff --git a/content/blog/2016-11-23-getting-ready-for-updating-my-system-to-fedora.md b/content/blog/2016-11-23-getting-ready-for-updating-my-system-to-fedora.md new file mode 100644 index 0000000..0aada59 --- /dev/null +++ b/content/blog/2016-11-23-getting-ready-for-updating-my-system-to-fedora.md @@ -0,0 +1,12 @@ +--- +title: Getting ready for updating my system to Fedora… +author: rhnvrm +type: post +date: 2016-11-23T18:59:45+00:00 +url: blog/2016/11/23/getting-ready-for-updating-my-system-to-fedora/ +categories: + - uncategorized +format: status + +--- +Getting ready for updating my system to Fedora 25. Updating and backing up Fedora 24. Side by side, studying for my final exams and trying to cope with submission deadlines. \ No newline at end of file diff --git a/content/blog/2016-11-25-i-recently-corrupted-my-zsh-history-and-was.md b/content/blog/2016-11-25-i-recently-corrupted-my-zsh-history-and-was.md new file mode 100644 index 0000000..f094b0a --- /dev/null +++ b/content/blog/2016-11-25-i-recently-corrupted-my-zsh-history-and-was.md @@ -0,0 +1,26 @@ +--- +title: I recently corrupted my zsh history and was… +author: rhnvrm +type: post +date: 2016-11-25T18:35:39+00:00 +url: blog/2016/11/25/i-recently-corrupted-my-zsh-history-and-was/ +categories: + - uncategorized +tags: + - zsh +format: status + +--- +I recently corrupted my zsh history and was facing this error. + +After a reboot, I started seeing a message when loading the shell: + +zsh: corrupt history file /home/myusername/.zsh_history + +I fixed it using: + +mv .zsh\_history .zsh\_history_bad + +strings .zsh\_history\_bad > .zsh_history + +fc -R .zsh_history \ No newline at end of file diff --git a/content/blog/2016-11-29-octoshark-hackathon.md b/content/blog/2016-11-29-octoshark-hackathon.md new file mode 100644 index 0000000..12a9c60 --- /dev/null +++ b/content/blog/2016-11-29-octoshark-hackathon.md @@ -0,0 +1,43 @@ +--- +title: OctoShark Browser Extension – DigitalOcean Cloud Hack Delhi Winner 2016 +author: rhnvrm +type: post +date: 2016-11-29T01:03:43+00:00 +url: blog/2016/11/29/octoshark-hackathon/ +categories: + - projects +tags: + - google-chrome + - hackathon + - js + - python + +--- +This product was built during the DigitalOcean Cloud Hack 2016 at 91springboard, Okhla New Delhi. These days, every cloud developer is using Docker. Docker has become the de-facto way for developers and system administrators to create lightweight images and deploy to cloud. A quick search on github returned more than 300,000 public projects with Dockerfiles. The idea behind OctoShark is to simplify the workflow of deploying and testing cloud projects. OctoShark aims to provide a one click solution to deploy any Docker Project directly to a new DigitalOcean Droplet. The OctoShark button would be visible on such github projects and it would allow users to spin up a server for that project in a jiffy. No developer now needs to think twice to test a project! Since OctoShark is a browser extension, it also provides real-time information about your existing droplets and enables you to perform actions on them. The most popular extension available online is deprecated because it was built to work with DO’s API V1 and not API V2. We believe with OctoShark, developers will be able to click and run the projects and not worry about anything else! We placed first in the Cloud Track in this hackathon.+ Thanking the Apache community for a great @ApacheCon under the guidance of @rbowen + production by @linuxfoundation. See you in MIA in 2017! +
+ ++ — Apache – The ASF (@TheASF) November 19, 2016 +
+

][1]
][1]
+
+The
+
+ [1]: https://chrome.google.com/webstore/detail/snudatalimit/mfjinloagcpmfacpjnlabcflnkbajidd
\ No newline at end of file
diff --git a/content/blog/2017-01-12-checking-if-a-number-is-prime-using-regex.md b/content/blog/2017-01-12-checking-if-a-number-is-prime-using-regex.md
new file mode 100644
index 0000000..a2a9875
--- /dev/null
+++ b/content/blog/2017-01-12-checking-if-a-number-is-prime-using-regex.md
@@ -0,0 +1,22 @@
+---
+title: Checking if a number is prime using Regex
+author: rhnvrm
+type: post
+date: 2017-01-12T11:17:48+00:00
+url: blog/2017/01/12/checking-if-a-number-is-prime-using-regex/
+categories:
+ - notes
+tags:
+ - python
+ - regex
+
+---
+def is_prime(n): + return not re.match(r'^.?$|^(..+?)\1+$', '1'*n) ++ +This works by first converting the number to unary, i.e. 5 will be ‘11111’ and 3 will be ‘111’ and so on. First, it tries to match 0 or 1 in the LHS and then uses backreferences to try and match multiples of 2, 3, 4 and so on until a match is found or string length is exceeded. + +For a deeper analysis please read: https://iluxonchik.github.io/regular-expression-check-if-number-is-prime/ + + \ No newline at end of file diff --git a/content/blog/2017-01-25-today-my-phone-was-acting-strange-as-it.md b/content/blog/2017-01-25-today-my-phone-was-acting-strange-as-it.md new file mode 100644 index 0000000..6dd0eeb --- /dev/null +++ b/content/blog/2017-01-25-today-my-phone-was-acting-strange-as-it.md @@ -0,0 +1,16 @@ +--- +title: Today my phone was acting strange as it… +author: rhnvrm +type: post +date: 2017-01-25T19:32:40+00:00 +url: blog/2017/01/25/today-my-phone-was-acting-strange-as-it/ +categories: + - misc +tags: + - android +format: status + +--- +Today my phone was acting strange, as it immediately crashed after opening the notification drawer. I was baffled with why this was happening as my phone was working perfectly fine until yesterday. Finally, I had no option but to attempt to see the logs using `adb shell logcat` and try to figure out what was going on. There was a peculiar error message relating to starting an event a `8:00 AM` and I was completely unable to figure out what was causing it. Finally, I read the logs one line at a time and found that it was saying that there was an error with SQLite trying something with the stock clock app which has alarms. This was probably because yesterday night I had not charged my phone and it had died at around 7 or 8 am I guess and there was some error that occured then causing the phone to report thousands of errors, taking all the memory and thereby crashing the phone as soon as it was unlocked and the clock widget on my home screen updated or I tried to open the notification drawer. + + \ No newline at end of file diff --git a/content/blog/2017-02-04-i-used-to-use-the-l-flag.md b/content/blog/2017-02-04-i-used-to-use-the-l-flag.md new file mode 100644 index 0000000..bac0d19 --- /dev/null +++ b/content/blog/2017-02-04-i-used-to-use-the-l-flag.md @@ -0,0 +1,17 @@ +--- +title: I used to use the ` L` flag… +author: rhnvrm +type: post +date: 2017-02-04T18:21:25+00:00 +url: blog/2017/02/04/i-used-to-use-the-l-flag/ +categories: + - uncategorized +tags: + - foss + - linux +format: status + +--- +I used to use the \`-L\` flag in SSH but today I was going through the man page and saw the \`-D\` flag. It can be used to make a SOCKS5 proxy easily. For eg. \`ssh -f -N -D 8080 xyz@13.232.63.7\` + +Also, a big thanks to EliteBNC.org for giving a free ZNC node. Feels great to be back on IRC after so long. \ No newline at end of file diff --git a/content/blog/2017-02-05-elitebnc.md b/content/blog/2017-02-05-elitebnc.md new file mode 100644 index 0000000..1a0f029 --- /dev/null +++ b/content/blog/2017-02-05-elitebnc.md @@ -0,0 +1,22 @@ +--- +title: You can get a free BNC account on EliteBNC… +author: rhnvrm +type: post +date: 2017-02-05T10:17:34+00:00 +url: blog/2017/02/05/elitebnc/ +categories: + - foss + - tutorials +tags: + - foss + - irc + - tutorial +format: status + +--- +You can get a free [BNC][1] account on [EliteBNC][2]. It runs [ZNC][3] which you can run yourself if you have a spare VPS. All you need to do is login on [FreeNode][4] (you can use their webchat if you don’t have a client handy) and join #EliteBNC channel and issue the following command command: `!request
<target name="post-jar">
+ <exec executable="/bin/sh">
+ <arg value="-c"/>
+ <arg value="java -jar /home/rhnvrm/Software/microemulator/microemulator.jar ${dist.dir}/${dist.jar}" />
+ </exec>
+</target>
+
+
+ [1]: http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html#jdk-7u80-oth-JPR
+ [2]: https://docs.oracle.com/javase/7/docs/webnotes/install/linux/linux-jdk.html#install-64
+ [3]: https://netbeans.org/downloads/7.2/
+ [4]: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javame-419430.html#sun_java_wireless_toolkit-2.5.2-ml-oth-JPR
+ [5]: https://sourceforge.net/projects/microemulator/
\ No newline at end of file
diff --git a/content/blog/2017-02-09-.md b/content/blog/2017-02-09-.md
new file mode 100644
index 0000000..6c4becd
--- /dev/null
+++ b/content/blog/2017-02-09-.md
@@ -0,0 +1,13 @@
+---
+title: I’m taking a class on Psychoanalysis of Films…
+author: rhnvrm
+type: post
+date: -001-11-30T00:00:00+00:00
+draft: true
+url: blog/?p=177
+categories:
+ - uncategorized
+format: status
+
+---
+I’m taking a class on Psychoanalysis of Films. One of the tasks of the course is to make a 10 page screenplay by the end of the course. I recently read about Lacan’s interpretation of Freud’s Vorstellungsrepräsentanz.
\ No newline at end of file
diff --git a/content/blog/2017-02-09-vorstellungsreprasentanz.md b/content/blog/2017-02-09-vorstellungsreprasentanz.md
new file mode 100644
index 0000000..26e3598
--- /dev/null
+++ b/content/blog/2017-02-09-vorstellungsreprasentanz.md
@@ -0,0 +1,51 @@
+---
+title: Vorstellungsrepräsentanz
+author: rhnvrm
+type: post
+date: 2017-02-09T13:11:59+00:00
+url: blog/2017/02/09/vorstellungsreprasentanz/
+client-modified:
+ - "1523384480"
+dsq_thread_id:
+ - "7217770366"
+categories:
+ - misc
+tags:
+ - sociology
+
+---
+
][1]
+ “Rendezvous with a Reflection” +
+ ++ [First Draft] +
+ ++ by +
+ ++ Padamja Gupta +
+ ++ Rohan Verma +
+ ++ (Group – “Untitled”) +
+ ++ A girl, struggling to accept reality, confronted by her own reflection. +
+ +Instructor: Shrimoy Chaudhury+ ACT I +
+ +FADE IN: + +A long shot of New Delhi and the skyline. The sun is rising breaking dawn. + +Camera pans to visuals of empty shopping streets being lit with the morning sunlight. Some shopkeepers can be seen opening their shutters and the silence breaks with the opening of the shutters. + +Low key piano starts playing and the camera pans to a shot of birds flying across the sky. + +FADE TO Apartment Complex + +Outside the gate of an apartment complex, heavy traffic can be seen. People rushing out of the complex. Streets are now filled with people who are getting on with their lives. + +FADE TO Inside the Complex + +Camera shows a smaller, quieter street of the complex. We see a distinct, colorful door in this shot that is the home of our protagonist. It is on the ground floor of the apartment complex that towers 10-15 floors. + +We see a shot of school children with their school bags waiting for the school bus just on the opposite side of the street. + +CUT TO shot of 7:00 on a digital alarm clock + +Loud sound of beeping alarm starts playing over the low key piano which fades slowly. We can hear the cars outside and the sounds of traffic. Along with the simple noises of hustle and bustle of the city. + +Hand comes into the frame to shut down the sound. + +As soon as the alarm is switched off, the radio starts playing pop music with positive beats. We are situated in a usual Indian students room. There are posters of movies and rock bands on the wall. The posters are adding color to the walls of the dusty pale white walls of the room. The girl is still half asleep and brushes her hand through her messy hair. She stares at the clock and listens to the music of the radio and stands up slowly from the bed. + +She appears to be in her early twenties in fair shape. She is in her pajamas. + +Her feet touch the floor, shot of the magazines and random bits of rubbish lying around. The mess in the room adds to the vibrancy and color of the room. + +FADE TO Bathroom + +A mirror comes on screen. Sound of rinsing can be heard. Suddenly a face comes into the frame from the bottom. We can see NAINA’s face in the mirror and her messy, entangled and long hair and her back. She looks at the mirror, fixes her hair and smiles. + +The shot still focusing on the mirror, we can see her turn around and leave the bathroom, and the mirror without a reflection. + +FADE TO scene of the common area of apartment. + +It is a brightly lit room with windows. There are sofas and the windows let in the light from outside and fill the room. + +We can see NAINA walking towards the kitchen from her room with a purse. She is dressed up casually in T shirt and jeans. + +We can hear the sound of a pressure cooker coming from the kitchen. We can see rays of sunlight streaming in from the kitchen door. + +FADE TO kitchen + +We see NAINA entering the kitchen through the door, she looks at her mother making breakfast. She seems enthusiastic for the coming day. We can see her mother breaking an egg on the frying pan. Sound of crackling egg whites on the frying pan can be heard. + +NAINA grabs two pieces of fresh bread from the 12 pack of bread that is on the table and pours out a glass of milk from the glass bottle of boiled milk. + +NAINA looks at her mother cutting onions for the omelette with a knife. + +NAINA: + +Good morning mummy! + +MOM: + +Good morning, had a good night’s sleep beta? You had those bad dreams again? + +NAINA: + +Nothing bad mummy… + +NAINA’s mother gives her the plate of cooked omelette and she starts eating it with the bread. + +CAMERA PANS TO NAINA + +She is taking the finished plate of her breakfast and washing it in the kitchen sink. + +We see NAINA picking up her purse from beside the dining table. + +NAINA: + +Ok mummy, gotta go! Don’t want to be late for college! See you later. + +MOM: + +Have a nice day beta! + +FADE TO outside the apartment + +We see NAINA walking out of the apartment complex. + +The sun is now shining brightly, she is almost blinded by the bright light and crosses the street to the other side. + +In the shot we can see children waiting for their school bus in front of the street. + +NAINA begins to cross the street. + +Suddenly, we see a school bus crashing into NAINA. + ++ Sound of screeching tires can be heard.
+ + ++ Immediately fade to black. +
+ ++ ACT II +
+ ++ FADE IN: +
+ ++ Low key piano strokes play. +
+ ++ CUT TO Digital Clock with alarm ringing at 7:00 AM. +
+ ++ Loud sound of beeping alarm starts. +
+ ++ We see NAINA jumping from the bed in fear. She looks around and finds herself back in her room. +
+ ++ She shuts the alarm, this time bleaker music plays on the radio. +
+ ++ NAINA: +
+ ++ Seems like it was just a dream. +
+ ++ She stands up from the bed, laying her feet on the ground. We see the same shot of the magazines and random bits of rubbish lying around. But now the color seems to be faded. The room and posters on the wall also look a bit less colorful. There is a tone of bleakness which can be seen. +
+ ++ FADE TO bathroom +
+ ++ We see NAINA’s back and face in the mirror. She rinses her mouth and puts the toothbrush on the edge of the sink. She puts water from the faucet on her face to wash it. She rubs her eyes. She’s startled to find her reflection to be a bit different. She looks at her hand and then at the reflections hand. She then waves it. +
+ ++ NAINA: +
+ ++ What is happen— +
+ ++ There is silence, except the sound of the flowing tap, which is also a bit lower in volume than in the previous scene. +
+ ++ Suddenly, we hear the sound of something falling, it’s the toothbrush. She looks at it but doesn’t pick it up. She again sees the reflection, and it is seems normal now. A look of being creeped out is visible on her face. +
+ ++ The shot still focusing on the mirror, we can see her turn around, this time frantically leave the bathroom but not the reflection in the mirror. +
+ ++ FADE TO scene of the common area of apartment. +
+ ++ We can see NAINA walking towards the kitchen from her room. This time she is not dressed up. She is still in her pajamas. We can hear the pressure cooker, but this time the cooker is having a higher pitch. +
+ ++ Fade to kitchen +
+ ++ NAINA enters the kitchen, her mom can be seen preparing the breakfast. NAINA sits down at the table. Her mom is making eggs on the frying pan. The crackling sound of the eggs is not heard as clearly as last time. +
+ ++ NAINA grabs a single piece of bread from the 12 pack of bread that is on the table and looks at the bowl of boiled milk. +
+ ++ We see her mom turning and looking at her as soon as she grabs the bread. +
+ ++ NAINA : Morning Mom +
+ ++ Suddenly, she stops tending to the eggs that are being fried and with a concerned voice says +
+ ++ MOM: Good morning, beta.. you sound pretty tired. Did you sleep well? +
+ ++ This time her voice is different, we hear some disturbances like cracking in the mother’s voice and it is a bit unclear. +
+ ++ NAINA: Bad dreams.. +
+ ++ NAINA grabs the bread and was about to leave when her mom turns to her while cutting onions for the omlette. She looks at her mother who now looks a bit different. This makes her jump against the wall with an astonished and scared face. The bottle of milk falls on the ground and shatters into pieces. Her mother’s face was different, her lips seemed to be inside out, giving her face a look straight out of a nightmare. +
+ ++ Mom : What is wrong beta? +
+ ++ She completely turn towards her, with the knife pointing towards NAINA. +
+ ++ FADE TO scene of the common room +
+ ++ It was way too much to handle for NAINA, she can be seen running out of the door and closing it. +
+ ++ This time outside, it’s not that bright while also being a bit greyed out. +
+ ++ She keeps running in panic. +
+ ++ It was when she was running and crossing the street, we again see the same children waiting for their school bus +
+ ++ Suddenly, we see the same school bus crashing into NAINA.
+ ++ Sound of screeching tires can be heard. +
+ ++ The screen fades to black +
+ ++ FADE IN +
+ ++ Low piano keystroke plays in the background +
+ ++ CUT TO Digital Clock showing 7:00 AM. +
+ ++ NAINA wakes up with a jump this time. Scared on her bed, sweating like a pig. +
+ ++ The same shot of the magazines and her feet touching the ground. +
+ ++ Her room is very different this time, it is darker, greyer and messier. +
+ ++ FADE TO BATHROOM +
+ ++ The water is running in the sink. NAINA is away from the mirror, toward the camera, lost and scared. She is blocking the reflection in the mirror for the camera. +
+ ++ Suddenly a voice over can be heard +
+ ++ “What are you scared of?” +
+ ++ NAINA is shocked to her core listening to the voice. She immediately turns toward the mirror since the sound came from behind her. She sees a blurry figure. She rubs her eyes and leans forward. She can see the eyes of the figure which is making eye contact with NAINA. It was her own reflection. She is shocked to look at herself. +
+ ++ REFLECTION: BOOOO!! +
+ ++ NAINA jumps back, away from the mirror in fear with no clue as to what is happening with her. She again looks into the mirror, checks if her reflection is mirroring her. It is! +
+ ++ NAINA starts crying desperately. +
+ ++ REFLECTION: Thought that the “BOOOO!” would be clear enough.. +
+ ++ NAINA: Wh-What are you? +
+ ++ The “Reflection” was amazed by such a question. +
+ ++ REFLECTION: “Wh-wh-wh” Do I stutter out a question like this? +
+ ++ NAINA: What are you ?.. +
+ ++ The Reflection smiles. +
+ ++ REFLECTION: I am what we call a paradox, the question and the answer at the same time, a paradigm all together. +
+ ++ NAINA : (shouts) It is not possible.. +
+ ++ REFLECTION: Or maybe not, may be I am just a product of your imagination or a part of your schizophrenic mind. Or it is also possible that I am a divine intervention, that’d be something unexpected, isn’t ? +
+ ++ NAINA: (shouts again) No.. this is not possible! +
+ ++ REFLECTION: Impossible is the kind of haircut you have. I look like a dork for God’s sake. +
+ ++ The Reflection starts playing with her hair looking at it in dislike. +
+ ++ NAINA : What is it that you want? +
+ ++ REFLECTION: I want you to start asking the right questions. +
+ ++ NAINA looks around, it is still her bathroom. +
+ ++ NAINA : Where am I ? What is going on with me… Here ? I do not understand anything. +
+ ++ REFLECTION: Wow! One at a time.. I said the right questions not a multi questions pop quiz! +
+ ++ NAINA : WHERE AM I? +
+ ++ REFLECTION: Look around from your point of view, it is still your bathroom! +
+ ++ NAINA: It is not possible again.. It does not look like my home.. There.. There are no colors.. From where does this noise keep interrupting me?! Th-This is not anything I know. +
+ ++ REFLECTION: How can you be so sure? You must have heard the saying “Ignorance is a blessing”. I.. on the other hand..like to believe that “ Ignorance leads to knowledge”. +
+ ++ NAINA: Knowledge? +
+ ++ REFLECTION: Yes! Knowledge! Look at yourself, lost in your own ignorance, asking yourself those questions: Where, What,.. But even except from me maybe.. +
+ ++ NAINA : What do you mean? +
+ ++ REFLECTION: The further you fall away from knowledge the further you approach knowledge at its pure state! +
+ ++ NAINA: This is just a dream… I am just dreaming… +
+ ++ The reflection continues her speech as if she never heard the last part. +
+ ++ REFLECTION: It is the knowledge about the truth, about the sins, your hidden memories… about you, me, us,.. And.. Her +
+ ++ NAINA:Her? +
+ ++ REFLECTION: Don’t you remember? +
+ ++ NAINA: Remember what? +
+ ++ The headache is getting worse for NAINA +
+ ++ REFLECTION: Think harder! The headache is not gonna stop! +
+ ++ NAINA: I don’t remember!!! +
+ ++ REFLECTION: NAINA, NAINA…!! Do you see, where the knowledge leads you?! Leading you to forget! Leading you to meet me! Leading you to somewhere you do not have a clue about! Do you know how much pain she was in? How much she kept thinking and hoping? Do you? +
+ ++ NAINA: I don’t know what are you talking about ?… +
+ ++ Her headache grows stronger, she starts gripping her head hard! +
+ ++ REFLECTION: You don’t remember, do you? No, you don’t, otherwise you would not be here, now would you? +
+ ++ NAINA: I have had enough of this. Just tell me what has happened? +
+ ++ REFLECTION: It would be too easy to give all the answers on a plate, look at who you are talking to ? Look at me!! If you can’t remember, how can I possibly tell you ? +
+ ++ NAINA: What is that I have to remember ? How can I remember it? +
+ ++ The REFLECTION smiles again +
+ ++ REFLECTION: Didn’t I tell you the answer already “Ignorance is a blessing”! In order to remember you have to forget! Isn’t it ironic? +
+ ++ The REFLECTION laughs. NAINA seems lost! +
+ ++ NAINA: What do you mean!! One moment, you are saying you can’t tell me, the other you say something completely opposite! You are playing with me! WHO ARE YOU?? +
+ ++ REFLECTION: OH GOD!!! Let’s not restart the whole conversation again!! +
+ ++ NAINA: How can I remember something I have forgotten!!! What are babbling about! Her, Her, Who is “Her”? +
+ ++ REFLECTION: NAINA, innocent NAINA, why can’t you see the meaning of it? Forget to remember? One never forgets a thing, it is just that when one has stored so much information, learned so many things, year after year that eventually he starts forgetting the most important things, all those things when cumulated result in a sum of all our base memories, feelings and experiences, nothing more, nothing less. However, one chooses to suppress their innermost, traumatic experiences using everyday facts and figures, for reasons unknown to us. Maybe the truth is simply a bit too much for you to handle. +
+ ++ NAINA: Are you trying to say that the key of this place is my ability to remember? I had never asked to be here in the first place. I honestly do not understand what you want me to remember! +
+ ++ REFLECTION: I wonder, is it me that wants “you” to remember or is it you yourself? Tell me Naina, what are dreams? Taking the words of Shakespeare .. dreams are the “children of an idle mind”, and how right he was! Dreams are our thoughts themselves, one’s deep memories trying to come through, trying to escape! Trying to talk to you, Naina, but have you been listening? +
+ ++ NAINA: It is a trick.. You are trying to trick me.. I am not supposed to be here! +
+ ++ REFLECTION: What were you dreaming last night, Naina? +
+ ++ Listening to this, Naina suddenly freezes, her headache is too much. She cannot think at all. +
+ ++ REFLECTION: You were dreaming about her. Think! Think harder! Naina… weren’t you? +
+ ++ NAINA: Y..Yes, I think so, .. She was there all alone.. Waiting for someone… someone special.. But she does not seem to come… +
+ ++ REFLECTION: How long she had been waiting, Naina ? How long has she been waiting? +
+ ++ NAINA: She has been waiting forever! She believes she will come. She does not give up hope. +
+ ++ REFLECTION: Why isn’t she coming ? Did she forget about her? +
+ ++ NAINA:N-NO.. +
+ ++ Naina is silently looking into her reflection. +
+ ++ REFLECTION: How does she look like, Naina? +
+ ++ NAINA: She- +
+ ++ Naina pauses in disbelief +
+ ++ Naina: I do not remember… I cannot remember.. +
+ ++ REFLECTION: You can’t remember her face? (smiles) What happened Naina? Is there something else you can remember? +
+ ++ NAINA: I was with her.. It’s you!! It’s all you playing games with me +
+ ++ (Reflection laughs) +
+ ++ REFLECTION: It seems you really do not want to listen do you? Just look at your hands…. +
+ ++ Naina looks at her hands, they are all covered with blood, dripping from her hands. Blood.. Not hers.. From someone else… +
+ ++ NAINA: WHAT IS THIS ??? +
+ ++ REFLECTION: (laughs) +
+ ++ Oh-oh you tell me Naina! +
+ ++ Naina: I know it’s all you playing games with me! It’s all your fault! IT’S ALL YOU! +
+ ++ Naina tries to grab the reflection, but her hands just hit the mirror leaving bloody handprints on it. +
+ ++ NAINA: It’s all a dream… +
+ ++ REFLECTION: Have you ever wondered that maybe that dream about her was not one, that it might have been reality? Maybe this is not a dream, maybe your so called “life” is a dream! Maybe you aren’t even alive at all! (laughs) Or maybe it’s a question of sanity Naina! I don’t think that talking to your reflection is what you call the sanest thing on the planet. +
+ ++ The REFLECTION smiles, Naina seems to be totally lost. The noise is getting louder, her heart beating faster and faster. +
+ ++ NAINA: Where am I .. This isn’t a world! +
+ ++ REFLECTION: You are right.. In a way.. Different perspectives, different worlds.. Life is just a dream, Naina.. A dream.. +
+ ++ Blood starts dripping from the Reflection’s eyes! +
+ ++ REFLECTION : That– +
+ ++ Naina covers her eyes with her hands, two hands suddenly approach Naina…They come from the mirror… +
+ ++ REFLECTION +
+ ++ –ends! +
+ ++ They suddenly grab Naina and push her to the mirror, her face is pressed against the mirror! Face to face with herself! +
+ ++ REFLECTION: Fading memories, new memories! And a dream Naina, a ream of you in a world without you! (smiles) Welcome to my world! +
+ ++ SCREAM +
+ ++ ACT III +
+ ++ FADE IN: +
+ ++ Low key piano strokes play. +
+ ++ CUT TO Digital Clock showing 7:00 AM. +
+ ++ We are again inside the room. +
+ ++ NAINA wakes up suddenly, this time she looks around her room, it is still bleak and the posters seem faded and colorless. +
+ ++ She shuts off the alarm, the radio is playing static this time. +
+ ++ We see the same shot of her feet touching the ground. The magazines on the floor are colorless. There is no noise of the traffic or the hustle and bustle of city life. It’s all quiet. +
+ ++ FADE TO bathroom +
+ ++ The camera is focused on the mirror. +
+ ++ NAINA rushes inside the bathroom, we can only see her back and messy hair. She looks at herself in the mirror, the mirror reflects all her movements precisely. +
+ ++ She knocks on the mirror. +
+ ++ NAINA: +
+ ++ HELLO!!?? +
+ ++ There is no reaction from the reflection. NAINA smiles. +
+ ++ NAINA: +
+ ++ Was nothing but a dream. +
+ ++ She turns her back away from the mirror and walks away. She doesn’t notice the water that had been flowing from the water tap on the sink. The flow is fast but there is no noise. No sound. +
+ ++ The camera zooms in on the mirror and the door of the bathroom that is visible until the edges of the mirror are not visible. +
+ ++ CUT TO Common Room +
+ ++ We see NAINA walking in a fast pace from the bathroom toward the kitchen. We see her feet stomp on the ground but there is no noise. Only a grey and dark common room with curtains closed, no light coming in. +
+ ++ We can see the fluorescent white light from the kitchens tube light lighting up the common room area +
+ ++ FADE TO camera inside the kitchen looking toward the kitchen door. +
+ ++ We can see the dining table, a pack of 12 pieces of bread that looks like it has been open since a few days. The bowl in which we saw boiled milk seems to be empty. We can see the pressure cooker on the stove, it seems to have been untouched since a few days. +
+ ++ NAINA walks into the kitchen through the door with a smile on her paranoid face. +
+ ++ Her smile disappears as she doesn’t find her MOM in the kitchen. She walks toward the stove, glaring at the knife… The same knife that she was using to cut onions now lies next to finely diced stale onions. +
+ ++ The camera now pans and follows her face from not so far distance +
+ ++ She bumps herself on the dining table, causing the bottle of milk to fall down and make the glass shatter but there is no sound except muffled sound of something glass like falling for the audience. She doesn’t hear it and continues to see the half eaten omelette still on the plate. +
+ ++ She then looks at the white milk that is flowing outward from the shattered glass to fill the dark floor. +
+ ++ NAINA: +
+ ++ What… is going on? +
+ ++ She now panics and starts breathing heavily heading outside. +
+ ++ FADE TO the common room +
+ ++ We see NAINA now walking briskly towards the door that opens outside the apartment. She opens the door, and walks out. +
+ ++ CUT TO Shot of Empty Street outside of Apartment facing the door +
+ ++ We can see the color of the door of the house has faded away. We see NAINA staring into oblivion. The towering apartment block looks dull. The street is empty, all gray, nothing but silence surrounds the once busy. Except the sound of wind blowing past NAINA. +
+ ++ The children who were waiting for their bus are now no more waiting for their bus. +
+ ++ CUT TO apartment complex +
+ ++ Outside the gate, no traffic can be seen. There are no people rushing in and out of the complex. Visuals of empty shopping streets with their shutters down. +
+ ++ Low key piano starts playing with a shot of birds flying across the sky. +
+ ++ Fade to black +
+ ++ TEXT: +
+ ++ A dream of you in a world without you… +
+ ++ -FIN- +
\ No newline at end of file diff --git a/content/blog/2017-05-20-.md b/content/blog/2017-05-20-.md new file mode 100644 index 0000000..4e9b0ea --- /dev/null +++ b/content/blog/2017-05-20-.md @@ -0,0 +1,15 @@ +--- +title: "2016" +author: rhnvrm +type: post +date: -001-11-30T00:00:00+00:00 +draft: true +url: blog/?p=192 +categories: + - uncategorized +format: status + +--- +2017 has been a dull year. It has felt even more dull after the fast paced year that 2016 was. + + \ No newline at end of file diff --git a/content/blog/2017-05-20-xfce4-keyboard-shortcuts-for-clementine.md b/content/blog/2017-05-20-xfce4-keyboard-shortcuts-for-clementine.md new file mode 100644 index 0000000..6f8f2d9 --- /dev/null +++ b/content/blog/2017-05-20-xfce4-keyboard-shortcuts-for-clementine.md @@ -0,0 +1,34 @@ +--- +title: Adding xfce4 Keyboard Shortcuts for Clementine or Spotify +author: rhnvrm +type: post +date: 2017-05-20T15:08:44+00:00 +url: blog/2017/05/20/xfce4-keyboard-shortcuts-for-clementine/ +categories: + - foss + - notes + - tutorials + - uncategorized + - xfce +tags: + - fedora + - foss + - linux + - music + - productivity + - tutorial + - xfce + +--- +xfce4 has default media key settings for Pragha music player. Although, if you use clementine music player you can use keyboard shortcuts to control it with DBus and MPRIS. + +Clementine is known as org.mpris.clementine and you can add the following entries to your Keyboard Settings > Application Shortcuts + +If you use spotify, it is registered as org.mpris.MediaPlayer2.spotify on qdbus. + +qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.Next +qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.Pause +qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.Prev ++ +
\ No newline at end of file
diff --git a/content/blog/2017-06-26-take-out-a-moment-and-think-are-you.md b/content/blog/2017-06-26-take-out-a-moment-and-think-are-you.md
new file mode 100644
index 0000000..b5b489c
--- /dev/null
+++ b/content/blog/2017-06-26-take-out-a-moment-and-think-are-you.md
@@ -0,0 +1,20 @@
+---
+title: Take out a moment and…
+author: rhnvrm
+type: post
+date: 2017-06-26T09:12:19+00:00
+url: blog/2017/06/26/take-out-a-moment-and-think-are-you/
+client-modified:
+ - "1500191178"
+categories:
+ - uncategorized
+tags:
+ - psychology
+format: status
+
+---
+Take out a moment and think, are you going on the internet (reddit/youtube/dota2) because you want to be entertained or because you are really afraid of being bored?
+
+Boredom comes from having a mind that wants to be entertained. Instead, strive for cultivating a creative mind that can entertain itself (and others). The key word here is “cultivate”.
+
+#psychology
\ No newline at end of file
diff --git a/content/blog/2017-07-27-216.md b/content/blog/2017-07-27-216.md
new file mode 100644
index 0000000..b8f29a4
--- /dev/null
+++ b/content/blog/2017-07-27-216.md
@@ -0,0 +1,24 @@
+---
+author: rhnvrm
+type: post
+date: 2017-07-27T20:40:51+00:00
+url: blog/2017/07/27/216/
+categories:
+ - uncategorized
+tags:
+ - misc
+ - sociology
+format: status
+
+---
+While conformity and the playing out of social roles can help shore-up our bridges of self-deception, this may in the end turn out to be more of a curse, than a blessing. For given the brevity of life it is far better to become aware of our deceptions while we still have time to change. But sadly, it is often only when one is at death’s doorstep that they come to recognize the vanity and falseness of their existence up to that point.
+
+This idea is illustrated in The Death of Ivan Ilyich, one of Leo Tolstoy’s masterpieces. The main character in this work is a Russian magistrate who attains great success in rising to the top of Russian society. However, while enjoying the fruits of his labours, he becomes afflicted by a terminal illness and reflecting deeply on the meaning of life is haunted by a nagging feeling that his life was wasted:
+
+> “It is as if I had been going downhill while I imagined I was going up. And that is really what it was. I was going up in public opinion, but to the same extent life was ebbing away from me. And now it is all done and there is only death.” (Leo Tolstoy, The Death of Ivan Ilyich)
+
+This passage by Tolstoy strikes at the root of the danger of living at the mercy of our self-deceptions. Maintaining our illusions requires a massive amount of time and energy and often diverts our attention to vain pursuits. Therefore, our ability to engage in projects and strive after goals which would lead to a more fulfilling life is greatly restricted. To ensure that we don’t face a similar fate as Ivan Ilyich, it is crucial that we take a more honest look at ourselves and the life path that our deceptions have led us down. While most of us have spent years, if not decades, relying on our many self-deceptions, it is still within our ability to break down our false self.
+
+_Source:_
+
+
][1]
+
+I attended HackTheNorth, which is Canada’s Biggest Hackathon and takes place at University of Waterloo campus. I was glad to join over 1000 students from around the world at the University of Waterloo to collaborate and create something extraordinary in 36 hours. I didn’t go in as a team as the visa process was a bit delayed and so none of the participants from India knew if they would be able to go. Well, eventually, we were three people from different universities from New Delhi who formed a team when we met in Canada.
+
+++ + + ++ We are excited to announce that Canadian Prime Minister Justin Trudeau will be giving the welcoming remarks at opening ceremonies tonight! pic.twitter.com/cWePNlFXYj +
+ ++ — Hack the North (@HackTheNorth) September 15, 2017 +
+
++ + + ++ On the way to #HacktheNorth by the shuttle. Super excited! pic.twitter.com/T2L3mYzb03 +
+ ++ — Rohan Verma (@rhnvrm) September 15, 2017 +
+
++ + + ++ @JustinTrudeau kicking off @HackTheNorth ! Proud to be Canadian 🇨🇦 pic.twitter.com/3RaIHlJYWF +
+ ++ — Yingning (@yingninggui) September 16, 2017 +
+
++ + + ++ Finally found where we will be hacking for the weekend at @HackTheNorth! Such an amazing space! #HacktheNorth pic.twitter.com/yxsWGv7oWr +
+ ++ — Rohan Verma (@rhnvrm) September 16, 2017 +
+
++ + + + + +# The Project + +We built ToroGo, an app powered by Data Science to help newcomers decide the perfect neighborhood for someone moving to Toronto. I worked on writing the API for the backend and the entire data collection and analysis involved in the project. + + + ++ Let Data Science decide the perfect neighborhood for you in Torontohttps://t.co/LwisOhmlZV#HacktheNorth pic.twitter.com/0L9oIZVmfk +
+ ++ — Rohan Verma (@rhnvrm) September 17, 2017 +
+
+ We traveled all the way from India and while booking our AirBnb we were overwhelmed with the options available to us. Although, websites like tripadvisor help with reviews of an area, it is often not enough. Toronto welcomes over 40 million visitors annually, and is the leading tourism destination in Canada. So we decided to use the power of data science to help travelers like us solve where to stay. +
+ ++ In our discussions we came up with three important things that users look at while deciding where to live in a new city: +
+ ++ The app requests the user to enter his priority for the above mentioned features and suggests the top 5 suggested places that would suit the user based on data analysis. +
+ ++ Along with that we provide the user easy access to check the live currency exchange rates using XE.com powerful api instantly from the app. It supports searching from 100s of currencies and can instantly give the live exchange rate. +
+ ++ We used open datasets available from the Canadian Open Dataset website and Airbnb to build an aggregate score of around 130 sub-areas of Toronto City. We chose three parameters, +
+ ++ The data analysis can be viewed in our iPython Notebooks +
+ + + ++ After this, we wrote an algorithm based on Euclidean Distance between these ratings and the user’s preferences to suggest the most suitable locations for the user. +
+ ++ The currency converter is powered by XE.com‘s API and we were able to make an intuitive UX for searching through the currencies. +
+ +|
+ Odissi Single Hand Mudras + |
+
+
+ |
+
+
+
+ |
+
+
+
+ |
+
+
+
+ |
+
| + Vardhamana + | + ++ Pushpa + | + ++ Baana + | + ++ Teera + | +
+
+ |
+
+ + | + ++ | + ++ | +
(setq TeX-view-program-selection '((output-pdf "PDF Tools"))
+ TeX-view-program-list '(("PDF Tools" TeX-pdf-tools-sync-view))
+ TeX-source-correlate-start-server t
+)
+
+Similarly, we can also setup syncing between TeX and the PDF which I will cover sometime later when the need arises.
\ No newline at end of file
diff --git a/content/blog/2017-12-20-switching-to-spacemacs-based-on.md b/content/blog/2017-12-20-switching-to-spacemacs-based-on.md
new file mode 100644
index 0000000..afb880a
--- /dev/null
+++ b/content/blog/2017-12-20-switching-to-spacemacs-based-on.md
@@ -0,0 +1,18 @@
+---
+title: Switching to Spacemacs Based on…
+author: rhnvrm
+type: post
+date: 2017-12-20T11:51:35+00:00
+url: blog/2017/12/20/switching-to-spacemacs-based-on/
+client-modified:
+ - "1513770694"
+categories:
+ - uncategorized
+tags:
+ - dgplug
+format: aside
+
+---
+**Switching to Spacemacs**
+
+Based on mbuf (@shakthimaan)’s session in #dgplug about Reading and Writing habits, (https://dgplug.org/irclogs/2017/Logs-2017-12-18-13-23.txt) have decided to move to spacemacs from vim, just for Org mode. Let’s see how it goes!
\ No newline at end of file
diff --git a/content/blog/2017-12-21-deep-learning-through-the-lens-of-the-information-plane.md b/content/blog/2017-12-21-deep-learning-through-the-lens-of-the-information-plane.md
new file mode 100644
index 0000000..b53d20a
--- /dev/null
+++ b/content/blog/2017-12-21-deep-learning-through-the-lens-of-the-information-plane.md
@@ -0,0 +1,198 @@
+---
+title: Deep Learning Through the Lens of the Information Plane
+author: rhnvrm
+type: post
+date: 2017-12-21T14:31:58+00:00
+url: blog/2017/12/21/deep-learning-through-the-lens-of-the-information-plane/
+categories:
+ - projects
+tags:
+ - datascience
+ - deeplearning
+ - informationtheory
+ - math
+ - neuralnetwork
+ - python
+
+---
+The ridiculous effectiveness of Deep Learning has lead to research on tools that help to analyze these Deep Neural Network based “black boxes”. Recent research papers by the Information Theory community to analyze has rise to a new tool, The Information Plane, which can help analyze and answer various questions about these networks. This article, provides a brief overview of the concepts from information theory required to develop an understanding of the Information Plane, followed by a replication study of the implementation of the paper that introduces this theory with respect to Deep Neural Networks.
+
+## **1. Introduction**
+
+Information Theory has long been considered marginal to Statistical Learning theory and has usually not been studied by Machine Learning researchers. It is considered to be an integral part of Communication Engineering and is often known to be the theory of Data Compression and Error Correcting Codes. With increased compute power enabled through GPUs, a new interest in Deep Learning (LeCun et al.[1]) has re-emerged. Although, Deep Learning provides ridiculous effectiveness, there is pretty much no fundamental theory behind these machines and they are often criticized for being used as mysterious “black boxes”[2]. This has lead to major corporations like Intel investing in research that focuses on building an understating of why deep networks work the way they do and has resulted in the recent paper on “Opening the Black Box of Deep Neural Networks via Information Theory” by Ravid Schwartz-Ziv and Naftali Tishby [2] which studies these by analyzing their information-theoretic properties and tries to provide a framework to study them using the Information Plane which have been based upon the work done by Naftali Tishby earlier [3]. The theory provides tools, such as the Information Plane, that can be used to reason about what happens during deep learning, a study of what happens during Deep Neural Network (DNN) learning during training and some hints for how the results can be applied to improve the efficiency of deep learning.
+
+One of the observations from the paper [2] is that DNN training involves two distinct phases: First, the network trains to fully represent the input data and minimize the error in generalization and then, it learns to forget the irrelevant details by compressing the representation of the input.
+
+Another observation is a potential explanation for why transfer learning works when the top most layers are retrained for similar tasks, but I skip it for further work as it is beyond the scope of this current study, although it has been mentioned while discussing the Asymptotic Equipartition Property.
+
+From an engineering standpoint, the papers provide a very relevant theory which could help answer questions such as, if the trained model is optimal or not, if there exist any design principles for such machines, or if the layers or neurons represent anything and if the algorithms we use can be improved or not.
+
+The following paper contributes via providing an overview of the fundamentals of Information Theory required to study these papers, followed by a detailed summary of the work related to the Information Plane and Deep Learning and finally a replication study containing a re implementation study and its results and comparison with the results of the original authors as well as the critics of the paper. The goal of the paper was to dive into cutting edge research and implement the state of the art and verify the results of both the original authors \[2\] \[3\] as well as the critique [4] submitted to ICML 2018.
+
+## **2. Concepts from Information Theory**
+
+### **2.1 Markov Chain**
+
+A Markov process is a “memory-less” (also called “Markov Property”) stochastic process. A Markov chain is a type of Markov process containing multiple discrete states. That is being said, the conditional probability of future states of the process is only determined by the current state and does not depend on the past states. [5]
+
+### **2.2 KL Divergence**
+
+KL divergence measures how one probability distribution
+
+
+
+
+
+
+
+
+
+
+
+










pyenv virtualenv -p /usr/bin/python2 venv2 +pyenv virtualenv -p /usr/bin/python3 venv3 ++ + + +The \`-p\` flag is documented in the virtualenv docs as: + +> The Python interpreter to use, e.g., –python=python2.5 will use the python2.5 interpreter to create the new environment. The default is the interpreter that virtualenv was installed with (like
<span class="pre">/usr/bin/python</span>)
+
+Afterwards, it was easy to change the environment inside emacs using `SPC-m-v-s` and choose `venv3` for using python3 instead of python2. Similarly, `-V` can be used instead of `-v` to set virtualenvs using directories.
+
+I’m looking forward to setting up the [Pipenv.el][1] to be able to use [pipenv][2] as well.
+
+**References:**
+
+ * + +\ No newline at end of file diff --git a/content/blog/2018-03-18-extract-filenames-without-their-extensions.md b/content/blog/2018-03-18-extract-filenames-without-their-extensions.md new file mode 100644 index 0000000..ca9188f --- /dev/null +++ b/content/blog/2018-03-18-extract-filenames-without-their-extensions.md @@ -0,0 +1,19 @@ +--- +title: Extract filenames without their extensions… +author: rhnvrm +type: post +date: 2018-03-18T15:03:10+00:00 +url: blog/2018/03/18/extract-filenames-without-their-extensions/ +client-modified: + - "1521385389" +categories: + - tutorials + - uncategorized +tags: + - linux +format: aside + +--- +Extract filenames without their extensions and put it in the clipboard + +
ls -C | awk -F"." '{print $1}' | xclip -selection c
\ No newline at end of file
diff --git a/content/blog/2018-03-20-today-i-integrated-the-wordpress.md b/content/blog/2018-03-20-today-i-integrated-the-wordpress.md
new file mode 100644
index 0000000..c55dd89
--- /dev/null
+++ b/content/blog/2018-03-20-today-i-integrated-the-wordpress.md
@@ -0,0 +1,14 @@
+---
+title: Today I integrated the WordPress…
+author: rhnvrm
+type: post
+date: 2018-03-20T18:01:32+00:00
+url: blog/2018/03/20/today-i-integrated-the-wordpress/
+client-modified:
+ - "1521568892"
+categories:
+ - uncategorized
+format: aside
+
+---
+Today I integrated the WordPress API into my Homepage to display my projects. It now uses an Ajax call to fetch the latest posts in the Project category. Also, I removed the font-awesome icons which were messing up the profile links.
\ No newline at end of file
diff --git a/content/blog/2018-05-11-genie-the-voice-enabled-coding-companion-winner-dell-intern-hackathon.md b/content/blog/2018-05-11-genie-the-voice-enabled-coding-companion-winner-dell-intern-hackathon.md
new file mode 100644
index 0000000..b715f16
--- /dev/null
+++ b/content/blog/2018-05-11-genie-the-voice-enabled-coding-companion-winner-dell-intern-hackathon.md
@@ -0,0 +1,18 @@
+---
+title: Genie – The Voice Enabled Coding Companion – Winner Dell Intern Hackathon
+author: Rohan Verma
+type: post
+date: 2018-05-11T14:27:21+00:00
+url: blog/2018/05/11/genie-the-voice-enabled-coding-companion-winner-dell-intern-hackathon/
+categories:
+ - projects
+tags:
+ - alexa
+ - hackathon
+ - productivity
+ - python
+
+---
+
+
+Genie is a Voice Assistant made up of three agents who talk to you and help you automate software engineering tasks. Watch the video to understand what it can do for you.
\ No newline at end of file
diff --git a/content/blog/2018-05-11-my-personal-opinion-about-learning.md b/content/blog/2018-05-11-my-personal-opinion-about-learning.md
new file mode 100644
index 0000000..5df02bb
--- /dev/null
+++ b/content/blog/2018-05-11-my-personal-opinion-about-learning.md
@@ -0,0 +1,18 @@
+---
+title: My personal opinion about learning frameworks
+author: Rohan Verma
+type: post
+date: 2018-05-11T14:19:01+00:00
+url: blog/2018/05/11/my-personal-opinion-about-learning/
+client-modified:
+ - "1526048340"
+categories:
+ - uncategorized
+format: aside
+
+---
+My personal opinion about learning specific topics and frameworks is that it is not required to be done. In fact, it is only due to our education that we end up learning frameworks in the “learn first – then apply” kind of way. I would suggest trying a different approach.
+
+Decide on what you want to automate. What I mean by this is think of your day to day activities that you do online which you can automate. After you have found a problem (you can also try to solve others problems), sit down and list down what tools you think might help you to solve said problem. It could be a simple python script. After you have written the script, think of how you can make it a product by having a User Interface. A simple web interface can be created using Flask that runs the script you wrote on the press of a button. Finally, you will want to deliver this product to users, for which you can use Heroku/Digital Ocean/Openshift etc.
+
+In this way, you will always be motivated to find the solution and not waste much time in reading through things that will be essentially off-topic to you.
\ No newline at end of file
diff --git a/content/blog/2018-05-16-reviving-an-old-samsung-n150-netbook-and-making-it-a-solid-dev-environment.md b/content/blog/2018-05-16-reviving-an-old-samsung-n150-netbook-and-making-it-a-solid-dev-environment.md
new file mode 100644
index 0000000..365537c
--- /dev/null
+++ b/content/blog/2018-05-16-reviving-an-old-samsung-n150-netbook-and-making-it-a-solid-dev-environment.md
@@ -0,0 +1,56 @@
+---
+title: Reviving an old Samsung N150 Netbook and making it a solid Dev Environment
+author: Rohan Verma
+type: post
+date: 2018-05-16T14:51:23+00:00
+url: blog/2018/05/16/reviving-an-old-samsung-n150-netbook-and-making-it-a-solid-dev-environment/
+categories:
+ - foss
+ - notes
+ - xfce
+tags:
+ - archlinux
+ - foss
+ - gnu
+ - linux
+ - productivity
+ - xfce
+
+---
+I had an old Samsung N150 netbook lying around in my parent’s house. It was an amazing netbook and I remember fondly using it when my parents were not using it to browse the internet and sometimes even use it for school work. It came with Windows Vista if I recall correctly but I had installed Windows XP service pack 3 on it because as we know, Vista sucked! Well, the netbook was very solid, it even ran small games such as Fifa Manager etc and came with a solid keyboard, ethernet and VGA as well for connecting to a big screen. Although, its current state is pretty dismal with Avast Antivirus beeping every other second with a “Threat has been detected” alert as it is riddled with loads of russian malware.
+
+After thinking a lot, I decided to install Arch linux using Anarchy Linux as I always wanted to have an Arch machine. I have only ever used it before on my previous laptop but had again reverted to Fedora on it a few days later as I could not upgrade that often on University internet.
+
+The first step was to download Anarchy from https://anarchy-linux.org/download/
+
+> ## Anarchy Linux is a distribution aimed at bringing the Linux revolution to the world. We believe that Linux is the way of the future for desktop computing and provide you with a platform to install a custom Arch based operating system just the way you like. Anarchy Linux is intended for both novice and advanced users alike.
+
+To write to the USB drive, I used:
+
+`sudo dd if=anarchy-1.0.0-x86_64.iso of=/dev/sdb1 bs=4M && sync`
+
+The boot sequence worked properly and opened the Anarchy boot screen. I selected the option to start the live environment to start the installer. The installer however failed to start the GUI installer and instead started the text based installer. However, the experience in my opinion was much better than most GUI installers I have used like Anaconda for Fedora. The only thing that comes to mind is that one should connect to the wifi first before starting the installer using wifi-menu. Otherwise package installation will probably be something that would have to be done after booting for the first time.
+
+My first attempt failed, I had selected the option to download a few custom packages like text editors but their download failed for some reason and the whole process had to be restarted. The download of around 700 MB was wasted along with 1 hour. In my second attempt I went with just the default packages and the download size came to be around 396 MB.
+
+The problem, I figured, was due to a “improperly signed by the maintainer” (https://plus.google.com/108897040723051595529/posts/M3REzAKNWCf) on the numix circle package. I could not find the solution, but I tried to disable the sign checking by setting SigLevel to Never from Required in the pacman.conf options. This did not work and then I decided that it might be more suitable to boot into the OS first then try to solve the issue later. So I decided to skip installation of the DE as the failiure was happening with that. But even this did not work out.
+
+What I figured was happening was nothing but the Anarchy installer failing to pacstrap as it did not retry the downloads which timedout.
+
+None of this worked so I decided to do a manual install using Arch Linux ISO, as I had used that before successfully. I also knew that pacstrap retried the downloads instead of giving an error.
+
+The steps I followed are given in Arch Wiki (https://wiki.archlinux.org/index.php/installation_guide)
+
+We have to install the sudo package. It allows using
+
+`pacman -S sudo`
+
+Then run visudo command and add your user to the sudoers.
+
+`rhnvrm ALL=(ALL) ALL`
+
+The next step was to install XFCE4 and XFCE4 Goodies.
+
+`pacman -S xfce4 xfce4-goodies`
+
+After this, I started to set up the machine according to my liking.
\ No newline at end of file
diff --git a/content/blog/2018-06-07-emacs-starts-a-bit-slow.md b/content/blog/2018-06-07-emacs-starts-a-bit-slow.md
new file mode 100644
index 0000000..6f3bc08
--- /dev/null
+++ b/content/blog/2018-06-07-emacs-starts-a-bit-slow.md
@@ -0,0 +1,16 @@
+---
+title: Emacs starts a bit slow…
+author: Rohan Verma
+type: post
+date: 2018-06-07T10:11:52+00:00
+url: blog/2018/06/07/emacs-starts-a-bit-slow/
+client-modified:
+ - "1528366312"
+categories:
+ - uncategorized
+format: aside
+
+---
+Emacs starts a bit slow but it can be started as a daemon
+
+emacsclient -c -n -e '(switch-to-buffer nil)'\ No newline at end of file diff --git a/content/blog/2018-07-30-functional-options-for-testing-without-mocks-in-golang.md b/content/blog/2018-07-30-functional-options-for-testing-without-mocks-in-golang.md new file mode 100644 index 0000000..47e076d --- /dev/null +++ b/content/blog/2018-07-30-functional-options-for-testing-without-mocks-in-golang.md @@ -0,0 +1,101 @@ +--- +title: Functional Options for testing without mocks in Golang +author: Rohan Verma +type: post +date: 2018-07-30T16:55:48+00:00 +url: blog/2018/07/30/functional-options-for-testing-without-mocks-in-golang/ +categories: + - notes +tags: + - api + - golang + - notes + +--- +Suppose you have a HTTP request to be sent but don’t care about the result or errors. This request is sent through a function which is usually called inside a goroutine and is not in any way a core aspect of your main logic. The only important part is forming the actual request and the payload. When you wrote this function, you did not write tests as it would be a pain to make the function return something and check it. Now that the core component is completed, you want to test that the request formed is actually in fact created properly and abides by a small set of rules expected by the reader of the payload packet. + +Usually, structs are created with Option structs which hold parameters which are used inside New() constructors. These allow reducing the configurations down to initializing one config struct which can be set by the caller. Although, it is useful for the API creator, it can become cumbersome for the API user. As pointed out by [Dave Cheney][1], it obfuscates the API and causes problems with defaults. + +Another way is to use Functional Options, for example + +
+ type Server struct {
+ logger *logrus.Logger // optional
+ store databaste.Store // required
+ }
+
+ type ServerOption func(Server) Server
+
+ func WithLogger(logger *logrus.Logger) ServerOption {
+ return func(s Server) Server {
+ s.logger = logger
+ return s
+ }
+ }
+
+ func NewServer(store database.Store, options ...ServerOption) *Server {
+ s := Server{store: store}
+ for _, option := range options {
+ s = option(s)
+ }
+ return &s
+ }
+
+ func main() {
+ myServer := NewServer(myStore, WithLogger(myLogger))
+ }
+
+
+In the above example, we can set the logger without having to depend on config structs and obfuscating the API.
+
+Now that we have potentially solved configuration issues, we can move on to testing. To avoid writing mock functions, we can inject a function that actually performs the request. This way, the default method will be to use the actual implementation but the test can inject a function which simply returns the data we want to check in a way that would be easier for us to test with.
+
+
+// app.go
+// WithRequestSender sets the RequestSender for MyStruct.
+func WithRequestSender(fn func([]byte, *MyStruct)) Option {
+ return func(f *MyStruct) {
+ f.RequestSender = fn
+ }
+}
+
+// app_Test.go
+func TestMyStruct_save(t *testing.T) {
+ var result string
+
+ getResult := func(s []byte, p *MyStruct) {
+ result = string(s)
+ }
+ p := New(
+ WithLogger(log.New(os.Stdout, "TEST: ", log.Ldate|log.Ltime|log.Lshortfile)),
+ WithQueueSize(1000),
+ WithRequestSender(getResult),
+ )
+
+ Convey("Given some Content is created with some initial values", t, func() {
+ s := Content{
+ Token: 123,
+ }
+ Convey("When the struct is inserted into the queue and save is called", func() {
+ q := *p.GetFromQueue()
+ q <- s
+ p.save()
+ Convey("Then the result created by struct to be sent to endpoint", func() {
+ Convey("The result should begin with [", func() {
+ So(result[0], ShouldEqual, '[')
+ })
+ Convey("The result should end with ]", func() {
+ So(result[len(result)-1], ShouldEqual, ']')
+ })
+ Convey("The result should contain statement", func() {
+ So(result, ShouldContainSubstring, string(MyStmt))
+ })
+ })
+ })
+ })
+}
+
+
+The above way, enables us to check data that might be coming to us in some convoluted way without ever having to write complicated unreadable code or having to modify much of the actual implementation.
+
+ [1]: https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis
\ No newline at end of file
diff --git a/content/blog/2018-08-01-rewriting-lyric-api-in-golang.md b/content/blog/2018-08-01-rewriting-lyric-api-in-golang.md
new file mode 100644
index 0000000..5b85fab
--- /dev/null
+++ b/content/blog/2018-08-01-rewriting-lyric-api-in-golang.md
@@ -0,0 +1,31 @@
+---
+title: Rewriting Lyric API in Golang
+author: Rohan Verma
+type: post
+date: 2018-08-01T19:10:39+00:00
+url: blog/2018/08/01/rewriting-lyric-api-in-golang/
+categories:
+ - notes
+tags:
+ - golang
+ - js
+ - lyrics
+ - music
+ - node
+ - spotify
+
+---
+I had originally written a [Lyric API][1] as a hobby project way back using Node. I published it on github as a combination of API server hosted on [heroku][2] along with a library hosted on [NPM][3]. It still gets 50 downloads a week and the hosted [heroku API server][2] is actually used by many people even though it offers little to no functionality. I was recently looking at [wtf dashboard][4] and even contributed a [small patch][5] to it. [wtf][4] is written in Go and I am using it daily. I want to build a widget for Spotify on the dashboard. So I thought having lyrics was going to be very useful for this widget as I could display the current playing song on the widget and below it, the lyrics.
+
+A Go API for connecting with the Spotify Web API is already available but for getting the lyrics, I decided that since [Lyric API][1] I had written in Node was so small that I could essentially rewrite it in golang in less than a day.
+
+Voila! [Lyrics API Go][6] is now available with two providers at the moment (more than the what was initially in the Node project). I plan to add Genius as another provider soon.
+
+After that, the major work left would be to write a Current Song Fetcher using the Spotify Web API and based on the artist and song name, calling [Lyrics API Go][6] to fetch the lyrics and write the data to bytes and display it on the widget.
+
+ [1]: https://github.com/rhnvrm/lyric-api
+ [2]: https://lyric-api.herokuapp.com/api/
+ [3]: https://www.npmjs.com/package/lyric-get
+ [4]: https://github.com/senorprogrammer/wtf
+ [5]: https://github.com/senorprogrammer/wtf/pull/250
+ [6]: https://github.com/rhnvrm/lyric-api-go
\ No newline at end of file
diff --git a/content/blog/2018-08-20-automate-fast-download-of-a-large-files-through-ftp.md b/content/blog/2018-08-20-automate-fast-download-of-a-large-files-through-ftp.md
new file mode 100644
index 0000000..458e6ad
--- /dev/null
+++ b/content/blog/2018-08-20-automate-fast-download-of-a-large-files-through-ftp.md
@@ -0,0 +1,14 @@
+---
+title: Automate fast download of a large files through FTP
+author: Rohan Verma
+type: post
+date: 2018-08-20T06:27:08+00:00
+url: blog/2018/08/20/automate-fast-download-of-a-large-files-through-ftp/
+categories:
+ - notes
+tags:
+ - linux
+ - productivity
+
+---
+`lftp -e 'set net:timeout 10; pget -n 10 BigFile.zip; bye' -u UserName,PassWord ftp://BigFiles.com`
\ No newline at end of file
diff --git a/content/blog/2018-09-25-whistle-project-winner-ethindia-2018-hackathon.md b/content/blog/2018-09-25-whistle-project-winner-ethindia-2018-hackathon.md
new file mode 100644
index 0000000..fa80036
--- /dev/null
+++ b/content/blog/2018-09-25-whistle-project-winner-ethindia-2018-hackathon.md
@@ -0,0 +1,49 @@
+---
+title: Whistle Project – Winner EthIndia 2018 Hackathon
+author: Rohan Verma
+type: post
+date: 2018-09-25T10:45:25+00:00
+url: blog/2018/09/25/whistle-project-winner-ethindia-2018-hackathon/
+categories:
+ - projects
+tags:
+ - blockchain
+ - ethereum
+ - hackathon
+
+---
+

pactl list | grep "Monitor Source"
+
+After this, you can run:
+
+
+pactl load-module module-simple-protocol-tcp rate=48000 format=s16le channels=2 source=<SOURCE> record=true port=<PORT (eg 8000)>
+
+Next, you will need to download PulseDroid, the apk can be found in the Github repository or you can use the following command to download it using wget:
+
+wget https://github.com/dront78/PulseDroid/raw/master/bin/PulseDroid.apk
+
+Just enter the IP address of your machine (you can find it by running ifconfig) and the port you chose and press the Start button.
\ No newline at end of file
diff --git a/content/blog/2019-01-08-setting-so_reuseport-and-similar-socket-options-in-go-1-11.md b/content/blog/2019-01-08-setting-so_reuseport-and-similar-socket-options-in-go-1-11.md
new file mode 100644
index 0000000..d2f3dc9
--- /dev/null
+++ b/content/blog/2019-01-08-setting-so_reuseport-and-similar-socket-options-in-go-1-11.md
@@ -0,0 +1,85 @@
+---
+title: Setting SO_REUSEPORT and similar socket options in Go 1.11
+author: Rohan Verma
+type: post
+date: 2019-01-08T12:38:24+00:00
+url: blog/2019/01/08/setting-so_reuseport-and-similar-socket-options-in-go-1-11/
+categories:
+ - notes
+tags:
+ - golang
+ - networking
+
+---
+Go recently introduced a heavily requested feature that allows programmers to set socket options before accepting and creating connections. You can find a mention of this in [Go 1.11 Release Notes][1]. Although, not many have written on this and implementing this is a bit confusing due to a change in the way one has to implement this. So I decided to share this with others who might be interested in using this feature.
+
+By reading how support for this has been added, we can get an idea about how to go about implementing this. The release notes mention that a new [ListenConfig][2] type has been added. This type contains a Control function which needs to be implemented. This Control function should contain code to set the Socket Option.
+
+Let us see how one would start a UDP reader that performs a callback on receiving a packet.
+
+type UDPOptions struct {
+ Address string
+ MinPacketLength int
+ MaxPacketLength int
+}
+
+func StartUDPReader(opt UDPOptions, callback func([]byte)) {
+ addr, err := net.ResolveUDPAddr("udp", opt.Address)
+ if err != nil {
+ h.sysLog.Fatalf("address resoultion failed: %v", err)
+ }
+
+ conn, err := net.ListenUDP("udp", addr)
+ if err != nil {
+ h.sysLog.Fatalf("listen failed: %v", err)
+ }
+
+ packet := make([]byte, opt.MaxPacketLength)
+ for {
+ n, _, err := conn.ReadFromUDP(packet)
+ if err == nil && n >= opt.MinPacketLength && n <= opt.MaxPacketLength {
+ callback(packet)
+ }
+ }
+}
+
+This is how the reader would look after adding SO_REUSEPORT using the new way.
+
+func StartUDPReader(opt UDPOptions, callback func([]byte)) {
+ lc := net.ListenConfig{
+ Control: func(network, address string, c syscall.RawConn) error {
+ var opErr error
+ err := c.Control(func(fd uintptr) {
+ opErr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEPORT, 1)
+ })
+ if err != nil {
+ return err
+ }
+ return opErr
+ },
+ }
+
+ lp, err := lc.ListenPacket(context.Background(), "udp", opt.Address)
+ if err != nil {
+ h.sysLog.Fatalf("dial failed: %v", err)
+ }
+
+ conn := lp.(*net.UDPConn)
+ err = ipv4.NewPacketConn(conn).SetControlMessage(ipv4.FlagDst|ipv4.FlagInterface, true)
+ if err != nil {
+ h.sysLog.Fatalf("set control msg failed: %v", err)
+ }
+
+ packet := make([]byte, opt.MaxPacketLength)
+ for {
+ n, _, err := conn.ReadFromUDP(packet)
+ if err == nil && n >= opt.MinPacketLength && n <= opt.MaxPacketLength {
+ callback(packet)
+ }
+ }
+}
+
+Using this approach we can reuse the port and have zero downtime, between restarts by starting the new reader before stopping the currently running reader.
+
+ [1]: https://golang.org/doc/go1.11#net
+ [2]: https://golang.org/pkg/net/#ListenConfig
\ No newline at end of file
diff --git a/content/blog/2019-02-23-.md b/content/blog/2019-02-23-.md
new file mode 100644
index 0000000..44f1a84
--- /dev/null
+++ b/content/blog/2019-02-23-.md
@@ -0,0 +1,11 @@
+---
+title: t
+author: rhnvrm
+type: post
+date: -001-11-30T00:00:00+00:00
+draft: true
+url: blog/?p=459
+categories:
+ - notes
+
+---
diff --git a/content/blog/2019-03-17-a-review-of-the-siempo-launcher.md b/content/blog/2019-03-17-a-review-of-the-siempo-launcher.md
new file mode 100644
index 0000000..7a450f3
--- /dev/null
+++ b/content/blog/2019-03-17-a-review-of-the-siempo-launcher.md
@@ -0,0 +1,70 @@
+---
+title: Three months of self inflicted digital pain and how it changed my habits – A review of Siempo Launcher
+author: rhnvrm
+type: post
+date: 2019-03-17T20:13:13+00:00
+excerpt: "Last December, I decided to start an experiment and adopt a new launcher called Siempo apart from the OnePlus and Nova launcher that I'm used to since I started using Android. After three months, even though I have stopped using it, I have observed some changes and would like to share it with my readers who are also interested in digital well being. There has been a recent surge in people starting to restart blogging even though on closed platforms like Medium, but I guess it at least that is searchable outside from search engines, and hope to see more self hosted blogs following Hackernoon's recent split. Apart from this, people like me who were active social media users who now realize the downright issues with platforms like Facebook, Instagram, YouTube and Snapchat and their algorithms, and are no longer interested in being driven by them throughout their day. In this article I talk about my experience with it and how it changed my usage habits."
+url: blog/2019/03/17/a-review-of-the-siempo-launcher/
+categories:
+ - notes
+tags:
+ - android
+ - digital wellbeing
+
+---
+Last December, I decided to start an experiment and adopt a new launcher called [Siempo][1] apart from the OnePlus and Nova launcher that I’m used to since I started using Android. After three months, even though I have stopped using it, I have observed some changes and would like to share it with my readers who are also interested in digital well being. There has been a recent surge in people starting to restart blogging even though on closed platforms like Medium, but I guess it at least that is searchable outside from search engines, and hope to see more self hosted blogs following Hackernoon’s recent split. Apart from this, people like me who were active social media users who now realize the downright issues with platforms like Facebook, Instagram, YouTube and Snapchat and their algorithms, and are no longer interested in being driven by them throughout their day. In this article I talk about my experience with it and how it changed my usage habits.
+
+After surveying all the options, the only fully featured launcher (that was usable) I found was [Siempo][1]. An other notable mention was the Minimal Launcher but it did not have a free dark mode or even proper app search, making it unusable apart from phone calls and messages. I did not want to go to the extreme with this experiment so Siempo seemed to be the best option out there for Android. A few notable features of this app based on my experience are mentioned below. But before that, I must mention what I guess mostly the ideas on which the app is based on.
+
+Tristan Harris, a Former Design Ethicist at Google had around 2-3 years ago started a movement called _[Time Well Spent][2]_ [now called][2] _[Humane Tech][2]._ Nothing better to explain this than his TED Talk on “How a handful of tech companies control billions of minds every day”++ +### Highlights about Siempo + +#### Nothing on the screen when you tap that power button + +There is nothing more that forms habits when you tap that power button and click that enticing app which you see that you had yourself originally placed on your home screen for convenience but now are more or less compelled to check since you have formed a habit to click it as soon as you press that physical button and the screen lights up. So this app displays nothing more than a blank screen with an optional text message which it calls an _Intention_ although I kept it as a blank screen as I find motivational quotes a bit gimmicky and silly but might be it useful for you if you feel it helps you stay motivated to use this launcher. + +#### Everything is Monochrome and Apps have no Logos + +Colorful app icons entice you to open them. When you swipe right in Siempo you will find your most useful apps utility apps as Icons (and not logos). But wait here is the catch, these are supposed to be set by you and are based on categories. You decide the app but not the categories that can be placed here, so you can have a food app but not “Uber Eats”, “Zomato” or “Swiggy”, similarly for for your travel app, you can select only one and the icon will be a generic cab icon. + +#### The essentials which don’t belong to a category + +There will be some apps which you use which don’t belong to a category from the first page, so you again swipe right and find the frequently used apps along with a search bar incase you forgot to add the app below. These are again not based on your usage analytics or recent usage, another tactic used to form habits but by you. But here is the catch with this page, no logos here as well for the pinned apps but no icon either, only the first letter of the app and the full name below it. + +#### The blacklisted ones (social media) + +And finally the biggest offenders of the attention economy. These are not even spared with fixed placement, and are randomly shuffled each time you swipe three times after you press your physical power button and unlock your screen making you _literally think twice before opening this app_. + +Apart from this, Siempo allows you to set a custom timer of a set duration after which you use these apps such as 15 minutes, all such apps cease to function and a full page block is shown asking you to reflect for one minute if you wish to continue using this app. + +### Reflections on this experiment + +Three months down with this, I have to admit my overall phone usage drastically declined. I stopped playing PUBG, reduced Netflix/Prime Video, nearly have stopped using Facebook (the last time I checked it was like a month ago), minimized Instagram usage to only view direct messages. Apart from this, I felt more energized throughout the day as I tended to sleep earlier although I woke up late as well, I ended up having more time on my hands as I had more energy. I ended up reading on the Kindle app or watching single small 5-10 youtube curated videos through twitter or reddit instead of a few 30 minute videos suggested by Youtube. It definitely had changed my usage patterns but I will have to caution others about a few reasons mentioned below, and would heavily suggest self moderation instead of changing their launcher. + + 1. **Absolute pain to use when you actually need your phone –** There were times when I needed to use my phone and could not use it properly especially when with friends and family and there were times when I actually needed these apps when the block would impact my productivity. + 2. **I started to use YouTube and Twitter** – These apps which I had marked as harmful, were now my most used apps even after going through trouble to use them. After the banner comes for 15 minutes of usage, I formed a habit of doing something else for a minute and reusing these two afterwards. My mind had adapted to the pain and eased it for these two. Earlier I used to use these less on my phone, but was using them more on my laptop back then so I guess it was just a move from not using the laptop for these apps. + 3. **App choices changed –** This might be relevant to those who are price wary especially in the food/travel category. Before Siempo I certainly had a 50-50 split in terms of usage of certain apps as they offer equal number of discounts. For food, I switched between Swiggy and Zomato and Ola/Uber for cabs, it was again a 50-50 split as well. But since I had set Swiggy as my food app, and Ola as my cab app, I began to prefer convenience more for both of these after I switched back as I have now formed a deep association with these and the time I need their services I can only think of these two. + +I hope, dear reader, I was able to help you with informing more about the digital well being space and I have motivated you to journey on your own quest and read more about it. Do comment about your experience with Siempo and similar apps along with what your thoughts are, would love to discuss this further. + + [1]: http://www.getsiempo.com/ + [2]: http://humanetech.com/ \ No newline at end of file diff --git a/content/blog/_index.md b/content/blog/_index.md new file mode 100644 index 0000000..59db226 --- /dev/null +++ b/content/blog/_index.md @@ -0,0 +1,3 @@ +--- +title: "Blog" +--- diff --git a/content/blog_list/_index.md b/content/blog_list/_index.md new file mode 100644 index 0000000..fd5d38a --- /dev/null +++ b/content/blog_list/_index.md @@ -0,0 +1,3 @@ ++++ +title= "Blog List" ++++ \ No newline at end of file diff --git a/content/search/_index.md b/content/search/_index.md new file mode 100644 index 0000000..17736d6 --- /dev/null +++ b/content/search/_index.md @@ -0,0 +1,15 @@ ++++ +title = "Search" # title of the page +layout = "search" # sets the layout to use +noindex = true # tell robots not to index +[form] + helpblock = "Press s to focus input anytime." +[form.input] + placeholder = "Enter search query…" + disabled = false +[security.csp.directives] + scriptSrc = [ + "'sha512-Bxby9zhln4Zc2thGA1E9CdT4qcCY52SxO/SBxAH6qQK6LK6/1gGq1xJ3Uz0SXTsPSL6quze7bYQUHr94xJS7jQ=='", + "'unsafe-eval'" + ] ++++ diff --git a/content/wp-content/uploads/2016/11/150px-500px-Glider.svg_-50x50.png b/content/wp-content/uploads/2016/11/150px-500px-Glider.svg_-50x50.png new file mode 100644 index 0000000..00bc7a1 Binary files /dev/null and b/content/wp-content/uploads/2016/11/150px-500px-Glider.svg_-50x50.png differ diff --git a/content/wp-content/uploads/2016/11/150px-500px-Glider.svg_.png b/content/wp-content/uploads/2016/11/150px-500px-Glider.svg_.png new file mode 100644 index 0000000..89dd5f7 Binary files /dev/null and b/content/wp-content/uploads/2016/11/150px-500px-Glider.svg_.png differ diff --git a/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-150x150.png b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-150x150.png new file mode 100644 index 0000000..e978d03 Binary files /dev/null and b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-150x150.png differ diff --git a/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-180x180.png b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-180x180.png new file mode 100644 index 0000000..74cbff7 Binary files /dev/null and b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-180x180.png differ diff --git a/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-192x192.png b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-192x192.png new file mode 100644 index 0000000..e4a01d2 Binary files /dev/null and b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-192x192.png differ diff --git a/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-270x270.png b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-270x270.png new file mode 100644 index 0000000..a035028 Binary files /dev/null and b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-270x270.png differ diff --git a/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-300x300.png b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-300x300.png new file mode 100644 index 0000000..351224d Binary files /dev/null and b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-300x300.png differ diff --git a/static/favicon.ico b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-32x32.png similarity index 100% rename from static/favicon.ico rename to content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-32x32.png diff --git a/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-50x50.png b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-50x50.png new file mode 100644 index 0000000..3a3fd5d Binary files /dev/null and b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_-50x50.png differ diff --git a/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_.png b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_.png new file mode 100644 index 0000000..7300694 Binary files /dev/null and b/content/wp-content/uploads/2016/11/cropped-150px-500px-Glider.svg_.png differ diff --git a/content/wp-content/uploads/2016/11/favicon-1.ico b/content/wp-content/uploads/2016/11/favicon-1.ico new file mode 100644 index 0000000..39d114d --- /dev/null +++ b/content/wp-content/uploads/2016/11/favicon-1.ico @@ -0,0 +1,30 @@ + + + diff --git a/content/wp-content/uploads/2016/11/favicon.ico b/content/wp-content/uploads/2016/11/favicon.ico new file mode 100644 index 0000000..2a04fbb Binary files /dev/null and b/content/wp-content/uploads/2016/11/favicon.ico differ diff --git a/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n-150x150.jpg b/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n-150x150.jpg new file mode 100644 index 0000000..63f2ba4 Binary files /dev/null and b/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n-150x150.jpg differ diff --git a/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n-300x300.jpg b/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n-300x300.jpg new file mode 100644 index 0000000..7c9556b Binary files /dev/null and b/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n-300x300.jpg differ diff --git a/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n-700x700.jpg b/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n-700x700.jpg new file mode 100644 index 0000000..4d0a4ad Binary files /dev/null and b/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n-700x700.jpg differ diff --git a/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n-768x768.jpg b/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n-768x768.jpg new file mode 100644 index 0000000..64db566 Binary files /dev/null and b/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n-768x768.jpg differ diff --git a/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n.jpg b/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n.jpg new file mode 100644 index 0000000..fdf3b03 Binary files /dev/null and b/content/wp-content/uploads/2016/12/12963761_708634509278687_7278243074211424343_n.jpg differ diff --git a/content/wp-content/uploads/2016/12/8051_Vectorization.pdf b/content/wp-content/uploads/2016/12/8051_Vectorization.pdf new file mode 100644 index 0000000..249ce1e Binary files /dev/null and b/content/wp-content/uploads/2016/12/8051_Vectorization.pdf differ diff --git a/content/wp-content/uploads/2016/12/Screenshot-from-2016-12-23-04-44-36-136x150.png b/content/wp-content/uploads/2016/12/Screenshot-from-2016-12-23-04-44-36-136x150.png new file mode 100644 index 0000000..95b11bb Binary files /dev/null and b/content/wp-content/uploads/2016/12/Screenshot-from-2016-12-23-04-44-36-136x150.png differ diff --git a/content/wp-content/uploads/2016/12/Screenshot-from-2016-12-23-04-44-36-50x50.png b/content/wp-content/uploads/2016/12/Screenshot-from-2016-12-23-04-44-36-50x50.png new file mode 100644 index 0000000..5a04929 Binary files /dev/null and b/content/wp-content/uploads/2016/12/Screenshot-from-2016-12-23-04-44-36-50x50.png differ diff --git a/content/wp-content/uploads/2016/12/Screenshot-from-2016-12-23-04-44-36.png b/content/wp-content/uploads/2016/12/Screenshot-from-2016-12-23-04-44-36.png new file mode 100644 index 0000000..e330848 Binary files /dev/null and b/content/wp-content/uploads/2016/12/Screenshot-from-2016-12-23-04-44-36.png differ diff --git a/content/wp-content/uploads/2016/12/UnderstandingtheUndertonesofPoliticalThoughtwithinthePoliticallyAgnosticFOSSMovement-SOC114-1.pdf b/content/wp-content/uploads/2016/12/UnderstandingtheUndertonesofPoliticalThoughtwithinthePoliticallyAgnosticFOSSMovement-SOC114-1.pdf new file mode 100644 index 0000000..86ebc67 Binary files /dev/null and b/content/wp-content/uploads/2016/12/UnderstandingtheUndertonesofPoliticalThoughtwithinthePoliticallyAgnosticFOSSMovement-SOC114-1.pdf differ diff --git a/content/wp-content/uploads/2016/12/dohack-150x150.jpg b/content/wp-content/uploads/2016/12/dohack-150x150.jpg new file mode 100644 index 0000000..b358ae1 Binary files /dev/null and b/content/wp-content/uploads/2016/12/dohack-150x150.jpg differ diff --git a/content/wp-content/uploads/2016/12/dohack-300x300.jpg b/content/wp-content/uploads/2016/12/dohack-300x300.jpg new file mode 100644 index 0000000..97a2c7d Binary files /dev/null and b/content/wp-content/uploads/2016/12/dohack-300x300.jpg differ diff --git a/content/wp-content/uploads/2016/12/dohack-700x700.jpg b/content/wp-content/uploads/2016/12/dohack-700x700.jpg new file mode 100644 index 0000000..b2ddce8 Binary files /dev/null and b/content/wp-content/uploads/2016/12/dohack-700x700.jpg differ diff --git a/content/wp-content/uploads/2016/12/dohack-768x768.jpg b/content/wp-content/uploads/2016/12/dohack-768x768.jpg new file mode 100644 index 0000000..55acfb8 Binary files /dev/null and b/content/wp-content/uploads/2016/12/dohack-768x768.jpg differ diff --git a/content/wp-content/uploads/2016/12/dohack.jpg b/content/wp-content/uploads/2016/12/dohack.jpg new file mode 100644 index 0000000..2b86753 Binary files /dev/null and b/content/wp-content/uploads/2016/12/dohack.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot-1-150x150.jpg b/content/wp-content/uploads/2016/12/heiot-1-150x150.jpg new file mode 100644 index 0000000..42e79f9 Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot-1-150x150.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot-1-300x209.jpg b/content/wp-content/uploads/2016/12/heiot-1-300x209.jpg new file mode 100644 index 0000000..5eee237 Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot-1-300x209.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot-1-50x50.jpg b/content/wp-content/uploads/2016/12/heiot-1-50x50.jpg new file mode 100644 index 0000000..7e0fed2 Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot-1-50x50.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot-1-700x487.jpg b/content/wp-content/uploads/2016/12/heiot-1-700x487.jpg new file mode 100644 index 0000000..a40149d Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot-1-700x487.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot-1-768x534.jpg b/content/wp-content/uploads/2016/12/heiot-1-768x534.jpg new file mode 100644 index 0000000..3f44b42 Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot-1-768x534.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot-1.jpg b/content/wp-content/uploads/2016/12/heiot-1.jpg new file mode 100644 index 0000000..6c1bd6c Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot-1.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot-150x150.jpg b/content/wp-content/uploads/2016/12/heiot-150x150.jpg new file mode 100644 index 0000000..fb1832d Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot-150x150.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot-168x300.jpg b/content/wp-content/uploads/2016/12/heiot-168x300.jpg new file mode 100644 index 0000000..c194a55 Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot-168x300.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot-2-150x150.jpg b/content/wp-content/uploads/2016/12/heiot-2-150x150.jpg new file mode 100644 index 0000000..fe07af7 Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot-2-150x150.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot-2-300x143.jpg b/content/wp-content/uploads/2016/12/heiot-2-300x143.jpg new file mode 100644 index 0000000..2566f55 Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot-2-300x143.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot-2-50x50.jpg b/content/wp-content/uploads/2016/12/heiot-2-50x50.jpg new file mode 100644 index 0000000..bce3281 Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot-2-50x50.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot-2.jpg b/content/wp-content/uploads/2016/12/heiot-2.jpg new file mode 100644 index 0000000..522c74d Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot-2.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot-50x50.jpg b/content/wp-content/uploads/2016/12/heiot-50x50.jpg new file mode 100644 index 0000000..1f85197 Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot-50x50.jpg differ diff --git a/content/wp-content/uploads/2016/12/heiot.jpg b/content/wp-content/uploads/2016/12/heiot.jpg new file mode 100644 index 0000000..dad13ef Binary files /dev/null and b/content/wp-content/uploads/2016/12/heiot.jpg differ diff --git a/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1-pdf-106x150.jpg b/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1-pdf-106x150.jpg new file mode 100644 index 0000000..43d36fe Binary files /dev/null and b/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1-pdf-106x150.jpg differ diff --git a/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1-pdf-212x300.jpg b/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1-pdf-212x300.jpg new file mode 100644 index 0000000..1c9605f Binary files /dev/null and b/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1-pdf-212x300.jpg differ diff --git a/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1-pdf-700x989.jpg b/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1-pdf-700x989.jpg new file mode 100644 index 0000000..11f1fa7 Binary files /dev/null and b/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1-pdf-700x989.jpg differ diff --git a/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1-pdf.jpg b/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1-pdf.jpg new file mode 100644 index 0000000..d896289 Binary files /dev/null and b/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1-pdf.jpg differ diff --git a/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1.pdf b/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1.pdf new file mode 100644 index 0000000..6b0c65f Binary files /dev/null and b/content/wp-content/uploads/2017/07/TP_WSN2017_Group_15-1.pdf differ diff --git a/content/wp-content/uploads/2017/07/WSN-Project-Report-pdf-116x150.jpg b/content/wp-content/uploads/2017/07/WSN-Project-Report-pdf-116x150.jpg new file mode 100644 index 0000000..9ed4d91 Binary files /dev/null and b/content/wp-content/uploads/2017/07/WSN-Project-Report-pdf-116x150.jpg differ diff --git a/content/wp-content/uploads/2017/07/WSN-Project-Report-pdf-232x300.jpg b/content/wp-content/uploads/2017/07/WSN-Project-Report-pdf-232x300.jpg new file mode 100644 index 0000000..bf423b7 Binary files /dev/null and b/content/wp-content/uploads/2017/07/WSN-Project-Report-pdf-232x300.jpg differ diff --git a/content/wp-content/uploads/2017/07/WSN-Project-Report-pdf-700x906.jpg b/content/wp-content/uploads/2017/07/WSN-Project-Report-pdf-700x906.jpg new file mode 100644 index 0000000..47ab72d Binary files /dev/null and b/content/wp-content/uploads/2017/07/WSN-Project-Report-pdf-700x906.jpg differ diff --git a/content/wp-content/uploads/2017/07/WSN-Project-Report-pdf.jpg b/content/wp-content/uploads/2017/07/WSN-Project-Report-pdf.jpg new file mode 100644 index 0000000..6dd6e7f Binary files /dev/null and b/content/wp-content/uploads/2017/07/WSN-Project-Report-pdf.jpg differ diff --git a/content/wp-content/uploads/2017/07/WSN-Project-Report.pdf b/content/wp-content/uploads/2017/07/WSN-Project-Report.pdf new file mode 100644 index 0000000..caeee33 Binary files /dev/null and b/content/wp-content/uploads/2017/07/WSN-Project-Report.pdf differ diff --git a/content/wp-content/uploads/2017/11/doc-pdf-116x150.jpg b/content/wp-content/uploads/2017/11/doc-pdf-116x150.jpg new file mode 100644 index 0000000..fb8992a Binary files /dev/null and b/content/wp-content/uploads/2017/11/doc-pdf-116x150.jpg differ diff --git a/content/wp-content/uploads/2017/11/doc-pdf-232x300.jpg b/content/wp-content/uploads/2017/11/doc-pdf-232x300.jpg new file mode 100644 index 0000000..f61cd81 Binary files /dev/null and b/content/wp-content/uploads/2017/11/doc-pdf-232x300.jpg differ diff --git a/content/wp-content/uploads/2017/11/doc-pdf-700x906.jpg b/content/wp-content/uploads/2017/11/doc-pdf-700x906.jpg new file mode 100644 index 0000000..7b1fb8d Binary files /dev/null and b/content/wp-content/uploads/2017/11/doc-pdf-700x906.jpg differ diff --git a/content/wp-content/uploads/2017/11/doc-pdf.jpg b/content/wp-content/uploads/2017/11/doc-pdf.jpg new file mode 100644 index 0000000..2762d1b Binary files /dev/null and b/content/wp-content/uploads/2017/11/doc-pdf.jpg differ diff --git a/content/wp-content/uploads/2017/11/doc.pdf b/content/wp-content/uploads/2017/11/doc.pdf new file mode 100644 index 0000000..6cf4500 Binary files /dev/null and b/content/wp-content/uploads/2017/11/doc.pdf differ diff --git a/content/wp-content/uploads/2017/12/fig1-150x150.png b/content/wp-content/uploads/2017/12/fig1-150x150.png new file mode 100644 index 0000000..d5eebb7 Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig1-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/fig1-300x189.png b/content/wp-content/uploads/2017/12/fig1-300x189.png new file mode 100644 index 0000000..6d4354c Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig1-300x189.png differ diff --git a/content/wp-content/uploads/2017/12/fig1-700x442.png b/content/wp-content/uploads/2017/12/fig1-700x442.png new file mode 100644 index 0000000..4d688f0 Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig1-700x442.png differ diff --git a/content/wp-content/uploads/2017/12/fig1-768x485.png b/content/wp-content/uploads/2017/12/fig1-768x485.png new file mode 100644 index 0000000..946e91e Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig1-768x485.png differ diff --git a/content/wp-content/uploads/2017/12/fig1.png b/content/wp-content/uploads/2017/12/fig1.png new file mode 100644 index 0000000..197781c Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig1.png differ diff --git a/content/wp-content/uploads/2017/12/fig2-150x150.png b/content/wp-content/uploads/2017/12/fig2-150x150.png new file mode 100644 index 0000000..a4cc67b Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig2-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/fig2-300x216.png b/content/wp-content/uploads/2017/12/fig2-300x216.png new file mode 100644 index 0000000..7e0200a Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig2-300x216.png differ diff --git a/content/wp-content/uploads/2017/12/fig2-700x503.png b/content/wp-content/uploads/2017/12/fig2-700x503.png new file mode 100644 index 0000000..eccd1ae Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig2-700x503.png differ diff --git a/content/wp-content/uploads/2017/12/fig2-768x552.png b/content/wp-content/uploads/2017/12/fig2-768x552.png new file mode 100644 index 0000000..29adc1c Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig2-768x552.png differ diff --git a/content/wp-content/uploads/2017/12/fig2.png b/content/wp-content/uploads/2017/12/fig2.png new file mode 100644 index 0000000..3fee4d1 Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig2.png differ diff --git a/content/wp-content/uploads/2017/12/fig3-150x150.png b/content/wp-content/uploads/2017/12/fig3-150x150.png new file mode 100644 index 0000000..818812b Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig3-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/fig3-300x125.png b/content/wp-content/uploads/2017/12/fig3-300x125.png new file mode 100644 index 0000000..228ee63 Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig3-300x125.png differ diff --git a/content/wp-content/uploads/2017/12/fig3-700x292.png b/content/wp-content/uploads/2017/12/fig3-700x292.png new file mode 100644 index 0000000..d4ab46c Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig3-700x292.png differ diff --git a/content/wp-content/uploads/2017/12/fig3-768x320.png b/content/wp-content/uploads/2017/12/fig3-768x320.png new file mode 100644 index 0000000..a96cb8e Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig3-768x320.png differ diff --git a/content/wp-content/uploads/2017/12/fig3.png b/content/wp-content/uploads/2017/12/fig3.png new file mode 100644 index 0000000..d3a788d Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig3.png differ diff --git a/content/wp-content/uploads/2017/12/fig4-150x150.png b/content/wp-content/uploads/2017/12/fig4-150x150.png new file mode 100644 index 0000000..9a835fa Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig4-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/fig4-300x114.png b/content/wp-content/uploads/2017/12/fig4-300x114.png new file mode 100644 index 0000000..040c786 Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig4-300x114.png differ diff --git a/content/wp-content/uploads/2017/12/fig4-700x266.png b/content/wp-content/uploads/2017/12/fig4-700x266.png new file mode 100644 index 0000000..7c470ce Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig4-700x266.png differ diff --git a/content/wp-content/uploads/2017/12/fig4.png b/content/wp-content/uploads/2017/12/fig4.png new file mode 100644 index 0000000..9aa506a Binary files /dev/null and b/content/wp-content/uploads/2017/12/fig4.png differ diff --git a/content/wp-content/uploads/2017/12/relu-1-1-150x150.png b/content/wp-content/uploads/2017/12/relu-1-1-150x150.png new file mode 100644 index 0000000..7f48c8b Binary files /dev/null and b/content/wp-content/uploads/2017/12/relu-1-1-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/relu-1-1-300x225.png b/content/wp-content/uploads/2017/12/relu-1-1-300x225.png new file mode 100644 index 0000000..51518f1 Binary files /dev/null and b/content/wp-content/uploads/2017/12/relu-1-1-300x225.png differ diff --git a/content/wp-content/uploads/2017/12/relu-1-1.png b/content/wp-content/uploads/2017/12/relu-1-1.png new file mode 100644 index 0000000..a179c80 Binary files /dev/null and b/content/wp-content/uploads/2017/12/relu-1-1.png differ diff --git a/content/wp-content/uploads/2017/12/relu-1-150x150.png b/content/wp-content/uploads/2017/12/relu-1-150x150.png new file mode 100644 index 0000000..7f48c8b Binary files /dev/null and b/content/wp-content/uploads/2017/12/relu-1-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/relu-1-300x225.png b/content/wp-content/uploads/2017/12/relu-1-300x225.png new file mode 100644 index 0000000..51518f1 Binary files /dev/null and b/content/wp-content/uploads/2017/12/relu-1-300x225.png differ diff --git a/content/wp-content/uploads/2017/12/relu-1.png b/content/wp-content/uploads/2017/12/relu-1.png new file mode 100644 index 0000000..a179c80 Binary files /dev/null and b/content/wp-content/uploads/2017/12/relu-1.png differ diff --git a/content/wp-content/uploads/2017/12/relu-2-1-150x150.png b/content/wp-content/uploads/2017/12/relu-2-1-150x150.png new file mode 100644 index 0000000..347df53 Binary files /dev/null and b/content/wp-content/uploads/2017/12/relu-2-1-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/relu-2-1-300x225.png b/content/wp-content/uploads/2017/12/relu-2-1-300x225.png new file mode 100644 index 0000000..770bca9 Binary files /dev/null and b/content/wp-content/uploads/2017/12/relu-2-1-300x225.png differ diff --git a/content/wp-content/uploads/2017/12/relu-2-1.png b/content/wp-content/uploads/2017/12/relu-2-1.png new file mode 100644 index 0000000..2d175ed Binary files /dev/null and b/content/wp-content/uploads/2017/12/relu-2-1.png differ diff --git a/content/wp-content/uploads/2017/12/relu-2-150x150.png b/content/wp-content/uploads/2017/12/relu-2-150x150.png new file mode 100644 index 0000000..347df53 Binary files /dev/null and b/content/wp-content/uploads/2017/12/relu-2-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/relu-2-300x225.png b/content/wp-content/uploads/2017/12/relu-2-300x225.png new file mode 100644 index 0000000..770bca9 Binary files /dev/null and b/content/wp-content/uploads/2017/12/relu-2-300x225.png differ diff --git a/content/wp-content/uploads/2017/12/relu-2.png b/content/wp-content/uploads/2017/12/relu-2.png new file mode 100644 index 0000000..2d175ed Binary files /dev/null and b/content/wp-content/uploads/2017/12/relu-2.png differ diff --git a/content/wp-content/uploads/2017/12/sigmoid-1-1-150x150.png b/content/wp-content/uploads/2017/12/sigmoid-1-1-150x150.png new file mode 100644 index 0000000..377fcf1 Binary files /dev/null and b/content/wp-content/uploads/2017/12/sigmoid-1-1-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/sigmoid-1-1-300x225.png b/content/wp-content/uploads/2017/12/sigmoid-1-1-300x225.png new file mode 100644 index 0000000..e356cca Binary files /dev/null and b/content/wp-content/uploads/2017/12/sigmoid-1-1-300x225.png differ diff --git a/content/wp-content/uploads/2017/12/sigmoid-1-1.png b/content/wp-content/uploads/2017/12/sigmoid-1-1.png new file mode 100644 index 0000000..6a1a912 Binary files /dev/null and b/content/wp-content/uploads/2017/12/sigmoid-1-1.png differ diff --git a/content/wp-content/uploads/2017/12/sigmoid-1-150x150.png b/content/wp-content/uploads/2017/12/sigmoid-1-150x150.png new file mode 100644 index 0000000..377fcf1 Binary files /dev/null and b/content/wp-content/uploads/2017/12/sigmoid-1-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/sigmoid-1-300x225.png b/content/wp-content/uploads/2017/12/sigmoid-1-300x225.png new file mode 100644 index 0000000..e356cca Binary files /dev/null and b/content/wp-content/uploads/2017/12/sigmoid-1-300x225.png differ diff --git a/content/wp-content/uploads/2017/12/sigmoid-1.png b/content/wp-content/uploads/2017/12/sigmoid-1.png new file mode 100644 index 0000000..6a1a912 Binary files /dev/null and b/content/wp-content/uploads/2017/12/sigmoid-1.png differ diff --git a/content/wp-content/uploads/2017/12/sigmoid-2-1-150x150.png b/content/wp-content/uploads/2017/12/sigmoid-2-1-150x150.png new file mode 100644 index 0000000..d7da8f4 Binary files /dev/null and b/content/wp-content/uploads/2017/12/sigmoid-2-1-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/sigmoid-2-1-300x225.png b/content/wp-content/uploads/2017/12/sigmoid-2-1-300x225.png new file mode 100644 index 0000000..eddaf5a Binary files /dev/null and b/content/wp-content/uploads/2017/12/sigmoid-2-1-300x225.png differ diff --git a/content/wp-content/uploads/2017/12/sigmoid-2-1.png b/content/wp-content/uploads/2017/12/sigmoid-2-1.png new file mode 100644 index 0000000..853c09c Binary files /dev/null and b/content/wp-content/uploads/2017/12/sigmoid-2-1.png differ diff --git a/content/wp-content/uploads/2017/12/sigmoid-2-150x150.png b/content/wp-content/uploads/2017/12/sigmoid-2-150x150.png new file mode 100644 index 0000000..d7da8f4 Binary files /dev/null and b/content/wp-content/uploads/2017/12/sigmoid-2-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/sigmoid-2-300x225.png b/content/wp-content/uploads/2017/12/sigmoid-2-300x225.png new file mode 100644 index 0000000..eddaf5a Binary files /dev/null and b/content/wp-content/uploads/2017/12/sigmoid-2-300x225.png differ diff --git a/content/wp-content/uploads/2017/12/sigmoid-2.png b/content/wp-content/uploads/2017/12/sigmoid-2.png new file mode 100644 index 0000000..853c09c Binary files /dev/null and b/content/wp-content/uploads/2017/12/sigmoid-2.png differ diff --git a/content/wp-content/uploads/2017/12/tanh-1-1-150x150.png b/content/wp-content/uploads/2017/12/tanh-1-1-150x150.png new file mode 100644 index 0000000..01f4b86 Binary files /dev/null and b/content/wp-content/uploads/2017/12/tanh-1-1-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/tanh-1-1-300x225.png b/content/wp-content/uploads/2017/12/tanh-1-1-300x225.png new file mode 100644 index 0000000..9894eaf Binary files /dev/null and b/content/wp-content/uploads/2017/12/tanh-1-1-300x225.png differ diff --git a/content/wp-content/uploads/2017/12/tanh-1-1.png b/content/wp-content/uploads/2017/12/tanh-1-1.png new file mode 100644 index 0000000..275ef6f Binary files /dev/null and b/content/wp-content/uploads/2017/12/tanh-1-1.png differ diff --git a/content/wp-content/uploads/2017/12/tanh-1-150x150.png b/content/wp-content/uploads/2017/12/tanh-1-150x150.png new file mode 100644 index 0000000..01f4b86 Binary files /dev/null and b/content/wp-content/uploads/2017/12/tanh-1-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/tanh-1-300x225.png b/content/wp-content/uploads/2017/12/tanh-1-300x225.png new file mode 100644 index 0000000..9894eaf Binary files /dev/null and b/content/wp-content/uploads/2017/12/tanh-1-300x225.png differ diff --git a/content/wp-content/uploads/2017/12/tanh-1.png b/content/wp-content/uploads/2017/12/tanh-1.png new file mode 100644 index 0000000..275ef6f Binary files /dev/null and b/content/wp-content/uploads/2017/12/tanh-1.png differ diff --git a/content/wp-content/uploads/2017/12/tanh-2-150x150.png b/content/wp-content/uploads/2017/12/tanh-2-150x150.png new file mode 100644 index 0000000..35dbcf5 Binary files /dev/null and b/content/wp-content/uploads/2017/12/tanh-2-150x150.png differ diff --git a/content/wp-content/uploads/2017/12/tanh-2-300x225.png b/content/wp-content/uploads/2017/12/tanh-2-300x225.png new file mode 100644 index 0000000..004d483 Binary files /dev/null and b/content/wp-content/uploads/2017/12/tanh-2-300x225.png differ diff --git a/content/wp-content/uploads/2017/12/tanh-2.png b/content/wp-content/uploads/2017/12/tanh-2.png new file mode 100644 index 0000000..0c66801 Binary files /dev/null and b/content/wp-content/uploads/2017/12/tanh-2.png differ diff --git a/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-150x150.jpg b/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-150x150.jpg new file mode 100644 index 0000000..cd2270f Binary files /dev/null and b/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-150x150.jpg differ diff --git a/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-300x200.jpg b/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-300x200.jpg new file mode 100644 index 0000000..97012c5 Binary files /dev/null and b/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-300x200.jpg differ diff --git a/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-700x467.jpg b/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-700x467.jpg new file mode 100644 index 0000000..6e16c43 Binary files /dev/null and b/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-700x467.jpg differ diff --git a/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-768x512.jpg b/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-768x512.jpg new file mode 100644 index 0000000..f65a15d Binary files /dev/null and b/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o-768x512.jpg differ diff --git a/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o.jpg b/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o.jpg new file mode 100644 index 0000000..4a2c69f Binary files /dev/null and b/content/wp-content/uploads/2018/02/22550124_1987147797978461_2612175686816255452_o.jpg differ diff --git a/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018-pdf-116x150.jpg b/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018-pdf-116x150.jpg new file mode 100644 index 0000000..318ea8d Binary files /dev/null and b/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018-pdf-116x150.jpg differ diff --git a/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018-pdf-232x300.jpg b/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018-pdf-232x300.jpg new file mode 100644 index 0000000..f0f1c70 Binary files /dev/null and b/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018-pdf-232x300.jpg differ diff --git a/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018-pdf-700x906.jpg b/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018-pdf-700x906.jpg new file mode 100644 index 0000000..0b14d9d Binary files /dev/null and b/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018-pdf-700x906.jpg differ diff --git a/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018-pdf.jpg b/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018-pdf.jpg new file mode 100644 index 0000000..35c4c99 Binary files /dev/null and b/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018-pdf.jpg differ diff --git a/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018.pdf b/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018.pdf new file mode 100644 index 0000000..8595f32 Binary files /dev/null and b/content/wp-content/uploads/2018/02/Rohan-Verma-Feb-2018.pdf differ diff --git a/content/wp-content/uploads/2018/10/results___2_0-150x150.png b/content/wp-content/uploads/2018/10/results___2_0-150x150.png new file mode 100644 index 0000000..9455c05 Binary files /dev/null and b/content/wp-content/uploads/2018/10/results___2_0-150x150.png differ diff --git a/content/wp-content/uploads/2018/10/results___2_0-175x117.png b/content/wp-content/uploads/2018/10/results___2_0-175x117.png new file mode 100644 index 0000000..fc2e3a1 Binary files /dev/null and b/content/wp-content/uploads/2018/10/results___2_0-175x117.png differ diff --git a/content/wp-content/uploads/2018/10/results___2_0-300x228.png b/content/wp-content/uploads/2018/10/results___2_0-300x228.png new file mode 100644 index 0000000..1f54fd8 Binary files /dev/null and b/content/wp-content/uploads/2018/10/results___2_0-300x228.png differ diff --git a/content/wp-content/uploads/2018/10/results___2_0-700x531.png b/content/wp-content/uploads/2018/10/results___2_0-700x531.png new file mode 100644 index 0000000..188a23b Binary files /dev/null and b/content/wp-content/uploads/2018/10/results___2_0-700x531.png differ diff --git a/content/wp-content/uploads/2018/10/results___2_0-768x583.png b/content/wp-content/uploads/2018/10/results___2_0-768x583.png new file mode 100644 index 0000000..3934dad Binary files /dev/null and b/content/wp-content/uploads/2018/10/results___2_0-768x583.png differ diff --git a/content/wp-content/uploads/2018/10/results___2_0.png b/content/wp-content/uploads/2018/10/results___2_0.png new file mode 100644 index 0000000..ef9889e Binary files /dev/null and b/content/wp-content/uploads/2018/10/results___2_0.png differ diff --git a/content/wp-content/uploads/2018/10/results___4_0-150x150.png b/content/wp-content/uploads/2018/10/results___4_0-150x150.png new file mode 100644 index 0000000..bed523e Binary files /dev/null and b/content/wp-content/uploads/2018/10/results___4_0-150x150.png differ diff --git a/content/wp-content/uploads/2018/10/results___4_0-175x117.png b/content/wp-content/uploads/2018/10/results___4_0-175x117.png new file mode 100644 index 0000000..6dc380d Binary files /dev/null and b/content/wp-content/uploads/2018/10/results___4_0-175x117.png differ diff --git a/content/wp-content/uploads/2018/10/results___4_0-300x186.png b/content/wp-content/uploads/2018/10/results___4_0-300x186.png new file mode 100644 index 0000000..18d2140 Binary files /dev/null and b/content/wp-content/uploads/2018/10/results___4_0-300x186.png differ diff --git a/content/wp-content/uploads/2018/10/results___4_0-700x435.png b/content/wp-content/uploads/2018/10/results___4_0-700x435.png new file mode 100644 index 0000000..d0d3df1 Binary files /dev/null and b/content/wp-content/uploads/2018/10/results___4_0-700x435.png differ diff --git a/content/wp-content/uploads/2018/10/results___4_0-768x477.png b/content/wp-content/uploads/2018/10/results___4_0-768x477.png new file mode 100644 index 0000000..1031b94 Binary files /dev/null and b/content/wp-content/uploads/2018/10/results___4_0-768x477.png differ diff --git a/content/wp-content/uploads/2018/10/results___4_0.png b/content/wp-content/uploads/2018/10/results___4_0.png new file mode 100644 index 0000000..6cd387a Binary files /dev/null and b/content/wp-content/uploads/2018/10/results___4_0.png differ diff --git a/content/wp-content/uploads/me.jpg b/content/wp-content/uploads/me.jpg new file mode 100644 index 0000000..5ffd1e0 Binary files /dev/null and b/content/wp-content/uploads/me.jpg differ diff --git a/layouts/README.md b/layouts/README.md deleted file mode 100755 index 83d09ca..0000000 --- a/layouts/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# LAYOUTS - -This directory contains your Application Layouts. - -More information about the usage of this directory in the documentation: -https://nuxtjs.org/guide/views#layouts - -**This directory is not required, you can delete it if you don't want to use it.** diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html new file mode 100644 index 0000000..f9891b1 --- /dev/null +++ b/layouts/_default/baseof.html @@ -0,0 +1,70 @@ + + + + {{ partial "meta/content-security-policy.html" . }} + {{ .Hugo.Generator }} + + ++ Unfortunately, what’s best for capturing our attention isn’t best for our well-being: +
+ ++ Snapchat turns conversations into streaks, redefining how our children measure friendship.
+ + http://humanetech.com/problem +
Instagram glorifies the picture-perfect life, eroding our self worth.
Facebook segregates us into echo chambers, fragmenting our communities.
YouTube autoplays the next video within seconds, even if it eats into our sleep. +
+ ([1b0187d](https://git.habd.as/comfusion/after-dark/commits/1b0187d))
+
+
+### Features
+
+* **personalization:** add customizable accent colors ([bf251a6](https://git.habd.as/comfusion/after-dark/commits/bf251a6))
+
+
+
+
+## [6.0.1](https://git.habd.as/comfusion/after-dark/compare/v6.0.0...v6.0.1) (2018-08-12)
+
+
+### Bug Fixes
+
+* **layouts/search:** unblock blocking scripts and add command terminators ([7802937](https://git.habd.as/comfusion/after-dark/commits/7802937)), closes [#14](https://git.habd.as/comfusion/after-dark/issues/14)
+
+
+
+
+# [6.0.0](https://git.habd.as/comfusion/after-dark/compare/v5.5.1...v6.0.0) (2018-08-12)
+
+
+### Bug Fixes
+
+* **shortcodes:** remove privacytube and coub shortcodes ([ada8286](https://git.habd.as/comfusion/after-dark/commits/ada8286)), closes [#35](https://git.habd.as/comfusion/after-dark/issues/35)
+
+
+### BREAKING CHANGES
+
+* **shortcodes:** shortcodes removed must now be copied to the theme, if used
+
+
+
+
+## [5.5.1](https://git.habd.as/comfusion/after-dark/compare/v5.5.0...v5.5.1) (2018-08-11)
+
+
+### Bug Fixes
+
+* **install:** restore android support ([d3b2ab0](https://git.habd.as/comfusion/after-dark/commits/d3b2ab0)), closes [#25](https://git.habd.as/comfusion/after-dark/issues/25)
+
+
+
+
+# [5.5.0](https://git.habd.as/comfusion/after-dark/compare/v5.4.0...v5.5.0) (2018-08-10)
+
+
+### Bug Fixes
+
+* **assets:** stop treating all permalinks as external ([d5e8e33](https://git.habd.as/comfusion/after-dark/commits/d5e8e33))
+
+
+### Features
+
+* **layout,install:** add automatic syntax highlighting ([3eed5dd](https://git.habd.as/comfusion/after-dark/commits/3eed5dd))
+
+
+
+
+# [5.4.0](https://git.habd.as/comfusion/after-dark/compare/v5.3.1...v5.4.0) (2018-08-04)
+
+
+### Features
+
+* **modules:** add hall of mirrors ([882c32d](https://git.habd.as/comfusion/after-dark/commits/882c32d)), closes [#24](https://git.habd.as/comfusion/after-dark/issues/24)
+
+
+
+
+## [5.3.1](https://git.habd.as/comfusion/after-dark/compare/v5.3.0...v5.3.1) (2018-08-01)
+
+
+### Bug Fixes
+
+* **layouts:** show sarcastic message when no pages exist ([e5ce3b9](https://git.habd.as/comfusion/after-dark/commits/e5ce3b9))
+
+
+
+
+# [5.3.0](https://git.habd.as/comfusion/after-dark/compare/v5.2.6...v5.3.0) (2018-08-01)
+
+
+### Bug Fixes
+
+* **install:** kill hugo server always ([abadfbf](https://git.habd.as/comfusion/after-dark/commits/abadfbf))
+* **install:** move kill command to eof ([a87a381](https://git.habd.as/comfusion/after-dark/commits/a87a381))
+
+
+### Features
+
+* **bin:** add script to preview site online over https ([51baf0c](https://git.habd.as/comfusion/after-dark/commits/51baf0c)), closes [#21](https://git.habd.as/comfusion/after-dark/issues/21)
+
+
+
+
+## [5.2.6](https://git.habd.as/comfusion/after-dark/compare/v5.2.5...v5.2.6) (2018-07-31)
+
+
+### Bug Fixes
+
+* **install:** support both gnu and bsd grep ([35defb7](https://git.habd.as/comfusion/after-dark/commits/35defb7))
+
+
+
+
+## [5.2.5](https://git.habd.as/comfusion/after-dark/compare/v5.2.3...v5.2.5) (2018-07-31)
+
+
+### Bug Fixes
+
+* **install:** install packages from npm ([65c4e99](https://git.habd.as/comfusion/after-dark/commits/65c4e99))
+* **install:** standardize install script ([aca07cc](https://git.habd.as/comfusion/after-dark/commits/aca07cc)), closes [#19](https://git.habd.as/comfusion/after-dark/issues/19)
+* **install:** update example base url ([da73a2f](https://git.habd.as/comfusion/after-dark/commits/da73a2f))
+* **install:** use latest version from npm dist tags ([7afe7b9](https://git.habd.as/comfusion/after-dark/commits/7afe7b9))
+
+
+
+
+## [5.2.4](https://git.habd.as/comfusion/after-dark/compare/v5.2.3...v5.2.4) (2018-07-31)
+
+
+### Bug Fixes
+
+* **install:** install packages from npm ([65c4e99](https://git.habd.as/comfusion/after-dark/commits/65c4e99))
+* **install:** standardize install script ([aca07cc](https://git.habd.as/comfusion/after-dark/commits/aca07cc)), closes [#19](https://git.habd.as/comfusion/after-dark/issues/19)
+
+
+
+
+## [5.2.3](https://git.habd.as/comfusion/after-dark/compare/v5.2.2...v5.2.3) (2018-07-29)
+
+### Bug Fixes
+
+* **theme:** just kidding. remove white theme variant ([d73693c](https://git.habd.as/comfusion/after-dark/commits/d73693c))
+
+
+## [5.2.2](https://git.habd.as/comfusion/after-dark/compare/v5.2.1...v5.2.2) (2018-07-29)
+
+
+### Bug Fixes
+
+* **theme:** enable white theme variant ([3f8f000](https://git.habd.as/comfusion/after-dark/commits/3f8f000))
+
+
+
+
+## [5.2.1](https://git.habd.as/comfusion/after-dark/compare/v5.2.0...v5.2.1) (2018-07-26)
+
+
+### Bug Fixes
+
+* **install:** remove git cruft & supply actual module name ([a0097a0](https://git.habd.as/comfusion/after-dark/commits/a0097a0))
+
+
+
+
+# [5.2.0](https://git.habd.as/comfusion/after-dark/compare/v5.1.0...v5.2.0) (2018-07-26)
+
+
+### Features
+
+* **install:** streamline installation ([abf92fe](https://git.habd.as/comfusion/after-dark/commits/abf92fe)), closes [#2](https://git.habd.as/comfusion/after-dark/issues/2)
+
+
+
+
+# [5.1.0](https://git.habd.as/comfusion/after-dark/compare/v5.0.0...v5.1.0) (2018-07-24)
+
+
+### Features
+
+* **modules:** add fractal forest module for bpg image format support ([8aa35b2](https://git.habd.as/comfusion/after-dark/commits/8aa35b2)), closes [#8](https://git.habd.as/comfusion/after-dark/issues/8)
+
+
+
+
+# [5.0.0](https://git.habd.as/comfusion/after-dark/compare/v4.1.0...v5.0.0) (2018-07-21)
+
+
+### Features
+
+* **modules:** add analytics module ([9334f15](https://git.habd.as/comfusion/after-dark/commits/9334f15)), closes [#1](https://git.habd.as/comfusion/after-dark/issues/1)
+
+
+### BREAKING CHANGES
+
+* **modules:** google analytics no longer supported
+
+
+
+
+# [4.1.0](https://git.habd.as/comfusion/after-dark/compare/v4.0.2...v4.1.0) (2018-07-19)
+
+
+### Features
+
+* select theme variant directly from site config ([aa82f5d](https://git.habd.as/comfusion/after-dark/commit/aa82f5d)), closes [#6](https://git.habd.as/comfusion/after-dark/issues/6)
+
+
+### BREAKING CHANGES
+
+* hugo 0.43 and above required. css override file locations have changed
+
+
+
+
+## 4.0.2 (2018-07-18)
+
+
+### Bug Fixes
+
+* **install:** update default open graph image ([aaaf64e](https://git.habd.as/comfusion/after-dark/commit/aaaf64e))
+* **layouts:** output urls relative to baseurl ([2d278dd](https://git.habd.as/comfusion/after-dark/commit/2d278dd)), closes [#4](https://git.habd.as/comfusion/after-dark/issues/4)
+* **layouts:** restore smooth scrolling to toc links ([89a9c8d](https://git.habd.as/comfusion/after-dark/commit/89a9c8d))
+
+
+
+
+## [4.0.1](https://git.habd.as/comfusion/after-dark/compare/v4.0.0...v4.0.1) (2018-07-18)
+
+
+### Bug Fixes
+
+* **hugo:** require 0.44 at minimum ([78a09c8](https://git.habd.as/comfusion/after-dark/commits/78a09c8))
+
+
+
+
+# [4.0.0](https://git.habd.as/comfusion/after-dark/compare/v3.10.1...v4.0.0) (2018-07-09)
+
+
+
+
+## [3.10.1](https://git.habd.as/comfusion/after-dark/compare/v3.10.0...v3.10.1) (2018-07-09)
+
+
+
+
+# [3.10.0](https://github.com/comfusion/after-dark/compare/v3.9.1...v3.10.0) (2018-06-18)
+
+
+### Bug Fixes
+
+* **$layouts:** resolve search layout header display ([9eee69c](https://github.com/comfusion/after-dark/commit/9eee69c)), closes [#104](https://github.com/comfusion/after-dark/issues/104)
+
+
+### Features
+
+* **$layout:** add telegram iv support ([4d520f9](https://github.com/comfusion/after-dark/commit/4d520f9)), closes [#113](https://github.com/comfusion/after-dark/issues/113)
+
+
+
+
+## [3.9.2](https://github.com/comfusion/after-dark/compare/v3.9.1...v3.9.2) (2018-06-09)
+
+
+### Bug Fixes
+
+* **$layouts:** resolve search layout header display ([9eee69c](https://github.com/comfusion/after-dark/commit/9eee69c)), closes [#104](https://github.com/comfusion/after-dark/issues/104)
+
+
+
+
+## [3.9.1](https://github.com/comfusion/after-dark/compare/v3.9.0...v3.9.1) (2018-05-13)
+
+
+### Bug Fixes
+
+* **$layouts:** hide search app when noscript ([c3bcff0](https://github.com/comfusion/after-dark/commit/c3bcff0))
+
+
+
+
+# [3.9.0](https://github.com/comfusion/after-dark/compare/v3.8.4...v3.9.0) (2018-05-03)
+
+
+### Features
+
+* **$layouts:** allow customization of referrer policy and add privacy-focused default ([5759a30](https://github.com/comfusion/after-dark/commit/5759a30)), closes [#96](https://github.com/comfusion/after-dark/issues/96)
+
+
+
+
+## [3.8.4](https://github.com/comfusion/after-dark/compare/v3.8.3...v3.8.4) (2018-05-01)
+
+
+### Bug Fixes
+
+* **$layouts:** prevent js error on search form submit ([0dce741](https://github.com/comfusion/after-dark/commit/0dce741)), closes [#94](https://github.com/comfusion/after-dark/issues/94)
+
+
+
+
+## [3.8.3](https://github.com/comfusion/after-dark/compare/v3.8.2...v3.8.3) (2018-04-16)
+
+
+### Bug Fixes
+
+* **$layouts:** improve search input focus and usability ([e94f6df](https://github.com/comfusion/after-dark/commit/e94f6df)), closes [#91](https://github.com/comfusion/after-dark/issues/91)
+
+
+
+
+## [3.8.2](https://github.com/comfusion/after-dark/compare/v3.8.1...v3.8.2) (2018-04-16)
+
+
+### Bug Fixes
+
+* **$layouts:** disable ua input styling safari mobile ([f7c81f4](https://github.com/comfusion/after-dark/commit/f7c81f4))
+* **$layouts:** prevent auto-zoom on safari mobile ([81c3f39](https://github.com/comfusion/after-dark/commit/81c3f39))
+
+
+
+
+## [3.8.1](https://github.com/comfusion/after-dark/compare/v3.8.0...v3.8.1) (2018-04-15)
+
+
+### Bug Fixes
+
+* **$layouts:** remove duplicate descriptor from post image srcset ([0295370](https://github.com/comfusion/after-dark/commit/0295370))
+
+
+
+
+# [3.8.0](https://github.com/comfusion/after-dark/compare/v3.7.0...v3.8.0) (2018-04-15)
+
+
+### Features
+
+* **$layouts:** add fuzzy search ([93d2a29](https://github.com/comfusion/after-dark/commit/93d2a29)), closes [#83](https://github.com/comfusion/after-dark/issues/83)
+
+
+
+
+# [3.7.0](https://github.com/comfusion/after-dark/compare/v3.6.0...v3.7.0) (2018-03-25)
+
+
+### Features
+
+* **$layouts:** add post images ([06457bc](https://github.com/comfusion/after-dark/commit/06457bc))
+
+
+
+
+# [3.6.0](https://github.com/comfusion/after-dark/compare/v3.5.1...v3.6.0) (2018-03-22)
+
+
+### Bug Fixes
+
+* **$style:** add more whitespace on list pages and darken muted text ([646e98b](https://github.com/comfusion/after-dark/commit/646e98b))
+
+
+### Features
+
+* **$layouts:** add twitter cards ([6562e80](https://github.com/comfusion/after-dark/commit/6562e80)), closes [#76](https://github.com/comfusion/after-dark/issues/76)
+
+
+
+
+## [3.5.1](https://github.com/comfusion/after-dark/compare/v3.5.0...v3.5.1) (2018-01-17)
+
+
+### Bug Fixes
+
+* **$style:** fix a whitespace issue near the readmore link ([dee3530](https://github.com/comfusion/after-dark/commit/dee3530)), closes [#70](https://github.com/comfusion/after-dark/issues/70)
+
+
+
+
+# [3.5.0](https://github.com/comfusion/after-dark/compare/v3.4.0...v3.5.0) (2017-11-08)
+
+
+### Features
+
+* **$shortcodes:** add youtube without cookies ([613e545](https://github.com/comfusion/after-dark/commit/613e545)), closes [#62](https://github.com/comfusion/after-dark/issues/62)
+
+
+
+
+# [3.4.0](https://github.com/comfusion/after-dark/compare/v3.3.0...v3.4.0) (2017-10-27)
+
+
+### Features
+
+* **$shortcode:** add coub shortcode for gifs with sound ([0267d5b](https://github.com/comfusion/after-dark/commit/0267d5b)), closes [#63](https://github.com/comfusion/after-dark/issues/63)
+
+
+
+
+# [3.3.0](https://github.com/comfusion/after-dark/compare/v3.2.0...v3.3.0) (2017-10-13)
+
+
+### Features
+
+* **$layouts:** hide related content reading time on small screen ([480d57a](https://github.com/comfusion/after-dark/commit/480d57a))
+* **$partials:** add pubdate structured data to post byline ([a3bcb0c](https://github.com/comfusion/after-dark/commit/a3bcb0c))
+
+
+
+
+# [3.2.0](https://github.com/comfusion/after-dark/compare/v3.1.1...v3.2.0) (2017-10-06)
+
+
+### Bug Fixes
+
+* **$shortcodes:** fix issue with external link appearance ([afcc8e6](https://github.com/comfusion/after-dark/commit/afcc8e6))
+
+
+### Features
+
+* **$layout:** add base element to base layout ([bf25c67](https://github.com/comfusion/after-dark/commit/bf25c67)), closes [#60](https://github.com/comfusion/after-dark/issues/60)
+* **$shortcode:** style cite element inside block quotation ([65a4278](https://github.com/comfusion/after-dark/commit/65a4278))
+* **$shortcodes:** add frame targeting to custom figure shortcode ([a66b076](https://github.com/comfusion/after-dark/commit/a66b076))
+* **$shortcodes:** enable target and method control for button/buttongroup ([f705d19](https://github.com/comfusion/after-dark/commit/f705d19)), closes [#56](https://github.com/comfusion/after-dark/issues/56)
+* **$shortcodes:** make button shortcode clickable ([1bc643f](https://github.com/comfusion/after-dark/commit/1bc643f)), closes [#40](https://github.com/comfusion/after-dark/issues/40)
+
+
+### Reverts
+
+* **$layout:** add base element to base layout ([769e2d9](https://github.com/comfusion/after-dark/commit/769e2d9))
+
+
+
+
+## [3.1.1](https://github.com/comfusion/after-dark/compare/v3.1.0...v3.1.1) (2017-09-13)
+
+
+### Bug Fixes
+
+* **$layouts:** fix error calling partial in related content ([8a6253d](https://github.com/comfusion/after-dark/commit/8a6253d)), closes [#55](https://github.com/comfusion/after-dark/issues/55)
+
+
+
+
+# [3.1.0](https://github.com/comfusion/after-dark/compare/v3.0.0...v3.1.0) (2017-09-13)
+
+
+### Features
+
+* **$layouts:** use related content feature introduced in hugo@0.27 ([f0474f4](https://github.com/comfusion/after-dark/commit/f0474f4)), closes [#54](https://github.com/comfusion/after-dark/issues/54)
+
+
+
+
+# [3.0.0](https://github.com/comfusion/after-dark/compare/v2.1.1...v3.0.0) (2017-09-13)
+
+
+### Features
+
+* **$archetypes:** turn archetypes into go templates ([5ed2d9f](https://github.com/comfusion/after-dark/commit/5ed2d9f))
+
+### BREAKING CHANGES
+
+* **$archetypes:** Minimum Hugo version set 0.24, 0.16 - 0.23 must modify archetypes
+
+to upgrade add `date` and `title` to custom archetypes. if using a version of hugo prior to 0.24 the custom templates should remove `title` and `date` and not use go templating logic in the archetype files
+
+
+
+
+## [2.1.1](https://github.com/comfusion/after-dark/compare/v2.1.0...v2.1.1) (2017-09-11)
+
+
+### Bug Fixes
+
+* **$layouts:** move stylesheets back to partials, reorganize files ([b93b4a7](https://github.com/comfusion/after-dark/commit/b93b4a7)), closes [#50](https://github.com/comfusion/after-dark/issues/50)
+
+
+
+
+# [2.1.0](https://github.com/comfusion/after-dark/compare/v2.0.0...v2.1.0) (2017-09-09)
+
+
+### Bug Fixes
+
+* **$images:** improve bpg image support ([7681dde](https://github.com/comfusion/after-dark/commit/7681dde)), closes [#48](https://github.com/comfusion/after-dark/issues/48)
+
+
+### Features
+
+* **$layout:** Add support for external stylesheets ([9abe627](https://github.com/comfusion/after-dark/commit/9abe627)), closes [#49](https://github.com/comfusion/after-dark/issues/49)
+
+
+
+
+# [2.0.0](https://github.com/comfusion/after-dark/compare/v1.8.4...v2.0.0) (2017-09-08)
+
+
+### Features
+
+* **$theme:** add support for bpg image format ([49204d0](https://github.com/comfusion/after-dark/commit/49204d0))
+
+### BREAKING CHANGES
+
+* **$build:** inline css using readFile template function ([3787d10](https://github.com/comfusion/after-dark/commit/3787d10))
+
+to upgrade skip this release and move directly to 2.1.1 or a later release
+
+
+## [1.8.4](https://github.com/comfusion/after-dark/compare/v1.8.3...v1.8.4) (2017-06-27)
+
+
+### Bug Fixes
+
+* **$layouts:** add support for protocol-relative base urls ([755f446](https://github.com/comfusion/after-dark/commit/755f446)), closes [#37](https://github.com/comfusion/after-dark/issues/37)
+
+
+
+
+## [1.8.3](https://github.com/comfusion/after-dark/compare/v1.8.2...v1.8.3) (2017-06-22)
+
+
+### Bug Fixes
+
+* **$layouts:** remove iframe borders by default ([3b4f7c1](https://github.com/comfusion/after-dark/commit/3b4f7c1))
+
+
+
+
+## [1.8.2](https://github.com/comfusion/after-dark/compare/v1.8.1...v1.8.2) (2017-06-09)
+
+
+### Reverts
+
+* **layouts:** update powered-by to link to new theme site ([2237ead](https://github.com/comfusion/after-dark/commit/2237ead))
+
+
+
+
+## [1.8.1](https://github.com/comfusion/after-dark/compare/v1.8.0...v1.8.1) (2017-06-07)
+
+
+### Bug Fixes
+
+* **$layouts:** update powered-by to link to new theme site ([c031934](https://github.com/comfusion/after-dark/commit/c031934))
+
+
+
+
+# [1.8.0](https://github.com/comfusion/after-dark/compare/v1.7.6...v1.8.0) (2017-06-06)
+
+
+### Features
+
+* **LICENSE:** you just do what the fuck you want to ([c2eb957](https://github.com/comfusion/after-dark/commit/c2eb957))
+
+
+
+
+## [1.7.6](https://github.com/comfusion/after-dark/compare/v1.7.2...v1.7.6) (2017-06-06)
+
+#### Licensing
+
+Upgraded to The Unlicense, skipping for patch releases.
+
+
+## [1.7.2](https://github.com/comfusion/after-dark/compare/v1.7.1...v1.7.2) (2017-05-14)
+
+
+### Bug Fixes
+
+* **install:** move it back to bin ([13441f5](https://github.com/comfusion/after-dark/commit/13441f5))
+
+
+
+
+## [1.7.1](https://github.com/comfusion/after-dark/compare/v1.7.0...v1.7.1) (2017-05-13)
+
+
+### Bug Fixes
+
+* **install:** move to scripts folder ([204e516](https://github.com/comfusion/after-dark/commit/204e516))
+
+
+
+
+# [1.7.0](https://github.com/comfusion/after-dark/compare/v1.6.1...v1.7.0) (2017-05-08)
+
+
+### Bug Fixes
+
+* **install:** improve install experience ([4a30955](https://github.com/comfusion/after-dark/commit/4a30955))
+
+
+### Features
+
+* **shortcodes:** add hack progress bar component ([dda60f2](https://github.com/comfusion/after-dark/commit/dda60f2))
+* **shortcodes:** add hackcss alert shortcode ([6ed1c58](https://github.com/comfusion/after-dark/commit/6ed1c58))
+* **shortcodes:** add hackcss alert shortcode ([eebe7a9](https://github.com/comfusion/after-dark/commit/eebe7a9))
+* **shortcodes:** add hackcss button group component ([1f90e2d](https://github.com/comfusion/after-dark/commit/1f90e2d))
+* **shortcodes:** add hackcss button shortcode ([829cb7d](https://github.com/comfusion/after-dark/commit/829cb7d))
+* **shortcodes:** add hackcss card component ([4526c60](https://github.com/comfusion/after-dark/commit/4526c60))
+* **shortcodes:** add hackcss loading component ([6f667e8](https://github.com/comfusion/after-dark/commit/6f667e8))
+* **shortcodes:** add hackcss progress component ([4e99c75](https://github.com/comfusion/after-dark/commit/4e99c75))
+
+
+
+
+## [1.6.1](https://github.com/comfusion/after-dark/compare/v1.6.0...v1.6.1) (2017-05-05)
+
+
+### Bug Fixes
+
+* **typography:** remove text justification and hyphenation ([8fdbe2f](https://github.com/comfusion/after-dark/commit/8fdbe2f))
+
+
+
+
+# [1.6.0](https://github.com/comfusion/after-dark/compare/v1.5.2...v1.6.0) (2017-05-03)
+
+
+### Bug Fixes
+
+* **install:** add flags for theme setup script ([01ad1ee](https://github.com/comfusion/after-dark/commit/01ad1ee))
+* **layouts:** use relative urls in post byline taxonomy links ([419752d](https://github.com/comfusion/after-dark/commit/419752d))
+
+
+### Features
+
+* **install:** simplify installation ([765dcb8](https://github.com/comfusion/after-dark/commit/765dcb8))
+
+
+
+
+## [1.5.2](https://github.com/comfusion/after-dark/compare/v1.5.1...v1.5.2) (2017-04-30)
+
+
+### Bug Fixes
+
+* **typography:** only justify and hyphenate article bodies ([ed83bee](https://github.com/comfusion/after-dark/commit/ed83bee))
+
+
+
+
+## [1.5.1](https://github.com/comfusion/after-dark/compare/v1.5.0...v1.5.1) (2017-04-20)
+
+
+### Bug Fixes
+
+* **typography:** stop justifying and hyphenating text on small viewports ([77c6033](https://github.com/comfusion/after-dark/commit/77c6033))
+
+
+
+
+# [1.5.0](https://github.com/comfusion/after-dark/compare/v1.4.0...v1.5.0) (2017-04-16)
+
+
+### Bug Fixes
+
+* **links:** style external links in all browsers ([ccef559](https://github.com/comfusion/after-dark/commit/ccef559)), closes [#22](https://github.com/comfusion/after-dark/issues/22)
+* **partials:** fix markup validation error ([c82fc66](https://github.com/comfusion/after-dark/commit/c82fc66))
+
+
+### Features
+
+* **layouts:** add support for hugo 0.20.2 ([eba70c9](https://github.com/comfusion/after-dark/commit/eba70c9)), closes [#28](https://github.com/comfusion/after-dark/issues/28)
+* **typography:** justify text output and hyphenate ([4775618](https://github.com/comfusion/after-dark/commit/4775618))
+
+
+### Performance Improvements
+
+* **favicon:** add svg favicon ([b3b0008](https://github.com/comfusion/after-dark/commit/b3b0008))
+* **install:** remove design resources ([6eb145d](https://github.com/comfusion/after-dark/commit/6eb145d))
+
+
+### Reverts
+
+* **docs(README:** remove erroneous markdown file): ([925ed3e](https://github.com/comfusion/after-dark/commit/925ed3e))
+
+
+
+
+# [1.4.0](https://github.com/comfusion/after-dark/compare/v1.3.2...v1.4.0) (2017-04-10)
+
+
+### Features
+
+* **layouts:** add meta keywords to base template ([4b1f0f1](https://github.com/comfusion/after-dark/commit/4b1f0f1)), closes [#20](https://github.com/comfusion/after-dark/issues/20)
+
+
+
+
+## [1.3.2](https://github.com/comfusion/after-dark/compare/v1.3.1...v1.3.2) (2017-04-09)
+
+
+### Bug Fixes
+
+* **layouts:** output meta description when not explicitly set ([9f11bd6](https://github.com/comfusion/after-dark/commit/9f11bd6)), closes [#21](https://github.com/comfusion/after-dark/issues/21)
+
+
+
+
+## [1.3.1](https://github.com/comfusion/after-dark/compare/v1.3.0...v1.3.1) (2017-04-08)
+
+
+### Bug Fixes
+
+* **bundle:** add images to npm ignore file ([1694334](https://github.com/comfusion/after-dark/commit/1694334))
+
+
+
+
+# [1.3.0](https://github.com/comfusion/after-dark/compare/v1.2.0...v1.3.0) (2017-04-08)
+
+
+### Bug Fixes
+
+* **bundle:** remove images folder from npm release ([b277a20](https://github.com/comfusion/after-dark/commit/b277a20))
+
+
+### Features
+
+* **powered-by:** add page generation date ([c0c421a](https://github.com/comfusion/after-dark/commit/c0c421a))
+
+
+### Reverts
+
+* **powered-by:** remove page generation date ([478ba0b](https://github.com/comfusion/after-dark/commit/478ba0b))
+
+
+
+
+# [1.2.0](https://github.com/comfusion/after-dark/compare/v1.1.0...v1.2.0) (2017-03-30)
+
+
+### Features
+
+* **highlighting:** add syntax highlighting ([455062f](https://github.com/comfusion/after-dark/commit/455062f))
+* **shortcodes:** add figure shortcode ([8a0317f](https://github.com/comfusion/after-dark/commit/8a0317f))
+
+
+
+
+# [1.1.0](https://github.com/comfusion/after-dark/compare/v1.0.0...v1.1.0) (2017-03-30)
+
+
+### Features
+
+* **shortcodes:** add blockquote shortcode ([ea293e3](https://github.com/comfusion/after-dark/commit/ea293e3))
+
+
+
+
+# 1.0.0 (2017-03-30)
+
+
+### Bug Fixes
+
+* 404 page theme color url ref ([79d2377](https://github.com/comfusion/after-dark/commit/79d2377))
+* add add theme color to 404 page ([4f5ec87](https://github.com/comfusion/after-dark/commit/4f5ec87))
diff --git a/themes/after-dark/COPYING b/themes/after-dark/COPYING
new file mode 100644
index 0000000..5c93f45
--- /dev/null
+++ b/themes/after-dark/COPYING
@@ -0,0 +1,13 @@
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar After Dark is free and open-source software you can use to create a website, blog or app. Utilize the world's fastest framework for building websites and design your entire site right inside the terminal. With {{< external text="0.615s average" href="https://forestry.io/blog/hugo-vs-jekyll-benchmark/" />}} builds and decisecond page loads you could conceivably develop and serve your content from an {{< external "https://amzn.to/2Wx7xJk" "ODROID" />}} in space. Add high-resolution, responsive images with low-quality image placeholders and engaging visual effects without even touching an image editor. Earn rewards for keeping your software up-to-date and monetize attention to generate a borderless, low-maintenance & passive income. Quickly locate indexed content anywhere on your site using inbuilt fuzzy search with automatic search indexing and full offline support. Toggle between 1 of 8 customizable skin styles or disable them entirely and use custom layouts and styles to take complete design control. Verify the authenticity of your installation using secure cryptographic hashes and use CSP, SRI and Referrer Policy to lock down your content. Develop your entire site without Internet connectivity and expose an ephemeral Web server with e2e encryption and real-time traffic inspection. Optional. Create Your Own Proxy before using. Then rebuild your site to start Earning Rewards.
+ In addition to the above you may {{ partial "components/external.html" (dict "href" "https://gohugo.io/content-management/shortcodes/#use-hugo-s-built-in-shortcodes" "body" "Use Hugo's Built-in Shortcodes") }} as well. {{ partial "post/meta.html" . }}
+ Published
+ {{ if ne .Site.Params.hide_author true }}
+ {{ with .Params.author }}
+ by {{ index . }}
+ {{ else }}
+ by {{ .Site.Params.author }}
+ {{ end }}
+ {{ end }}
+
+ {{ with .Params.categories }}
+ in {{ delimit (apply (apply (sort .) "partial" "post/category-link.html" ".") "chomp" ".") ", " " and " }}
+ {{ end }}
+ {{ with .Params.tags }}
+ and tagged {{ delimit (apply (apply (sort .) "partial" "post/tag-link.html" ".") "chomp" ".") ", " " and " }}
+ {{ end }}
+ using {{ .WordCount }} words.
+
+ {{ partial "post/meta.html" . }}
+ {{- $body | plainify -}} {{ partial "components/alert.html" (dict "type" "error" "body" (errorf "Invalid use of external shortcode. Please provide a URL.")) }} {{ partial "components/alert.html" (dict "type" "error" "body" (errorf "Invalid autocomplete value for form. Did you mean \"off\" instead of %q?" $autocomplete)) }} {{ partial "components/alert.html" (dict "type" "error" "body" (errorf "Invalid autocomplete value for textarea. Did you mean \"off\" instead of %q?" $autocomplete)) }} {{ partial "components/alert.html" (dict "type" "error" "body" (errorf "Invalid wrap value for textarea. Did you mean \"off\" instead of %q?" $wrap)) }} {{ partial "components/alert.html" (dict "type" "error" "body" (errorf "Invalid autocomplete value for textinput. Did you mean \"off\" instead of %q?" $autocomplete)) }} 3){p=(r>>>1)+-1|0;m=Va((c[Ha>>2]|0)+224|0)|0;if((p|0)>1){o=1;do{m=Va((c[Ha>>2]|0)+224|0)|0|m<<1;o=o+1|0}while((o|0)!=(p|0))}v=m+((r&1|2)< >2;m=v>>2;Ba=44}else{w=q>>2;u=v>>2;switch(j|0){case 0:break;case 1:{sa=736;ta=752;o=d[768+(v<<3)+q>>0]|0;p=728;r=732;s=v;m=w;break a}default:{s=v;t=q;m=w;Ba=44;break a}}o=d[(q&3)+(644+((v&3)<<2))>>0]|0;switch(i|0){case 2:{sa=326;ta=342;p=3716;r=3716;s=v;m=w;break a}case 3:{p=732;r=728;m=660+(u<<1)+w|0;break}case 4:{p=326;r=342;m=644+(u<<2)+w|0;break}default:{p=358;r=422;m=664+(u<<3)+w|0}}sa=326;ta=342;o=(d[m>>0]<<4)+o|0;s=v;m=w}while(0);if((Ba|0)==44){sa=752;ta=736;o=d[768+(t<<3)+s>>0]|0;p=732;r=728;q=t}ra=o+1|0;pa=o>>4;if((pa|0)>-1){qa=(1< >0]=1}}else{if((d|0)==0?(h+-1&e|0)==0:0)a[o+203>>0]=1;c[o+312>>2]=c[k+13120>>2];b=a[l+42>>0]|0}while(0);h=h+e|0;p=c[k+13124>>2]|0;c[o+316>>2]=(h|0)>(p|0)?p:h;h=o+31312|0;c[h>>2]=0;if(!(b<<24>>24)){if(!n){c[h>>2]=1;b=1}else b=0;if((n|0)<(c[k+13128>>2]|0)){b=b|4;c[h>>2]=b}}else{if((d|0)>0){p=c[l+1676>>2]|0;g=m+-1|0;if((c[p+(f<<2)>>2]|0)==(c[p+(c[(c[l+1668>>2]|0)+(g<<2)>>2]<<2)>>2]|0))b=0;else{c[h>>2]=2;b=2}if((c[j>>2]|0)!=(c[i+(g<<2)>>2]|0)){b=b|1;c[h>>2]=b}}else b=0;if((e|0)>0){p=c[l+1676>>2]|0;g=m-(c[k+13128>>2]|0)|0;if((c[p+(f<<2)>>2]|0)!=(c[p+(c[(c[l+1668>>2]|0)+(g<<2)>>2]<<2)>>2]|0)){b=b|8;c[h>>2]=b}if((c[j>>2]|0)!=(c[i+(g<<2)>>2]|0)){b=b|4;c[h>>2]=b}}}h=(d|0)>0;if(h&(n|0)>0)g=(b>>>1&1^1)&255;else g=0;a[o+308>>0]=g;if((e|0)>0){g=c[k+13128>>2]|0;if((n|0)<(g|0))b=0;else b=(b>>>3&1^1)&255;a[o+309>>0]=b;if((n+1|0)<(g|0))b=0;else{b=c[l+1676>>2]|0;b=(c[b+(f<<2)>>2]|0)==(c[b+(c[(c[l+1668>>2]|0)+(m+1-g<<2)>>2]<<2)>>2]|0)&1}a[o+310>>0]=b;if(h&(n|0)>(g|0)){b=c[l+1676>>2]|0;b=(c[b+(f<<2)>>2]|0)==(c[b+(c[(c[l+1668>>2]|0)+(m+-1-g<<2)>>2]<<2)>>2]|0)&1}else b=0}else{a[o+309>>0]=0;a[o+310>>0]=0;b=0}a[o+311>>0]=b;return}function bc(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;h=c[e+136>>2]|0;B=e+2504|0;C=c[B>>2]|0;D=e+200|0;A=(R(c[(c[D>>2]|0)+13128>>2]|0,g)|0)+f|0;if((a[e+2056>>0]|0)==0?(a[e+2057>>0]|0)==0:0){h=0;i=0}else{if((f|0)>0?(a[h+308>>0]|0)!=0:0)i=Sa(e)|0;else i=0;if(!((g|0)<1|(i|0)!=0))if(!(a[h+309>>0]|0)){h=0;i=0}else{h=Sa(e)|0;i=0}else h=0}t=c[(c[D>>2]|0)+4>>2]|0?3:1;u=e+204|0;v=C+(A*148|0)+143|0;w=C+(A*148|0)+144|0;x=C+(A*148|0)+104|0;y=C+(A*148|0)+108|0;z=(h|0)==0;s=(i|h|0)==0;o=(i|0)==0;p=g+-1|0;q=f+-1|0;m=C+(A*148|0)+144|0;l=0;do{r=c[u>>2]|0;r=d[((l|0)==0?r+1644|0:r+1645|0)>>0]|0;if(a[e+2056+l>>0]|0){j=(l|0)==2;do if(j){h=a[v>>0]|0;a[w>>0]=h;c[y>>2]=c[x>>2];n=m}else{if(s){h=(Ua(e)|0)&255;n=C+(A*148|0)+142+l|0;a[n>>0]=h;break}if(!o){h=a[(c[B>>2]|0)+((q+(R(c[(c[D>>2]|0)+13128>>2]|0,g)|0)|0)*148|0)+142+l>>0]|0;n=C+(A*148|0)+142+l|0;a[n>>0]=h;break}if(z)h=0;else h=a[(c[B>>2]|0)+(((R(c[(c[D>>2]|0)+13128>>2]|0,p)|0)+f|0)*148|0)+142+l>>0]|0;n=C+(A*148|0)+142+l|0;a[n>>0]=h}while(0);if(h<<24>>24){h=0;do{do if(!s){if(!o){i=c[(c[B>>2]|0)+((q+(R(c[(c[D>>2]|0)+13128>>2]|0,g)|0)|0)*148|0)+(l<<4)+(h<<2)>>2]|0;break}if(z)i=0;else i=c[(c[B>>2]|0)+(((R(c[(c[D>>2]|0)+13128>>2]|0,p)|0)+f|0)*148|0)+(l<<4)+(h<<2)>>2]|0}else i=Xa(e)|0;while(0);c[C+(A*148|0)+(l<<4)+(h<<2)>>2]=i;h=h+1|0}while((h|0)!=4);do if((a[n>>0]|0)!=1){if(!j){if(s){c[C+(A*148|0)+100+(l<<2)>>2]=Za(e)|0;break}if(!o){c[C+(A*148|0)+100+(l<<2)>>2]=c[(c[B>>2]|0)+((q+(R(c[(c[D>>2]|0)+13128>>2]|0,g)|0)|0)*148|0)+100+(l<<2)>>2];break}if(z)h=0;else h=c[(c[B>>2]|0)+(((R(c[(c[D>>2]|0)+13128>>2]|0,p)|0)+f|0)*148|0)+100+(l<<2)>>2]|0;c[C+(A*148|0)+100+(l<<2)>>2]=h}}else{h=0;do{do if(c[C+(A*148|0)+(l<<4)+(h<<2)>>2]|0){if(s){i=Ya(e)|0;break}if(!o){i=c[(c[B>>2]|0)+((q+(R(c[(c[D>>2]|0)+13128>>2]|0,g)|0)|0)*148|0)+48+(l<<4)+(h<<2)>>2]|0;break}if(!z)i=c[(c[B>>2]|0)+(((R(c[(c[D>>2]|0)+13128>>2]|0,p)|0)+f|0)*148|0)+48+(l<<4)+(h<<2)>>2]|0;else i=0}else i=0;while(0);c[C+(A*148|0)+48+(l<<4)+(h<<2)>>2]=i;h=h+1|0}while((h|0)!=4);if(s){a[C+(A*148|0)+96+l>>0]=Wa(e)|0;break}if(!o){a[C+(A*148|0)+96+l>>0]=a[(c[B>>2]|0)+((q+(R(c[(c[D>>2]|0)+13128>>2]|0,g)|0)|0)*148|0)+96+l>>0]|0;break}if(z)h=0;else h=a[(c[B>>2]|0)+(((R(c[(c[D>>2]|0)+13128>>2]|0,p)|0)+f|0)*148|0)+96+l>>0]|0;a[C+(A*148|0)+96+l>>0]=h}while(0);b[C+(A*148|0)+112+(l*10|0)>>1]=0;j=0;do{h=c[C+(A*148|0)+(l<<4)+(j<<2)>>2]|0;i=j;j=j+1|0;k=C+(A*148|0)+112+(l*10|0)+(j<<1)|0;b[k>>1]=h;if((a[n>>0]|0)==2){if((i|0)>1){h=0-h|0;b[k>>1]=h}}else if(c[C+(A*148|0)+48+(l<<4)+(i<<2)>>2]|0){h=0-h|0;b[k>>1]=h}b[k>>1]=h<<16>>16< >1]|0)+o|0;b[a+((R(n,v)|0)<<1)>>1]=(t&m|0)==0?t:0-t>>31&f;n=n+1|0}while((n|0)!=(k|0));n=1}else n=1}else n=0;if(c[i+8>>2]|0){g=b[r>>1]|0;j=j+-1|0;if((k|0)>0){f=1< >1]|0)+g|0;b[a+((R(o,v)|0)+j<<1)>>1]=(t&m|0)==0?t:0-t>>31&f;o=o+1|0}while((o|0)!=(k|0))}}if(!q){m=j;o=k;j=0}else{t=j;s=11}}else{t=j;n=0;s=11}if((s|0)==11){if(c[i+4>>2]|0){o=b[r>>1]|0;if((n|0)<(t|0)){f=1< >1]|0)+o|0;b[a+(j<<1)>>1]=(s&m|0)==0?s:0-s>>31&f;j=j+1|0}while((j|0)!=(t|0));j=1}else j=1}else j=0;if(c[i+12>>2]|0){s=b[r>>1]|0;o=k+-1|0;g=R(o,v)|0;q=R(o,u)|0;if((n|0)<(t|0)){f=1< >1]|0)+s|0;b[a+(m+g<<1)>>1]=(k&r|0)==0?k:0-k>>31&f;m=m+1|0}while((m|0)!=(t|0));m=t}else m=t}else{m=t;o=k}}dd(a,d,v,u,h,m,o,l,n,j,p);return}function Yc(d,f,g,h,i,j,k,l,m,n,o,p,q){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;z=i+112+(m*10|0)|0;D=c[i+100+(m<<2)>>2]|0;M=g>>>1;K=h>>>1;E=(D|0)!=1;if(E){if(c[j>>2]|0){h=b[z>>1]|0;if((l|0)>0){u=1< 3){p=(r>>>1)+-1|0;m=Va((c[Ha>>2]|0)+224|0)|0;if((p|0)>1){o=1;do{m=Va((c[Ha>>2]|0)+224|0)|0|m<<1;o=o+1|0}while((o|0)!=(p|0))}v=m+((r&1|2)< >2;m=v>>2;Ca=44}else{w=q>>2;u=v>>2;switch(j|0){case 0:break;case 1:{ua=736;va=752;o=d[768+(v<<3)+q>>0]|0;p=728;r=732;s=v;m=w;break a}default:{s=v;t=q;m=w;Ca=44;break a}}o=d[(q&3)+(644+((v&3)<<2))>>0]|0;switch(i|0){case 2:{ua=326;va=342;p=3716;r=3716;s=v;m=w;break a}case 3:{p=732;r=728;m=660+(u<<1)+w|0;break}case 4:{p=326;r=342;m=644+(u<<2)+w|0;break}default:{p=358;r=422;m=664+(u<<3)+w|0}}ua=326;va=342;o=(d[m>>0]<<4)+o|0;s=v;m=w}while(0);if((Ca|0)==44){ua=752;va=736;o=d[768+(t<<3)+s>>0]|0;p=732;r=728;q=t}ra=o+1|0;pa=o>>4;if((pa|0)>-1){qa=(1<
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Getting Started
+
+Please [Install Hugo](https://gohugo.io/getting-started/installing) `0.44` or greater before getting started.
+
+### Installation
+
+For scripted installation use [Quick Install](https://after-dark.habd.as/feature/quick-install/). Otherwise download a copy and:
+
+```sh
+hugo serve --theme after-dark
+```
+
+### Upgrading
+
+Run the [Upgrade Script](https://after-dark.habd.as/feature/upgrade-script/) to check for updates and upgrade automatically:
+
+```sh
+./themes/after-dark/bin/upgrade
+```
+
+## Verifying
+
+If installed or upgraded via script you may use the [Release Validator](https://after-dark.habd.as/validate/) to verify you're running a PGP-signed and SHA-verified release. Integrity is checked at the source level and may be performed offline. See [Release Hashes](https://after-dark.habd.as/feature/release-hashes/) for more info.
+
+## Usage
+
+Use the included [Online Help](https://after-dark.habd.as/feature/online-help/) to learn how to set-up and use After Dark. Help docs may be served locally and do not require an Internet connection to function.
+
+## Credits
+
+Special thanks to エゴイスト for [hackcss](https://git.habd.as/comfusion/hack), Dan Klammer for the [bytesize icons](https://git.habd.as/comfusion/bytesize-icons) and Vincent Prouillet for the [Zola port](https://www.getzola.org/themes/after-dark/).
+
+## License
+
+This work is free. You can redistribute it and/or modify it under the
+terms of the Do What The Fuck You Want To Public License, Version 2,
+as published by Sam Hocevar. The full text of the license is included in the file COPYING in the source.
diff --git a/themes/after-dark/archetypes/default.md b/themes/after-dark/archetypes/default.md
new file mode 100644
index 0000000..0a5bae4
--- /dev/null
+++ b/themes/after-dark/archetypes/default.md
@@ -0,0 +1,6 @@
++++
+title = "{{ replace .TranslationBaseName "-" " " | title }}"
+date = {{ .Date }}
+description = "This text is displayed in search result listings."
+draft = true
++++
diff --git a/themes/after-dark/archetypes/post.md b/themes/after-dark/archetypes/post.md
new file mode 100644
index 0000000..938ba31
--- /dev/null
+++ b/themes/after-dark/archetypes/post.md
@@ -0,0 +1,86 @@
++++
+title = "{{ replace .TranslationBaseName "-" " " | title }}"
+date = {{ .Date }}
+description = "This text was generated using the After Dark post archetype."
+draft = true
+toc = false
+categories = ["hacking"]
+tags = ["after", "dark"]
+images = [
+ "https://source.unsplash.com/collection/983219/1600x900"
+] # overrides site-wide open graph image
++++
+
+Before continuing please create a post archetype. Archetypes are located within markdown files in the `archetypes` directory of your site:
+
+```
+flying-toasters
+├── archetypes
+│ ├── default.md
+│ └── post.md
+├── content
+```
+
+If `post.md` does not exist yet, copy it from the After Dark default:
+
+```sh
+$ cd flying-toasters
+$ cp themes/after-dark/archetypes/post.md archetypes/
+```
+
+Make some changes to `post.md` then use `hugo new` to draft a new post:
+
+```sh
+$ vi archetypes/post.md # or vim, emacs, nano ...
+$ hugo new post/totally-twisted.md
+```
+
+If `hugo server` is running with the `--navigateToChanged` flag your new post will appear automatically in JavaScript-enabled browsers. If you see an empty page you probably need to restart `hugo server` with the `--buildDrafts` flag.
+
+Use archetypes to maintain consistency when creating content for [Custom Layouts](http://localhost:1414/feature/custom-layouts). Like custom layouts {{< external href="https://gohugo.io/content-management/archetypes/" text="Hugo Archetypes" />}} may contain templating logic.
+
+
+
+---
+
+{{< hackcss-alert type="info" >}}
+Tip: This message appears below a {{< external href="https://gohugo.io/content-management/summaries/#manual-summary-splitting" text="Manual Summary Split" />}}.
+{{< /hackcss-alert >}}
+
+The above tip uses a shortcode called [Alert](http://localhost:1414/shortcode/alert/). In addition to a number of [Shortcodes](http://localhost:1414/shortcode/) After Dark provides a number of other [Features](http://localhost:1414/feature/).
+
+The [Module System](http://localhost:1414/feature/module-system/), for example, provides a module to display image animations with alpha transparency and something not possible using a GIF:
+
+
+
+If you do not see the above animation, you may install the [Fractal Forest](http://localhost:1414/module/fractal-forest/) module yourself or reinstall After Dark using the [Quick Install](http://localhost:1414/feature/quick-install/) for instant setup.
+
+Review the [Online Help](http://localhost:1414/) to learn about other useful features such as the [Section Menus](http://localhost:1414/feature/section-menu) navigational aid, responsive [Post Images](http://localhost:1414/feature/post-images/"), offline [Fuzzy Search](http://localhost:1414/feature/fuzzy-search/) and more.
+
+If online help isn't running, go ahead and start it using the corresponding command from the following cheat sheet within your site directory:
+
+```sh
+# After Dark scripts
+./themes/after-dark/bin/upgrade # check for updates and upgrade
+./themes/after-dark/bin/help # start online help docs
+./themes/after-dark/bin/install # run the quick installer
+
+# Hugo commands
+hugo # build site with default settings
+hugo --minify # build with minified sources (hugo 0.47 and above)
+hugo --config config.prod.toml # build with custom config
+hugo --templateMetrics # generate template metrics
+hugo new about.md # generate page content
+hugo new post/coming-soon.md # generate new post content
+hugo serve # serve locally with default settings
+hugo serve --buildDrafts --navigateToChanged # serve with drafts for editing
+hugo serve --buildExpired # serve locally showing expired content
+hugo serve --disableLiveReload # serve locally w/live reload disabled
+hugo list drafts # list draft content
+hugo list expired # list expired content
+hugo list future # list future content
+hugo [serve] --debug # build or serve hugo with debug info
+hugo [command] --help
+```
+
+Thank you for choosing After Dark.
diff --git a/themes/after-dark/archetypes/search.md b/themes/after-dark/archetypes/search.md
new file mode 100644
index 0000000..17736d6
--- /dev/null
+++ b/themes/after-dark/archetypes/search.md
@@ -0,0 +1,15 @@
++++
+title = "Search" # title of the page
+layout = "search" # sets the layout to use
+noindex = true # tell robots not to index
+[form]
+ helpblock = "Press s to focus input anytime."
+[form.input]
+ placeholder = "Enter search query…"
+ disabled = false
+[security.csp.directives]
+ scriptSrc = [
+ "'sha512-Bxby9zhln4Zc2thGA1E9CdT4qcCY52SxO/SBxAH6qQK6LK6/1gGq1xJ3Uz0SXTsPSL6quze7bYQUHr94xJS7jQ=='",
+ "'unsafe-eval'"
+ ]
++++
diff --git a/themes/after-dark/assets/css/custom.css b/themes/after-dark/assets/css/custom.css
new file mode 100644
index 0000000..e4f55c0
--- /dev/null
+++ b/themes/after-dark/assets/css/custom.css
@@ -0,0 +1,20 @@
+a[rel*="external"]::after {
+ content: " " url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20class='i-external'%20viewBox='0%200%2032%2032'%20width='14'%20height='14'%20fill='none'%20stroke='%23ff9800'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='9.38%'%3E%3Cpath%20d='M14%209%20L3%209%203%2029%2023%2029%2023%2018%20M18%204%20L28%204%2028%2014%20M28%204%20L14%2018'/%3E%3C/svg%3E");
+}
+nav a.active {
+ background-color: inherit;
+ color: #fff;
+}
+a[itemprop="url"] {
+ color: #ff9800;
+}
+a[itemprop="url"]:hover {
+ color: #fff;
+}
+.muted, .help-block {
+ opacity: 0.70;
+}
+.hack .muted,
+.hack .help-block {
+ color: #e0e0e0;
+}
diff --git a/themes/after-dark/assets/css/theme.css b/themes/after-dark/assets/css/theme.css
new file mode 100644
index 0000000..cbf3a9f
--- /dev/null
+++ b/themes/after-dark/assets/css/theme.css
@@ -0,0 +1,152 @@
+:root {
+ scroll-behavior: smooth;
+ --screen-size-small: 30em; /* breakpoint reference only */
+}
+@keyframes intro {
+ 0% { opacity: 0 } 100% { opacity: 1 }
+}
+.blur-up {
+ -webkit-filter: blur(5px);
+ filter: blur(5px);
+ transition: filter 400ms, -webkit-filter 400ms;
+}
+.blur-up.lazyloaded {
+ -webkit-filter: blur(0);
+ filter: blur(0);
+}
+.hack .readmore {
+ margin-bottom: 2.2em;
+}
+.responsive-iframe {
+ position: relative;
+ padding-bottom: 56.25%; /* 16:9 */
+ padding-top: 25px;
+ height: 0;
+}
+.responsive-iframe iframe {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+iframe {
+ border: 0;
+}
+main, footer {
+ animation: intro 0.3s both;
+ animation-delay: 0.15s;
+}
+header:first-of-type + details {
+ margin-top: 1rem;
+}
+footer time[datetime$="M"]:before {
+ content: "\2013\0020";
+}
+body > footer p.muted {
+ margin-bottom: 0;
+}
+@media only screen and (max-width: 768px) {
+ footer time[datetime$="M"] {
+ display: none;
+ }
+}
+blockquote cite {
+ display: block;
+}
+blockquote cite::before {
+ content: "\2014\00A0";
+}
+:target {
+ filter: brightness(1.2);
+}
+:disabled {
+ cursor: not-allowed;
+}
+#search-app [v-cloak] {
+ display: none;
+}
+/* hack.css overrides and enhancements */
+.hack li ul {
+ margin: 0;
+}
+.hack ol li {
+ padding-left: 27px;
+}
+.main {
+ padding: 20px 10px;
+}
+input.form-control {
+ border-radius: 0;
+ background-color: transparent;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+}
+input.form-control,
+textarea.form-control,
+select.form-control,
+.help-block {
+ font-size: initial;
+}
+@media only screen and (max-width: 768px) {
+ .help-block {
+ font-size: unset;
+ }
+}
+html {
+ font-size: 13px;
+}
+.hack .form input,
+.hack .form textarea,
+.hack .form button,
+.hack .form label {
+ font-size: 1rem;
+}
+.hack .alert .highlight:first-of-type .chroma,
+.hack .card .highlight:first-of-type .chroma {
+ margin-top: unset;
+}
+.hack .alert .highlight:last-of-type .chroma,
+.hack .card .highlight:last-of-type .chroma {
+ margin-bottom: unset;
+}
+.hack blockquote,
+.hack blockquote:after {
+ line-height: 1.5;
+}
+.hack figure {
+ margin: unset;
+}
+.hack figure a {
+ border-bottom: none;
+}
+.hack figure a:hover {
+ background-color: inherit;
+}
+article [itemprop="description"] {
+ margin-bottom: 20px;
+ margin-top: 20px;
+}
+article header img {
+ width: 100%;
+ border-radius: 3px;
+}
+table td, table th {
+ line-height: inherit;
+}
+table a {
+ border-bottom: unset;
+}
+img {
+ max-width: 100%;
+}
+@media only screen and (min-width: 768px) {
+ html {
+ font-size: 16px;
+ margin-left: calc(100vw - 100%);
+ }
+ .container {
+ max-width: 50rem;
+ }
+}
diff --git a/themes/after-dark/assets/css/vendor/hack/dark-grey.css b/themes/after-dark/assets/css/vendor/hack/dark-grey.css
new file mode 100644
index 0000000..fa926b8
--- /dev/null
+++ b/themes/after-dark/assets/css/vendor/hack/dark-grey.css
@@ -0,0 +1 @@
+.dark-grey{background-color:#181818;color:#ccc}.dark-grey pre{background-color:#181818;padding:0;border:none}.dark-grey pre code{color:#00bcd4}.dark-grey h1 a,.dark-grey h2 a,.dark-grey h3 a,.dark-grey h4 a,.dark-grey h5 a{color:#ccc}.dark-grey code,.dark-grey strong{color:#fff}.dark-grey code{font-weight:100}.dark-grey table{color:#ccc}.dark-grey table td,.dark-grey table th{border-color:#444}.dark-grey table tbody td:first-child{color:#fff}.dark-grey .form-group label{color:#ccc;border-color:rgba(95,95,95,.78)}.dark-grey .form-group.form-textarea label:after{background-color:#181818}.dark-grey .form-control{color:#ccc;border-color:rgba(95,95,95,.78)}.dark-grey .form-control:focus{border-color:#ccc;color:#ccc}.dark-grey textarea.form-control{color:#ccc}.dark-grey .card{border-color:rgba(95,95,95,.78)}.dark-grey .card .card-header{background-color:transparent;color:#ccc;border-bottom:1px solid rgba(95,95,95,.78)}.dark-grey .btn.btn-ghost.btn-default{border-color:#ababab;color:#ababab}.dark-grey .btn.btn-ghost.btn-default:focus,.dark-grey .btn.btn-ghost.btn-default:hover{border-color:#9c9c9c;color:#9c9c9c;z-index:1}.dark-grey .btn.btn-ghost.btn-default:focus,.dark-grey .btn.btn-ghost.btn-default:hover{border-color:#e0e0e0;color:#e0e0e0}.dark-grey .btn.btn-ghost.btn-primary:focus,.dark-grey .btn.btn-ghost.btn-primary:hover{border-color:#64b5f6;color:#64b5f6}.dark-grey .btn.btn-ghost.btn-success:focus,.dark-grey .btn.btn-ghost.btn-success:hover{border-color:#81c784;color:#81c784}.dark-grey .btn.btn-ghost.btn-info:focus,.dark-grey .btn.btn-ghost.btn-info:hover{border-color:#4dd0e1;color:#4dd0e1}.dark-grey .btn.btn-ghost.btn-error:focus,.dark-grey .btn.btn-ghost.btn-error:hover{border-color:#e57373;color:#e57373}.dark-grey .btn.btn-ghost.btn-warning:focus,.dark-grey .btn.btn-ghost.btn-warning:hover{border-color:#ffb74d;color:#ffb74d}.dark-grey .avatarholder,.dark-grey .placeholder{background-color:transparent;border-color:#333}.dark-grey .menu .menu-item{color:#ccc;border-color:rgba(95,95,95,.78)}.dark-grey .menu .menu-item.active,.dark-grey .menu .menu-item:hover{color:#fff;border-color:#ccc}
\ No newline at end of file
diff --git a/themes/after-dark/assets/css/vendor/hack/dark.css b/themes/after-dark/assets/css/vendor/hack/dark.css
new file mode 100644
index 0000000..2f1a04c
--- /dev/null
+++ b/themes/after-dark/assets/css/vendor/hack/dark.css
@@ -0,0 +1 @@
+.dark{color:#ccc}.dark,.dark pre{background-color:#000}.dark pre{padding:0;border:none}.dark pre code{color:#00bcd4}.dark h1 a,.dark h2 a,.dark h3 a,.dark h4 a,.dark h5 a{color:#ccc}.dark code,.dark strong{color:#fff}.dark code{font-weight:100}.dark table{color:#ccc}.dark table td,.dark table th{border-color:#444}.dark table tbody td:first-child{color:#fff}.dark .form-group label{color:#ccc;border-color:rgba(95,95,95,.78)}.dark .form-group.form-textarea label:after{background-color:#000}.dark .form-control{color:#ccc;border-color:rgba(95,95,95,.78)}.dark .form-control:focus{border-color:#ccc;color:#ccc}.dark textarea.form-control{color:#ccc}.dark .card{border-color:rgba(95,95,95,.78)}.dark .card .card-header{background-color:transparent;color:#ccc;border-bottom:1px solid rgba(95,95,95,.78)}.dark .btn.btn-ghost.btn-default{border-color:#ababab;color:#ababab}.dark .btn.btn-ghost.btn-default:focus,.dark .btn.btn-ghost.btn-default:hover{border-color:#9c9c9c;color:#9c9c9c;z-index:1}.dark .btn.btn-ghost.btn-default:focus,.dark .btn.btn-ghost.btn-default:hover{border-color:#e0e0e0;color:#e0e0e0}.dark .btn.btn-ghost.btn-primary:focus,.dark .btn.btn-ghost.btn-primary:hover{border-color:#64b5f6;color:#64b5f6}.dark .btn.btn-ghost.btn-success:focus,.dark .btn.btn-ghost.btn-success:hover{border-color:#81c784;color:#81c784}.dark .btn.btn-ghost.btn-info:focus,.dark .btn.btn-ghost.btn-info:hover{border-color:#4dd0e1;color:#4dd0e1}.dark .btn.btn-ghost.btn-error:focus,.dark .btn.btn-ghost.btn-error:hover{border-color:#e57373;color:#e57373}.dark .btn.btn-ghost.btn-warning:focus,.dark .btn.btn-ghost.btn-warning:hover{border-color:#ffb74d;color:#ffb74d}.dark .avatarholder,.dark .placeholder{background-color:transparent;border-color:#333}.dark .menu .menu-item{color:#ccc;border-color:rgba(95,95,95,.78)}.dark .menu .menu-item.active,.dark .menu .menu-item:hover{color:#fff;border-color:#ccc}
\ No newline at end of file
diff --git a/themes/after-dark/assets/css/vendor/hack/hack.css b/themes/after-dark/assets/css/vendor/hack/hack.css
new file mode 100644
index 0000000..f23ce01
--- /dev/null
+++ b/themes/after-dark/assets/css/vendor/hack/hack.css
@@ -0,0 +1 @@
+html{font-size:12px}*{box-sizing:border-box;text-rendering:geometricPrecision}body{font-size:1rem;line-height:1.5rem;margin:0;font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;word-wrap:break-word}h1,h2,h3,h4,h5,h6{line-height:1.3em}fieldset{border:none;padding:0;margin:0}pre{padding:2rem;margin:1.75rem 0;background-color:#fff;border:1px solid #ccc;overflow:auto}code[class*=language-],pre[class*=language-],pre code{font-weight:100;text-shadow:none;margin:1.75rem 0}a{cursor:pointer;color:#ff2e88;text-decoration:none;border-bottom:1px solid #ff2e88}a:hover{background-color:#ff2e88;color:#fff}.grid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.grid.\-top{-ms-flex-align:start;align-items:flex-start}.grid.\-middle{-ms-flex-align:center;align-items:center}.grid.\-bottom{-ms-flex-align:end;align-items:flex-end}.grid.\-stretch{-ms-flex-align:stretch;align-items:stretch}.grid.\-baseline{-ms-flex-align:baseline;align-items:baseline}.grid.\-left{-ms-flex-pack:start;justify-content:flex-start}.grid.\-center{-ms-flex-pack:center;justify-content:center}.grid.\-right{-ms-flex-pack:end;justify-content:flex-end}.grid.\-between{-ms-flex-pack:justify;justify-content:space-between}.grid.\-around{-ms-flex-pack:distribute;justify-content:space-around}.cell{-ms-flex:1;flex:1;box-sizing:border-box}@media screen and (min-width:768px){.cell.\-1of12{-ms-flex:0 0 8.33333%;flex:0 0 8.33333%}.cell.\-2of12{-ms-flex:0 0 16.66667%;flex:0 0 16.66667%}.cell.\-3of12{-ms-flex:0 0 25%;flex:0 0 25%}.cell.\-4of12{-ms-flex:0 0 33.33333%;flex:0 0 33.33333%}.cell.\-5of12{-ms-flex:0 0 41.66667%;flex:0 0 41.66667%}.cell.\-6of12{-ms-flex:0 0 50%;flex:0 0 50%}.cell.\-7of12{-ms-flex:0 0 58.33333%;flex:0 0 58.33333%}.cell.\-8of12{-ms-flex:0 0 66.66667%;flex:0 0 66.66667%}.cell.\-9of12{-ms-flex:0 0 75%;flex:0 0 75%}.cell.\-10of12{-ms-flex:0 0 83.33333%;flex:0 0 83.33333%}.cell.\-11of12{-ms-flex:0 0 91.66667%;flex:0 0 91.66667%}}@media screen and (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.cell{-ms-flex:0 0 auto;flex:0 0 auto}}.hack,.hack blockquote,.hack code,.hack em,.hack h1,.hack h2,.hack h3,.hack h4,.hack h5,.hack h6,.hack strong{font-size:1rem;font-style:normal;font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif}.hack blockquote,.hack code,.hack em,.hack strong{line-height:20px}.hack blockquote,.hack code,.hack footer,.hack h1,.hack h2,.hack h3,.hack h4,.hack h5,.hack h6,.hack header,.hack li,.hack ol,.hack p,.hack section,.hack ul{float:none;margin:0;padding:0}.hack blockquote,.hack h1,.hack ol,.hack p,.hack ul{margin-top:20px;margin-bottom:20px}.hack h1{position:relative;display:inline-block;display:table-cell;padding:20px 0 30px;margin:0;overflow:hidden}.hack h1:after{content:"====================================================================================================";position:absolute;bottom:10px;left:0}.hack h1+*{margin-top:0}.hack h2,.hack h3,.hack h4,.hack h5,.hack h6{position:relative;margin-bottom:1.75rem}.hack h2:before,.hack h3:before,.hack h4:before,.hack h5:before,.hack h6:before{display:inline}.hack h2:before{content:"## "}.hack h3:before{content:"### "}.hack h4:before{content:"#### "}.hack h5:before{content:"##### "}.hack h6:before{content:"###### "}.hack li{position:relative;display:block;padding-left:20px}.hack li:after{position:absolute;top:0;left:0}.hack ul>li:after{content:"-"}.hack ol{counter-reset:a}.hack ol>li:after{content:counter(a) ".";counter-increment:a}.hack ol li:nth-child(n+10):after{left:-7px}.hack blockquote{position:relative;padding-left:17px;padding-left:2ch;overflow:hidden}.hack blockquote:after{content:">\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>";white-space:pre;position:absolute;top:0;left:0;line-height:20px}.hack em:after,.hack em:before{content:"*";display:inline}.hack pre code:after,.hack pre code:before{content:""}.hack code{font-weight:700}.hack code:after,.hack code:before{content:"`";display:inline}.hack hr{position:relative;height:20px;overflow:hidden;border:0;margin:20px 0}.hack hr:after{content:"----------------------------------------------------------------------------------------------------";position:absolute;top:0;left:0;line-height:20px;width:100%;word-wrap:break-word}@-moz-document url-prefix(){.hack h1{display:block}}.hack-ones ol>li:after{content:"1."}p{margin:0 0 1.75rem}.container{max-width:70rem}.container,.container-fluid{margin:0 auto;padding:0 1rem}.inner{padding:1rem}.inner2x{padding:2rem}.pull-left{float:left}.pull-right{float:right}.progress-bar{height:8px;opacity:.8;background-color:#ccc;margin-top:12px}.progress-bar.progress-bar-show-percent{margin-top:38px}.progress-bar-filled{background-color:gray;height:100%;transition:width .3s ease;position:relative;width:0}.progress-bar-filled:before{content:"";border:6px solid transparent;border-top-color:gray;position:absolute;top:-12px;right:-6px}.progress-bar-filled:after{color:gray;content:attr(data-filled);display:block;font-size:12px;white-space:nowrap;position:absolute;border:6px solid transparent;top:-38px;right:0;-ms-transform:translateX(50%);transform:translateX(50%)}table{width:100%;border-collapse:collapse;margin:1.75rem 0;color:#778087}table td,table th{vertical-align:top;border:1px solid #ccc;line-height:15px;padding:10px}table thead th{font-size:10px}table tbody td:first-child{font-weight:700;color:#333}.form{width:30rem}.form-group{margin-bottom:1.75rem;overflow:auto}.form-group label{border-bottom:2px solid #ccc;color:#333;width:10rem;display:inline-block;height:38px;line-height:38px;padding:0;float:left;position:relative}.form-group.form-success label{color:#4caf50!important;border-color:#4caf50!important}.form-group.form-warning label{color:#ff9800!important;border-color:#ff9800!important}.form-group.form-error label{color:#f44336!important;border-color:#f44336!important}.form-control{outline:none;border:none;border-bottom:2px solid #ccc;padding:.5rem 0;width:20rem;height:38px;background-color:transparent}.form-control:focus{border-color:#555}.form-group.form-textarea label:after{position:absolute;content:"";width:2px;background-color:#fff;right:-2px;top:0;bottom:0}textarea.form-control{height:auto;resize:none;padding:1rem 0;border-bottom:2px solid #ccc;border-left:2px solid #ccc;padding:.5rem}select.form-control{border-radius:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none}.help-block{color:#999;margin-top:.5rem}.form-actions{margin-bottom:1.75rem}.btn{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;cursor:pointer;outline:none;padding:.65rem 2rem;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;z-index:1}.btn:active{box-shadow:inset 0 1px 3px rgba(0,0,0,.12)}.btn.btn-ghost{border-color:#757575;color:#757575;background-color:transparent}.btn.btn-ghost:focus,.btn.btn-ghost:hover{border-color:#424242;color:#424242;z-index:2}.btn.btn-ghost:hover{background-color:transparent}.btn-block{width:100%;display:-ms-flexbox;display:flex}.btn-default{color:#fff;background-color:#e0e0e0;border:1px solid #e0e0e0;color:#333}.btn-default:focus:not(.btn-ghost),.btn-default:hover{background-color:#dcdcdc;border-color:#dcdcdc}.btn-success{color:#fff;background-color:#4caf50;border:1px solid #4caf50}.btn-success:focus:not(.btn-ghost),.btn-success:hover{background-color:#43a047;border-color:#43a047}.btn-success.btn-ghost{border-color:#4caf50;color:#4caf50}.btn-success.btn-ghost:focus,.btn-success.btn-ghost:hover{border-color:#388e3c;color:#388e3c;z-index:2}.btn-error{color:#fff;background-color:#f44336;border:1px solid #f44336}.btn-error:focus:not(.btn-ghost),.btn-error:hover{background-color:#e53935;border-color:#e53935}.btn-error.btn-ghost{border-color:#f44336;color:#f44336}.btn-error.btn-ghost:focus,.btn-error.btn-ghost:hover{border-color:#d32f2f;color:#d32f2f;z-index:2}.btn-warning{color:#fff;background-color:#ff9800;border:1px solid #ff9800}.btn-warning:focus:not(.btn-ghost),.btn-warning:hover{background-color:#fb8c00;border-color:#fb8c00}.btn-warning.btn-ghost{border-color:#ff9800;color:#ff9800}.btn-warning.btn-ghost:focus,.btn-warning.btn-ghost:hover{border-color:#f57c00;color:#f57c00;z-index:2}.btn-info{color:#fff;background-color:#00bcd4;border:1px solid #00bcd4}.btn-info:focus:not(.btn-ghost),.btn-info:hover{background-color:#00acc1;border-color:#00acc1}.btn-info.btn-ghost{border-color:#00bcd4;color:#00bcd4}.btn-info.btn-ghost:focus,.btn-info.btn-ghost:hover{border-color:#0097a7;color:#0097a7;z-index:2}.btn-primary{color:#fff;background-color:#2196f3;border:1px solid #2196f3}.btn-primary:focus:not(.btn-ghost),.btn-primary:hover{background-color:#1e88e5;border-color:#1e88e5}.btn-primary.btn-ghost{border-color:#2196f3;color:#2196f3}.btn-primary.btn-ghost:focus,.btn-primary.btn-ghost:hover{border-color:#1976d2;color:#1976d2;z-index:2}.btn-group{overflow:auto}.btn-group .btn{float:left}.btn-group .btn-ghost:not(:first-child){margin-left:-1px}.card{border:1px solid #ccc}.card .card-header{color:#333;text-align:center;background-color:#ddd;padding:.5rem 0}.alert{color:#ccc;padding:1rem;border:1px solid #ccc;margin-bottom:1.75rem}.alert-success{color:#4caf50;border-color:#4caf50}.alert-error{color:#f44336;border-color:#f44336}.alert-info{color:#00bcd4;border-color:#00bcd4}.alert-warning{color:#ff9800;border-color:#ff9800}.media:not(:last-child){margin-bottom:1.25rem}.media-left{padding-right:1rem}.media-left,.media-right{display:table-cell;vertical-align:top}.media-right{padding-left:1rem}.media-body{display:table-cell;vertical-align:top}.media-heading{font-size:1.16667rem;font-weight:700}.media-content{margin-top:.3rem}.avatarholder,.placeholder{background-color:#f0f0f0;text-align:center;color:#b9b9b9;font-size:1rem;border:1px solid #f0f0f0}.avatarholder{width:48px;height:48px;line-height:46px;font-size:2rem;background-size:cover;background-position:50%;background-repeat:no-repeat}.avatarholder.rounded{border-radius:33px}.loading{display:inline-block;content:" ";height:20px;width:20px;margin:0 .5rem;animation:a .6s infinite linear;border:2px solid #e91e63;border-right-color:transparent;border-radius:50%}.btn .loading{margin-bottom:0;width:14px;height:14px}.btn div.loading{float:left}.alert .loading{margin-bottom:-5px}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.menu{width:100%}.menu .menu-item{display:block;color:#616161;border-color:#616161}.menu .menu-item.active,.menu .menu-item:hover{color:#000;border-color:#000;background-color:transparent}@media screen and (max-width:768px){.form-group label{display:block;border-bottom:none;width:100%}.form-group.form-textarea label:after{display:none}.form-control{width:100%}textarea.form-control{border-left:none;padding:.5rem 0}pre::-webkit-scrollbar{height:3px}}@media screen and (max-width:480px){.form{width:100%}}
\ No newline at end of file
diff --git a/themes/after-dark/assets/css/vendor/hack/solarized-dark.css b/themes/after-dark/assets/css/vendor/hack/solarized-dark.css
new file mode 100644
index 0000000..4c29736
--- /dev/null
+++ b/themes/after-dark/assets/css/vendor/hack/solarized-dark.css
@@ -0,0 +1 @@
+.solarized-dark{background-color:#073642;color:#78909c}.solarized-dark h1,.solarized-dark h2,.solarized-dark h3,.solarized-dark h4,.solarized-dark h5,.solarized-dark h6{color:#1e88e5}.solarized-dark h1 a,.solarized-dark h2 a,.solarized-dark h3 a,.solarized-dark h4 a,.solarized-dark h5 a,.solarized-dark h6 a{color:#1e88e5;border-bottom-color:#1e88e5}.solarized-dark h1 a:hover,.solarized-dark h2 a:hover,.solarized-dark h3 a:hover,.solarized-dark h4 a:hover,.solarized-dark h5 a:hover,.solarized-dark h6 a:hover{background-color:#1e88e5;color:#fff}.solarized-dark pre{background-color:#073642;padding:0;border:none}.solarized-dark pre code{color:#009688}.solarized-dark h1 a,.solarized-dark h2 a,.solarized-dark h3 a,.solarized-dark h4 a,.solarized-dark h5 a{color:#78909c}.solarized-dark code,.solarized-dark strong{color:#90a4ae}.solarized-dark code{font-weight:100}.solarized-dark .progress-bar-filled{background-color:#558b2f}.solarized-dark .progress-bar-filled:after,.solarized-dark .progress-bar-filled:before{color:#90a4ae}.solarized-dark table{color:#78909c}.solarized-dark table td,.solarized-dark table th{border-color:#b0bec5}.solarized-dark table tbody td:first-child{color:#b0bec5}.solarized-dark .form-group label{color:#78909c;border-color:#90a4ae}.solarized-dark .form-group.form-textarea label:after{background-color:#073642}.solarized-dark .form-control{color:#78909c;border-color:#90a4ae}.solarized-dark .form-control:focus{border-color:#cfd8dc;color:#cfd8dc}.solarized-dark textarea.form-control{color:#78909c}.solarized-dark .card{border-color:#90a4ae}.solarized-dark .card .card-header{background-color:transparent;color:#78909c;border-bottom:1px solid #90a4ae}.solarized-dark .btn.btn-ghost.btn-default{border-color:#607d8b;color:#607d8b}.solarized-dark .btn.btn-ghost.btn-default:focus,.solarized-dark .btn.btn-ghost.btn-default:hover{border-color:#90a4ae;color:#90a4ae;z-index:1}.solarized-dark .btn.btn-ghost.btn-default:focus,.solarized-dark .btn.btn-ghost.btn-default:hover{border-color:#e0e0e0;color:#e0e0e0}.solarized-dark .btn.btn-ghost.btn-primary:focus,.solarized-dark .btn.btn-ghost.btn-primary:hover{border-color:#64b5f6;color:#64b5f6}.solarized-dark .btn.btn-ghost.btn-success:focus,.solarized-dark .btn.btn-ghost.btn-success:hover{border-color:#81c784;color:#81c784}.solarized-dark .btn.btn-ghost.btn-info:focus,.solarized-dark .btn.btn-ghost.btn-info:hover{border-color:#4dd0e1;color:#4dd0e1}.solarized-dark .btn.btn-ghost.btn-error:focus,.solarized-dark .btn.btn-ghost.btn-error:hover{border-color:#e57373;color:#e57373}.solarized-dark .btn.btn-ghost.btn-warning:focus,.solarized-dark .btn.btn-ghost.btn-warning:hover{border-color:#ffb74d;color:#ffb74d}.solarized-dark .avatarholder,.solarized-dark .placeholder{background-color:transparent;border-color:#90a4ae}.solarized-dark .menu .menu-item{color:#78909c;border-color:#90a4ae}.solarized-dark .menu .menu-item.active,.solarized-dark .menu .menu-item:hover{color:#fff;border-color:#78909c}
\ No newline at end of file
diff --git a/themes/after-dark/assets/css/vendor/hack/standard.css b/themes/after-dark/assets/css/vendor/hack/standard.css
new file mode 100644
index 0000000..79fef56
--- /dev/null
+++ b/themes/after-dark/assets/css/vendor/hack/standard.css
@@ -0,0 +1 @@
+html{font-size:14px}.standard{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica,helvetica neue,Ubuntu,segoe ui,arial,sans-serif}.standard h1{font-size:2em;font-weight:700;margin:.67em 0}.standard h2{font-size:1.5em;font-weight:700;margin:.83em 0}.standard h3{font-size:1.17em;font-weight:700}.standard h3,.standard p{margin:1.75rem 0}.standard ol,.standard ul{display:block;list-style-type:disc;padding-left:20px;margin:1.75rem 0}.standard ol ul,.standard ul ul{margin:.75rem 0;list-style-type:square}.standard ol{list-style-type:decimal}.standard li{display:list-item;padding-left:0}.standard blockquote{margin:1.75rem 0;padding-left:10px;border-left:5px solid #f0f0f0}.standard pre{margin:1.75rem 0;white-space:pre}.standard hr{border:0;height:1px;display:block;background-color:#e2e2e2;margin:1.75rem 0}
\ No newline at end of file
diff --git a/themes/after-dark/assets/js/baseof.js b/themes/after-dark/assets/js/baseof.js
new file mode 100644
index 0000000..8127fc6
--- /dev/null
+++ b/themes/after-dark/assets/js/baseof.js
@@ -0,0 +1 @@
+fetchInject(["{{ "/js/lazysizes.min.js" | relURL }}"]);
diff --git a/themes/after-dark/assets/js/search.js b/themes/after-dark/assets/js/search.js
new file mode 100644
index 0000000..84d68da
--- /dev/null
+++ b/themes/after-dark/assets/js/search.js
@@ -0,0 +1,119 @@
+fetchInject([
+ "{{ "/js/vue.min.js" | relURL }}",
+ "{{ "/js/lodash.custom.min.js" | relURL }}",
+ "{{ "/js/fuse.min.js" | relURL }}",
+ "{{ "/js/mark.min.js" | relURL }}"
+]).then(() => {
+ (function (window, document, undefined) {
+ 'use strict';
+
+ const getQueryByParam = param => decodeURIComponent(
+ (location.search.split(param + '=')[1] || '').split('&')[0]
+ ).replace(/\+/g, ' ');
+
+ const queryParam = 's';
+ const selectors = {
+ appContainer: '#search-app',
+ resultContainer: '#search-results',
+ searchInput: '#query'
+ };
+
+ const fuseOpts = {
+ shouldSort: true,
+ tokenize: true,
+ matchAllTokens: true,
+ includeScore: true,
+ includeMatches: true,
+ keys: [
+ { name: "title", weight: 0.8 },
+ { name: "contents", weight: 0.5 },
+ { name: "tags", weight: 0.3 },
+ { name: "categories", weight: 0.3 }
+ ]
+ };
+
+ const getSearchInput = () => document.querySelector(selectors.searchInput);
+ const focusSearchInput = () => getSearchInput().focus();
+ const searchQuery = getSearchInput().value = getQueryByParam(queryParam);
+
+ const fuse = new Fuse([], fuseOpts);
+ window.fetch('/index.json').then(response => {
+ response.text().then(searchData => {
+ fuse.setCollection(JSON.parse(searchData));
+ searchQuery && search(searchQuery);
+ });
+ });
+
+ const getUrl = (query) => {
+ const encodedQuery = encodeURIComponent(query);
+ const url = "{{ .URL }}";
+ return (encodedQuery)
+ ? `${url}?${queryParam}=${encodedQuery}`
+ : url;
+ };
+
+ let mark = new Mark(
+ document.querySelector(
+ selectors.resultContainer
+ )
+ );
+
+ const app = new Vue({
+ delimiters: ['{', '}'],
+ el: selectors.appContainer,
+ data: {
+ fuse: null,
+ results: [],
+ query: getQueryByParam(queryParam),
+ resultsForSearch: getQueryByParam(queryParam)
+ },
+ mounted () {
+ this.fuse = fuse;
+ window.onpopstate = (evt) => {
+ this.query = evt.state.query;
+ };
+ document.onkeyup = function (evt) {
+ evt.key === 's' && focusSearchInput();
+ }
+ focusSearchInput();
+ },
+ watch: {
+ query () {
+ this.executeSearch();
+ window.history.replaceState(
+ {query: this.query},
+ null,
+ getUrl(this.query)
+ );
+ }
+ },
+ beforeUpdate: function () {
+ mark.unmark();
+ },
+ updated: function () {
+ this.$nextTick(function () {
+ mark = new Mark(
+ document.querySelector(
+ selectors.resultContainer
+ )
+ )
+ mark.mark(this.query.trim());
+ })
+ },
+ methods: {
+ executeSearch: _.debounce(function () {
+ const trimmedQuery = this.query.trim();
+ this.resultsForSearch = trimmedQuery;
+ this.results = (trimmedQuery)
+ ? this.fuse.search(trimmedQuery)
+ : [];
+ }, 250)
+ }
+ });
+
+ const search = query => {
+ app.results = fuse.search(query);
+ };
+
+ })(window, document);
+});
diff --git a/themes/after-dark/assets/js/vendor/fetch-inject.min.js b/themes/after-dark/assets/js/vendor/fetch-inject.min.js
new file mode 100644
index 0000000..cc9024f
--- /dev/null
+++ b/themes/after-dark/assets/js/vendor/fetch-inject.min.js
@@ -0,0 +1,2 @@
+/*! Fetch Inject v2.0.2 | Copyright (C) 2017–2018 Josh Habdas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Streamlined Workflow
+
+
+
+
+ Features
+ Modules
+ Shortcodes
+ Extras
+
+
+ 33
+ 4
+ 26
+ 1
+ Unparalleled Speed
+ Advanced Graphics
+ Rewards System
+ (Now in Beta!)
+ Fuzzy Search
+ Easily Customized
+ Securely Designed
+ Privacy Focused
+
+
+
+
+Gunakan Fetch Inject di [Custom Layouts](../custom-layouts) untuk memuat skrip dan gaya asal usul silang atau dari direktori statis situs anda.
+
+Berikan isi folder statis berikut:
+
+```
+├── layouts
+├── static
+│ ├── js
+│ │ ├── jquery.slim.min.js
+│ │ ├── tether.min.js
+│ │ └── bootstrap.min.js
+│ └── css
+│ └── font-awesome.min.css
+└── themes
+```
+
+Anda dapat memuat Bootstrap (w/Font Awesome) dan menunjukkan berapa lama itu selesai:
+
+{{< highlight html "linenos=inline" >}}
+
+{{< /highlight >}}
+
+Fetch Inject adalah 555 bytes terkompresi, non-blocking dan disertakan secara default pada [Custom Layouts](../custom-layouts). Kunjungi {{< external href="https://codepen.io/jhabdas/pen/MpVeOE?editors=0012" text="CodePen Playground" />}} untuk mencobanya.
diff --git a/themes/after-dark/docs/content/feature/fetch-injection.md b/themes/after-dark/docs/content/feature/fetch-injection.md
new file mode 100644
index 0000000..36207c5
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/fetch-injection.md
@@ -0,0 +1,68 @@
++++
+title = "Fetch Injection"
+description = "Load external scripts and styles with incredible speed."
+categories = ["experience"]
+tags = ["performance", "styles"]
+features = ["snippets", "related content", "code highlighter"]
++++
+
+After Dark uses the {{< external rel="external help" href="https://git.habd.as/jhabdas/fetch-inject" text="Fetch Inject" />}} library to load and execute external scripts and styles faster than browsers are capable of otherwise.
+
+{{< external href="https://hackcabin.com/post/managing-async-dependencies-javascript/" text="Fetch Injection" />}} was conceptualized and developed for After Dark to make it possible to deep-link to full-sized [Image Gallery](/module/hall-of-mirrors) images without blocking page load and has other performance applications:
+
+
+
+ Use Case
+ Chrome Performance Comparison (4G simulated connection speed)
+
+
+
+
+ Without Fetch Inject
+ With Fetch Inject
+ {{< external href="https://habd.as/talks/screaming-fast-wordpress-redis-vultr/" text="WordPress Twenty Seventeen" />}}
+ ~3.600s
+ ~0.918s
+
+
+
+
+
+Use Fetch Inject in your [Custom Layouts](../custom-layouts) to load scripts and styles cross-origin or from your site `static` directory.
+
+Given the following `static` folder contents:
+
+```
+├── layouts
+├── static
+│ ├── js
+│ │ ├── jquery.slim.min.js
+│ │ ├── tether.min.js
+│ │ └── bootstrap.min.js
+│ └── css
+│ └── font-awesome.min.css
+└── themes
+```
+
+You can load Bootstrap (w/Font Awesome) and show how long ago it finished:
+
+{{< highlight html "linenos=inline" >}}
+
+{{< /highlight >}}
+
+Fetch Inject is 555 bytes compressed, non-blocking and included by default in [Custom Layouts](../custom-layouts). Visit the {{< external href="https://codepen.io/jhabdas/pen/MpVeOE?editors=0012" text="CodePen Playground" />}} to try it out.
diff --git a/themes/after-dark/docs/content/feature/fuzzy-search.id.md b/themes/after-dark/docs/content/feature/fuzzy-search.id.md
new file mode 100644
index 0000000..305de56
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/fuzzy-search.id.md
@@ -0,0 +1,44 @@
++++
+title = "Fuzzy Search"
+description = "Secara cepat menemukan konten yang telah di indeks dimanapun pada situs anda."
+categories = ["navigation"]
+tags = ["links", "search", "controls"]
+feature = ["code highlighter", "snippets", "related content"]
+todo = ["link to page layout"]
++++
+
+Jika mesin pencari dapat menemukannya, anda pun juga bisa. Temukan lokasi konten yang dapat diindeks dengan cepat menggunakan fuzzy search. Tidak memerlukan pendaftaran.
+
+{{< hackcss-card header="Interactive Example" >}}
+
+{{< /hackcss-card >}}
+
+Sesuaikan dari `_index.md` di situs `content/search` direktori:
+
+```
+├── archetypes
+├── content
+│ └── search
+│ └── _index.md
+├── static
+├── themes
+```
+
+Jika file belum ada, buatlah:
+
+```sh
+$ hugo new search/_index.md
+```
+
+Dan tentukan`JSON` {{< external href="https://gohugo.io/templates/output-formats" text="Output Format" />}} di dalam situs konfigurasi:
+
+```toml
+[outputs]
+ home = ["HTML", "RSS", "JSON"]
+```
+
+{{% hackcss-alert type="info" %}}**Note:** ini menambahkan `JSON` sambil menyimpan `HTML` dan `RSS` secara standart.{{% /hackcss-alert %}}
+
+Setelah diaktifkan, situs anda akan mulai menghasilkan file `index.json` selama pembuatan, memberikan fuzzy search data yang dibutuhkan untuk membantu anda menemukan halaman.
+
+Cobalah dengan menavigasi [domain.example/search](/search), memasukkan permintaan pencarian dan dengan menggunakan Tab untuk menavigasi diantara hasil pencarian.
diff --git a/themes/after-dark/docs/content/feature/fuzzy-search.md b/themes/after-dark/docs/content/feature/fuzzy-search.md
new file mode 100644
index 0000000..8ca3687
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/fuzzy-search.md
@@ -0,0 +1,44 @@
++++
+title = "Fuzzy Search"
+description = "Quickly locate indexed content anywhere on the site."
+categories = ["navigation"]
+tags = ["links", "search", "controls"]
+features = ["code highlighter", "snippets", "related content"]
+todo = ["link to page layout"]
++++
+
+If a search engine can find it, so can you. Quickly locate indexable content site-wide with fuzzy search. No registration necessary.
+
+{{< hackcss-card header="Interactive Example" >}}
+
+{{< /hackcss-card >}}
+
+Adjust it from `_index.md` in the site `content/search` directory:
+
+```
+├── archetypes
+├── content
+│ └── search
+│ └── _index.md
+├── static
+├── themes
+```
+
+If the file doesn't exist, yet create it:
+
+```sh
+$ hugo new search/_index.md
+```
+
+And specify the `JSON` {{< external href="https://gohugo.io/templates/output-formats" text="Output Format" />}} in site config:
+
+```toml
+[outputs]
+ home = ["HTML", "RSS", "JSON"]
+```
+
+{{% hackcss-alert type="info" %}}**Note:** This adds `JSON` while keeping the `HTML` and `RSS` defaults.{{% /hackcss-alert %}}
+
+Once activated your site will begin outputting an `index.json` file during generation, giving fuzzy search the data it needs to help you locate pages.
+
+Try it now by navigating to [domain.example/search](/search/), or, if enabled, `Search` in the [Section Menu](../section-menu/), entering a query and navigating between results using Tab.
diff --git a/themes/after-dark/docs/content/feature/index-blocking.id.md b/themes/after-dark/docs/content/feature/index-blocking.id.md
new file mode 100644
index 0000000..0b702af
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/index-blocking.id.md
@@ -0,0 +1,52 @@
++++
+title = "Index Blocking"
+description = "Menentukan halaman untuk mencegahnya muncul dalam pencarian."
+categories = ["search"]
+tags = ["links", "search", "robots", "metadata"]
+feature = ["code highlighter", "related content", "snippets"]
++++
+
+After Dark menggunakan `noindex` robots meta arahan untuk mencegah mesin pencari merayap dan mengindeks bagian-bagian tertentu dari situs anda. Itu muncul di dokumen HTML `head` dan terlihat seperti berikut ini:
+
+```html
+
+```
+
+Tidak seperti {{< external href="http://www.robotstxt.org" text="robots.txt" />}} meta arahan diterangkan dalam konten halaman itu sendiri dan dengan jelas menunjuk yang mana, jika ada, halaman harus diblokir dari pengindeksan bahkan jika beberapa halaman tersebut muncul di situs anda {{< external href="https://gohugo.io/templates/sitemap-template/" text="Sitemap" />}}.
+
+Untuk memfasilitasi penemuan halaman indeks yang diblokir [Fuzzy Search](../fuzzy-search) menggunakan meta arahan yang sama yang terbuka ke mesin pencari untuk mencegah penyingkapan halaman dalam daftar hasil itu sendiri. Oleh karena itu jika sebuah halaman dapat ditemukan di fuzzy search, pada akhirnya halaman itu dapat muncul pada halaman hasil mesin pencari.
+
+Sesuaikan pemblokiran indeks per-halaman menggunakan `noindex` {{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}}:
+
+```toml
+noindex = true # set false atau hapus untuk mmebuka blokir
+```
+
+Blok semua bagian menggunakan file`_index.md` dengan pengaturan seperti diatas:
+
+```
+├── content
+│ ├── legal
+│ │ ├── _index.md
+│ │ ├── terms.md
+│ │ └── privacy.md
+│ ├── post
+```
+
+Secara standart jenis halaman seperti berikut diblokir secara otomatis:
+
+- Daftar bagian secara otomatis ditautkan dari [Menu Bagian](../section-menu);
+- [Halaman Taksonomi](../taxonomy-pages) seperti `Category`, `Tag` dan daftar istilah; dan,
+- Jika diaktifkan, halaman [Fuzzy Search](../fuzzy-search) atau beberapa hasil yang terkait erat di dalam.
+
+Sesuaikan defaults menggunakan pengaturan `noindex_kinds` dari {{< external href="https://gohugo.io/getting-started/configuration/" text="Site Configuration" />}}. Sebagai contoh, untuk mengaktifkan perayapan dari bagian halaman tambahkan hal berikut ini ke konfigurasi :
+
+```toml
+[params]
+ noindex_kinds = [
+ "taxonomy",
+ "taxonomyTerm"
+ ] # crawl "section" pages
+```
+
+Pelajari tentang {{< external href="https://moz.com/learn/seo/robots-meta-directives" text="Robots Meta Directives on Moz" />}} dan lihatlah bagaimana Google menggunakan `noindex` di {{< external href="https://support.google.com/webmasters/answer/93710" text="Block search indexing with 'noindex'" />}}.
diff --git a/themes/after-dark/docs/content/feature/index-blocking.md b/themes/after-dark/docs/content/feature/index-blocking.md
new file mode 100644
index 0000000..7a07d57
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/index-blocking.md
@@ -0,0 +1,52 @@
++++
+title = "Index Blocking"
+description = "Define pages to prevent them from appearing in search."
+categories = ["search"]
+tags = ["links", "search", "robots", "metadata"]
+features = ["code highlighter", "related content", "snippets"]
++++
+
+After Dark uses the `noindex` robots meta directive to prevent search engines from crawling and indexing certain parts of your site. It appears in the HTML document `head` and looks like this:
+
+```html
+
+```
+
+Unlike {{< external href="http://www.robotstxt.org" text="robots.txt" />}} meta directives are defined within page content itself and unambiguously indicate which, if any, pages should be blocked from indexing — even if some of those pages appear in your site's {{< external href="https://gohugo.io/templates/sitemap-template/" text="Sitemap" />}}.
+
+To facilitate the discovery of index blocked pages [Fuzzy Search](../fuzzy-search) utilizes the very same meta directive exposed to search engines to prevent disclosure of pages in its own result listings. Therefore, if a page can be found in fuzzy search, that page may ultimately appear on a search engine result page.
+
+Adjust index blocking per-page using `noindex` {{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}}:
+
+```toml
+noindex = true # set false or remove to unblock
+```
+
+Block entire sections using an `_index.md` file with the above setting:
+
+```
+├── content
+│ ├── legal
+│ │ ├── _index.md
+│ │ ├── terms.md
+│ │ └── privacy.md
+│ ├── post
+```
+
+By default the following page types are blocked automatically:
+
+- Section listings automatically linked to from the [Section Menu](../section-menu);
+- [Taxonomy Pages](../taxonomy-pages) such as `Category`, `Tag` and terms listings; and,
+- If enabled, the [Fuzzy Search](../fuzzy-search) page or any deep-linked result within.
+
+Adjust defaults using the `noindex_kinds` setting from {{< external href="https://gohugo.io/getting-started/configuration/" text="Site Configuration" />}}. For example, to enable crawling of section pages add the following to the config:
+
+```toml
+[params]
+ noindex_kinds = [
+ "taxonomy",
+ "taxonomyTerm"
+ ] # crawl "section" pages
+```
+
+Learn about {{< external href="https://moz.com/learn/seo/robots-meta-directives" text="Robots Meta Directives on Moz" />}} and see how Google uses `noindex` in {{< external href="https://support.google.com/webmasters/answer/93710" text="Block search indexing with 'noindex'" />}}.
diff --git a/themes/after-dark/docs/content/feature/jit-requests.id.md b/themes/after-dark/docs/content/feature/jit-requests.id.md
new file mode 100644
index 0000000..f9b69b5
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/jit-requests.id.md
@@ -0,0 +1,27 @@
++++
+title = "JIT Requests"
+description = "Memaksimalkan sumber daya sambil meminimalkan permintaan eksternal."
+categories = ["experience"]
+tags = ["performance", "styles", "javascript"]
+feature = ["related content", "snippets", "code highlighter"]
++++
+
+After Dark membuat permintaan JIT untuk beberapa aset eksternal untuk mengurangi konsumsi sumber daya dan meningkatkan kinerja halaman.
+
+Ambil [Code Highlighter](../code-highlighter) stylesheet sebagai contoh:
+
+{{< highlight css >}}
+{{< include "themes/after-dark/static/css/syntax.css" >}}
+{{< /highlight >}}
+
+Kode stylesheet yang ditunjukkan diatas itu sendiri disorot menggunakan permintaan JIT. Konfirmasikan dengan melihat permintaan jaringan untuk halaman ini dan amati permintaan`fetch` untuk file `syntax.css` seperti yang digambarkan sebagai berikut:
+
+```sh
+jit-requests (document)
+├── lazysizes.min.js (fetch)
+├── syntax.css (fetch)
+```
+
+Menggunakan [Fetch Injection](../fetch-injection) permintaan JIT dikeluarkan untuk mulai mengunduh sorotan stylesheet dengan cepat secara pararel dengan sumber daya lain, dan tata letak dasar berhati-hati untuk memastikan CSS hanya diminta pada halaman yang membutuhkan itu.
+
+Buatlah permintaan JIT anda sendiri menggunakan [Custom Layout](../custom-layouts) dan [Fetch Injection](../fetch-injection).
diff --git a/themes/after-dark/docs/content/feature/jit-requests.md b/themes/after-dark/docs/content/feature/jit-requests.md
new file mode 100644
index 0000000..5d82d16
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/jit-requests.md
@@ -0,0 +1,27 @@
++++
+title = "JIT Requests"
+description = "Maximize resources while minimizing external requests."
+categories = ["experience"]
+tags = ["performance", "styles", "javascript"]
+features = ["related content", "snippets", "code highlighter"]
++++
+
+After Dark makes JIT requests for some external assets to cut down on resource consumption and increase page performance.
+
+Take the [Code Highlighter](../code-highlighter) stylesheet for example:
+
+{{< highlight css >}}
+{{< include "themes/after-dark/static/css/syntax.css" >}}
+{{< /highlight >}}
+
+The stylesheet code shown above is itself highlighted using a JIT request. Confirm by viewing the network requests for this page and observe the `fetch` request for the `syntax.css` file as depicted here:
+
+```sh
+jit-requests (document)
+├── lazysizes.min.js (fetch)
+├── syntax.css (fetch)
+```
+
+Using [Fetch Injection](../fetch-injection) a JIT request is issued to begin downloading the highlighter stylesheet on-the-fly in parallel with other resources and the base layout takes care to ensure the CSS is only requested on pages that need it.
+
+Create your own JIT requests using [Custom Layout](../custom-layouts) and [Fetch Injection](../fetch-injection).
diff --git a/themes/after-dark/docs/content/feature/keywords-meta.id.md b/themes/after-dark/docs/content/feature/keywords-meta.id.md
new file mode 100644
index 0000000..f29b588
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/keywords-meta.id.md
@@ -0,0 +1,22 @@
++++
+title = "Keywords Meta"
+description = "Tambahkan detail semantik tentang isi materi pelajaran."
+categories = ["search"]
+tags = ["metadata", "robots", "SEO"]
+feature = ["code highlighter", "related content"]
++++
+
+Kata kunci menawarkan penjelasan kepada robot mengenai masalah pada konten anda. After Dark menghasilkan kata kunci secara otomatis untuk halaman yang diberikan tag taksonomi untuk halaman itu, dan untuk halaman lain menggunakan taksonomi kategori situs.
+
+Sesuaikan frase kunci dari {{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}} menggunakan `keywords` array seperti:
+
+```toml
+keywords = [
+ "web development",
+ "digital marketing",
+ "social media",
+ "link building"
+]
+```
+
+Meskipun dianggap tidak relevan untuk mencari peringkat, kata kunci dapat menjadi cara yang berguna untuk mendokumentasikan istilah pencarian target dan memberikan makna lebih semantik ke halaman pencarian anda.
diff --git a/themes/after-dark/docs/content/feature/keywords-meta.md b/themes/after-dark/docs/content/feature/keywords-meta.md
new file mode 100644
index 0000000..719f2f5
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/keywords-meta.md
@@ -0,0 +1,22 @@
++++
+title = "Keywords Meta"
+description = "Add semantic detail regarding content subject matter."
+categories = ["search"]
+tags = ["metadata", "robots", "SEO"]
+features = ["code highlighter", "related content"]
++++
+
+Keywords offer detail to robots regarding the subject matter of your content. After Dark generates keywords automatically for pages given the tags taxonomy for that page, and for other pages using the site's categories taxonomy.
+
+Adjust key phrases from {{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}} using a `keywords` array like so:
+
+```toml
+keywords = [
+ "web development",
+ "digital marketing",
+ "social media",
+ "link building"
+]
+```
+
+While not considered relevant to search rankings, keywords can be a useful way to document target search terms and give more semantic meaning to your pages.
diff --git a/themes/after-dark/docs/content/feature/last-modified.id.md b/themes/after-dark/docs/content/feature/last-modified.id.md
new file mode 100644
index 0000000..de10e13
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/last-modified.id.md
@@ -0,0 +1,31 @@
++++
+title = "Last Modified"
+description = "Membantu pengunjung memahami kapan postingan terakhir diubah."
+categories = ["experience"]
+tags = ["publishing", "expired", "future", "posts", "date", "time"]
+feature = ["code highlighter", "snippets", "related content"]
++++
+
+Menunjukkan postingan dengan perubahan substantif atau cukup dengan gambar sebelumnya, postingan yang lebih relevan semakin dekat ke bagian atas daftar postingan yang terakhir dimodifikasi.
+
+Modifikasi akan dibuat jelas bagi pengunjung dengan info yang terlihat di rangkuman postingan dan tanggal publikasi asli akan tetap utuh di dalam postingan bylines .
+
+Untuk robot, melakukan perubahan ini akan secara otomatis memperbarui Skema Data Terstruktur, umpan RSS dan pengaturan`lastmod` {{< external href="https://gohugo.io/templates/sitemap-template/" text="Sitemap" />}} anda.
+
+Sesuaikan yang terakhir diubah dengan menambahkan `publishdate` ke postingan {{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}} dan memperbarui `date` ke tanggal dan waktu yang ingin anda tampilkan untuk modifikasi.
+
+Anda bisa spesifik dan menggunakan tanggal dan waktu (dengan mengimbangi zona waktu) seperti:
+
+```toml
+date = "2017-02-02T01:20:56-06:00"
+publishdate = "2016-11-21T10:32:33+08:00"
+```
+
+Atau kurang spesifik dan hanya menggunakan tanggal:
+
+```toml
+date = "2017-02-02"
+publishdate = "2016-11-21"
+```
+
+Juga memungkinkan untuk tanggal yang akan datang dan yang sudah berlalu untuk konten di Hugo. Untuk mempelajari lebih lanjut,lihat dokumentasi di {{< external href="https://gohugo.io/getting-started/usage/#draft-future-and-expired-content" text="Draft, Future, and Expired Content" />}}.
diff --git a/themes/after-dark/docs/content/feature/last-modified.md b/themes/after-dark/docs/content/feature/last-modified.md
new file mode 100644
index 0000000..422729a
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/last-modified.md
@@ -0,0 +1,31 @@
++++
+title = "Last Modified"
+description = "Help visitors understand when posts were last modified."
+categories = ["experience"]
+tags = ["publishing", "expired", "future", "posts", "date", "time"]
+features = ["code highlighter", "snippets", "related content"]
++++
+
+Denote posts with substantive changes or simply draw older, more relevant posts closer to the top of the listings with last modified.
+
+Modifications will be made obvious to visitors with a visible callout in post summaries and the original publish date will be kept intact in the post bylines.
+
+For robots, making this change will automatically update Schema Structured Data, RSS feeds and the `lastmod` setting in your {{< external href="https://gohugo.io/templates/sitemap-template/" text="Sitemap" />}}.
+
+Adjust last modified by adding a `publishdate` to post {{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}} and updating the `date` to the date and time you would like to show for the modification.
+
+You can be specific and use a datetime (with timezone offset) like:
+
+```toml
+date = "2017-02-02T01:20:56-06:00"
+publishdate = "2016-11-21T10:32:33+08:00"
+```
+
+Or less specific and use just the dates:
+
+```toml
+date = "2017-02-02"
+publishdate = "2016-11-21"
+```
+
+It's also possible to future and expiry dates for content in Hugo. To learn more see the documentation on {{< external href="https://gohugo.io/getting-started/usage/#draft-future-and-expired-content" text="Draft, Future, and Expired Content" />}}.
diff --git a/themes/after-dark/docs/content/feature/lazy-loading.id.md b/themes/after-dark/docs/content/feature/lazy-loading.id.md
new file mode 100644
index 0000000..7010df0
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/lazy-loading.id.md
@@ -0,0 +1,46 @@
++++
+title = "Lazy Loading"
+description = "Tunda pemuatan gambar, iframe dan skrip."
+categories = ["experience"]
+tags = ["performance", "images", "graphics"]
+feature = ["code highlighter", "related content", "snippets"]
++++
+
+After Dark menggunakan {{< external href="https://github.com/aFarkas/lazysizes" text="lazySizes" />}} untuk memprioritaskan pemuatan sumber daya eksternal tertentu untuk meningkatkan waktu pemuatan halaman dan membantu mengurangi konsumsi bandwith secara keseluruhan.
+
+Lazy loading bekerja secara otomatis untuk [Post Images](../post-images) dan ketika menggunakan [Figure Shortcode](/shortcode/figure), atau terkait dengan [Snippet](../snippets), seperti yang terlihat sebagai berikut:
+
+{{< figure
+ src="https://source.unsplash.com/Y-w15LfHO8w/5184x3456"
+ lqipsrc="https://source.unsplash.com/Y-w15LfHO8w/1080x720"
+ caption="Be Creative"
+ attr="AK¥N Cakiner"
+ attrlink="https://unsplash.com/@akin"
+>}}
+
+Untuk menggunakan lazy loading di [Custom Layouts](../custom-layouts) atau saat membuat milik anda sendiri [Shortcodes](/shortcode) menambahkan atribut kelas `lazyload` dan `data` yang relevan seperti yang ditunjukkan di sini:
+
+```html
+
+
+
+ Use Case
+ Chrome Performance Comparison (4G simulated connection speed)
+
+
+
+
+ Without Fetch Inject
+ With Fetch Inject
+ {{< external href="https://habd.as/talks/screaming-fast-wordpress-redis-vultr/" text="WordPress Twenty Seventeen" />}}
+ ~3.600s
+ ~0.918s
+
+
+```
+
+```html
+
+
+```
+
+```html
+
+
+```
+
+Lihat {{< external href="https://github.com/aFarkas/lazysizes" text="lazySizes" />}} sebagai informasi dan contoh tambahan.
diff --git a/themes/after-dark/docs/content/feature/lazy-loading.md b/themes/after-dark/docs/content/feature/lazy-loading.md
new file mode 100644
index 0000000..4a581a4
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/lazy-loading.md
@@ -0,0 +1,46 @@
++++
+title = "Lazy Loading"
+description = "Defer loading of images, iframes and scripts."
+categories = ["experience"]
+tags = ["performance", "images", "graphics"]
+features = ["code highlighter", "related content", "snippets"]
++++
+
+After Dark uses {{< external href="https://github.com/aFarkas/lazysizes" text="lazySizes" />}} to prioritize loading of certain external resources to improve page load times and help reduce overall bandwidth consumption.
+
+Lazy loading works automatically for [Post Images](../post-images) and when using the [Figure Shortcode](/shortcode/figure), or related [Snippet](../snippets), as seen here:
+
+{{< figure
+ src="https://source.unsplash.com/Y-w15LfHO8w/5184x3456"
+ lqipsrc="https://source.unsplash.com/Y-w15LfHO8w/1080x720"
+ caption="Be Creative"
+ attr="AK¥N Cakiner"
+ attrlink="https://unsplash.com/@akin"
+>}}
+
+To use lazy loading in [Custom Layouts](../custom-layouts) or when creating your own [Shortcodes](/shortcode) adding the `lazyload` class and relevant `data` attributes as shown here:
+
+```html
+
+
+```
+
+```html
+
+
+```
+
+```html
+
+
+```
+
+See {{< external href="https://github.com/aFarkas/lazysizes" text="lazySizes" />}} for additional information and examples.
diff --git a/themes/after-dark/docs/content/feature/link-typing.id.md b/themes/after-dark/docs/content/feature/link-typing.id.md
new file mode 100644
index 0000000..3c7d65f
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/link-typing.id.md
@@ -0,0 +1,28 @@
++++
+title = "Link Typing"
+description = "Menunjukkan hubungan antar dokumen secara eksplisit."
+categories = ["navigation"]
+tags = ["links", "accessibility", "taxonomy", "metadata"]
+feature = ["code highlighter", "snippets", "related content"]
++++
+
+After Dark menggunakan pengetikan tautan untuk menunjukkan hubungan semantik antara dokumen. Secara default tipe tautan `alternate` digunakan untuk menyorot keberadaan umpan web di beranda dan di dalam daftar taksonomi:
+
+```html
+
+
+
+```
+
+Sebagai tambahan ke defaults After Dark mengenali jenis tautan `prev` dan `next` jika ditentukan di halaman {{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}}:
+
+```toml
+prev = "/series/learn-to-code/part-one/"
+next = "/series/learn-to-code/part-three/"
+```
+
+Gunakan jenis tautan `prev` dan `next` untuk artikel tersegmentasi, [Live Blog Postings](https://schema.org/LiveBlogPosting) atau untuk meniru ciri-ciri taksonomi `series` jika tidak ada taksonomi seri.
+
+Jenis tautan biasanya ditampilkan di bagian atas halaman di browser teks seperti {{< external href="http://elinks.or.cz" text="ELinks" />}} sebagai bentuk navigasi tambahan dan dapat membantu robot dan pengguna lebih memahami hubungan antar konten anda.
+
+Pelajari lagi tentang {{< external href="http://devdocs.io/html/link_types" text="link types" />}} dan {{< external href="https://gohugo.io/content-management/taxonomies" text="Taxonomies in Hugo" />}}.
diff --git a/themes/after-dark/docs/content/feature/link-typing.md b/themes/after-dark/docs/content/feature/link-typing.md
new file mode 100644
index 0000000..537f394
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/link-typing.md
@@ -0,0 +1,28 @@
++++
+title = "Link Typing"
+description = "Explicitly indicate relationships between documents."
+categories = ["navigation"]
+tags = ["links", "accessibility", "taxonomy", "metadata"]
+features = ["code highlighter", "snippets", "related content"]
++++
+
+After Dark uses link typing to indicate semantic relationships between documents. By default the `alternate` link type is used to highlight the presence of web feeds on the homepage and in taxonomy listings:
+
+```html
+
+
+
+```
+
+In addition to defaults After Dark recognizes the `prev` and `next` link types if specified in page {{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}}:
+
+```toml
+prev = "/series/learn-to-code/part-one/"
+next = "/series/learn-to-code/part-three/"
+```
+
+Use `prev` and `next` link types for segmented articles, [Live Blog Postings](https://schema.org/LiveBlogPosting) or to mimic the traits of a `series` taxonomy if no series taxonomy is present.
+
+Link Types are commonly shown at the top of the page in text browsers such as {{< external href="http://elinks.or.cz" text="ELinks" />}} as an auxiliary form of navigation and can help robots and users better understand relationships between your content.
+
+Learn more about {{< external href="http://devdocs.io/html/link_types" text="link types" />}} and {{< external href="https://gohugo.io/content-management/taxonomies" text="Taxonomies in Hugo" />}}.
diff --git a/themes/after-dark/docs/content/feature/module-system.id.md b/themes/after-dark/docs/content/feature/module-system.id.md
new file mode 100644
index 0000000..1b44f0d
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/module-system.id.md
@@ -0,0 +1,11 @@
++++
+title = "Module System"
+description = "Meningkatkan fungsionalitas dengan modul pre built add on."
+categories = ["core"]
+tags = ["module", "imaging", "graphics", "analytics", "installation"]
+feature = ["module system", "related content"]
++++
+
+After Dark menggunakan {{< external href="https://gohugo.io/themes/theme-components/" text="Hugo Theme Components" />}} untuk menghasilkan sistem untuk menyertakan sejumlah prebuilt add-on [Modules](/module/) yang menyediakan fungsionalitas tambahan.
+
+Lihat [Modules](/module/) ringkasan modul yang tersedia.
diff --git a/themes/after-dark/docs/content/feature/module-system.md b/themes/after-dark/docs/content/feature/module-system.md
new file mode 100644
index 0000000..160e036
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/module-system.md
@@ -0,0 +1,11 @@
++++
+title = "Module System"
+description = "Enhance site functionality with add-on modules."
+categories = ["core"]
+tags = ["module", "imaging", "graphics", "analytics", "installation"]
+features = ["module system", "related content"]
++++
+
+After Dark uses {{< external href="https://gohugo.io/themes/theme-components/" text="Theme Components" />}} and [Fetch Injection](../fetch-injection/) to provide a plug-in system for enhancing site functionality using optional add-on modules.
+
+View the list of [available modules](/module/).
diff --git a/themes/after-dark/docs/content/feature/online-help.id.md b/themes/after-dark/docs/content/feature/online-help.id.md
new file mode 100644
index 0000000..cd06318
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/online-help.id.md
@@ -0,0 +1,33 @@
++++
+title = "Online Help"
+description = "Panduan bantuan self-hosted lengkap dan contoh website."
+categories = ["core"]
+tags = ["scripts", "security", "networking"]
+feature = ["related content", "code highlighter", "snippets"]
++++
+
+After Dark termasuk bantuan online manual yang luas dan contoh website.
+
+Melihat bantuan Dokumen lokal dengan menavigasi ke http://localhost:1414 mengikuti [Quick Install](../quick-install) atau setelah menjalankan [Upgrade Script](../upgrade-script). Tidak memerlukan koneksi internet.
+
+Jika bantuan tidak berjalan, anda dapat memulainya kapan saja melalui skrip:
+
+{{< hackcss-alert >}}
+{{< highlight sh >}}
+cd flying-toasters && \
+./themes/after-dark/bin/help
+{{< /highlight >}}
+{{< /hackcss-alert >}}
+
+Atau cukup membuat alias dan sajikan dokumen dengan live-reload:
+
+{{< hackcss-alert >}}
+{{< highlight sh >}}
+alias hs='hugo serve --navigateToChanged' && \
+hs --port 1414 --source themes/after-dark/docs
+{{< /highlight >}}
+{{< /hackcss-alert >}}
+
+Bantuan termasuk dalam kode sumber After Dark. Jadi setiap rilis baru akan menyertakan dokumen bantuan terbaru, khusus untuk versi tertentu.
+
+Upgradelah untuk mendapatkan update terbaru menggunakan [Upgrade Script](../upgrade-script/).
diff --git a/themes/after-dark/docs/content/feature/online-help.md b/themes/after-dark/docs/content/feature/online-help.md
new file mode 100644
index 0000000..52b8d4d
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/online-help.md
@@ -0,0 +1,33 @@
++++
+title = "Online Help"
+description = "Complete self-hosted help guide and example website."
+categories = ["core"]
+tags = ["scripts", "security", "networking"]
+features = ["related content", "code highlighter", "snippets"]
++++
+
+After Dark includes an extensive online help manual and example website.
+
+View help docs locally by navigating to http://localhost:1414 following a [Quick Install](../quick-install) or after running the [Upgrade Script](../upgrade-script). Internet connection not required.
+
+If help is not running you may start it anytime via script:
+
+{{< hackcss-alert >}}
+{{< highlight sh >}}
+cd flying-toasters && \
+./themes/after-dark/bin/help
+{{< /highlight >}}
+{{< /hackcss-alert >}}
+
+Or simply create an alias and serve docs with live-reload:
+
+{{< hackcss-alert >}}
+{{< highlight sh >}}
+alias hs='hugo serve --navigateToChanged' && \
+hs --port 1414 --source themes/after-dark/docs
+{{< /highlight >}}
+{{< /hackcss-alert >}}
+
+Help is included within the After Dark source code. So each new release will include the latest help docs, specific to that particular version.
+
+Upgrade to get the latest updates using the [Upgrade Script](../upgrade-script/).
diff --git a/themes/after-dark/docs/content/feature/post-bylines.id.md b/themes/after-dark/docs/content/feature/post-bylines.id.md
new file mode 100644
index 0000000..320fd9b
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/post-bylines.id.md
@@ -0,0 +1,33 @@
++++
+title = "Post Bylines"
+description = "Membuat byline yang dapat dibaca manusia dan mesin di postingan."
+categories = ["experience"]
+tags = ["author", "posts", "taxonomy", "publishing"]
+feature = ["related content", "code highlighter"]
+notes = [
+ "perbarui contoh postingan byline'taxonomy pages'jika dimodifikasi"
+]
++++
+
+After Dark mwmbuat postingan byline yang sangat banyak secara otomatis. Bylines termasuk pilihan nama penuis, jumlah kata, tautan ke [Halaman Taksonomi](../taxonomy-pages) dan [Structured Data](../structured-data).
+
+{{% hackcss-card header="Example Byline" %}}
+Diterbitkan [by `author`] [`publishdate` or `date`] di [navigation](/categories/navigation) dan ditandai [links](/tags/links) dan [taxonomy](/tags/taxonomy) menggunakan [`wordcount`] kata-kata.
+{{% /hackcss-card %}}
+
+Jika `author` ditentukan di {{< external href="https://gohugo.io/getting-started/configuration/" text="Site Configuration" />}} params atau posting {{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}} itu akan dimasukkan secara otomatis dalam byline yang menghubungkan penulis:
+
+```toml
+[params]
+ author = "Billy Joe Jim Bob" # the guy behind the guy behind the guy
+```
+
+Sesuaikan `hide_author` di {{< external href="https://gohugo.io/getting-started/configuration/" text="Site Configuration" />}} untuk menekan atribusi di seluruh situs:
+
+```toml
+[params]
+ author = "" # optional setting, not required in config
+ hide_author = true # hides author name and related structured data
+```
+
+Gabungkan dengan`categories` dan [Last Modified](../last-modified) untuk mengahasilkan [Structured Data](../structured-data) yang unik.
diff --git a/themes/after-dark/docs/content/feature/post-bylines.md b/themes/after-dark/docs/content/feature/post-bylines.md
new file mode 100644
index 0000000..3ea0d3d
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/post-bylines.md
@@ -0,0 +1,33 @@
++++
+title = "Post Bylines"
+description = "Create human and machine readable bylines in posts."
+categories = ["experience"]
+tags = ["author", "posts", "taxonomy", "publishing"]
+features = ["related content", "code highlighter"]
+notes = [
+ "update 'taxonomy pages' post byline example if modified"
+]
++++
+
+After Dark creates rich post bylines automatically. Bylines include optional author name, word count, links to [Taxonomy Pages](../taxonomy-pages) and [Structured Data](../structured-data).
+
+{{% hackcss-card header="Example Byline" %}}
+Published [by `author`] [`publishdate` or `date`] in [navigation](/categories/navigation) and tagged [links](/tags/links) and [taxonomy](/tags/taxonomy) using [`wordcount`] words.
+{{% /hackcss-card %}}
+
+If `author` is specified in {{< external href="https://gohugo.io/getting-started/configuration/" text="Site Configuration" />}} params or post {{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}} it will be included automatically in the byline attributing the author:
+
+```toml
+[params]
+ author = "Billy Joe Jim Bob" # the guy behind the guy behind the guy
+```
+
+Adjust `hide_author` in {{< external href="https://gohugo.io/getting-started/configuration/" text="Site Configuration" />}} to suppress attribution site-wide:
+
+```toml
+[params]
+ author = "" # optional setting, not required in config
+ hide_author = true # hides author name and related structured data
+```
+
+Combine with `categories` and [Last Modified](../last-modified) to produce unique [Structured Data](../structured-data).
diff --git a/themes/after-dark/docs/content/feature/post-images.id.md b/themes/after-dark/docs/content/feature/post-images.id.md
new file mode 100644
index 0000000..820cd81
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/post-images.id.md
@@ -0,0 +1,52 @@
++++
+title = "Post Images"
+description = "menambahkan gambar ke postingan tanpa menyentuh editor gambar."
+categories = ["experience"]
+tags = ["performance", "imaging", "graphics", "posts"]
+feature = ["code highlighter", "snippets", "related content"]
+todo = [
+ "normalisasi dengan kode aktual untuk membuat postingan gambar yang responsif"
+]
++++
+
+Tambahkan daya tarik visual ke postingan anda dengan memposting gambar. Gambar postingan muncul diatas konten postingan dan pengaruh {{< external href="https://gohugo.io/content-management/image-processing/" text="Hugo Image Processing" />}} dan [Lazy Loading](../lazy-loading) untuk menyediakan gambar yang sepenuhnya otomatis dan lazy-loaded LQIP dan arah seni bawaan.
+
+{{< figure
+ src="https://source.unsplash.com/Y-w15LfHO8w/1200x900"
+ lqipsrc="https://source.unsplash.com/Y-w15LfHO8w/800x600"
+ caption="Be Creative. Photo:"
+ attr="AK¥N Cakiner on Unsplash"
+ attrlink="https://unsplash.com/@akin"
+>}}
+
+Menggunakan gambar postingan memerlukan beberapa pendapat terkait dengan struktur konten anda. Untuk membuat postingan dengan gambar posting anda harus:
+
+1. Gabungkan gambar dan konten dalam direktori seperti yang ditunjukan di bawah ini.
+2. Perbarui postingan {{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}} seperti yang dijelaskan dibawah ini.
+
+Contoh bundel halaman mungkin akan terlihat seperti berikut ini:
+
+```
+├── archetypes
+├── content
+│ └── post
+│ └── secure-your-digital-life
+│ ├── images
+│ │ └── florian-klauer-119557-unsplash.jpg
+│ └── index.md
+├── layouts
+```
+
+Dengan gambar `header` yang ditunjukkan di `index.md`:
+
+```toml
+[[resources]]
+ src = "images/*119557*"
+ name = "header"
+```
+
+{{% hackcss-alert type="info" %}}**Tip:** Orientasi tidak signifikan. Untuk tampilan optimal gunakan gambar yang lebih besar.{{% /hackcss-alert %}}
+
+Itu dia! After Dark melakukan hal selebihnya.
+
+Untuk membantu memahami bundel, lihat {{< external href="https://gohugo.io/content-management/page-bundles/" text="Page Bundles in Hugo" />}}.
diff --git a/themes/after-dark/docs/content/feature/post-images.md b/themes/after-dark/docs/content/feature/post-images.md
new file mode 100644
index 0000000..136dc35
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/post-images.md
@@ -0,0 +1,86 @@
++++
+title = "Post Images"
+description = "Add large hero images without touching an image editor."
+categories = ["experience"]
+tags = ["performance", "imaging", "graphics", "posts"]
+features = ["code highlighter", "snippets", "related content"]
+todo = [
+ "normalize with the actual code to create a responsive post image"
+]
++++
+
+{{< figure
+ src="/images/watercolor_pTIyYTqAlF8_w1440h700.jpeg"
+ alt="Map image"
+ lqipsrc="/images/watercolor_pTIyYTqAlF8_w936h455.jpeg"
+ caption="Sample image placement. Not the real deal."
+>}}
+
+Add visual appeal to your posts with post images. Post images appear above post content and leverage {{< external href="https://gohugo.io/content-management/image-processing/" text="Hugo Image Processing" />}} and [Lazy Loading](../lazy-loading) to provide fully automatic, lazy-loaded responsive images with LQIP and built-in art direction.
+
+Using post images requires some opinion with regard to the structure of your content. To create a post with a post image you must:
+
+1. Group image and content in a {{< external href="https://gohugo.io/content-management/page-bundles/" text="Page Bundle" />}} as shown below.
+2. Update post {{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}} as described below.
+
+An example page bundle might look like:
+
+```
+├── archetypes
+├── content
+│ └── post
+│ └── secure-your-digital-life
+│ ├── images
+│ │ └── florian-klauer-119557-unsplash.jpg
+│ └── index.md
+├── layouts
+```
+
+With a `header` image specified in `index.md`:
+
+```toml
+[[resources]]
+ src = "images/*119557*"
+ name = "header"
+```
+
+{{% hackcss-alert type="info" %}}**Tip:** Orientation is not significant. For optimal display use larger images.{{% /hackcss-alert %}}
+
+Add an image caption showing the image title:
+
+```toml
+[[resources]]
+ src = "**291607-unsplash.jpg"
+ name = "header"
+ title = "Ottawa road in the evening" # adds image caption
+```
+
+Add [Structured Data]({{< relref "structured-data" >}}) using {{< external "https://gohugo.io/content-management/page-resources/#page-resources-metadata" "Resources Metadata" />}} to improve accessibility:
+
+```toml
+[[resources]]
+ src = "**291607-unsplash.jpg"
+ name = "header"
+ title = "Ottawa road in the evening"
+ [resources.params.meta]
+ description = "Light trails depicting speed" # adds alt text and image meta
+ creator = "Marc-Olivier Jodoin" # updates caption and adds image meta
+```
+
+Continue adding metadata to improve accessibility:
+
+```toml
+[[resources]]
+ src = "**291607-unsplash.jpg"
+ name = "header"
+ title = "Ottawa road in the evening"
+ [resources.params.meta]
+ description = "Light trails depicting speed"
+ creator = "Marc-Olivier Jodoin"
+ sameAs = "https://unsplash.com/photos/NqOInJ-ttqM/" # also updates caption
+ license = "https://unsplash.com/license" # attribution not required
+ contentLocation = "Ottawa, Canada"
+ keywords = ["light trail", "building", "speed", "night"]
+```
+
+Supported metadata in examples above. Adjust display using [Custom Styles]({{< relref "custom-styles" >}}).
diff --git a/themes/after-dark/docs/content/feature/quick-install.id.md b/themes/after-dark/docs/content/feature/quick-install.id.md
new file mode 100644
index 0000000..249cade
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/quick-install.id.md
@@ -0,0 +1,137 @@
++++
+title = "Quick Install"
+description = "Hanya satu perintah yang anda butuhkan untuk membuat website baru."
+categories = ["core"]
+tags = ["setup", "installation", "scripts"]
+features = ["code highlighter", "snippets", "related content"]
+notes = [
+ "mengulas 'module-system' saat menambah atau menghapus add-on yang telah di instal",
+ "juga meninjau pilihan modul yang sudah dipasang sebelumnya (lihat masalah di depan)"
+]
++++
+
+After Dark termasuk skrip instalasi portabel untuk pengaturan cepat:
+
+{{< hackcss-card header="themes/after-dark/bin/install" >}}
+
+Perluas untuk melihat skrip
+{{< highlight shell "linenos=inline" >}}
+{{< include "themes/after-dark/bin/install" >}}
+{{< /highlight >}}
+
+
+
+
+
+
+Expand to view script
+{{< highlight sh "linenos=inline" >}}
+{{< include "themes/after-dark/bin/install" >}}
+{{< /highlight >}}
+
+
+
+
+
+
+
+
+
+
+Skin default menggunakan palet warna`dark` dengan mode tampilan `hack`. Tidak diperlukan konfigurasi untuk menggunakan skin default.
+
+Pilih skin style dari konfigurasi situs anda. Sebagai contoh , untuk mengatur warna abu-abu gelap tanpa gaya perawatan `markdown` perbarui konfigurasi anda seperti:
+
+{{< hackcss-card header="config.toml" >}}
+{{< highlight toml "linenos=inline" >}}
+baseurl = "https://letterboxd.com/"
+languageCode = "en-US"
+title = "A Scanner Darkly"
+
+[params]
+ description = "Seorang polisi yang menyamar di masa depan yang tidak terlalu jauh terlibat dengan narkoba baru yang berbahaya dan sebagai akibatnya dia mulai kehilangan identitasnya."
+ images = ["https://a.ltrbxd.com/resized/sm/upload/e3/kt/un/fi/nZuqo9yQpEo447sH0w0MFBgdT6J-1200-1200-675-675-crop-000000.jpg"]
+
+[params.hackcss]
+ mode = "standard"
+ palette = "dark-grey"
+{{< /highlight >}}
+{{< /hackcss-card >}}
+
+Nonaktifkan skin styles dengan mengatur bendera`disabled`:
+
+```toml
+[params.hackcss]
+ disabled = true # disable skin styles entirely
+```
+
+Saat mengganti warna, tinjau [Custom Styles](../custom-styles), [Trim Color](../trim-color) dan [Error Page](../error-page), buat penyesuaian yang diperlukan untuk mencapai tampilan dan rasa yang diinginkan.
diff --git a/themes/after-dark/docs/content/feature/skin-styles.md b/themes/after-dark/docs/content/feature/skin-styles.md
new file mode 100644
index 0000000..4563fdd
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/skin-styles.md
@@ -0,0 +1,101 @@
++++
+title = "Skin Styles"
+description = "Choose one of eight customizable skin styles."
+categories = ["customizing"]
+tags = ["color", "style", "branding"]
+features = ["code highlighter", "snippets", "related content"]
+aliases = [
+ "/feature/display-variants/"
+]
++++
+
+After Dark uses {{< external href="https://hackcss.egoist.moe" text="hackcss" />}} to provide four color palettes and two display modes. Toggle between them from your {{< external href="https://gohugo.io/getting-started/configuration/" text="site configuration" />}} for 8 possible combinations:
+
+
+
+
+ Palette
+ Mode
+
+
+
+
+ Hack
+ Standard
+
+
+ Dark
+ None required.
+
+
+
+ [params.hackcss]
+ mode = "standard"
+
+ Dark Grey
+
+
+
+ [params.hackcss]
+ palette = "dark-grey"
+
+
+ [params.hackcss]
+ mode = "standard"
+ palette = "dark-grey"
+
+ Solarized Dark
+
+
+
+ [params.hackcss]
+ palette = "solarized-dark"
+
+
+ [params.hackcss]
+ mode = "standard"
+ palette = "solarized-dark"
+
+
+Light
+
+
+
+ [params.hackcss]
+ palette = "light"
+
+
+ [params.hackcss]
+ mode = "standard"
+ palette = "light"
+
+
+
+The default skin uses the `dark` color palette with the `hack` display mode. No configuration is necessary to use the default skin.
+
+Choose a skin style from your site configuration. For example, to set a dark grey color _without_ the stylistic `markdown` treatment update your config like:
+
+{{< hackcss-card header="config.toml" >}}
+{{< highlight toml "linenos=inline" >}}
+baseurl = "https://letterboxd.com/"
+languageCode = "en-US"
+title = "A Scanner Darkly"
+
+[params]
+ description = "An undercover cop in a not-too-distant future becomes involved with a dangerous new drug and begins to lose his own identity as a result."
+ images = ["https://a.ltrbxd.com/resized/sm/upload/e3/kt/un/fi/nZuqo9yQpEo447sH0w0MFBgdT6J-1200-1200-675-675-crop-000000.jpg"]
+
+[params.hackcss]
+ mode = "standard"
+ palette = "dark-grey"
+{{< /highlight >}}
+{{< /hackcss-card >}}
+
+Disable skin styles by setting the `disabled` flag:
+
+```toml
+[params.hackcss]
+ disabled = true # disable skin styles entirely
+```
+
+When changing colors review [Custom Styles](../custom-styles), [Trim Color](../trim-color) and [Error Page](../error-page), making any adjustments necessary to achieve the desired look-and-feel.
diff --git a/themes/after-dark/docs/content/feature/snippets.id.md b/themes/after-dark/docs/content/feature/snippets.id.md
new file mode 100644
index 0000000..736377d
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/snippets.id.md
@@ -0,0 +1,49 @@
++++
+title = "Snippets"
+description = "Bagikan kode antara Shortcodes and Templat Kustom."
+categories = ["customizing"]
+tags = ["shortcodes", "templating", "layout"]
+feature = ["related content", "code highlighter", "snippets"]
++++
+
+Snippets adalah abstraksi templat yang memungkinkan anda menggunakan kembali markup dan logika yang sama dengan yang digunakan untuk membuat [Shortcodes](/shortcode) di [Custom Layouts](../custom-layouts) anda.
+
+Ambil contoh yang termasuk [Button Group](/shortcode/button-group) kode pendek yang digunakan untuk membuat satu set tombol gaya, yang akan kita lihat secara rinci disini.
+
+Pertama, Parsial:
+
+{{< highlight go-html-template >}}
+{{< include "themes/after-dark/layouts/partials/components/buttongroup.html" >}}
+{{< /highlight >}}
+
+Kemudian shortcode:
+
+{{< highlight go-html-template >}}
+{{< include "themes/after-dark/layouts/shortcodes/hackcss-buttongroup.html" >}}
+{{< /highlight >}}
+
+Perhatikan bagaimana shortcode hanya berfungsi untuk mengumpulkan input dan memanggil parsial, yang berisi semua markup dan logika tambahan. Pelimpahan tanggungjawab ini adalah abstraksi yang memungkinkan penggunaan kembali antara konten dan templat.
+
+Sekarang mari kita lihat bagaimana cara menggunakannya.
+
+Gunakan [Button Group](/shortcode/button-group) shortcode ke tombol grup dalam konten:
+
+```html
+{{* hackcss-buttongroup >}}
+ {{< hackcss-button text="Left" />}}
+ {{< hackcss-button text="Middle" type="info" />}}
+ {{< hackcss-button text="Right" isghost="true" />}}
+{{< /hackcss-buttongroup */>}}
+```
+
+Yang membuat grup tombol gaya dengan tiga tombol seperti yang dtunjukkan disini:
+
+{{< hackcss-buttongroup >}}
+ {{< hackcss-button text="Left" />}}
+ {{< hackcss-button text="Middle" type="info" />}}
+ {{< hackcss-button text="Right" isghost="true" />}}
+{{< /hackcss-buttongroup >}}
+
+Untuk menggunakan kembali di mirror layout panggilan parsial yang digunakan di dalam shortcode.
+
+Seluruh [Shortcodes](/shortcode) mengimplementasikan {{< external href="https://hackcss.egoist.moe" text="hackcss" />}} komponen dibangun menggunakan abstraksi templat snippets yang memungkinkan masing-masing digunakan kembali [Custom Layouts](../custom-layouts).
diff --git a/themes/after-dark/docs/content/feature/snippets.md b/themes/after-dark/docs/content/feature/snippets.md
new file mode 100644
index 0000000..f7caf9e
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/snippets.md
@@ -0,0 +1,49 @@
++++
+title = "Snippets"
+description = "Share code between Shortcodes and Custom Layouts."
+categories = ["customizing"]
+tags = ["shortcodes", "templating", "layout"]
+features = ["related content", "code highlighter", "snippets"]
++++
+
+Snippets are template abstractions enabling you to reuse the same markup and logic used to create [Shortcodes](/shortcode) in your [Custom Layouts](../custom-layouts).
+
+Take for example the included [Button Group](/shortcode/button-group) shortcode used for creating a set of styled buttons, which we'll look at in detail here.
+
+First the partial:
+
+{{< highlight go-html-template >}}
+{{< include "themes/after-dark/layouts/partials/components/buttongroup.html" >}}
+{{< /highlight >}}
+
+Now the shortcode:
+
+{{< highlight go-html-template >}}
+{{< include "themes/after-dark/layouts/shortcodes/hackcss-buttongroup.html" >}}
+{{< /highlight >}}
+
+Notice how the shortcode serves only to collect input and call the partial, which contains all markup and display logic. This delegation of responsibility is the abstraction that enables reuse between content and template.
+
+Now let's see how to actually use it.
+
+Use the [Button Group](/shortcode/button-group) shortcode to group buttons in content:
+
+```html
+{{* hackcss-buttongroup >}}
+ {{< hackcss-button text="Left" />}}
+ {{< hackcss-button text="Middle" type="info" />}}
+ {{< hackcss-button text="Right" isghost="true" />}}
+{{< /hackcss-buttongroup */>}}
+```
+
+Which creates a styled button group with three buttons as shown here:
+
+{{< hackcss-buttongroup >}}
+ {{< hackcss-button text="Left" />}}
+ {{< hackcss-button text="Middle" type="info" />}}
+ {{< hackcss-button text="Right" isghost="true" />}}
+{{< /hackcss-buttongroup >}}
+
+To reuse in layout mirror the `partial` call used inside the shortcode.
+
+All [Shortcodes](/shortcode) implementing {{< external href="https://hackcss.egoist.moe" text="hackcss" />}} components are built using the snippets template abstraction enabling each of them to be reused in [Custom Layouts](../custom-layouts).
diff --git a/themes/after-dark/docs/content/feature/social-meta.id.md b/themes/after-dark/docs/content/feature/social-meta.id.md
new file mode 100644
index 0000000..6fdf061
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/social-meta.id.md
@@ -0,0 +1,52 @@
++++
+title = "Social Meta"
+description = "Membagikan tautan dengan gambar di Facebook dan Twitter."
+categories = ["social"]
+tags = ["author", "metadata", "images"]
+feature = ["code highlighter", "snippets", "related content"]
++++
+
+After Dark menyediakan {{< external text="Open Graph Protocol" href="http://opengraphprotocol.org" />}} dan {{< external href="https://developer.twitter.com/en/docs/tweets/optimize-with-cards" text="Twitter Cards" />}} metadata di halaman untuk mencapai kartu berbagi yang banyak:
+
+
+
+Menyesuaikan`author` di {{< external href="https://gohugo.io/getting-started/configuration/" text="Site Configuration" />}} untuk menentukan nama yang ditampilkan, jika ada:
+
+```toml
+[params]
+ author = "Bali Bebas!"
+```
+
+Setel atau ganti`author` per halaman menggunakan {{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}} seperti yang ditunjukkan disini:
+
+```toml
+title = "Become a Digital Nomad in Bali: The Lost Guide"
+description = "Everything you need to know to become a Digital Nomad in Bali."
+author = "After Dark"
+date = "2017-02-02T11:57:24+08:00"
+publishdate = "2017-01-28T02:31:22+08:00"
+images = [
+ "https://source.unsplash.com/-09QE4q0ezw/2000x1322"
+]
+```
+
+Sesuaikan `images` untuk menentukan gambar eksternal atau jika menggunakan {{< external href="https://gohugo.io/content-management/page-bundles/" text="Page Bundles" />}}, tentukan jalur relatif ke sumber gambar untuk digunakan:
+
+```toml
+images = [
+ "/post/post-title/images/lana-abie-581813-unsplash.jpg"
+]
+```
+
+{{% hackcss-alert type="info" %}}**Kenapa menggunakan susunan?** Open Graph mendukung berbagai ukuran gambar. Dan meskipun After Dark tidak mendukung berbagai ukuran, pengguna dapat membuat [custom layouts](../custom-layouts) itu.{{% /hackcss-alert %}}
+
+Jika tidak ada gambar tingkat halaman yang disediakan After Dark akan mundur ke gambar site-wide yang dapat disesuaikan atau dihapus dari {{< external href="https://gohugo.io/getting-started/configuration/" text="Site Configuration" />}}:
+
+```toml
+[params]
+ images = [
+ "https://source.unsplash.com/-09QE4q0ezw/2000x1322" # site-wide og:image
+ ]
+```
+
+Lihat {{< external href="https://unsplash.com/" text="Unsplash" />}} dan {{< external href="https://source.unsplash.com/" text="Unsplash Source" />}} untuk ribuan gambar bebas royalti.
diff --git a/themes/after-dark/docs/content/feature/social-meta.md b/themes/after-dark/docs/content/feature/social-meta.md
new file mode 100644
index 0000000..8ddf6c8
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/social-meta.md
@@ -0,0 +1,52 @@
++++
+title = "Social Meta"
+description = "Share links with images on Facebook and Twitter."
+categories = ["social"]
+tags = ["author", "metadata", "images"]
+features = ["code highlighter", "snippets", "related content"]
++++
+
+After Dark provides {{< external text="Open Graph Protocol" href="http://opengraphprotocol.org" />}} and {{< external href="https://developer.twitter.com/en/docs/tweets/optimize-with-cards" text="Twitter Cards" />}} metadata in pages to achieve rich sharing cards on Facebook, Twitter and more:
+
+
+
+Adjust `author` in {{< external href="https://gohugo.io/getting-started/configuration/" text="Site Configuration" />}} to specify name shown, if any:
+
+```toml
+[params]
+ author = "Bali Bebas!"
+```
+
+Set or override `author` per page using{{< external href="https://gohugo.io/content-management/front-matter/" text="Front Matter" />}} as shown here:
+
+```toml
+title = "Become a Digital Nomad in Bali: The Lost Guide"
+description = "Everything you need to know to become a Digital Nomad in Bali."
+author = "After Dark"
+date = "2017-02-02T11:57:24+08:00"
+publishdate = "2017-01-28T02:31:22+08:00"
+images = [
+ "https://source.unsplash.com/-09QE4q0ezw/2000x1322"
+]
+```
+
+Adjust `images` to specify an external image or, if using {{< external href="https://gohugo.io/content-management/page-bundles/" text="Page Bundles" />}}, specify the relative path to the image resource to use:
+
+```toml
+images = [
+ "/post/post-title/images/lana-abie-581813-unsplash.jpg"
+]
+```
+
+{{% hackcss-alert type="info" %}}**Why use arrays?** Open Graph supports multiple image sizes. And though After Dark doesn't support multiple sizes, users can create [custom layouts](../custom-layouts) that do.{{% /hackcss-alert %}}
+
+If no page-level image is provided After Dark will fallback to a site-wide image which may be adjusted or removed from {{< external href="https://gohugo.io/getting-started/configuration/" text="Site Configuration" />}}:
+
+```toml
+[params]
+ images = [
+ "https://source.unsplash.com/-09QE4q0ezw/2000x1322" # site-wide og:image
+ ]
+```
+
+See {{< external href="https://unsplash.com/" text="Unsplash" />}} and {{< external href="https://source.unsplash.com/" text="Unsplash Source" />}} for thousands of royalty-free images.
diff --git a/themes/after-dark/docs/content/feature/structured-data.id.md b/themes/after-dark/docs/content/feature/structured-data.id.md
new file mode 100644
index 0000000..3cdb89d
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/structured-data.id.md
@@ -0,0 +1,26 @@
++++
+title = "Structured Data"
+description = "Memberikan mesin pencari yang kaya tentang struktur situs."
+categories = ["search"]
+tags = ["metadata", "semantics", "robots", "SEO"]
+feature = ["related content"]
++++
+
+After Dark menghasilkan metadata terstruktur menggunakan {{< external "https://schema.org" />}} spesifikasi untuk postingan blog, [Menu Bagian](../section-menu), [Hall of Mirrors](/module/hall-of-mirrors) galeri gambar dan mengadaptasi data secara otomatis menggunakan yang ditentukan penulis [Post Bylines](../post-bylines) seperti yang ditunjukkan disini:
+
+Properti skema | Nilai frontmatter
+--------------- | -----------------
+author? | `author`
+datePublished | `publishdate` atau `date`
+articleSection | `categories`
+
+Pertimbangkan untuk menambahkan data terstruktur saat membuat [Custom Layouts](../custom-layouts) untuk meningkatkan semantik halaman dan SEO yang lebih baik.
+
+Pelajari lebih lanjut tentang data terstruktur menggunakan sumber daya berikut:
+
+- {{< external href="https://www.w3.org/TR/microdata/" text="HTML Microdata on W3C" />}}
+- {{< external href="https://developer.mozilla.org/en-US/docs/Web/HTML/Microdata" text="Microdata on MDN" />}}
+- {{< external href="https://moz.com/learn/seo/schema-structured-data" text="Schema Structured Data on Moz" />}}
+
+
+Gunakan [Webmaster Tools](../webmaster-tools/) untuk memvalidasi data terstruktur. Ini dapat dilakukan dari mesin pengembangan menggunakan [ephemeral hosting](../air-gapping/#hosting-ephemeral-dengan-enkripsi-end-to-end).
diff --git a/themes/after-dark/docs/content/feature/structured-data.md b/themes/after-dark/docs/content/feature/structured-data.md
new file mode 100644
index 0000000..d9dc975
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/structured-data.md
@@ -0,0 +1,32 @@
++++
+title = "Structured Data"
+description = "Give search engines rich info about site structure."
+categories = ["search"]
+tags = ["metadata", "semantics", "robots", "SEO"]
+features = ["related content"]
++++
+
+After Dark generates structured metadata using {{< external "https://schema.org" />}} specifications for blog posts, [Section Menu](../section-menu), [Hall of Mirrors](/module/hall-of-mirrors) image galleries and adapts data automatically using author-defined [Post Bylines](../post-bylines) as shown here:
+
+Schema Property | Frontmatter Value
+--------------- | -----------------
+author? | `author`
+datePublished | `publishdate` or `date`
+articleSection | `categories`
+
+[Post Images]({{< relref "post-images" >}}) use {{< external "https://gohugo.io/content-management/page-resources/#page-resources-metadata" "Page Resources Metadata" />}} to add image captions:
+
+Schema Property | Header Image Resource Metadata
+--------------- | ----------------
+caption? | `creator` [`sameas` domain] or `caption`
+
+Consider adding structured data when creating [Custom Layouts](../custom-layouts) for improved page semantics and better SEO.
+
+Learn more about structured data using the following resources:
+
+- {{< external href="https://www.w3.org/TR/microdata/" text="HTML Microdata on W3C" />}}
+- {{< external href="https://developer.mozilla.org/en-US/docs/Web/HTML/Microdata" text="Microdata on MDN" />}}
+- {{< external href="https://moz.com/learn/seo/schema-structured-data" text="Schema Structured Data on Moz" />}}
+
+
+Use [Webmaster Tools](../webmaster-tools/) to validate structured data. This can be done from a development machine using [ephemeral hosting](../air-gapping/#ephemeral-hosting-with-end-to-end-encryption).
diff --git a/themes/after-dark/docs/content/feature/svg-favicon.id.md b/themes/after-dark/docs/content/feature/svg-favicon.id.md
new file mode 100644
index 0000000..c1cc239
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/svg-favicon.id.md
@@ -0,0 +1,82 @@
++++
+title = "SVG Favicon"
+description = "Hiasi situs anda dengan favicon SVG yang unik."
+categories = ["customizing"]
+tags = ["color", "style", "graphics", "branding"]
+feature = ["code highlighter", "snippets", "related content"]
++++
+
+After Dark dikirimkan dengan 169B yang dioptimalkan [^1] SVG favicon tertanam di setiap halaman:
+
+{{< highlight html >}}
+{{< include "themes/after-dark/layouts/partials/head/favicon.html" >}}
+{{< /highlight >}}
+
+Favicon adalah segitiga miring berwarna hitam dalam bentuk tepee seperti yang ditunjukkan[^2] di [Bantuan Online](../online-help) [Overview](/). Pusat segitiga menggunakan ruang negatif untuk memberikan ilusi segitiga sama sisi kedua dalam bentuk piramida, atau api terbuka, yang terkandung di dalam.
+
+Warna ikon dapat dimodifikasi dengan mengubah atribut `fill`:
+
+
+{{< hackcss-grid class="-around" >}}
+ {{< hackcss-cell class="-2of12" >}}
+
+
+ Palette
+ Mode
+
+
+
+
+ Hack
+ Standard
+
+
+ Dark
+ None required.
+
+
+
+ [params.hackcss]
+ mode = "standard"
+
+ Dark Grey
+
+
+
+ [params.hackcss]
+ palette = "dark-grey"
+
+
+ [params.hackcss]
+ mode = "standard"
+ palette = "dark-grey"
+
+ Solarized Dark
+
+
+
+ [params.hackcss]
+ palette = "solarized-dark"
+
+
+ [params.hackcss]
+ mode = "standard"
+ palette = "solarized-dark"
+
+
+Light
+
+
+
+ [params.hackcss]
+ palette = "light"
+
+
+ [params.hackcss]
+ mode = "standard"
+ palette = "light"
+
+ fill="%23f00"
+
+ fill="lime"
+
+ fill="%2300f"
+
+ fill="%23f00"
+
+ fill="lime"
+
+ fill="%2300f"
+Version 6.8.0 downloaded to themes/after-dark
+Stopping help server if running ...
+Generating help documentation ...
+Upgrade complete! Please see CHANGELOG.md for changes.
+{{< /hackcss-alert >}}
+
+Jika versi saat ini tidak dapat dideteksi skrip akan meminta anda:
+
+{{< hackcss-alert type="info" >}}
+Cannot detect version. Upgrade after-dark anyway (y/n)? y
+Starting upgrade from unknown version to 6.12.1 ...
+Version 6.12.1 downloaded to themes/after-dark
+Stopping help server if running ...
+Generating help documentation ...
+Upgrade complete! Please see CHANGELOG.md for changes.
+{{< /hackcss-alert >}}
+
+Seperti [Quick Install](../quick-install) Skrip upgrade ditulis ke standar PSOIX tidak akan memerlukan ketergantungan tambahan untuk beroperasi di sebagian besar sistem. Setelah upgrade [Release Hash](../release-hashes) akan memperbarui juga sehingga anda akan [Validate Release](/validate).
diff --git a/themes/after-dark/docs/content/feature/upgrade-script.md b/themes/after-dark/docs/content/feature/upgrade-script.md
new file mode 100644
index 0000000..d6846f1
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/upgrade-script.md
@@ -0,0 +1,43 @@
++++
+title = "Upgrade Script"
+description = "Check for After Dark updates and upgrade effortlessly."
+categories = ["core"]
+tags = ["updating", "installation", "scripts"]
+features = ["code highlighter", "related content", "snippets"]
++++
+
+To check for updates and automatically upgrade After Dark to the latest version simply run the upgrade script from your site directory:
+
+```sh
+cd flying toasters && \
+./themes/after-dark/bin/upgrade
+```
+
+If you're already using the latest version the script will let you know:
+
+{{< hackcss-alert type="info" >}}
+Did not upgrade after-dark. Already using latest version.
+{{< /hackcss-alert >}}
+
+If an update is available the script will download and install it automatically:
+
+{{< hackcss-alert type="info" >}}
+Starting upgrade from 6.7.6 to 6.8.0 ...
+Version 6.8.0 downloaded to themes/after-dark
+Stopping help server if running ...
+Generating help documentation ...
+Upgrade complete! Please see CHANGELOG.md for changes.
+{{< /hackcss-alert >}}
+
+If current version can't be detected the script will prompt you:
+
+{{< hackcss-alert type="info" >}}
+Cannot detect version. Upgrade after-dark anyway (y/n)? y
+Starting upgrade from unknown version to 6.12.1 ...
+Version 6.12.1 downloaded to themes/after-dark
+Stopping help server if running ...
+Generating help documentation ...
+Upgrade complete! Please see CHANGELOG.md for changes.
+{{< /hackcss-alert >}}
+
+Like [Quick Install](../quick-install) the upgrade script is written to POSIX standard will not require additional dependencies to operate on most systems. Upon upgrade the [Release Hash](../release-hashes) will update as well so you may [Validate Release](/validate).
diff --git a/themes/after-dark/docs/content/feature/webmaster-tools.id.md b/themes/after-dark/docs/content/feature/webmaster-tools.id.md
new file mode 100644
index 0000000..e67d9ca
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/webmaster-tools.id.md
@@ -0,0 +1,69 @@
++++
+title = "Webmaster Tools"
+description = "Menguji dan mengirim situs anda dengan mesin pencari yang terkenal."
+categories = ["search"]
+tags = ["SEO", "robots", "metadata"]
+feature = ["code highlighter", "related content", "snippets"]
++++
+
+## Verifikasi Webmaster
+
+Gunakan beranda`meta` untuk memverifikasi situs anda dengan Google, Bing, Alexa dan Yandex. Semua verifikasi bersifat opsional dan beberapa penyedia mengizinkan anda [submit manually](#submit-manually).
+
+Untuk memverifikasi dengan`meta` tambahkan yang berikut ini ke {{< external href="https://gohugo.io/getting-started/configuration/" text="Site Configuration" />}} dan isi nilai yang diberikan kepada anda oleh konsol webmaster mesin pencari atau sejenisnya :
+
+```toml
+[params.seo.webmaster_verifications]
+ google = "" # Opsional, lihat https://search.google.com/search-console
+ bing = "" # Opsional, lihat https://www.bing.com/toolbox/webmaster/
+ yandex = "" # Opsional, lihat https://webmaster.yandex.com/
+ alexa = "" # Opsional, mengklaim dihentikan (lihat catatan di bawah ini)
+```
+
+{{< hackcss-alert type="info" >}}
+Note: Mengklaim situs anda dengan Alexa {{< external text="dihentikan" href="https://support.alexa.com/hc/en-us/articles/219135887-Claiming-has-been-retired-May-2016" />}} dalam May 2016.
+{{< /hackcss-alert >}}
+
+Nanti anda dapat menghapus verifikasi yang tidak anda perlukan lagi atau memutuskan untuk tidak menggunakannya.
+
+### Kirim secara manual
+
+Mengirim peta situs anda secara manual untuk pengindeksan pencarian:
+
+{{< hackcss-form target="_blank" action="https://www.google.com/webmasters/tools/ping" >}}
+ {{< hackcss-formgroup >}}
+ {{< hackcss-label for="google" text="Google:" />}}
+ {{< hackcss-textinput id="google" name="sitemap" placeholder="https://domain.example/sitemap.xml" >}}
+ {{< /hackcss-formgroup >}}
+{{< /hackcss-form >}}
+{{< hackcss-form target="_blank" action="https://bing.com/webmaster/ping.aspx" >}}
+ {{< hackcss-formgroup >}}
+ {{< hackcss-label for="bing" text="Bing:" />}}
+ {{< hackcss-textinput id="bing" name="siteMap" placeholder="https://domain.example/sitemap.xml" >}}
+ {{< /hackcss-formgroup >}}
+{{< /hackcss-form >}}
+
+## Uji Data Terstruktur
+
+Untuk menguji dengan Yandex gunakan {{< external href="https://webmaster.yandex.com/tools/microtest" text="Structured data validator" />}} alat uji. Untuk Google kirimkan formulir dibawah ini dengan URL yang ingin anda uji:
+
+{{< hackcss-form target="_blank" action="https://search.google.com/structured-data/testing-tool" >}}
+ {{< hackcss-formgroup >}}
+ {{< hackcss-textinput type="hidden" name="hl" value="en" >}}
+ {{< hackcss-label for="google" text="Test URL:" />}}
+ {{< hackcss-textinput id="google" name="url" placeholder="https://domain.example/post/" >}}
+ {{< /hackcss-formgroup >}}
+{{< /hackcss-form >}}
+
+Gunakan [ephemeral hosting](../air-gapping/#ephemeral-hosting-with-end-to-end-encryption) untuk memeriksa situs anda saat dalam pengembangan/pengujian.
+
+## Menguji dan memantau kecepatan
+
+Tidak ada yang menyukai website yang lambat. Mengevaluasi dan menganalisa kinerja dari berbagai lokasi di seluruh dunia menggunakan {{< external href="https://tools.pingdom.com" text="Pingdom Tools" />}} dan {{< external "https://webpagetest.org" />}} secara gratis.
+
+Memantau kinerja dari waktu ke waktu menggunakan {{< external href="https://speedtracker.org" text="SpeedTracker" />}}.
+
+
+## Layanan Tambahan
+
+- {{< external "https://w3c.github.io/developers/tools/" />}}
diff --git a/themes/after-dark/docs/content/feature/webmaster-tools.md b/themes/after-dark/docs/content/feature/webmaster-tools.md
new file mode 100644
index 0000000..3f7fd9b
--- /dev/null
+++ b/themes/after-dark/docs/content/feature/webmaster-tools.md
@@ -0,0 +1,68 @@
++++
+title = "Webmaster Tools"
+description = "Test and submit your site with popular search engines."
+categories = ["search"]
+tags = ["SEO", "robots", "metadata"]
+features = ["code highlighter", "related content", "snippets"]
++++
+
+## Webmaster verification
+
+Use homepage `meta` to verify your site with Google, Bing, Alexa and Yandex. All verifications are optional and some providers allow you to [submit manually](#submit-manually).
+
+To verify with `meta` add the following to your {{< external href="https://gohugo.io/getting-started/configuration/" text="Site Configuration" />}} and fill in the value provided to you by the search engine webmaster console or similar:
+
+```toml
+[params.seo.webmaster_verifications]
+ google = "" # Optional, see https://search.google.com/search-console
+ bing = "" # Optional, see https://www.bing.com/toolbox/webmaster/
+ yandex = "" # Optional, see https://webmaster.yandex.com/
+ alexa = "" # Optional, claiming retired (see note below)
+```
+
+{{< hackcss-alert type="info" >}}
+Note: Claiming your site with Alexa {{< external text="was retired" href="https://support.alexa.com/hc/en-us/articles/219135887-Claiming-has-been-retired-May-2016" />}} in May 2016.
+{{< /hackcss-alert >}}
+
+You may later remove verifications you no longer need or decide not to use.
+
+### Submit manually
+
+Manually submit your Sitemap for search indexing:
+
+{{< hackcss-form target="_blank" action="https://www.google.com/webmasters/tools/ping" >}}
+ {{< hackcss-formgroup >}}
+ {{< hackcss-label for="google" text="Google:" />}}
+ {{< hackcss-textinput id="google" name="sitemap" placeholder="https://domain.example/sitemap.xml" >}}
+ {{< /hackcss-formgroup >}}
+{{< /hackcss-form >}}
+{{< hackcss-form target="_blank" action="https://bing.com/webmaster/ping.aspx" >}}
+ {{< hackcss-formgroup >}}
+ {{< hackcss-label for="bing" text="Bing:" />}}
+ {{< hackcss-textinput id="bing" name="siteMap" placeholder="https://domain.example/sitemap.xml" >}}
+ {{< /hackcss-formgroup >}}
+{{< /hackcss-form >}}
+
+## Test Structured Data
+
+To test with Yandex use their {{< external href="https://webmaster.yandex.com/tools/microtest" text="Structured data validator" />}} testing tool. For Google submit the form below with the URL you wish to test:
+
+{{< hackcss-form target="_blank" action="https://search.google.com/structured-data/testing-tool" >}}
+ {{< hackcss-formgroup >}}
+ {{< hackcss-textinput type="hidden" name="hl" value="en" >}}
+ {{< hackcss-label for="google" text="Test URL:" />}}
+ {{< hackcss-textinput id="google" name="url" placeholder="https://domain.example/post/" >}}
+ {{< /hackcss-formgroup >}}
+{{< /hackcss-form >}}
+
+Use [ephemeral hosting](../air-gapping/#ephemeral-hosting-with-end-to-end-encryption) to check your site while in development/testing.
+
+## Test and Monitor Speed
+
+Nobody likes a slow website. Benchmark and analyze performance from various locations worldwide using {{< external href="https://tools.pingdom.com" text="Pingdom Tools" />}} and {{< external "https://webpagetest.org" />}} for free.
+
+Monitor performance over time using {{< external href="https://speedtracker.org" text="SpeedTracker" />}}.
+
+## Additional services
+
+- {{< external "https://w3c.github.io/developers/tools/" />}}
diff --git a/themes/after-dark/docs/content/module/_index.md b/themes/after-dark/docs/content/module/_index.md
new file mode 100644
index 0000000..50ce042
--- /dev/null
+++ b/themes/after-dark/docs/content/module/_index.md
@@ -0,0 +1,6 @@
++++
+title = "Modules"
+description = "Enhance site functionality with add-on modules."
++++
+
+After Dark includes a [Module System]({{< relref "module-system" >}}) and several optional modules designed to compliment your site. A list of available modules can be found below.
diff --git a/themes/after-dark/docs/content/module/fractal-forest.md b/themes/after-dark/docs/content/module/fractal-forest.md
new file mode 100644
index 0000000..6454548
--- /dev/null
+++ b/themes/after-dark/docs/content/module/fractal-forest.md
@@ -0,0 +1,52 @@
++++
+title = "Fractal Forest"
+slug = "fractal-forest"
+description = "BPG Image Format add-on module for After Dark."
+summary = "BPG Image Format (Preinstalled)."
+categories = ["addon"]
+tags = ["module", "images", "graphics", "installation", "performance"]
+features = ["related content", "snippets", "section menu"]
++++
+
+**BPG Image format Homepage:** {{< external "https://bellard.org/bpg/" />}}
+**Module Source:** {{< external "https://git.habd.as/comfusion/fractal-forest" />}}
+
+## Demo
+
+- {{< external "http://xooyoozoo.github.io/yolo-octo-bugfixes/" "Visual comparison" />}} between BPG, JPEG, JP2K and WebP
+- {{< external "https://bellard.org/bpg/lena.html" "Lena 512x512 image, visual comparison with JPEG" />}}
+- {{< external "https://bellard.org/bpg/gallery1.html" "Wikipedia photos" />}}
+- {{< external "https://bellard.org/bpg/gallery2.html" "Images with alpha channel" />}}
+- {{< external "https://bellard.org/bpg/gallery3.html" "Test images using different color spaces and bit depth" />}}
+- {{< external "https://bellard.org/bpg/animation.html" "Test animations" />}}
+
+## Installation
+
+{{% hackcss-alert type="info" %}}**Note:** Module pre-installed via [Quick Install]({{< relref "quick-install" >}}) with example in post archetype.{{% /hackcss-alert %}}
+
+Choose a module download source:
+
+- {{< external "https://www.npmjs.com/package/fractal-forest" />}}
+- {{< external "https://www.jsdelivr.com/package/npm/fractal-forest" />}}
+- {{< external "https://git.habd.as/comfusion/fractal-forest" />}}
+
+Extract module contents into site `themes` directory:
+
+```sh
+├── static
+└── themes
+ ├── after-dark
+ └── fractal-forest
+```
+
+Specify module in site config:
+
+{{< highlight toml "linenos=inline,linenostart=6" >}}
+# Controls default theme and theme components
+theme = [
+ "fractal-forest", # sequence before "after-dark"
+ "after-dark"
+]
+{{< /highlight >}}
+
+See {{< external href="https://git.habd.as/comfusion/fractal-forest/src/branch/master/README.md" text="README.md" />}} to confirm you're using the minimum required version of After Dark; and module setup, configuration and usage instructions. If you need help you may {{< external href="https://git.habd.as/comfusion/fractal-forest/issues" text="Submit an Issue" />}} with your question.
diff --git a/themes/after-dark/docs/content/module/hall-of-mirrors.md b/themes/after-dark/docs/content/module/hall-of-mirrors.md
new file mode 100644
index 0000000..655d93a
--- /dev/null
+++ b/themes/after-dark/docs/content/module/hall-of-mirrors.md
@@ -0,0 +1,50 @@
++++
+title = "Hall of Mirrors"
+slug = "hall-of-mirrors"
+description = "Responsive PhotoSwipe Image Galleries add-on module for After Dark."
+summary = "Responsive PhotoSwipe Image Galleries."
+categories = ["addon"]
+tags = ["module", "images", "graphics", "engagement"]
+features = ["related content", "snippets", "section menu"]
++++
+
+**PhotoSwipe Homepage:** {{< external "http://photoswipe.com" />}}
+**Module Source:** {{< external "https://git.habd.as/comfusion/hall-of-mirrors" />}}
+
+## Demo
+
+{{< hackcss-alert >}}
+
+{{< /hackcss-alert >}}
+
+## Installation
+
+Choose a module download source:
+
+- {{< external "https://www.npmjs.com/package/hall-of-mirrors" />}}
+- {{< external "https://www.jsdelivr.com/package/npm/hall-of-mirrors" />}}
+- {{< external "https://git.habd.as/comfusion/hall-of-mirrors" />}}
+
+Extract module contents into site `themes` directory:
+
+```sh
+├── static
+└── themes
+ ├── after-dark
+ └── hall-of-mirrors
+```
+
+Specify module in site config:
+
+{{< highlight toml "linenos=inline,linenostart=6" >}}
+# Controls default theme and theme components
+theme = [
+ "hall-of-mirrors", # sequence before "after-dark"
+ "after-dark"
+]
+{{< /highlight >}}
+
+See {{< external href="https://git.habd.as/comfusion/hall-of-mirrors/src/branch/master/README.md" text="README.md" />}} to confirm you're using the minimum required version of After Dark; and module setup, configuration and usage instructions. If you need help you may {{< external href="https://git.habd.as/comfusion/hall-of-mirrors/issues" text="Submit an Issue" />}} with your question.
diff --git a/themes/after-dark/docs/content/module/toxic-swamp.md b/themes/after-dark/docs/content/module/toxic-swamp.md
new file mode 100644
index 0000000..a548b1f
--- /dev/null
+++ b/themes/after-dark/docs/content/module/toxic-swamp.md
@@ -0,0 +1,524 @@
++++
+title = "Toxic Swamp"
+slug = "toxic-swamp"
+description = "Monero/Aeon Web Miner add-on module for After Dark."
+summary = "Monero/Aeon Web Miner."
+categories = ["addon"]
+tags = ["module", "monetization", "rewards", "cryptocurrency"]
+features = ["snippets", "related content"]
+[security.csp.directives]
+ scriptSrc = [
+ "'sha512-TKVuLlCT8+a0Chpa6Pw3clhu9fhZ9JOzgblgxQaUQVP/z4lfPnrdyWDOgucORnS2qapWu/iPVG2d0ywyGH2NjA=='"
+ ]
++++
+
+Monetize attention in one of more than 40 cryptocurrency mining pools and take home 200% more per hash when compared to Coinhive.[^1]
+
+{{< hackcss-alert >}}
+
+{{< /hackcss-alert >}}
+
+# Features
+
+- Earn cryptocurrency while visitors browse your sites
+- Reward effort during site development and publishing
+- Transparent, unobtrusive multilingual user interface
+- Does not use cookies or connect to any third-parties
+- Obfuscates end-user IPs and other connection details
+- Automatically starts when external power is detected
+- Suspends operation during loss of power or attention
+- Optimized for low-bandwidth high-latency connections
+
+# Installation
+
+Choose a module download source:
+
+- {{< external "https://www.npmjs.com/package/toxic-swamp" />}} - npm
+- {{< external "https://www.jsdelivr.com/package/npm/toxic-swamp" />}} - cdn
+- {{< external "https://git.habd.as/comfusion/toxic-swamp" />}} - git
+
+Extract module contents into site themes directory:
+
+```
+├── static
+└── themes
+ ├── after-dark
+ └── toxic-swamp
+```
+
+Verify [Release Hash]({{< relref "release-hashes" >}}) and GPG signature:
+
+```sh
+cd themes/toxic-swamp && \
+npm install && npm run integrity && \
+git tag --verify v1.0.0-beta.16
+```
+
+Specify module in site config:
+
+{{< highlight toml "linenos=inline,linenostart=6" >}}
+# Controls default theme and theme components
+theme = [
+ "toxic-swamp", # sequence before "after-dark"
+ "after-dark"
+]
+{{< /highlight >}}
+
+Configure with payout address to start earning rewards:
+
+{{< highlight toml "linenos=inline,linenostart=36" >}}
+[params.modules.toxic_swamp]
+ enabled = true # Optional, set false to disable module
+ address = "your-address-here"
+{{< /highlight >}}
+
+# Earning Rewards
+
+Using [The Fire Swamp](#the-fire-swamp) with a configured payout address, you may view your hash metrics and payout information from the {{< external href="https://moneroocean.stream/?dark#/dashboard" text="MoneroOcean Dashboard" />}}:
+
+{{< figure alt="MoneroOcean Dashboard screenshots"
+ src="/images/screenshots/monero-ocean-dashboard-fs8.png"
+ caption="Monero Ocean Dashboard showing Toxic Swamp mining activity."
+>}}
+
+See the MoneroOcean {{< external href="https://moneroocean.stream/?dark#/help/faq" text="FAQ" />}} for more details.
+
+# The Fire Swamp
+
+After Dark provides upgrade incentives The Fire Swamp using {{< external href="https://moneroocean.stream/?dark" text="MoneroOcean" />}} to help you get started and as a fallback when custom proxies fail to connect.
+
+The proxy servers are located at `fs*.habd.as:80` and will be used by default until you [Create Your Own Proxy](#create-your-own-proxy) or fall more than two major versions behind.
+
+To maximize your rewards while using the Fire Swamp proxy you must try to keep your After Dark version up-to-date as illustrated here:
+
+
+
+
+
+
+To describe in more detail:
+
+- If a bugfix, documentation update, refactoring or other patch release occurs your upgrade incentive is 2.2% of your total combined mining hash power.
+
+- If an enhancement, feature or other minor release occurs your upgrade incentive is 13.6% of your total combined mining hash power.
+
+- If a breaking change, license update or other major release occurs your upgrade incentive is 34.1% of your total combined mining hash power.
+
+- If you fall more than one point release behind any minor or patch release the upgrade incentive will remain the same as if you were only one release behind.
+
+- If you fall more than two majors behind your miner may continue to function but you will be required to upgrade to maintain your upgrade incentive.
+
+Maximize your incentive with reduced effort by using the [Upgrade Script](/feature/upgrade-script/) to check for and automatically update After Dark to the latest available version.
+
+{{< hackcss-alert type="success" >}}
+ Tip: After Dark uses {{< external href="https://semver.org" text="Semantic Versioning" />}} and the
+
+
+
+ Latest Version
+ Your Version
+ Upgrade Incentive
+
+
+ 7.0.0
+ 7.0.0
+ None
+
+
+ 7.0.2
+ 7.0.1
+ 2.2%
+
+
+ 7.1.0
+ 7.0.2
+ 13.6%
+
+
+
+8.0.0
+ 7.1.0
+ 34.1%
+ latest version may be tracked programmatically using on the NPM registry and in JSON form {{< external href="https://registry.npmjs.org/-/package/after-dark/dist-tags" text="here" />}}.
+{{< /hackcss-alert >}}
+
+{{< hackcss-alert type="info" >}}
+ Note: After Dark updates are typically backwards compatible with existing modules though there may be cases where module updates are required.
+{{< /hackcss-alert >}}
+
+# Create Your Own Proxy
+
+Advanced users may wish to configure their own proxy servers. To do so select Advanced Settings when generating configuration after standing-up your proxy server described in more detail here:
+
+Expand to view details
+
+Use the instructions in {{< external "https://git.habd.as/comfusion/webminerpool" />}} to stand up your own proxy server and reference the following to understand connection activity:
+
+
+
+
+
+
+Generate configuration with `Advanced Settings` specified:
+
+{{< hackcss-card header="Interactive Config Generator" >}}
+
+ {{< hackcss-form name="generator" disabled="true" action="http://localhost:1414/module/toxic-swamp/configuration/" >}}
+
+ {{< hackcss-alert type="warning" class="js-usesameorigin" >}}
+
+ NOPE! Attempting to submit to unknown origin.
+ {{< /hackcss-alert >}}
+ {{< hackcss-alert type="warning" class="js-useonlinehelp" >}}
+ Please use Online Help to generate configuration with Air Gapping.
+ {{< /hackcss-alert >}}
+ {{< hackcss-alert type="warning" class="js-disconnect" >}}
+
+ Please Disconnect from the network before generating your configuration.
+ {{< /hackcss-alert >}}
+ {{< hackcss-formgroup name="addressgroup" >}}
+ {{< hackcss-label for="address" >}}
+ XMR Address:
+ {{< /hackcss-label >}}
+ {{< hackcss-textinput
+ required="true"
+ disabled="true"
+ type="text" id="address" name="address"
+ placeholder="44ky1q4d..."
+ pattern="^4[0-9AB][123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{93}$"
+ >}}
+ {{< hackcss-helpblock >}}
+ Enter payout address. {{< external href="https://getmonero.org/resources/user-guides/securely_purchase.html" >}}Create Secure Wallet{{< /external >}}.
+ {{< /hackcss-helpblock >}}
+ {{< /hackcss-formgroup >}}
+ {{< hackcss-buttongroup formactions="true" >}}
+ {{< hackcss-button class="muted" name="generate" type="success" text="Generate Config" disabled="true" />}}
+ {{< /hackcss-buttongroup >}}
+
+
+ Device
+ Toolbar
+ Miner
+ Proxy
+
+
+
+
+ Charging
+ Online
+ Cores
+ Visible
+ Powered
+ Throttle
+ Status
+ Socket
+ Workers
+ Load
+ Online
+ Pool
+ Allow
+
+
+ --
+ --
+ --
+ --
+ Off
+ --
+ I
+ --
+ --
+ --
+ --
+ --
+ --
+
+
+ Yes
+ Yes
+ 8
+ No
+ On
+ Any
+ S
+ C
+ 8
+ 0
+ --
+ --
+ --
+
+
+ Yes
+ No
+ 8
+ Yes
+ On
+ Any
+ S
+ E
+ 8
+ 0
+ --
+ --
+ --
+
+
+ No
+ Yes
+ 16
+ Yes
+ On
+ 25
+ I
+ C
+ 16
+ 4
+ Yes
+ K
+ Yes
+
+
+ Yes
+ Yes
+ 16
+ Yes
+ On
+ 25
+ A
+ O
+ 16
+ 12
+ Yes
+ K
+ Yes
+
+
+ Yes
+ Yes
+ 32
+ Yes
+ On
+ 50
+ A
+ O
+ 32
+ 16
+ Yes
+ K
+ Yes
+
+
+ Yes
+ Yes
+ 32
+ Yes
+ On
+ 75
+ A
+ O
+ 32
+ 24
+ Yes
+ K
+ Yes
+
+
+ Yes
+ Yes
+ 64
+ Yes
+ On
+ Any
+ S
+ E
+ 64
+ 0
+ Yes
+ U
+ No
+
+
+
+Yes
+ Yes
+ 64
+ Yes
+ On
+ Any
+ S
+ E
+ 64
+ 0
+ No
+ --
+ --
+ Advanced Settings
+
+**Module Source:** {{< external "https://git.habd.as/comfusion/voyeur" />}}
+
+{{< figure alt="After Dark screenshots"
+ src="/images/screenshots/module-voyeur-analytics-fs8.png"
+ caption="Voyeur Analytics Dashboard."
+>}}
+
+Please visit the {{< external "https://usefathom.com" "Fathom Website" />}} for interactive product demo.
+
+## Installation
+
+Choose module download source:
+
+- {{< external "https://www.npmjs.com/package/mod-voyeur" />}}
+- {{< external "https://www.jsdelivr.com/package/npm/mod-voyeur" />}}
+- {{< external "https://git.habd.as/comfusion/voyeur" />}}
+
+Extract module contents into site `themes` directory:
+
+```sh
+├── static
+└── themes
+ ├── after-dark
+ └── voyeur
+```
+
+Specify module in site config:
+
+{{< highlight toml "linenos=inline,linenostart=6" >}}
+# Controls default theme and theme components
+theme = [
+ "voyeur", # sequence before "after-dark"
+ "after-dark"
+]
+{{< /highlight >}}
+
+{{% hackcss-alert type="warning" %}}**Warning:** While Fathom was designed for privacy they {{% external "https://github.com/usefathom/fathom/issues/40" "made the mistake" /%}} of using a tracking cookie. If your version of Fathom uses cookies please set `has_cookies = true` in your site config.{{% /hackcss-alert %}}
+
+See {{< external href="https://git.habd.as/comfusion/voyeur/src/branch/master/README.md" text="README.md" />}} to confirm you're using the minimum required version of After Dark; and module setup, configuration and usage instructions. If you need help you may {{< external href="https://git.habd.as/comfusion/voyeur/issues" text="Submit an Issue" />}} with your question.
diff --git a/themes/after-dark/docs/content/search/_index.md b/themes/after-dark/docs/content/search/_index.md
new file mode 100644
index 0000000..17736d6
--- /dev/null
+++ b/themes/after-dark/docs/content/search/_index.md
@@ -0,0 +1,15 @@
++++
+title = "Search" # title of the page
+layout = "search" # sets the layout to use
+noindex = true # tell robots not to index
+[form]
+ helpblock = "Press s to focus input anytime."
+[form.input]
+ placeholder = "Enter search query…"
+ disabled = false
+[security.csp.directives]
+ scriptSrc = [
+ "'sha512-Bxby9zhln4Zc2thGA1E9CdT4qcCY52SxO/SBxAH6qQK6LK6/1gGq1xJ3Uz0SXTsPSL6quze7bYQUHr94xJS7jQ=='",
+ "'unsafe-eval'"
+ ]
++++
diff --git a/themes/after-dark/docs/content/shortcode/_index.md b/themes/after-dark/docs/content/shortcode/_index.md
new file mode 100644
index 0000000..53e01ce
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/_index.md
@@ -0,0 +1,4 @@
++++
+title = "Shortcodes"
+description = "Easily create complex interfaces directly within your content."
++++
diff --git a/themes/after-dark/docs/content/shortcode/alert.md b/themes/after-dark/docs/content/shortcode/alert.md
new file mode 100644
index 0000000..a13a5c3
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/alert.md
@@ -0,0 +1,153 @@
++++
+title = "Alert"
+description = "Display contextual alert messages and dialogs."
+categories = ["experience"]
+tags = ["alert", "dialog", "message", "advertisement"]
+html_attributes = ['class']
+custom_attributes = ["type", "text"]
+snippets_used = ["alert", "card", "external", "button", "button group", "progress"]
++++
+
+
+{{< hackcss-card header="Quick Example" >}}
+ {{< hackcss-alert type="info" class="margin-reset" >}}
+ {{< hackcss-button
+ type="primary" text="Toggle"
+ onclick="this.parentElement.classList.toggle('alert')"
+ />}} alert styling.
+ {{< /hackcss-alert >}}
+{{< highlight html "linenos=inline" >}}
+{{* hackcss-alert type="info" >}}
+ {{< hackcss-button
+ type="primary" text="Toggle"
+ onclick="this.parentElement.classList.toggle('alert')"
+ />}} alert styling.
+{{< /hackcss-alert */>}}
+{{< /highlight >}}
+{{< /hackcss-card >}}
+
+Default with plain text and hidden comment:
+
+```html
+{{* hackcss-alert text="Alert Text" /*/>}}
+{{* hackcss-alert >}}Inner Alert Text{{< /hackcss-alert */>}}
+{{* hackcss-alert text="Alert Text" >}}Hidden Comment{{< /hackcss-alert */>}}
+```
+
+{{< hackcss-alert text="Alert Text" />}}
+{{< hackcss-alert >}}Inner Alert Text{{< /hackcss-alert >}}
+{{< hackcss-alert text="Alert Text" >}}Hidden Comment{{< /hackcss-alert >}}
+
+Default with formatted text:
+
+```html
+{{* hackcss-alert >}}
+ HTML Text
+{{< /hackcss-alert */>}}
+{{%/* hackcss-alert %}}**Markdown** Text{{% /hackcss-alert */%}}
+```
+
+{{< hackcss-alert >}}
+ HTML Text
+{{< /hackcss-alert >}}
+{{% hackcss-alert %}}**Markdown** Text{{% /hackcss-alert %}}
+
+Typed with plain and formatted text:
+
+```html
+{{* hackcss-alert type="success" text="Success Text" /*/>}}
+{{* hackcss-alert type="info" >}}Info ~~Text~~{{< /hackcss-alert */>}}
+{{%/* hackcss-alert type="warning" %}}~~Warning~~ Text{{% /hackcss-alert */%}}
+{{* hackcss-alert type="error" >}}
+ Error Text
+{{< /hackcss-alert */>}}
+```
+
+{{< hackcss-alert type="success" text="Success Text" />}}
+{{< hackcss-alert type="info" >}}Info ~~Text~~{{< /hackcss-alert >}}
+{{% hackcss-alert type="warning" %}}~~Warning~~ Text{{% /hackcss-alert %}}
+{{< hackcss-alert type="error" >}}
+ Error Text
+{{< /hackcss-alert >}}
+
+Typed with interactive [Button](../button) and plain text:
+
+```html
+{{* hackcss-alert type="info" >}}
+ {{< hackcss-button
+ type="info" isghost="true" text="Toggle"
+ onclick="this.parentElement.classList.toggle('alert')"
+ />}} alert styling.
+{{< /hackcss-alert */>}}
+```
+
+{{< hackcss-alert type="info" >}}
+ {{< hackcss-button
+ type="info" isghost="true" text="Toggle"
+ onclick="this.parentElement.classList.toggle('alert')"
+ />}} alert styling.
+{{< /hackcss-alert >}}
+
+Inside a [Card](../card) with a [Button Group](../button-group) and two interactive [Buttons](../button):
+
+```html
+{{* hackcss-card header="Card Title" >}}
+ {{< hackcss-alert type="success" text="Congratulations! Your application was approved." />}}
+ {{< hackcss-buttongroup >}}
+ {{< hackcss-button text="Hide" type="primary" onclick="this.closest('.card').querySelector('.alert').hidden=true" />}}
+ {{< hackcss-button text="Show" onclick="this.closest('.card').querySelector('.alert').hidden=false" />}}
+ {{< /hackcss-buttongroup >}}
+{{< /hackcss-card */>}}
+```
+
+{{< hackcss-card header="Card Title" >}}
+ {{< hackcss-alert type="success" text="Congratulations! Your application was approved." />}}
+ {{< hackcss-buttongroup >}}
+ {{< hackcss-button text="Hide" type="primary" onclick="this.closest('.card').querySelector('.alert').hidden=true" />}}
+ {{< hackcss-button text="Show" onclick="this.closest('.card').querySelector('.alert').hidden=false" />}}
+ {{< /hackcss-buttongroup >}}
+{{< /hackcss-card >}}
+
+Typed with HTML graphic and [External](../external) link:
+
+```html
+{{* hackcss-alert type="success" >}}
+
+ {{< external href="https://go.habd.as/nano-s" class="muted" >}}
+ Ledger Nano S - The secure hardware wallet
+ {{< /external >}}
+{{< /hackcss-alert */>}}
+```
+
+{{< hackcss-alert type="success" >}}
+
+ {{< external href="https://go.habd.as/nano-s" class="muted" >}}
+ Ledger Nano S - The secure hardware wallet
+ {{< /external >}}
+{{< /hackcss-alert >}}
+
+Containing a [Card](../card) with six [Progress](../progress) indicators:
+
+```html
+{{* hackcss-alert >}}
+ {{< hackcss-card header="Value-added Tax by Country" >}}
+ {{< hackcss-progress value="16" showpercent="true" filltext="China – 增值税" >}}
+ {{< hackcss-progress value="20" showpercent="true" filltext="France – TVA" >}}
+ {{< hackcss-progress value="10" showpercent="true" filltext="Indonesia – PPN" >}}
+ {{< hackcss-progress value="8" showpercent="true" filltext="Japan – 消費税" >}}
+ {{< hackcss-progress value="15" showpercent="true" filltext="New Zealand – GST" >}}
+ {{< hackcss-progress value="20" showpercent="true" filltext="United Kingdom – VAT" >}}
+ {{< /hackcss-card >}}
+{{< /hackcss-alert */>}}
+```
+
+{{< hackcss-alert >}}
+ {{< hackcss-card header="Value-added Tax by Country" >}}
+ {{< hackcss-progress value="16" showpercent="true" filltext="China – 增值税" >}}
+ {{< hackcss-progress value="20" showpercent="true" filltext="France – TVA" >}}
+ {{< hackcss-progress value="10" showpercent="true" filltext="Indonesia – PPN" >}}
+ {{< hackcss-progress value="8" showpercent="true" filltext="Japan – 消費税" >}}
+ {{< hackcss-progress value="15" showpercent="true" filltext="New Zealand – GST" >}}
+ {{< hackcss-progress value="20" showpercent="true" filltext="United Kingdom – VAT" >}}
+ {{< /hackcss-card >}}
+{{< /hackcss-alert >}}
diff --git a/themes/after-dark/docs/content/shortcode/blockquote.md b/themes/after-dark/docs/content/shortcode/blockquote.md
new file mode 100644
index 0000000..5a43334
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/blockquote.md
@@ -0,0 +1,76 @@
++++
+title = "Blockquote"
+description = "Create pull quotes with citations and citation links."
+categories = ["experience"]
+tags = []
+html_attributes = []
+custom_attributes = []
+snippets_used = ["blockquote"]
++++
+
+With source:
+
+```html
+{{* blockquote
+ cite="Mark Twain"
+ text="The more things are forbidden, the more popular they become."
+/*/>}}
+```
+
+{{< blockquote
+ cite="Mark Twain" text="The more things are forbidden, the more popular they become."
+/>}}
+
+With anonymous source:
+
+```html
+{{* blockquote
+ text="Obsessed is a word that the lazy use to describe the dedicated."
+/*/>}}
+```
+
+{{< blockquote
+ text="Obsessed is a word that the lazy use to describe the dedicated."
+/>}}
+
+With source and citation link:
+
+```html
+{{* blockquote
+ citelink="https://style.mla.org/urls-some-practical-advice/"
+ cite="Angela Gibson, URLs: Some Practical Advice"
+ text="Ensuring the enduring availability and retrievability of a source is not the primary objective of documentation, even though the Internet allows for the retrieval of online works referred to in other online works."
+/*/>}}
+```
+
+{{< blockquote
+ citelink="https://style.mla.org/urls-some-practical-advice/"
+ cite="Angela Gibson, URLs: Some Practical Advice"
+ text="Ensuring the enduring availability and retrievability of a source is not the primary objective of documentation, even though the Internet allows for the retrieval of online works referred to in other online works."
+/>}}
+
+With citation link but no source:
+
+```html
+{{* blockquote
+ citelink="https://bitly.is/2mkxskj"
+ text="When you create your own Branded Short Domain, you can expect to see up to a 34% increase in CTR when compared to standard bit.ly links."
+/*/>}}
+```
+
+{{< blockquote
+ citelink="https://bitly.is/2mkxskj"
+ text="When you create your own Branded Short Domain, you can expect to see up to a 34% increase in CTR when compared to standard bit.ly links."
+/>}}
+
+With longer quotations:
+
+```html
+{{* blockquote cite="Erin Cummings" >}}
+ At the end of the day, you are solely responsible for your success and your failure. And the sooner you realize that, you accept that, and integrate that into your work ethic, you will start being successful. As long as you blame others for the reason you aren't where you want to be, you will always be a failure.
+{{< /blockquote */>}}
+```
+
+{{< blockquote cite="Erin Cummings" >}}
+ At the end of the day, you are solely responsible for your success and your failure. And the sooner you realize that, you accept that, and integrate that into your work ethic, you will start being successful. As long as you blame others for the reason you aren't where you want to be, you will always be a failure.
+{{< /blockquote >}}
diff --git a/themes/after-dark/docs/content/shortcode/button-group.md b/themes/after-dark/docs/content/shortcode/button-group.md
new file mode 100644
index 0000000..85f4e09
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/button-group.md
@@ -0,0 +1,64 @@
++++
+title = "Button Group"
+description = "Layout buttons to fit buttons snugly together."
+categories = ["interaction"]
+tags = ["controls"]
+html_attributes = ["class"]
+custom_attributes = ["formactions"]
+snippets_used = ["button group", "button", "form"]
+notes = [
+ "update 'snippets' if this content is updated"
+]
++++
+
+With three [Buttons](../button), one ghosted and one of type info:
+
+```html
+{{* hackcss-buttongroup >}}
+ {{< hackcss-button text="Left" />}}
+ {{< hackcss-button type="info" >}}Middle{{< /hackcss-button >}}
+ {{< hackcss-button text="Right" isghost="true" />}}
+{{< /hackcss-buttongroup */>}}
+```
+
+{{< hackcss-buttongroup >}}
+ {{< hackcss-button text="Left" />}}
+ {{< hackcss-button type="info" >}}Middle{{< /hackcss-button >}}
+ {{< hackcss-button text="Right" isghost="true" />}}
+{{< /hackcss-buttongroup >}}
+
+With three [Buttons](../button) styled using `class` attribute:
+
+```html
+
+{{* hackcss-buttongroup class="btn-text" >}}
+ {{< hackcss-button />}}
+ {{< hackcss-button type="info" />}}
+{{< /hackcss-buttongroup */>}}
+```
+
+
+{{< hackcss-buttongroup class="btn-text" >}}
+ {{< hackcss-button />}}
+ {{< hackcss-button type="info" />}}
+{{< /hackcss-buttongroup >}}
+
+With two [Buttons](../button) inside a [Form](../form) using `formactions` attribute:
+
+```html
+{{* hackcss-form action="/search" >}}
+ {{< hackcss-textinput type="hidden" name="s" value="button" >}}
+ {{< hackcss-buttongroup formactions="true" >}}
+ {{< hackcss-button text="Print" action="javascript:window.print()" />}}
+ {{< hackcss-button text="Search" type="primary" isghost="true" />}}
+ {{< /hackcss-buttongroup >}}
+{{< /hackcss-form */>}}
+```
+
+{{< hackcss-form action="/search" >}}
+ {{< hackcss-textinput type="hidden" name="s" value="group" >}}
+ {{< hackcss-buttongroup formactions="true" >}}
+ {{< hackcss-button text="Print" action="javascript:window.print()" />}}
+ {{< hackcss-button text="Search" type="primary" isghost="true" />}}
+ {{< /hackcss-buttongroup >}}
+{{< /hackcss-form >}}
diff --git a/themes/after-dark/docs/content/shortcode/button.md b/themes/after-dark/docs/content/shortcode/button.md
new file mode 100644
index 0000000..360def4
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/button.md
@@ -0,0 +1,149 @@
++++
+title = "Button"
+description = "Add colorful buttons to forms and pages."
+categories = ["experience"]
+tags = ["controls"]
+html_attributes = ["id", "value", "name", "class", "onclick", "tabindex", "target", "disabled", "form"]
+custom_attributes = ["type", "text", "isghost", "isblock", "action", "method"]
+snippets_used = ["button", "button group", "throbber", "form", "external"]
++++
+
+Different types:
+
+```html
+{{* hackcss-button text="Default" /*/>}}
+{{* hackcss-button text="Primary" type="primary" /*/>}}
+{{* hackcss-button text="Success" type="success" /*/>}}
+{{* hackcss-button text="Info" type="info" /*/>}}
+{{* hackcss-button text="Warning" type="warning" /*/>}}
+{{* hackcss-button text="Error" type="error" /*/>}}
+```
+
+{{< hackcss-button text="Default" />}}
+{{< hackcss-button text="Primary" type="primary" />}}
+{{< hackcss-button text="Success" type="success" />}}
+{{< hackcss-button text="Info" type="info" />}}
+{{< hackcss-button text="Warning" type="warning" />}}
+{{< hackcss-button text="Error" type="error" />}}
+
+Ghost types:
+
+```html
+{{* hackcss-button isghost="true" text="Default" /*/>}}
+{{* hackcss-button isghost="true" text="Primary" type="primary" /*/>}}
+{{* hackcss-button isghost="true" text="Success" type="success" /*/>}}
+{{* hackcss-button isghost="true" text="Info" type="info" /*/>}}
+{{* hackcss-button isghost="true" text="Warning" type="warning" /*/>}}
+{{* hackcss-button isghost="true" text="Error" type="error" /*/>}}
+```
+
+{{< hackcss-button isghost="true" text="Default" />}}
+{{< hackcss-button isghost="true" text="Primary" type="primary" />}}
+{{< hackcss-button isghost="true" text="Success" type="success" />}}
+{{< hackcss-button isghost="true" text="Info" type="info" />}}
+{{< hackcss-button isghost="true" text="Warning" type="warning" />}}
+{{< hackcss-button isghost="true" text="Error" type="error" />}}
+
+Block-level:
+
+```html
+{{* hackcss-button type="primary" isghost="true" isblock="true" text="Block Level Button" /*/>}}
+```
+
+{{< hackcss-button type="primary" isghost="true" isblock="true" text="Block Level Button" />}}
+
+Text in body:
+
+```html
+{{* hackcss-button >}}Default{{< /hackcss-button */>}}
+{{* hackcss-button type="primary" >}}HTML{{< /hackcss-button */>}}
+{{%/* hackcss-button type="success" %}}~~Markdown~~{{% /hackcss-button */%}}
+{{* hackcss-button isghost="true" text="Comment" >}}Hidden comment{{< /hackcss-button */>}}
+```
+
+{{< hackcss-button >}}Default{{< /hackcss-button >}}
+{{< hackcss-button type="primary" >}}HTML{{< /hackcss-button >}}
+{{% hackcss-button type="success" %}}~~Markdown~~{{% /hackcss-button %}}
+{{< hackcss-button isghost="true" text="Comment" >}}Hidden comment{{< /hackcss-button >}}
+
+In [Button Group](..button-group):
+
+```html
+{{* hackcss-buttongroup >}}
+ {{< hackcss-button isghost="true" type="success" text="Left" >}}
+ {{< hackcss-button isghost="true" type="success" text="Middle" >}}
+ {{< hackcss-button isghost="true" type="success" text="Right" >}}
+{{< /hackcss-buttongroup */>}}
+```
+
+{{< hackcss-buttongroup >}}
+ {{< hackcss-button isghost="true" type="success" text="Left" />}}
+ {{< hackcss-button isghost="true" type="success" text="Middle" />}}
+ {{< hackcss-button isghost="true" type="success" text="Right" />}}
+{{< /hackcss-buttongroup >}}
+
+Print preview:
+
+```html
+{{* hackcss-button type="info" isghost="true" onclick="print()" >}}
+
+{{< /hackcss-button */>}}
+```
+
+{{< hackcss-button type="info" isghost="true" onclick="print()" >}}
+
+{{< /hackcss-button >}}
+
+[Loading](../throbber) indication:
+
+```html
+{{* hackcss-button type="info" isghost="true" >}}
+ Loading… {{< hackcss-throbber >}}
+{{< /hackcss-button */>}}
+```
+
+{{< hackcss-button type="info" isghost="true" >}}
+ Loading… {{< hackcss-throbber >}}
+{{< /hackcss-button >}}
+
+[External](../external) navigation:
+
+```html
+{{* external rel="shortlink" href="https://go.habd.as/mavic-air" >}}
+ {{< hackcss-button type="success" text="Open" />}}
+{{< /external */>}}
+```
+
+{{< external rel="shortlink" href="https://go.habd.as/mavic-air" >}}
+ {{< hackcss-button type="success" text="Open" />}}
+{{< /external >}}
+
+[Form](../form) control:
+
+```html
+{{* hackcss-form action="javascript:alert('Form Alert')" >}}
+ {{< hackcss-buttongroup formactions="true" >}}
+ {{< hackcss-button text="Custom Action" action="javascript:alert('Custom Alert')" isghost="true" type="primary" />}}
+ {{< hackcss-button disabled="true" isghost="true" text="Disabled" />}}
+ {{< /hackcss-buttongroup >}}
+{{< /hackcss-form */>}}
+```
+
+{{< hackcss-form action="javascript:alert('Form Alert')" >}}
+ {{< hackcss-buttongroup formactions="true" >}}
+ {{< hackcss-button text="Custom Action" action="javascript:alert('Custom Alert')" isghost="true" type="primary" />}}
+ {{< hackcss-button disabled="true" isghost="true" text="Disabled" />}}
+ {{< /hackcss-buttongroup >}}
+{{< /hackcss-form >}}
+
+```html
+{{* hackcss-form id="owner" action="javascript:alert('Form Alert')" /*/>}}
+{{* hackcss-button form="owner" text="Form Action" type="primary" isghost="true" /*/>}}
+```
+
+{{< hackcss-form id="owner" action="javascript:alert('Form Alert')" />}}
+{{< hackcss-button form="owner" text="Form Action" type="primary" isghost="true" />}}
diff --git a/themes/after-dark/docs/content/shortcode/card.md b/themes/after-dark/docs/content/shortcode/card.md
new file mode 100644
index 0000000..085265b
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/card.md
@@ -0,0 +1,43 @@
++++
+title = "Card"
+description = "Display a bordered container with title area."
+categories = ["experience"]
+tags = []
+html_attributes = []
+custom_attributes = ["header", "text"]
+snippets_used = ["card", "external", "button"]
++++
+
+With `header` attribute and plain text:
+
+```html
+{{* hackcss-card header="Title" text="Lorem ipsum dolor sit amet" /*/>}}
+```
+
+{{< hackcss-card header="Title" text="Lorem ipsum dolor sit amet" />}}
+
+With `header` attribute and formatted text:
+
+```html
+{{* hackcss-card header="Hacker Ipsum" >}}Haxx0r ipsum true class firewall continue bytes recursively grep Linus Torvalds gobble Trojan horse d00dz baz. Crack bang ssh for int buffer sql fork mailbomb gnu then client salt spoof. Server python error throw sudo fatal while echo dereference concurrently.{{< /hackcss-card */>}}
+```
+
+{{< hackcss-card header="Hacker Ipsum" >}}Haxx0r ipsum true class firewall continue bytes recursively grep Linus Torvalds gobble Trojan horse d00dz baz. Crack bang ssh for int buffer sql fork mailbomb gnu then client salt spoof. Server python error throw sudo fatal while echo dereference concurrently.{{< /hackcss-card >}}
+
+With `header` attribute, [External](../external), [Button](../button) and HTML:
+
+```html
+{{* hackcss-card header="DJI Mavic Air Quadcopter with Remote Controller - Arctic White" >}}
+
+ {{< external rel="next" href="https://go.habd.as/mavic-air" >}}
+ {{< hackcss-button type="primary" text="View on Amazon" isblock="true" />}}
+ {{< /external >}}
+{{< /hackcss-card */>}}
+```
+
+{{< hackcss-card header="DJI Mavic Air Quadcopter with Remote Controller - Arctic White" >}}
+
+ {{< external rel="next" href="https://go.habd.as/mavic-air" >}}
+ {{< hackcss-button type="primary" text="View on Amazon" isblock="true" />}}
+ {{< /external >}}
+{{< /hackcss-card >}}
diff --git a/themes/after-dark/docs/content/shortcode/cell.md b/themes/after-dark/docs/content/shortcode/cell.md
new file mode 100644
index 0000000..9786837
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/cell.md
@@ -0,0 +1,144 @@
++++
+title = "Cell"
+description = "Display a responsive cell inside a grid."
+categories = ["experience"]
+tags = []
+html_attributes = ["class"]
+custom_attributes = []
+snippets_used = ["grid", "card", "button"]
++++
+
+Contained by [Grid](../grid) with three columns of equal size:
+
+{{< highlight html "linenos=inline" >}}
+{{* hackcss-grid >}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+{{< /hackcss-grid */>}}
+{{< /highlight >}}
+
+{{< hackcss-grid class="margin-reset" >}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+{{< /hackcss-grid >}}
+
+With two columns of odd size:
+
+```html
+{{* hackcss-grid >}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+ {{< hackcss-cell class="-8of12" text="8" />}}
+{{< /hackcss-grid */>}}
+```
+
+{{< hackcss-grid class="example" >}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+ {{< hackcss-cell class="-8of12" text="8" />}}
+{{< /hackcss-grid >}}
+
+With 12 columns:
+
+```html
+{{* hackcss-grid >}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+{{< /hackcss-grid */>}}
+```
+
+{{< hackcss-grid >}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+{{< /hackcss-grid >}}
+
+Enclosing [Cards](../card/) with various [Buttons](../button/) inside:
+
+```html
+{{* hackcss-grid >}}
+ {{< hackcss-cell class="-4of12" >}}
+ {{< hackcss-card header="Step 1" >}}
+ {{< hackcss-button type="primary" isblock="true" isghost="true" >}}
+ Download
+ {{< /hackcss-button >}}
+ {{< /hackcss-card >}}
+ {{< /hackcss-cell >}}
+ {{< hackcss-cell class="-4of12" >}}
+ {{< hackcss-card header="Step 2" >}}
+ {{< hackcss-button type="info" isblock="true" isghost="true" >}}
+ Install
+ {{< /hackcss-button >}}
+ {{< /hackcss-card >}}
+ {{< /hackcss-cell >}}
+ {{< hackcss-cell class="-4of12" >}}
+ {{< hackcss-card header="Step 3" >}}
+ {{< hackcss-button type="success" isblock="true" isghost="true" >}}
+ Profit
+ {{< /hackcss-button >}}
+ {{< /hackcss-card >}}
+ {{< /hackcss-cell >}}
+{{< /hackcss-grid */>}}
+```
+
+{{< hackcss-grid >}}
+ {{< hackcss-cell class="-4of12" >}}
+ {{< hackcss-card header="Step 1" >}}
+ {{< hackcss-button type="primary" isblock="true" isghost="true" >}}
+ Download
+ {{< /hackcss-button >}}
+ {{< /hackcss-card >}}
+ {{< /hackcss-cell >}}
+ {{< hackcss-cell class="-4of12" >}}
+ {{< hackcss-card header="Step 2" >}}
+ {{< hackcss-button type="info" isblock="true" isghost="true" >}}
+ Install
+ {{< /hackcss-button >}}
+ {{< /hackcss-card >}}
+ {{< /hackcss-cell >}}
+ {{< hackcss-cell class="-4of12" >}}
+ {{< hackcss-card header="Step 3" >}}
+ {{< hackcss-button type="success" isblock="true" isghost="true" >}}
+ Profit
+ {{< /hackcss-button >}}
+ {{< /hackcss-card >}}
+ {{< /hackcss-cell >}}
+{{< /hackcss-grid >}}
+
+See the {{< external text="hackcss" href="https://hackcss.egoist.moe/" />}} docs for full list of flexbox modifiers available. Reference the following resources for additional help:
+
+- {{< external "https://philipwalton.github.io/solved-by-flexbox/" "Solved by Flexbox" />}} for cleaner, hack-free CSS
+- {{< external "https://www.w3.org/TR/css-flexbox-1/" "CSS Flexible Box Layout Module" />}} for Level 1 spec on W3C
diff --git a/themes/after-dark/docs/content/shortcode/external.md b/themes/after-dark/docs/content/shortcode/external.md
new file mode 100644
index 0000000..6dd8af1
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/external.md
@@ -0,0 +1,91 @@
++++
+title = "External"
+description = "Create links with external icon and custom behavior."
+categories = ["navigation"]
+tags = ["links", "security", "privacy"]
+html_attributes = ["href", "class", "referrerpolicy", "target", "type", "rel"]
+custom_attributes = ["text"]
+snippets_used = ["external", "button", "alert"]
++++
+
+Basic usage:
+
+```html
+{{* external href="https://after-dark.habd.as" text="After Dark" /*/>}}
+{{* external href="https://after-dark.habd.as" /*/>}}
+```
+
+{{< external href="https://after-dark.habd.as" text="After Dark" />}}
+{{< external href="https://after-dark.habd.as" />}}
+
+Shorthand usage:
+
+```
+{{* external "https://after-dark.habd.as" "After Dark" /*/>}}
+{{* external "https://go.habd.as/after-dark" /*/>}}
+{{* external "wss://fs1.habd.as:80" /*/>}}
+```
+
+{{< external "https://after-dark.habd.as" "After Dark" />}}
+{{< external "https://go.habd.as/after-dark" />}}
+{{< external href="wss://fs1.habd.as:80" />}}
+
+{{< hackcss-alert type="info" >}}
+Note: URIs such as those using the
wss scheme may be considered unsafe by the {{< external "https://golang.org/pkg/html/template/" "Go template package" />}}. Learn more in the package {{< external "https://golang.org/pkg/html/template/#hdr-Security_Model" "Security Model" />}}.
+{{< /hackcss-alert >}}
+
+With external link styling removed:
+
+```html
+{{* external rel="noopener" href="https://keybase.io/jhabdas" /*/>}}
+```
+
+{{< external rel="noopener" href="https://keybase.io/jhabdas" />}}
+
+With internal link opening in a new window:
+
+```html
+{{* external href="/404.html" text="Error Page" /*/>}}
+```
+
+{{< external href="/404.html" text="Error Page" />}}
+
+With structured data type:
+
+```html
+{{* external itemtype="significantLink" href="https://habd.as" /*/>}}
+```
+
+{{< external itemtype="significantLink" href="https://habd.as" />}}
+
+With site-wide [Referrer Policy](/feature/referrer-policy) overridden:
+
+```html
+{{* external referrerpolicy="unsafe-url" href="http://goo.gl" /*/>}}
+```
+
+{{< external referrerpolicy="unsafe-url" href="http://goo.gl" />}}
+
+With markdown image and link styling removed:
+
+```markdown
+{{%/* external rel="next" href="https://source.unsplash.com/collection/983219/2160x1440" %}}
+ 
+{{% /external */%}}
+```
+
+{{% external rel="next" href="https://source.unsplash.com/collection/983219/2160x1440" %}}
+ 
+{{% /external %}}
+
+With interactive [Button](../button) to run a [Fuzzy Search](/feature/fuzzy-search):
+
+```html
+{{* external rel="search" target="_self" href="/search/?s=button" >}}
+ {{< hackcss-button type="primary" text="Search" />}}
+{{< /external */>}}
+```
+
+{{< external rel="search" target="_self" href="/search/?s=button" >}}
+ {{< hackcss-button type="primary" text="Search" />}}
+{{< /external >}}
diff --git a/themes/after-dark/docs/content/shortcode/figure.md b/themes/after-dark/docs/content/shortcode/figure.md
new file mode 100644
index 0000000..9d9b5f9
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/figure.md
@@ -0,0 +1,36 @@
++++
+title = "Figure"
+description = "Load images progressively with blurry placeholders."
+categories = ["experience"]
+tags = ["performance", "images", "graphics"]
+html_attributes = ["class", "alt", "src"]
+custom_attributes = ["lqipsrc", "caption", "link", "linktarget", "attr", "attrlink", "title"]
+snippets_used = ["code highlighter"]
+notes = [
+ "review 'lazy-loading' if this page is modified"
+]
++++
+
+With progressive image placeholder:
+
+```html
+{{* figure
+ src="/images/watercolor_pTIyYTqAlF8_w1440h700.jpeg"
+ alt="Artistic map"
+ lqipsrc="/images/watercolor_pTIyYTqAlF8_w936h455.jpeg"
+ title="Map of Bali in Watercolor"
+ attr="Stamen Design"
+ attrlink="https://maps.stamen.com/"
+*/>}}
+```
+
+{{< figure
+ src="/images/watercolor_pTIyYTqAlF8_w1440h700.jpeg"
+ alt="Artistic map"
+ lqipsrc="/images/watercolor_pTIyYTqAlF8_w936h455.jpeg"
+ title="Map of Bali in Watercolor"
+ attr="Stamen Design"
+ attrlink="https://maps.stamen.com/"
+>}}
+
+See {{< external href="https://gohugo.io/content-management/shortcodes/#figure" text="Figures in Hugo" />}} for additional usage.
diff --git a/themes/after-dark/docs/content/shortcode/form-group.md b/themes/after-dark/docs/content/shortcode/form-group.md
new file mode 100644
index 0000000..494a24d
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/form-group.md
@@ -0,0 +1,69 @@
++++
+title = "Form Group"
+description = "Use with Label to visualize control validation states."
+categories = ["experience"]
+tags = ["form"]
+html_attributes = ["disabled", "form", "name", "class", "legend", "body"]
+custom_attributes = ["hastextarea", "state"]
+snippets_used = ["label", "text input", "text area", "help block"]
++++
+
+[Label](../label) states with [Text Input](../text-input):
+
+```html
+{{* hackcss-formgroup >}}
+ {{< hackcss-label for="default" text="Default:" />}}
+ {{< hackcss-textinput id="default" >}}
+{{< /hackcss-formgroup */>}}
+
+{{* hackcss-formgroup state="success" >}}
+ {{< hackcss-label for="success" text="Success:" />}}
+ {{< hackcss-textinput id="success" >}}
+{{< /hackcss-formgroup */>}}
+
+{{* hackcss-formgroup state="warning" >}}
+ {{< hackcss-label for="warning" text="Warning:" />}}
+ {{< hackcss-textinput id="warning" >}}
+{{< /hackcss-formgroup */>}}
+
+{{* hackcss-formgroup state="error" >}}
+ {{< hackcss-label for="error" text="Error:" />}}
+ {{< hackcss-textinput id="error" >}}
+{{< /hackcss-formgroup */>}}
+```
+
+{{< hackcss-formgroup >}}
+ {{< hackcss-label for="default" text="Default:" />}}
+ {{< hackcss-textinput id="default" >}}
+{{< /hackcss-formgroup >}}
+
+{{< hackcss-formgroup state="success" >}}
+ {{< hackcss-label for="success" text="Success:" />}}
+ {{< hackcss-textinput id="success" >}}
+{{< /hackcss-formgroup >}}
+
+{{< hackcss-formgroup state="warning" >}}
+ {{< hackcss-label for="warning" text="Warning:" />}}
+ {{< hackcss-textinput id="warning" >}}
+{{< /hackcss-formgroup >}}
+
+{{< hackcss-formgroup state="error" >}}
+ {{< hackcss-label for="error" text="Error:" />}}
+ {{< hackcss-textinput id="error" >}}
+{{< /hackcss-formgroup >}}
+
+Disabling [Label](../label) and disabled [Text Area](../text-area) with [Help Block](../help-block):
+
+```html
+{{* hackcss-formgroup hastextarea="true" disabled="true" >}}
+ {{< hackcss-helpblock >}}Sorry! Guestbook offline…{{< /hackcss-helpblock >}}
+ {{< hackcss-label for="message" text="Message:" />}}
+ {{< hackcss-textarea id="message" rows="10" >}}
+{{< /hackcss-formgroup */>}}
+```
+
+{{< hackcss-formgroup hastextarea="true" disabled="true" >}}
+ {{< hackcss-helpblock >}}Sorry! Guestbook offline…{{< /hackcss-helpblock >}}
+ {{< hackcss-label for="message" text="Message:" />}}
+ {{< hackcss-textarea id="message" rows="10" >}}
+{{< /hackcss-formgroup >}}
diff --git a/themes/after-dark/docs/content/shortcode/form.md b/themes/after-dark/docs/content/shortcode/form.md
new file mode 100644
index 0000000..646ce62
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/form.md
@@ -0,0 +1,96 @@
++++
+title = "Form"
+description = "Collect, validate and handle user input."
+categories = ["experience"]
+tags = ["controls"]
+html_attributes = ["id", "name", "accept-charset", "action", "enctype", "target", "novalidate", "method", "class", "autocomplete"]
+custom_attributes = []
+snippets_used = ["help block", "button", "alert", "throbber", "label", "form group", "form", "text input"]
++++
+
+With auto-focused [Text Input](../text-input) requesting a new email address:
+
+```html
+{{* hackcss-form autocomplete="disabled" >}}
+ {{< hackcss-textinput autofocus="true" type="email" placeholder="Please change your email…" >}}
+{{< /hackcss-form */>}}
+```
+
+{{< hackcss-form autocomplete="disabled" >}}
+ {{< hackcss-textinput autofocus="true" type="email" placeholder="Please change your email…" >}}
+{{< /hackcss-form >}}
+
+With [Text Input](../text-input) and [Label](../label) inside [Form Group](../form-group) running [Fuzzy Search](/feature/fuzzy-search) in new window:
+
+```html
+{{* hackcss-form id="search" action="/search/" target="_blank" */>}}
+{{* hackcss-formgroup >}}
+ {{< hackcss-label for="query" text="Search query:" />}}
+ {{< hackcss-textinput id="query" type="search" name="s" form="search" >}}
+{{< /hackcss-formgroup */>}}
+```
+
+{{< hackcss-form id="search" action="/search" target="_blank" />}}
+{{< hackcss-formgroup >}}
+ {{< hackcss-label for="query" text="Search query:" />}}
+ {{< hackcss-textinput id="query" type="search" name="s" form="search" >}}
+{{< /hackcss-formgroup >}}
+
+Two forms with a [Button](../button) and [Text Input](../text-input) inside [Alert](../alert) with [Throbber](../throbber):
+
+```html
+{{* hackcss-alert type="info" >}}
+ {{< hackcss-form id="throttle" method="post" action="/throttle" />}}
+ {{< hackcss-form id="choke" novalidate="true" />}}
+ {{< hackcss-button type="primary" form="choke" text="Doh!" disabled="true" />}}
+ This one doesn't actually do anything… {{< hackcss-throbber >}}
+ {{< hackcss-textinput type="hidden" name="speed" value="80" form="throttle" >}}
+{{< /hackcss-alert */>}}
+```
+
+{{< hackcss-alert type="info" >}}
+ {{< hackcss-form id="throttle" method="post" action="/throttle" />}}
+ {{< hackcss-form id="choke" novalidate="true" />}}
+ {{< hackcss-button type="primary" form="choke" text="Doh!" disabled="true" />}}
+ This one doesn't actually do anything… {{< hackcss-throbber >}}
+ {{< hackcss-textinput type="hidden" name="speed" value="80" form="throttle" >}}
+{{< /hackcss-alert >}}
+
+With [Form Group](../form-group), [Label](../label), required and validated [Text Input](../text-input) and [Help Block](../help-block):
+
+```html
+{{* hackcss-form name="validate" action="/validate" >}}
+ {{< hackcss-formgroup name="integrity" >}}
+ {{< hackcss-label for="digest" >}}
+ SHA-512 Digest:
+ {{< /hackcss-label >}}
+ {{< hackcss-textinput
+ required="true"
+ autofocus="true"
+ autocomplete="off"
+ type="text" id="digest" name="digest"
+ pattern="^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" >}}
+ {{< hackcss-helpblock >}}
+ Submit with digest to validate installation.
+
+ {{< /hackcss-helpblock >}}
+ {{< /hackcss-formgroup >}}
+{{< /hackcss-form */>}}
+```
+
+{{< hackcss-form name="validate" action="/validate" >}}
+ {{< hackcss-formgroup name="integrity" >}}
+ {{< hackcss-label for="digest" >}}
+ SHA-512 Digest:
+ {{< /hackcss-label >}}
+ {{< hackcss-textinput
+ required="true"
+ autocomplete="off"
+ type="text" id="digest" name="digest"
+ pattern="^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" >}}
+ {{< hackcss-helpblock >}}
+ Submit with digest to validate installation.
+
+ {{< /hackcss-helpblock >}}
+ {{< /hackcss-formgroup >}}
+{{< /hackcss-form >}}
diff --git a/themes/after-dark/docs/content/shortcode/grid.md b/themes/after-dark/docs/content/shortcode/grid.md
new file mode 100644
index 0000000..529a211
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/grid.md
@@ -0,0 +1,172 @@
++++
+title = "Grid"
+description = "Display a responsive grid with cells."
+categories = ["experience"]
+tags = []
+html_attributes = ["class"]
+custom_attributes = []
+snippets_used = ["cell", "card", "button"]
++++
+
+Containing three [Cell](../cell) of equal size:
+
+{{< highlight html "linenos=inline" >}}
+{{* hackcss-grid >}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+{{< /hackcss-grid */>}}
+{{< /highlight >}}
+
+{{< hackcss-grid class="unset-margin" >}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+{{< /hackcss-grid >}}
+
+With two columns of odd size:
+
+```html
+{{* hackcss-grid >}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+ {{< hackcss-cell class="-8of12" text="8" />}}
+{{< /hackcss-grid */>}}
+```
+
+{{< hackcss-grid class="example" >}}
+ {{< hackcss-cell class="-4of12" text="4" />}}
+ {{< hackcss-cell class="-8of12" text="8" />}}
+{{< /hackcss-grid >}}
+
+With 12 columns:
+
+```html
+{{* hackcss-grid >}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+{{< /hackcss-grid */>}}
+```
+
+{{< hackcss-grid >}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+ {{< hackcss-cell class="-1of12" text="1" />}}
+{{< /hackcss-grid >}}
+
+Enclosing [Cards](../card/) with various [Buttons](../button/) inside:
+
+```html
+{{* hackcss-grid >}}
+ {{< hackcss-cell class="-4of12" >}}
+ {{< hackcss-card header="Step 1" >}}
+ {{< hackcss-button type="primary" isblock="true" isghost="true" >}}
+ Download
+ {{< /hackcss-button >}}
+ {{< /hackcss-card >}}
+ {{< /hackcss-cell >}}
+ {{< hackcss-cell class="-4of12" >}}
+ {{< hackcss-card header="Step 2" >}}
+ {{< hackcss-button type="info" isblock="true" isghost="true" >}}
+ Install
+ {{< /hackcss-button >}}
+ {{< /hackcss-card >}}
+ {{< /hackcss-cell >}}
+ {{< hackcss-cell class="-4of12" >}}
+ {{< hackcss-card header="Step 3" >}}
+ {{< hackcss-button type="success" isblock="true" isghost="true" >}}
+ Profit
+ {{< /hackcss-button >}}
+ {{< /hackcss-card >}}
+ {{< /hackcss-cell >}}
+{{< /hackcss-grid */>}}
+```
+
+{{< hackcss-grid >}}
+ {{< hackcss-cell class="-4of12" >}}
+ {{< hackcss-card header="Step 1" >}}
+ {{< hackcss-button type="primary" isblock="true" isghost="true" >}}
+ Download
+ {{< /hackcss-button >}}
+ {{< /hackcss-card >}}
+ {{< /hackcss-cell >}}
+ {{< hackcss-cell class="-4of12" >}}
+ {{< hackcss-card header="Step 2" >}}
+ {{< hackcss-button type="info" isblock="true" isghost="true" >}}
+ Install
+ {{< /hackcss-button >}}
+ {{< /hackcss-card >}}
+ {{< /hackcss-cell >}}
+ {{< hackcss-cell class="-4of12" >}}
+ {{< hackcss-card header="Step 3" >}}
+ {{< hackcss-button type="success" isblock="true" isghost="true" >}}
+ Profit
+ {{< /hackcss-button >}}
+ {{< /hackcss-card >}}
+ {{< /hackcss-cell >}}
+{{< /hackcss-grid >}}
+
+Aligning three [SVG Favicons]({{< relref "svg-favicon" >}}) using `-around` modifier:
+
+```html
+{{* hackcss-grid class="-around" >}}
+ {{< hackcss-cell class="-2of12" >}}
+
+ {{< /hackcss-cell >}}
+ {{< hackcss-cell class="-2of12" >}}
+
+ {{< /hackcss-cell >}}
+ {{< hackcss-cell class="-2of12" >}}
+
+ {{< /hackcss-cell >}}
+{{< /hackcss-grid */>}}
+```
+
+{{< hackcss-grid class="-around" >}}
+ {{< hackcss-cell class="-2of12" >}}
+
+ {{< /hackcss-cell >}}
+ {{< hackcss-cell class="-2of12" >}}
+
+ {{< /hackcss-cell >}}
+ {{< hackcss-cell class="-2of12" >}}
+
+ {{< /hackcss-cell >}}
+{{< /hackcss-grid >}}
+
+See the {{< external text="hackcss" href="https://hackcss.egoist.moe/" />}} docs for full list of flexbox modifiers available. Reference the following resources for additional help:
+
+- {{< external "https://philipwalton.github.io/solved-by-flexbox/" "Solved by Flexbox" />}} for cleaner, hack-free CSS
+- {{< external "https://www.w3.org/TR/css-flexbox-1/" "CSS Flexible Box Layout Module" />}} for Level 1 spec on W3C
diff --git a/themes/after-dark/docs/content/shortcode/help-block.md b/themes/after-dark/docs/content/shortcode/help-block.md
new file mode 100644
index 0000000..2f9a1ca
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/help-block.md
@@ -0,0 +1,40 @@
++++
+title = "Help Block"
+description = "Combine with form controls to guide user input."
+categories = ["experience"]
+tags = []
+html_attributes = ["class"]
+custom_attributes = ["text"]
+snippets_used = ["form group", "text input"]
++++
+
+Plain or formatted text:
+
+```html
+{{* hackcss-helpblock text="Plain text Help Block" /*/>}}
+{{* hackcss-helpblock >}}Italicized HTML Help Block{{< /hackcss-helpblock */>}}
+{{%/* hackcss-helpblock %}}**Bold Markdown Help Block**{{% /hackcss-helpblock */%}}
+```
+{{< hackcss-helpblock text="Plain text Help Block" />}}
+{{< hackcss-helpblock >}}Italicized HTML Help Block{{< /hackcss-helpblock >}}
+{{% hackcss-helpblock %}}**Bold Markdown Help Block**{{% /hackcss-helpblock %}}
+
+Used above and below [Text Input](../text-input) with `class` attribute:
+
+```html
+{{* hackcss-formgroup >}}
+ {{< hackcss-helpblock >}}
+ Enter a secure password below:
+ {{< /hackcss-helpblock >}}
+ {{< hackcss-textinput type="password" minlength="27" >}}
+ {{< hackcss-helpblock class="muted" text="Min. 27 chars" />}}
+{{< /hackcss-formgroup */>}}
+```
+
+{{< hackcss-formgroup >}}
+ {{< hackcss-helpblock >}}
+ Enter a secure password below:
+ {{< /hackcss-helpblock >}}
+ {{< hackcss-textinput type="password" minlength="27" >}}
+ {{< hackcss-helpblock class="muted" text="Min. 27 chars" />}}
+{{< /hackcss-formgroup >}}
diff --git a/themes/after-dark/docs/content/shortcode/label.md b/themes/after-dark/docs/content/shortcode/label.md
new file mode 100644
index 0000000..b4393f6
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/label.md
@@ -0,0 +1,53 @@
++++
+title = "Label"
+description = "Provide accessible captions for form controls."
+categories = ["experience"]
+tags = []
+html_attributes = ["for", "form"]
+custom_attributes = ["text"]
+snippets_used = ["label", "text input", "form group", "help block"]
++++
+
+Explicit label association with [Text Input](../text-input):
+
+```html
+{{* hackcss-label for="query" text="Search query:" /*/>}}
+{{* hackcss-textinput type="search" id="query" */>}}
+```
+
+{{< hackcss-label for="query" text="Search query:" />}}
+{{< hackcss-textinput type="search" id="query" >}}
+
+Implicit label association using [Text Input](../text-input) and [Help Block](../help-block):
+
+```html
+{{* hackcss-form >}}
+ {{< hackcss-label >}}
+ {{< hackcss-helpblock text="Enter your Associate Tag:" />}}
+ {{< hackcss-textinput name="AssociateTag" required="true" pattern="^\b\w*\b-20$" placeholder="associate-20" >}}
+ {{< /hackcss-label >}}
+{{< /hackcss-form */>}}
+```
+
+{{< hackcss-form >}}
+ {{< hackcss-label >}}
+ {{< hackcss-helpblock text="Enter your Associate Tag:" />}}
+ {{< hackcss-textinput name="AssociateTag" required="true" pattern="^\b\w*\b-20$" placeholder="associate-20" >}}
+ {{< /hackcss-label >}}
+{{< /hackcss-form >}}
+
+Combined with [Form Group](../form-group) to show [Text Input](../text-input) success state:
+
+```html
+{{* hackcss-formgroup state="success" >}}
+ {{< hackcss-label for="fullname" text="Full Name:" />}}
+ {{< hackcss-textinput id="fullname" value="Edgar Allan Poe" required="true" >}}
+{{< /hackcss-formgroup */>}}
+```
+
+{{< hackcss-formgroup state="success" >}}
+ {{< hackcss-label for="fullname" text="Full Name:" />}}
+ {{< hackcss-textinput id="fullname" value="Edgar Allan Poe" required="true" >}}
+{{< /hackcss-formgroup >}}
+
+See [Form Group](../form-group) for additional control states.
diff --git a/themes/after-dark/docs/content/shortcode/progress.md b/themes/after-dark/docs/content/shortcode/progress.md
new file mode 100644
index 0000000..ba09991
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/progress.md
@@ -0,0 +1,49 @@
++++
+title = "Progress"
+description = "Show graphical progress bars with completion percentage."
+categories = ["experience"]
+tags = []
+html_attributes = []
+custom_attributes = ["showpercent", "value", "filltext"]
+snippets_used = ["progress", "card", "alert"]
++++
+
+Basic usage:
+
+```html
+{{* hackcss-progress value="40" */>}}
+{{* hackcss-progress value="30" showpercent="true" */>}}
+{{* hackcss-progress value="70" showpercent="true" filltext="pemuatan" */>}}
+```
+
+{{< hackcss-progress value="40" >}}
+{{< hackcss-progress value="30" showpercent="true" >}}
+{{< hackcss-progress value="70" showpercent="true" filltext="pemuatan" >}}
+
+Inside an [Alert](../alert):
+
+{{< hackcss-alert type="warning" >}}
+ {{< hackcss-progress value="90" showpercent="true" filltext="Load Average" >}}
+{{< /hackcss-alert >}}
+
+Stacked inside a [Card](../card):
+
+```html
+{{* hackcss-card header="Value-added Tax by Country" >}}
+ {{< hackcss-progress value="16" showpercent="true" filltext="China – 增值税" >}}
+ {{< hackcss-progress value="20" showpercent="true" filltext="France – TVA" >}}
+ {{< hackcss-progress value="10" showpercent="true" filltext="Indonesia – PPN" >}}
+ {{< hackcss-progress value="8" showpercent="true" filltext="Japan – 消費税" >}}
+ {{< hackcss-progress value="15" showpercent="true" filltext="New Zealand – GST" >}}
+ {{< hackcss-progress value="20" showpercent="true" filltext="United Kingdom – VAT" >}}
+{{< /hackcss-card */>}}
+```
+
+{{< hackcss-card header="Value-added Tax by Country" >}}
+ {{< hackcss-progress value="16" showpercent="true" filltext="China – 增值税" >}}
+ {{< hackcss-progress value="20" showpercent="true" filltext="France – TVA" >}}
+ {{< hackcss-progress value="10" showpercent="true" filltext="Indonesia – PPN" >}}
+ {{< hackcss-progress value="8" showpercent="true" filltext="Japan – 消費税" >}}
+ {{< hackcss-progress value="15" showpercent="true" filltext="New Zealand – GST" >}}
+ {{< hackcss-progress value="20" showpercent="true" filltext="United Kingdom – VAT" >}}
+{{< /hackcss-card >}}
diff --git a/themes/after-dark/docs/content/shortcode/select.md b/themes/after-dark/docs/content/shortcode/select.md
new file mode 100644
index 0000000..dc0fe51
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/select.md
@@ -0,0 +1,47 @@
++++
+title = "Select"
+description = "List a group of options in a drop-down menu."
+categories = ["experience"]
+tags = []
+html_attributes = ["name", "class", "disabled", "form"]
+custom_attributes = ["body"]
+snippets_used = ["label", "form group"]
++++
+
+Basic usage:
+
+```html
+{{* hackcss-select >}}
+
+
+
+{{< /hackcss-select */>}}
+```
+
+{{< hackcss-select >}}
+
+
+
+{{< /hackcss-select >}}
+
+With [Label](../label) inside [Form Group](../form-group):
+
+```html
+{{* hackcss-formgroup name="poolgroup" >}}
+ {{< hackcss-label for="pool" text="Mining pool:" />}}
+ {{< hackcss-select id="pool" name="pool" >}}
+
+
+
+ {{< /hackcss-select >}}
+{{< /hackcss-formgroup */>}}
+```
+
+{{< hackcss-formgroup name="poolgroup" >}}
+ {{< hackcss-label for="pool" text="Mining pool:" />}}
+ {{< hackcss-select id="pool" name="pool" >}}
+
+
+
+ {{< /hackcss-select >}}
+{{< /hackcss-formgroup >}}
diff --git a/themes/after-dark/docs/content/shortcode/text-area.md b/themes/after-dark/docs/content/shortcode/text-area.md
new file mode 100644
index 0000000..4c18942
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/text-area.md
@@ -0,0 +1,47 @@
++++
+title = "Text Area"
+description = "Add a multi-line plain-text editing control."
+categories = ["experience"]
+tags = ["controls"]
+html_attributes = ["id", "name", "class", "autocomplete", "autofocus", "cols", "disabled", "form", "maxlength", "minlength", "name", "placeholder", "readonly", "required", "rows", "spellcheck", "wrap", "tabindex"]
+custom_attributes = ["text"]
+snippets_used = []
++++
+
+Read-only with prefilled text:
+
+```html
+{{* hackcss-textarea readonly="true" text="Only this and nothing more." */>}}
+```
+
+{{< hackcss-textarea readonly="true" text="Only this and nothing more." >}}
+
+With spellcheck disabled:
+
+```html
+{{* hackcss-textarea spellcheck="false" */>}}
+```
+
+{{< hackcss-textarea spellcheck="false" >}}
+
+With 16 columns and hard wrapping enabled:
+
+```html
+{{* hackcss-textarea cols="16" wrap="hard" */>}}
+```
+
+{{< hackcss-textarea cols="16" wrap="hard" >}}
+
+Inside disabled form group with error label and placeholder:
+
+```html
+{{* hackcss-formgroup hastextarea="true" disabled="true" state="error" >}}
+ {{< hackcss-label for="message" text="Message:" />}}
+ {{< hackcss-textarea id="message" placeholder="Guestbook offline…" rows="10" >}}
+{{< /hackcss-formgroup */>}}
+```
+
+{{< hackcss-formgroup hastextarea="true" disabled="true" state="error" >}}
+ {{< hackcss-label for="message" text="Message:" />}}
+ {{< hackcss-textarea id="message" placeholder="Guestbook offline…" rows="10" >}}
+{{< /hackcss-formgroup >}}
diff --git a/themes/after-dark/docs/content/shortcode/text-input.md b/themes/after-dark/docs/content/shortcode/text-input.md
new file mode 100644
index 0000000..3830092
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/text-input.md
@@ -0,0 +1,73 @@
++++
+title = "Text Input"
+description = "Add a single-line plain-text editing control."
+categories = ["experience"]
+tags = ["controls"]
+html_attributes = ["id", "name", "class", "autocomplete", "autofocus", "disabled", "form", "formaction", "formmethod", "formtarget", "height", "max", "maxlength", "min", "minlength", "multiple", "pattern", "placeholder", "readonly", "required", "size", "spellcheck", "step", "tabindex", "type", "value", "width"]
+custom_attributes = []
+snippets_used = ["text input", "label", "form group", "form", "help block"]
++++
+
+Basic usage:
+
+```html
+{{* hackcss-textinput */>}}
+{{* hackcss-textinput type="password" */>}}
+{{* hackcss-textinput type="email" placeholder="Please enter your email…" */>}}
+{{* hackcss-textinput disabled="true" placeholder="Disabled" */>}}
+```
+
+{{< hackcss-textinput >}}
+{{< hackcss-textinput type="password" >}}
+{{< hackcss-textinput type="email" placeholder="Please enter your email…" >}}
+{{< hackcss-textinput disabled="true" placeholder="Disabled" >}}
+
+With [Label](../label) and [Help Block](../help-block) in [Form](../form) with custom validation:
+
+```html
+{{* hackcss-form >}}
+ {{< hackcss-label >}}
+ {{< hackcss-helpblock text="Enter your Associate Tag:" />}}
+ {{< hackcss-textinput name="AssociateTag" required="true" pattern="^\b\w*\b-20$" placeholder="associate-20" >}}
+ {{< /hackcss-label >}}
+{{< /hackcss-form */>}}
+```
+
+{{< hackcss-form >}}
+ {{< hackcss-label >}}
+ {{< hackcss-helpblock text="Enter your Associate Tag:" />}}
+ {{< hackcss-textinput name="AssociateTag" required="true" pattern="^\b\w*\b-20$" placeholder="associate-20" >}}
+ {{< /hackcss-label >}}
+{{< /hackcss-form >}}
+
+In [Form Group](../form-group) with warning [Label](../label) and [Help Block](../help-block):
+
+```html
+{{* hackcss-formgroup state="warning" >}}
+ {{< hackcss-label for="key64" text="64-bit PGP key:" />}}
+ {{< hackcss-textinput type="text" id="key64" >}}
+ {{< hackcss-helpblock text="In this format: BB73 67EE 9A70 A631" />}}
+{{< /hackcss-formgroup */>}}
+```
+
+{{< hackcss-formgroup state="warning" >}}
+ {{< hackcss-label for="key64" text="64-bit PGP key:" />}}
+ {{< hackcss-textinput type="text" id="key64" >}}
+ {{< hackcss-helpblock text="In this format: BB73 67EE 9A70 A631" />}}
+{{< /hackcss-formgroup >}}
+
+Typed with [Label](../label) in [Form Group](../form-group) targeting [Form](../form) owner:
+
+```html
+{{* hackcss-form id="search" action="/search" /*/>}}
+{{* hackcss-formgroup >}}
+ {{< hackcss-label for="query" text="Search query:" />}}
+ {{< hackcss-textinput type="search" id="query" form="search" >}}
+{{< /hackcss-formgroup */>}}
+```
+
+{{< hackcss-form id="search" action="/search" />}}
+{{< hackcss-formgroup >}}
+ {{< hackcss-label for="query" text="Search query:" />}}
+ {{< hackcss-textinput type="search" id="query" name="s" form="search" >}}
+{{< /hackcss-formgroup >}}
diff --git a/themes/after-dark/docs/content/shortcode/throbber.md b/themes/after-dark/docs/content/shortcode/throbber.md
new file mode 100644
index 0000000..79e479b
--- /dev/null
+++ b/themes/after-dark/docs/content/shortcode/throbber.md
@@ -0,0 +1,31 @@
++++
+title = "Throbber"
+description = "Display a CSS-only loading indicator."
+categories = ["experience"]
+tags = []
+html_attributes = []
+custom_attributes = []
+snippets_used = ["throber", "button"]
++++
+
+Basic usage:
+
+```html
+{{* hackcss-throbber */>}}
+```
+
+{{< hackcss-throbber >}}
+
+Inside a [Button](../button):
+
+```html
+{{* hackcss-button isghost="true" type="info" >}}
+ Please wait… {{< hackcss-throbber >}}
+{{< /hackcss-button */>}}
+```
+
+{{< hackcss-button isghost="true" type="info" >}}
+ Please wait… {{< hackcss-throbber >}}
+{{< /hackcss-button >}}
+
+Customize by creating your own {{< external text="CSS-only loading" href="https://www.pexels.com/blog/css-only-loaders/" />}} indicator.
diff --git a/themes/after-dark/docs/content/validate.md b/themes/after-dark/docs/content/validate.md
new file mode 100644
index 0000000..f7fd2cd
--- /dev/null
+++ b/themes/after-dark/docs/content/validate.md
@@ -0,0 +1,78 @@
++++
+title = "Validate Release"
+description = "Complete the included form to validate the release."
+noindex = true
++++
+
+{{< hackcss-form name="validate" action="/validate/" >}}
+ {{< hackcss-formgroup name="integrity" >}}
+ {{< hackcss-label for="digest" >}}
+ SHA-512 Digest:
+ {{< /hackcss-label >}}
+ {{< hackcss-textinput
+ required="true"
+ autocomplete="off"
+ spellcheck="false"
+ type="text" id="digest" name="digest"
+ pattern="^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$"
+ placeholder="whUlqT0w6vfvTzd12LpU5kst/Cz3yt9j3ncIHcB4CDQFFiMVPlfX/I+vKl3Y98faqBLlgh6M4pyhiYzZNIPUPA=="
+ >}}
+ {{< hackcss-helpblock >}}
+ Submit with 7.2.1 Release Hash to validate.
+
+ {{< /hackcss-helpblock >}}
+ {{< /hackcss-formgroup >}}
+{{< /hackcss-form >}}
+
+Valid installations use the [Quick Install](/feature/quick-install) or [Upgrade Script](/feature/upgrade-script) and may be checked offline. See [Release Hashes](/feature/release-hashes) for a more thorough approach to validation.
+
+
diff --git a/themes/after-dark/docs/layouts/extra/list.html b/themes/after-dark/docs/layouts/extra/list.html
new file mode 100644
index 0000000..5c655bc
--- /dev/null
+++ b/themes/after-dark/docs/layouts/extra/list.html
@@ -0,0 +1,35 @@
+{{ define "header" }}
+ {{ partial "masthead.html" . }}
+{{ end }}
+{{ define "main" }}
+
{{ .Title }}
+ {{ if .Description }}
+ {{ .Description }}
+ {{ end }}
+
+
+
+
+{{ end }}
+{{ define "footer" }}
+ {{ partial "pagination.html" . }}
+ {{ partial "powered-by.html" . }}
+ {{ partial "cookie-disclaimer.html" . }}
+{{ end }}
diff --git a/themes/after-dark/docs/layouts/extra/single.html b/themes/after-dark/docs/layouts/extra/single.html
new file mode 100644
index 0000000..245853e
--- /dev/null
+++ b/themes/after-dark/docs/layouts/extra/single.html
@@ -0,0 +1,36 @@
+{{ define "title" -}}
+ {{ .Title }} | {{ .Site.Title }}
+{{- end }}
+{{ define "header" }}
+ {{ partial "masthead.html" . }}
+{{ end }}
+{{ define "main" }}
+
+
+
+
+
+
+ {{ .Title | singularize }}
+ Description
+ {{ .Title }}
+ {{ if .Description }}
+ {{ .Description }}
+ {{ end }}
+ {{ .Title }}
+ {{ if .Description }}
+ {{ .Description }}
+ {{ end }}
+ {{ . | title }}
+
+ {{ range where $.Paginator.Pages "Params.categories" "intersect" (slice .) }}
+
+ {{ .Title }}
+ {{ if .Description }}
+ {{ .Description }}
+ {{ end }}
+ {{ .Title }}v{{ .Site.Data.npm.latest.version }}
+ Semantic Design System for Hugo
+ {{ .Title }}
+ {{ if .Description }}
+ {{ .Description }}
+ {{ end }}
+
+
+
+{{ end }}
+{{ define "footer" }}
+ {{ partial "pagination.html" . }}
+ {{ partial "powered-by.html" . }}
+ {{ partial "cookie-disclaimer.html" . }}
+{{ end }}
diff --git a/themes/after-dark/docs/layouts/module/single.html b/themes/after-dark/docs/layouts/module/single.html
new file mode 100644
index 0000000..7b85fb5
--- /dev/null
+++ b/themes/after-dark/docs/layouts/module/single.html
@@ -0,0 +1,52 @@
+{{ define "title" -}}
+ {{ .Title }} | {{ .Site.Title }}
+{{- end }}
+{{ define "header" }}
+ {{ partial "masthead.html" . }}
+{{ end }}
+{{ define "main" }}
+
+
+
+
+
+
+ {{ .Title | singularize }}
+ Latest
+ Description
+ {{ .Title }}
+ {{ if .Description }}
+ {{ .Description }}
+ {{ end }}
+
+ {{ if eq . "toxic-swamp" }}
+
+ {{ end }}
+ {{ end }}
+ {{/* TODO: Allow schema specification by type */}}
+ {{/* {{ template "_internal/schema.html" . }} */}}
+ {{ .Content }}
+
+{{ end }}
+{{ define "footer" }}
+ {{ partial "powered-by.html" . }}
+ {{ partial "cookie-disclaimer.html" . }}
+ {{ if in .Page.RelPermalink "toxic-swamp" }}
+ {{ if eq .Params.slug "toxic-swamp" }}
+ {{ $config_generator := resources.Get "/js/config-generator.js" }}
+
+ {{ else if in .Page.RelPermalink "configuration" }}
+ {{ $configuration := resources.Get "/js/configuration.js" }}
+
+ {{ end }}
+ {{ end }}
+{{ end }}
diff --git a/themes/after-dark/docs/layouts/partials/category-link.html b/themes/after-dark/docs/layouts/partials/category-link.html
new file mode 100644
index 0000000..ab7ec3f
--- /dev/null
+++ b/themes/after-dark/docs/layouts/partials/category-link.html
@@ -0,0 +1 @@
+{{ . | title }}
diff --git a/themes/after-dark/docs/layouts/partials/definition-data.html b/themes/after-dark/docs/layouts/partials/definition-data.html
new file mode 100644
index 0000000..dd606aa
--- /dev/null
+++ b/themes/after-dark/docs/layouts/partials/definition-data.html
@@ -0,0 +1 @@
+
{{ . -}}
diff --git a/themes/after-dark/docs/layouts/partials/feature-link.html b/themes/after-dark/docs/layouts/partials/feature-link.html
new file mode 100644
index 0000000..c28f0f7
--- /dev/null
+++ b/themes/after-dark/docs/layouts/partials/feature-link.html
@@ -0,0 +1 @@
+{{ . | title }}
diff --git a/themes/after-dark/docs/layouts/partials/feature/category-link.html b/themes/after-dark/docs/layouts/partials/feature/category-link.html
new file mode 100644
index 0000000..0d70316
--- /dev/null
+++ b/themes/after-dark/docs/layouts/partials/feature/category-link.html
@@ -0,0 +1 @@
+{{ . | title }}
diff --git a/themes/after-dark/docs/layouts/partials/masthead.html b/themes/after-dark/docs/layouts/partials/masthead.html
new file mode 100644
index 0000000..86fe796
--- /dev/null
+++ b/themes/after-dark/docs/layouts/partials/masthead.html
@@ -0,0 +1,30 @@
+{{ $is_section_menu_enabled := ne .Site.Params.show_menu false }}
+{{ range $name, $entries := .Site.Menus }}
+ {{ if or (ne $name "main") (and (eq $name "main") $is_section_menu_enabled) }}
+ {{ with $.Site.Params.layout.menu }}
+ {{ $settings := (index . $name) | default dict }}
+ {{ partial "components/navmenu.html" (dict "name" $name "entries" $entries "settings" $settings "page" $)}}
+ {{ else }}
+ {{ partial "components/navmenu.html" (dict "name" $name "entries" $entries "settings" dict "page" $)}}
+ {{ end }}
+ {{ end }}
+{{ end }}
+
diff --git a/themes/after-dark/docs/layouts/partials/module-latest.html b/themes/after-dark/docs/layouts/partials/module-latest.html
new file mode 100644
index 0000000..659f5fc
--- /dev/null
+++ b/themes/after-dark/docs/layouts/partials/module-latest.html
@@ -0,0 +1 @@
+
diff --git a/themes/after-dark/docs/layouts/partials/module-link.html b/themes/after-dark/docs/layouts/partials/module-link.html
new file mode 100644
index 0000000..8b8b67f
--- /dev/null
+++ b/themes/after-dark/docs/layouts/partials/module-link.html
@@ -0,0 +1 @@
+{{ . | title }}
diff --git a/themes/after-dark/docs/layouts/partials/shortcode-link.html b/themes/after-dark/docs/layouts/partials/shortcode-link.html
new file mode 100644
index 0000000..b43b558
--- /dev/null
+++ b/themes/after-dark/docs/layouts/partials/shortcode-link.html
@@ -0,0 +1 @@
+{{ . | title }}
diff --git a/themes/after-dark/docs/layouts/shortcode/list.html b/themes/after-dark/docs/layouts/shortcode/list.html
new file mode 100644
index 0000000..89653da
--- /dev/null
+++ b/themes/after-dark/docs/layouts/shortcode/list.html
@@ -0,0 +1,36 @@
+{{ define "header" }}
+ {{ partial "masthead.html" . }}
+{{ end }}
+{{ define "main" }}
+
{{ .Title }}
+ {{ if .Description }}
+ {{ .Description }}
+ {{ end }}
+
+
+
+
+
+
+
+
+ {{ .Title | singularize }}
+ Description
+ {{ .Title }}
+ {{ if .Description }}
+ {{ .Description }}
+ {{ end }}
+ 404
+
+ {{ .Title }}
+ {{ .Title }}
+ {{ .Title }}
+ {{ .Title }}
+ {{ .Title }}
+
+ {{ range $key, $value := .Data.Terms }}
+
+{{ end }}
+{{ define "footer" }}
+ {{ partial "powered-by.html" . }}
+ {{ partial "cookie-disclaimer.html" . }}
+{{ end }}
diff --git a/themes/after-dark/layouts/index.html b/themes/after-dark/layouts/index.html
new file mode 100644
index 0000000..edcfc75
--- /dev/null
+++ b/themes/after-dark/layouts/index.html
@@ -0,0 +1,19 @@
+{{ define "title" -}}
+ {{ .Site.Title }}
+{{- end }}
+{{ define "header" }}
+ {{ partial "masthead.html" . }}
+{{ end }}
+{{ define "main" }}
+ {{ .Title }}
+
+
+
+ This site does not use
+
+ cookies.
+
+{{ end }}
diff --git a/themes/after-dark/layouts/partials/global-styles.html b/themes/after-dark/layouts/partials/global-styles.html
new file mode 100644
index 0000000..daf2fef
--- /dev/null
+++ b/themes/after-dark/layouts/partials/global-styles.html
@@ -0,0 +1,53 @@
+{{ $custom := resources.Get "css/custom.css" }}
+{{ if eq .Site.Params.hackcss.disabled true }}
+ {{ with (slice $custom | resources.Concat "styles.css").Content }}
+ {{ if gt (len .) 0 }}
+
+ {{ partial "meta/theme-color.html" . }}
+ {{ end }}
+ {{ end }}
+{{ else }}
+ {{ $hack := resources.Get "css/vendor/hack/hack.css" }}
+ {{ $standard := resources.Get "css/vendor/hack/standard.css" }}
+ {{ $dark := resources.Get "css/vendor/hack/dark.css" }}
+ {{ $darkgrey := resources.Get "css/vendor/hack/dark-grey.css" }}
+ {{ $solarizeddark := resources.Get "css/vendor/hack/solarized-dark.css" }}
+ {{ $theme := resources.Get "css/theme.css" | minify }}
+ {{ if eq .Site.Params.hackcss.palette "dark-grey" }}
+ {{ if eq .Site.Params.hackcss.mode "standard" }}
+ {{ with (slice $hack $standard $darkgrey $theme $custom | resources.Concat "styles.css").Content }}
+
+ {{ partial "meta/theme-color.html" . }}
+ {{ end }}
+ {{ else }}
+ {{ with (slice $hack $darkgrey $theme $custom | resources.Concat "styles.css").Content }}
+
+ {{ partial "meta/theme-color.html" . }}
+ {{ end }}
+ {{ end }}
+ {{ else if eq .Site.Params.hackcss.palette "solarized-dark" }}
+ {{ if eq .Site.Params.hackcss.mode "standard" }}
+ {{ with (slice $hack $standard $solarizeddark $theme $custom | resources.Concat "styles.css").Content }}
+
+ {{ partial "meta/theme-color.html" . }}
+ {{ end }}
+ {{ else }}
+ {{ with (slice $hack $solarizeddark $theme $custom | resources.Concat "styles.css").Content }}
+
+ {{ partial "meta/theme-color.html" . }}
+ {{ end }}
+ {{ end }}
+ {{ else }}
+ {{ if eq .Site.Params.hackcss.mode "standard" }}
+ {{ with (slice $hack $standard $dark $theme $custom | resources.Concat "styles.css").Content }}
+
+ {{ partial "meta/theme-color.html" . }}
+ {{ end }}
+ {{ else }}
+ {{ with (slice $hack $dark $theme $custom | resources.Concat "styles.css").Content }}
+
+ {{ partial "meta/theme-color.html" . }}
+ {{ end }}
+ {{ end }}
+ {{ end }}
+{{ end }}
diff --git a/themes/after-dark/layouts/partials/head/favicon.html b/themes/after-dark/layouts/partials/head/favicon.html
new file mode 100644
index 0000000..0769b90
--- /dev/null
+++ b/themes/after-dark/layouts/partials/head/favicon.html
@@ -0,0 +1 @@
+
diff --git a/themes/after-dark/layouts/partials/head/modules.html b/themes/after-dark/layouts/partials/head/modules.html
new file mode 100644
index 0000000..cea17b4
--- /dev/null
+++ b/themes/after-dark/layouts/partials/head/modules.html
@@ -0,0 +1,16 @@
+{{ $defaults := .Site.Params.defaults.modules }}
+{{ $modules := .Site.Params.modules }}
+{{ if (or $modules $defaults) }}
+ {{ with $modules.fractal_forest }}
+ {{ partial "modules/fractal-forest/index.html" . }}
+ {{ end }}
+ {{ with $modules.hall_of_mirrors }}
+ {{ partial "modules/hall-of-mirrors/index.html" (dict "settings" . "page" $.Page) }}
+ {{ end }}
+ {{ with (default $defaults.toxic_swamp $modules.toxic_swamp) }}
+ {{ partial "modules/toxic-swamp/index.html" (dict "settings" . "data" $.Site.Data) }}
+ {{ end }}
+ {{ with $modules.voyeur }}
+ {{ partial "modules/voyeur/index.html" . }}
+ {{ end }}
+{{ end }}
diff --git a/themes/after-dark/layouts/partials/masthead.html b/themes/after-dark/layouts/partials/masthead.html
new file mode 100644
index 0000000..e611e7c
--- /dev/null
+++ b/themes/after-dark/layouts/partials/masthead.html
@@ -0,0 +1,11 @@
+{{ $is_section_menu_enabled := ne .Site.Params.show_menu false }}
+{{ range $name, $entries := .Site.Menus }}
+ {{ if or (ne $name "main") (and (eq $name "main") $is_section_menu_enabled) }}
+ {{ with $.Site.Params.layout.menu }}
+ {{ $settings := (index . $name) | default dict }}
+ {{ partial "components/navmenu.html" (dict "name" $name "entries" $entries "settings" $settings "page" $)}}
+ {{ else }}
+ {{ partial "components/navmenu.html" (dict "name" $name "entries" $entries "settings" dict "page" $)}}
+ {{ end }}
+ {{ end }}
+{{ end }}
diff --git a/themes/after-dark/layouts/partials/meta/content-security-policy.html b/themes/after-dark/layouts/partials/meta/content-security-policy.html
new file mode 100644
index 0000000..8758949
--- /dev/null
+++ b/themes/after-dark/layouts/partials/meta/content-security-policy.html
@@ -0,0 +1,38 @@
+{{ $is_disabled := .Param "disable_csp" }}
+{{ $site_directives := .Site.Params.security.csp.directives }}
+{{ if and $site_directives (ne $is_disabled true) }}
+ {{ if ge (len $site_directives) 1 }}
+
+ {{ end }}
+{{ else if not $is_disabled }}
+
+{{ end }}
diff --git a/themes/after-dark/layouts/partials/meta/http-referrer.html b/themes/after-dark/layouts/partials/meta/http-referrer.html
new file mode 100644
index 0000000..eefdef0
--- /dev/null
+++ b/themes/after-dark/layouts/partials/meta/http-referrer.html
@@ -0,0 +1,5 @@
+{{ with .Site.Params.seo.referrer }}
+
+{{ else }}
+
+{{ end }}
diff --git a/themes/after-dark/layouts/partials/meta/ogimage-maybe.html b/themes/after-dark/layouts/partials/meta/ogimage-maybe.html
new file mode 100644
index 0000000..e5865e1
--- /dev/null
+++ b/themes/after-dark/layouts/partials/meta/ogimage-maybe.html
@@ -0,0 +1,13 @@
+
+{{ if and (.IsNode) (.Site.Params.images) }}
+
+{{ end }}
+
+{{ if and (.IsPage) (not .Params.images) (.Site.Params.images) }}
+
+{{ end }}
diff --git a/themes/after-dark/layouts/partials/meta/telegram-channel-maybe.html b/themes/after-dark/layouts/partials/meta/telegram-channel-maybe.html
new file mode 100644
index 0000000..b7dd080
--- /dev/null
+++ b/themes/after-dark/layouts/partials/meta/telegram-channel-maybe.html
@@ -0,0 +1,3 @@
+{{ with .Site.Params.seo.telegram_channel }}
+
+{{ end }}
diff --git a/themes/after-dark/layouts/partials/meta/theme-color.html b/themes/after-dark/layouts/partials/meta/theme-color.html
new file mode 100644
index 0000000..b58af05
--- /dev/null
+++ b/themes/after-dark/layouts/partials/meta/theme-color.html
@@ -0,0 +1,9 @@
+{{ $cssvar := "--trim-color:\\s*([^!;}]*).*" }}
+{{ $hackbg := "pre{background-color:([^!;}]*).*" }}
+{{ with index (findRE $cssvar . 1) 0 }}
+
+{{ else }}
+ {{ with index (findRE $hackbg . 1) 0 }}
+
+ {{ end }}
+{{ end }}
diff --git a/themes/after-dark/layouts/partials/meta/verifications.html b/themes/after-dark/layouts/partials/meta/verifications.html
new file mode 100644
index 0000000..4abbd7c
--- /dev/null
+++ b/themes/after-dark/layouts/partials/meta/verifications.html
@@ -0,0 +1,12 @@
+{{ with .Site.Params.seo.webmaster_verifications.google }}
+
+{{ end }}
+{{ with .Site.Params.seo.webmaster_verifications.bing }}
+
+{{ end }}
+{{ with .Site.Params.seo.webmaster_verifications.alexa }}
+
+{{ end }}
+{{ with .Site.Params.seo.webmaster_verifications.yandex }}
+
+{{ end }}
diff --git a/themes/after-dark/layouts/partials/page-summary.html b/themes/after-dark/layouts/partials/page-summary.html
new file mode 100644
index 0000000..267bd4a
--- /dev/null
+++ b/themes/after-dark/layouts/partials/page-summary.html
@@ -0,0 +1,27 @@
+
+ {{ .Title }}
+
+ {{ if eq .Type "post" }}
+ {{ .Description }}
+ {{ end }}
+ Table of Contents
+ {{ .TableOfContents }}
+ {{ .Title }}
+ {{ .Description }}
+ {{ end }}
+ {{ with $.Resources.GetMatch "header" }}
+ {{ $meta_sameas := .Params.meta.sameas }}
+ {{ $meta_license := .Params.meta.license }}
+ {{ $meta_creator := .Params.meta.creator }}
+ {{ $meta_description := .Params.meta.description }}
+ {{ $meta_keywords := .Params.meta.keywords }}
+ {{ $meta_contentlocation := .Params.meta.contentlocation }}
+ {{ $image600 := .Fill "600x338 q60 Center" }}
+ {{ $image900 := .Fill "900x506 q70 Center" }}
+ {{ $image1200 := .Fill "1200x675 q80 Center" }}
+ {{ $image1600 := .Fill "1600x900 q90 Center" }}
+
+ {{ end }}
+
+
diff --git a/themes/after-dark/layouts/shortcodes/external.html b/themes/after-dark/layouts/shortcodes/external.html
new file mode 100644
index 0000000..fec4c7e
--- /dev/null
+++ b/themes/after-dark/layouts/shortcodes/external.html
@@ -0,0 +1,19 @@
+{{ $href := .Get "href" | default nil -}}
+{{ $body := .Get "text" | default .Inner -}}
+{{ $class := .Get "class" -}}
+{{ $referrerpolicy := .Get "referrerpolicy" -}}
+{{ $target := .Get "target" -}}
+{{ $title := .Get "title" -}}
+{{ $type := .Get "type" -}}
+{{ $rel := .Get "rel" -}}
+{{ $itemtype := .Get "itemtype" -}}
+{{- if .IsNamedParams -}}
+ {{ partial "components/external.html" (dict "href" $href "body" $body "class" $class "referrerpolicy" $referrerpolicy "target" $target "type" $type "title" $title "rel" $rel "itemtype" $itemtype "suppress_external" (and .Inner (eq (len (findRE "external" $rel)) 0))) }}
+{{- else if gt (len .Params) 1 -}}
+ {{ partial "components/external.html" (dict "href" (.Get 0) "body" (.Get 1)) }}
+{{- else -}}
+ {{ partial "components/external.html" (dict "href" (.Get 0)) }}
+{{- end -}}
+{{- if or (and .IsNamedParams (eq $href nil)) (and (eq .IsNamedParams false) (eq (.Get 0) nil)) }}
+
+ {{ else }}
+
+ {{ end }}
+ {{ if $link }}{{ end }}
+ {{ if or (or $title $caption) $attr }}
+
-1"+("true"===d?":("+l+")":":_q("+l+","+d+")")),Ar(c,"change","var $$a="+l+",$$el=$event.target,$$c=$$el.checked?("+d+"):("+v+");if(Array.isArray($$a)){var $$v="+(f?"_n("+p+")":p)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Er(l,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Er(l,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Er(l,"$$c")+"}",null,!0);else if("input"===$&&"radio"===w)r=e,i=_,a=(o=b)&&o.number,s=Or(r,"value")||"null",Cr(r,"checked","_q("+i+","+(s=a?"_n("+s+")":s)+")"),Ar(r,"change",Er(i,s),null,!0);else if("input"===$||"textarea"===$)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,l=o?"change":"range"===r?Pr:"input",u="$event.target.value";s&&(u="$event.target.value.trim()"),a&&(u="_n("+u+")");var f=Er(t,u);c&&(f="if($event.target.composing)return;"+f),Cr(e,"value","("+t+")"),Ar(e,l,f,null,!0),(s||a)&&Ar(e,"blur","$forceUpdate()")}(e,_,b);else if(!j.isReservedTag($))return Tr(e,_,b),!1;return!0},text:function(e,t){t.value&&Cr(e,"textContent","_s("+t.value+")")},html:function(e,t){t.value&&Cr(e,"innerHTML","_s("+t.value+")")}},isPreTag:function(e){return"pre"===e},isUnaryTag:to,mustUseProp:Sn,canBeLeftOpenTag:no,isReservedTag:Un,getTagNamespace:Vn,staticKeys:(Go=Wo,Go.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(","))},Qo=e(function(e){return s("type,tag,attrsList,attrsMap,plain,parent,children,attrs"+(e?","+e:""))});function ea(e,t){e&&(Zo=Qo(t.staticKeys||""),Xo=t.isReservedTag||O,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||c(e.tag)||!Xo(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(Zo)))}(t);if(1===t.type){if(!Xo(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,r=t.children.length;n>1]|0)+h|0;b[d+((R(g,M)|0)<<1)>>1]=(C&t|0)==0?C:0-C>>31&u;g=g+1|0}while((g|0)!=(l|0));w=1}else w=1}else w=0;if(c[j+8>>2]|0){v=b[z>>1]|0;g=k+-1|0;if((l|0)>0){u=1<
>1]|0)+v|0;b[d+((R(h,M)|0)+g<<1)>>1]=(C&t|0)==0?C:0-C>>31&u;h=h+1|0}while((h|0)!=(l|0))}}else g=k;if(!D){C=g;x=0;B=0}else{y=w;A=11}}else{g=k;y=0;A=11}if((A|0)==11){if(c[j+4>>2]|0){t=b[z>>1]|0;if((y|0)<(g|0)){v=1<
>1]|0)+t|0;b[d+(h<<1)>>1]=(C&u|0)==0?C:0-C>>31&v;h=h+1|0}while((h|0)!=(g|0));x=1}else x=1}else x=0;if(c[j+12>>2]|0){w=b[z>>1]|0;l=l+-1|0;u=R(l,M)|0;v=R(l,K)|0;if((y|0)<(g|0)){t=1<
>1]|0)+w|0;b[d+(h+u<<1)>>1]=(C&k|0)==0?C:0-C>>31&t;h=h+1|0}while((h|0)!=(g|0));C=g;w=y;B=1}else{C=g;w=y;B=1}}else{C=g;w=y;B=1}}dd(d,f,M,K,i,C,l,m,w,x,q);i=(D|0)==2;if(!(i&(a[p>>0]|0)==0)){h=p+1|0;g=(D|0)==3;if(g&(a[h>>0]|0)==0)if(!(c[j+4>>2]|0)){t=(c[j+8>>2]|0)==0;q=1;k=0;A=h}else{t=0;q=1;k=0;A=h}else{t=0;q=g;k=0;A=h}}else{if(!(c[j>>2]|0))g=(c[j+4>>2]|0)==0;else g=0;t=0;q=0;k=g&1;A=p+1|0}u=t&1;z=p+2|0;if(i&(a[z>>0]|0)==0?(c[j+8>>2]|0)==0:0)g=(c[j+12>>2]|0)==0;else g=0;v=g&1;y=p+3|0;if(q&(a[y>>0]|0)==0?(c[j>>2]|0)==0:0)g=(c[j+12>>2]|0)==0;else g=0;t=g&1;if(E&(a[n>>0]|0)!=0?(F=k+x|0,G=l-t|0,(F|0)<(G|0)):0){g=F;do{b[d+((R(g,M)|0)<<1)>>1]=b[f+((R(g,K)|0)<<1)>>1]|0;g=g+1|0}while((g|0)!=(G|0))}if(E&(a[n+1>>0]|0)!=0?(H=u+x|0,I=l-v|0,(H|0)<(I|0)):0){h=C+-1|0;g=H;do{b[d+(h+(R(g,M)|0)<<1)>>1]=b[f+(h+(R(g,K)|0)<<1)>>1]|0;g=g+1|0}while((g|0)!=(I|0))}if(B&(a[o>>0]|0)!=0?(s=k+w|0,J=C-u|0,(s|0)<(J|0)):0)do{b[d+(s<<1)>>1]=b[f+(s<<1)>>1]|0;s=s+1|0}while((s|0)!=(J|0));if(B&(a[o+1>>0]|0)!=0?(r=t+w|0,L=C-v|0,(r|0)<(L|0)):0){g=l+-1|0;s=R(g,K)|0;g=R(g,M)|0;do{b[d+(r+g<<1)>>1]=b[f+(r+s<<1)>>1]|0;r=r+1|0}while((r|0)!=(L|0))}if(i&(a[p>>0]|0)!=0)b[d>>1]=b[f>>1]|0;s=C+-1|0;if(q&(a[A>>0]|0)!=0)b[d+(s<<1)>>1]=b[f+(s<<1)>>1]|0;r=l+-1|0;if(i&(a[z>>0]|0)!=0)b[d+(s+(R(r,M)|0)<<1)>>1]=b[f+(s+(R(r,K)|0)<<1)>>1]|0;if(q&(a[y>>0]|0)!=0){d=d+((R(r,M)|0)<<1)|0;b[d>>1]=b[f+((R(r,K)|0)<<1)>>1]|0}return}function Zc(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;cd(a,b,2,c,d,e,f,g);return}function _c(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;cd(a,2,b,c,d,e,f,g);return}function $c(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;bd(a,b,2,c,d,e,f);return}function ad(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;bd(a,2,b,c,d,e,f);return}function bd(d,f,g,h,i,j,k){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=f>>>1;y=g>>>1;z=k+-8|0;v=y<<2;w=R(A,-2)|0;x=0-A|0;u=1<