2020年のまとめ

  • このエントリーをはてなブックマークに追加

2020年は2021年に向けての準備の年としてギアをあまり入れない形で過ごしました。

会社を作りました

合同会社を作りました。
今住んでいる賃貸物件は法人登記には使えないので、バーチャルオフィスを借りました。

大学に行きました

2020年4月から大学に通っています。院ではなく、心理学系の学部です。4年間通うことはなく、過去の単位を認定してもらって編入しています。
もともとはCSの学部卒なので、CSの院に行ってると多くの人が思っているみたいですが、私の生存戦略はちょっと違うのです。なぜ心理学をという話は、聞かれた人には教えているのですが、わざわざここで書くような話ではないので、知りたい人は直接聞いてください。

成績は現役(CS)の時は、GPAが3.93だったのですが、今回は4.0を目指してます。
心理学系の学問は学修の目安として、認定心理士、臨床心理士、公認心理師の3つがあります。後者2つのどちらかがないと、専門職としては弱いのですが、エンジニアを辞めるつもりはないので後者2つはターゲットにしていません。

  • 認定心理士 ▶ 大学で所定の単位を取って申請するだけのもの
  • 臨床心理士 ▶ 国家資格ではない。院に行く必要がある。
  • 公認心理師 ▶ 最近できた国家資格。院に行く必要がある。

簿記の資格を取りました

理由は2つあり、1つは大学への入学が決まり授業が始まるまでの間暇だったこと、もう1つは会社設立にあたり自分で事務処理をするために覚えた方が良いだろうと思ったことです。

無事に合格しています。一般的な知識は身につきました。1級は要らないかな..

DIYはじめました

テレビの壁掛けは以前にやっていたのですが、ちゃんとした工具を買って本棚や作業台を作るようになりました。

買ったもの

勉強のノートテイキングのために初めてのiPadを買いました。とても使いやすい・・。
4Kディスプレイを買いました。外部ディスプレイはこれ1つあれば十分かな。
インクジェットの複合機を買いました。スキャナを主に利用するのですが、毎回コンビニに行く必要がなくなり便利。
リゲッタの靴がとても良いです。自由が丘のお店で毎回買っているのですが、ショートブーツがとても良く、今年は4足も買いました。

技術的なこと

あまりアウトプットしていませんが、何個かサービスを作ったりしてます。
殆どが効率的に勉強をするためのものが多いですけども。

もう1つ人格を作ってみた

裏アカとかではなく、まっさらな状態での別名義のSNSアカウントを作りました。
趣味アカウントではなく、技術系のアカウントです。実験に近いのですが、今のご時世、個人の信用パラメータがゼロの状態で始めると、どれくらい大変なのかなと。
成果が分散しちゃうのでちょっと嫌なのですが、いくつかのサービスはそっちで公開しました。

なかなか大変ですね。

フードデリバリーや宅配弁当を利用するように

UberEatsなどのサービスを使ったことがないのですが、今年から必要に応じて使うようになりました。
またNoshというお弁当のサービスを一時期利用していました。

Instagramの毎日投稿

5月から毎日投稿をしていました。
毎日1つ何か違う事をすることによって、記憶の圧縮を防いだり、だらだら過ごさないようにするためにやっていました。

ふるさと納税で良かったもの履歴

  • このエントリーをはてなブックマークに追加

年末で迷っている人もいると思うので、2015年から2019年までの履歴で良かったものを列挙します(※2020年はこれといった収入がないため、ふるさと納税をしていません)。良くなかったものは書きません。
基本的に1万円~3万円のものが多いです。

参考までに、わたしの直近の寄付控除額です。※寄付控除額なので、ふるさと納税以外の寄付控除も含まれています。なので、これを参考に所得を計算しても近似値にはなりません。悪しからず..

年度 寄付控除額
H27 228,000
H28 303,000
H29 380,000
H30 424,000
R1 2,368,513

Tojiro-Pro DPコバルト合金鋼割込 包丁2点セット

