Compare commits
No commits in common. "master" and "jekyll" have entirely different histories.
2
.dockerignore
Normal file
@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
vendor
|
24
.drone.yml
@ -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
|
19
.forestry/front_matter/templates/blog-post.yml
Normal 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
@ -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
@ -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/
|
||||
|
@ -1,2 +0,0 @@
|
||||
scaffolds/*
|
||||
*.ejs
|
@ -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
@ -0,0 +1,6 @@
|
||||
language: node_js
|
||||
node_js: stable
|
||||
notifications:
|
||||
email:
|
||||
on_success: never
|
||||
on_failure: change
|
79
.vscode/settings.json
vendored
@ -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"
|
||||
]
|
||||
}
|
21
Dockerfile
@ -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
@ -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
@ -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
|
2
LICENSE
@ -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
|
||||
|
10
Makefile
@ -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
|
||||
|
18
README.md
@ -1,16 +1,24 @@
|
||||
# uechi.io
|
||||
|
||||
[](https://build.u8.pub/uetchy/uechi.io)
|
||||
[](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
|
||||
```
|
||||
|
188
_config.yml
@ -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
0
_drafts/.keep
Normal file
12
_drafts/deconvolutiontohu-bufalsehamouyameyou.markdown
Normal 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)での議論を踏まえると
|
11
_drafts/gst-a-powerful-pal-for-ghq.markdown
Normal 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.
|
46
_drafts/pixiv-spring-boot-camp-2020.md
Normal 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
|
||||
|
||||
## 成果発表
|
||||
|
||||
## 感想
|
||||
|
||||
### 社風
|
14
_drafts/静寂を得る方法.md
Normal 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
@ -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
@ -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
@ -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
@ -0,0 +1,9 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<section>
|
||||
<article class="article">
|
||||
<div class="article__content">{{ content }}</div>
|
||||
</article>
|
||||
</section>
|
10
_layouts/default.html
Normal 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
@ -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
@ -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>
|
@ -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
@ -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
@ -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
@ -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>
|
@ -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
@ -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.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

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

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## Monochrome
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
@ -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
|
||||
```
|
||||
|
||||
### 実行中の様子
|
||||
|
||||

|
||||

|
@ -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`とタイプしてプロキシを切り替えられるようになる。
|
||||
```
|
@ -8,7 +8,7 @@ redirect_from: "/blog/2013/12/05/qiita-alfred-workflow"
|
||||
|
||||
そこで、以前作った[Qiita の記事をインクリメンタルサーチする Alfred 2 Workflow](http://qiita.com/o_ame/items/f23e75bfc11e9e7b3a08)に、ストックした投稿を検索するコマンドを追加した。
|
||||
|
||||

|
||||

|
||||
|
||||
> [Github リポジトリ](https://github.com/uetchy/alfred-qiita-workflow)から[ダウンロード](https://github.com/uetchy/alfred-qiita-workflow/archive/master.zip)
|
||||
|
@ -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-" }
|
||||
|
||||
```
|
||||
|
||||
```
|
@ -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
|
@ -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
|
||||
今日は──┐
|
||||
良い──┤
|
@ -4,7 +4,7 @@ date: 2014-10-27 09:00:00 +09:00
|
||||
redirect_from: "/blog/2014/10/27/brew-cask-downloader"
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
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
|
||||
|
@ -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)
|
||||
```
|
||||
|
||||
## ドキュメントの情報源
|
@ -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 だ。
|
@ -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
|
||||
```
|
@ -4,7 +4,7 @@ date: 2015-09-07 09:00:00 +09:00
|
||||
redirect_from: "/blog/2015/09/07/alfred-qiita-workflow-in-go"
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
Ruby で書かれている [Alfred Qiita Workflow](https://github.com/uetchy/alfred-qiita-workflow) を[バグ修正](https://github.com/uetchy/alfred-qiita-workflow/issues/3)のついでに Go で書き直した。
|
||||
|
@ -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
|
@ -132,7 +132,7 @@ Notes.app に移行しました。
|
||||
|
||||
## Flash
|
||||
|
||||
ニコニコ動画が見られなくなるので泣く泣く導入していましたが、公式で HTML5 に対応したので不要になりました。
|
||||
ニコニコ動画が見れなくなるので泣く泣く導入していましたが、公式で HTML5 に対応したので不要になりました。
|
||||
|
||||
## [VirtualBox](https://www.virtualbox.org)
|
||||
|
@ -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 日以上の旅行で使う機会は無いでしょう。
|
@ -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 エディタの方がわかりやすい派なので、これ一択です。
|
28
_posts/2017-02-13-nvidia-titan-x-macpro-early-2008.md
Normal 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 を破損してしまう危険性がありました。
|
||||
今回は電源を同期することは見送り、個別にスイッチを入れることで解決しました。
|
@ -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
|
||||
```
|
||||
|
31
_posts/2017-04-23-apple-pie.markdown
Normal 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"
|
||||
|
||||
---
|
||||

|
||||
|
||||
再現性の高いアップルパイの作り方です。材料は初出時に太字にしました。
|
||||
|
||||
# 注意事項
|
||||
|
||||
* レモン汁はポッカレモンで代用可
|
||||
* 範囲指定されている値は 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℃ に落とす; でないと表面だけ焼けて中は生焼けになる)
|
@ -9,15 +9,15 @@ image: 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) に是非書いてください。
|
@ -4,19 +4,9 @@ date: 2017-06-16 00:00:00 +09:00
|
||||
redirect_from: "/blog/2017/06/16/x11forward"
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
# 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
|
||||
```
|
29
_posts/2017-12-27-oss-for-designers.markdown
Normal 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 開発者の多くは、クールなロゴが提案されることを心から待ち望んでいます!)
|
139
_posts/2018-03-29-products-guide.markdown
Normal 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 シーズン用を買い揃えて、やる頻度の低い冬用の装備だけレンタルするという戦術もある。
|
@ -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"
|
||||
---
|
||||
|
||||
先月、大洗で初めてのキャンプ泊をした。
|
83
_posts/2018-08-05-life-automation.md
Normal 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)の素晴らしい記事を読んで欲しい。
|
@ -3,11 +3,11 @@ title: Know your deps on package.json in seconds
|
||||
date: 2018-09-02 03:23:00 +09:00
|
||||
---
|
||||
|
||||

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

|
||||
|
||||
You can install them using `npm` or `yarn`.
|
||||
|
||||
```bash
|
@ -18,7 +18,7 @@ I made a simple tool to get you covered with the above guidelines.
|
||||
|
||||
# gh-compare
|
||||
|
||||

|
||||

|
||||
|
||||
[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
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
You will see the GitHub activities for each candidate at once.
|
||||
It could help you to decide which library you would adopt!
|
@ -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
|
||||

|
||||
```
|
||||
|
||||

|
||||
|
||||
|
||||
```markdown
|
||||

|
||||
```
|
||||
|
||||

|
||||
|
||||
|
||||
# Inline image
|
||||
|
||||

|
||||

|
||||

|
||||

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

|
||||

|
||||
|
||||
# Conclusion
|
||||
|
@ -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}`)
|
||||
})
|
||||
```
|
||||
|
||||
結果は以下のようになる。
|
@ -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 - 少し〜すぎる
|
||||
@ -29,7 +27,7 @@ redirect_from: "/blog/2019/01/17/english-note"
|
||||
- three-fold — 三倍
|
||||
- evade — 避ける = avoid
|
||||
- a word that evades definition — 定義しにくい言葉
|
||||
- don't be fooled by A — A に惑わされるな
|
||||
- don't be fooled by A — Aに惑わされるな
|
||||
- thrice — とても
|
||||
- Circuit Judge Joseph Bulone called 49-year-old Michael Drejka a “wanna-be” law enforcement officer and a self-appointed “handicapped parking space monitor.”
|
||||
- encapsulate — 包容している
|
||||
@ -38,15 +36,15 @@ redirect_from: "/blog/2019/01/17/english-note"
|
||||
- SMDH — Shaking My Damn Head
|
||||
- micro stutter — プログラム上の細微な遅延
|
||||
- When characters are missing from fonts, it's nice to be able to communicate to the user that this happened. — フォントに文字が欠けている場合、それをユーザーに伝えることができると便利です。
|
||||
- for the sake of A — A の名のもとに
|
||||
- Firefox has abandoned subpixel-AA for the sake of simplicity — Firefox はシンプルさの名のもとにサブピクセル AA を棄てました。
|
||||
- for the sake of A — Aの名のもとに
|
||||
- Firefox has abandoned subpixel-AA for the sake of simplicity — Firefoxはシンプルさの名のもとにサブピクセルAAを棄てました。
|
||||
- The entire idea behind subpixel-AA is that you are abusing how the pixels are laid out in a display. — サブピクセルアンチエイリアスは、ディスプレイにピクセルがどのように配置されているかという知識を基に成り立っています。
|
||||
- a reasonable balance — 適度なバランス
|
||||
- That said, — とはいえ、
|
||||
- A with B on it — B が乗っている A
|
||||
- can play a bit fast and loose with A — A を大雑把に扱える
|
||||
- current iteration of A — 現行の A
|
||||
- A doesn't play nice with B — B がため A が上手く動かない
|
||||
- A with B on it — Bが乗っているA
|
||||
- can play a bit fast and loose with A — Aを大雑把に扱える
|
||||
- current iteration of A — 現行のA
|
||||
- A doesn't play nice with B — BがためAが上手く動かない
|
||||
- our current iteration of search doesn't play nice with CJK characters
|
||||
- Tried out and see what happens — 試して成り行きを見てみた
|
||||
- Losing your shit — the state of being pushed over the edge of sanity and having a complete and utter freak out or mental/emotional breakdown ≒ お前は完全にイッちまうぜ
|
||||
@ -56,11 +54,11 @@ redirect_from: "/blog/2019/01/17/english-note"
|
||||
|
||||
> Have you thought of what you’ll do after you retire? — 引退したらやりたいことについて考えたことある?
|
||||
|
||||
- any of those — これらどれでも (all of, every と交換可能 | 肯定文)
|
||||
- any of those — これらどれでも (all of, everyと交換可能 | 肯定文)
|
||||
|
||||
- there aren't any apples on the floor (否定の場合は any の後に複数形)
|
||||
- there aren't any apples on the floor (否定の場合はanyの後に複数形)
|
||||
|
||||
- you will likely do A — あなたは A することだろう
|
||||
- you will likely do A — あなたはAすることだろう
|
||||
|
||||
- 99% of the time this is what you want to use — 99%これを使えば良い
|
||||
|
||||
@ -74,9 +72,9 @@ redirect_from: "/blog/2019/01/17/english-note"
|
||||
|
||||
- one week cannot and should not define any team
|
||||
|
||||
- it go to show that A — A ということの証明となる
|
||||
- it go to show that A — Aということの証明となる
|
||||
|
||||
- A is to not have B — 「A」とは、B を持たないことである
|
||||
- A is to not have B — 「A」とは、Bを持たないことである
|
||||
|
||||
> wireless charging is kinda funny because it really goes to show that the only way to get the tech industry to agree on a unified connector is to not have a connector
|
||||
|
||||
@ -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%.
|
||||
@ -104,7 +104,7 @@ redirect_from: "/blog/2019/01/17/english-note"
|
||||
|
||||
- at will — 意思次第で
|
||||
- for asking — 望むなら
|
||||
- fuck A up — A をボコボコにする
|
||||
- fuck A up — Aをボコボコにする
|
||||
- friendly reminder - a euphemism for "this is the last warning"
|
||||
- I feel attached
|
||||
- I feel called out
|
||||
@ -118,14 +118,14 @@ redirect_from: "/blog/2019/01/17/english-note"
|
||||
- A teenager not old to buy a six-pack — ビールも買えない年頃の子供
|
||||
- It is likely that 未来形 — 〜になるだろう
|
||||
- It's likely that the affair will come to nothing — どうやら無事に治まりそうだ
|
||||
- We will most likely do A — 我々は必ず A をするでしょう
|
||||
- We will most likely do A — 我々は必ずAをするでしょう
|
||||
- chirring - 虫が鳴く; bugs chirring
|
||||
- what are you waiting for
|
||||
- with a grain of salt — 割り引いて(考えて)
|
||||
|
||||
> 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
|
||||
|
||||
@ -162,10 +162,10 @@ redirect_from: "/blog/2019/01/17/english-note"
|
||||
|
||||
> i feel like i'm most productive when i'm avoiding some other kind of responsibility
|
||||
|
||||
- be more of A — どちらかといえば A である; He is more of a researcher.
|
||||
- be more of A thant B — B というよりむしろ A だ
|
||||
- be more of A — どちらかといえばAである; He is more of a researcher.
|
||||
- be more of A thant B — BというよりむしろAだ
|
||||
- see less pain but also less joy — 痛みを感じることも少ないが喜びも少ない
|
||||
- in term of A — A の観点から
|
||||
- in term of A — Aの観点から
|
||||
|
||||
## Go
|
||||
|
||||
@ -178,7 +178,7 @@ redirect_from: "/blog/2019/01/17/english-note"
|
||||
|
||||
- get over it (障害を)乗り越えろ
|
||||
- get out 出て行く
|
||||
- get down on A for B — B したことに大して A を批判し続ける
|
||||
- get down on A for B — Bしたことに大してAを批判し続ける
|
||||
- get down to [verb.] — やっと始める。
|
||||
- get in — 乗り込む
|
||||
- too much to take - 手に負えない
|
||||
@ -224,14 +224,14 @@ redirect_from: "/blog/2019/01/17/english-note"
|
||||
- just a citation of the law they're overcompensating for — 彼らは濫用している法律の引用ただそれだけしか示してない
|
||||
- repeal — 撤回する
|
||||
- no respect for their users — ユーザーに対する敬意がない
|
||||
- be now going the A route — 今度は A 作戦ときた
|
||||
- be now going the A route — 今度はA作戦ときた
|
||||
- in a blunt fashion — 露骨なやり方で
|
||||
- "DM us, we'll take a look!" faux-friendly route — 偽りの友情作戦「DM で詳しく話を聞かせて!」
|
||||
- "DM us, we'll take a look!" faux-friendly route — 偽りの友情作戦「DMで詳しく話を聞かせて!」
|
||||
- reinstate — (アカウントを)復活させる
|
||||
- shut the whole thing down — 全てを終わらせる
|
||||
- as if, as though — 後者は話者の疑いが現れている. 仮定法過去を取る. It's as if I were a movie star.
|
||||
- predominatly — 大抵は. Your costs are predominantly human labor.
|
||||
- a myriad of A — 無数の A
|
||||
- a myriad of A — 無数のA
|
||||
- funnel toward 狭いところを前へと通る
|
||||
- in a verifiable manner — 検証可能な方法で
|
||||
- in a frigid manner — 冷たい態度で
|
||||
@ -257,7 +257,7 @@ redirect_from: "/blog/2019/01/17/english-note"
|
||||
- If you're of the belt-and-suspenders mindset, consider setting UsePAM to 'no' as well. — 心配性な性格のこと
|
||||
- you can cancel it as long as it has not been matched — 〜されていない限りいつでも
|
||||
- By definition — 定義によると
|
||||
- A found B C — A は B が C だと思った
|
||||
- A found B C — AはBがCだと思った
|
||||
- in that — という点において
|
||||
- Iconoclast — 因襲打破主義者
|
||||
|
||||
@ -282,41 +282,41 @@ redirect_from: "/blog/2019/01/17/english-note"
|
||||
|
||||
- it drives me crazy [nuts] — イライラさせられる
|
||||
- describes the steps that are involved in ~ — ~に関する手順について説明する
|
||||
- 前置詞 in は特徴の違いを、of は程度の違いを表す
|
||||
- A is in proportion to B — A は B に比例している
|
||||
- A is out of proportion to B — A は B に反比例している
|
||||
- 受動態は不自然に手を加えられて発生した結果に付随する、能動態は自然に発生した場合に付随する — our profits were increased は不正があったかのような表現、our profits increased が正しい
|
||||
- be collectively known as A — A と総称されている
|
||||
- 前置詞inは特徴の違いを、ofは程度の違いを表す
|
||||
- A is in proportion to B — AはBに比例している
|
||||
- A is out of proportion to B — AはBに反比例している
|
||||
- 受動態は不自然に手を加えられて発生した結果に付随する、能動態は自然に発生した場合に付随する — our profits were increasedは不正があったかのような表現、our profits increasedが正しい
|
||||
- be collectively known as A — Aと総称されている
|
||||
- Any links to this, as to be honest nobody is providing evidence, just lip-service relying on the ignorance of most readers
|
||||
- in a great hurry - 大急ぎで
|
||||
- gross 名詞 — 明らかな〜, a gross oversimplification - 明らかに過度な簡略化
|
||||
- among — 〜の間で — in, through で代替可能
|
||||
- throw A away — A を捨てる、A を無駄にする
|
||||
- among — 〜の間で — in, throughで代替可能
|
||||
- throw A away — Aを捨てる、Aを無駄にする
|
||||
- throw A up — 急にやめる
|
||||
- be quick to — すぐ〜する。(People are quick to alienate outsiders 人々はすぐよそ者を阻害する)
|
||||
- incredulous at — 〜を容易に信じない
|
||||
- lack of standards for — 〜に対するけじめの無さ
|
||||
- ludicrous, ridiculous — 馬鹿げた
|
||||
- derogatory — 差別的な
|
||||
- A that it was B — A だったので、B , 便利な接続詞
|
||||
- A that it was B — Aだったので、B , 便利な接続詞
|
||||
- After (p.p.), He (p.) — 〜の後、彼は〜した
|
||||
- vicious — 凶悪な
|
||||
- relentless, ruthless — しつこく、in の時は徹底的な
|
||||
- relentless, ruthless — しつこく、inの時は徹底的な
|
||||
- mercilessly — 無慈悲に
|
||||
- reckless — 無謀な
|
||||
- profound — 心理的影響が重大な、深刻な(物理的には deep が適切)
|
||||
- profound — 心理的影響が重大な、深刻な(物理的にはdeepが適切)
|
||||
|
||||
> I felt like a coward hiding this from people — それを隠すことで自分が臆病者に思えた
|
||||
|
||||
> While training for the marathon, she was relentless in following the same schedule — マラソンの練習の間、彼女は同じスケジュールをしつこいほど守った。
|
||||
|
||||
- His history of A led to B — 彼が A を繰り返したせいで B を招いた。
|
||||
- His history of A led to B — 彼がAを繰り返したせいでBを招いた。
|
||||
- hatred — 憎悪
|
||||
- coarse — 粗い
|
||||
- B with A everywhere — A がいたるところに散乱している B
|
||||
- B with A everywhere — Aがいたるところに散乱しているB
|
||||
- people, all, the crowd — 人々
|
||||
|
||||
> A was quick to spot the potential of the Internet — A はインターネットの可能性をいち早く見出した
|
||||
> A was quick to spot the potential of the Internet — Aはインターネットの可能性をいち早く見出した
|
||||
|
||||
- a man who's nice to be around — そばに居てくれると助かる親切な人
|
||||
- His generosity knows no bounds — 彼の寛大さには限りが無い
|
||||
@ -337,7 +337,7 @@ p.p. the present progressive form, 現在進行系
|
||||
- The antisocial behaviour you are naturing あなたが心に抱いている反社会的行動
|
||||
- have a lot to do with ~によるところが大きい
|
||||
|
||||
一般に前置詞+ who(m)は既知の情報を確認する際に, who +前置詞は新しい情報を求める際に好まれる
|
||||
一般に前置詞+who(m)は既知の情報を確認する際に, who+前置詞は新しい情報を求める際に好まれる
|
||||
|
||||
> This is sure to satisfy those who are into computers. これはコンピュータにはまっている人をきっと満足させるだろう
|
||||
|
||||
@ -365,9 +365,9 @@ p.p. the present progressive form, 現在進行系
|
||||
|
||||
不定詞は名詞・形容詞・副詞的働きをする動詞ベースの詞のこと
|
||||
|
||||
to 不定詞が unrealized(未実現)、-ing が realized(実現)
|
||||
to不定詞がunrealized(未実現)、-ingがrealized(実現)
|
||||
|
||||
- I want (to eat an apple)← 名詞的
|
||||
- I want (to eat an apple)←名詞的
|
||||
- Thank you for playing the game
|
||||
|
||||
1. She is studying English hard to study abroad.
|
||||
@ -375,15 +375,15 @@ to 不定詞が unrealized(未実現)、-ing が realized(実現)
|
||||
|
||||
違いは?
|
||||
|
||||
- only to A — 思わぬ悲観的な事実を説明する clause
|
||||
- only to A — 思わぬ悲観的な事実を説明するclause
|
||||
- He returned after the war only to be told that his wife had left him.
|
||||
- I tore open the box, only to discover that some of the parts were missing.
|
||||
- I arrived only to find that the others had already left.
|
||||
|
||||
## 倒置法
|
||||
|
||||
- So do I — 私も!(I like apple に対して)
|
||||
- So am I — 私も!(I'm twenty years old に対して)
|
||||
- So do I — 私も!(I like appleに対して)
|
||||
- So am I — 私も!(I'm twenty years oldに対して)
|
||||
- Here comes bus — もうバス来たよ
|
||||
- Here we go — ほら行こう
|
||||
- In you go — 中にお入り
|
@ -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.
|
@ -9,12 +9,12 @@ That's why I created [namae](https://namae.dev).
|
||||
|
||||
# namae
|
||||
|
||||

|
||||

|
||||
[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.
|
||||
|
||||

|
||||

|
||||
|
||||
# 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.
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
Clicking the suggestion, namae completes the form with it and start searching around the registries.
|
||||
|
@ -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つの分布の分散が等しいこと)を仮定しないので、とても取り扱いやすい検定です。もちろん等分散性のある分布でも使用できるので、基本的にはウェルチの方法を使う方針で良さそうです。
|
||||
|
||||
## 参考文献
|
||||
|
@ -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では出来ていた本体側のボタンで接続先を選択できる機能が無くなっていた
|
||||
* ボタン配置のミス
|
||||
* ボタンが手に触れやすい位置にあるため、ヘッドホンを外す度に間違って押してしまう
|
||||
* ストリーム元とボタンの送信先が異なるバグ
|
||||
* マルチポイント接続で一方のデバイスで音楽を流している際に、再生ボタンの信号が音楽を流していない方のデバイスに送信されてしまうバグがある
|
@ -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
@ -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;
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 311 KiB After Width: | Height: | Size: 311 KiB |
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 170 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 1.9 MiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |