Okada Hiroshi の blog

typo が多いです

1月に読んだ本

これから毎月読んだ本を記録することにしました。

人生にゆとりを生み出す 知の整理術 (pha)

人生にゆとりを生み出す 知の整理術

人生にゆとりを生み出す 知の整理術

この本の基本的なテーマは、自分の考え方とも一致するし、他の書籍でも言及されていて今更という感じもするけれども、いろいろ実践的な Tips が詰まっていて参考になりました。

詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド (高橋宣成)

GoogleAppsScript の日本語の本は珍しいので応援したのですが、正直言って前半の JavaScript の文法等の解説は他の本や Web の情報でも十分賄えるので不要だと思いました。 それよりももうすこしパーミッションに関連についての解説を充実させて欲しかったです。 API や Web アプリとして公開する場合の情報もほとんど書かれていないので、少し肩透かしを食らった感じです。

天鳴地動 アルスラーン戦記14, 戦旗不倒 アルスラーン戦記15, 天涯無限 アルスラーン戦記16 (田中芳樹)

天涯無限 アルスラーン戦記 16 (カッパ・ノベルス)

天涯無限 アルスラーン戦記 16 (カッパ・ノベルス)

アルスラーン戦記もやっと完結したので最後の3冊をまとめて読みました。終盤になって大量にキャラクターが死ぬのは構わないのだけれども、ちょっと敵がショボすぎる感じがしていまいち盛り上がりに欠けるような気がしました。

クロックワーク・ロケット, エターナル・フレイム (グレッグ・イーガン)

 
エターナル・フレイム (新☆ハヤカワ・SF・シリーズ)

エターナル・フレイム (新☆ハヤカワ・SF・シリーズ)

残念ながら グレッグ・イーガン の理論パートは僕にはちょっとちょっと難しすぎるけれども、ストーリー的にも十分面白いので頑張って読んでみました。一応アロウズオブタイムも読むつもりです。

自宅の Linux サーバーにハードディスクを増設しました。

しばらくぶりに自宅の Linux サーバーにハードディスクを増設したので記録しておきます。

自宅サーバーでそれほど重要なデータでもないので、普通のPC用のハードディスクを増設しました。

ハードディスクの増設は何回もやったことがあるのですが、 最近はGUIで設定してばかりだったので、コマンドラインでやるのは久しぶりです。

増設前の /etc/fstab は以下のようなものでした。

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=9a65b311-ec87-47ae-9a45-5d1c0636d912 /               ext4    errors=remount-ro 0       1
# /tmp was on /dev/sdb2 during installation
UUID=5550e624-abfb-49eb-8708-06c7b0df64e6 /tmp            ext4    defaults        0       2
# swap was on /dev/sdb1 during installation
UUID=95b623db-53b0-4bd4-bce3-de3dc817bceb none            swap    sw              0       0

今度増設するドライブは /dev/sdc になります。 GPT ディスクなので フォーマットには gdisk コマンドを使いました。

$ sudo gdisk /dev/sdc
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): o   「新しい空の GUID partition table (GPT) を作成」
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y

Command (? for help): n「新しいパーティションを作成」
Partition number (1-128, default 1): 
First sector (34-3907029134, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-3907029134, default = 3907029134) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): w 「パーテーションテーブルを書き込んで終了」

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdc.

hiroshi@hp1:~$ sudo mkfs.ext4 /dev/sdc1 
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 488378385 4k blocks and 122101760 inodes
Filesystem UUID: 3627b957-fd37-4147-84e4-62ff8400d177
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
$ 

次にファイルシステムを指定してフォーマットします

$ sudo mkfs.ext4 /dev/sdc1 
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 488378385 4k blocks and 122101760 inodes
Filesystem UUID: 3627b957-fd37-4147-84e4-62ff8400d177
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done  
$

lsblk で UUID を確認します

$ lsblk -o NAME,UUID
NAME   UUID
sda    
└─sda1 9a65b311-ec87-47ae-9a45-5d1c0636d912
sdb    
├─sdb1 95b623db-53b0-4bd4-bce3-de3dc817bceb
└─sdb2 5550e624-abfb-49eb-8708-06c7b0df64e6
sdc    
└─sdc1 3627b957-fd37-4147-84e4-62ff8400d177

/etc/fstab に次の行を追記します。

UUID=3627b957-fd37-4147-84e4-62ff8400d177 /srv            ext4    defaults        0       2

$ sudo mount -a でマウントします。

以上でした。

手抜きの人用の favicon ジェネレータを作りました。