包丁と言えば新潟県燕市と岐阜県関市。
普段の生活では高い包丁を買わない人も、こういう機会に入手するのは有りだと思います。
私は上記写真のTojiro Proのセットとパン(ケーキ)切り包丁を貰いました。

包丁は他にも色々あります色々2

ビール各種




私はもうお酒は飲まないのですが、お酒をたくさん飲む人はビールも良いと思います。24缶で1.6万円~2万円くらいのレンジです。泉佐野市が問題になる前は、24缶で1万円でした。

インドの青鬼、水曜日の猫、よなよなエール、エビス、プレモルなどがあります。
消費できない分は会社に持っていきました。

お肉 / 陣中の牛タン厚切り塩麹熟成

陣中の牛タン厚切り塩麹熟成。何度もリピートしました。すっっっっごい美味しいです!!

静岡県の藤枝市が3万円で7個(銀色がパッケージが4つ、金色のパッケージが3つだったかな?)のものがあったのですが、還元率が高すぎたのか無くなりました。

今は宮城県名取市が陣中の牛タンを出しています。

生活用品 / ティッシュ

これのおかげで、今年の謎のティッシュ買い占めの難を逃れることができました。このティッシュは水分が凄い含まれているので、花粉症で鼻水をかみまくっても痛くなりません。
※メイクの時に使うとか、ねっとりしたものを拭き取る場合とかは、安めのティッシュの方が良いです。

赤ちゃんがいる場合は、おむつなんかもあります。

静岡県富士宮市の場合は、エリエールの贅沢保湿が30箱パックで20,000円。

北海道赤平市はエリエールの+WATERが50箱で22,000円。

生活用品 / トイレットペッパー

エリエールのトイレットペーパー各種、72ロールで14,000円くらいです。

私はエリエール消臭+を使っています。

上記ティッシュと同様、エリエールなら静岡県富士宮市と北海道赤平市がオススメです。
でっかい箱で届くので、置き場所注意。

お米

最近は白米を食べないで玄米なのですが、過去に以下のお米を貰いました。平均値として10kgで1万円の返礼品が多いです。

山形県村山市/つや姫 パックご飯 パックライス 200g 36食入 16,000円。

北海道沼田町/雪中米食べ比べセット(ゆめぴりか5㎏・ななつぼし5㎏) 13,000円。

雪中米美味しいです。何回かリピートしました。

お菓子 / ポテチ

このあたりのポテチを頼みました。食べきれない分は会社に持っていきました。なお、これだけ食べれば当然太るので注意です。
私が申し込みをした時は8,000円から10,000円でしたが、今はちょっと高くなっています。

24袋にびびりますが、まぁポテチは美味しいです。
もしくは、じゃがポックルもあります。

冷凍食品 / つくね

山形県鮭川村 / 鮭川村産 「やまがた最上どり」つくね串 50本 50本で15,000円です。

冷凍庫に余裕がある人向けです。段ボールのまま保存できない場合は、ジップロックとかに小分けにして保存すると良いです。
魚焼きグリルで焼くと、もちもちした食感で美味しいです。

冷凍食品 / 餃子

餃子はいろいろな種類を試したのですが、長崎のひとくち餃子が満足度高いです。

長崎県 佐世保市が10,000円で162個。無くなってました…。
餃子で探すと、他にも色々あります。

冷凍食品 / 唐揚げ

レンチンする唐揚げ、味付けしてあって自分で油で揚げるものなどを試しました。

この冷凍食品の大量セットが岐阜県 富加町にあったのですが、無くなってました。

スイーツ / いちご

甘くて美味しい淡雪という白イチゴです。複数の市町村が出してます。冷凍品もあるので間違えないように注意。

いちごは、福岡県 八女市のあまおうも良きです。

インスタントの味噌汁

(furusato-taxから無くなっていたので、楽天の方をリンク)


朝に味噌汁作るの面倒ですし。タニタの茄子のお味噌汁が特に美味しいです。

鎌田のだし醤油

香川県坂出市 / 鎌田醤油 だし醤油500ml【4本入】 2㍑で6,000円。4㍑で11,000円もありますが、調味料なので全然減らないです。大容量は計画的に..。

