valid,invalid

関心を持てる事柄について

gulp-util の問題、deprecation warning と migration path について

2017年12月28日に The Problem with gulp-util という記事が公開された。

medium.com

gulp をウォッチしていたわけではないのだが、たまたま残された gulp 資産を触っている時に deprecation warning がコンソールに出力され、そのメッセージ中にこの記事へのリンクがあった。

warning gulp > gulp-util@3.0.8: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5

記事の内容を要約すると以下のようになる。

TL;DR

  • gulp v4 リリースにあたり gulp-util はもう deprecation です
  • gulp-util はただの便利関数群なので使用している機能に応じて個別のライブラリに置き換えてください
  • 6752個ものライブラリが依存している… migration を手伝いましょう

同記事を抄訳したり加筆したりしつつ、もう少し詳細を見ていく。


A little postmortem

先週 GitHub で公開した gulp v4.0.0-alpha.3、これが破壊的変更を含むとは知っていたがどれほど広範囲に影響が及ぶかは想像していなかった。これは gulp-util に依存する6,752個のモジュールのためだ。だいたいは古くなった Vinyl を使用している*1

Why deprecation now?

gulp-util はただのモジュールの集まりなので2014年以来ずっと廃止するつもりでいた。ロギングのためだけになぜその他の無駄なモジュール、たとえば beeper もダウンロードしなければいけないのだろうか?プラグインのダウンロードサイズを大幅に増やすだけだ。皆がそれぞれ必要とする個々のモジュールを使うよう期待していたが、みな現状維持を選んでしまったらしい。

移行パスはそう複雑でないと踏んでいたが、先週の変更でこれは予想以上の大きな問題だとわかった。 古い Vinyl には互換性がないにも関わらずいまだ多くのプラグインで使用されている。 しかし Vinyl v2 は glup-util 付きではリリースされない。これは、我々がプラグインの作者たちに個々のモジュールへ移行してもらいたいからだ。

結果、gulp-util で警告を出すことにした。これは私たちが望んでいたエレガントな移行ではないのだが…。もしあなたが使用するプラグインが gulp-util に依存している場合、インストール時に deprecation 予定が通知される。修正を行うまではどのプラグインが警告を引き起こしているのかは分からない。

もし gulp-util に依存したプラグインが gutil.File API を使用していないのなら、そのプラグインは壊れていないかもしれない。 その場合は緊急ではないが、それでも gulp-util から離れるべきだ。

Help us fix the ecosystem

これらの手順でプラグイン作成者の gulp-util からの移行を助けよう。

  1. npm ls gulp-util を実行して、依存するプラグインのリストを取得する
  2. それぞれのプラグインに対して npm issue {PLUGIN NAME} を実行し、issue tracker をブラウザで開く
  3. issue をオープンするか、以下の API を置き換えて gulp-util を削除するようにした pull request を作る

※ コードの例は自分が実際に置換するときに使った方法(随時追記する、かも)

const gutil = require('gulp-util')
new gutil.File()

# should be

const Vinyl = require('vinyl')
new Vinyl()
const gutil = require('gulp-util')
gutil.replaceExtension(path, newExtention)

# should be

const replaceExt = require('replace-ext')
replaceExt(path, newExtention)
const gutil = require('gulp-util')
gutil.colors.red(message)

# should be

# Node 4 以降
const fancyLog = require('chalk')
chalk.red(message)

# Node 0.10 のような古いバージョンをサポートする場合
const colors = require('ansi-colors')
colors.red(message)
const gutil = require('gulp-util')
gutil.log(message)

# should be

const fancyLog = require('fancy-log')
fancyLog(message)
const gutil = require('gulp-util')
gutil.template(tmpl, data)

# should be

const template = require('lodash.template')
template(tmpl)(data)
const gutil = require('gulp-util')
gutil.env.production

# should be

const parseArgs = require('minimist')
const env = parseArgs(process.argv.slice(2))
env.production
const gutil = require('gulp-util')
gutil.noop()

# should be

const through = require('through2')
through.obj()
const gutil = require('gulp-util')
new gutil.PluginError()

# should be

const PluginError = require('plugin-error')
new PluginError()