昔に比べて、クライアントサイドの JavaScript だけで、かなり色んな事ができるようになったので、手抜きの人(自分とか)用の favicon ジェネレータを作ってみました。

拙速 favicon ジェネレーター

https://hasty-favicon.toycode.com/

文字を入れるだけでとりあえず favicon ができるので、デザインがあまり必要ではい (でもブラウザのタブを沢山開いた時でも区別したいので、最低限の favicon はつけたい) 時には便利ではないでしょうか。

なお、同様のサイトとして Favicon Generator とうのがあります。もう少しこった物が欲しい人はこちらを使った方がよいかもしれません。 (僕はもう歳なので、複数文字だと見づらいのですが)

NISAの5年目の配当金の税金について

NISAで外国株を買って持っているのですが。5年目の配当の課税について気になったので、SBI証券に問い合わせてみたら以下のような回答をもらいました。

NISA口座で保有する外国株式・海外ETFの配当金・分配金は、権利取得時にNISA預りで保有していて、効力発生日(支払開始日)が5年間の非課税期間内であることが条件になります。

例えば、2016年にNISA口座で買付した株式を最終年(2020年の5年目)の12月に権利を獲得し、翌年の3月に受取る配当金は課税されるかと存じます。

つまり5年目の終わりギリギリに売却してその時、配当金を受け取る権利が発生していると、あとで申告しないといけないという事です。(外国税額控除の適用申請) NISA以外の株取引は特定口座でやっているので、株については申告手続きを省略できていたですが、NISAを使っていると (5年以内に売っても) 場合によっては申告の処理をしなくてはいけなくなるというのは意外でした。

プログラムを実行して結果を返す mastodon bot のソースコードを公開しました。

プログラムを実行して結果を返す mastodon bot を作ってみました。 - Okada Hiroshi の blog

を改良して、ソース−コードを公開しました。

HiroshiOkada/hello-bot: A Mastodn bot that run short programs

botの使い方

画像を出力する部分で日本語が上手く表示できなくて修正に時間がかかってしまいましたが、なんとか公開できる状態になったと思います。

対応プログラミング言語も少し増やして 29言語ほどにしました。

拡張子 処理系&言語
.asm NASM
.bc bc
.bf beef(Brainfuck)
.cpp clang++(c++)
.cs mcs/mono(C#)
.c gcc(C)
.dot dot/Graphviz
.f .f90 .f95 gfortran
.go go
.hs ghc
.html phantomjs
java openjdk-9
.js nodejs
.lsp .lisp clisp
.lua lua5.3
.ml ocaml
.php php7
.plt .gnuplot .gpi gnuplot
.py2 python2
.py3 .py python3
.pl perl
.rb ruby
.scm guile(scheme)
.sh .bash bash
.sql sqlite3
.svg inkscape
.ts tsc(TypeScript)
.vim vim
.zsh zsh

プログラムを実行して結果を返す mastodon bot を作ってみました。

せっかく mastodon サーバーを立てたのだから bot を作ってみようと、プログラムを実行して結果を返す mastodon bot を作ってみました。

自分で立てたサーバーなので、負荷を気にせずに実験できるのはメリットの一つです。

今回作ったのは、プログラムを送ると docker コンテナ上で実行して出力を返すという bot です。

例えば、 @hello@mastodon.toycode.com 宛に

@hello@mastodon.toycode.com
hello.cpp
#include <iostream> 
int main()
{
    std::cout << "Hello, World!\n";
}

のようなメンションを toot すると、 Hello, World と帰ってきます。

@hello@mastodon.toycode.com の次の行にあるファイル名の拡張子で、どのプログラム言語かを判定しています。 又、ファイル名を書かずに shebang で始めることもできます。

#!/bin/bash

echo "今日は世界"

頑張って 20言語以上に対応したので、遊んでみて下さい。

なお、 svg, dot言語, gnuplot に対しては画像を返します。

さらにプログラムで out.svgsvg を出力するとその画像を返します。

Mastodn API を叩くための access token を取得するコマンドラインプログラムを node.jsで書きました。

Mastodn API を叩くための OAuth2 の access token を取得する。コマンドコマンドラインツールを node.js で書いてみました。

www.npmjs.com

(途中でブラウザが立ち上がります。)

npm を公開するにのは初めてだったので、数日かかってしましましたが、これで bot を作るのが楽になったと思います。

なお、 mastodon の場合

config/initializers/doorkeeper.rb

# Access token expiration time (default 2 hours).
# If you want to disable expiration, set this to nil.
 access_token_expires_in nil

となっているので、 access_token の更新はしなくても良いようです。