鎌田のだし醤油シリーズはいろいろあるので、いろんな種類を試したいという人は詰め合わせもあります。

カップヌードル

北海道千歳市 / 日清ヌードル3種セット 各1箱(20食)合計3箱 36,000円。

カップヌードルが好きな人向け。ご飯を作るのが面倒な時に便利です。
味別のものもありますし、どん兵衛もあります。

味付うずら卵

北海道室蘭市 / 味付うずら卵ヤヤン昆布だし燻製うずら卵セット 10,000円。

すっごい美味しいです。お酒のおつまみや、サラダのお供に。

高千穂のカフェオレ、ヨーグルト

宮城県都城市 / 高千穂牧場ヨーグルト&ドリンクファミリーセット 20,000円。

コンビニでよく見るカフェオレです。このセット意外にもいろいろな組み合わせがあります。ヨーグルトもめっちゃ美味しいです。

※賞味期限が早いので量に注意。

その他

  • 生活用品として洗剤やトイレクイックル、入浴剤など
  • はちみつ (良い蜂蜜は高いですからね。パンやヨーグルトにどうぞ.)
  • オリーブオイル
  • 飲み物
    • ミネラルウォーター
    • ペットボトルのお茶
      • 紅茶花伝
      • すこやか茶
      • 綾鷹
      • 胡麻麦茶
  • いくら (ある程度小分けになっているものが良いです)
  • フルーツ
    • メロン
    • いちご
    • シャインマスカット (めちゃくちゃ美味い)
    • みかん
    • もも
  • うなぎ

お正月向けにお餅をもらった事がありますが、量が多くて消費できなくて詰みました。
フルーツや野菜は定期便が良かったです。
冷凍の魚は1種類で量が多いのは飽きるので数種類セットのが良いです。
お肉は色々と食べてみたのですが、良いお肉は油が多くて胃につらかったので省略。

参考になれば。

rubyのleveldbを使うとwarningが出るようになった

  • このエントリーをはてなブックマークに追加

RubyのLevelDBのGemは有名なものが2つあります。私は前者の方をよく利用していました。

Ruby2.7で利用してみると大量のWarningが出るようになりました。キーワード引数の代わりにハッシュを渡すと出るようです。

leveldbfiddlerに依存しており、fiddlerが原因でした。

/var/lib/gems/2.7.0/gems/fiddler-rb-0.1.2/lib/fiddler.rb:51: warning: Using the last argument as keyword parameters is deprecated

これを対応するのもあれなので、せっかくなのでRocksDBを利用するようにしてみます。

参考

sequelのafter_commit

  • このエントリーをはてなブックマークに追加

DBのライブラリとしてsequelを良く使います。使い勝手が好みです。

Modelを利用しないでトランザクションを利用する時は次のような処理を書きます。

db = Sequel.connect(...)
db.transaction do
db[:xxx].insert(...)
db[:xxx].where(...).update(...)
end # commit

何を寝ぼけていたのか、こんな処理を書いてしまっていました。
commit前に更新通知の送信をしているので、受信側はcommit前にメッセージを受け取り更新前の情報を参照してしまいます。

db.transaction do
cond = db[:xxx].where(...).select(...).first
if cond
db[:xxx].insert(...)
else
db[:xxx].where().update(...)
mq.publish(...) # 更新通知をMessageQueueに送信する
end
end # ここでcommit

もちろんtransactionブロックを抜けたところにロジックを書いても良いですが、それだと上記のように複雑な条件文の中にあると、一律実行する事はできずにフラグを用意する必要があります。

そこでafter_commitもしくはafter_rollbackを使います。

db.transaction do
cond = db[:xxx].where(...).select(...).first
if cond
db[:xxx].insert(...)
else
db[:xxx].where().update(...)
db.after_commit do
mq.publish(...) # 更新通知をMessageQueueに送信する
end
end
end

注意点は、after_commitで変数を参照している場合、ブロックの最後の値になるという事です。threadのようにその時の変数の値を渡すことができません。以下の例ではafter_commitのブロック中ではx=10ではなくx=11になります。

