mirror of
https://github.com/bspeice/speice.io
synced 2024-11-14 22:18:10 -05:00
Revert
This commit is contained in:
parent
5f71b62dc8
commit
4121dcb334
15
.travis.yml
Normal file
15
.travis.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
language: ruby
|
||||||
|
rvm:
|
||||||
|
- 2.3.3
|
||||||
|
|
||||||
|
install:
|
||||||
|
- bundle install
|
||||||
|
script:
|
||||||
|
- bundle exec jekyll build
|
||||||
|
- rake check
|
||||||
|
|
||||||
|
env:
|
||||||
|
global:
|
||||||
|
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer
|
||||||
|
|
||||||
|
sudo: false # route your build to the container-based infrastructure for a faster build
|
24
404.html
24
404.html
@ -1,24 +0,0 @@
|
|||||||
---
|
|
||||||
layout: page
|
|
||||||
---
|
|
||||||
|
|
||||||
<style type="text/css" media="screen">
|
|
||||||
.container {
|
|
||||||
margin: 10px auto;
|
|
||||||
max-width: 600px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
margin: 30px 0;
|
|
||||||
font-size: 4em;
|
|
||||||
line-height: 1;
|
|
||||||
letter-spacing: -1px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<div class="container">
|
|
||||||
<h1>404</h1>
|
|
||||||
|
|
||||||
<p><strong>Page not found :(</strong></p>
|
|
||||||
<p>The requested page could not be found.</p>
|
|
||||||
</div>
|
|
7
404.md
Normal file
7
404.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
layout: content
|
||||||
|
title: "404: Page not found"
|
||||||
|
---
|
||||||
|
|
||||||
|
Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. <a href="{{ site.baseurl }}/">Head back home</a> to try finding it again.
|
||||||
|
|
28
Gemfile
28
Gemfile
@ -1,28 +1,10 @@
|
|||||||
source "https://rubygems.org"
|
source "https://rubygems.org"
|
||||||
|
|
||||||
# Hello! This is where you manage which Jekyll version is used to run.
|
gem "jekyll", "3.4.3"
|
||||||
# When you want to use a different version, change it below, save the
|
gem "html-proofer"
|
||||||
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
|
gem "rb-fsevent", "0.9.8"
|
||||||
#
|
gem "jgd", "1.11"
|
||||||
# bundle exec jekyll serve
|
|
||||||
#
|
|
||||||
# This will help ensure the proper Jekyll version is running.
|
|
||||||
# Happy Jekylling!
|
|
||||||
gem "jekyll", "~> 3.8.3"
|
|
||||||
|
|
||||||
gem "texture"
|
|
||||||
|
|
||||||
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
|
|
||||||
# uncomment the line below. To upgrade, run `bundle update github-pages`.
|
|
||||||
# gem "github-pages", group: :jekyll_plugins
|
|
||||||
|
|
||||||
# If you have any plugins, put them here!
|
|
||||||
group :jekyll_plugins do
|
group :jekyll_plugins do
|
||||||
gem "jekyll-feed", "~> 0.6"
|
gem 'jekyll-livereload'
|
||||||
end
|
end
|
||||||
|
|
||||||
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
|
||||||
gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]
|
|
||||||
|
|
||||||
# Performance-booster for watching directories on Windows
|
|
||||||
gem "wdm", "~> 0.1.0" if Gem.win_platform?
|
|
||||||
|
90
Gemfile.lock
90
Gemfile.lock
@ -4,68 +4,84 @@ GEM
|
|||||||
addressable (2.7.0)
|
addressable (2.7.0)
|
||||||
public_suffix (>= 2.0.2, < 5.0)
|
public_suffix (>= 2.0.2, < 5.0)
|
||||||
colorator (1.1.0)
|
colorator (1.1.0)
|
||||||
concurrent-ruby (1.1.6)
|
|
||||||
em-websocket (0.5.1)
|
em-websocket (0.5.1)
|
||||||
eventmachine (>= 0.12.9)
|
eventmachine (>= 0.12.9)
|
||||||
http_parser.rb (~> 0.6.0)
|
http_parser.rb (~> 0.6.0)
|
||||||
eventmachine (1.2.7)
|
ethon (0.12.0)
|
||||||
ffi (1.12.2)
|
ffi (>= 1.3.0)
|
||||||
|
eventmachine (1.2.5)
|
||||||
|
ffi (1.11.3)
|
||||||
forwardable-extended (2.6.0)
|
forwardable-extended (2.6.0)
|
||||||
|
html-proofer (3.14.1)
|
||||||
|
addressable (~> 2.3)
|
||||||
|
mercenary (~> 0.3)
|
||||||
|
nokogiri (~> 1.10)
|
||||||
|
parallel (~> 1.3)
|
||||||
|
rainbow (~> 3.0)
|
||||||
|
typhoeus (~> 1.3)
|
||||||
|
yell (~> 2.0)
|
||||||
http_parser.rb (0.6.0)
|
http_parser.rb (0.6.0)
|
||||||
i18n (0.9.5)
|
jekyll (3.4.3)
|
||||||
concurrent-ruby (~> 1.0)
|
|
||||||
jekyll (3.8.6)
|
|
||||||
addressable (~> 2.4)
|
addressable (~> 2.4)
|
||||||
colorator (~> 1.0)
|
colorator (~> 1.0)
|
||||||
em-websocket (~> 0.5)
|
|
||||||
i18n (~> 0.7)
|
|
||||||
jekyll-sass-converter (~> 1.0)
|
jekyll-sass-converter (~> 1.0)
|
||||||
jekyll-watch (~> 2.0)
|
jekyll-watch (~> 1.1)
|
||||||
kramdown (~> 1.14)
|
kramdown (~> 1.3)
|
||||||
liquid (~> 4.0)
|
liquid (~> 3.0)
|
||||||
mercenary (~> 0.3.3)
|
mercenary (~> 0.3.3)
|
||||||
pathutil (~> 0.9)
|
pathutil (~> 0.9)
|
||||||
rouge (>= 1.7, < 4)
|
rouge (~> 1.7)
|
||||||
safe_yaml (~> 1.0)
|
safe_yaml (~> 1.0)
|
||||||
jekyll-feed (0.13.0)
|
jekyll-livereload (0.2.2)
|
||||||
jekyll (>= 3.7, < 5.0)
|
em-websocket (~> 0.5)
|
||||||
|
jekyll (~> 3.0)
|
||||||
jekyll-sass-converter (1.5.2)
|
jekyll-sass-converter (1.5.2)
|
||||||
sass (~> 3.4)
|
sass (~> 3.4)
|
||||||
jekyll-seo-tag (2.6.1)
|
jekyll-watch (1.5.1)
|
||||||
jekyll (>= 3.3, < 5.0)
|
|
||||||
jekyll-watch (2.2.1)
|
|
||||||
listen (~> 3.0)
|
listen (~> 3.0)
|
||||||
kramdown (1.17.0)
|
jgd (1.11)
|
||||||
liquid (4.0.3)
|
jekyll (>= 1.5.1)
|
||||||
listen (3.2.1)
|
trollop (= 2.1.2)
|
||||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
kramdown (1.16.2)
|
||||||
rb-inotify (~> 0.9, >= 0.9.10)
|
liquid (3.0.6)
|
||||||
|
listen (3.1.5)
|
||||||
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||||
|
rb-inotify (~> 0.9, >= 0.9.7)
|
||||||
|
ruby_dep (~> 1.2)
|
||||||
mercenary (0.3.6)
|
mercenary (0.3.6)
|
||||||
pathutil (0.16.2)
|
mini_portile2 (2.4.0)
|
||||||
|
nokogiri (1.10.5)
|
||||||
|
mini_portile2 (~> 2.4.0)
|
||||||
|
parallel (1.19.1)
|
||||||
|
pathutil (0.16.1)
|
||||||
forwardable-extended (~> 2.6)
|
forwardable-extended (~> 2.6)
|
||||||
public_suffix (4.0.4)
|
public_suffix (4.0.1)
|
||||||
rb-fsevent (0.10.3)
|
rainbow (3.0.0)
|
||||||
rb-inotify (0.10.1)
|
rb-fsevent (0.9.8)
|
||||||
ffi (~> 1.0)
|
rb-inotify (0.9.10)
|
||||||
rouge (3.17.0)
|
ffi (>= 0.5.0, < 2)
|
||||||
safe_yaml (1.0.5)
|
rouge (1.11.1)
|
||||||
sass (3.7.4)
|
ruby_dep (1.5.0)
|
||||||
|
safe_yaml (1.0.4)
|
||||||
|
sass (3.5.5)
|
||||||
sass-listen (~> 4.0.0)
|
sass-listen (~> 4.0.0)
|
||||||
sass-listen (4.0.0)
|
sass-listen (4.0.0)
|
||||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||||
rb-inotify (~> 0.9, >= 0.9.7)
|
rb-inotify (~> 0.9, >= 0.9.7)
|
||||||
texture (0.3)
|
trollop (2.1.2)
|
||||||
jekyll (~> 3.7)
|
typhoeus (1.3.1)
|
||||||
jekyll-seo-tag (~> 2.1)
|
ethon (>= 0.9.0)
|
||||||
|
yell (2.2.0)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
jekyll (~> 3.8.3)
|
html-proofer
|
||||||
jekyll-feed (~> 0.6)
|
jekyll (= 3.4.3)
|
||||||
texture
|
jekyll-livereload
|
||||||
tzinfo-data
|
jgd (= 1.11)
|
||||||
|
rb-fsevent (= 0.9.8)
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
1.17.3
|
1.17.3
|
||||||
|
22
LICENSE
Normal file
22
LICENSE
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2017 Mike JS. Choi
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
63
README.md
Normal file
63
README.md
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<p align="center">
|
||||||
|
<img src="./assets/paper-cover-photo.png">
|
||||||
|
<p align="center">
|
||||||
|
A minimalistic Jekyll Theme
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<a href="https://travis-ci.org/mkchoi212/paper-jekyll-theme"><img src="https://travis-ci.org/mkchoi212/paper-jekyll-theme.svg?branch=master"></a>
|
||||||
|
<a href="https://raw.githubusercontent.com/mkchoi212/paper-jekyll-theme/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg"></a>
|
||||||
|
</p>
|
||||||
|
</p>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
Paper is a minimal Jekyll theme. Perfect for hosting your personal site, blog, or portfolio on GitHub or self-hosting on your own server. The styling is purposely minimalistic so that you can add your own flare to the website.
|
||||||
|
|
||||||
|
Live demo of the theme can be seen [here](https://deadbeef.me/paper-jekyll-theme/). I'm also currently using this theme on my [personal blog](https://www.deadbeef.me).
|
||||||
|
|
||||||
|
## Features
|
||||||
|
- Compatible with Jekyll 3.x and **Github Pages**
|
||||||
|
- Live local reloading for faster development
|
||||||
|
- **Responsive layout** built-in
|
||||||
|
- Supports Jekyll's built-in Sass/SCSS preprocessor
|
||||||
|
- Supports **Google Analytics**
|
||||||
|
- Supports **Disqus** for commenting
|
||||||
|
- Minimum Dependencies
|
||||||
|
- Rakefile for automation
|
||||||
|
- `rake check` - Check links/html files of the generated site
|
||||||
|
- `rake clean` - Clean up generated site
|
||||||
|
- `rake post` - Begin a new post in `./_posts`
|
||||||
|
- `rake preview` - Preview with livereload on local machine
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
```
|
||||||
|
git clone https://github.com/mkchoi212/paper-jekyll-theme.git
|
||||||
|
bundle install
|
||||||
|
rake preview
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, go to your favorite brower and type in the address `http://127.0.0.1:YOUR_PORT_NUM_HERE` to preview your website.
|
||||||
|
|
||||||
|
### Customization
|
||||||
|
To customize various details - title/description of the website, your SNS accout names, etc - edit the `_config.yml` file.
|
||||||
|
|
||||||
|
### Adding posts
|
||||||
|
```
|
||||||
|
rake post title="A Title" [date="2012-02-09"] [tags=[tag1,tag2]] [category="category"]
|
||||||
|
```
|
||||||
|
This will create a markdown file in the default folder where all posts are stored in Jekyll; `_post`.
|
||||||
|
|
||||||
|
If you wish to **change the directory where posts are saved**, go to the `Rakefile` and edit the `CONFIG = { 'posts': CUSTOM_PATH_HERE }`. This will allow `rake post` to know where to save the new posts to.
|
||||||
|
|
||||||
|
The **drafts** you are working on can be saved in the `_drafts` directory. When you push your code to the server, files in this directory will NOT be included to the list o posts.
|
||||||
|
|
||||||
|
# License
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2017 Mike JS. Choi
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
118
Rakefile
Normal file
118
Rakefile
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
|
||||||
|
#
|
||||||
|
## Customize post location and post extensions
|
||||||
|
#
|
||||||
|
|
||||||
|
baseurl = `cat ./_config.yml | awk '/baseurl/ { print $2 }' | sed 's/\"//g'`
|
||||||
|
|
||||||
|
SOURCE = "."
|
||||||
|
CONFIG = {
|
||||||
|
'posts' => File.join(SOURCE, "_posts"),
|
||||||
|
'post_ext' => "md",
|
||||||
|
'theme_package_version' => "0.1.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
## Color console outout support just because :D
|
||||||
|
#
|
||||||
|
module Colors
|
||||||
|
def colorize(text, color_code)
|
||||||
|
"\033[#{color_code}m#{text}\033[0m"
|
||||||
|
end
|
||||||
|
|
||||||
|
{
|
||||||
|
:black => 30,
|
||||||
|
:red => 31,
|
||||||
|
:green => 32,
|
||||||
|
:yellow => 33,
|
||||||
|
:blue => 34,
|
||||||
|
:cyan => 36,
|
||||||
|
}.each do |key, color_code|
|
||||||
|
define_method key do |text|
|
||||||
|
colorize(text, color_code)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
include Colors
|
||||||
|
|
||||||
|
#
|
||||||
|
## Just typing `rake` will invoke `rake preview`
|
||||||
|
#
|
||||||
|
task :default => :preview
|
||||||
|
load '_rake-configuration.rb' if File.exist?('_rake-configuration.rb')
|
||||||
|
|
||||||
|
desc 'Preview with livereload on local machine'
|
||||||
|
task :preview => :clean do
|
||||||
|
puts green "Starting livereload server"
|
||||||
|
jekyll('serve -L --drafts')
|
||||||
|
end
|
||||||
|
task :serve => :preview
|
||||||
|
|
||||||
|
desc 'Clean up generated site'
|
||||||
|
task :clean do
|
||||||
|
cleanup
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'Check links for generated site'
|
||||||
|
task :check do
|
||||||
|
STDOUT.sync = true
|
||||||
|
cleanup
|
||||||
|
jekyll("build -d _site#{baseurl}")
|
||||||
|
puts cyan "Running html proofer..."
|
||||||
|
puts `htmlproofer --assume-extension --alt-ignore '/.*/' ./_site`
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'Deploy site'
|
||||||
|
task :deploy do
|
||||||
|
sh 'jgd -b deploy'
|
||||||
|
end
|
||||||
|
|
||||||
|
# Usage: rake post title="A Title" [date="2012-02-09"] [tags=[tag1,tag2]] [category="category"]
|
||||||
|
desc "Begin a new post in #{CONFIG['posts']}"
|
||||||
|
task :post do
|
||||||
|
abort("rake aborted: '#{CONFIG['posts']}' directory not found.") unless FileTest.directory?(CONFIG['posts'])
|
||||||
|
title = ENV["title"] || "new-post"
|
||||||
|
tags = ENV["tags"] || "[]"
|
||||||
|
category = ENV["category"] || ""
|
||||||
|
category = "\"#{category.gsub(/-/,' ')}\"" if !category.empty?
|
||||||
|
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
|
||||||
|
begin
|
||||||
|
date = (ENV['date'] ? Time.parse(ENV['date']) : Time.now).strftime('%Y-%m-%d')
|
||||||
|
rescue => e
|
||||||
|
puts red "Error - date format must be YYYY-MM-DD, please check you typed it correctly!"
|
||||||
|
exit -1
|
||||||
|
end
|
||||||
|
filename = File.join(CONFIG['posts'], "#{date}-#{slug}.#{CONFIG['post_ext']}")
|
||||||
|
if File.exist?(filename)
|
||||||
|
abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
|
||||||
|
end
|
||||||
|
|
||||||
|
puts cyan "Creating new post: #{filename}"
|
||||||
|
open(filename, 'w') do |post|
|
||||||
|
post.puts "---"
|
||||||
|
post.puts "layout: post"
|
||||||
|
post.puts "title: \"#{title.gsub(/-/,' ')}\""
|
||||||
|
post.puts 'description: ""'
|
||||||
|
post.puts "category: #{category}"
|
||||||
|
post.puts "tags: #{tags}"
|
||||||
|
post.puts "---"
|
||||||
|
post.puts "{% include JB/setup %}"
|
||||||
|
end
|
||||||
|
end # task :post
|
||||||
|
|
||||||
|
#
|
||||||
|
## General support functions
|
||||||
|
#
|
||||||
|
|
||||||
|
def cleanup
|
||||||
|
sh 'rm -rf _site'
|
||||||
|
end
|
||||||
|
|
||||||
|
def jekyll(directives = '')
|
||||||
|
sh 'jekyll ' + directives
|
||||||
|
end
|
||||||
|
|
||||||
|
def rake_running
|
||||||
|
`ps | grep 'rake' | grep -v 'grep' | wc -l`.to_i > 1
|
||||||
|
end
|
||||||
|
|
53
_config.yml
53
_config.yml
@ -1,43 +1,26 @@
|
|||||||
# Welcome to Jekyll!
|
|
||||||
#
|
|
||||||
# This config file is meant for settings that affect your whole blog, values
|
|
||||||
# which you are expected to set up once and rarely edit after that. If you find
|
|
||||||
# yourself editing this file very often, consider using Jekyll's data files
|
|
||||||
# feature for the data you need to update frequently.
|
|
||||||
#
|
|
||||||
# For technical reasons, this file is *NOT* reloaded automatically when you use
|
|
||||||
# 'bundle exec jekyll serve'. If you change this file, please restart the server process.
|
|
||||||
|
|
||||||
# Site settings
|
# Site settings
|
||||||
# These are used to personalize your new site. If you look in the HTML files,
|
title: "speice.io"
|
||||||
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
|
description: "The Old Speice Guy"
|
||||||
# You can create any custom variable you would like, and they will be accessible
|
|
||||||
# in the templates via {{ site.myvariable }}.
|
author: Bradlee Speice
|
||||||
title: speice.io
|
|
||||||
description: The Old Speice Guy
|
|
||||||
email: bradlee@speice.io
|
email: bradlee@speice.io
|
||||||
|
twitter_username:
|
||||||
|
github_username:
|
||||||
|
|
||||||
baseurl: "" # the subpath of your site, e.g. /blog
|
baseurl: "" # the subpath of your site, e.g. /blog
|
||||||
url: "https://speice.io/" # the base hostname & protocol for your site, e.g. http://example.com
|
url: "https://speice.io" # the base hostname & protocol for your site
|
||||||
github_username: bspeice
|
|
||||||
|
google_analytics_id:
|
||||||
|
disqus_id:
|
||||||
|
isso_url: "https://comments.speice.io/"
|
||||||
|
|
||||||
# Build settings
|
# Build settings
|
||||||
markdown: kramdown
|
|
||||||
theme: texture
|
|
||||||
remote_theme: thelehhman/texture
|
|
||||||
plugins:
|
|
||||||
- jekyll-feed
|
|
||||||
|
|
||||||
include: [_pages]
|
include: [_pages]
|
||||||
|
markdown: kramdown
|
||||||
permalink: /:year/:month/:title.html
|
permalink: /:year/:month/:title.html
|
||||||
|
|
||||||
# Exclude from processing.
|
sass:
|
||||||
# The following items will not be processed, by default. Create a custom list
|
style: compressed
|
||||||
# to override the default setting.
|
|
||||||
# exclude:
|
exclude: [vendor]
|
||||||
# - Gemfile
|
|
||||||
# - Gemfile.lock
|
|
||||||
# - node_modules
|
|
||||||
# - vendor/bundle/
|
|
||||||
# - vendor/cache/
|
|
||||||
# - vendor/gems/
|
|
||||||
# - vendor/ruby/
|
|
||||||
|
11
_includes/analytics.html
Normal file
11
_includes/analytics.html
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{% if site.google_analytics_id %}
|
||||||
|
<script>
|
||||||
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||||
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new
|
||||||
|
Date();a=s.createElement(o),
|
||||||
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||||
|
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||||
|
ga('create', '{{ site.google_analytics_id }}', 'auto');
|
||||||
|
ga('send', 'pageview');
|
||||||
|
</script>
|
||||||
|
{% endif %}
|
17
_includes/disqus.html
Normal file
17
_includes/disqus.html
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<script>
|
||||||
|
/**
|
||||||
|
* RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
|
||||||
|
* LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables */
|
||||||
|
|
||||||
|
var disqus_config = function () {
|
||||||
|
this.page.url = {{ page.url }}; // Replace PAGE_URL with your page's canonical URL variable
|
||||||
|
this.page.identifier = {{ page.id }}; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
|
||||||
|
};
|
||||||
|
(function() { // DON'T EDIT BELOW THIS LINE
|
||||||
|
var d = document, s = d.createElement('script');
|
||||||
|
s.src = 'https://{{ site.disqus_id }}.disqus.com/embed.js';
|
||||||
|
s.setAttribute('data-timestamp', +new Date());
|
||||||
|
(d.head || d.body).appendChild(s);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
|
4
_includes/footer.html
Normal file
4
_includes/footer.html
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<footer class="c-page__footer">
|
||||||
|
<p>© {{ site.author }} {{ 'now' | date: '%Y' }}</p>
|
||||||
|
<p>{% if site.twitter_username %}<a href="https://twitter.com/{{ site.twitter_username }}">Twitter</a><span class="u-separate"></span>{% endif %}{% if site.github_username %}<a href="https://github.com/{{ site.github_username }}">Github</a>{% endif %}</p>
|
||||||
|
</footer>
|
@ -1,7 +1,12 @@
|
|||||||
<meta charset="UTF-8">
|
<head>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<link rel="stylesheet" href="{{ "/assets/css/style.css" | relative_url }}">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<link rel="stylesheet" href="{{ "/assets/css/fonts.css" | prepend: site.baseurl }}">
|
<title>{% if page.title %}{{ page.title }} - {% endif %}{{ site.title }}</title>
|
||||||
<title>{{ page.title | default: site.title }}</title>
|
<meta name="description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}">
|
||||||
{% seo %}
|
<link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">
|
||||||
|
<link rel="stylesheet" href="{{ "/css/fonts.css" | prepend: site.baseurl }}">
|
||||||
|
<link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}">
|
||||||
|
<link rel="icon" type="image/vnd.microsoft.icon" href="https://speice.io/favicon.ico">
|
||||||
|
</head>
|
||||||
|
11
_includes/header.html
Normal file
11
_includes/header.html
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<header class="c-page__header">
|
||||||
|
<h1><code>{{ site.title}}</code></h1>
|
||||||
|
{% if page.title == 'Home' %}
|
||||||
|
<h1>{{ site.description }}</h1>
|
||||||
|
{% endif %}
|
||||||
|
<p>
|
||||||
|
<a href="{{ "/" | prepend: site.baseurl }}">Home</a><span
|
||||||
|
class="u-separate"></span> <a href="{{ "/projects/" | prepend:
|
||||||
|
site.baseurl }}">Projects</a><span class="u-separate"></span> <a href="{{ "/about/" | prepend: site.baseurl }}">About</a><span class="u-separate"></span><a href="{{ "/feed.xml" | prepend: site.baseurl }}">RSS</a>
|
||||||
|
</p>
|
||||||
|
</header>
|
5
_includes/isso.html
Normal file
5
_includes/isso.html
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<script data-isso="https://comments.speice.io/"
|
||||||
|
src="https://comments.speice.io/js/embed.min.js"></script>
|
||||||
|
<noscript>Please enable Javascript to use the comments system.</noscript>
|
||||||
|
|
||||||
|
<section id="isso-thread"></section>
|
@ -1,9 +0,0 @@
|
|||||||
<div class="navbar">
|
|
||||||
<a href="{{ "/" | prepend: site.baseurl }}">Home</a>
|
|
||||||
<span class="separator"></span>
|
|
||||||
<a href="{{ "/projects/" | prepend: site.baseurl }}">Projects</a>
|
|
||||||
<span class="separator"></span>
|
|
||||||
<a href="{{ "/about/" | prepend: site.baseurl }}">About</a>
|
|
||||||
<span class="separator"></span>
|
|
||||||
<a href="{{ "/feed.xml" | prepend: site.baseurl }}">RSS</a>
|
|
||||||
</div>
|
|
@ -1,15 +0,0 @@
|
|||||||
<div class="container">
|
|
||||||
<h2>{{ site.title }}</h1>
|
|
||||||
<h1>{{ site.description }}</h2>
|
|
||||||
<ul class="social">
|
|
||||||
{%- if site.texture.social_links.github -%}
|
|
||||||
<a href="https://github.com/{{ site.texture.social_links.github }}"><li><i class="icon-github-circled"></i></li></a>
|
|
||||||
{%- endif -%}
|
|
||||||
{%- if site.texture.social_links.linkedIn -%}
|
|
||||||
<a href="https://linkedin.com/{{ site.texture.social_links.linkedIn }}"><li><i class="icon-linkedin-squared"></i></li></a>
|
|
||||||
{%- endif -%}
|
|
||||||
{%- if site.texture.social_links.twitter -%}
|
|
||||||
<a href="https://twitter.com/{{ site.texture.social_links.twitter }}"><li><i class="icon-twitter-squared"></i></li></a>
|
|
||||||
{%- endif -%}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
13
_layouts/content.html
Normal file
13
_layouts/content.html
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
layout: page
|
||||||
|
---
|
||||||
|
<article class="c-article">
|
||||||
|
<header class="c-article__header">
|
||||||
|
<h1 class="c-article__title">{{ page.title }}</h1>
|
||||||
|
</header>
|
||||||
|
<div class="c-article__main">
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
||||||
|
<footer class="c-article__footer">
|
||||||
|
</footer>
|
||||||
|
</article>
|
12
_layouts/default.html
Normal file
12
_layouts/default.html
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
{% include head.html %}
|
||||||
|
<body>
|
||||||
|
<main class="u-container">
|
||||||
|
{{ content }}
|
||||||
|
</main>
|
||||||
|
{% if jekyll.environment == 'production' %}
|
||||||
|
{% include analytics.html %}
|
||||||
|
{% endif %}
|
||||||
|
</body>
|
||||||
|
</html>
|
10
_layouts/page.html
Normal file
10
_layouts/page.html
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
layout: default
|
||||||
|
---
|
||||||
|
<div class="c-page">
|
||||||
|
{% include header.html %}
|
||||||
|
<div class="c-page__main">
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
||||||
|
{% include footer.html %}
|
||||||
|
</div>
|
47
_layouts/post.html
Normal file
47
_layouts/post.html
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
---
|
||||||
|
layout: page
|
||||||
|
---
|
||||||
|
<article class="c-article">
|
||||||
|
<header class="c-article__header">
|
||||||
|
<h1 class="c-article__title">{{ page.title }}</h1>
|
||||||
|
<br>
|
||||||
|
<h3 class="c-article__description">{{ page.description }}</h3>
|
||||||
|
<p class="c-article__time"><time datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">{{ page.date | date: "%b %-d, %Y" }}</time></p>
|
||||||
|
</header>
|
||||||
|
<!-- Post Tags -->
|
||||||
|
<ul class="c-tags">
|
||||||
|
{% for tag in page.tags %}
|
||||||
|
<li class="c-tag">{{ tag }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
<div class="c-article__main">
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
||||||
|
<!-- Previous / Next Buttons -->
|
||||||
|
<div class="pagenav">
|
||||||
|
{% if page.previous.url %}
|
||||||
|
<div class="wrapper" id="left">
|
||||||
|
<small><b>Previous</b> {{page.previous.date | date: "%b %-d, %Y"}}</small>
|
||||||
|
<br>
|
||||||
|
<a class="no-hov" href="{{ page.previous.url | prepend: site.baseurl }}">« {{page.previous.title}}</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if page.next.url %}
|
||||||
|
<div class="wrapper" id="right">
|
||||||
|
<small>{{page.next.date | date: "%b %-d, %Y"}} <b>Next</b></small>
|
||||||
|
<br>
|
||||||
|
<a class="no-hov" href="{{ page.next.url | prepend: site.baseurl }}">{{page.next.title}} »</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<!-- Disqus comments view -->
|
||||||
|
{% if page.comments != false and site.disqus_id %}
|
||||||
|
<div class="post-disqus">
|
||||||
|
<section id="disqus_thread"></section>
|
||||||
|
{% include disqus.html %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if page.comments != false %}
|
||||||
|
{% include isso.html %}
|
||||||
|
{% endif %}
|
||||||
|
</article>
|
@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
layout: page
|
layout: content
|
||||||
title: About
|
title: About
|
||||||
permalink: /about/
|
permalink: /about/
|
||||||
---
|
---
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
layout: page
|
layout: content
|
||||||
title: Projects
|
title: Projects
|
||||||
permalink: /projects/
|
permalink: /projects/
|
||||||
---
|
---
|
||||||
|
@ -48,7 +48,7 @@ Even though everyone has different needs, there are still common things to look
|
|||||||
- [In Python](https://rushter.com/blog/python-garbage-collector/), individual objects are collected if the reference count reaches 0, and each generation is collected if `num_alloc - num_dealloc > gc_threshold` whenever an allocation happens. The GIL is acquired for the duration of generational collection.
|
- [In Python](https://rushter.com/blog/python-garbage-collector/), individual objects are collected if the reference count reaches 0, and each generation is collected if `num_alloc - num_dealloc > gc_threshold` whenever an allocation happens. The GIL is acquired for the duration of generational collection.
|
||||||
- Java has [many](https://docs.oracle.com/en/java/javase/12/gctuning/parallel-collector1.html#GUID-DCDD6E46-0406-41D1-AB49-FB96A50EB9CE) [different](https://docs.oracle.com/en/java/javase/12/gctuning/garbage-first-garbage-collector.html#GUID-ED3AB6D3-FD9B-4447-9EDF-983ED2F7A573) [collection](https://docs.oracle.com/en/java/javase/12/gctuning/garbage-first-garbage-collector-tuning.html#GUID-90E30ACA-8040-432E-B3A0-1E0440AB556A) [algorithms](https://docs.oracle.com/en/java/javase/12/gctuning/z-garbage-collector1.html#GUID-A5A42691-095E-47BA-B6DC-FB4E5FAA43D0) to choose from, each with different characteristics. The default algorithms (Parallel GC in Java 8, G1 in Java 9) freeze the JVM while collecting, while more recent algorithms ([ZGC](https://wiki.openjdk.java.net/display/zgc) and [Shenandoah](https://wiki.openjdk.java.net/display/shenandoah)) are designed to keep "stop the world" to a minimum by doing collection work in parallel.
|
- Java has [many](https://docs.oracle.com/en/java/javase/12/gctuning/parallel-collector1.html#GUID-DCDD6E46-0406-41D1-AB49-FB96A50EB9CE) [different](https://docs.oracle.com/en/java/javase/12/gctuning/garbage-first-garbage-collector.html#GUID-ED3AB6D3-FD9B-4447-9EDF-983ED2F7A573) [collection](https://docs.oracle.com/en/java/javase/12/gctuning/garbage-first-garbage-collector-tuning.html#GUID-90E30ACA-8040-432E-B3A0-1E0440AB556A) [algorithms](https://docs.oracle.com/en/java/javase/12/gctuning/z-garbage-collector1.html#GUID-A5A42691-095E-47BA-B6DC-FB4E5FAA43D0) to choose from, each with different characteristics. The default algorithms (Parallel GC in Java 8, G1 in Java 9) freeze the JVM while collecting, while more recent algorithms ([ZGC](https://wiki.openjdk.java.net/display/zgc) and [Shenandoah](https://wiki.openjdk.java.net/display/shenandoah)) are designed to keep "stop the world" to a minimum by doing collection work in parallel.
|
||||||
|
|
||||||
**Allocation**: Every language has a different way of interacting with "heap" memory, but the principle is the same: running the allocator to allocate/deallocate memory takes time that can often be put to better use. Understanding when your language interacts with the allocator is crucial, and not always obvious. For example: C++ and Rust don't allocate heap memory for iterators, but Java does (meaning potential GC pauses). Take time to understand heap behavior (I made a [a guide for Rust](/2019/02/understanding-allocations-in-rust.html)), and look into alternative allocators ([jemalloc](http://jemalloc.net/), [tcmalloc](https://gperftools.github.io/gperftools/tcmalloc.html)) that might run faster than the operating system default.
|
**Allocation**: Every language has a different way of interacting with "heap" memory, but the principle is the same: running the allocator to allocate/deallocate memory takes time that can often be put to better use. Understanding when your language interacts with the allocator is crucial, and not always obvious. For example: C++ and Rust don't allocate heap memory for iterators, but Java does (meaning potential GC pauses). Take time to understand heap behavior (I made a [a guide for Rust](https://speice.io/2019/02/understanding-allocations-in-rust.html)), and look into alternative allocators ([jemalloc](http://jemalloc.net/), [tcmalloc](https://gperftools.github.io/gperftools/tcmalloc.html)) that might run faster than the operating system default.
|
||||||
|
|
||||||
**Data Layout**: How your data is arranged in memory matters; [data-oriented design](https://www.youtube.com/watch?v=yy8jQgmhbAU) and [cache locality](https://www.youtube.com/watch?v=2EWejmkKlxs&feature=youtu.be&t=1185) can have huge impacts on performance. The C family of languages (C, value types in C#, C++) and Rust all have guarantees about the shape every object takes in memory that others (e.g. Java and Python) can't make. [Cachegrind](http://valgrind.org/docs/manual/cg-manual.html) and kernel [perf](https://perf.wiki.kernel.org/index.php/Main_Page) counters are both great for understanding how performance relates to memory layout.
|
**Data Layout**: How your data is arranged in memory matters; [data-oriented design](https://www.youtube.com/watch?v=yy8jQgmhbAU) and [cache locality](https://www.youtube.com/watch?v=2EWejmkKlxs&feature=youtu.be&t=1185) can have huge impacts on performance. The C family of languages (C, value types in C#, C++) and Rust all have guarantees about the shape every object takes in memory that others (e.g. Java and Python) can't make. [Cachegrind](http://valgrind.org/docs/manual/cg-manual.html) and kernel [perf](https://perf.wiki.kernel.org/index.php/Main_Page) counters are both great for understanding how performance relates to memory layout.
|
||||||
|
|
||||||
|
@ -6,9 +6,9 @@ category:
|
|||||||
tags: [python]
|
tags: [python]
|
||||||
---
|
---
|
||||||
|
|
||||||
Complaining about the [Global Interpreter Lock](https://wiki.python.org/moin/GlobalInterpreterLock) (GIL) seems like a rite of passage for Python developers. It's easy to criticize a design decision made before multi-core CPU's were widely available, but the fact that it's still around indicates that it generally works [Good](https://wiki.c2.com/?PrematureOptimization) [Enough](https://wiki.c2.com/?YouArentGonnaNeedIt). Besides, there are simple and effective workarounds; it's not hard to start a [new process](https://docs.python.org/3/library/multiprocessing.html) and use message passing to synchronize code running in parallel.
|
Complaining about the [Global Interpreter Lock](https://wiki.python.org/moin/GlobalInterpreterLock)(GIL) seems like a rite of passage for Python developers. It's easy to criticize a design decision made before multi-core CPU's were widely available, but the fact that it's still around indicates that it generally works [Good](https://wiki.c2.com/?PrematureOptimization) [Enough](https://wiki.c2.com/?YouArentGonnaNeedIt). Besides, there are simple and effective workarounds; it's not hard to start a [new process](https://docs.python.org/3/library/multiprocessing.html) and use message passing to synchronize code running in parallel.
|
||||||
|
|
||||||
Still, wouldn't it be nice to have more than a single active interpreter thread? In an age of asynchronicity and *M:N* threading, Python seems lacking. The ideal scenario is to take advantage of both Python's productivity and the modern CPU's parallel capabilities.
|
Still, wouldn't it be nice to have more than a single active interpreter thread? In an age of asynchronicity and $M:N$ threading, Python seems lacking. The ideal scenario is to take advantage of both Python's productivity and the modern CPU's parallel capabilities.
|
||||||
|
|
||||||
Presented below are two strategies for releasing the GIL's icy grip without giving up on what makes Python a nice language to start with. Bear in mind: these are just the tools, no claim is made about whether it's a good idea to use them. Very often, unlocking the GIL is an [XY problem](https://en.wikipedia.org/wiki/XY_problem); you want application performance, and the GIL seems like an obvious bottleneck. Remember that any gains from running code in parallel come at the expense of project complexity; messing with the GIL is ultimately messing with Python's memory model.
|
Presented below are two strategies for releasing the GIL's icy grip without giving up on what makes Python a nice language to start with. Bear in mind: these are just the tools, no claim is made about whether it's a good idea to use them. Very often, unlocking the GIL is an [XY problem](https://en.wikipedia.org/wiki/XY_problem); you want application performance, and the GIL seems like an obvious bottleneck. Remember that any gains from running code in parallel come at the expense of project complexity; messing with the GIL is ultimately messing with Python's memory model.
|
||||||
|
|
||||||
@ -71,6 +71,7 @@ _ = cython_gil(N);
|
|||||||
|
|
||||||
> <pre>
|
> <pre>
|
||||||
> CPU times: user 365 ms, sys: 0 ns, total: 365 ms
|
> CPU times: user 365 ms, sys: 0 ns, total: 365 ms
|
||||||
|
>
|
||||||
> Wall time: 372 ms
|
> Wall time: 372 ms
|
||||||
> </pre>
|
> </pre>
|
||||||
|
|
||||||
|
174
_sass/base/_reset.scss
Normal file
174
_sass/base/_reset.scss
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
/* ==========================================================================
|
||||||
|
Reset
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/* Reset Modified from Normalize.css */
|
||||||
|
|
||||||
|
/* Base Reset */
|
||||||
|
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
*, *:before, *:after { box-sizing: inherit; }
|
||||||
|
|
||||||
|
|
||||||
|
html {
|
||||||
|
min-height: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
font-size: 62.5%; // Make it easy to calculate rems to px
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
@include ff--sans-serif(400);
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
article,
|
||||||
|
aside,
|
||||||
|
figcaption,
|
||||||
|
figure,
|
||||||
|
footer,
|
||||||
|
header,
|
||||||
|
hgroup,
|
||||||
|
main,
|
||||||
|
menu,
|
||||||
|
nav,
|
||||||
|
section {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
font-weight: 400;
|
||||||
|
color: $c-base__02;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Media */
|
||||||
|
audio, canvas, progress, video {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
audio:not([controls]) {
|
||||||
|
display: none;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Images */
|
||||||
|
|
||||||
|
[hidden], template { display: none; }
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
font-style: italic;
|
||||||
|
vertical-align: middle;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg:not(:root) { overflow: hidden; }
|
||||||
|
|
||||||
|
svg {
|
||||||
|
pointer-events: none;
|
||||||
|
max-height: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
.center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Links */
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: $c-accent__blue;
|
||||||
|
background-color: transparent;
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
padding: 1px 1px;
|
||||||
|
transition: color ease 0.3s;
|
||||||
|
|
||||||
|
/* Hover animation effect for all buttons */
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
z-index: -1;
|
||||||
|
width: 100%;
|
||||||
|
height: 0%;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background-color: $c-accent__blue;
|
||||||
|
transition: all ease 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: white;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
&::after {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Override hover animation with no-hov class */
|
||||||
|
a.no-hov {
|
||||||
|
&:after {
|
||||||
|
content: none
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: $c-accent__darkblue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a.nav {
|
||||||
|
padding: 10px 35px;
|
||||||
|
overflow:hidden;
|
||||||
|
}
|
||||||
|
a.nav:before {
|
||||||
|
font-family: FontAwesome;
|
||||||
|
content:"\f07a";
|
||||||
|
position: absolute;
|
||||||
|
top: 11px;
|
||||||
|
left: -30px;
|
||||||
|
transition: all 200ms ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
abbr[title] { border-bottom: 1px dotted; }
|
||||||
|
b, strong { font-weight: bold; }
|
||||||
|
i, em { font-weight: italic; }
|
||||||
|
|
||||||
|
/* Content */
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
hr {
|
||||||
|
margin-top: 2.5rem;
|
||||||
|
margin-bottom: 2.5rem;
|
||||||
|
width: 100%;
|
||||||
|
height: 1px;
|
||||||
|
border: 0;
|
||||||
|
background: #EFF1F3;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Code Blocks */
|
||||||
|
|
||||||
|
pre { overflow: auto; }
|
||||||
|
|
||||||
|
small {
|
||||||
|
color: gray;
|
||||||
|
}
|
||||||
|
|
54
_sass/components/_archives.scss
Normal file
54
_sass/components/_archives.scss
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/* ==========================================================================
|
||||||
|
Archives
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.c-archives {
|
||||||
|
margin-bottom: 10rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-archives__year {
|
||||||
|
margin-bottom: 2.5rem;
|
||||||
|
@include fs--heading-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-archives__list {
|
||||||
|
margin-bottom: 2.5rem;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-archives__item {
|
||||||
|
padding-top: 2.5rem;
|
||||||
|
padding-bottom: 2.5rem;
|
||||||
|
border-top: 1px solid #EFF1F3;
|
||||||
|
@media screen and (min-width: $bp__sm) {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-wrap: wrap;
|
||||||
|
-ms-flex-wrap: wrap;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
-webkit-box-pack: justify;
|
||||||
|
-webkit-justify-content: space-between;
|
||||||
|
-ms-flex-pack: justify;
|
||||||
|
justify-content: space-between;
|
||||||
|
-webkit-box-align: center;
|
||||||
|
-webkit-align-items: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
@include fs--body;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
@include fs--body;
|
||||||
|
color: #515862;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
border-bottom-style: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
163
_sass/components/_article.scss
Normal file
163
_sass/components/_article.scss
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
/* ==========================================================================
|
||||||
|
Article
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.c-article {
|
||||||
|
margin-bottom: 10rem; // 100px
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-article__header {
|
||||||
|
margin-bottom: 2rem; // 50px
|
||||||
|
@media screen and (min-width: $bp__sm) {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-wrap: wrap;
|
||||||
|
-ms-flex-wrap: wrap;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
-webkit-box-pack: justify;
|
||||||
|
-webkit-justify-content: space-between;
|
||||||
|
-ms-flex-pack: justify;
|
||||||
|
justify-content: space-between;
|
||||||
|
-webkit-box-align: baseline;
|
||||||
|
-webkit-align-items: baseline;
|
||||||
|
-ms-flex-align: baseline;
|
||||||
|
align-items: baseline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-article__title {
|
||||||
|
@include fs--heading-1;
|
||||||
|
color: $c-base__02;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-article__description {
|
||||||
|
@include fs--heading-2;
|
||||||
|
color: $c-base__01;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-article__time {
|
||||||
|
@include fs--body;
|
||||||
|
color: $c-base__01;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-article__main {
|
||||||
|
margin-bottom: 5rem; // 50px
|
||||||
|
@include fs--body;
|
||||||
|
color: $c-base__01;
|
||||||
|
|
||||||
|
> * {
|
||||||
|
margin-bottom: 1.8rem; // 18px
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
@include fs--heading-2;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
@include fs--heading-3;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
@include fs--heading-4;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
@include fs--body;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
color: $c-base__02;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
padding-left: 1.8rem; // 18px
|
||||||
|
border-left: 5px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul,
|
||||||
|
ol {
|
||||||
|
margin-left: 2.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.web-container {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
height: 0;
|
||||||
|
padding-bottom: 62.5%;
|
||||||
|
border: 1px solid #cacaca;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.web-container iframe {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
border-bottom-color: $c-accent__blue;
|
||||||
|
border-bottom-style: dotted;
|
||||||
|
border-bottom-width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-style: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
td, th {
|
||||||
|
padding-left: .1em;
|
||||||
|
padding-right: 2em;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: .1em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-article__footer {
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagenav {
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
border: 1px solid LightGrey;
|
||||||
|
border-left-color: transparent;
|
||||||
|
border-right-color: transparent;
|
||||||
|
font-size: 18px;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-bottom: 8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagenav div {
|
||||||
|
border-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid LightGrey;
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#left {
|
||||||
|
float: left;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right {
|
||||||
|
float: right;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
48
_sass/components/_page.scss
Normal file
48
_sass/components/_page.scss
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/* ==========================================================================
|
||||||
|
Page
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.c-page {
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-page__header {
|
||||||
|
margin-bottom: 10rem; // 100px
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin-bottom: 2.5rem; // 25px
|
||||||
|
@include fs--heading-2;
|
||||||
|
color: $c-base__02;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
@include fs--meta;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
border-bottom-style: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-page__footer {
|
||||||
|
margin-bottom: 10rem;
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-wrap: wrap;
|
||||||
|
-ms-flex-wrap: wrap;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
-webkit-box-pack: justify;
|
||||||
|
-webkit-justify-content: space-between;
|
||||||
|
-ms-flex-pack: justify;
|
||||||
|
justify-content: space-between;
|
||||||
|
-webkit-box-align: center;
|
||||||
|
-webkit-align-items: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
align-items: center;
|
||||||
|
p {
|
||||||
|
@include fs--body;
|
||||||
|
color: $c-base__01;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
72
_sass/components/_tag.scss
Normal file
72
_sass/components/_tag.scss
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/* ==========================================================================
|
||||||
|
Tip
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.c-tags {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-tags li {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-tag {
|
||||||
|
background: #eee;
|
||||||
|
border-radius: 3px 0 0 3px;
|
||||||
|
color: #999;
|
||||||
|
display: inline-block;
|
||||||
|
height: 26px;
|
||||||
|
line-height: 26px;
|
||||||
|
padding: 0 20px 0 23px;
|
||||||
|
position: relative;
|
||||||
|
margin: 0 10px 50px 0;
|
||||||
|
text-decoration: none;
|
||||||
|
-webkit-transition: color 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-tag::before {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 10px;
|
||||||
|
box-shadow: inset 0 1px rgba(0, 0, 0, 0.25);
|
||||||
|
content: '';
|
||||||
|
height: 6px;
|
||||||
|
left: 10px;
|
||||||
|
position: absolute;
|
||||||
|
width: 6px;
|
||||||
|
top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-tag::after {
|
||||||
|
background: #fff;
|
||||||
|
border-bottom: 13px solid transparent;
|
||||||
|
border-left: 10px solid #eee;
|
||||||
|
border-top: 13px solid transparent;
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-tag:hover {
|
||||||
|
background-color: $c-accent__blue;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-tag:hover::after {
|
||||||
|
border-left-color: $c-accent__blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-c-tag {
|
||||||
|
margin-right: 1rem;
|
||||||
|
position: relative;
|
||||||
|
white-space: nowrap;
|
||||||
|
@include fs--body;
|
||||||
|
&:before {
|
||||||
|
color: $c-base__0;
|
||||||
|
content: '#\2009';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
84
_sass/helpers/_mixins.scss
Normal file
84
_sass/helpers/_mixins.scss
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
/* ==========================================================================
|
||||||
|
Mixins
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
// Clearfix
|
||||||
|
@mixin clearfix {
|
||||||
|
&:before,
|
||||||
|
&:after {
|
||||||
|
content: " ";
|
||||||
|
display: table;
|
||||||
|
}
|
||||||
|
&:after {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Font families
|
||||||
|
@mixin ff--sans-serif($font-weight: normal) {
|
||||||
|
font-family: 'Lato', sans-serif;
|
||||||
|
font-weight: $font-weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin ff--code {
|
||||||
|
font-family: 'Hasklig', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Font sizing
|
||||||
|
@mixin fs--title {
|
||||||
|
line-height: 1.5;
|
||||||
|
font-size: 4.8rem; // 48px
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin fs--heading-1 {
|
||||||
|
line-height: 1.5;
|
||||||
|
font-size: 3.2rem; // 32px
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin fs--heading-2 {
|
||||||
|
line-height: 1.5;
|
||||||
|
font-size: 2.4rem; // 24px
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin fs--heading-3 {
|
||||||
|
line-height: 1.5;
|
||||||
|
font-size: 2rem; // 20px
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin fs--heading-4 {
|
||||||
|
line-height: 1.6;
|
||||||
|
font-size: 1.8rem; // 18px
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin fs--body {
|
||||||
|
line-height: 1.5;
|
||||||
|
font-size: 1.8rem; // 18px
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin fs--meta {
|
||||||
|
line-height: 1;
|
||||||
|
font-size: 1.8rem; // 18px
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin fs--caption {
|
||||||
|
line-height: 1;
|
||||||
|
font-size: 1.6rem; // 16px
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin fs--code {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Visually hide content
|
||||||
|
@mixin visually-hidden {
|
||||||
|
position: absolute;
|
||||||
|
margin: -1px;
|
||||||
|
border: 0;
|
||||||
|
padding: 0;
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
overflow: hidden;
|
||||||
|
clip: rect(0 0 0 0);
|
||||||
|
}
|
||||||
|
|
22
_sass/helpers/_variables.scss
Normal file
22
_sass/helpers/_variables.scss
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/* ==========================================================================
|
||||||
|
Variabeles
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
$c-base__03: #0D2B35;
|
||||||
|
$c-base__02: #163541;
|
||||||
|
$c-base__01: #5C6E74;
|
||||||
|
$c-base__00: #697B82;
|
||||||
|
$c-base__0: #869395;
|
||||||
|
$c-base__1: #96A0A0;
|
||||||
|
$c-base__2: #EDE7D6;
|
||||||
|
$c-base__3: #FCF5E4;
|
||||||
|
|
||||||
|
$c-accent__blue: #0067FB;
|
||||||
|
$c-accent__darkblue: #0029F9;
|
||||||
|
$c-accent__green: #8BE367;
|
||||||
|
|
||||||
|
// Breakpoints
|
||||||
|
$bp__sm: 45rem; // 450px
|
||||||
|
|
||||||
|
// Misc
|
||||||
|
$m-border: 1px solid $c-base__2;
|
13
_sass/utilities/_layout.scss
Normal file
13
_sass/utilities/_layout.scss
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/* ==========================================================================
|
||||||
|
Layout
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.u-container {
|
||||||
|
max-width: 72rem; // 620px
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: auto;
|
||||||
|
padding-top: 10rem; // 100px
|
||||||
|
padding-right: 1rem; // 10px
|
||||||
|
padding-left: 1rem; // 10px
|
||||||
|
}
|
||||||
|
|
13
_sass/utilities/_separator.scss
Normal file
13
_sass/utilities/_separator.scss
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/* ==========================================================================
|
||||||
|
Separator
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.u-separate {
|
||||||
|
margin-right: .45rem;
|
||||||
|
margin-left: .25rem;
|
||||||
|
color: $c-base__01;
|
||||||
|
&:after {
|
||||||
|
content: '\00a0/';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
85
_sass/vendor/_highlight.scss
vendored
Normal file
85
_sass/vendor/_highlight.scss
vendored
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
/* Solarized Dark
|
||||||
|
|
||||||
|
For use with Jekyll and Pygments
|
||||||
|
|
||||||
|
http://ethanschoonover.com/solarized
|
||||||
|
|
||||||
|
SOLARIZED HEX ROLE
|
||||||
|
--------- -------- ------------------------------------------
|
||||||
|
base03 #002b36 background
|
||||||
|
base01 #586e75 comments / secondary content
|
||||||
|
base1 #93a1a1 body text / default code / primary content
|
||||||
|
orange #cb4b16 constants
|
||||||
|
red #dc322f regex, special keywords
|
||||||
|
blue #268bd2 reserved keywords
|
||||||
|
cyan #2aa198 strings, numbers
|
||||||
|
green #859900 operators, other keywords
|
||||||
|
*/
|
||||||
|
|
||||||
|
pre, code {
|
||||||
|
@include ff--code;
|
||||||
|
@include fs--code;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
margin-left: -999em;
|
||||||
|
margin-right: -999em;
|
||||||
|
padding: 1.5em 999em 1.5em 999em;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Controls inline backtick blocks
|
||||||
|
code.highlighter-rouge {
|
||||||
|
white-space: nowrap;
|
||||||
|
font-size: 1.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight {
|
||||||
|
border: 1px solid #E8E8EB;
|
||||||
|
|
||||||
|
.gutter {
|
||||||
|
padding: 1.2rem;
|
||||||
|
border-right: 1px solid #E8E8EB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code {
|
||||||
|
padding: 1.2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
span.lineno {
|
||||||
|
padding: 1rem;
|
||||||
|
border-right: 1px solid #E8E8EB;
|
||||||
|
}
|
||||||
|
.highlight .hll { background-color: #ffffcc }
|
||||||
|
.highlight { background: #fcfcfc; }
|
||||||
|
.highlight .c { color: #008000 } /* Comment */
|
||||||
|
//.highlight .err { border: 1px solid #FF0000 } /* Error */
|
||||||
|
.highlight .k { color: #0000ff } /* Keyword */
|
||||||
|
.highlight .cm { color: #008000 } /* Comment.Multiline */
|
||||||
|
.highlight .cp { color: #0000ff } /* Comment.Preproc */
|
||||||
|
.highlight .c1 { color: #008000 } /* Comment.Single */
|
||||||
|
.highlight .cs { color: #008000 } /* Comment.Special */
|
||||||
|
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||||
|
.highlight .gh { font-weight: bold } /* Generic.Heading */
|
||||||
|
.highlight .gp { font-weight: bold } /* Generic.Prompt */
|
||||||
|
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||||
|
.highlight .gu { font-weight: bold } /* Generic.Subheading */
|
||||||
|
.highlight .kc { color: #0000ff } /* Keyword.Constant */
|
||||||
|
.highlight .kd { color: #0000ff } /* Keyword.Declaration */
|
||||||
|
.highlight .kn { color: #0000ff } /* Keyword.Namespace */
|
||||||
|
.highlight .kp { color: #0000ff } /* Keyword.Pseudo */
|
||||||
|
.highlight .kr { color: #0000ff } /* Keyword.Reserved */
|
||||||
|
.highlight .kt { color: #2b91af } /* Keyword.Type */
|
||||||
|
.highlight .s { color: #a31515 } /* Literal.String */
|
||||||
|
.highlight .nc { color: #2b91af } /* Name.Class */
|
||||||
|
.highlight .ow { color: #0000ff } /* Operator.Word */
|
||||||
|
.highlight .sb { color: #a31515 } /* Literal.String.Backtick */
|
||||||
|
.highlight .sc { color: #a31515 } /* Literal.String.Char */
|
||||||
|
.highlight .sd { color: #a31515 } /* Literal.String.Doc */
|
||||||
|
.highlight .s2 { color: #a31515 } /* Literal.String.Double */
|
||||||
|
.highlight .se { color: #a31515 } /* Literal.String.Escape */
|
||||||
|
.highlight .sh { color: #a31515 } /* Literal.String.Heredoc */
|
||||||
|
.highlight .si { color: #a31515 } /* Literal.String.Interpol */
|
||||||
|
.highlight .sx { color: #a31515 } /* Literal.String.Other */
|
||||||
|
.highlight .sr { color: #a31515 } /* Literal.String.Regex */
|
||||||
|
.highlight .s1 { color: #a31515 } /* Literal.String.Single */
|
||||||
|
.highlight .ss { color: #a31515 } /* Literal.String.Symbol */
|
@ -1,15 +0,0 @@
|
|||||||
@font-face {
|
|
||||||
font-family: 'JetBrains Mono';
|
|
||||||
src: url('/assets/font/JetBrainsMono-Regular.woff2') format('woff2'),
|
|
||||||
url('/assets/font/JetBrainsMono-Regular.woff') format('woff');
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Lato';
|
|
||||||
src: url('/assets/font/lato-regular-webfont.woff2') format('woff2'),
|
|
||||||
url('/assets/font/lato-regular-webfont.woff') format('woff');
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
@ -1,97 +0,0 @@
|
|||||||
---
|
|
||||||
---
|
|
||||||
|
|
||||||
// Import the theme rules
|
|
||||||
@import "theme";
|
|
||||||
|
|
||||||
body {
|
|
||||||
max-width: 100%;
|
|
||||||
overflow-x: hidden;
|
|
||||||
font-family: 'Lato', sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar {
|
|
||||||
color: $gray;
|
|
||||||
}
|
|
||||||
|
|
||||||
.separator {
|
|
||||||
margin-right: .45rem;
|
|
||||||
margin-left: .25rem;
|
|
||||||
color: #000;
|
|
||||||
&:after {
|
|
||||||
content: '\00a0/';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
header {
|
|
||||||
padding-top: 80px;
|
|
||||||
padding-bottom: 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
header h1,h2 {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.post-description {
|
|
||||||
color: #555;
|
|
||||||
}
|
|
||||||
|
|
||||||
.post-container a {
|
|
||||||
color: #555;
|
|
||||||
border-bottom-color: $gray;
|
|
||||||
border-bottom-style: dotted;
|
|
||||||
border-bottom-width: 1px;
|
|
||||||
|
|
||||||
position: relative;
|
|
||||||
display: inline-block;
|
|
||||||
padding: 1px 1px;
|
|
||||||
transition: color ease 0.3s;
|
|
||||||
|
|
||||||
&::after {
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
z-index: -1;
|
|
||||||
width: 100%;
|
|
||||||
height: 0%;
|
|
||||||
left: 0;
|
|
||||||
bottom: 0;
|
|
||||||
background-color: $gray;
|
|
||||||
transition: all ease 0.3s;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: #fff;
|
|
||||||
border-bottom-style: solid;
|
|
||||||
&::after {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
body pre {
|
|
||||||
font-size: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre.highlight, code {
|
|
||||||
font-family: 'JetBrains Mono', monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.highlighter-rouge {
|
|
||||||
// Default theme uses `width: 100vw`, which while cool, does cause the page
|
|
||||||
// to exceed screen width and trigger horizontal scrolling. No bueno.
|
|
||||||
width: 99vw;
|
|
||||||
}
|
|
||||||
|
|
||||||
.post-date {
|
|
||||||
// On the front page, make sure titles don't force wrapping the date box content
|
|
||||||
text-align: right;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
color: #555;
|
|
||||||
right: 100px;
|
|
||||||
margin-left: 0;
|
|
||||||
padding-left: 1.8rem;
|
|
||||||
border-left: 5px solid $gray;
|
|
||||||
}
|
|
Binary file not shown.
Binary file not shown.
130
assets/icon.svg
Normal file
130
assets/icon.svg
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="1000"
|
||||||
|
height="1000"
|
||||||
|
viewBox="0 0 264.58333 264.58334"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="connected.svg">
|
||||||
|
<defs
|
||||||
|
id="defs2" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.35"
|
||||||
|
inkscape:cx="-78.571429"
|
||||||
|
inkscape:cy="525.71429"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1015"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-32.41665)">
|
||||||
|
<circle
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:18.52083397;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4587"
|
||||||
|
cx="45.610676"
|
||||||
|
cy="78.027328"
|
||||||
|
r="36.225838" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:18.52083397;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4587-2"
|
||||||
|
cx="45.610676"
|
||||||
|
cy="251.51373"
|
||||||
|
r="36.225838" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:18.52083397;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4587-7"
|
||||||
|
cx="219.09708"
|
||||||
|
cy="251.51373"
|
||||||
|
r="36.225838" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:18.52083397;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4587-0"
|
||||||
|
cx="219.09708"
|
||||||
|
cy="78.027328"
|
||||||
|
r="36.225838" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4645-9-3-6"
|
||||||
|
width="8.4617825"
|
||||||
|
height="100.4009"
|
||||||
|
x="73.79644"
|
||||||
|
y="-180.98529"
|
||||||
|
transform="rotate(90)" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:9.8169632;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4645-9-3-6-6"
|
||||||
|
width="8.4617825"
|
||||||
|
height="100.4009"
|
||||||
|
x="-49.841568"
|
||||||
|
y="-216.42067"
|
||||||
|
transform="scale(-1)" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4645-9-3-6-2"
|
||||||
|
width="8.4617825"
|
||||||
|
height="100.4009"
|
||||||
|
x="-223.32797"
|
||||||
|
y="-216.42067"
|
||||||
|
transform="scale(-1)" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:9.8169632;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4645-9-3-6-61"
|
||||||
|
width="8.4617825"
|
||||||
|
height="100.4009"
|
||||||
|
x="247.28284"
|
||||||
|
y="-181.43365"
|
||||||
|
transform="rotate(90)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:5.00045443;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4645-9-3-6-6-8"
|
||||||
|
width="13.735248"
|
||||||
|
height="162.97173"
|
||||||
|
x="14.054895"
|
||||||
|
y="-291.30661"
|
||||||
|
transform="matrix(-0.70033295,0.71381633,-0.70033295,-0.71381633,0,0)" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:5.00045443;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect4645-9-3-6-6-8-9"
|
||||||
|
width="13.735248"
|
||||||
|
height="162.97173"
|
||||||
|
x="203.3903"
|
||||||
|
y="-56.55806"
|
||||||
|
transform="matrix(0.71381633,0.70033295,-0.71381633,0.70033295,0,0)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.4 KiB |
BIN
assets/webfonts/hasklig-semibold-webfont.woff
Normal file
BIN
assets/webfonts/hasklig-semibold-webfont.woff
Normal file
Binary file not shown.
BIN
assets/webfonts/hasklig-semibold-webfont.woff2
Normal file
BIN
assets/webfonts/hasklig-semibold-webfont.woff2
Normal file
Binary file not shown.
17
css/fonts.css
Normal file
17
css/fonts.css
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: 'Hasklig';
|
||||||
|
src: url('/assets/webfonts/hasklig-semibold-webfont.woff2') format('woff2'),
|
||||||
|
url('/assets/webfonts/hasklig-semibold-webfont.woff') format('woff');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Lato';
|
||||||
|
src: url('/assets/webfonts/lato-regular-webfont.woff2') format('woff2'),
|
||||||
|
url('/assets/webfonts/lato-regular-webfont.woff') format('woff');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
|
||||||
|
}
|
30
css/main.scss
Normal file
30
css/main.scss
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
# Main scss file
|
||||||
|
---
|
||||||
|
@charset "utf-8";
|
||||||
|
|
||||||
|
// Helpers
|
||||||
|
@import
|
||||||
|
'helpers/mixins',
|
||||||
|
'helpers/variables';
|
||||||
|
|
||||||
|
// Base
|
||||||
|
@import
|
||||||
|
'base/reset';
|
||||||
|
|
||||||
|
// Utilities
|
||||||
|
@import
|
||||||
|
'utilities/layout',
|
||||||
|
'utilities/separator';
|
||||||
|
|
||||||
|
// Components
|
||||||
|
@import
|
||||||
|
'components/page',
|
||||||
|
'components/article',
|
||||||
|
'components/tag',
|
||||||
|
'components/archives';
|
||||||
|
|
||||||
|
// Vendor
|
||||||
|
@import
|
||||||
|
'vendor/highlight';
|
||||||
|
|
BIN
favicon.ico
Normal file
BIN
favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 301 KiB |
30
feed.xml
Normal file
30
feed.xml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
layout: null
|
||||||
|
---
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>{{ site.title | xml_escape }}</title>
|
||||||
|
<description>{{ site.description | xml_escape }}</description>
|
||||||
|
<link>{{ site.url }}{{ site.baseurl }}/</link>
|
||||||
|
<atom:link href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" rel="self" type="application/rss+xml"/>
|
||||||
|
<pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
|
||||||
|
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
|
||||||
|
<generator>Jekyll v{{ jekyll.version }}</generator>
|
||||||
|
{% for post in site.posts limit:10 %}
|
||||||
|
<item>
|
||||||
|
<title>{{ post.title | xml_escape }}</title>
|
||||||
|
<description>{{ post.content | xml_escape }}</description>
|
||||||
|
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
|
||||||
|
<link>{{ post.url | prepend: site.baseurl | prepend: site.url }}</link>
|
||||||
|
<guid isPermaLink="true">{{ post.url | prepend: site.baseurl | prepend: site.url }}</guid>
|
||||||
|
{% for tag in post.tags %}
|
||||||
|
<category>{{ tag | xml_escape }}</category>
|
||||||
|
{% endfor %}
|
||||||
|
{% for cat in post.categories %}
|
||||||
|
<category>{{ cat | xml_escape }}</category>
|
||||||
|
{% endfor %}
|
||||||
|
</item>
|
||||||
|
{% endfor %}
|
||||||
|
</channel>
|
||||||
|
</rss>
|
32
index.html
Normal file
32
index.html
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
layout: page
|
||||||
|
title: Home
|
||||||
|
---
|
||||||
|
<section class="c-archives">
|
||||||
|
<link rel="shortcut icon" href="">
|
||||||
|
{% for post in site.posts %}
|
||||||
|
{% capture this_year %}{{ post.date | date: "%Y" }}{% endcapture %}
|
||||||
|
{% capture next_year %}{{ post.previous.date | date: "%Y" }}{% endcapture %}
|
||||||
|
{% if forloop.first %}
|
||||||
|
<h2 class="c-archives__year" id="{{ this_year }}-ref">{{this_year}}</h2>
|
||||||
|
<ul class="c-archives__list">
|
||||||
|
{% endif %}
|
||||||
|
<li class="c-archives__item">
|
||||||
|
<h3>
|
||||||
|
<a href="{{ post.url | prepend: site.baseurl }}">{{post.title}}</a>
|
||||||
|
<br>
|
||||||
|
<small>{{post.description}}</small>
|
||||||
|
</h3>
|
||||||
|
<p>{{ post.date | date: "%b %-d, %Y" }}</p>
|
||||||
|
</li>
|
||||||
|
{% if forloop.last %}
|
||||||
|
</ul>
|
||||||
|
{% else %}
|
||||||
|
{% if this_year != next_year %}
|
||||||
|
</ul>
|
||||||
|
<h2 class="c-archives__year" id="{{ next_year }}-ref">{{next_year}}</h2>
|
||||||
|
<ul class="c-archives__list">
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</section>
|
Loading…
Reference in New Issue
Block a user