YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

2017年に買ってよかったもの

はじめに

こんにちは、三十路男です。今年も残すところあと3日となりましたが皆さんいかがお過ごしでしょうか。去年書いてみたら結構1年の間になにを買ったかが明確になってよかったので、今年もやってみる。

2017年に買ってよかったもの

SONY WI-1000X ワイヤレスノイズキャンセリングイヤホン

12月に入ってから買ったけれど、これのおかげで国際線の機内でも快適に映画を見ることができてよかった。気に入ってる点を書くと次の通り。

  • ノイズキャンセリングの性能が高い
  • 電池の持ちが長い
  • ネックバンドタイプなのでなくしづらい
  • イヤホンジャックにつなぐためのケーブルがついてくる

特に最後のやつは地味に重要で、飛行機用の左右が分離したステレオジャックも付属してくるので、機内でもそのまま使えます。 機内で使えてカタログスペックではあるけれど13時間使えるので、日本〜サンフランシスコ間、日本〜ロンドン間も十分カバーできるので安心です。

Intel NUC

これも12月頭ですね。12月にいろいろと物入りになって参りました。MacBook Pro 15'' (Mid 2014) が11月末にバッテリーが膨張してしまったのでApple Store表参道で修理したんですが、原因がはおそらく過充電でした。 そもそもこの2ヶ月前くらいからXPS 13''にArch Linuxを入れてメインマシンに切り替えていたし、ノートPCを外付けモニタに繋いで使い続けるのはマシンによくないので前々からデスクトップマシンはほしいと思っていました。 しかしながら、マシンの性能自体が上がっていて、高い負荷をかけるような処理もほぼ必要ないので、 タワーPCではなくコンパクト筐体のマシンが望ましく思いました。 数年前までであればおそらくMac miniを買ったんでしょうが、iOS開発をメインでしているわけでもなく、POSIX環境としてもmacOSに疑問を持ってLinux環境をメインに変えたので、じゃあこれだなってことでNUCにしました。

NUCには様々なモデルが出ていますが、Intel Core i5であればちょっとした検証で負荷をかけるにしても十分なので、それベースの筐体を選択しました。メモリがボトルネックになることが多いので(動画の処理や写真の現像など)、メモリはしっかり積みました。しかし最近のLinuxはすごいですね。このマシンはArch LinuxではなくUbuntuにしたのですが、家に各パーツが来てから部品を入れてOSのインストールをして普通に常用できる環境にするまで2時間程度でできました。まったく何も困りません。4kモニタ(後述)の設定もまったく困りませんでした。

JAPANNEXT JN-IPS320UHD

JAPANNEXT JN-IPS320UHD 4K 32インチ液晶ディスプレイ アルミ製 AMD freesync UHD PCモニター

JAPANNEXT JN-IPS320UHD 4K 32インチ液晶ディスプレイ アルミ製 AMD freesync UHD PCモニター

先述のNUCを購入する前に、7年前に買ったフルHDモニタだけで作業するのはいい加減近年の作業環境として厳しいなと思い、4kモニタを購入することにしました。 モニタを買うのが久々すぎたのでまったく勘所がなかったですが、4k 60Hzが出せるもので評価が安定しているJAPANNEXTのものを購入しました。

画面サイズはおかげで非常に快適で、ブラウザとエディタを画面を縦半分に分けて使ってまったく問題ないです。画面が大きいので、高さをかさ増ししないと画面の下側を見るのはちょっとストレスがあり、また持っていたモニタアームの重量を超えていたので使えなかったのが残念ですが、適当に台をおいて対応しようと思います。通常閲覧する分には画面上から3分の2程度を見ていれば良いので快適です。

パンデミック:新たなる試練 日本語版

これまでボードゲームとは疎遠だったのですが、 @shiumachi とたまたまこのゲームをする機会がありやってみって面白かったんで購入しました。このボードゲームは「協力ゲーム」と呼ばれるジャンルで、参加者全員で敵と対峙して困難を乗り越えるというのが参加者の目標です。このゲームは名前の通り世界でパンデミックが発生しかけている状態からゲームが開始し、参加者それぞれに割り振られている特殊技能を活かして病原菌を退治するというゲームです。このゲームの何がいいかと言うと、酔っ払った状態で複数人でワイワイやると盛り上がるということです!

