Compare commits

...

73 Commits

Author SHA1 Message Date
9a9c2343d1 complete revamps
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-24 03:20:02 +09:00
aca29317c6 chore: move data path
All checks were successful
continuous-integration/drone/push Build is passing
2022-06-25 16:00:17 +09:00
cdebeb09a4 chore: unignore lockfile
All checks were successful
continuous-integration/drone/push Build is passing
2022-06-23 16:30:29 +09:00
51e6f5c9d7 chore: smol update
Some checks failed
continuous-integration/drone/push Build is failing
2022-06-23 16:24:02 +09:00
9c176438b2 chore: replace sass lib 2022-06-22 15:17:37 +09:00
fc3d5f5abb update 2022-06-22 12:01:59 +09:00
f4a2fe2daf chore: fix www redirection 2022-06-02 19:17:42 +09:00
38adc3aeb8 chore: update
All checks were successful
continuous-integration/drone/push Build is passing
2022-03-06 02:00:01 +09:00
0a09bc07ba chore: update article
All checks were successful
continuous-integration/drone/push Build is passing
2022-03-04 15:03:48 +09:00
4ee56900e9 update
All checks were successful
continuous-integration/drone/push Build is passing
2022-03-04 00:43:18 +09:00
e73e9364cd add cron
All checks were successful
continuous-integration/drone/push Build is passing
2022-02-05 12:40:04 +09:00
3becc75947 chore: change emoji
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-18 17:08:46 +09:00
ad8db157c2 chore: restart unless-stopped
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-18 17:02:40 +09:00
9833393773 feat: data volume
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-18 17:02:25 +09:00
1e703bf393 chore: fix typo
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-17 13:42:14 +09:00
9a61060170 chore: fix typo
All checks were successful
continuous-integration/drone Build is passing
2022-01-16 19:51:33 +09:00
e7453daa1a chore: fix drone
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-11 16:14:17 +09:00
eceac74e8e chore: fix drone
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-11 16:07:53 +09:00
d31e4d4d90 chore: fix drone
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-11 16:01:41 +09:00
a56a81afed chore: add drone
Some checks failed
continuous-integration/drone/push Build is failing
2022-01-11 15:55:36 +09:00
ca831cec40 chore: update 2022-01-11 00:03:36 +09:00
2a2a39f4a7 chore: update 2021-11-09 17:14:39 +09:00
fac6f1c2f7 cleanup 2021-11-08 20:40:03 +09:00
6cb2442786 chore: fix typo 2021-10-27 22:42:12 +09:00
073368e311 chore: fix ci 2021-10-27 15:54:47 +09:00
6176227dfa chore: fix ci 2021-10-27 15:53:06 +09:00
d807a0407f update 2021-10-11 12:24:57 +09:00
4fc8f4c77b update article 2021-07-28 15:22:05 +09:00
1816f001a3 chore: update 2021-07-21 00:06:13 +09:00
0164e25b69 add production config 2021-06-20 13:11:53 +09:00
8b685bca52 chore: cache multiple stages 2021-06-14 02:24:52 +09:00
20cd435743 fix article 2021-06-11 15:15:02 +09:00
e7e72727ae simplify payment page 2021-06-11 15:14:58 +09:00
7b900d92b2 fix theme 2021-06-08 22:10:25 +09:00
fc40162d5e fix branch 2021-06-08 21:08:40 +09:00
2d10c0ca80 remove CNAME 2021-06-08 21:08:05 +09:00
35dd54ca45 new articles 2021-06-08 21:04:52 +09:00
40251a91ba fix workflow 2021-06-08 21:02:01 +09:00
4f6717ef32 remove pages support 2021-06-08 21:00:32 +09:00
8e1de3f1ec cache support 2021-06-08 20:57:25 +09:00
78d820858a add watchtower 2021-06-08 20:43:42 +09:00
996f07c1bf fix workflows 2021-06-08 19:22:18 +09:00
acf6719ad2 fix dockerfile 2021-06-08 17:30:30 +09:00
a7084414b6 update articles 2021-06-08 16:50:58 +09:00
8b0111450b add nginx 2021-06-08 16:50:52 +09:00
4e9aacfab8 update 2021-06-06 21:56:40 +09:00
02b0c290ae update payments 2021-05-17 22:10:29 +09:00
1d28855a12 update links 2021-05-17 21:50:44 +09:00
087a185136 update payments 2021-05-17 21:45:17 +09:00
dependabot-preview[bot]
d9ca754951 Upgrade to GitHub-native Dependabot 2021-05-10 16:29:33 +09:00
3bdacc82e6 chore: update article 2021-05-06 13:53:02 +09:00
97de2db989 chore: update config 2021-05-06 13:52:46 +09:00
42c316a1fa update articles 2021-05-01 02:19:10 +09:00
051caa7790 chore: fix typo 2021-03-16 01:29:11 +09:00
67f0d6c485 fix typo 2021-02-28 12:40:24 +09:00
803242dde8 update article 2021-02-26 00:02:08 +09:00
0e8270cfad fix: payment 2021-02-25 23:08:48 +09:00
0c5f705b27 fix: typo 2021-02-25 22:59:32 +09:00
66b6186296 fix: typo 2021-02-25 22:36:19 +09:00
fcd16cd8cf fix: wrong language 2021-02-18 16:54:01 +09:00
e9771f6b7e update feed 2021-02-16 15:11:29 +09:00
325f206d15 fix: header 2021-02-14 17:24:36 +09:00
1ace2f62ea fix: light theme 2021-02-14 16:16:49 +09:00
fc140b995c fix: caption 2021-02-14 16:10:29 +09:00
a66fc37c03 feat: new articles 2021-02-14 15:47:14 +09:00
c5db049494 fix: 404 page 2021-02-13 22:22:34 +09:00
2afd947660 docs: rename article slug 2021-02-13 22:17:45 +09:00
ac0d966308 ci: remove travis 2021-02-13 21:47:22 +09:00
af9fde3fa9 ci: use ubuntu-20.04 2021-02-13 21:38:53 +09:00
396b7e5683 ci: use sudo 2021-02-13 21:34:27 +09:00
eecd97a8d3 ci: install pandoc 2021-02-13 21:33:34 +09:00
cc1d8047ab docs: add draft 2021-02-13 21:18:12 +09:00
039bac5e09 feat: use hexo 2021-02-13 21:18:11 +09:00
216 changed files with 16427 additions and 3786 deletions

View File

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

24
.drone.yml Normal file
View File

@ -0,0 +1,24 @@
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

@ -1,19 +0,0 @@
---
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

View File

@ -1,31 +0,0 @@
---
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,9 +1,13 @@
/.vscode
/_site
/.sass-cache
/node_modules/
/npm-debug.log
/.jekyll-metadata
/images/crushed
/.bundle
/vendor/bundle/
.deploy*
.drone.secrets
.DS_Store
.obsidian
.sass-cache
*.log
/data
/public
db.json
node_modules
npm-debug.log
Thumbs.db
TODO

2
.prettierignore Normal file
View File

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

View File

@ -1 +1 @@
{}
{}

View File

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

View File

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

79
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,79 @@
{
"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
View File

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

21
Dockerfile Normal file
View File

@ -0,0 +1,21 @@
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/

View File

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

View File

@ -1,258 +0,0 @@
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) 2019 Yasuaki Uechi (https://uechi.io)
Copyright (c) 2013-2022 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

10
Makefile Normal file
View File

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

View File

@ -1,47 +1,147 @@
---
# Hexo Configuration
## Docs: https://hexo.io/docs/configuration.html
## Source: https://github.com/hexojs/hexo/
# Site
title: uechi.io
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
subtitle: ""
description: "Random posts from uetchy"
keywords:
author: Yasuaki Uechi
language: en
timezone: "Asia/Tokyo"
excerpt:
depth: 1
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
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"

View File

View File

View File

@ -1,12 +0,0 @@
---
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

@ -1,11 +0,0 @@
---
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

@ -1,46 +0,0 @@
---
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

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

View File

@ -1,25 +0,0 @@
<!-- 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>

View File

@ -1,53 +0,0 @@
<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>

View File

@ -1,24 +0,0 @@
<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>

View File

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

View File

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

View File

@ -1,61 +0,0 @@
---
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>

View File

@ -1,26 +0,0 @@
---
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

@ -1,53 +0,0 @@
---
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>

View File

@ -1,48 +0,0 @@
---
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

View File

@ -1,60 +0,0 @@
---
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,48 +0,0 @@
---
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

@ -1,48 +0,0 @@
---
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

@ -1,28 +0,0 @@
---
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

@ -1,31 +0,0 @@
---
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

@ -1,29 +0,0 @@
---
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

@ -1,139 +0,0 @@
---
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,83 +0,0 @@
---
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

@ -1,36 +0,0 @@
---
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,223 +0,0 @@
.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

@ -1,171 +0,0 @@
---
---
@import url("https://fonts.googleapis.com/css?family=PT+Sans:400,700");
$break-small: 500px;
$break-large: 840px;
:root {
--background: #fff;
--text: #000;
--accent: #4f33e8;
--highlight: #f6f6f6;
--tone: #989898;
}
@media (prefers-color-scheme: dark) {
:root {
--background: #261e3a;
--text: #e2dfea;
--accent: #7033e8;
--highlight: #140d25;
--tone: #989898;
}
}
body {
width: 900px;
margin: 0 auto;
padding: 0 20px;
font-family: "PT Sans", "Hiragino Sans", "Hiragino Mincho ProN", serif;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
font-feature-settings: "kern", "palt", "pwid";
-webkit-font-feature-settings: "kern", "palt", "pwid";
-moz-font-feature-settings: "kern", "palt", "pwid";
-moz-font-feature-settings: "kern=1", "palt", "pwid";
background: var(--background);
color: var(--text);
@media screen and (max-width: $break-large) {
width: auto;
margin: 0;
}
}
// MathJax
#MathJax_Message {
display: none;
}
// Highlight.js
.hljs {
border-radius: 3px;
// font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
// font-size: 14px;
background: #0e0127 !important;
padding: 12px 18px !important;
line-height: 1.6em !important;
}
code {
padding: 0 12px;
}
p code {
padding: 3px 10px;
background: var(--highlight);
border-radius: 3px;
font-size: 16px;
}
a:hover,
a:active,
a:link,
a:visited {
color: var(--text);
text-decoration: none;
}
h1,
h2,
h3,
h4,
p {
margin: 0;
padding: 0;
line-height: 1.333em;
}
hr {
display: block;
width: 100%;
height: 1px;
background-color: var(--highlight);
border: 0;
margin: 40px 0;
}
.header {
display: flex;
flex-wrap: wrap;
align-items: center;
margin-top: 50px;
padding: 15px 0;
@media screen and (max-width: $break-small) {
margin-top: 0px;
justify-content: center;
flex-direction: column;
}
.logo {
margin: 10px 0 10px;
@media (prefers-color-scheme: dark) {
filter: invert(1);
}
}
.menu {
list-style: none;
margin-left: 40px;
padding: 8px 0;
display: flex;
flex-flow: row wrap;
text-transform: uppercase;
font-weight: bold;
.menu__item:not(:last-child) {
margin-right: 30px;
@media screen and (max-width: $break-small) {
margin-right: 20px;
}
}
@media screen and (max-width: $break-small) {
padding: 0;
margin: 5px 0;
}
}
}
.metro {
// text-align: center;
display: flex;
flex-direction: column;
margin: 75px 0 100px;
.logo {
@media (prefers-color-scheme: dark) {
filter: invert(1);
}
}
.menu {
margin: 15px 0 0 0;
padding: 0;
text-transform: uppercase;
font-size: 16px;
font-weight: bold;
list-style: none;
.menu__item:not(:last-child) {
margin-bottom: 12px;
}
}
@media screen and (max-width: $break-small) {
margin: 40px 0 40px;
.menu {
font-size: 15px;
}
}
}
@import "./post";

