財テク/初のOSSコミット/オイスターソース舐め妖怪で学ぶ共変・反変

※この記事は『BREWDOG INDIE』を飲んで書かれた。

財テク

最近はお金のことばかり考えている。どのような税金が引かれているのか、確定拠出年金はやるべきか、学生納付特例で払わなかった年金は追納すべきか、貯金は普通預金か投資信託か。正しい戦略を立てないとこれからの人生で大きなロスをしてしまうという危機感がある。

なおこの記事やリンク先の記事の正しさは保証しない。その能力が僕にないので。

確定拠出年金

やる。今年は様子見で小さい額にしたが、来年からはできる最大額を突っ込むつもりだ。自分で運用するのと大きく違うのは節税効果であり、確定拠出年金への拠出は所得控除の対象となり課税されない(所得税住民税)。拠出した額の3割くらいの節税になる。

年金の追納

やらない。年金制度が現状維持すると仮定してもそれほどインパクトのあるメリットは出てこないし、現状維持できるとも思えない。

あてにしちゃダメって言われても年金天引きされてるんですが…

以下参考。お金の話ではポジショントークではない文章を探す方が難しく信頼性の低い記事だが、知識のない僕が自分で考えるよりはマシだった。

貯金

運用は投資信託を考えているが、これは長期的にやるものであっていつでも引き出して生活資金に充てられるものではない。調べていくうちに生活防衛資金という言葉を知った。とりあえず貯金用の普通預金口座(元本割れがなくいつでも引き出せることが重要)を作り、そこに月収の6ヶ月分の貯金を作れたら余剰金で投資信託を始めようと思う。6ヶ月分というのは感覚で決めたが、歳を取って健康のリスクが増大したら増やす必要があるだろう。

初のOSSコミット

Dota2の情報サイトにOPENDOTAというのがある。オープンソースだ。そこに日本語訳の不十分な箇所や間違っている箇所があったのでプルリクエストを送ったところ、すんなりマージされた。日本語話者にとって翻訳の修正というのは最も手っ取り早くOSSに貢献できる方法だろう。機能面でも改善できる箇所があるのでこの調子でやっていきたい。

オイスターソース舐め妖怪で学ぶ共変・反変

普通のソース焼きそばに飽きてきたのでオイスターソース焼きそばを作ろうと思ってツイートしたら、ゆーちきプロから怪文書が送られてきた。

これはプログラミングにおける共変という概念だ。「A <: B」はAがBを継承していることを表す。大雑把に言えばAの代わりにBを使えるという意味だ(実際はこの文脈ではオイスターソースはソースの下位分類ではないが、それは忘れよう)。横棒は上ならば下という前提条件を表す。

さて、上記ツイートは妥当だろうか。つまりソースの種類と、それを使った焼きそばは共変だろうか。(なんでもいいから)ソースを求められた場面でオイスターソースを使うことはできる。何でもいいからソースがかかった焼きそばを出せと言われたときにオイスターソース焼きそばを出してもまあいいだろう。だから共変。

反変という概念もある。オイスターソースがソースを継承しているという前提条件はそのままに、オイスターソース舐め妖怪とソース舐め妖怪の関係を考えてみる。

  • オイスターソース舐め妖怪はオイスターソースだけ舐めることができる
  • ソース舐め妖怪はソースならなんでも舐めることができる

このとき、どちらがどちらの代わりになれるだろうか。もちろん「ソース舐め妖怪がオイスターソース舐め妖怪の代わりになれる」が正しい。つまりソース舐め妖怪はオイスターソース舐め妖怪を継承している(と解釈して問題が生じない)。

オイスターソース <: ソース
---------------------------
ソース舐め妖怪 <: オイスターソース舐め妖怪

前段と後段で継承関係が入れ替わるのだ。

本質はなにか。オイスターソース焼きそばは客にソースの情報を提供する側だが、オイスターソース舐め妖怪はソースの情報を受け取る側。たぶんそういうことだと思う。具体例をつかってイメージするのは大事。

今日の日記長すぎない?

先輩の金で豚みそ漬けを食べた/Akka HTTP/徳が低い

関連企業に勤めている先輩とご飯に行ってきた(ごちそうになった)。かねてから色々と相談に乗ってもらっており、会社員として無事にスタートを切った姿を見せることができて嬉しい。

入社直後で意識が高まっているので、以前中途半端に勉強してやめたScalaを触っている。具体的にはAkka HTTPで軽めのwebアプリを作ろうとしている。日本語の情報が少ないのは困難だが、Rails(!)のチュートリアルを見て自分の知りたいことを英語で何というのか調べて、それからドキュメントに検索をかけている。

僕は徳が低い男だ。すぐ怒り、間違いを認めず、そのくせ自分のプライドが傷つけられることにばかり敏感で打たれ弱い。新しい環境でこれらの欠点を自覚することが多く嫌になる。だが、道理とは関係なく自分を強く見せて社会的に優位に立とうとするのは、サルとしては自然な行動だ。つまりこういう心のはたらきをなくすことは難しい。人間社会はヒトに厳しいのだ。どうしてこうなってしまったのやら。

ScalaでOpenCVを使うときの予約語トラップ

ハマったので記録。

問題

OpenCVにはScalarというクラスがある。このクラスはvalという名のフィールドを持つがゲッターはない。値を得るためには直接アクセスする必要がある。valの型はArray[Double]であり、その先頭の値を得るために以下のようなコードを書いた。

するとエラーが出た。

解決

これはvalがScalaの予約語だからである(もちろんJavaでは違う)。

When one needs to access Java identifiers that are reserved words in Scala, use backquote-enclosed strings. For instance, the statement Thread.yield() is illegal, since yield is a reserved word in Scala. However, here's a work-around: Thread.`yield`()

(筆者訳)
Scalaでは予約語となっているようなJavaの識別子にアクセスする必要があるときは、バッククォートで囲まれた文字列を使う。たとえばThread.yield()という文はScalaではyieldが予約語なので許されない。回避策はこうだ: Thread.`yield`()

ScalaはJavaのライブラリを流用できるのでこういう事故はよくあるのだろう。

トラップ

単に予約語を識別子として用いた場合シンタックスハイライトで色がつくので気づくはずだが、今回は先頭の値にアクセスするために(0)をつけており、シンタックスハイライトが効かず発覚が遅れた。

🙂