AliExpress全般

11月半ばごろから自作キーボード熱が高まったのでAliExpressを利用することが非常に増えました。特にどれが優れていい、ということではなかったのですが、正直これまでAliExpressに持っていた印象がまったく変わりました。

たとえばこの500円の無線イヤホン。

www.aliexpress.com

500円で送料無料なんですが、正直「500円だろ?買って3日で壊れるだろ」とか「どうせ音質最悪だろ」とか鷹をくくってたわけです。でも送料無料だし、なんかネタでおもしろそうかなと思って買ってみたら驚きでした。こんなに安いのに、無線で音もちゃんとしてるんです。もちろん、高級イヤホンと比べたら明らかに違いがわかるんですが、適当に音楽を聞くだけなら全然使えます。ラジオを聞いたりするのであればもう十分です。

ほかにもこの商品。これはハンダを剥がすための道具なんですが、200円以下ですよ?それで中国から買って送料無料なんです。これを売って一体どうやって儲けてるんでしょう。

www.aliexpress.com

こういうような商品がいっぱいあるんです。それでも届いてみるとちゃんと使えるんだからすごい。個人的な感想としては、価格に対するサービスレベルの設定が絶妙なんですよね。例えば包装。これはAmazonなんかとくらべちゃいけません。無茶苦茶です。届いてみたらダンボールは潰れてるし、そもそもダンボールもどっかの使い回しのダンボールの、しかも切れっ端だし。でも別にいいんです。中身は何も問題ないから。あと問題あったらもう一回送ってくれるから。

これは「サービス」に対する考えを再認識させてくれるものでした。

おわりに

個人的にはものはなければない方がいいと思っているのですが、一方で持っているものを買い替えたり、これまでにまったくなかった新しいものというのは買ってみないといけないなと思っています。来年も新しいものとの出会いが楽しみです。

資産運用に取り組み始めた

はじめに

こんにちは、南国旅行から帰ってきたものです。日本寒すぎ。今年もあと10日ほどとなりましたがみなさんは楽しくお過ごしでしょうか。

この記事は pyspa Advent Calendar の21日目の記事です。前日は @takabowの旅行記 でした。

去年は 健康に気を遣って筋トレを始めた 話を書きましたが、今年は健康に加えて今後のライフプランを考えて資産運用を始めた話を書こうと思います。

TL;DR

FPに資産運用の相談をして資産運用を開始したら、色々面白くなってFP技能試験を受けることにした。

みんなが欲しかった! FPの教科書 3級 2017-2018年 (みんなが欲しかった! シリーズ)

みんなが欲しかった! FPの教科書 3級 2017-2018年 (みんなが欲しかった! シリーズ)

何をしたのか

資産運用すると言っても人それぞれの事情があり、すべての人に最適な唯一の資産運用プランというものは存在しませんので、あくまでこれは自分の話です。しかしながら計画をする際にはまず現状を明らかにすることは必要で、まずそこから始めました。 ちょうど資産運用をしなきゃなあと思っていたところに独立系ファイナンシャルプランナーの方と話す機会が得られたので、じっくりと時間を使って資産運用計画を練りました。

具体的には次のような流れです。

  1. 保有資産の把握
  2. 月次の資産の流れの把握
  3. 今後の人生計画の明文化
  4. 各ライフステージにおける費用の概算
  5. 短・中・長期での保有資産の割り振りと計画
  6. 各計画に応じた資産運用の実行

それぞれは当たり前に聞こえますが、一連の作業をちゃんとやるとそれなりに時間がかかる作業でした。

1. 保有資産の把握

まず何はともあれ、保有資産の把握です。これがわからなければ、資産の短・中・長期での割り振りなどができないので、現状の資産を洗い出しました。幸か不幸か、おおよその資産は預金、個人向け確定拠出年金、少ない銘柄の株しかなかったので、Money Forwardに登録していたこともあり、すぐに把握することができました。

2. 月次の資産の流れの把握

次はキャッシュフローを把握する作業をしました。当たり前の話ですが、固定費は毎月かかってくるものなので、ここが改善できると毎月資産を積み上げていけることになります。無駄なものにお金を払っていないか、日々の生活を振り返る上でもとても有意義な作業でした。