(抄訳終わり)


現状

gulp-util, gulp のメンテナを中心に以下の issue でエコシステム全体のマイグレーションを進めている。

github.com

6,000個以上もあるので全てをまかなうのは無理そうだが、多く利用されているものから順次対応していくそうだ。

言い換えればコントリビューションチャンスなので自分も幾つか Pull Request を出してみた。メンテナがかなり精力的に色んなライブラリを直しているようなので、作業がバッティングしないよう issue や PR をちゃんとチェックするか、マイナーなライブラリから始めるとよさそう。まぁ、gulp 周りは死んでいるライブラリも多いのでマイナーなものだと永遠にマージされない可能性もあるが…。

github.com

github.com

*1:Vinyl は仮想ファイルオブジェクトを扱うライブラリ。ビニールと書くと聞き馴染みがある

仮想通貨取引を40万円で始めてから2ヶ月で120万円の含み益

雰囲気で仮想通貨をやっているメモです。技術的な話は出てこない、マネーゲームにフォーカスしたメモ

f:id:ohbarye:20171229092220p:plain

ただのメモだがあとで怒られないように disclaimer 書いておかないと…

Read the Disclaimer: Trading is a highly risky activity. Do consult your financial advisor before making any decisions. I will not be responsible for any trading decisions.

なお、この記事を閲覧する皆さんのコンピュータリソースを使ったマイニングは行っておりませんが、取引所へのリンクはお馴染みのアフィリエイトです*1

ちなみに「ぜんぜんわからない」でおなじみのインベスターZは私のようなド素人には面白いです。以下もアフィリエイトリンクです

歴史

簡易版

  • 販売所でコインを高速で出し入れしたら損した。焦らずホールドすることを学ぶ
  • 管理するのも情報集めるのも絞らないと面倒、主要コイン以外売って乗り換え
  • 手数料が小さい取引所だけを使う(スプレッドが大きい販売所は使わない、手数料の大きい取引所も使わない)
  • 利益使ってICOも1つだけ参加してみた
  • あとはひたすら放置

10月

11月

  • 購入するには取引所に登録する必要があると知る
  • 名前を知っている bitFlyercoincheck に登録した
    • 今ほど申し込みが殺到していなかったようで数日で登録できた
  • 両方に20万ずつ、計40万円入金した(今のところココからの追加投資なしでやっている)
  • ビットコイン高ぇな… おっ イーサリアムというのが比較的安いしアゲ調子じゃん、買ってみよう
    • 1日で1万円ぐらいの含み益になってボロい!!と思う
  • 調子に乗ってモナコイン、ライトコインなどばらばら買ったり売ったりしてみたら、買った瞬間に資産がシュッと減るのを目撃した
  • どうやら高速で出し入れすると損するらしいな?気付いたら4万円ぐらい損していた

    • 買値と売値の差(スプレッド)を知る
  • もしかして高速で出し入れしなくても、相場が全体的に右肩上がりなので保有していればそのうち益が出る…?と気付く

  • 11月の終わりに、そういえば bitFlyer しか触ってねーなと気付いて coincheck もチェックし始める

    • 単価の安いやつがいっぱいいたのでてきとうにバラバラと買う

12月

  • ADAコインってのが良いらしいな?(Twitterで見かけて ADA(エイダ)コインとは?最新ニュースや今後の将来性についてまとめてみた – 丸の内OL3年目 玲奈の仮想通貨の投資ブログ~2018年最新トレンド を読んだだけ)
    • 日本の取引所で扱ってないらしい
    • 海外取引所 bittrex のアカウントを作ってみた
    • 日本円の入金はできないので bitFlyer で BTC を買って送金し、2,200ほどADAを買う
    • これが初めての送金体験で「遅っ」と思ってブロックチェーン技術にようやく興味が湧いてきた
  • 長らく含み損だったモナコインが12月に高騰し、ようやく含み益になった
  • この頃よくわからんコインも色々持っていたが各々含み益になった瞬間に売っぱらって XRP, XEM に振り直した
  • 販売所ではなく取引所を使おう、取引所の中でも手数料が安いところを使おうということを"先輩"から教わった
    • 国内では Zaif or bitbank、海外では binance が良いとのことで既存資産を全部そのへんに移すことにした(未完了)
  • 絞っていた XRP, XEM, ADA がそれぞれ高騰し、50万円ぐらいの含み益になった
  • ICO にも興味が湧いたので10万円ほど利確して tokenPay のICO に参加してみた
    • 1月にどうなるか…
  • 2017/12/29時点で70万円の含み益になった
  • と書いた直後に XRP, ADA あたりが高騰し、2017/12/30時点で120万円の含み益になった

