Compare commits

..

No commits in common. "master" and "jekyll" have entirely different histories.

216 changed files with 3786 additions and 16427 deletions

2
.dockerignore Normal file
View File

@ -0,0 +1,2 @@
node_modules
vendor

View File

@ -1,24 +0,0 @@
kind: pipeline
type: docker
name: default
steps:
- name: Build and push
image: plugins/docker
settings:
repo: u8.pub/uetchy/uechi.io
tags: latest
registry: u8.pub
username:
from_secret: docker_username
password:
from_secret: docker_password
- name: Trigger Watchtower Update
image: alpine/curl
commands:
- |
curl -s -H "Authorization: Bearer $WATCHTOWER_TOKEN" https://wt.uechi.io/v1/update
environment:
WATCHTOWER_TOKEN:
from_secret: watchtower_token

View File

@ -0,0 +1,19 @@
---
label: Blog post
hide_body: false
fields:
- type: text
name: title
label: title
config:
required: false
- type: datetime
name: date
label: date
default: now
config:
required: true
pages:
- _posts/2019-10-25-bose-noise-cancelling-headphones-700レビュー.md
- _posts/pixiv-spring-boot-camp-2020.md
- _posts/静寂を得る方法.md

31
.forestry/settings.yml Normal file
View File

@ -0,0 +1,31 @@
---
new_page_extension: md
auto_deploy: false
admin_path: ''
webhook_url:
sections:
- type: jekyll-posts
label: Posts
create: documents
templates:
- blog-post
- type: directory
path: _pages
label: Pages
create: documents
match: "**/*"
upload_dir: _uploads
public_path: "/uploads"
front_matter_path: ''
use_front_matter_path: false
file_template: ":filename:"
build:
preview_env:
- JEKYLL_ENV=staging
preview_output_directory: _site
install_dependencies_command: bundle install --path vendor/bundle
preview_docker_image: forestryio/ruby:2.6
mount_path: "/srv"
working_dir: "/srv"
instant_preview_command: bundle exec jekyll serve --drafts --unpublished --future
--port 8080 --host 0.0.0.0 -d _site

22
.gitignore vendored
View File

@ -1,13 +1,9 @@
.deploy*
.drone.secrets
.DS_Store
.obsidian
.sass-cache
*.log
/data
/public
db.json
node_modules
npm-debug.log
Thumbs.db
TODO
/.vscode
/_site
/.sass-cache
/node_modules/
/npm-debug.log
/.jekyll-metadata
/images/crushed
/.bundle
/vendor/bundle/

View File