db.transaction do 
x = 10
db.after_commit { puts x } # x = 11
x = 11
end

MySQL(InnoDB)の空振りDeleteでデッドロック

  • このエントリーをはてなブックマークに追加

delete-insertパターンを処理しているところでデッドロックが発生しました。

#<Sequel::SerializationFailure: Mysql2::Error: Deadlock found when trying to get lock; try restarting transaction>

ネクストキーロックやギャップロックは分かっていたのですが、横着して書いたせいか件数チェックをしないでレコードが無い場合でもDELETEを行っていたのが原因です。トランザクション分離レベルはInnoDBデフォルトの「Repeatable Read」です。

トランザクション分離レベルを変更しろという記事を結構見るのですが、トランザクション分離レベルの変更はアプリケーションの設計に大きな影響を与えるため、気軽に変更するのは反対です。今回は、件数を確認して削除対象レコードが存在する場合のみDeleteを実行するようにしました。

# 駄目
db.transaction do
db[:xxx].where(...).delete
db[:xxx].insert
end

# 空振りdeleteを回避する
db.transaction do
if db[:xxx].where(...).count > 0 # for_updateもした方が良い
db[:xxx].where(...).delete
end
db[:xxx].insert
end

参考

今回の件とは直接関係はないけど、分離レベルとロストアップデートの話

国勢調査2020

  • このエントリーをはてなブックマークに追加

渋谷区に住んでいます。
渋谷区の知人の皆が配布期間が始まってから早々に封書が届いている中、一向に届きませんでした。渋谷区は対面での配布は行っておらず封書が投函される事になっています。

Twitterで「国勢調査 来ない」「国勢調査 届かない」で検索すると、届かない人はそれなりに居るみたいです。

時系列

  • 9月28日にコールセンターに電話。区役所に電話して欲しいとのこと。(このコールセンター何のためにあるんだ..)
  • 9月28日に区役所に電話。9月30日まで配布期間が延長されているので待って欲しいとのこと。
  • 9月30日。封書の投函が無いので区役所に電話。住所を伝えたところ、まだこの地区は配布がされていないので、明日、明後日まで待って欲しいとの事。
  • 10月2日。封書が投函されていないので区役所に電話。住所を伝えたところ、まだこの地区は配布されていないとの事。土日に配るからそれでも来ない場合はもう一度電話して欲しいとのこと。
  • 10月5日。封書が投函されていないので、区役所に電話。住所を伝える。週末に配布はしたが住居だと思わなくて投函しなかったとのこと。(何度も住所を伝えてる意味はいったい…)
    • この一連の流れも伝えて、郵送で送って欲しい旨を伝える。明日には届くとの事。
    • ※なお私が住んでいるところは見た目はどう見ても会社ではなく住居です。
  • 10月6日。届かなかった。
  • 10月7日。夕方に封書が届いた。

オンラインで回答するにしても、封書が必要なのが辛い。
自分が住んでいる地区が、配布がまだなのか、配布したが投函されなかったのかをオンラインで確認できるようにして欲しい。まだ配布がされていないのであれば区役所に電話はしないし、スキップされているなら、電話して配布要求できるからです。

5年後の国勢調査は、マイナンバーカードあたりを使って配布物が不要になっている事を望みます。
今回、オンラインで回答できる点は良かったです。

rubyでjavaのoptionalのようなことをしたい

  • このエントリーをはてなブックマークに追加

以下のようなことをもっとスマートに書きたい。

h = {}
node = doc.at_css(".title")
unless node.nil?
h[:title] = node.text
h[:href] = node.attr("href")
end

Ruby2.6にはthenというメソッドが追加されました。これと2.3で追加されたsafe operation nagigatorを利用します。

thenはselfを引数としたブロックを評価し、ブロックの結果を返します。

ret_val = obj.then{ |x| val } # obj == x
# ret_val == val

&.と組み合わせる事でjavaのoptionalみたいな事ができます。orElseみたいな事はできません。