今後

  • 面倒くさそうなので確定申告やりたくないかつ来年の節税のために今年中の利確は20万円以下に抑える
  • 絞った通貨をホールドする方針
  • 増資は当面しないかな…

使っているツール・サイト

Coinboard

coinboard.me

複数の取引所を使っていると資産管理がめんどうなので、API連携して自動更新してくれて最高。

他にもポートフォリオを記録するアプリあるけど、手動入力のやつが大半で辛くないですか…

binance にもそろそろ対応するらしいので、そうなると自分が利用している取引所は全てカバーされて最強になるので開発大変そうだけど頑張って欲しいです。

Cryptact

tax@cryptact: 仮想通貨の困難な所得計算を簡単に。メニューバーのサービス名をクリックすればすぐにお使いいただけます。

tax@cryptact - Cryptact

取引所からダウンロードできる取引記録をアップロードすることで所得計算をシュッとやってくれるサービス。ちなみにこの記事は Cryptact にアップロードした取引履歴を見ながら振り返って書いた。

こちらも開発大変そうだけど頑張って欲しいです。

CoinGecko

www.coingecko.com

1,000種類ぐらいある通貨の各種指標をチェックできるサイト。保有銘柄の確認だけでなく新規の発掘にも使えるのかもしれない

MoneyForward

moneyforward.com

今のところ bitFlyer, coincheck, Zaif は自動でデータ連携できる。それ以外は手動入力で資産管理しており、厳しい

その他

Twitter で界隈の人をフォローしたり仮想通貨関連のニュースサイト*2を見たりしているがバイアスがめちゃかかる。保有銘柄や仮想通貨そのものに関する良いニュースばかり流れてきて良い気持ちになってしまう

勉強

まったくしていない 雰囲気で仮想通貨をやっている

実は仮想通貨関連の用語を調べたり株やFX界隈の用語を学んだりしし、初めのころはかじっただけのテクニカル分析を利用したり、利確10%損切り5%みたいなルールを決めて売買してみたりもした。が、ぜんぜん通用しなかった。

ある程度の長期ホールドを前提とした今のやり方だとあまり役に立たないのかもしれない

また、技術的な興味は売買をする中で遅れてやってきたのでこれからやってみようというところ

リスク

暴落は全く怖くない 一番恐れるのはこの熱狂がやがて風化してしまわないかということだ

所感

最近よく見るようになった仮想通貨で儲けた/損した系の記事に対してとにかく言いたいのは「とにかく数字を書いてくれ頼む」ということ

私のような小市民の眼前にどのような機会が転がっているのか明らかになっていてほしい…

そんな思いから具体的な金額を書いたので下から目線*3やマウンティング*4目的のコメントは No, thank you. です


年初に 2017年の目標 -1年の目標を立てるのをやめる- - valid,invalid で書いたように今年は30日ずつ何かを頑張ることにしており、仮想通貨投資はその一環でもあった

*1:特に binance はアフィ効率がとても良いらしい https://www.binance.com/?ref=12962001

*2:http://coinpost.jp/ とか

*3:e.g. 「自慢?」「元金用意できない人の気持ちも考えてください」

*4:e.g. 「しょぼw」「俺はもっと稼いだけどw」

Rails で Slack のような Magic Link による認証を実装する

passwordless という gem が最近リリースされたようなので少し触ってみた。

名前の通り認証時にパスワードを必要とせず、いわゆる Magic Link によるログイン機構を Rails アプリケーションで実現できる。

Magic Link とは

Slack や Medium が実装しているこの機能は「リンクを知ることのできる立場にあれば本人であろう」という二要素認証に似たアイデアに基づいている。

