B-Teck!

お仕事からゲームまで幅広く

【雑記】累計50万PVを超えました

実は結構経っちゃったんですが、去る8/5に当ブログのアクセス数が50万を超えていました。
新卒の夏、現場に送り込まれた時期にインプットをまとめる場所として始めたこのブログを、
6年経っても継続できているとは思っていませんでした。

記事の内容こそ雑多で、技術、趣味、人生の事…みたいに適当に書き散らしておりますが、
これからもゆったり続けて100万、200万とこうやってご報告できればいいなと思っています。

あ、あとせっかくの節目なので、ブログのドメインを独自ドメインに切り替えました。
旧アドレスからもリダイレクトで飛べるんですが、一応。
ドメイン変わってからGoogleにうまく認識してもらえずAdSenseはちゃんと動いてないんですが、
そのへんは倒せたらまた記事にでもしようかな…と思ってます。

ともあれ、今後とも宜しくお願いいたします。

f:id:beatdjam:20190824111858p:plain

【雑記】休息、取れていますか?

みなさん、きちんと休息を取れていますか?
4月に異動があった人、研修が終わって配属された新人...
そうでなくても連日のこの暑さで疲れ気味の人は多いと思います。

自分自身の疲れには鈍感になりがちなものです。
「まだ頑張れる」、「もう少しで終わるから」、
そんな言葉で自分をどうにか動かしていませんか?
私はそうでした。

自分の体験。

異動と責任範囲の拡大

4月に異動があり、担当している持ち物が変わりました。
これに付随して、今までよりも広い領域で俯瞰することが求められるようにもなりました。
責任を持って自分が案件や、調査を推進する場面、苦手としていてあまり自分でやってこなかった社内の調整など…

これらはもちろん年齢的にも仕方ない業務ではあるのですが、
その重要度や、元々あまり得意としていなかったことから、
思っていた以上に精神が摩耗していたようです。

疲労の兆候

慣れない業務もあるものの、弱音を吐いてられないなと、
どうにか踏ん張るように仕事をしていたのですが、徐々に疲労の兆候が目に見えて出てきます。

  • 平日、不安や、何かしなければという焦燥感でなかなか寝付けない
  • 土日は疲れからどっぷり寝てしまう
  • 頭の回転が鈍くなり、物事の動き出しが徐々に遅くなる

これらの兆候が出ているにも関わらず、自分自身では「最近ちょっと調子が良くないな」程度にしか感じていませんでした。

少し早めの夏休みを一週間程度取ってみた

職場が夏休みを比較的広い範囲で自由に取得できるので、家庭の事情と合わせつつ少し早めに一週間程度取得しました。
休みの間はあまり仕事について考えず、自分のやりたいことやゆっくり休むことを優先していた結果、
休みが終わる頃にはだいぶ思考がスッキリし、言いようのない焦燥感などが少なくなっていました。 具体的には

  • 思考がクリアになったことで、「自分が疲れていること」を理解できた
  • 自分の疲労状態から、対応できる範囲を検討できるようになった
  • 無理をしないという判断ができることで、精神的な負担の軽減から生活リズムが改善

といった感じです。

業務上仕方ないこともあるけど。。。

業務の上で残業や、踏ん張らなければならないところが現れるのは必然で、避けられないものです。
でも、その波が終わったあとは、一度自分を客観的に見てあげながらメンテナンスしてあげる必要があるのではないでしょうか。
人間は、常に頑張り続けられるようにできてはいません。一度しっかりとした休息を取り、回復させてあげることで、より効率よく仕事をこなすことが出来るはずです。
何より、自分自身が壊れてしまったら元も子もないですからね。

しっかり休んで、効率よく働いていきましょう。

【Kotlin】KotlinのReified type parametersについて

前置き

【Kotlin】Kotlin+JacksonでJSONをparseする - B-Teck! のparseJSONがなぜ型情報を使えるのか
会社でJavaを書いている人にこの話をしたところ驚かれたので。

Genericsとtype erasure

JVMにおけるジェネリクスはJava1.4以前のバイナリとの仕様互換のため、
コンパイル時には型情報が削除され、実行時にはその型情報についてアクセスすることができない。
Javaではよく知られた仕様であり、Kotlinでも同様の動作をしている。

イレイジャについてより詳しく知りたければ下記の記事などを参照
贖罪のイレイジャ - プログラマーの脳みそ

inline関数とReified type parameters

ただKotlinでは、関数をinlineで宣言した上で、型パラメータをreifiedとすることで、
実行時に型引数を参照するような形で書くことができる。

inline関数

inline修飾子を付けた関数を、inline関数と呼ぶ。
この修飾子のついた関数は、コンパイル時に呼び出し元にコードとして展開され、
関数呼び出しの形ではなくなる。C言語のマクロに似ているらしい。
関数呼び出しがなくなることで処理速度の向上が見込めるが、
コードとして展開されるためバイナリのサイズは大きくなる。

Reified type parameters

inlineのジェネリクス関数の型にreifiedキーワードを用いることで、
実行時に扱っている型の情報を扱うことができるようになる。
何が嬉しいかというと、与えられたTの型によってJSONをパースするclassを切り替えたいとかのときに、
外から型を渡してあげることができたり、
ジェネリクスを扱う関数の中でTでキャストとか、is Tとかしたりできる。
Inline Functions and Reified Type Parameters - Kotlin Programming Language
より詳細な仕様は下記
kotlin/reified-type-parameters.md at master · JetBrains/kotlin · GitHub

Javaからは呼べない

JavaからKotlinのinline関数を呼び出した場合、Javaのコンパイラではstatic関数を呼び出すようにコンパイルされる。
Call Kotlin inline function from Java - Stack Overflow
reifiedはコードがインライン展開されていることを前提としているため、エラーとなってしまう(らしい) How can I call Kotlin methods with reified generics from Java? - Stack Overflow

まとめ

  • Kotlinではinline関数とreifiedを組み合わせて利用することで、ジェネリクスでも型情報を扱える
  • JavaからReified type parametersを利用したメソッドを呼び出した場合、エラーとなってしまう