たとえば、保険の見直しや、確定拠出年金の掛け金の見直し、月々の光熱費の把握から始まり、職業柄各種オンラインサービスに登録しているので、その必要性など、さまざまな角度から現状を理解していきました。

3. 今後の人生計画の明文化

なんとなく「これからの人生はこんな感じかなあ」と思っていても、どういうイベントにどのくらいの費用がかかるのか、実際に書き出してみないとしっかりと把握することはできません。

結婚、住宅、育児、老後など、考えることは無限にありますが、大まかにどういうイベントが何歳ごろに起きそうなのかを書き出していきます。この中には予期せぬ病気や怪我なども含まれています。あくまで予想で、何年以内に何回ぐらい大病や怪我で収入が得られなくても耐えられるのかなどの把握をするためのものです。

人生計画と書くと大げさに見えますが、例えば数年おきにラップトップを新調するとか、年に1回は旅行に行くといったものも、定期的にまとまったお金が出ていくようなイベントは挙げていきます。

4. 各ライフステージにおける費用の概算

どういうイベントがいつに起きそうかわかったらそれぞれにかかる費用を計算していきます。簡単な算数です。どのタイミングでどれくらいの費用が必要かわかれば、現在保有している資産をどういった金融資産に割り振るかが決まるわけです。

よくある話としては老後はどういった生活をしたいか、です。年金制度が仮にいまのまま続いたとしたら年金でいくらもらえて、インフレ率がどれくらいになるはずなので、月にいくらかかって、など予想で計算していきます。当たり前の話ですが、あくまで予想なのでこれで完璧になるわけではありませんが、備えがないよりはよっぽどマシです。

また資産運用は目標がないと正しい判断を下せなくなるので、このステップで貯蓄目標を立てます。

5. 短・中・長期での保有資産の割り振りと計画

資産がわかったら、各ライフイベントにあわせて短・中・長期で保持していく資産の割り振りを行います。

大まかに短期=直近5年、中期=5年〜15年、長期=それ以上くらいに必要になりそうなまとまった費用をそれぞれのカテゴリに分けて運用していきます。まずはざっくりとすでに持っている保有資産を割り振ったあとに、キャッシュフローから月にいくらずつそれぞれの資産とし割り振っていくかを決定します。

このとき資産の持ち方も考えます。いままで何も考えてなかったのでおおよそ日本円で預金の形で保有していましたが、なんともったいないことをしていたのかと思いました。資産運用は投資と直結しますが、それぞれの金融資産の流動性とリスクを加味して、割り振ったあとの資産をどの金融資産でどれだけ保有するかも考えます。普通預金、定期預金、財形貯蓄、団体保険、積立保険、債権、投資信託ETF)、株式、不動産、など、それぞれに特徴があります。たとえば短期資産を不動産で持とうという人は少ないでしょう。 また運用をする際にも確定拠出年金(企業型・個人型)、NISAなど税制上優遇されるものもあるので、そうした制度の仕組みを把握することもこのタイミングで行いました。

これは人それぞれの状況(経済状況、家族構成、年齢、リスク許容度など)によって変化するので一概にどういう形で持つべきであるとは言えません。ただ自分で納得のいく運用ができることが大事だと感じました。この納得の行くポートフォリオを組む部分がまた面白いところでもありました。

6. 各計画に応じた資産運用の実行

計画ができたらあとは実行するだけです。例えば、いままで特に困ってなかったのでメガバンクのと外貨用にシティバンクしか口座を持っていなかったのを、いくつかのネット銀行の口座を開設してメインバンクの変更をしたり、ネット証券の口座を開設してNISAでの運用を始めたり、個人型確定拠出年金iDeCo)の口座を変更したりなど様々です。

この時期はまとまったお金が動くので気持ちとして落ち着かないところもありましたが、いまは持っている資産をきちんと割り振ることができたので、ようやくスタート地点に立てたかなという気持ちです。ここからきちんと運用していくことが大事になるので、定期的に自分でも振り返りを書いています。

FP技能検定を受けることにした