@ -1,2 +0,0 @@
scaffolds/*
*.ejs

View File

@ -1,8 +1,10 @@
{
"rules": {
"max-ten": true,
"no-start-duplicated-conjunction": {
"interval": 2
},
"no-dropping-the-ra": true,
"common-misspellings": true,
"preset-japanese": {
"sentence-length": false
@ -10,7 +12,9 @@
},
"filters": {
"whitelist": {
"allow": ["/{%.+?%}/"]
"allow": [
"/{%.+?%}/"
]
}
}
}

6
.travis.yml Normal file
View File

@ -0,0 +1,6 @@
language: node_js
node_js: stable
notifications:
email:
on_success: never
on_failure: change

79
.vscode/settings.json vendored
View File

@ -1,79 +0,0 @@
{
"favorites.sortDirection": "ASC",
"cSpell.words": [
"actionunban",
"afdesign",
"afphoto",
"alsa",
"alsamixer",
"aplay",
"ARGF",
"asdeps",
"asound",
"Asoundrc",
"asym",
"aufs",
"authsucc",
"BALMUDA",
"bootctl",
"BROMPTON",
"bvolume",
"chsh",
"devfs",
"devtmpfs",
"diskio",
"dmsetup",
"dports",
"EARIN",
"eate",
"fdisk",
"fstrim",
"genfstab",
"genpsk",
"gptfdisk",
"hljs",
"hwclock",
"ignoreip",
"JPRS",
"krita",
"lshw",
"lsinitcpio",
"mailu",
"mkinitcpio",
"MOTIV",
"Mycroft",
"ncdu",
"netdev",
"noauto",
"NOEXEC",
"nofail",
"NOPASSWD",
"nullok",
"nvidiactl",
"pacmd",
"pqrs",
"pygmentize",
"pygments",
"Remo",
"resolv",
"resolvectl",
"SECOM",
"Sectigo",
"setenv",
"Shure",
"smartctl",
"smartd",
"squashfs",
"STEPCA",
"sysroot",
"systohc",
"timedatectl",
"timesyncd",
"tinysshd",
"tsched",
"userdbctl",
"vcckp",
"wipefs",
"xfsprogs"
]
}

1
CNAME Normal file
View File

@ -0,0 +1 @@
uechi.io

View File

@ -1,21 +0,0 @@
FROM node:16 as build
# https://github.com/jgm/pandoc/releases
RUN curl -LO https://github.com/jgm/pandoc/releases/download/2.14.0.1/pandoc-2.14.0.1-1-amd64.deb
RUN dpkg -i pandoc-2.14.0.1-1-amd64.deb
WORKDIR /app
COPY plugins plugins
COPY package.json package-lock.json ./
RUN npm ci
COPY themes themes
COPY source source
COPY _config.yml ./
RUN npm run build
FROM nginx:stable-alpine as runtime
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /app/public /var/www/html/

3
Gemfile Normal file
View File

@ -0,0 +1,3 @@
source 'https://rubygems.org'
gem 'github-pages', group: :jekyll_plugins # workaround https://github.com/github/pages-gem#usage

258
Gemfile.lock Normal file
View File

@ -0,0 +1,258 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (6.0.3.3)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
zeitwerk (~> 2.2, >= 2.2.2)
addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.11.1)
colorator (1.1.0)
commonmarker (0.17.13)
ruby-enum (~> 0.5)
concurrent-ruby (1.1.7)
dnsruby (1.61.4)
simpleidn (~> 0.1)
em-websocket (0.5.2)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
ethon (0.12.0)
ffi (>= 1.3.0)
eventmachine (1.2.7)
execjs (2.7.0)
faraday (1.0.1)
multipart-post (>= 1.2, < 3)
ffi (1.13.1)
forwardable-extended (2.6.0)
gemoji (3.0.1)
github-pages (207)
github-pages-health-check (= 1.16.1)
jekyll (= 3.9.0)
jekyll-avatar (= 0.7.0)
jekyll-coffeescript (= 1.1.1)
jekyll-commonmark-ghpages (= 0.1.6)
jekyll-default-layout (= 0.1.4)
jekyll-feed (= 0.13.0)
jekyll-gist (= 1.5.0)
jekyll-github-metadata (= 2.13.0)
jekyll-mentions (= 1.5.1)
jekyll-optional-front-matter (= 0.3.2)
jekyll-paginate (= 1.1.0)
jekyll-readme-index (= 0.3.0)
jekyll-redirect-from (= 0.15.0)
jekyll-relative-links (= 0.6.1)
jekyll-remote-theme (= 0.4.1)
jekyll-sass-converter (= 1.5.2)
jekyll-seo-tag (= 2.6.1)
jekyll-sitemap (= 1.4.0)
jekyll-swiss (= 1.0.0)
jekyll-theme-architect (= 0.1.1)
jekyll-theme-cayman (= 0.1.1)
jekyll-theme-dinky (= 0.1.1)
jekyll-theme-hacker (= 0.1.1)
jekyll-theme-leap-day (= 0.1.1)
jekyll-theme-merlot (= 0.1.1)
jekyll-theme-midnight (= 0.1.1)
jekyll-theme-minimal (= 0.1.1)
jekyll-theme-modernist (= 0.1.1)
jekyll-theme-primer (= 0.5.4)
jekyll-theme-slate (= 0.1.1)
jekyll-theme-tactile (= 0.1.1)
jekyll-theme-time-machine (= 0.1.1)
jekyll-titles-from-headings (= 0.5.3)
jemoji (= 0.11.1)
kramdown (= 2.3.0)
kramdown-parser-gfm (= 1.1.0)
liquid (= 4.0.3)
mercenary (~> 0.3)
minima (= 2.5.1)
nokogiri (>= 1.10.4, < 2.0)
rouge (= 3.19.0)
terminal-table (~> 1.4)
github-pages-health-check (1.16.1)
addressable (~> 2.3)
dnsruby (~> 1.60)
octokit (~> 4.0)
public_suffix (~> 3.0)
typhoeus (~> 1.3)
html-pipeline (2.14.0)
activesupport (>= 2)
nokogiri (>= 1.4)
http_parser.rb (0.6.0)
i18n (0.9.5)
concurrent-ruby (~> 1.0)
jekyll (3.9.0)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 0.7)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 2.0)
kramdown (>= 1.17, < 3)
liquid (~> 4.0)
mercenary (~> 0.3.3)
pathutil (~> 0.9)
rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
jekyll-avatar (0.7.0)
jekyll (>= 3.0, < 5.0)
jekyll-coffeescript (1.1.1)
coffee-script (~> 2.2)
coffee-script-source (~> 1.11.1)
jekyll-commonmark (1.3.1)
commonmarker (~> 0.14)
jekyll (>= 3.7, < 5.0)
jekyll-commonmark-ghpages (0.1.6)
commonmarker (~> 0.17.6)
jekyll-commonmark (~> 1.2)
rouge (>= 2.0, < 4.0)
jekyll-default-layout (0.1.4)
jekyll (~> 3.0)
jekyll-feed (0.13.0)
jekyll (>= 3.7, < 5.0)
jekyll-gist (1.5.0)
octokit (~> 4.2)
jekyll-github-metadata (2.13.0)
jekyll (>= 3.4, < 5.0)
octokit (~> 4.0, != 4.4.0)
jekyll-mentions (1.5.1)
html-pipeline (~> 2.3)
jekyll (>= 3.7, < 5.0)
jekyll-optional-front-matter (0.3.2)
jekyll (>= 3.0, < 5.0)
jekyll-paginate (1.1.0)
jekyll-readme-index (0.3.0)
jekyll (>= 3.0, < 5.0)
jekyll-redirect-from (0.15.0)
jekyll (>= 3.3, < 5.0)
jekyll-relative-links (0.6.1)
jekyll (>= 3.3, < 5.0)
jekyll-remote-theme (0.4.1)
addressable (~> 2.0)
jekyll (>= 3.5, < 5.0)
rubyzip (>= 1.3.0)
jekyll-sass-converter (1.5.2)
sass (~> 3.4)
jekyll-seo-tag (2.6.1)
jekyll (>= 3.3, < 5.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-swiss (1.0.0)
jekyll-theme-architect (0.1.1)
jekyll (~> 3.5)
jekyll-seo-tag (~> 2.0)
jekyll-theme-cayman (0.1.1)
jekyll (~> 3.5)
jekyll-seo-tag (~> 2.0)
jekyll-theme-dinky (0.1.1)
jekyll (~> 3.5)
jekyll-seo-tag (~> 2.0)
jekyll-theme-hacker (0.1.1)
jekyll (~> 3.5)
jekyll-seo-tag (~> 2.0)
jekyll-theme-leap-day (0.1.1)
jekyll (~> 3.5)
jekyll-seo-tag (~> 2.0)
jekyll-theme-merlot (0.1.1)
jekyll (~> 3.5)
jekyll-seo-tag (~> 2.0)
jekyll-theme-midnight (0.1.1)
jekyll (~> 3.5)
jekyll-seo-tag (~> 2.0)
jekyll-theme-minimal (0.1.1)
jekyll (~> 3.5)
jekyll-seo-tag (~> 2.0)
jekyll-theme-modernist (0.1.1)
jekyll (~> 3.5)
jekyll-seo-tag (~> 2.0)
jekyll-theme-primer (0.5.4)
jekyll (> 3.5, < 5.0)
jekyll-github-metadata (~> 2.9)
jekyll-seo-tag (~> 2.0)
jekyll-theme-slate (0.1.1)
jekyll (~> 3.5)
jekyll-seo-tag (~> 2.0)
jekyll-theme-tactile (0.1.1)
jekyll (~> 3.5)
jekyll-seo-tag (~> 2.0)
jekyll-theme-time-machine (0.1.1)
jekyll (~> 3.5)
jekyll-seo-tag (~> 2.0)
jekyll-titles-from-headings (0.5.3)
jekyll (>= 3.3, < 5.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
jemoji (0.11.1)
gemoji (~> 3.0)
html-pipeline (~> 2.2)
jekyll (>= 3.0, < 5.0)
kramdown (2.3.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.3)
listen (3.2.1)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.3.6)
mini_portile2 (2.4.0)
minima (2.5.1)
jekyll (>= 3.5, < 5.0)
jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1)
minitest (5.14.2)
multipart-post (2.1.1)
nokogiri (1.10.10)
mini_portile2 (~> 2.4.0)
octokit (4.18.0)
faraday (>= 0.9)
sawyer (~> 0.8.0, >= 0.5.3)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (3.1.1)
rb-fsevent (0.10.4)
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.4)
rouge (3.19.0)
ruby-enum (0.8.0)
i18n
rubyzip (2.3.0)
safe_yaml (1.0.5)
sass (3.7.4)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
sawyer (0.8.2)
addressable (>= 2.3.5)
faraday (> 0.8, < 2.0)
simpleidn (0.1.1)
unf (~> 0.1.4)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
thread_safe (0.3.6)
typhoeus (1.4.0)
ethon (>= 0.9.0)
tzinfo (1.2.7)
thread_safe (~> 0.1)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.7)
unicode-display_width (1.7.0)
zeitwerk (2.4.0)
PLATFORMS
ruby
DEPENDENCIES
github-pages
BUNDLED WITH
2.1.4

View File

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2013-2022 Yasuaki Uechi (https://uechi.io)
Copyright (c) 2019 Yasuaki Uechi (https://uechi.io)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,10 +0,0 @@
deploy: build
docker rm -f uechiio uechiio-cron
docker compose -f docker-compose.production.yml up -d
build:
docker compose build --pull
push:
docker compose push

View File

@ -1,16 +1,24 @@
# uechi.io
[![Build Status](https://build.u8.pub/api/badges/uetchy/uechi.io/status.svg)](https://build.u8.pub/uetchy/uechi.io)
[![Build Status](https://travis-ci.com/uetchy/uechi.io.svg?branch=master)](https://travis-ci.org/uetchy/uechi.io)
## Dev
## Build
```bash
npm start
```
docker-compose run web bundle install
docker-compose up --build
```
## Test
```
npm install
npm test
```
## Publish
```bash
```
git commit -m "New article"
git push
```

View File

@ -1,147 +1,47 @@
# Hexo Configuration
## Docs: https://hexo.io/docs/configuration.html
## Source: https://github.com/hexojs/hexo/
# Site
---
title: uechi.io
subtitle: ""
description: "Random posts from uetchy"
keywords:
author: Yasuaki Uechi
language: en
timezone: "Asia/Tokyo"
excerpt:
depth: 1
github:
username: uetchy
timezone: Asia/Tokyo
collections:
posts:
title: Posts
output: true
uploads:
title: Uploads
output: true
defaults:
- scope:
path: ''
type: posts
values:
layout: post
permalink: "/blog/:title"
description: Random posts from @uetchy.
url: https://uechi.io
email: y@uechi.io
twitter:
username: uechz
umami:
host: analytics.uechi.io
id: 2739f9aa-b8d5-45fa-8972-07a5bbb87e8a
node_sass:
outputStyle: nested
precision: 5
sourceComments: false
sass:
outputStyle: expanded
# URL
## If your site is put in a subdirectory, set url as 'http://example.com/child' and root as '/child/'
url: https://uechi.io
root: /
permalink: /blog/:name/
permalink_defaults:
pretty_urls:
trailing_index: true # Set to false to remove trailing 'index.html' from permalinks
trailing_html: true # Set to false to remove trailing '.html' from permalinks
# Directory
source_dir: source
public_dir: public
tag_dir: tags
archive_dir: archives
category_dir: categories
code_dir: downloads/code
i18n_dir: :lang
skip_render:
# Writing
new_post_name: :title.md # File name of new posts
default_layout: post
titlecase: false # Transform title into titlecase
external_link:
enable: true # Open external links in new tab
field: site # Apply to the whole site
exclude: ""
filename_case: 0
render_drafts: false
relative_link: false
future: true
post_asset_folder: true
marked:
prependRoot: true
postAsset: true
# Math
mathjax:
tags: none # or 'ams' or 'all'
single_dollars: true # enable single dollar signs as in-line math delimiters
cjk_width: 0.9 # relative CJK char width
normal_width: 0.6 # relative normal (monospace) width
append_css: true # add CSS to pages rendered by MathJax
every_page: true # if true, every page will be rendered by MathJax regardless the `mathjax` setting in Front-matter
# Highlight
highlight:
enable: true
line_number: false
auto_detect: false
tab_replace: ""
wrap: false
hljs: true
prismjs:
enable: false
# Home page setting
# path: Root path for your blogs index page. (default = '')
# per_page: Posts displayed per page. (0 = disable pagination)
# order_by: Posts order. (Order by date descending by default)
index_generator:
path: ""
per_page: 20
order_by: -date
# Category & Tag
default_category: uncategorized
category_map:
tag_map:
# Metadata elements
## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta
meta_generator: true
# Date / Time format
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: YYYY-MM-DD
time_format: HH:mm:ss
## updated_option supports 'mtime', 'date', 'empty'
updated_option: "mtime"
# Pagination
## Set per_page to 0 to disable pagination
per_page: 20
pagination_dir: page
# Include / Exclude file(s)
## include:/exclude: options only apply to the 'source/' folder
# include:
# exclude:
ignore:
# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: uio
# Feed
feed:
limit: 20
order_by: "-date"
tag_dir: "tag"
category_dir: "category"
rss:
enable: false
jsonFeed:
enable: true
output: "feed.json"
atom:
enable: true
output: "feed.xml"
github:
username: uetchy
logo: "/images/icon.png"
excerpt_separator: "#"
google_analytics: UA-28919359-12
plugins:
- jekyll-redirect-from
- jekyll-sitemap
- jekyll-seo-tag
- jekyll-feed
- jemoji
include:
- _pages
exclude:
- README.md
- LICENSE
- CNAME
- Gemfile
- Gemfile.lock
- package.json
- node_modules
- script
- vendor
- docker-compose.yml
- Dockerfile

0
_data/.keep Normal file
View File

0
_drafts/.keep Normal file
View File

View File

@ -0,0 +1,12 @@
---
title: Deconvolutionと呼ぶのはもうやめよう
date: 2017-03-05 13:44:00 +09:00
---
深層学習において、Convolutional Layer (畳み込み層)とは、あるシェイプのテンソルをそれ以下のサイズに縮約する性質のレイヤーです。一方で Deconvolution Layer (逆畳み込み層)とは、[Jonathan Long, et al](https://arxiv.org/abs/1411.4038)の論文で提案されたレイヤーで、あるシェイプのテンソルをそれ以上のサイズに拡大する性質を持ちます。
ところが実際のところ、このレイヤーは Transposed Convolution Layer (転置畳み込み層)と呼ぶべきです。なぜかを以下に示します。
> Upsampling is backwards strided convolution. (アップサンプリングは
[Stack Exchange](http://datascience.stackexchange.com/questions/6107/what-are-deconvolutional-layers)での議論を踏まえると

View File

@ -0,0 +1,11 @@
---
title: 'gst: a powerful pal for ghq'
date: 2017-06-02 23:02:00 +09:00
---
[gst](https://github.com/uetchy/gst) is tiny and simple but powerful pal for [ghq](https://github.com/motemen/ghq).
Have you ever imagined what if you know which commits are unpushed or which changes are uncommitted yet, for all of the repositories you have cloned on your machine?
You might want to check out my ongoing project `gst`:
it might help you to know what ongoing changes are remained to be committed or pushed among entire your local repositories.

View File

@ -0,0 +1,46 @@
---
date: 2020-03-16 18:19:11 +0900
title: pixiv SPRING BOOT CAMP 2020
---
[pixiv SPRING BOOT CAMP 2020](https://www.pixiv.co.jp/news/recruit/article/8728/)に参加した。インターン自体が初めてということもあり、普段とは種類の異なる様々な知見を得ることができたので共有したい。
## 選考
選考は Google Hangout Meet を用いたオンラインセッションで実施された。質問内容は以下の通りである。
- 自己紹介
- コースの希望とその理由
- 簡単なコーディングテスト
フロントエンドを希望したため、コーディングテストは JavaScript を用いてフォーム画面を設計するという内容になっていた。
React を用いて MVP を実装し、それからインタビュワーのツッコミを打ち返すという形式であった。
選考結果は次の日に通知された。選考に関するフローは洗練されており、よく設計されているように感じた。
## オリエンテーション
- NDA
- ラジオ体操
- 自己紹介
## 業務
- iMac
- YubiKey
- 課題 1. psd.js の TypeScript 移植
- 課題 2. 通知 API の JSON API 化+React 化
- 同人誌入稿画面のレスポンシブ化
- 新しい入稿フローの提案
### ランチ
- タコライス
- LINE Pay
- PayPay
## 成果発表
## 感想
### 社風

View File

@ -0,0 +1,14 @@
---
date: 2020-02-13 16:22:05 +0900
title: 静寂を得る方法
---
聴覚過敏であったり、そうでなくとも周りの音がパフォーマンスに悪影響となる人のために、静寂を得る方法を紹介します。
## EARIN M-2
[EARIN](https://earin.com/) は左右分離型Bluetoothイヤホンです。付属のイヤホンの代わりに自分の耳にフィットするComplyのイヤーチップと付け替えます。
## Moldex
Moldex は使い捨て耳栓のメーカーであり、各種遮音レベルに分かれた多様なラインナップを提供しています。

25
_includes/footer.html Normal file
View File

@ -0,0 +1,25 @@
<!-- Google Analytics -->
<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 }}', 'auto')
ga('send', 'pageview')
</script>

53
_includes/head.html Normal file
View File

@ -0,0 +1,53 @@
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="shortcut icon" href="{{ site.baseurl }}/images/favicon.ico" />
<link
rel="apple-touch-icon"
sizes="180x180"
href="{{ site.baseurl }}/images/apple-touch-icon.png"
/>
<link
rel="icon"
type="image/png"
href="{{ site.baseurl }}/images/favicon-32x32.png"
sizes="32x32"
/>
<link
rel="icon"
type="image/png"
href="{{ site.baseurl }}/images/favicon-16x16.png"
sizes="16x16"
/>
<link
rel="mask-icon"
href="{{ site.baseurl }}/images/safari-pinned-tab.svg"
color="#5bbad5"
/>
{% seo %} {% feed_meta %}
<!-- Normalize -->
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/normalize/7.0.0/normalize.min.css"
/>
<!-- Share -->
<script
defer
src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.8"
id="facebook-jssdk"
></script>
<script
defer
src="https://platform.twitter.com/widgets.js"
id="twitter-wjs"
></script>
<!-- Styles -->
<link rel="stylesheet" href="{{ site.baseurl }}/css/index.css" />
</head>

24
_includes/header.html Normal file
View File

@ -0,0 +1,24 @@
<header class="header">
<a class="logo" href="{{ site.baseurl }}/"
><img src="{{ site.baseurl }}/images/logo.svg" style="height: 50px"
/></a>
<nav>
<ul class="menu">
<li class="menu__item">
<a href="/me">Me</a>
</li>
<li class="menu__item">
<a href="https://github.com/{{ site.github.username }}">GitHub</a>
</li>
<li class="menu__item">
<a href="https://twitter.com/{{ site.twitter.username }}">Twitter</a>
</li>
<li class="menu__item">
<a href="/wallpaper">Wallpaper</a>
</li>
<li class="menu__item">
<a href="/pay">Pay</a>
</li>
</ul>
</nav>
</header>

9
_layouts/article.html Normal file
View File

@ -0,0 +1,9 @@
---
layout: default
---
<section>
<article class="article">
<div class="article__content">{{ content }}</div>
</article>
</section>

10
_layouts/default.html Normal file
View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
{% include head.html %}
<body>
{% include header.html %}
{{ content }}
{% include footer.html %}
</body>
</html>

61
_layouts/post.html Normal file
View File

@ -0,0 +1,61 @@
---
layout: default
---
<section>
<article class="article">
<hgroup class="article__metadata">
{% if page.date %}
<h3 class="article__pubdate">
<time pubdate>{{ page.date | date: '%B %d, %Y' | upcase }}</time>
</h3>
{% endif %}
<h2 class="article__title">{{ page.title }}</h2>
</hgroup>
<div class="article__content">{{ content }}</div>
<!-- Social buttons -->
<div id="fb-root"></div>
<div class="article__social">
<a
href="https://twitter.com/share"
class="twitter-share-button"
data-size="large"
>Tweet</a
>
<div
class="fb-like"
data-layout="button"
data-action="like"
data-size="large"
data-show-faces="false"
data-share="true"
></div>
</div>
</article>
</section>
<!-- MathJax -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
processEscapes: true
}
});
</script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script>
</script>
<!-- Syntax Highlight -->
<link
rel="stylesheet"
href="https://unpkg.com/highlight.js@9.18.1/styles/night-owl.css"
/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/languages/go.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/languages/scss.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/languages/lua.min.js"></script>
<script>
hljs.initHighlightingOnLoad()
</script>

26
_pages/404.html Normal file
View File

@ -0,0 +1,26 @@
---
title: Page Not Found
permalink: "/404.html"
excerpt: ''
---
<!DOCTYPE html>
<html>
{% include head.html %}
<style>
h1 {
font-size: 12em;
font-weight: 100;
margin: 0;
}
</style>
<body>
{% include header.html %}
<section class='page-section error-page'>
<div class='container-narrow text-center py-md-8'>
<h1>404</h1>
<p class="lead">This page could not be found</p>
</div>
</section>
</body>
</html>

View File

@ -5,9 +5,9 @@ permalink: "/email"
<!DOCTYPE html>
<html>
<meta name="robots" content="noindex" />
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="robots" content="noindex">
<meta charset="UTF-8">
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<body>
<style>
@ -16,9 +16,6 @@ permalink: "/email"
}
</style>
<h1>Email</h1>
<p>
You can reach me at
<a href="mailto:y@uechi.io"><code>y@uechi.io</code></a>
</p>
<p>You can reach me at <a href="mailto:y@uechi.io"><code>y@uechi.io</code></a></p>
</body>
</html>

53
_pages/index.html Normal file
View File

@ -0,0 +1,53 @@
---
permalink: "/"
layout:
---
<!DOCTYPE html>
<html>
{% include head.html %}
<body>
<div class="metro">
<h1 class="logo">
<img src="{{ site.baseurl }}/images/logo.svg" style="height: 50px" />
</h1>
<nav>
<ul class="menu">
<li class="menu__item">
<a href="/me">Me</a>
</li>
<li class="menu__item">
<a href="https://github.com/{{ site.github.username }}">GitHub</a>
</li>
<li class="menu__item">
<a href="https://twitter.com/{{ site.twitter.username }}"
>Twitter</a
>
</li>
<li class="menu__item">
<a href="/wallpaper">Wallpaper</a>
</li>
</ul>
</nav>
</div>
<section>
{% for post in site.posts %}
<article class="article-list__item">
<h2 class="article-list__item__title">
<a href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
</h2>
<!-- <time class="article-list__item__pubdate" pubdate>{{ post.date | date: '%B %d, %Y' }}</time> -->
<article class="article-list__item__excerpt">
{{ post.excerpt | strip_html | truncate: 140, "..." }}
</article>
<a
class="article-list__item__button"
href="{{ post.url | prepend: site.baseurl }}"
>Read more</a
>
</article>
{% endfor %}
</section>
{% include footer.html %}
</body>
</html>

48
_pages/me.md Normal file
View File

@ -0,0 +1,48 @@
---
title: Yasuaki Uechi
permalink: "/me"
layout: article
---
<style>
img {
width: auto !important;
}
</style>
# README
> I'm **Yasuaki Uechi**, a graduate student studying about recurrent neural networks. I was born in Okinawa, Japan in 1994 and have been living in Kanagawa.
# Contact
Reach me at `y@uechi.io` (recommended) or [@uechz](https://twitter.com/uechz) on Twitter. Beware that I'm not a person of quick reply so if you are in urgent need of a lightning response better bomb my inbox with reminders so I can prioritize your email than any other emails.
## GPG Key
Get [GPG Key](https://github.com/uetchy.gpg) on GitHub.
# Facts
- play violin, tin whistle, piano, and bodhrán. Logic Pro user.
- overall interests: ux/graphic design, webdev, machine learning (mainly nlp and generative design), behavioral economics, organization government, irish music, coffee, puzzle game
- dev interests: react, nodejs, rust, docker
- have confidence in: javascript (incl. nodejs and typescript), python, ux design, baremetal server, english
- have no confidence in: normal life stuff
- have some experience in: swift, go, ruby, rust, c++, pytorch
- language skills:
- Japanese: native
- English: TOEIC 940, TOEFL 78
- Chinese, Korean, Indonesian, German, Russian: current objectives still n00b though
- typeface fanatic
# Publishing
- [Open Source @ GitHub](https://github.com/uetchy)
- [Technical Note (English) @ dev.to](https://dev.to/uetchy)
- [Technical Note (Japanese) @ Qiita](https://qiita.com/uetchy)
- [Design Portfolio @ Behance](https://www.behance.net/uechi)
# Current Activity
- Seeking for a job

60
_pages/pay.html Normal file
View File

@ -0,0 +1,60 @@
---
title: Pay
permalink: "/pay"
layout: default
---
<div id="pay">
<section>
<p>
送金方法はオススメ順に並んでいます。いずれか都合の良い方法で送金または請求してください。
</p>
</section>
<section>
<h1>Kyash</h1>
<p>
QRコードをスキャンするか、Kyash ID
<span class="monospace">uechi</span> 宛に送金・請求してください。
</p>
<img src="/images/payment/kyash.png" width="200" height="200" />
<a class="button" href="kyash://qr/u/7175222723044580164">Kyashを開く</a>
<br />
</section>
<section>
<h1>LINE Pay</h1>
<p>LINE宛に送金・請求してください。</p>
<a class="button" href="https://line.me/ja/pay">LINE Payについて</a>
</section>
<section>
<h1>Revolut</h1>
<p><span class="monospace">yasuakpnqg</span> 宛にお送りください。</p>
<a class="button" href="https://pay.revolut.com/profile/yasuakpnqg"
>Revolutを開く</a
>
</section>
<section>
<h1>Amazon ギフトカード</h1>
<p>
メッセージアプリ経由で、または
<span class="monospace">y@uechi.io</span> 宛にお送りください。
</p>
<a class="button" href="https://www.amazon.co.jp/gp/product/B004N3APGO/"
>Amazonを開く</a
>
</section>
<section>
<h1>PayPay</h1>
<p>QRコードをスキャンして送金してください。</p>
<img src="/images/payment/paypay.png" width="200" height="200" />
<a class="button" href="https://paypay.ne.jp/">PayPayについて</a> <br />
</section>
<section>
<h1>PayPal</h1>
<p>
PayPalで
<span class="monospace">y@uechi.io</span> 宛に送金・請求してください。
</p>
<a class="button" href="https://paypal.me/uetchy">PayPalを開く</a>
<br />
</section>
</div>

View File

@ -1,14 +1,15 @@
---
title: Twitter
permalink: "/twitter"
excerpt: ''
---
<!DOCTYPE html>
<html>
<meta http-equiv="refresh" content="0; url=https://twitter.com/uechz" />
<meta name="robots" content="noindex" />
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="refresh" content="0; url=https://twitter.com/uechz">
<meta name="robots" content="noindex">
<meta charset="UTF-8">
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<body>
<style>

48
_pages/wallpaper.md Normal file
View File

@ -0,0 +1,48 @@
---
title: Wallpapers
permalink: "/wallpaper"
layout: post
---
Right-click and choose **Save Image** to download my wallpapers. All following pictures are my own work and are published on Creative Commons BY-NC-SA.
![Sunrise]({{ site.baseurl }}/images/wallpaper/sunrise.png)
![Black Matter]({{ site.baseurl }}/images/wallpaper/blackmatter.png)
![Rockstar]({{ site.baseurl }}/images/wallpaper/rockstar.png)
![Rock Mountain]({{ site.baseurl }}/images/wallpaper/rockmountain.png)
<div style="display: flex; flex-direction: row">
<div><img src="{{ site.baseurl }}/images/wallpaper/vertex.png" /></div>
<div style="margin-left: 20px"><img src="{{ site.baseurl }}/images/wallpaper/vertex2.png" /></div>
</div>
![Ridge]({{ site.baseurl }}/images/wallpaper/ridge.png)
![Starrysky Orange]({{ site.baseurl }}/images/wallpaper/starrysky-orange.png)
![Desert]({{ site.baseurl }}/images/wallpaper/desert.png)
![Bricks]({{ site.baseurl }}/images/wallpaper/bricks.png)
![Starry Sky]({{ site.baseurl }}/images/wallpaper/starrysky.png)
![Dawn]({{ site.baseurl }}/images/wallpaper/dawn.png)
![Path]({{ site.baseurl }}/images/wallpaper/path.png)
![Shrine]({{ site.baseurl }}/images/wallpaper/shrine.png)
## Monochrome
![Ridge Monochrome]({{ site.baseurl }}/images/wallpaper/ridge-mono.png)
![Ridge Monochrome 2]({{ site.baseurl }}/images/wallpaper/ridge-mono2.png)
![Desert Monochrome]({{ site.baseurl }}/images/wallpaper/desert-mono.png)
![Bricks Monochrome]({{ site.baseurl }}/images/wallpaper/bricks-mono.png)
![Shrine Monochrome]({{ site.baseurl }}/images/wallpaper/shrine-mono.png)

View File

@ -4,46 +4,54 @@ date: 2013-07-07 09:00:00 +09:00
redirect_from: "/blog/2013/07/07/install-julius-with-homebrew"
---
Homebrew を使って macOS に音声解析エンジン Julius をインストールす
Homebrew を使って macOS に音声解析エンジン Julius をインストールします。
# 前提
OS X 用のパッケージ管理ツール Homebrew がインストールされている必要がある。
インストール方法は[こちら](http://www.engineyard.co.jp/blog/2012/homebrew-os-xs-missing-package-manager/)を参照。
インストール方法
は[こちら](http://www.engineyard.co.jp/blog/2012/homebrew-os-xs-missing-package-manager/)を
参照。
# インストール
デフォルトの Homebrew リポジトリに Julius は含まれていないので、[homebrew-nlp](https://github.com/uetchy/homebrew-nlp) を tap する。
デフォルトの Homebrew リポジトリに Julius は含まれていないので
、[homebrew-nlp](https://github.com/uetchy/homebrew-nlp) を tap する。
```bash
brew tap uetchy/nlp
$ brew tap uetchy/nlp
```
Tap し終わったら、`julius``julius-dictation-kit`をインストールする。
```bash
brew install julius julius-dictation-kit
$ brew install julius julius-dictation-kit
```
これで Julius と Julius ディクテーションキットがインストールされた。
ディクテーションキットの場所は `brew --prefix julius-dictation-kit` コマンドで調べられる。
ディクテーションキットの場所は `brew --prefix julius-dictation-kit` コマンドで調
べられる。
後は、上記の `brew --prefix` コマンドでディクテーションキット内の **main.jconf**と **am-gmm.jconf** のパスを調べて `julius` に渡すことで音声認識が出来るようになる。
後は、上記の `brew --prefix` コマンドでディクテーションキット内の **main.jconf**
**am-gmm.jconf** のパスを調べて `julius` に渡すことで音声認識が出来るようにな
る。
```bash
julius \
$ julius \
-C `brew --prefix julius-dictation-kit`/share/main.jconf \
-C `brew --prefix julius-dictation-kit`/share/am-gmm.jconf
```
上記のコマンドで Julius は GMM モードで待機状態になり、喋った内容をリアルタイムで音声認識してくれるようになる。
上記のコマンドで Julius は GMM モードで待機状態になり、喋った内容をリアルタイム
で音声認識してくれるようになる。
Julius をより精密な DNN モードで起動したい場合は以下のように、**am-gmm.jconf**を **am-dnn.jconf** に変更するだけだ。
Julius をより精密な DNN モードで起動したい場合は以下のように、**am-gmm.jconf**
**am-dnn.jconf** に変更するだけだ。
```bash
julius \
$ julius \
-C `brew --prefix julius-dictation-kit`/share/main.jconf \
-C `brew --prefix julius-dictation-kit`/share/am-dnn.jconf
```
@ -51,9 +59,9 @@ julius \
ディクテーションキットに関するドキュメントは下記のコマンドから参照可能だ。
```bash
open `brew --prefix julius-dictation-kit`/share/doc
$ open `brew --prefix julius-dictation-kit`/share/doc
```
### 実行中の様子
![](/uploads/install-julius-with-homebrew.png)
![install-julius-with-homebrew](/uploads/install-julius-with-homebrew.png)

View File

@ -10,7 +10,7 @@ redirect_from: "/blog/2013/11/05/osx-http-proxy"
Mac のネットワーク環境は`networksetup -getcurrentlocation`コマンドで取得することが出来るので、
**.zshrc** 辺りに以下のシェルスクリプトを書いておけば Terminal で新しいタブを開いた時に自動でプロキシを設定してくれる。
**.zshrc** 辺りに以下のシェルスクリプトを書いておけば Terminal で新しいタブを開いた時に自動でプロキシを設定してくれるはずである
```bash
proxy=proxy.hogehoge.ac.jp
@ -39,7 +39,7 @@ git config --global url."https://".insteadOf git://
先ほどのコマンドと組み合わせることで最終的なコードは以下のようになる。
```bash switch_proxy.sh
```bash:switch_proxy.sh
proxy=proxy.hogehoge.ac.jp:80
switch_trigger=大学
@ -83,12 +83,13 @@ fi
このコードを **.zshrc** に保存して適当なターミナルで新しいセッションを開くと、`switch_trigger`で指定されたネットワーク環境下にいる時だけプロキシを通すことが出来る。
しかし既に開いているセッションに対してプロキシを適用する方法わからなかった。
既に開いているセッションに対してプロキシを適用する方法わからなかった。
Workaround として、コードを **~/.switch_proxy** 辺りに置いて、
```bash ~/.zshrc
```bash:~/.zshrc
alias nswitch=~/.switch_proxy
```
```
`.zshrc`に書いておくことで、`nswitch`とタイプしてプロキシを切り替えられるようになる。
```

View File

@ -8,7 +8,7 @@ redirect_from: "/blog/2013/12/05/qiita-alfred-workflow"
そこで、以前作った[Qiita の記事をインクリメンタルサーチする Alfred 2 Workflow](http://qiita.com/o_ame/items/f23e75bfc11e9e7b3a08)に、ストックした投稿を検索するコマンドを追加した。
![](/uploads/alfred-qiita-workflow.png)
![s1.png](/uploads/alfred-qiita-workflow.png)
> [Github リポジトリ](https://github.com/uetchy/alfred-qiita-workflow)から[ダウンロード](https://github.com/uetchy/alfred-qiita-workflow/archive/master.zip)

View File

@ -12,7 +12,7 @@ redirect_from: "/blog/2014/03/14/rails-assets-cli"
ンを利用したら良い。
```bash
gem search {package-name} --source https://rails-assets.org | grep "^rails-assets-"
$ gem search {package-name} --source https://rails-assets.org | grep "^rails-assets-"
```
`gem search` は source を指定しているにも関わらず RubyGems.org のパッケージも引
@ -20,7 +20,7 @@ gem search {package-name} --source https://rails-assets.org | grep "^rails-asset
### シェルスクリプト
```bash rails-assets.sh
```bash:rails-assets.sh
#!/bin/sh
# Usage: rails-assets [package-name] [-a]
@ -29,8 +29,9 @@ gem search $1 $2 --source https://rails-assets.org | grep "^rails-assets-"
もっと簡単に、シェル関数を定義することも出来る。
```bash ~/.zshrc
rails-assets(){
gem search $1 $2 --source https://rails-assets.org | grep "^rails-assets-"
}
```bash:~/.zshrc rails-assets(){ gem search $1 $2 --source
https://rails-assets.org | grep "^rails-assets-" }
```
```

View File

@ -68,8 +68,8 @@ alias dokku='dockland'
という具合に alias を張っておけば、まるでリモートで`dokku`を実行している感覚でローカルから`dokku`コマンドを触ることが出来る。
```bash
cd rails-app
dokku logs
$ cd rails-app
$ dokku logs
[2014-05-29 15:38:56] INFO WEBrick 1.3.1
[2014-05-29 15:38:56] INFO ruby 2.1.2 (2014-05-08) [x86_64-linux]
[2014-05-29 15:38:56] INFO WEBrick::HTTPServer#start: pid=10 port=5000

View File

@ -39,7 +39,7 @@ KNP のインストールにはありえないくらい時間が掛かる。
インストールが終わったら動作チェックをする。
```bash
juman < test.txt | knp
$ juman < test.txt | knp
# S-ID:1 KNP:4.11-CF1.1 DATE:2014/09/23 SCORE:-19.04210
今日は──┐
良い──┤

View File

@ -4,7 +4,7 @@ date: 2014-10-27 09:00:00 +09:00
redirect_from: "/blog/2014/10/27/brew-cask-downloader"
---
![](/uploads/brew-cask-downloader.png)
![image](/uploads/brew-cask-downloader.png)
homebrew-cask を単純なダウンローダーとして使う。
@ -49,8 +49,8 @@ fi
もしくは直接ダウンロードしても良い。
```bash
curl https://gist.githubusercontent.com/uetchy/eb625f922eff16eb404b/raw/brew-smash.sh -o /usr/local/bin/brew-smash
chmod +x /usr/local/bin/brew-smash
$ curl https://gist.githubusercontent.com/uetchy/eb625f922eff16eb404b/raw/brew-smash.sh -o /usr/local/bin/brew-smash
$ chmod +x /usr/local/bin/brew-smash
```
## 実際に使う
@ -58,7 +58,7 @@ chmod +x /usr/local/bin/brew-smash
以下のように`brew smash`コマンドを叩く
```bash
brew smash send-to-kindle
$ brew smash send-to-kindle
==> Fetching resources for Cask send-to-kindle
==> Downloading https://s3.amazonaws.com/sendtokindle/SendToKindleForMac-installer-v1.0.0.220.pkg
######################################################################## 100.0%
@ -77,7 +77,7 @@ Casks という名前のディレクトリがある場合、それを削除し
こういう機能いれてくれ
```bash
brew cask install virtualbox
$ brew cask install virtualbox
==> Fetching resources for Cask virtualbox

View File

@ -40,7 +40,7 @@ git clone https://github.com/uetchy/Sketch-StickyGrid.git
スクリプト内で`log`関数を呼び出すと、Console.app にログが出力される。
```js
log(context.document.gridSize);
log(context.document.gridSize)
```
## ドキュメントの情報源

View File

@ -1,5 +1,5 @@
---
title: "gulp + decomposer: Best way to sassy-@import bower components"
title: 'gulp + decomposer: Best way to sassy-@import bower components'
date: 2015-02-26 09:00:00 +09:00
redirect_from: "/blog/2015/02/26/gulp-decomposer-bower-import"
---
@ -9,13 +9,13 @@ gulp + Browserify(+ debowerify)という構成で Web サイトを作ってい
ちなみに、**debowerify** というのは、
```js
var Velocity = require("velocity");
var Velocity = require('velocity')
```
という JavaScript を、
```js
var Velocity = require("./../../bower_components/velocity/velocity.js");
var Velocity = require('./../../bower_components/velocity/velocity.js')
```
という風に、bower_components 内のパスに解決してくれる Browserify transform だ。
@ -32,17 +32,17 @@ var Velocity = require("./../../bower_components/velocity/velocity.js");
**gulpfile.js** はこのように定義しておく。
```js
var gulp = require("gulp");
var sass = require("gulp-sass");
var decomposer = require("decomposer");
var gulp = require('gulp')
var sass = require('gulp-sass')
var decomposer = require('decomposer')
gulp.task("styles", function () {
gulp.task('styles', function() {
gulp
.src("src/styles/**/*.sass")
.src('src/styles/**/*.sass')
.pipe(decomposer())
.pipe(sass({ indentedSyntax: true }))
.pipe(gulp.dest("dist/css"));
});
.pipe(gulp.dest('dist/css'))
})
```
ポイントは`sass` **よりも前**`decomposer`を挟むこと。なぜなら、外部から@import した mix-ins や変数は SASS コンパイル時に解決されるからだ。`sass`よりも後に置くと、SASS が@import を解決出来ずにエラーが発生する。
@ -50,8 +50,7 @@ gulp.task("styles", function () {
続けて SASS を書こう。
```scss
@import normalize.sass;
@import styles/font body font-family: $ff-gothic;
@import normalize.sass @import styles/font body font-family: $ff-gothic;
```
> `$ff-gothic`は [uetchy/styles](https://github.com/uetchy/styles) の _font.sass_ で定義されている font-family だ。

View File

@ -1,5 +1,5 @@
---
title: "Hugo Paper: well-simplified theme for Hugo"
title: 'Hugo Paper: well-simplified theme for Hugo'
date: 2015-07-05 09:00:00 +09:00
redirect_from: "/blog/2015/07/05/hugo-paper"
---
@ -11,5 +11,5 @@ When I created my blog, there are no well simplified [Hugo](http://gohugo.io) th
Just run following oneliner and you will be ready to start using Hugo Paper.
```bash
git submodule add https://github.com/uetchy/hugo-paper.git themes/hugo-paper && git submodule update
$ git submodule add https://github.com/uetchy/hugo-paper.git themes/hugo-paper && git submodule update
```

View File

@ -4,7 +4,7 @@ date: 2015-09-07 09:00:00 +09:00
redirect_from: "/blog/2015/09/07/alfred-qiita-workflow-in-go"
---
![](/uploads/alfred-qiita-workflow.png)
![Cover](/uploads/alfred-qiita-workflow.png)
Ruby で書かれている [Alfred Qiita Workflow](https://github.com/uetchy/alfred-qiita-workflow) を[バグ修正](https://github.com/uetchy/alfred-qiita-workflow/issues/3)のついでに Go で書き直した。

View File

@ -11,7 +11,7 @@ Atom にインストールしているパッケージと[Atom.io](https://atom.i
npm 経由でインストールする。
```bash
npm install -g atom-package-diff
$ npm install -g atom-package-diff
```
# インストール済みパッケージとスターの diff
@ -19,7 +19,7 @@ npm install -g atom-package-diff
`apd status`コマンドでインストール済みパッケージとスターしているパッケージの diff を見ることができる。
```bash
apd status
$ apd status
36 packages installed
30 packages starred
@ -37,7 +37,7 @@ Sublime-Style-Column-Selection atom-fuzzy-grep douglas language-babel language-i
`apd sync --remote`でその逆の処理を行う。つまり、スターされているパッケージを全部インストールし、それ以外をアンインストールする。
```bash
apd sync --local
$ apd sync --local
Unstaring ... project-manager
Unstaring ... react
Staring ... Sublime-Style-Column-Selection

View File

@ -132,7 +132,7 @@ Notes.app に移行しました。
## Flash
ニコニコ動画が見れなくなるので泣く泣く導入していましたが、公式で HTML5 に対応したので不要になりました。
ニコニコ動画が見れなくなるので泣く泣く導入していましたが、公式で HTML5 に対応したので不要になりました。
## [VirtualBox](https://www.virtualbox.org)

View File

@ -4,12 +4,12 @@ date: 2017-02-02 00:20:00 +09:00
redirect_from: "/blog/2017/02/02/sim-card-travel"
---
世界中で 3G 通信が出来る[GigSky](http://www.gigsky.jp)の SIM を 3 日間の台湾旅行で使ってみた。
世界中で 3G 通信が出来る[GigSky](http://www.gigsky.jp)の SIM を 3 日間の台湾旅行で使ってみました。
GigSky では、その国の最初のアクティベーションに限り、3 日・100MB 分が無料で使えるので、今回の旅行では課金をせずに SIM を使うことが出来た。
GigSky では、その国の最初のアクティベーションに限り、3 日・100MB 分が無料で使えるので、今回の旅行では課金をせずに SIM を使うことが出来ました。
料金設定は現地で購入できる SIM と比べてかなり高く、旅行先で都度 SIM を購入する手間とのトレードオフとな
料金設定は現地で購入できる SIM と比べてかなり高く、旅行先で都度 SIM を購入する手間とのトレードオフとなります
GigSky アプリをインストールしておくと、データ残量が半分以下になったタイミングでプッシュ通知を飛ばしてくれ。また、データ通信枠をトップアップする仕組みなので、追加データ枠の購入さえしなければ余計な課金をせずに済むという利点もある
GigSky アプリをインストールしておくと、データ残量が半分以下になったタイミングでプッシュ通知を飛ばしてくれます。また、データ通信枠をトップアップする仕組みなので、追加データ枠の購入さえしなければ余計な課金をせずに済むという利点があります
ただ、やはり価格設定が高めなのに加えて現地での SIM 購入はそこまで苦ではないので、3 日以上の旅行で使う機会は無いだろう。
ただ、やはり価格設定が高めなのに加えて現地での SIM 購入はそこまで苦ではないので、3 日以上の旅行で使う機会は無いでしょう。

View File

@ -0,0 +1,48 @@
---
title: Markdownフレンドリーなノートアプリ
date: 2017-02-13 21:52:00 +09:00
redirect_from: "/blog/2017/02/13/markdown-friendly-note-taking-apps"
---
UI が秀逸な Markdown ノートアプリを紹介します。
# ノートアプリの種類
ノートアプリには大きく分けて 2 種類があります。
Notes のようにノートを一箇所にまとめて管理するシングルトンタイプと、TextEdit のようにファイル毎にウィンドウが開くタイプです。
この記事では、前者を Notes タイプ、後者を TextEdit タイプと呼称し区別します。
# Notes タイプ
## Notion
<https://notion.so>
サンフランシスコの Notion Lab 社が開発する多機能ノートアプリです。Web 版、iOS/Android 版と Mac 版が用意されており、Markdown ライクな記法で自由度の高いノートテイキングが出来ます。
## Bear
<http://www.bear-writer.com>
北イタリア産のノートアプリです。記事中に **ハッシュタグ** を書き込むと、リストでまとめてくれる機能が秀逸です。
iCloud を使って、macOS と iOS アプリの間でノートを同期することが出来ます。
## SnippetsLab
<https://www.renfei.org/snippets-lab/>
正確にはスニペット管理アプリですが、Markdown+MathJax をサポートしており、数式を使ったメモを書くことが出来ます。
## Inkdrop
<https://www.inkdrop.info>
個人開発のノートアプリです。プラグインにより多くの機能を追加することが出来ます。
# TextEdit タイプ
## Typora
<https://typora.io>
エディタとプレビューが一体化したタイプのエディタです。左右分割よりも WYSIWYG エディタの方がわかりやすい派なので、これ一択です。

View File

@ -0,0 +1,28 @@
---
title: Install NVIDIA GeForce GTX TITAN X in MacPro Early 2008
date: 2017-02-13 14:20:00 +09:00
redirect_from: "/blog/2017/02/13/nvidia-titan-x-macpro-early-2008"
---
MacPro Early 2008 という骨董品に NVIDIA Titan X (Maxwell)を積んだところ、いくつかの問題にぶつかりました。この記事でそれらの問題と解決策について書きます。
# NVIDIA ドライバーが非対応
あまりにも古いアーキテクチャの MacPro に対して NVIDIA のグラフィックドライバーが対応していません。
そこで、適切なバージョンの[NVIDIA Web Driver](http://www.macvidcards.com/drivers.html)をインストールすることでこれを解決しました。
これには問題もあります。macOS のアップデートをインストールするたびに、それに対応したドライバーを都度インストールする必要がありました。
ドライバーをインストールするまでは画面に何も映りません。そこで、pkg 形式のドライバーを`scp`で MacPro に転送して、`installer`を使ってドライバーをインストールすることにしました。
```
scp driver.pkg MacPro.local:~
ssh MacPro.local
sudo installer -pkg ./driver.pkg -target /
```
# 電源ユニット(PSU)のパワー不足
TITAN X(Maxwell)が要求するパワーを MacPro の PSU は提供することが出来ません。
そこで、秋葉原の PC パーツショップで追加の PSU を購入して、GPU 専用の電源として使いました。
ここで新たな問題が生まれます。正しくパワーを提供するためには MacPro の PSU と追加の PSU を同期させる必要があり、またそれを実現するパーツもあるのですが、場合によっては GPU を破損してしまう危険性がありました。
今回は電源を同期することは見送り、個別にスイッチを入れることで解決しました。

View File

@ -11,15 +11,22 @@ Maybe you don't need `pyenv` and/or `virtualenv` in most cases.
> Don't have `brew`? Go to <https://brew.sh>.
```
brew install python
brew install python3
```
If you still need Python 2, run `brew install python@2`.
If you still need Python 2, run `brew install python`.
## Install Jupyter Notebook
```
pip install jupyter
pip3 install jupyter
python3 -m ipykernel install --user
```
You also want Python 2 kernel, so then:
```
pip install ipykernel
python -m ipykernel install --user
```
@ -27,12 +34,12 @@ That's all.
# How about `virtualenv`?
Since Python 3 got its own virtual environment tool called [venv](https://docs.python.org/3/library/venv.html), You no longer need `virtualenv`.
Since Python 3 got its own virtual environment tool called [venv](https://docs.python.org/3/library/venv.html), You no longer need `virtualenv` itself.
If you want a virtual envs on your project, run:
```
python -m venv venv
python3 -m venv venv
source ./venv/bin/activate
```

View File

@ -0,0 +1,31 @@
---
title: アップルパイ
date: 2017-04-23T05:48:00.000+00:00
categories:
- recipe
redirect_from: "/blog/2017/04/23/apple-pie"
image: "/uploads/apple-pie.jpg"
---
![apple-pie.jpg](/uploads/apple-pie.jpg)
再現性の高いアップルパイの作り方です。材料は初出時に太字にしました。
# 注意事項
* レモン汁はポッカレモンで代用可
* 範囲指定されている値は 2 回目から好みで変化させること
* 焼きあがったらただちにパイ皿を取り除くこと。冷めてからではより困難になる
# 手順
1. **富士りんご(直径 8cm)**3 個の皮を剥いて 2-3 ㎠ に切って鍋に入れる
2. **砂糖**60g・**レモン汁**大さじ2 を鍋に入れて、汁気が無くなるまで中火で 10-15 分煮る
3. 火を止めて、**切れてるバター**2 個 (= 20g)・**シナモン**を好きなだけ混ぜる
4. **冷凍パイシート**を冷蔵庫に移動し 30 分おく
5. 18cm パイ皿 (パイシートに合う皿であれば何でも良い) にシートを敷き、よく密着させる
6. 鍋の中身の熱が扱える程度に取れたらパイ皿に流し込んで広げる
7. 残りのパイシートをカットして格子状にのせる
8. **卵黄**に**水・塩**を少し混ぜ卵液を作り、シートに塗る(塗るほど焼けやすくなる)
9. 余りのシートをパイの縁にのせて卵液を薄く塗る
10. 200℃ のオーブンで 40 分焼く(15 分で 180℃ に落とす; でないと表面だけ焼けて中は生焼けになる)

View File

@ -9,15 +9,15 @@ image: http://uechi-public.s3.amazonaws.com/github/gh-compare.gif
![](http://uechi-public.s3.amazonaws.com/github/gh-compare.gif)
[gh-compare](https://github.com/uetchy/gh-compare) を作た。この小さなツールを使って、導入を検討しているライブラリ群の比較表をコマンド1つで作ることが出来
[gh-compare](https://github.com/uetchy/gh-compare) を作りました。この小さなツールを使って、導入を検討しているライブラリ群の比較表をコマンド1つで作ることが出来ます
ライブラリのリポジトリが GitHub にあることが前提になるが、プロジェクトの勢いからサイズまで俯瞰することが出来る
ライブラリのリポジトリが GitHub にあることが前提になりますが、プロジェクトの勢いからサイズまで俯瞰することが出来ます
最高と最悪の値はそれぞれ緑色と赤色に着色されるので、違いが一目瞭然でわか
最高と最悪の値はそれぞれ緑色と赤色に着色されるので、違いが一目瞭然でわかります
## インストール
`gh-compare`モジュールは`npm`からインストール出来
`gh-compare`モジュールは`npm`からインストール出来ます
```bash
npm install --global gh-compare
@ -25,10 +25,10 @@ npm install --global gh-compare
## 使い方
`gh-compare`の後にスペース区切りで比較したいリポジトリを書
`gh-compare`の後にスペース区切りで比較したいリポジトリを書きます
```bash
gh-compare facebook/react vuejs/vue riot/riot angular/angular
```
もし変な挙動を見つけたら、プロジェクトの [Issues](https://github.com/uetchy/gh-compare/issues/new) に是非書いてほしい。
もし変な挙動を見つけたら、プロジェクトの [Issues](https://github.com/uetchy/gh-compare/issues/new) に是非書いてください。

View File

@ -4,19 +4,9 @@ date: 2017-06-16 00:00:00 +09:00
redirect_from: "/blog/2017/06/16/x11forward"
---
![](/uploads/x11-plot.png)
![x11-plot.png](/uploads/x11-plot.png)
# Installation
## Remote
### Arch Linux
```bash
pacman -S xorg-xauth xorg-fonts-100dpi xorg-xeyes
```
### Ubuntu 16.04
## Ubuntu 16.04
Make sure you have installed SSH, X11 and xAuth on a remote server.
@ -26,12 +16,12 @@ sudo sed -i '/ForwardX11/s/.*/ForwardX11 yes/' /etc/ssh/sshd_config
sudo service ssh restart
```
## Client (macOS Big Sur)
## macOS Sierra
You also need to have X11 on your local machine.
```
brew install xquartz # install X11
brew cask install xquartz # install X11
ssh -X <remote>
$ xeyes # verify you have X11
```

View File

@ -0,0 +1,29 @@
---
title: デザイナーとしてOSSに貢献できること
date: 2017-12-26T15:24:00.000+00:00
redirect_from: "/blog/2017/12/27/oss-for-designers"
---
GitHub で公開されている OSS にちょっとした Pull-request を送るのが私の趣味です。
そのような Pull-request の中にはコードだけでは無く、時にロゴデザインが含まれていることもあります。
## textlint
文章校正ツールである[textlint](https://textlint.github.io/)プロジェクトの例では、作者の azu 氏が[ロゴの募集をされている Issue](https://github.com/textlint/textlint/issues/56)を見かけ、[ちょっとしたアイディア](https://github.com/textlint/textlint/issues/56#issuecomment-160050653)をコメントしたことから始まりました。
その後、[より詳細な検討](https://github.com/textlint/media/pull/1)を重ねた結果、私がデザインした textlint のロゴは無事プロジェクトに受け入れられました。
このようにプロジェクトの作者が Issue 等でロゴを募集することは一般的であり、WebAssembly のロゴも[公募のコンペティション](https://github.com/WebAssembly/design/issues/112)で決まっています。
一方で自らロゴの提案をすることもあります。
## ⌘ 英かな
macOS のキーバインドを変更するアプリである[⌘ 英かな](https://ei-kana.appspot.com/)の例では、アイコンの Enhancement を思いつき、[Pull-request](https://github.com/iMasanari/cmd-eikana/pull/5)を送ったところ、本当にすぐにマージしてくれました。
他の方の例では、[Annict](https://github.com/annict/annict/issues/120)などがあります。
## 結論
以上のように、OSS コミュニティではコードだけでなくデザインワークに対してもオープンにコミットすることが出来ます。
デザイナーの皆さんが OSS への貢献に関わる機会がますます増えることを楽しみにしています(そして OSS 開発者の多くは、クールなロゴが提案されることを心から待ち望んでいます!)

View File

@ -0,0 +1,139 @@
---
title: 普段使いしているもの
date: 2018-03-29 22:33:00 +09:00
redirect_from: "/blog/2018/03/29/products-guide"
updated: 2018-08-03 09:00:00 +09:00
---
普段使いしているプロダクトを紹介する。
「20XX 年に買ってよかったもの」を毎年書くのではなく、この記事を定期的に更新しようと思う。
# ハードウェア
## [MacBook 12"](http://www.apple.com/jp/shop/buy-mac/macbook/%E3%82%B4%E3%83%BC%E3%83%AB%E3%83%89-512gb)
スペックを犠牲にして持ち運びに極振りした超コンパクトな MacBook。
## [EARIN M-2](https://earin.com)
EARIN M-1 から買い替えた。
コンパクトさに極振りした完全無線イヤホン。万人受けしないプロダクトではあるが、その特性を理解して使えば手放せないギアになる。
[レビュー記事](https://uechi.io/blog/2018/03/24/earin-m2-first-look)
## [Bose QuietControl 30](https://www.bose.co.jp/ja_jp/products/headphones/earphones/quietcontrol-30.html)
ノイズキャンセラーイヤホン QuietComfort 20 の後継機種。ワイヤレス化して、取り回しがよくなった。QuietControl の名の通り、ノイズキャンセリングの度合いを調整するボタンが搭載されている。しかし、実際のところ最大と最小しか使わないので、ボタンを押す手間がかえって不便に感じる。
ノイズ除去能は随一なので、旅行には必ず持っていく。
## [Apple Watch series 2 Nike+](http://www.apple.com/jp/shop/buy-watch/apple-watch-nike/%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%82%B0%E3%83%AC%E3%82%A4-%E3%82%A2%E3%83%AB%E3%83%9F%E3%83%8B%E3%82%A6%E3%83%A0-%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF-%E3%83%9C%E3%83%AB%E3%83%88-%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%84%E3%83%90%E3%83%B3%E3%83%89?preSelect=false&product=MP0J2J/A&step=detail#)
最終的に以下の機能しか使わなくなった。
- 時計
- タイマー
- 運動中の心拍数や歩数の計測
- Suica
- メッセージの閲覧・返信
## [M-Audio Keystation 88](http://m-audio.com/products/view/keystation-88)
88 鍵 MIDI キーボード。Oxygen 88 が壊れたので同じメーカーの別製品に買い替えた。Oxygen 88 の重さ(21kg)に懲り、持ち運びが容易な鍵盤を選んだ。
## [BALMUDA The Pot](https://www.balmuda.com/jp/pot/)
トースターで有名な BALMUDA が 11 月に出した電気ケトル。お茶やコーヒーを飲むときしか使わないので 0.6L でも十分だと感じた。注ぎ口の切れが良く、気に入っている。
最近は Stagg EKG のような温度調整機能付きケトルが気になっている。
## [Nature Remo](https://nature.global/)
スマートな赤外線リモコン。
Google Home や Alexa、IFTTT と連携して使っている。
## [Knirps Big Duomatic Safety](http://www.knirps.jp/product.html)
知りうる中で最も大きなサイズの自動開閉折りたたみ傘。コンビニで売っている傘よりも大きいので安心感が違う。
## [Shure MOTIV MV88](https://www.shure.co.jp/go/motiv-mic/jp/mv88/)
非常にコンパクトなコンデンサーマイク。Lightning 端子を備えており、iPhone/iPad に繋いで録音ができる。
## [LEZYNE CNC Floor Drive ABS2](http://www.wiggle.jp/lezyne-cnc-floor-drive-abs2-%E3%83%95%E3%83%AD%E3%82%A2%E3%83%9D%E3%83%B3%E3%83%97/)
デザインと機能性が両立した自転車の空気入れ。仏式と米式バルブに対応している。回転するねじ込みノズルが特徴的で、BROMPTON のような小口径タイヤを持つ自転車でも問題なく使える。
## [iPad Pro 10.5 インチ](http://www.apple.com/jp/ipad-pro/)
[Apple Pencil](http://www.apple.com/jp/shop/product/MK0C2J/A/ipad-pro%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEapple-pencil)との組み合わせがとても良い。ノートを書いたり、絵を描くのに使っている。
スタンドは、Twelve South の[Compass 2](http://www.apple.com/jp/shop/product/HF022ZM/B/twelve-south-compass-2-stand-for-ipad)を使っている。折りたたむと Apple Pencil2 本分くらいに小さくなる。
# サブスクリプションサービス
## G Suite
月 540 円。
好きなドメインで Google サービスを利用出来るので使っている。Gmail にも y@uechi.io でログイン出来る。
## Apple Music
学割で月 480 円。普段の音楽ソースはこれに統一している。
## iTunes Match
CD からインポートした曲をクラウド同期するために有効化。
## iCloud Drive
写真やクラウド同期のために容量を購入した。
## Dropbox Pro
あらゆる作業データを保存しているため容量を増やした。
## Amazon Student
Prime の学割版。年間 1400 円。
## Sketch
コンピューター 1 台ごとに課金されるため非常に割高。やめたい。
## Adobe Creative Cloud
学割で月 3000 円。
## Apple Developer Program
税金。
## MoneyForward
オンライン家計簿。電子決済縛りプレイと相性が良い。
## [Namecheap](https://www.namecheap.com/)
ドメインレジストラ。お名前.com から iwantmyname、そして Namecheap へと移行してきた。この手のサービスにしては良くデザインされており、使いやすい。
一度転送でトラブルがあり、カスタマーサポートのお世話になったことがあったが、しっかりとした仕事をしてくれた。
## [Netflix](https://www.netflix.com/jp/)
既存コンテンツの配信だけに留まらず、オリジナル作品の制作にも意欲的に取り組んでいる。
観たい作品が無くなったら購読をキャンセルし、必要に応じて再購読している。
## 珈琲きゃろっと
珈琲豆の定期宅配サービス。配送日の直前に焙煎をするため豆が新鮮なのが特徴。他にも土井珈琲が同様のサービスを提供しているので比べてみて自分に合った方を選ぼう。
## TastyTable
使い切りの食材とレシピを定期的に、または都度注文で宅配してくれるサービス。
普段なら絶対に作らないような献立が提案されてくるので、週末に普段とは一風変わった食事を楽しみたい人にオススメのサービス。
## TENTAL
テントや焚き火グッズのようなキャンプ用品をレンタル出来るサービス。
テントは高価な上にほとんど買い換えないタイプの製品なので、このようなサービスを通じて様々な種類のテントを借りて実地で試して、眼を肥やしてから購入した方が良いと感じた。
3 シーズン用を買い揃えて、やる頻度の低い冬用の装備だけレンタルするという戦術もある。

View File

@ -1,8 +1,7 @@
---
title: 初キャンプに必要な機材
date: 2018-04-13 14:26:00 +09:00
redirect_from:
- "/blog/2018/04/13/camping"
redirect_from: "/blog/2018/04/13/camping"
---
先月、大洗で初めてのキャンプ泊をした。

View File

@ -0,0 +1,83 @@
---
title: 生活の自動化
date: 2018-08-05 00:00:00 +09:00
redirect_from: "/blog/2018/08/05/life-automation"
---
生活にオートメーションを上手く取り入れ、本当にやりたいことや、やるべきことに集中できる環境をつくろう。
# 洗濯の自動化
Panasonic のドラム洗濯乾燥機を使っている。威力を最大限に享受するため、タンブラー乾燥向けの普段着を揃えておくことも重要だ。
洗剤は粉と液体とが一体化したジェルボール洗剤が便利。ドラムの底にひとつ置くだけでよく、計量する必要がない。
# 食器洗いの自動化
Panasonic NC-TCR2 という一人暮らし用のコンパクト食洗乾燥機が便利。
洗濯機と同じく食洗機専用のジェルボール洗剤を使えば計量する手間を省ける。
# 照明の自動化
Hue はインターネット経由で明るさや色相をコントロールすることができる電球である。
- 「家から離れたら消灯」
- 「家に近付いたら点灯」
- 「日が暮れたら暖色系に切り替える」
- 「23 時になったら消灯」
など多様なルールを作ることができる。
家では外の明るさに合わせて照明の明るさを調整して、概日リズムが崩れにくいようにルールを決めている。
# 空調の自動化
Nature Remo でエアコンの操作を自動化した。
- 「湿度が高ければドライに変更」
- 「家から離れたら電源オフ」
- 「朝になったら冷房へ切り替え」
など多様なルールを作ることができる。
Nature Remo 自体はエアコン専用ではなく、赤外線で操作出来るデバイスであればなんでも操作できる。家ではテレビもこれで操作している。
ちなみに[Nature Remo を NodeJS で操作することができるライブラリ](https://github.com/uetchy/nature-remo)を作ったので、是非使ってみて欲しい。ライブラリ経由で温度・湿度・明度のセンサー値を取得したり、指定したモードにエアコンを切り替えることができる。
# 自動施錠・自動開錠
Qrio Lock をドアに取り付けることでオートロックとオートアンロックができるようになった。
# 睡眠記録の自動化
Withings 改め Nokia の Sleep を使っている。
睡眠を計測する際、身体にウェアラブルデバイスを身につける必要がないという点で、Nokia Sleep は Apple Watch や Fitbit よりも優れている。
機能としては、入眠・起床検知、心拍数記録、睡眠深度解析、いびき検出、IFTTT 連携がある。
# 体重記録の自動化
Withings の Wi-Fi Scale を使っている。体重と体脂肪率、心拍数、BMI を Wi-Fi 経由でクラウドに自動記録し、Apple Health などで推移を確認できる。
Wi-Fi Scale には CO2 センサーもついており、部屋の二酸化炭素濃度を記録してくれる。
# コーヒー豆のサブスクリプション
珈琲きゃろっとのサブスクリプションを利用している。
# オンラインスーパー
イトーヨーカドーのオンラインスーパーを使っている。お気に入りリストへ牛乳、オレンジ、ベーコン、卵など毎回買うものを登録しておくことで、慣れれば 5 分程度で注文が完了する。あとは指定した時間に家へ商品を届けてくれる。
# 自動家計簿
MoneyForward を使っている。支出を自動で食費、趣味、日用品などに仕分けてくれる。
無現金縛りプレイと相性が良い。
# 自炊の効率化
最近 COMP で食事を置き換え始めた。まだ評価は出来ないが少なくとも味は悪くなく(薄いきな粉のような味)、不足しがちなビタミンや鉄分を補える点では良い製品だと思う。
# 気になる製品
## ルンバ
ルンバは気になるが、絨毯を取り除くわけにもいかないので二の足を踏んでいる。ルンバについては[KainokiKaede's diary](http://kainokikaede.hatenablog.com/entry/2018/07/24/185452)の素晴らしい記事を読んで欲しい。

View File

@ -3,11 +3,11 @@ title: Know your deps on package.json in seconds
date: 2018-09-02 03:23:00 +09:00
---
![screen-1.png.jpeg](/uploads/screen-1.png.jpeg)
How do you know what packages that project/library depend on and what exactly are that packages doing for?
You'll want to quickly survey on them. So [npm-deps-list](https://github.com/uetchy/npm-deps-list) is here for.
![](/uploads/screen-1.png.jpeg)
You can install them using `npm` or `yarn`.
```bash

View File

@ -18,7 +18,7 @@ I made a simple tool to get you covered with the above guidelines.
# gh-compare
![](/uploads/screencast.gif)
![screencast.gif](/uploads/screencast.gif)
[gh-compare](https://github.com/uetchy/gh-compare) is a simple terminal app to explore your candidates and aggregate a result into a nice-looking report.
@ -27,7 +27,7 @@ npm install -g gh-compare
gh-compare facebook/react vuejs/vue riot/riot
```
![](/uploads/1xfd1gcrfntpft5bbu5s.png.jpeg)
![1xfd1gcrfntpft5bbu5s.png.jpeg](/uploads/1xfd1gcrfntpft5bbu5s.png.jpeg)
You will see the GitHub activities for each candidate at once.
It could help you to decide which library you would adopt!

View File

@ -1,5 +1,5 @@
---
title: "Math API: LaTeX Math as SVG image"
title: 'Math API: LaTeX Math as SVG image'
date: 2018-10-23 03:19:00 +09:00
---
@ -9,22 +9,25 @@ Spending some time, I made [Math API](https://math.now.sh), that renders LaTeX M
So you can place your equation on almost everywhere on which you could put `<img>` or Markdown (`![]()`), such as GitHub, Jupyter Notebook or dev.to (here!).
```markdown
![](https://math.now.sh?from=\LaTeX)
```
![Equation](https://math.now.sh?from=%5CLaTeX)
```markdown
![](https://math.now.sh?from=\log\prod^N_{i}x_{i}=\sum^N_i\log{x_i})
```
![Equation](https://math.now.sh?from=%5Clog%5Cprod%5EN_%7Bi%7Dx_%7Bi%7D%3D%5Csum%5EN_i%5Clog%7Bx_i%7D)
# Inline image
![](/uploads/fqea9nq2wv9in15lqlf3.png.jpeg)
![](/uploads/43slt0h6dfhox1xwmuti.png.jpeg)
![fqea9nq2wv9in15lqlf3.png.jpeg](/uploads/fqea9nq2wv9in15lqlf3.png.jpeg)
![43slt0h6dfhox1xwmuti.png.jpeg](/uploads/43slt0h6dfhox1xwmuti.png.jpeg)
It is possible to generate an inline equation by changing the query from `from` to `inline`.
@ -36,7 +39,7 @@ It is possible to generate an inline equation by changing the query from `from`
Also, there is the online editor available at https://math.now.sh.
![](/uploads/gg2wil3exu9lyj7ppuoy.png)
![gg2wil3exu9lyj7ppuoy.png](/uploads/gg2wil3exu9lyj7ppuoy.png)
# Conclusion

View File

@ -4,18 +4,16 @@ date: 2019-01-14 00:00:00 +09:00
redirect_from: "/blog/2019/01/14/padsize"
---
`padStart` における適切な `padSize` の求め方。
$$
\textrm{padSize} = \lceil \log_{10}(\mathbf{arraySize} + 1) \rceil
$$
```js
const padSize = Math.ceil(Math.log10(arr.length + 1));
const padSize = Math.ceil(Math.log10(arr.length + 1))
arr.forEach((item, index) => {
console.log(`${index.padStart(padSize, "0")}: ${item}`);
});
console.log(`${index.padStart(padSize, '0')}: ${item}`)
})
```
結果は以下のようになる。

View File

@ -2,10 +2,8 @@
title: 英語メモ
date: 2019-01-17T10:31:00.000+00:00
redirect_from: "/blog/2019/01/17/english-note"
---
雑多なメモです。
- spin up - 立ち上げる
- woe - 悲しみ
- a little too - 少し〜すぎる
@ -96,6 +94,8 @@ redirect_from: "/blog/2019/01/17/english-note"
> It uses the definite article before "majority of the students", as if referring to a known group.
> Next piece is gonna be a super mega holy shit giantess 👍👍👍
> This sentence uses the indefinite article before the "majority of the students". This has the effect of introducing this group of students to the reader or the listener.
> It may give a hint that the exact number of the students that will vote is uncertain: it could be 51%, but then it could be 88%.
@ -125,7 +125,7 @@ redirect_from: "/blog/2019/01/17/english-note"
> learning foreign languages is for me lifelong hobby. knowledge likely to requires much time to acquiring but it never decays.
> _sees client, whistles loudly_
> *sees client, whistles loudly*
> weston comes out of nowhere running on all fours like a gorilla towards client

View File

@ -4,76 +4,76 @@ date: 2019-06-05 00:00:00 +09:00
redirect_from: "/blog/2019/06/05/sign-and-notarize-electron-app"
---
electron-builder を利用して macOS 向け Electron アプリをコード署名し、公証を通過させ
electron-builder を利用して macOS 向け Electron アプリをコード署名し、公証を通過させます
> **tl;dr**: コード署名と公証に対応した macOS アプリ Juno のリポジトリを[GitHub で公開](https://github.com/uetchy/juno)している。
> **tl;dr**: コード署名と公証に対応した macOS アプリ Juno のリポジトリを[GitHub で公開](https://github.com/uetchy/juno)しています
# Code Sign
アプリのコード署名は`electron-builder`によって自動で行われ。内部的には[electron-osx-sign](https://github.com/electron-userland/electron-osx-sign)が使用され
アプリのコード署名は`electron-builder`によって自動で行われます。内部的には[electron-osx-sign](https://github.com/electron-userland/electron-osx-sign)が使用されます
リリース用のアプリにコード署名をするには、Keychain に有効な Developer ID Certificate が格納されている必要がある。macOS Developer Certificate は開発用のコード署名にしか使えないため、リリース用としては不十分だ
リリース用のアプリにコード署名をするには、Keychain に有効な Developer ID Certificate が格納されている必要があります。macOS Developer Certificate は開発用のコード署名のみ可能なので、リリース用としては不十分です
まだ証明書を発行していない場合は、[Apple Developer](https://developer.apple.com/account/resources/certificates/list)で証明書の追加ウィザードに進み、**Developer ID Application**を選択して証明書を発行する
まだ証明書を発行していない場合は、[Apple Developer](https://developer.apple.com/account/resources/certificates/list)で証明書の追加ウィザードに進み、**Developer ID Application**を選択して証明書を発行してください
# Notarize
コード署名済みのアプリを[electron-notarize](https://github.com/electron-userland/electron-notarize)を使用して Apple Notary Service に提出す
コード署名済みのアプリを[electron-notarize](https://github.com/electron-userland/electron-notarize)を使用して Apple Notary Service に提出します。
```js
const { notarize } = require("electron-notarize");
const { notarize } = require('electron-notarize')
notarize({
appBundleId,
appPath,
appleId,
appleIdPassword,
ascProvider,
});
})
```
- **appBundleId**: アプリの Bundle ID 。`package.json``build.appId`と同じものを使
- **appPath**: `.app`の絶対パスを指定す
- **appleId**: Apple Developer として登録している Apple ID を指定す
- **appleIdPassword**: Apple ID のパスワード。2 要素認証を必要としないパスワードが必要なので、[Apple ID](https://appleid.apple.com/#!&page=signin)にアクセスして**App-specific Password**を発行する
- **ascProvider**: Apple Developer の Membership に記載されている**Team ID**を指定す
- **appBundleId**: アプリの Bundle ID です`package.json``build.appId`と同じものを使います
- **appPath**: `.app`の絶対パスを指定します。
- **appleId**: Apple Developer として登録している Apple ID を指定します。
- **appleIdPassword**: Apple ID のパスワードです。2 要素認証を必要としないパスワードが必要なので、[Apple ID](https://appleid.apple.com/#!&page=signin)にアクセスして**App-specific Password**を発行してください
- **ascProvider**: Apple Developer の Membership に記載されている**Team ID**を指定します。
## electron-builder の afterSign フック
electron-builder の afterSign フックを使用して、コード署名が済んだアプリを自動で Notary に提出す
electron-builder の afterSign フックを使用して、コード署名が済んだアプリを自動で Notary に提出します。
フックスクリプトを`./scripts/after-sign-mac.js`に置
フックスクリプトを`./scripts/after-sign-mac.js`に置きます
```js
const path = require("path");
const { notarize } = require("electron-notarize");
const path = require('path')
const { notarize } = require('electron-notarize')
const appleId = process.env.APPLE_ID;
const appleIdPassword = process.env.APPLE_PASSWORD;
const ascProvider = process.env.ASC_PROVIDER;
const appleId = process.env.APPLE_ID
const appleIdPassword = process.env.APPLE_PASSWORD
const ascProvider = process.env.ASC_PROVIDER
const configPath = path.resolve(__dirname, "../package.json");
const appPath = path.resolve(__dirname, "../dist/mac/App.app");
const config = require(configPath);
const appBundleId = config.build.appId;
const configPath = path.resolve(__dirname, '../package.json')
const appPath = path.resolve(__dirname, '../dist/mac/App.app')
const config = require(configPath)
const appBundleId = config.build.appId
async function notarizeApp() {
console.log(`afterSign: Notarizing ${appBundleId} in ${appPath}`);
console.log(`afterSign: Notarizing ${appBundleId} in ${appPath}`)
await notarize({
appBundleId,
appPath,
appleId,
appleIdPassword,
ascProvider,
});
console.log("afterSign: Notarized");
})
console.log('afterSign: Notarized')
}
exports.default = async () => {
await notarizeApp();
};
await notarizeApp()
}
```
`package.json``build``afterSign`を追加してコード署名が終わった後にスクリプトが実行されるようにす
`package.json``build``afterSign`を追加してコード署名が終わった後にスクリプトが実行されるようにします。
```json
"build": {
@ -83,7 +83,7 @@ exports.default = async () => {
## Hardened Runtime and Entitlements
このままでは公証に失敗す。デフォルトで書き出されるバイナリでは、セキュリティの強化された[Hardened Runtime](https://developer.apple.com/documentation/security/hardened_runtime_entitlements)が有効になっていないためだ。以下のようなエラーメッセージが帰ってくる
このままでは公証に失敗します。デフォルトで書き出されるバイナリでは、セキュリティの強化された[Hardened Runtime](https://developer.apple.com/documentation/security/hardened_runtime_entitlements)が有効になっていないためです。以下のようなエラーメッセージを貰います
```json
{
@ -103,7 +103,7 @@ exports.default = async () => {
}
```
そこで、`package.json``build.mac.hardenedRuntime``true`にして Hardened Runtime を有効にす
`package.json``build.mac.hardenedRuntime``true`にして Hardened Runtime を有効にします。
```json
"build": {
@ -113,7 +113,7 @@ exports.default = async () => {
}
```
Hardened Runtime 下では、必要に応じて Entitlement を指定しなければならない。Electron の実行には`allow-unsigned-executable-memory` Entitlement が必要だ。そこで、`entitlement.plist`ファイルを`build`フォルダに作成し、以下のような plist を記述す
Hardened Runtime 下では、必要に応じて Entitlement を指定しなくてはなりません。Electron の実行には`allow-unsigned-executable-memory`という Entitlement が必要なので、`entitlement.plist`ファイルを`build`フォルダに作成し、以下のような plist を記述します。
```xml
<?xml version="1.0" encoding="UTF-8"?>
@ -126,7 +126,7 @@ Hardened Runtime 下では、必要に応じて Entitlement を指定しなけ
</plist>
```
`package.json``entitlements`及び`entitlementsInherit`に Entitlement が記述された plist のファイルパスを指定す
`package.json``entitlements`及び`entitlementsInherit`に Entitlment が記述された plist のファイルパスを指定します。
```json
"build": {
@ -138,18 +138,18 @@ Hardened Runtime 下では、必要に応じて Entitlement を指定しなけ
}
```
Hardened Runtime で Electron を実行することができるようになったので、Notary を通過できる状態になた。
Hardened Runtime で Electron を実行することができるようになったので、Notary を通過できる状態になりました。
実際に`electron-builder`を実行して、すべてのプロセスが滞りなく動作することを確かめよう
実際に`electron-builder`を実行してすべてのプロセスが上手く動作することを確かめてください
# Verify Notary Status
ただしく公証を得られたかどうかは`altool`で調べることができ
ただしく公証を得られたかどうかは`altool`で調べることができます
公証通過後に送られてくるメールに`Request Identifier`が記載されているのでメモす
公証通過後に送られてくるメールに`Request Identifier`が記載されているのでメモします。
```
Dear uetchy,
Dear Yasuaki,
Your Mac software has been notarized. You can now export this software and distribute it directly to users.
@ -161,13 +161,13 @@ Best Regards,
Apple Developer Relations
```
`xcrun altool --notarization-info`コマンドに UUID と Apple ID、パスワードを指定して公証ステータスを確認す
`xcrun altool --notarization-info`コマンドに UUID と Apple ID、パスワードを指定して公証ステータスを確認します。
```
xcrun altool --notarization-info <UUID> -u $APPLE_ID -p $APPLE_PASSWORD
```
正しく公証が得られている場合は以下のようなメッセージが表示される。おめでとう
正しく公証が得られている場合は以下のようなメッセージが表示されます。おめでとうございます
```
2019-06-05 13:51:18.236 altool[5944:261201] No errors getting notarization info.

View File

@ -9,12 +9,12 @@ That's why I created [namae](https://namae.dev).
# namae
![](/uploads/np1a40lrch9m10b1s7nz.gif)
![np1a40lrch9m10b1s7nz.gif](/uploads/np1a40lrch9m10b1s7nz.gif)
[namae](https://namae.dev) is an inter-platform name availability checker for developers and entrepreneurs.
Once you fill out a form with a name you want to use, namae will check through various registries and check if the name is already in use or not.
![](/uploads/pww3x6ycshadfiiotep9.png)
![pww3x6ycshadfiiotep9.png](/uploads/pww3x6ycshadfiiotep9.png)
# Supported Platforms
@ -40,11 +40,11 @@ Additionally, the search result comes with a list of projects which has a simila
# Name Suggestion
namae also has a unique feature called **Name Suggestion**. It suggests auto-generated names made up of common prefix/suffix and synonyms. Take look at some examples.
namae also has a unique feature called __Name Suggestion__. It suggests auto-generated names made up of common prefix/suffix and synonyms. Take look at some examples.
![](/uploads/aas52pwbrueyzrulfiae.png)
![aas52pwbrueyzrulfiae.png](/uploads/aas52pwbrueyzrulfiae.png)
![](/uploads/j6jv0rq4gin28hks1ika.png)
![j6jv0rq4gin28hks1ika.png](/uploads/j6jv0rq4gin28hks1ika.png)
Clicking the suggestion, namae completes the form with it and start searching around the registries.

View File

@ -3,11 +3,13 @@ title: プログラムの速度改善が誤差かどうかを統計的に調べ
date: 2019-10-03 17:21:00 +09:00
---
**Welch の t 検定**を用いて 2 つのベンチマークの分布の平均が等しい(速度差は誤差の範疇)か、あるいは異なる(=有意な速度改善が成されている)かどうかを判定したい
**Welch の t 検定**を用いて 2 つのベンチマークの分布の平均が等しい(速度差は誤差の範疇)か、あるいは異なる(=有意な速度改善が成されている)かどうかを判定します
ベンチマーク用に TypeScript プログラムを用意した
ベンチマーク用のTypeScriptプログラムを用意します
```ts a.ts
#### `a.ts`
```ts
function a() {
const noise = Math.random() - 0.5;
const offset = 1.0;
@ -17,7 +19,9 @@ function a() {
a();
```
```ts b.ts
#### `b.ts`
```ts
function b() {
const noise = Math.random() - 0.5;
const offset = 2.0;
@ -27,15 +31,15 @@ function b() {
b();
```
まず[hyperfine](https://github.com/sharkdp/hyperfine)で 2 つの プログラムのベンチマークを取り、`result.json`に保存す
まず[hyperfine](https://github.com/sharkdp/hyperfine)で 2 つの プログラムのベンチマークを取り、`result.json`に保存します。
```shell
hyperfine 'ts-node a.ts' 'ts-node b.ts' -r 50 --warmup 3 --export-json ab.json
```
`result.json`の中身は以下のようになる
`result.json`の中身以下のようになります
```json result.json
```json
{
"results": [
{
@ -78,13 +82,13 @@ hyperfine 'ts-node a.ts' 'ts-node b.ts' -r 50 --warmup 3 --export-json ab.json
}
```
> t 検定はサンプルが正規分布に従っているという仮定を置いているため、大数の法則から本当はもっと試行回数を増やした方が良い。
> t検定はサンプルが正規分布に従っているという仮定を置いているので、大数の法則から本当はもっと試行回数を増やした方が良いです
この`result.json``times`配列を受け取り、2 つの分布間に有意差があるかどうかを判定す
この`result.json``times`配列を受け取り、2 つの分布間に有意差があるかどうかを判定します。
```ts
import fs from "fs";
import { jStat } from "jstat";
import fs from 'fs';
import {jStat} from 'jstat';
const log = console.log;
@ -123,10 +127,10 @@ const Y = result.results[1].times;
const p = ttest(X, Y);
log(`p = ${p}`);
log(`p < 0.05 = ${p < 0.05}`);
log(p < 0.05 ? "Possibly some difference there" : "No difference");
log(p < 0.05 ? 'Possibly some difference there' : 'No difference');
```
ここで`X_mu`は分布 X の平均、`X_sigma`は分布 X の不偏分散だ
ここで`X_mu`は分布Xの平均、`X_sigma`は分布Xの不偏分散です
$$
\begin{eqnarray}
@ -135,26 +139,26 @@ $$
\end{eqnarray}
$$
これを X Y 両方に対して求めます。さらに以下のようにして t を求める
これをXとY両方に対して求めます。さらに以下のようにしてtを求めます
$$
t = \frac{\mu_X - \mu_Y}{\sqrt{\frac{\sigma_X}{n_X} + \frac{\sigma_Y}{n_Y}}}
$$
t 分布の累積密度関数 (Cumlative Distribution Function; CDF) を定義す。面倒すぎたので[jstat](https://github.com/jstat/jstat)の`studentt.cdf`を使っ。コードを見ると、分子の積分は[シンプソンの公式](https://ja.wikipedia.org/wiki/シンプソンの公式)を使って近似していた。
t分布の累積密度関数 (Cumlative Distribution Function; CDF) を定義します。面倒すぎたので[jstat](https://github.com/jstat/jstat)の`studentt.cdf`を使ってます。コードを見ると、分子の積分は[シンプソンの公式](https://ja.wikipedia.org/wiki/シンプソンの公式)を使って近似していました。
$$
\text{CDF} =\frac{\int_0^{\frac{v}{t^2+v}}\frac{r^{\frac{v}{2}-1}}{\sqrt{1-r}}dr{}}{\text{exp}(\ln(\Gamma(\frac{v}{2}))+\ln(\Gamma(0.5))+\ln(\Gamma(\frac{v}{2}+0.5)))}
$$
CDF を用いて p 値を求める。両側検定をするので 2 を掛ける。t 分布の自由度 (degree of freedom; df) は$n-1$なので、両分布の自由度を$n_X+n_Y-2$で与え。本当は
CDFを用いてp値を求めます。両側検定をするので2を掛けます。t分布の自由度 (degree of freedom; df) は$n-1$なので、両分布の自由度を$n_X+n_Y-2$で与えます。本当は
$$
\text{df} = \frac{(\sigma_X + \sigma_Y)^2}{
\frac{\sigma_X^2}{n_X - 1} + \frac{\sigma_Y^2}{n_Y - 1}}
$$
で求める必要があるが、さぼって近似した。
で求める必要がありますが、さぼって近似しました。
$$
p = \text{CDF}(-|t|, n_X+n_Y-2) \times2
@ -162,7 +166,7 @@ $$
## 結果
異なる実行時間を示すプログラム`a`,`b`を比較すると、2 つの分布の平均が異なることが示唆された。
異なる実行時間を示すプログラム`a`,`b`を比較すると、2つの分布の平均が異なることが示唆されました。
```
❯ ts-node test.ts ab.json
@ -180,7 +184,7 @@ p < 0.05 = true
Possibly some difference there
```
p 値が 0.05 未満となり、帰無仮説「2つの分布は等しい」が棄却されたので「2つの分布は等しくない」ことがわかった。では、同じプログラム同士でベンチマークを取るとどうなるか?
p値が0.05未満となり、帰無仮説「2つの分布は等しい」が棄却されたので「2つの分布は等しくない」ことがわかりました。同じプログラム同士でベンチマークを取るとどうなるでしょうか。
```
❯ ts-node test.ts aa.json
@ -198,9 +202,9 @@ p < 0.05 = false
No difference
```
p 値が 0.05 未満ではないため、帰無仮説は棄却されず、つまり「2つの分布は等しい」ことがわかった。
p値が0.05未満ではないので、帰無仮説は棄却されず、つまり「2つの分布は等しい」ことがわかりました。
ウェルチの t 検定はスチューデントの t 検定と違って等分散性(2つの分布の分散が等しいこと)を仮定しないため、とても取り扱いやすい検定だ。もちろん等分散性のある分布でも使用できるので、基本的にはウェルチの方法を使う方針で良さそう
ウェルチのt検定はスチューデントのt検定と違って等分散性(2つの分布の分散が等しいこと)を仮定しないので、とても取り扱いやすい検定です。もちろん等分散性のある分布でも使用できるので、基本的にはウェルチの方法を使う方針で良さそうです
## 参考文献

View File

@ -0,0 +1,36 @@
---
date: 2019-10-25 19:49:01 +0900
title: Bose Noise Cancelling Headphones 700レビュー
---
Bose Noise Cancelling Headphones 700を使い始めて一ヶ月が経ったので、現時点での印象をまとめる。
## Pros
* ノイズキャンセリング性能の高さ
* デザイン
* 8台までのマルチペアリング
* 2台までのマルチポイント
* タッチコントロール
* 3段階ノイズキャンセリングレベルコントロール
* 10段階の内3つをあらかじめ選んでおき、ボタンを押してローテーションできる
* QC30は1段階ずつしか変更出来ずボタンを連打させられる仕様だったので、大きな改善
* バッテリーの持ちの良さ
* 15時間くらいは動く
* 有線対応
* 有線時もANCが働く
* USB-C充電対応
## Cons
* マルチポイント時の混線ノイズ
* 音楽再生中にもう一方のデバイスで何か通知音が鳴るとストリームに対して「プツプツ」ノイズが入る
* システムサウンドが大きすぎる(変更不可)
* 消耗部品の多さ
* ヒンジ部分はケースに仕舞う度に動かなさいといけないため消耗が心配
* 可動部が多いほど故障率は上がる
* 本体側での接続先選択が不可能
* QC30では出来ていた本体側のボタンで接続先を選択できる機能が無くなっていた
* ボタン配置のミス
* ボタンが手に触れやすい位置にあるため、ヘッドホンを外す度に間違って押してしまう
* ストリーム元とボタンの送信先が異なるバグ
* マルチポイント接続で一方のデバイスで音楽を流している際に、再生ボタンの信号が音楽を流していない方のデバイスに送信されてしまうバグがある

View File

@ -1,8 +1,8 @@
---
title: Securing Local Dev Server
date: 2020-02-07 00:00:00 +0900
---
---
Sometimes you want to interact with a local webserver with https support because of some browser APIs that are only available in an https environment.
You can easily create a self-signed TLS cert for development purposes with [`mkcert`](https://github.com/FiloSottile/mkcert).

223
_sass/post.scss Normal file
View File

@ -0,0 +1,223 @@
.article-list__item {
margin: 0 0 60px;
}
.article-list__item__title {
margin: 0 0 2px;
font-size: 40px;
}
.article-list__item__pubdate {
text-transform: uppercase;
}
.article-list__item__excerpt {
margin-top: 5px;
font-size: 20px;
color: var(--tone);
line-height: 1.6em;
word-break: break-all;
}
a.article-list__item__button {
border: 1px solid var(--tone);
border-radius: 3px;
color: var(--tone);
font-family: 'Open Sans', sans-serif;
font-size: 14px;
display: inline-block;
margin: 10px 0;
padding: 10px 17px;
text-transform: uppercase;
&:hover {
background-color: var(--tone);
color: var(--background);
}
@media screen and (max-width: $break-small) {
display: block;
text-align: center;
font-size: 17px;
padding: 15px;
&:hover {
background-color: var(--background);
color: var(--tone);
}
}
}
.article {
margin-bottom: 60px;
}
.article__social {
margin-top: 60px;
display: flex;
flex-direction: row;
justify-content: center;
}
.article__social > * {
margin-right: 4px;
}
.article__metadata {
margin: 40px 0 40px;
@media screen and (max-width: $break-small) {
margin: 25px 0 25px;
text-align: left;
}
}
.article__title {
font-size: 70px;
letter-spacing: -0.5px;
@media screen and (max-width: $break-small) {
font-size: 40px;
text-align: left;
}
}
.article__pubdate {
color: var(--tone);
font-size: 14px;
font-weight: normal;
font-family: sans-serif;
margin-bottom: 10px;
border: 1px solid var(--tone);
display: inline-block;
padding: 5px 20px;
@media screen and (max-width: $break-small) {
margin-bottom: 15px;
font-size: 10pt;
}
}
.article__content {
p {
font-size: 20px;
font-weight: normal;
line-height: 1.666em;
margin: 25px 0;
@media screen and (max-width: $break-small) {
font-size: 20px;
}
}
ul {
padding-left: 20px;
}
li {
font-size: 20px;
line-height: 1.6em;
}
a {
color: mediumslateblue;
}
h1 {
margin: 70px 0 0px;
font-size: 2.5em;
@media screen and (max-width: $break-small) {
margin: 30px 0 15px;
font-size: 1.7em;
}
}
h2 {
margin: 35px 0 15px;
font-family: sans-serif;
font-weight: bold;
font-size: 1.7em;
@media screen and (max-width: $break-small) {
margin: 20px 0 15px;
font-family: sans-serif;
font-weight: bold;
font-size: 1.5em;
}
}
h3 {
margin: 25px 0 15px;
font-family: sans-serif;
font-weight: bold;
font-size: 1.3em;
@media screen and (max-width: $break-small) {
margin: 15px 0 15px;
font-family: sans-serif;
font-weight: bold;
font-size: 1.4em;
}
}
h4 {
margin: 25px 0 15px;
font-family: sans-serif;
font-weight: bold;
@media screen and (max-width: $break-small) {
margin: 15px 0 15px;
font-family: sans-serif;
font-weight: bold;
}
}
img {
width: 100%;
height: auto;
}
blockquote {
border-left: 5px solid var(--accent);
padding-left: 20px;
margin: 0;
}
}
// Pay
#pay {
font-family: sans-serif;
.monospace {
font-family: monospace;
font-weight: bold;
padding: 0 5px;
font-size: 12pt;
user-select: all;
-webkit-user-select: all;
-moz-user-select: all;
}
p {
padding: 10px 0;
}
a.button {
margin: 10px 0;
padding: 20px;
display: block;
background: var(--text);
color: var(--background);
text-align: center;
border-radius: 2px;
}
img {
margin: 10px 0;
}
section {
margin: 50px 0;
}
}

View File

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 97 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 102 KiB

View File

Before

Width:  |  Height:  |  Size: 311 KiB

After

Width:  |  Height:  |  Size: 311 KiB

View File

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 67 KiB

View File

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 170 KiB

View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 1.8 MiB

View File

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 1.9 MiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Some files were not shown because too many files have changed in this diff Show More