ユーザーがパスワードを覚える必要がないというUX観点だけでなく、パスワードによる認証の弱点とされる推測やブルートフォース攻撃による不正アクセスや乗っ取りのリスクを低減できるメリットがあるとされている。

japanese.engadget.com

postd.cc

とにかく試す

test/dummy ディレクトリにダミーの Rails アプリが実装されているので clone して起動するだけで試すことができる。今回の記事はこれを読みつついくつかコマンドを叩いただけにすぎない。

git clone git@github.com:mikker/passwordless.git
cd passwordless
bundle
bin/rails db:migrate
bin/rails s

DBの変更

db:migrate で作られるテーブルたちを見てみる。

rb(main):001:0> ActiveRecord::Base.connection.tables
=> ["schema_migrations", "ar_internal_metadata", "passwordless_sessions", "users"]

以下の3つは特に気にしなくてよい。

特筆するのは passwordless_sessions だ。

このテーブルは PasswordlessSessions class に結びついている。bin/rails passwordless:install:migrations コマンドで生成される、文字通りセッションを管理する。格納されるデータがどのようなものかについては後述する。

Magic Link の挙動

ユーザー作成

まずログインするとこんな感じの画面が見える。nil の部分にはログイン状態であればユーザー情報が表示される。

f:id:ohbarye:20171220005752j:plain

Sign in できるユーザーが存在しないので New User から sign up する。

f:id:ohbarye:20171220005804j:plain

Sign up すると create したユーザーで sign in した状態になる。Create 直後に呼んでいる Passwordless::ControllerHelpers#sign_in を見るとわかるように、単に cookie に token をセットしているだけ。

f:id:ohbarye:20171220005831j:plain

この時の response を覗いてみると Set-Cookie header が付いているのがわかる。

Set-Cookie: user_id=SjU3d1FBZ04vOXc1dTB3c1lIbnRHUT09LS1BbW5KczczNkRQbUd6MzBzUU5XRGx3PT0%3D--0f10eb4a45ebf818056d04ffb90b5659ac4dce08; path=/; expires=Sat, 19 Dec 2037 14:44:23 -0000
Set-Cookie: _dummy_session=dHNqVzlqakt5K1VSc0d5VE1aLzR0SUVYRnM4NVlUQnRhSW9CNXI0NnMyMnhKby95L3VJTERZN1ZyT3RnVFNmZkI2NWViN2NjYm8wS3UrSlN6eWwvaW93WGRENDF3MHN3REdqRjY4SzFBYVpZOWxQYmpmQmpxMkNYTVpROEdIL1JIYkVLNzRheXJmOHN3T0g3RUJneVZNd1FsUXNXeC9QQloxZ1ZhM3JzOHUrOGtleThTSXlzaytkOXl3MTdUVjhNK2Z6aWZpOTZiQUVBaTA4STZ2LzlHc0llWGVaWmpvWVE0RjlTdm54elBRN1QxU21Pc3NEL3NqQUlaRVlkZE1QVC0tNENDRW12UTJwY2xrY0Y2WHRQempaQT09--13e0a4893161060d7fee5357d403eb407efc3b12; path=/; HttpOnly

Magic Link

ユーザーができたので sign out して sign in ページへ。

f:id:ohbarye:20171220005852j:plain

Send magic link を押すとメールが送信される。

f:id:ohbarye:20171220005927j:plain

サーバー側では Passwordless::Session が create されている。データを見るとわかる通りセッションの有効期限も自動的にセットされる。デフォルトで1年後になっているがこのあたりは後々カスタマイズ可能になるかもしれない(オープンクラスなどでできなくもないが避けるのが無難そう)。

irb(main):013:0> pp Passwordless::Session.last; nil
#<Passwordless::Session:0x00007fe85dea6508
 id: 1,
 authenticatable_type: "User",
 authenticatable_id: 2,
 timeout_at: Tue, 19 Dec 2017 15:52:57 UTC +00:00,
 expires_at: Wed, 19 Dec 2018 14:52:57 UTC +00:00,
 user_agent:
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
 remote_addr: "::1",
 token: "PR5h4ZHwAHIidrsMGFyU91ji8KwCgfSZ9PBhOvMQjPo",
 created_at: Tue, 19 Dec 2017 14:52:57 UTC +00:00,
 updated_at: Tue, 19 Dec 2017 14:52:57 UTC +00:00>