h = {}
doc.at_css(".title")&.then{ |node|
# doc.at_css(".title")の結果がnot nilの場合、nodeに値が入ってこのブロックが実行される
h[:title] = node.text
h[:href] = node.attr("href")
}
# もしくはきちんと戻り値を使ってハッシュを作る
# ただしdoc.at_css(".title")がnilの場合、hがnilになる.
h = doc.at_css(".title")&.then{ |node|
h[:title] = node.text
[ :title, node.text, :href, node.attr("href") ]
}.to_h

DOM操作をするとき、unless nil判定が多くなるので、省略できて便利!

title = node.at_css(".title")&.text

参考

RubyでHashの分割代入をしたい

  • このエントリーをはてなブックマークに追加

Rubyで分割代入をしたい。values_atを使えば出来そう。

h = { :a => 1, :c => 2 }
a, b, c = h.values_at(:a, :b, :c)

# a = 1
# b = nil
# c = 2

さらにRuby2.7では pattern match を使ってNestしたHashもいけるみたい。
ただ、pattern matchは試験実装なので使うとwarningが出ます。

h = { :a => 1, :b => 10 }
h in {a:, b:}
# a = 1
# b = 10

h = { :a => { :b => 100 }}
h in {a:{b:}}
# a => undefined
# b = 100

参考

ロジクールのマウスにPrintScを割り当てる

  • このエントリーをはてなブックマークに追加

ロジクールのマウスM590を利用しています。
このマウスは左側面にボタンが2個ついており、何かの操作を割り当てる事ができます。

ボタンの割り当て設定はLogicool Optionsというソフトを使いますが、PrintScを割り当てる事ができません。

無理矢理設定する

GUIから設定できないなら、設定ファイルを直接弄ってしまおう。
設定ファイルの場所はC:\Users\{ユーザー名}\AppData\Roaming\Logishrd\LogiOptions\devices\です。このディレクトリの下に接続しているデバイス毎にディレクトリがあります。私の場合は6b01b。そのディレクトリの中にある6b01b.xmlが設定ファイルです。

... devices/
6b01b/
6b01b.xml
6b01b.rav
Flow/
6b01b_********.json

該当箇所を見つけるのが難しいですが、最初にキーを適当に設定しておきます。例えばF12を設定します。そしてLogicool Optionsは閉じておきます。
F12のキーコードは123なので、vkey="123"の場所を探します。そしてPrintSc(VK_SNAPSHOT)は44なのでvkey="44"に変更します。(キーコード参考)

このままではLogicool Optionsが設定ファイルを再読み込みしないので、Windowsを再起動します。すると、PrintScが割り当てられた状態でマウスが使えるようになります。

Logicool Options上では以下のようにSys Reqと表示されますが、特に問題は発生していません。

設定ファイルの探し方

レジトストリかファイルに記録しているはずなので、設定を弄ったときにどのレジストリかファイルの操作が行われたのかを監視すれば良いです。MicrosoftのProcess Monitorを使います。
ソフトの使い方はこのページでは説明しません。

NetlifyのTLS証明書の更新が失敗する件

  • このエントリーをはてなブックマークに追加

このようなメールが届いて、CustomDomainのTLS証明書の自動更新が失敗しました。

Title: [Netlify] Failed attempt to renew your TLS certificate

Failed to renew TLS certificate for <my-domain>

The TLS certificate for <my-domain> will expire on Jun 28, 2020. We tried to renew it, but got this error message:

SniCertificate::CertificateInvalidError: Unable to verify challenge for www.hedgehog.studio
We’ll keep trying — in most cases of failure, we succeed on the next attempt. However, it’s still a good idea to check the certificate status in your site’s SSL/TLS settings.

原因はCNAMEで設定している、****.netlify.com****.netlify.appに変更になっていたからです。公式サイトには変更のお知らせはどこにも無く、メールでの通知のみでした。

しかもメールには「No action required: sites without custom domains moving to netlify.app」とあるので、何もしなくて良いんだなとスルーしてました。

対処

  • DNSのCNAMEレコードの変更