View File

@ -0,0 +1,30 @@
version: "3.0"
services:
web:
image: u8.pub/uetchy/uechi.io
restart: unless-stopped
container_name: uechiio
environment:
VIRTUAL_HOST: uechi.io,www.uechi.io
LETSENCRYPT_HOST: uechi.io,www.uechi.io
volumes:
- "./data:/var/www/html/_:ro"
labels:
com.centurylinklabs.watchtower.enable: "true"
cron:
image: u8.pub/uetchy/uechi.io
command: /usr/sbin/crond -d 8 -f
restart: unless-stopped
container_name: uechiio-cron
volumes:
- "./data:/var/www/html/_"
- "./periodic/daily:/etc/periodic/daily:ro"
labels:
com.centurylinklabs.watchtower.enable: "true"
networks:
default:
name: webproxy
external: true

10
docker-compose.yml Normal file
View File

@ -0,0 +1,10 @@
version: "3.0"
services:
web:
image: u8.pub/uetchy/uechi.io
build: .
ports:
- "8080:80"
volumes:
- "./data:/var/www/html/_:ro"

90
nginx.conf Normal file
View File

@ -0,0 +1,90 @@
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
keepalive_timeout 65;
server {
server_name uechi.io;
listen 80;
root /var/www/html;
error_page 404 /404.html;
# Matix/Synapse
# https://matrix-org.github.io/synapse/develop/reverse_proxy.html
# https://matrix-org.github.io/synapse/latest/setup/installation.html#client-well-known-uri
location ~ ^(/_matrix|/_synapse/client) {
# note: do not add a path (even a single /) after the port in `proxy_pass`,
# otherwise nginx will canonicalise the URI and cause signature verification
# errors.
# https://stackoverflow.com/a/54719226/2276646
resolver 127.0.0.11 valid=30s;
set $upstream_synapse synapse;
proxy_pass http://$upstream_synapse:8008;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
# Nginx by default only allows file uploads up to 1M in size
# Increase client_max_body_size to match max_upload_size defined in homeserver.yaml
client_max_body_size 50M;
}
location /.well-known/matrix/client {
return 200 '{"m.homeserver": {"base_url": "https://matrix.uechi.io"}}';
default_type application/json;
add_header Access-Control-Allow-Origin *;
}
location /.well-known/matrix/server {
return 200 '{"m.server": "matrix.uechi.io:443"}';
default_type application/json;
add_header Access-Control-Allow-Origin *;
}
location /404.html {
internal;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
index index.html;
try_files $uri $uri.html $uri/index.html @fallback;
}
location = / {
if ($http_user_agent ~ curl) {
rewrite / /TERMINAL last;
}
}
location @fallback {
root /var/www/html/_;
try_files $uri $uri.html $uri/index.html =404;
}
}
server {
listen 80;
server_name www.uechi.io;
return 301 $scheme://uechi.io$request_uri;
}
}