Magic Link の在り処はどこだろうか。letter_opener や mailcatcher のような便利gemは bundle されていないので console を確認する。Magic Link が記載されたメールがログに出力されている。

Passwordless::Mailer#magic_link: processed outbound mail in 28.8ms
Sent mail to over.rye@gmail.com (9.3ms)
Date: Tue, 19 Dec 2017 23:52:57 +0900
From: CHANGE_ME@example.com
To: over.rye@gmail.com
Message-ID: <5a3927c99da8f_140273fc69a1ca14c261a@ohbas-MacBook-Pro.local.mail>
Subject: =?UTF-8?Q?Your_magic_link_=E2=9C=A8?=
Mime-Version: 1.0
Content-Type: text/plain;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

Here's your link:
http://localhost:3000/users/sign_in/PR5h4ZHwAHIidrsMGFyU91ji8KwCgfSZ9PBhOvMQjPo

http://localhost:3000/users/sign_in/PR5h4ZHwAHIidrsMGFyU91ji8KwCgfSZ9PBhOvMQjPo にアクセスしてみるとログインした状態でページが表示された!!

f:id:ohbarye:20171220005948j:plain

Sign out して再度同じ URL にアクセスするとセッション期限切れとしてきちんとエラーになる!!

f:id:ohbarye:20171220005957j:plain

routes

上記users/sign_in のような URL はどのように生成されるのだろか?

使用者は routes.rbpasswordless_for を書く。PasswordlessRouterHelpers.passwordless_forPasswordless::Engine を mount していることがわかる。

Rails.application.routes.draw do
  passwordless_for :users
  resources :users
  
  # others
end

routes 一覧を表示してみると Routes for Passwordless::Engine: の直下に生成された routes が見える。

$ bin/rails routes
          Prefix Verb   URI Pattern                  Controller#Action
           users        /users                       Passwordless::Engine {:authenticatable=>"user"}
                 GET    /users(.:format)             users#index
                 POST   /users(.:format)             users#create
        new_user GET    /users/new(.:format)         users#new
       edit_user GET    /users/:id/edit(.:format)    users#edit
            user GET    /users/:id(.:format)         users#show
                 PATCH  /users/:id(.:format)         users#update
                 PUT    /users/:id(.:format)         users#update
                 DELETE /users/:id(.:format)         users#destroy
   registrations POST   /registrations(.:format)     registrations#create
new_registration GET    /registrations/new(.:format) registrations#new
          secret GET    /secret(.:format)            secrets#index
            root GET    /                            users#index

Routes for Passwordless::Engine:
      sign_in GET        /sign_in(.:format)        passwordless/sessions#new
              POST       /sign_in(.:format)        passwordless/sessions#create
token_sign_in GET        /sign_in/:token(.:format) passwordless/sessions#show
     sign_out GET|DELETE /sign_out(.:format)       passwordless/sessions#destroy

他の gem は?

つい最近 Sorcery でも同様の機能が実装されたようだが 2017/12/20 時点ではまだリリースされていないようだ。

github.com

この他にもいくつか実装サンプルや野良 gem を見つけたがデファクトぽいものは見つからなかったのでもしかしたら passwordless は流行るかもしれない。名前もわかりやすいし。

HIPHOPダンスとヨガを始めた

年初に 2017年の目標 -1年の目標を立てるのをやめる- - valid,invalid で書いたように今年は30日ずつ何かを頑張ることにしている。やや飽きつつも10月からまた再開し、11月はダンススクールに通うことにした。

やる理由

あえて理由を言語化するなら

  • 健康をもう1ランク上に引き上げたい
  • 身体一つで勝負したい

といったところ。

もう少し補足する。

健康をもう1ランク上に引き上げたい

