Okada Hiroshi の blog

typo が多いです

手抜きの人用の 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 の更新はしなくても良いようです。

mastodonインスタンスを VPS から自作サーバーに引っ越しました

今まで mastodon インスタンス toycode -- Mastodon を の OVHとうい会社のVPS で運営してきましたが、結構ディスクをやメモリを食うので、自宅サーバーに引っ越すことにしました。

事前準備(VPS側)

  • 自宅サーバーに ubuntu16.04 と Docker, docker-compose 等の必要なソフトをインストールしました。
  • VPS から 自宅サーバに切り替えた時に DNS の変更が早く反映されるように TTL を 60 にしました、また VPS のホストを切替後も参照できるように old という名前を追加しました。DNSAmazon Route 53 を使っているので、比較的作業は簡単でした。

事前準備(自宅側)

  • NVR500でdns static a mastodon.toycode.com 192.168.100.200 ttl=120と入力し、自宅内からアクセスした時はLANのアドレスを返すようにしました。

停止

  • 僕以外、ほとんど使っている人はいないと思いますが、一応「止めますよ」と toot してから5分ほど待って docker-compose down でインスタンスを止めました。
  • インスタンスを停止したので、Amazon Route 53 で DNS のレコードを編集して、 mastodon.toycode.com が自宅を指すようにしました。

データの移行完了と起動

VPS 側で、パーミッション等の設定をした後、もう一度 rsync で残りのデータをコピーしました、事前に殆どのデータをコピーしていたので、*(1分以内** でコピーが終わりました。 docker-compose up -d で起動し、自宅内のパソコンと(LAN内)、WiFiを切った状態のスマートフォン(外からのアクセス)で動作しているのを確認しました。

Mastodon サーバーを v1.2.2 にしました

Mastodon サーバーを v1.2.2 にしました。

https://mastodon.toycode.com/mastodon.toycode.com

今回は、 docker-compose.yml を見なおして docker-compose pull だけで済むようにしました。 ( build しなくて良くしました )

version: '2'
services:

  nginx:
    image: nginx:alpine
    depends_on:
      - web
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/ssl:/etc/ssl

  db:
    restart: always
    image: postgres:alpine
    volumes:
      - ./postgres:/var/lib/postgresql/data

  redis:
    restart: always
    image: redis:alpine
    volumes:
      - ./redis:/data

  web:
    restart: always
    image: gargron/mastodon:v1.2.2
    env_file: .env.production
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    depends_on:
      - db
      - redis
    volumes:
      - ./public/assets:/mastodon/public/assets
      - ./public/system:/mastodon/public/system

  streaming:
    restart: always
    image: gargron/mastodon:v1.2.2
    env_file: .env.production
    command: npm run start
    depends_on:
      - db
      - redis

  sidekiq:
    restart: always
    image: gargron/mastodon:v1.2.2
    env_file: .env.production
    command: bundle exec sidekiq -q default -q mailers -q pull -q push
    depends_on:
      - db
      - redis
    volumes:
      - ./public/system:/mastodon/public/system

  cron:
    restart: always
    image: gargron/mastodon:v1.2.2
    env_file: .env.production
    command: |
      sh -c 'sh -s <<EOF
        trap "break;exit" SIGHUP SIGINT SIGTERM
        while /bin/true; do
          /bin/date -Ihours 
          /usr/bin/time rake mastodon:daily 
          /bin/sleep 1439m
        done >>/var/log/cron.log 2>&1
      EOF'
    depends_on:
      - db
      - redis
    volumes:
      - ./public/assets:/mastodon/public/assets
      - ./public/system:/mastodon/public/system
      - ./cron/log:/var/log

また、 メーリングリスト(mastodon-admin@lists.ffdn.org)で教えてもらったように、日々の定期処理 rake mastodon:daily を docker-compose.yml の中で完結するようにしました。

さらにバージョンアップ毎に書き換える必要があるので、 https://github.com/HiroshiOkada/mastodon.toycode.com で管理するようにしました。