10491
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +1,38 @@
{
"name": "uechi.io",
"name": "hexo-site",
"version": "0.0.0",
"scripts": {
"fix-typo": "textlint _posts/*.md _pages/*.md --fix --dry-run -f diff",
"build": "bundle exec jekyll build",
"start": "bundle exec jekyll serve --host 0.0.0.0 --port 4000 --baseurl '' --force_polling --drafts --unpublished --incremental",
"test": "textlint _posts/*.md _pages/*.md -f pretty-error"
"build": "hexo generate",
"clean": "hexo clean",
"deploy": "hexo deploy",
"start": "npm run clean && hexo server --debug",
"test": "lint-staged"
},
"dependencies": {
"hexo": "^6.3.0",
"hexo-excerpt": "^1.3.0",
"hexo-feed": "^1.1.1",
"hexo-filter-mathjax": "^0.9.0",
"hexo-generator-archive": "^2.0.0",
"hexo-generator-category": "^2.0.0",
"hexo-generator-index": "^3.0.0",
"hexo-generator-tag": "^2.0.0",
"hexo-renderer-dartsass": "^0.1.2",
"hexo-renderer-ejs": "^2.0.0",
"hexo-renderer-pandoc": "^0.3.1",
"hexo-server": "^3.0.0",
"hexo-simple-toc": "file:plugins/hexo-simple-toc",
"js-yaml": "^4.1.0"
},
"devDependencies": {
"textlint": "^11.7.6",
"textlint": "^12.2.4",
"textlint-filter-rule-whitelist": "^2.0.0",
"textlint-rule-common-misspellings": "^1.0.1",
"textlint-rule-max-ten": "^2.0.4",
"textlint-rule-no-dropping-the-ra": "^1.1.3",
"textlint-rule-no-start-duplicated-conjunction": "^2.0.2",
"textlint-rule-preset-japanese": "^5.0.0"
"textlint-rule-preset-japanese": "^7.0.0"
},
"hexo": {
"version": "6.3.0"
},
"private": true
}

11
periodic/daily/280blocker Executable file
View File