ファイナンシャルプランナーに相談しているうちに、お金周りの身近な制度や資産に関して興味が出てきたので色々調べていたら、結局FP技能検定用のテキストを読むのが一番早いという結論に至って今読んでいます。

ファイナンシャルプランナーというのは士業ではないため、資格がなくても事業が始められますし、また別途資格がなければできない業務内容があったりします。(cf. 税理士、証券外務員、保険外交員など)そのためFP技能士の資格を持ってもどうということはないのですが、ITパスポート試験などと同じで、とりあえず網羅的に理解をするためのきっかけとしての受験はありかなと思って面白半分で受験申請をしました。

pyspaの人にもファイナンシャルプランナーのことを話して、上記のようなことをしたと共有したら、多くの方が同じファイナンシャルプランナーに相談して、皆が「良かった」と言っていました。皆それぞれにしっかりとしたエンジニアなんだけれども、いざ自分の資産計画となると、まだまだ考えることがたくさんあったようで、自分と同じく良いきっかけになったようです。

自分があったことある人ならもうちょっと具体的な話を共有できるので、興味あったら教えてください。まずは試験に受かるようにがんばります。

明日は @shiumachi の記事です。

or-done-channelでコードの可読性を上げる

はじめに

こんにちは、キーボード自作おじさんです。このエントリはGo Advent Calendar 2017の4日目の記事です。 今年のエントリーは大作が並ぶアドベントカレンダーの休憩用のエントリーと思っていただければ幸いです。

Goの並列処理のパターン

Goが公開されてからもう8年になり、Goが得意とする並列処理にもGo特有のパターンなどがコミュニティ内で蓄積されてきました。 その中でもよく聞くものとしては

  • for-select loop
  • or-channel
  • or-done-channel
  • tee-channel
  • fan-in, fan-out

などがあります。今日はその中でも or-done-channel について書こうと思います。

どういうときに or-done-channel を使うか

上限の数が決まっているような処理を行う場合に

  • データのソースからの入力が終わってしまった場合(channelのcloseに対応)
  • 上限の数に達してしまった場合(doneに対応)

のいずれかに当てはまる場合に便利なパターンです。

rangeを使う場合

まずchannelがcloseするまでの処理を行う場合は、range キーワード使って forループを回すのが便利で可読性も高いです。

for v := range ch {
    something(v)
}

しかし、この場合は処理の上限に達してしまった場合が対応できません。何らかの形で ch と done の両方を受けてあげる必要があります。

for-select loopだけを使う場合

そうなるとGoで複数のchannelを使った並行処理を書こうと思った場合には for-select loop が一番良く出てくるので、それを書きたくなります。

LOOP:
for {
    select {
    case v, ok := <-ch:
        if !ok {
            break LOOP
        }
        something(v)
    case <-done:
        break LOOP
    }
}

これでとりあえず希望の処理は書けるのですが、どうも見た目が大きくなってしまいます。そこでこの処理を別途まとめて、rangeの書き方に持ち込むのが or-done-pattern です。

or-done-channel

deferの性質を使って done が来ても ch からのデータ取得が終わった場合にも、かならず stream を close しています。これで得られる stream が閉じられたどうかだけ意識すればよくなるため、普通に range のパターンに持ち込めるわけです。

func orDone(done <-chan bool, ch <-chan Data) <-chan Data {
    stream := make(chan Data)
    go func() {
        defer close(stream)
        for {
            select {
            case <-done:
                return
            case v, ok := <-ch:
                if !ok {
                    return
                }
                stream <- v
            }
        }
    }()
    return stream
}

for v := range orDone(done, ch) {
    something(v)
}

Goはシンプルな文法ながら、 goroutinechannelfordefer などの機能をうまく組み合わせると非常に柔軟な書き方ができるので、こういった書き方との出会いがたくさんあって日々勉強になっています。皆さんも面白いパターンを知ったらぜひ教えてください。

明日は @cia_rana さんです。

package.el + use-package で落ち着いた

はじめに

こんにちは、Arch Linuxをメインマシンにしてから毎日盆栽の手入れのように設定ファイルを弄くりましているものです。今日はEmacsのパッケージ管理を結局 use-package にしましたという話です。

アンケートを取ってみた