今年の2月に健康にテコ入れ(参考:1ヶ月で身体を健康に持っていく - valid,invalid)して以来、人並みの健康を得られた。しかし未だ敏捷性と柔軟性に難があるようで、持病の腰痛も厳しさを増してきた。どうやらこのあたりを補強しないともう1ランク上の健康には至れないらしい。

だから、やる。

身一つで勝負したい

一廉のパフォーマーになりたいわけではないのだが己の身体一つで勝負できる者が真の強者であるという少年誌じみた観念から逃れられない。さらに悪いことにこうしたイデオロギーは歳を重ねるごとに焦燥感としてのしかかってくるようですらある。

f:id:ohbarye:20170304185908j:plain

そう、これは自分にとっては過去の清算でもある。

ダンススクール

NOAダンスアカデミーでは、HIPHOPダンス、JAZZダンス、HOUSEダンスなどさまざまなダンスレッスンがあり、開校20年の間に築き上げてきたレッスンノウハウでダンスの上達をサポートします。一流ダンサーが教える初心者から上級者まで楽しめる東京都内(新宿、池袋、都立大、秋葉原)にあるダンススクールです。

はい。

www.noadance.com

知人の紹介で選んだ。1回90分のダンスレッスンだけでなく各種ヨガクラスにも参加できるのが良いところ。

感想

HIPHOPダンス

楽器経験があるので人並みにはリズム感があるから大丈夫かと奢っていたのだがそういう問題ではなかった。

拍の裏を感じ取ることと、そのタイミングに合わせて身体を自由に操作することは全く別だった。

また、人前で踊るという非日常じみた行為に恥を覚えずいかに没入できるか、いわば"トランス"できるかという点でのせめぎ合いもまた面白い。レッスン中に周囲を見回すと、いわゆる"鏡前"の歴々は何年やっているのかわからないが完全に"入(はい)"れているのでスゴイと思う。ちなみに子供や高校生は最初から素で"入(はい)"っているので強い。

最上級までいくとこんな感じになれるようなので研ぎ澄ませていきたい。

www.youtube.com

ヨガ

一日の終わりにこれまで外を向いていた矢印を内側に向けたり第三の目で自分を見つけたりとスピリチュアルな面は否定できないが、前々より興味があった瞑想と非常に近い領域にあるおかげで素直に取り組めている。

しかしそうしたメンタル面の強化よりも遥かに身体面がキツイ。キツさでいえばダンスよりも上で、その証拠に毎回筋肉の震えが止まらなくなる現象が起きる。

あまりにプルプル震えるので心配になって調べたところ、筋肉に力をいれて収縮させているときの震えは問題ないらしい。一部の筋繊維は収縮するが他の筋繊維は疲労のために収縮できないという状況とのこと。一方、ストレッチ中の震えは筋肉がストレッチ強度が高すぎるゆえに引き留めようと収縮する動きなので緩める方がよいとのこと。


1ランク上に至ったらまた何か書くかもしれない。

10月はお金周りを整理した

年初に 2017年の目標 -1年の目標を立てるのをやめる- - valid,invalid で書いたように今年は30日ずつ何かを頑張ることにしているのだが夏以降は完全に飽きていた。

しかし10月は家庭の事情もありお金まわりの勉強をちょっとだけ真面目にしてみた。

目標

以下の現状をなんとかする。

  • 年金の積立状況が謎
  • 自分の資産総額がわからない
  • 毎月お金を何に使っているか忘れる(クレカの明細も見ていない)
  • 寝てるだけでお金が増えて欲しい
  • 保険に加入するべきかどうかわからない
  • 不動産を買うべきかどうかわからない

まぁちょっと勉強すればわかる常識的なこととか、身辺の情報整理ちゃんとやってる人からすると本当にどうでもよい内容だと思うがわからないものはわからないのだからしょうがない。他にもわからないことだらけなのだが一旦はこれだけでも片付けたかった。

結果

1つずつ解消してみた。

年金の積立状況

前職で企業型の確定拠出年金(DC)なるものに加入し、退職後もよくわからないまま個人型に移管していた。毎月1万円ぐらい給与から天引きされる設定になっていたらしい。