@ -0,0 +1,11 @@
#!/bin/sh
echo "Updating 280blocker filter..."
ROOT_DIR="/var/www/html/_"
FILTER_PATH="$ROOT_DIR/280blocker.txt"
DOMAIN_PATH="$ROOT_DIR/280blocker_domain.txt"
DATE=$(date +"%Y%m")
curl -sL "https://280blocker.net/files/280blocker_adblock_${DATE}.txt" -o "$FILTER_PATH"
curl -sL "https://280blocker.net/files/280blocker_domain_${DATE}.txt" -o "$DOMAIN_PATH"

144
plugins/hexo-simple-toc/.gitignore vendored Normal file
View File

@ -0,0 +1,144 @@
# Created by https://www.toptal.com/developers/gitignore/api/node
# Edit at https://www.toptal.com/developers/gitignore?templates=node
### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
### Node Patch ###
# Serverless Webpack directories
.webpack/
# Optional stylelint cache
# SvelteKit build / generate output
.svelte-kit
# End of https://www.toptal.com/developers/gitignore/api/node

View File

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2022 uetchy
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.

View File

@ -0,0 +1,3 @@
# hexo-simple-toc
This plugin aggregates Hexo native `id` from rendered HTML's headings and generate ToC from it. No `markdown-toc` dependency required.

View File

@ -0,0 +1,4 @@
/* globals hexo: true */
const toc = require("./toc");
hexo.extend.filter.register("after_post_render", toc.after_post_render);

1045
plugins/hexo-simple-toc/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,28 @@
{
"name": "hexo-simple-toc",
"description": "Lightweight ToC generator for Hexo",
"version": "1.0.0",
"author": "uetchy <y@uechi.io>",
"scripts": {},
"main": "index.js",
"files": [
"index.js",
"handler.js"
],
"dependencies": {
"jsdom": "^20.0.3"
},
"homepage": "https://github.com/uetchy/hexo-simple-toc",
"repository": {
"type": "git",
"url": "https://github.com/uetchy/hexo-simple-toc.git"
},
"bugs": {
"url": "https://github.com/uetchy/hexo-simple-toc/issues"
},
"license": "MIT",
"keywords": [
"hexo",
"toc"
]
}

View File

@ -0,0 +1,48 @@
const JSDOM = require("jsdom").JSDOM;
function generateToC(html) {
const dom = JSDOM.fragment(html);
const headings = Array.from(dom.querySelectorAll("h1, h2, h3, h4, h5, h6"))
// Filter headings with ids
.filter((el) => el && el.id)
// {id: string, content: string|null, depth: number}
.map((el) => ({
id: el.id,
content: el.textContent,
depth: Number(el.nodeName.replace("H", "")), // H1 -> 1
}));
let pos = 0;
function genToC(arr, lastDepth) {
const stack = [];
while (pos < arr.length) {
const { depth, id, content } = arr[pos];
if (depth < lastDepth) {
// unwind
pos -= 1;
break;
} else if (depth > lastDepth) {
// nested ToC
stack.push(stack.pop() + genToC(arr, depth));
} else {
// same depth
stack.push(`<a href="#${id}">${content}</a>`);
}
pos += 1;
}
return "<ul>" + stack.map((s) => `<li>${s}</li>`).join("") + "</ul>";
}
return genToC(headings, 1);
}
exports.after_post_render = function (data) {
data.content = data.content.replace("<!-- toc -->", () =>
generateToC(data.content)
);
return data;
};

4
scaffolds/draft.md Normal file
View File

@ -0,0 +1,4 @@
---
title: {{ title }}
tags:
---

3
scaffolds/page.md Normal file
View File

@ -0,0 +1,3 @@
---
title: {{ title }}
---

5
scaffolds/post.md Normal file
View File

@ -0,0 +1,5 @@
---
title: {{ title }}
date: {{ date }}
tags:
---

7
source/404.md Normal file
View File

@ -0,0 +1,7 @@
---
title: Page Not Found
permalink: "/404"
---
> `404`
> This page could not be found

8
source/TERMINAL Normal file
View File

@ -0,0 +1,8 @@
░█░█░█▀▀░█▀▀░█░█░▀█▀░░░░▀█▀░█▀█
░█░█░█▀▀░█░░░█▀█░░█░░░░░░█░░█░█
░▀▀▀░▀▀▀░▀▀▀░▀░▀░▀▀▀░▀░░▀▀▀░▀▀▀
GitHub: https://github.com/uetchy
Twitter: https://twitter.com/uechz
Wallpaper: https://uechi.io/wallpaper