before: cname www <my-site>.netlify.com.
after: cname www <my-site>.netlify.app.
  • _redirectsの更新(.appの2行を追加)
http://<my-site>.netlify.app/* https://blog.orz.at/:splat 301!
https://<my-site>.netlify.app/* https://blog.orz.at/:splat 301!

http://<my-site>.netlify.com/* https://blog.orz.at/:splat 301!
https://<my-site>.netlify.com/* https://blog.orz.at/:splat 301!

もしかしたら、失敗はたまたまだったのかもしれないけど、念のため.comから.appに変更しました。

メール本文

Hello,

A reminder that starting April 14, 2020, sites without a custom domain are being moved from your-site.netlify.com to your-site.netlify.app. New websites will also have URLs ending with netlify.app, unless you specify a custom domain.

Why the change? We're investing in the security and stability of our infrastructure, and this step is necessary on that journey.

It's important to note your existing sites will continue to operate properly using their current URLs. We expect some users may have configured redirects. If you have configured redirects on our service referring to your-site.netlify.com directly, we recommend you take action to add a second copy of them for your-site.netlify.app.

If you have no redirects like that, there's no action required on your part, but we wanted to inform you well ahead of the change in case you have any questions. Additional details are provided below if you'd like to read more. Thanks for being part of the Netlify community!

-Team Netlify

Will my current sites continue to work?
Absolutely. Any sites already deployed to your-site.netlify.com will continue to operate, just as they do now. Traffic to any your-site.netlify.com address will be forwarded to your-site.netlify.app seamlessly and automatically, using a 301 redirect. (This tells browsers and search engines that the site has moved, so they know the new location.)

Importantly, we have no plans to ever stop forwarding netlify.com addresses or force a migration. We understand your established domain names and inbound links to your site are important to you. After the update, links to your sites will continue to work, just as they do now. The only change will be that netlify.app will display in the URL bar, whether visitors click on a link or type your site name in directly.

Testing is now enabled—and easy to do.
We've enabled testing for the migration from sitename.netlify.com to sitename.netlify.app and you may start testing it today, especially if:

You browse via yoursitename.netlify.com start using yoursitename.netlify.app
you have redirects or other configuration pointing to or referencing https://yoursitename.netlify.com
Again, there's no action required on your part, but we wanted to inform you the option to test is available.

Will this impact my SEO?
No. Forwarding traffic to a new domain extension using a 301 redirect is a proven technique that search engines are well aware of. Your inbound links will not be affected. Your search engine rankings will not be affected.

What if I have a custom domain?
There will be minimal impact to sites with custom domains, and no need to update your DNS if it's configured according to our standard documented setup. This is true whether you purchased a domain through us or brought it with you from another provider.

Will my site take longer to load?
It takes just a couple of milliseconds to direct a .com URL to .app. Your users will not perceive any additional load time. And since browsers cache 301 redirects, there will be no speed impact for page loads after the first connection.

What about HTTPS?
We’re doing our part for a more secure web. Every Netlify site deployed uses a free certificate from Let’s Encrypt. Your certificates will continue to work and your sites will continue to be encrypted with no action required.

Do I need to update my site or application?
In most cases, no. This change is very unlikely to impact the way your application functions, as all requests will automatically be forwarded to netlify.app on your behalf.

What about new sites?
Any site you deploy after April 14, 2020 will receive a shiny new .app URL that you’ll see displayed in the Netlify dashboard. However, for simplicity’s sake, even new sites will be forwarded to the right place should anyone mistakenly type the netlify.com domain. We want things to be as simple and seamless as possible.

What if I use a proxy in front of Netlify?
Since Netlify operates as a global CDN, we don't encourage customers to use proxies or services like CloudFlare in front of Netlify. Using a non-Netlify proxy isn't a configuration we officially support. (For more details, read the community post 'why not proxy to Netlify.') If you do need to use a third-party proxy, you will want to carefully test your application after the migration. Some proxies expect content returned and won't be successful navigating the 301 redirect.

What if I have questions or concerns? We're here to help! Please join the discussion in the community or if you are on a paid plan including support, you can contact support directly.