これがどんな状況になっているか。どうやら定期的にレポートが届いているようなのだが見当たらない…。ということで電話で問い合せて住所変更を依頼した。本人確認書類のコピーを提出する必要があり、電話では完了せずに後日届いた書類を返送してようやく住所を変更できた。

同じタイミングで加入者IDとパスワードの再発行も依頼し、三井住友信託銀行のサイトにログインできるようになった。

どうやらこれまで累計で80万円弱を拠出しており、現在の残高は110万円弱なので30万円程度の運用益を出していた。ハイリスク・ハイリターンの運用プランを選んでいたらしいのだが驚きの24.4%増とは…。

気分をよくしたので掛け金を増やそうとも考えたが受け取れるのは老後と思うと…もう少し"今"にかける方向で保留することにした。

資産総額

銀行口座は1つしか持っていないので大体それが資産総額かと思ったが確定拠出年金の思わぬ額によってかさ増しされた。また、遥か昔に作ったマネックス証券の口座にもお金が入っていることを思い出した。

いちいち合算するのはめんどうだということでマネーフォワードを使うことにした。ひとまず無料プランで申し込み、自分が覚えている限りの金融機関を登録した。

moneyforward.com

これで初めて自分の資産総額が可視化された。

毎月お金を何に使っているか忘れる

マネーフォワードにクレカも登録して支出の明細を一覧で見られるようにした。

一度トラッキングし始めると、記録が残らない現金支払いをしたくなくなってくる。そこそこカードで買い物をするようになった。

支出カテゴリもある程度は自動分類されるので家賃が出費の何%を占めているかとかも見えてよい。

寝てるだけでお金が増えて欲しい

確定拠出年金の結果を見てやはり銀行にお金を眠らせていてはアカン、高利回りで運用して寝てるだけでお金が増えて欲しいんじゃという気持ちが強くなった。

株式投資は以前やってみたのだがそれなりの勉強と継続はしたくない!!!せっかくなので代替となりそうなwebサービスをいくつか試すことにした。

WealthNavi

人工知能で資産運用〜ってやつ。

www.wealthnavi.com

他にも類似サービスがあるが柴山社長のインタビューを読んで気になっていたので WealthNavi を選んだ。

tech-camp.in

FOLIO

投資先の企業ではなくジャンルを選ぶというコンセプト。

folio-sec.com

これも中の人の考えが面白い。

careerhack.en-japan.com

暗号通貨

これは完全に投機と知的好奇心。bitFlyer, coincheck, Bittrex それぞれアカウントを作ってみた。

bitflyer.jp

coincheck.com

Bittrex.com - Bittrex, The Next Generation Digital Currency Exchange

手当たり次第売買してみたのだがまったく儲かってはいない。生半可なFXとか株の知識(移動平均線がどうローソク足がこうとか)で凸ったらみるみるマイナスがかさんでびびった

また、各コインの特性やアルゴリズム、とりわけブロックチェーンの勉強などはしていない…。


各金融期間の口座に入金する際にはインターネットバンキングを利用すると圧倒的に楽。これらを始めるまでアカウントがなぜか凍結されており銀行に直接行って解除してもらわないといけないのは辛かった。

それぞれのアカウントをマネーフォワードにも登録しておいた(ただしFOLIOとBittrexは自動連携に対応していなかったので手動でちまちま入力した)。だいたい資産の70%ぐらいを運用に注ぎ込むことになったようだ。

これで寝てるだけでお金が増えていく(たまに減っていく)ようになった!!!

保険

詳細は割愛するが、現時点ではどの保険も自分には完全に不要と判断した。

不動産

詳細は割愛するが、当面は不動産購入は自分にはメリットがないと判断した。


気持ち

妻にもこうしたサービスを紹介し、幾つか興味のあるものに登録してもらった。

使ってない口座や要らない保険の整理・把握にも繋がってある意味断捨離になったり、考えなくてよいことを忘れられるようになったり自分たちにとってのノイズが減ったのも良かったという気持ちです。

Simple is not easy (抄訳)

"Simple is not easy" という記事を読んで感銘を受けたので、ついでに英語の勉強と思って抄訳してみる。

www.christopherspenn.com


Simple is not easy