View File

@ -4,54 +4,46 @@ 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
```
@ -59,9 +51,9 @@ $ julius \
ディクテーションキットに関するドキュメントは下記のコマンドから参照可能だ。
```bash
$ open `brew --prefix julius-dictation-kit`/share/doc
open `brew --prefix julius-dictation-kit`/share/doc
```
### 実行中の様子
![install-julius-with-homebrew](/uploads/install-julius-with-homebrew.png)
![](/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,13 +83,12 @@ 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)に、ストックした投稿を検索するコマンドを追加した。
![s1.png](/uploads/alfred-qiita-workflow.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

@ -4,7 +4,7 @@ date: 2014-10-27 09:00:00 +09:00
redirect_from: "/blog/2014/10/27/brew-cask-downloader"
---
![image](/uploads/brew-cask-downloader.png)
![](/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

@ -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

@ -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-ass
### シェルスクリプト
```bash:rails-assets.sh
```bash rails-assets.sh
#!/bin/sh
# Usage: rails-assets [package-name] [-a]
@ -29,9 +29,8 @@ 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

@ -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

@ -4,7 +4,7 @@ date: 2015-09-07 09:00:00 +09:00
redirect_from: "/blog/2015/09/07/alfred-qiita-workflow-in-go"
---
![Cover](/uploads/alfred-qiita-workflow.png)
![](/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

@ -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,7 +50,8 @@ 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

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

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"
---
![](/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

@ -0,0 +1,53 @@
---
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 タイプ
## Obsidian
<https://obsidian.md>
機能性・自由度双方で最強のエディター。僕もすでにいくつかプラグインを書いた。
## FSNotes
<https://fsnot.es>
オープンソースかつ Swift ネイティブでサクサク動くウクライナ産のエディター。僕もいくらかコミットしている。
## Notion
<https://notion.so>
サンフランシスコ発の多機能ノートアプリ。Web 版、iOS/Android 版と Mac 版が用意されており、Markdown ライクな記法で自由度の高いノートテイキングが出来る。起動に時間がかかるのがかなり痛い。
## Bear
<http://www.bear-writer.com>
北イタリア発のノートアプリ。記事中に **ハッシュタグ** を書き込むと、リストでまとめてくれる機能が秀逸。
iCloud を使って、macOS と iOS アプリの間でノートを同期することが出来る。
## Inkdrop
<https://www.inkdrop.info>
日本発のノートアプリ。プラグインにより多くの機能を追加することが出来る。
# TextEdit タイプ
## Typora
<https://typora.io>
エディタとプレビューが一体化したタイプのエディタ。左右分割よりも WYSIWYG エディタの方が体験が良い。

View File

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

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`を使ってドライバーをインストールすることにした。
```bash
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

@ -0,0 +1,27 @@
---
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/)の例では、アイコンの改善案を思いつき、[Pull-request](https://github.com/iMasanari/cmd-eikana/pull/5)を送ったところ、驚くほどすぐにマージしてくれた。
## 結論
OSS コミュニティではコードだけでなくデザインワークに対してもオープンにコミットすることが出来る。
デザイナー諸氏は機会があれば興味のある OSS に貢献してみることをオススメする(実際 OSS 開発者の多くは、口にせずともクールなロゴが提案されることを心から待ち望んでいる!)

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

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

View File

@ -1,7 +1,8 @@
---
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

@ -18,7 +18,7 @@ I made a simple tool to get you covered with the above guidelines.
# gh-compare
![screencast.gif](/uploads/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,9 +27,9 @@ npm install -g gh-compare
gh-compare facebook/react vuejs/vue riot/riot
```
![1xfd1gcrfntpft5bbu5s.png.jpeg](/uploads/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!
Warmly welcome to any comments/ideas to improve `gh-compare`!
Warmly welcome to any comments/ideas to improve `gh-compare`!

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
@ -18,4 +18,4 @@ Running `ndl`, you will get a detailed list of dependencies for the package on t
If you are using iTerm2, you can also `Command + Click` on a package name to jump to their homepage.
If you have any idea on it, please consider submitting an issue or a pull request!
If you have any idea on it, please consider submitting an issue or a pull request!

View File

@ -0,0 +1,84 @@
---
title: 生活の自動化
date: 2018-08-05 00:00:00 +09:00
redirect_from: "/blog/2018/08/05/life-automation"
---
生活にオートメーションを上手く取り入れ、本当にやりたいことに集中できる環境をつくろう。
# 洗濯の自動化
Panasonic のドラム洗濯乾燥機を使っている。威力を最大限に享受するため、タンブラー乾燥向けの普段着を揃えておくことも重要だ。
洗剤は粉と液体とが一体化したジェルボール洗剤が便利だ。ドラムの底にひとつ置くだけでよく、計量する必要がない。
# 食器洗いの自動化
Panasonic の一人暮らし用コンパクト食洗乾燥機を使っている。
洗濯機と同じく、食洗機専用のジェルボール洗剤を使えば計量する手間を省ける。
# 照明の自動化
Philips Hue はインターネット経由で明るさや色相をコントロールすることができる電球だ。
- 「家から離れたら消灯」
- 「家に近付いたら点灯」
- 「日が暮れたら暖色系に切り替える」
- 「23 時になったら消灯」
など多様なルールを作ることができる。外の明るさに合わせて照明の明るさを調整して、概日リズムが崩れにくいようルールを決めている。
# 空調の自動化
Nature Remo でエアコンの操作を自動化した。
- 「湿度が高ければドライに変更」
- 「家から離れたら電源オフ」
- 「朝になったら冷房へ切り替え」
など多様なルールを作ることができる。
Nature Remo 自体はエアコン専用ではなく、赤外線で操作出来るデバイスであればなんでも操作できる(例えばシーリングファンやテレビの電源・音量など)
[Nature Remo を NodeJS で操作するライブラリ](https://github.com/nature-remo/nature-remo)を作ったので是非触ってみてほしい。ライブラリ経由で温度・湿度・明度のセンサー値を取得したり、指定したモードにエアコンを切り替えることができる。
# 自動施錠・自動開錠
Qrio Lock をドアに取り付けることでオートロック・アンロックができるようになった。
エントランスのドアに関しては、インターホンに Switch Bot を貼り付けて Shortcuts で解錠できるようにしておき、それを iPhone の背面トリプルタップで呼び出せるよう設定することでキーレスエントリー化している。少し Hacky だが、動けばなんでも良い。
# ホームアシスタント
Raspberry Pi に Home Assistant をインストールし、スマート家電を取りまとめるアシスタントとして使っている。Nature Remo や Hue、Switch Bot に紐づいているデバイスを Home Assistant のアプリからまとめて操作できる。
Apple Home より柔軟な自動化ルールを作ることができ、例えば「朝になったら照明とエアコンをつける(気温が高くかつ誰かが家にいる場合のみ)」といった気の利いた自動化ができる。
# 睡眠記録の自動化
Withings 改め Nokia 改め Withings の Sleep を使っている。
寝るときにウェアラブルデバイスを身に付けたくない派としては、マットレスの下に敷いておくだけで睡眠を自動計測してくれるのはありがたい。
機能としては、入眠・起床検知、心拍数記録、睡眠深度解析、いびき検出等がある。
# 体重記録の自動化
Withings の Wi-Fi Scale を使っている。体重と体脂肪率、心拍数、BMI を Wi-Fi 経由でクラウドに自動記録し、アプリで推移を確認できる。
Wi-Fi Scale には CO2 センサーもついており、部屋の二酸化炭素濃度を記録してくれる。
# オンラインスーパー
普段は業務スーパーを使いつつ、重くて運ぶのが大変な商品に関してはイトーヨーカドーのオンラインスーパーを頼っている。
お気に入りリストへ水、米、卵、かぼちゃなど毎回買うものを登録しておくことで、慣れれば 5 分程度で注文が完了する。あとは指定した時間に家へ商品を届けてくれる。
# 自動家計簿
Moneytree を使っている。支出を自動で食費、趣味、日用品などに仕分けてくれるため、使いすぎに気付きやすい。無現金縛りプレイと相性が良い。
# 気になる製品
## ルンバ
絨毯を取り除くわけにもいかないので二の足を踏んでいる。使用感については[KainokiKaede's diary](http://kainokikaede.hatenablog.com/entry/2018/07/24/185452)の素晴らしい記事を共有しておく。

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