なんの気なしにアンケートを取ってみたら100人以上の方にご回答頂きました。ありがとうございました。結構 package.el だけの人っていうのは多いなあという印象でした。

なんでuse-packageも使うようにしたか

次のような考え方が前提にありました。

  • 外部コマンドに依存したくない
  • 依存パッケージの管理を別ファイルで行いたくない
  • init.elで管理対象の拡張は領域ごとに分けておきたい

1つめの条件でCaskが消えました。2つめの条件でel-getは若干対象外としました。 package.elだけの場合、custom変数が保存される、ということだったけど、複数台のマシンで共有してたら中身がところどころ抜けてしまい、あまり信頼できない状態になってしまったのでやめました。

use-packageの設定

まず init.el は、とりあえず use-package.el が入ってなかったらインストールして、あとは必要に応じて use-package で拡張を呼び出しています。 :ensure t によって自動でインストールされるのは便利ですね。

(require 'package)
;; Added by Package.el.  This must come before configurations of
;; installed packages.  Don't delete this line.  If you don't want it,
;; just comment it out by adding a semicolon to the start of the line.
;; You may delete these explanatory comments.
(package-initialize)

;;;;; add melpa and orgmode for packages
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
    ("melpa" . "http://melpa.org/packages/")
    ("org" . "http://orgmode.org/elpa/")))

(unless package-archive-contents
  (package-refresh-contents))
;;;;; ensure to use use-package
(when (not (package-installed-p 'use-package))
  (package-install 'use-package))
(require 'use-package)

;;;;; init-loader
(use-package init-loader
  :ensure t
  :config
  (init-loader-load "~/.emacs.d/inits"))

しばらくはこんな感じでやってこうと思います。いまのところ野良拡張の必要に迫られることなく使ってるけど、もし必要になったら、そのときは el-get の利用を考えます。

外部ディスプレイの設定をする

はじめに

こんにちは、最近自宅のメインPCをArch Linuxにしたものです。予想外にあっさりArch Linuxの設定ができたので、Linuxデスクトップ環境の進化はすごいなと感心しています。XPS13''(9350)でArch Linuxを動かしていますが、その外部ディスプレイの設定をしたのでメモしておきます。

USB Type-C - HDMI変換コネクタ

ハードウェアは相性があるので動作報告しといたほうがいいかなと思ったのでメモ。

これは2年弱前くらいから使ってたやつで、もともとWindows 10を動かしてたときに外部ディスプレイにつなぐために買ったやつだけど、もちろんArch Linuxを入れたあとでも動作しています。

XRandR

XRandRを使う場合はターミナルで簡単に設定できます。ここではeDP1というディスプレイとDP1というディスプレイがconnectedになっていて、DP1のほうが外部ディスプレイです。

% xrandr
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
eDP1 connected primary (normal left inverted right x axis y axis)
   1920x1080     59.93 +
   1400x1050     59.98  
...
   720x405       60.00  
   640x360       60.00  
DP1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 530mm x 300mm
   1920x1080     60.00*+  60.00    50.00    59.94  
   1920x1080i    60.00    50.00    59.94  
...
   640x480       75.00    60.00    59.94  
   720x400       70.08  
DP2 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

認識されているディスプレイがわかったら、また同様に xrandr コマンドにオプションをつけて配置します。

% xrandr --output eDP1 --auto --output DP1 --auto --left_of eDP1

これで外付けディスプレイをラップトップのディスプレイの左側に配置した感じになりました。便利。

また普段はラップトップを閉じた状態で外部ディスプレイにつないでいるので、その場合は備え付けディスプレイはオフにした状態で外部ディスプレイをprimaryにしたい。

% xrandr --output eDP1 --off --output DP1 --auto --primary

こんな感じで試してみていい感じになったらshellscriptなどに残して自動化などをすると良いでしょう。

ARandR

しかしもっと便利なものがあって、ARandRというRandRのGUIがあり、これで同様の設定ができました。 f:id:ymotongpoo:20171113004214p:plain

XRandRのときと同様にOutputのメニューから認識されているディスプレイを選択して、下の画面で任意の位置に配置します。配置が終わったらApplyすれば、そのような画面構成になります。レイアウトが気に入ったらセーブすれば次回以降呼び出すときに便利。

参考