「Simple」は「Easy」のことではありません。驚くほど多くの人がこの2つを同義語だと混同していますが違います。実際にこれらが反意語になるケースがあります。

「Easy」は単に簡単だということに過ぎません。言い換えれば「Easy」は結果を生み出すための努力が最小限ですむということです。 「Easy」は重荷、努力、投資、約束のいずれも意味しません。多くの人々が望むものです。労力に不釣り合いな高級が得られる仕事。大した投資もせずに得られる愛情。達成が重要でないうえに、成長することでさえもさして重要でないような人生。

一方「Simple」は非常に難しいです。「Simple」とは重要なことを除いてすべてを取り去ることで、ダビデ像が現れるまで大理石を掘り続けるようなものだからです。「Simple」はミニマリズム、すなわち複雑さを取り除いて物事をコアエッセンスにまで減らすことでもあります。初めは取り除くべき余計なものがすぐに見つかるので簡単に思えるかもしれません。しかし掘り進めれば進むほど難しくなります。必要なものを取り除かないようにするスキルと熟練が必要になってくるからです。

まだあいまいですか?「Easy」はデジタルカメラを手に入れ、さっと開封し、無作為に写真を撮ることです。 スキルや投資は必要ありません。本当に簡単です!「Simple」は、あなたが真に伝えたい本質が一点の曇りなく輝くように写真を撮る方法を学ぶことです。

この時点であなたは「「Easy」は怠け者の価値観だから自分の人生と自分の辞書から無くしてしまおう」と思っているかもしれませんが、だとしたらあなたは恐ろしい間違いをするでしょう。「Easy」は勢いを生み出すものです。「Easy」によって早期に得られる低リスクの成功体験は継続へとつながるでしょう。お客さんを招き入れて最初の買い物をさせるもの、初めて買ったデジタルカメラで最初の写真を撮るのに役立つもの、それが「Easy」なのです。そう、「Easy」こそがボールを転がすのです。

一度そうした勢いを得たら、あとはシンプルさと簡素化に焦点を当てることが大事されます。先入観、成功への障害、不要なものこれらすべてを取り除くことが絶対に不可欠になります。とはいえ初めに「Easy」な成功体験を得られなければ、スキルを獲得したり何かに熟達したりすることは決してないのではありませんか?

「Simple」は「Easy」の違いを理解しましょう。あなたがしていることのどのあたりに「Simple」と「Easy」があるのか考えてみましょう。最初は「Easy」で、後から「Simple」になっている、そうでしょう?


ソフトウェアエンジニアリングの文脈、特に Rich Hickey 先生のおかげで Clojure の文脈で見かけることが多い「Simple」と「Easy」の概念だが、この記事ではソフトウェアのことには一切触れていない。人生訓のような語り口が印象的だった。

特に納得したのは「Easy」の良いところを強調しているところだった。弾みを付ける「Easy」なもの(momentum builder)がなければ継続や熟達には届かない、たしかに。これは教育心理学の「人は学びたいから学ぶのではなく、学び始めたから学ぶ」のだという研究結果にも通じるものがあると思う。学び始めのランディングを手厚くすることで自走する状態に持っていくことができるという考え方だ。

合わせて見たい/読みたい

Simple Made Easy

シンプルさの必要性 | eed3si9n

Clean Coder Blog

ふつうのRailsアプリケーション開発

『教育心理学概論』

意図しないイベントバブリングの停止 in CoffeeScript

jQueryのイベントハンドラでreturn falseするとイベントのバブリングが止まるとは知っていたのに気づかなかった例

flag = true

setFlag = =>
  flag = false

$target = $('.target')

$target.on 'change', (e) =>
  setFlag()
    
$target.on 'change', (e) =>
  submit(e.value) # ここに到達しない

お分かりいただけただろうか

var $target, flag, setFlag;

flag = true;

setFlag = () => {
  return flag = false;
};

$target = $('.target');

$target.on('change', (e) => {
  return setFlag(); // ここで return false しているので
});

$target.on('change', (e) => {
  return submit(e.value); // ここに到達しない
});

CoffeeScript を捨てようかともがいている最中にその意思を強めた例とも言えるがこんなコードを書くのも悪い