ほろ酔い開発日誌

AI企業のエンジニアのブログです。機械学習、Web開発の技術的お話、ビジネスチックなお話、日常のお役立ち情報など雑多な内容でお送りします。

CVPR 2019 画像生成系を中心に33選

f:id:seishin55:20190703010026j:plain

CVPR2019の論文タイトルを一通り見て、画像生成系を中心にして身体と3Dやネットワーク探索、その他個人的に直近で使えそうなものをピックアップ。そのあたりをさらっと確認してまとめたものになります。★がついているものは後でもっとちゃんと読みたいものです。

続きを読む

Deep Learningにおけるバッチサイズと学習率をどう決めるか

f:id:seishin55:20190509181242j:plain

Deep Learningにおいてパラメータを決めるのは面倒くさいです。バッチサイズと学習率もその内の2つです。何かモデルを実装するときは既存研究の論文のバッチサイズと学習率と同じものを使うのが楽ですが、データが変わるだけでも調整が必要になったり、モデル構造を変更して調整が必要になったりと自分で考えないといけない場面が避けれるわけではなく、ある程度の指針が必要です。バッチサイズと学習率は関係性が強いようなので、両者についてまとめておきます。

バッチサイズと学習率

バッチサイズの学習に与える影響

以下のICLR2017の論文によると、バッチサイズを大きくすると汎化性能が落ちたということが述べられています。この論文では実験的にそれを確かめています。原因としては、バッチサイズが上がると学習がsharp minimumに収束してしまうからと考察されています。バッチサイズが小さい場合に分散が大きくなることが正則化のようにプラスの影響を与えているのでしょう。

arxiv.org

stats.stackexchange.com

バッチサイズと学習率の関係性

では、バッチサイズをとにかく小さくする必要があるのかというとそういうわけでもないようです。以下のように学習率に対して最適なバッチサイズがあることが示されています。しかも、その関係性は線形になっているのも面白いところです。

f:id:seishin55:20190509175116p:plain

つまり、単純にバッチサイズを小さくするのではなく、その学習率の中で適度なバッチサイズにするということが大切だということになります。グラフから見るに特定の学習率での精度はバッチサイズに対してすぐに最大値をむかえ、その後単調減少していきます。バッチサイズが大きくなると精度が落ちるのはこの単調減少の部分に当てはまっているのでしょう。

www.slideshare.net

論文: https://arxiv.org/pdf/1710.06451.pdf

続きを読む

令和からはじめるキャッシュレス時代のお金の使い方・貯め方 決定版

f:id:seishin55:20190430120449j:plain

最近特にQRコード決済界隈が賑わっています。昨年末PayPayの「100億円あげちゃうキャンペーン」が話題になりました。また、平成の終わりにかけてLINE Payの「超Payトク祭」や令和にかけてのメルペイの「50%還元キャンペーン」なども各社非常に高いキャッシュバック率で仕掛けている状況です。経産省の資料によると2016年でキャッシュレス決済額の割合は20%程度で、政府は2025年度に40%の利用率を目指している段階であって、まだまだ普及は進みきってはいません。

さて、皆さんは現金をどれくらい利用しているでしょうか?現金なんて使っていないし、投資についても考えている、という方にはこの記事は必要ありません。ほとんど現金払いであるという方やお金は銀行口座に眠っているという方には是非この記事を読んでほしいと思います。私はできるだけ現金を使わないように生活しており、9割以上は現金を使わなくても生活できていると思います。現金を使わければいけないお店は少なくなっている印象です。そして、とてもお得でスムーズな決済ができています。この記事ではQRコード決済等のキャッシュレス化も含めた、キャッシュレス時代のお金の使い方・貯め方について書いています。特に、

  • 大学生・社会人になったばかりでこれからお金周りを考える人
  • 社会人ではあるが、あまり積極的にお金のことを考えてこなかった人

を対象とします。内容としては、クレジットカード、QRコード決済、電子マネー(特にSuica)、経済圏(楽天、LINE)、投資について説明します。その後に私個人が具体的にどうやっているかも説明します。

知りうる限り多くの情報をカバーしようとはしましたが、世の中の全てを網羅できるわけはなく、私の使っているものを中心に比較検討した他のサービスも加えて説明している記事であって、これを参考に個人の消費のあり方を考えてほしいという趣旨ですので、鵜呑みにするのではなく、自分に最適な方法を考えてみてください。

是非、令和になるこの機会にキャッシュレスに切り替えて、お金の使い方・貯め方について考えてみましょう。

クレジットカード

クレジットカードは多くの人が持っていると思います。しかし、たまには自分の使っていないカードでどういうものが出ているか調べてみるとより自分にあったカードがあると思います。クレジットカードは種類が多く、全てを把握しているわけでもないので選ぶ上での注目点だけ説明しますが、比較する上では特にポイント還元率ポイントの利用手段の2点に注目するといいです。

ポイント還元率の基本は0.5%か1%程度ですが、利用サービスによって還元率が高くなることが多いです。そのため、自分がよく使うサービスでポイントの還元率が高くなるものを選ぶことになります。例えば、Amazonをよく使う方はAmazon利用でポイントが2%、2.5%になるものを利用します。楽天をよく使う方は楽天カード一択でしょう。

ポイントの利用手段も重要で、ポイントをためたはいいものの使えなければ意味がありません。中には期間限定で消えてしまうポイントもあります。個人的には商品券にするのは面倒くさいのでできるだけお買い物時に消費できるものが好きで、現金を使う代わりとしてポイントを自然に消費できるものが使いやすいと思います。

QRコード決済

QRコード決済は今最も競争が激しく、各社お得な制度を出しています。これに乗っからないのはもったいないです。また、政府は消費税増税の一環としてポイントの還元を最大5%サポートしようとしています。これは今年(2019年)の10月1日から9ヶ月間を予定しています。今以上にお得になることが期待されるので使っていない方は早めに利用をはじめましょう。

QRコード決済もクレジットカードと同様に、比較する上では特にポイント還元率とポイントの利用手段の2点に注目するといいです。それに加え、QRコード決済では利用店舗も確認しておく必要があります。

楽天Pay

f:id:seishin55:20190430115404p:plain

楽天が出しているQRコード決済です。200円ごとにポイント1ポイントで楽天カードと併用すると、楽天カードの100円で1ポイントも追加され、お買い物200円ごとに3ポイントつきます。後述しますが、このポイントは楽天の経済圏で使える楽天スーパーポイントで非常に使いやすいです。楽天楽天Payとは別に電子マネーとして楽天Edyもあります(楽天Payと統合して、QR決済ではなくかざすだけで支払いができる電子マネー払いにしてほしい、、)。

pay.rakuten.co.jp

LINE Pay

f:id:seishin55:20190430115442p:plain

LINEが出しているQRコード決済です。利用状況に応じて0.5%~2%のポイントが付きます。銀行口座からの引き落とししかないのでカードのポイントの二重取りはできません。LINEのポイントはLINE上のサービスで利用できるので使い勝手はかなりいいと思います。あと、LINE マイカードというのがあってStarbacksカードやTSUTAYAカード、各家電量販店のカードなどを管理できる機能が便利でこれらはLINE Payと併用すると便利です。キャンペーンの実施も豊富で4月末現在で還元率が15%プラスされる「超Payトク祭」が実施されています。また、AndroidであればQUICPayに対応させてかざすだけの電子マネー決済も可能です。

line.me

PayPay

f:id:seishin55:20190430115531p:plain

「100億円あげちゃうキャンペーン」で有名なPayPayはYahooが母体なため、Yahoo系のサービスで使えます。200円で1ポイントで還元率は0.5%。ただしご存知の通り、キャンペーン中のポイント還元率は高いです。一方で、通常時の還元率が高いわけではないこと、楽天PayやLINE Payと比べて利用店舗が限定的なことが気になっています。Yahoo系のサービスをよく使うのであれば利用を考えてみるとよいのではないでしょうか。

paypay.ne.jp

メルペイ

f:id:seishin55:20190430115739p:plain

フリマアプリメルカリの決済サービスです。最大のポイントはメルカリの売上金を使えるというところです。メルカリヘビーユーザーなら是非使ってみるとよいでしょう。また、LINE Payと戦略的業務提携をしているため利用店舗はLINE Payと同等です。そのため、比較的新参者ですが利用店舗の心配はありません。一方で、ポイントも基本はつかないですし、メルカリを使わないのであればLINE Payで十分です。現在「50%還元キャンペーン」をやっていますが、還元の最大が2500円であるのはイマイチに感じます。また、メルペイは電子マネーiDに対応しています。

www.merpay.com

Origami Pay

f:id:seishin55:20190430115725p:plain

Origami PayはQRコード決済のパイオニア感はありますが、現状はなかなか厳しい印象です。ポイント還元はなく、割引があるようですが、他のサービスが大々的な還元を行なっているだけに影が薄くなってきています。また、他のサービスはバックに大きな経済圏を抱えているものばかりなのでこれからどういう戦略を取るかに期待です。(最近の話題だと社長がTBSアナウンサーとお泊り報道されたほうが印象は強いです。)

https://origami.com/origami-pay/

以上、5つのQRコード決済を紹介しましたが、LINE Payとメルペイは戦略的業務提携を行い、楽天Pay vs (LINE Pay & メルペイ)の覇権争いになる気がしています。PayPayはダークホース感があります。利用者としては、キャンペーンでお得な支払いをしつつもそれに踊らされずに、通常時のポイント還元率とそのポイントの使い道を考えて選択しましょう。

続きを読む

大局的なMaaS(Mobility as a Service)の流れから見るライドシェア解禁

f:id:seishin55:20190309142924j:plain

ライドシェア解禁

3月7日の未来投資会議にて安倍首相によって道路運送法の改正の方針が表明されました。内容としては、ライドシェア(自家用車を使った有料顧客輸送)の活用を拡大することとなっています。現状でもライドシェアは一部で認められているようですが、それをより広範囲に認めていくことを示唆しています。ライドシェアとして有名なサービスにUberLyftがありますが、こういった配車サービスが日本で使いやすくなることを意味します。アメリカでは既にこうした配車サービスは広く使われていますが、日本ではあまり使われていません。それは法律による規制が原因にあったわけですが、改正が行われるとすぐに普及する可能性があります。こうなってしまうと苦しいのはタクシー業界で、改正に対する反対デモが行われました。

www.fnn.jp

blogos.com

MaaSとは?

MaaSとはMobility as a Serviceを略したもので、個人が車を所有するのではなく、移動手段をサービスとして使っていくことを意味しています。次世代の移動の概念としてMaaSはホットワードとなっています。

なぜMaaSが今キーワードとして上がるかというと、私個人としてはシェアリングの流れと自動運転車の実用化の2点がポイントだと考えています。

これまでは自動車を所有することは移動手段の必要性から当たり前のことでしたが、自動車を所有するということは実用的な意味で無駄が多いです。例えば通勤に使ったとしても、それ以外の時間は駐車場に止まっているだけになってしまい、非効率です。シェアリングを行なうと、使うときにだけ使う分だけお金を支払い、サービスを受けることができます。また、自動運転の実用化の可能性が高まっているので、タクシーを自動運転によって代替することも考えられます。

以上のように、車を所有しなくても、サービスとして自宅から移動できる手段が手に入る土壌ができてきているのです。これは大局的にみると、交通のラストワンマイルの問題を解決することを意味しています。公共交通機関として電車は使われますが、駅から自宅までの移動手段として車を使わないといけない方も多いでしょう。この部分をサービスとして利用できるとすれば、自宅から目的地まですべての移動をサービスとして享受することができます。

将来的には、自宅から目的地までの移動を一つのインターフェイスで確保・決済ができるようになることが期待されます。これがMaaSの目的地点になります。

海外のMaaS事情

MaaSとして非常に先進的なのはフィンランドのWhim(ウィム)です。行き先を入力すると最適な経路とその料金が表示され、あとは決済を行い移動するだけ。そんなMaaSの形態が既に実現されているのです。以下はその料金です。便利さ・料金両面から日本にあれば是非使いたいと感じてしまいます。

月額料金はサービス提供地域により異なり、例えばヘルシンキでは「Whim urban」が月額49ユーロ(約6300円)、「Whim Unlimited」が月額499ユーロ(約6万4000円)、バーミンガムでは「Whim urban」が月額99ポンド(約1万4000円)、「Whim Unlimited」が月額349ポンド(約5万円)となっている。

jidounten-lab.com

ビジネス的にみると、MaaSのプラットフォーム(インターフェースや決済)をどこが握るかというのは非常に大きなところです。もちろん、Whimはそのポジションを見据えているはずですが、Googleも既に保有する盤石な基盤に加え、モビリティにも手も出しており、プラットフォーム争いは既に進んでいるように感じます。

日本のMaaS事情

日本でもトヨタはWhimに出資していますし、他にもMaaSを目指し、色々仕掛けています。2018年1月にはe-Palette構想を発表しました。これはB向けの電気自動車(EV)で、事業者が自動車の空間を自由に使える仕掛けになっています。これは、MaaSの進行と共にC向けでは需要が頭打ちになり、B向けのサービスに方向を転換しなければならないというトヨタの意図がみえます。個人の自動車の所有は減少し、サービスとして提供するB向け事業者に車を売るということです。

www.businessinsider.jp

さらに、2018年10月、トヨタソフトバンクを組んで、MaaSを推進するためにMONET Technologiesを共同で設立しました。ハードが得意なトヨタとソフトが得意なソフトバンクが手を組み、国内では最強です。

MONET Technologies(モネテクノロジーズ)とは? トヨタとソフトバンク出資、自動運転やMaaS事業 | 自動運転ラボ

2018年11月にはMaaSの実証実験も福岡で行っており、トヨタがMaaSを念頭において、事業を進めていることがよく分かります。

my route[マイルート] 移動をもっと自由に、もっと楽しく

他にも、シェアリングを進めるパーク24とカーシェアリング事業で業務提携をしたりと、日本ではトヨタが最も動きが活発に思います。

トヨタ以外にも、交通案内のジョルダンもMaas事業を強化しようとしていたり、鉄道各社もMaaSに向けて動いています。あと、ソフトバンクUberに出資、楽天Lyftに出資といったようなところも注目したいです。

ジョルダンの「乗換案内」、選択肢にカーシェアも追加へ MaaS事業を強化 | 自動運転ラボ

個人的には、トヨタソフトバンクのタッグに鉄道各社を加えて、鉄道と自動車のMaaSを決済も含めて覇権を握るのがいいのではないかなと思うのですが、そもそも鉄道会社もたくさんありますし、なかなか険しい道程ではあります。ただ、あまり時間をかけると、海外で成熟したMaaS事業者にプラットフォームを取られかねないという懸念があります。

自動運転

自動運転の現状を皆さんはご存知でしょうか?今最も進んで知るのは私の知る限りはGoogle傘下のWaymoではないかと思っています。

2018年12月にはウェイモワンというサービスで地域限定ではありますが、自動運転による配車サービスを始めています。運用上は人が乗って監視はしている状態ですが、無人で運用する実力は既にあります。

www.nikkei.com

自動運転はレベル0~レベル5の段階で語られるのですが、レベル3(レベル3: 特定の場所ですべての操作を自動化。緊急時はドライバーが操作)の段階に達しているといえます。日本ではレベル2(レベル2: ステアリングと加減速の両方をサポート。 )までしか公道で走ることは認められておらず、現状では2020年に高速道路における自動運転の実現を目指している状態です。このような法的な規制もあって、日本は既に自動運転で大きく遅れていますし、これからもっと差を付けられると考えられます。日本で自動運転が解禁された段階で、海外で既に安定運用されている海外の自動運転事業者が入ってくる可能性は高いので、日本の事業者としてなかなか厳しい状況です。

そして日本のライドシェア事情をみると...

ライドシェアの解禁に対し反対するというタクシードラバーの気持ちは分かるのですが、法的な緩和は日本としては必要、というかむしろ後手に回ってしまっている状態です。少なくとも現状のタクシー事業のあり方のままでは将来的に厳しいのは明らかなので、タクシー事業の優位性や今後のあり方を整理して生き残っていくための建設的な議論を業界内部で行ってから、政府と交渉に持っていくなどうまい立ち回りをしないといけないだろうと考えます。

Docker環境で姿勢推定をOpenPoseで実行する

f:id:seishin55:20190306165205j:plain

はじめに

姿勢推定のOpenPoseの実行を行ったのでその方法をまとめておきます。GPU環境があれば、Dockerを使うことで簡単に使うことができました。

github.com

公式の環境構築手順に沿うのはなかなか大変なので、Dockerで環境を用意して使いたいと思います。

環境構築

以下のDockerfileを使用しました。

note.mu

FROM nvidia/cuda:8.0-cudnn5-devel

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update -y \
    && apt-get install -y \
    build-essential \
    apt-utils \
    openssl \
    git \
    cmake \
    git \
    curl \
    vim \
    ca-certificates \
    libjpeg-dev \
    libfreetype6-dev \
    zlib1g-dev \
    openssh-client \
    bash \
    g++ \
    tzdata \
    mariadb-client \
    gcc \
    xz-utils \
    file \
    sudo \
    tmux \
    libmecab-dev \
    wget \
    unzip \
    lsof \
    lsb-core \
    libatlas-base-dev \
    libopencv-dev \
    python-opencv \
    python-pip \
    python3-pip \
    ffmpeg \
    zip \
    cython \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

ENV PYTHONPATH /usr/local/python/openpose

WORKDIR /root

# openpose
RUN git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose.git
WORKDIR /root/openpose
RUN git checkout tags/v1.4.0 \
    && git submodule update --init --recursive \
    && sed -i -e "s/ubuntu\/Makefile.example/ubuntu_deprecated\/Makefile.example/g" ubuntu_deprecated/install_openpose_if_cuda8.sh \
    && sed -i -e "s/ubuntu\/Makefile.config/ubuntu_deprecated\/Makefile.config/g" ubuntu_deprecated/install_openpose_if_cuda8.sh \
    # && sed -i -e "s/git submodule update --init --recursive//g" ubuntu/install_caffe_and_openpose_JetsonTX2_JetPack3.1.sh \
    && sed -i -e "s/ubuntu/ubuntu_deprecated/g" ubuntu_deprecated/install_caffe_and_openpose_if_cuda8.sh \
    && sync \
    && sleep 1 \
    && bash ./ubuntu_deprecated/install_caffe_and_openpose_if_cuda8.sh

# python API
RUN cd build && cmake -DBUILD_PYTHON=true ..
RUN cd build && make -j `nproc`
RUN cd build && sudo make install
$ nvidia-docker build . -t openpose

結構時間かかります。

実行

dataフォルダに処理したいデータを入れます。またresultディレクトリに処理後のデータを入れます。以下のようにデータのディレクトリをマウントして、runします。

$ nvidia-docker run -v /home/ubuntu/openpose/data:/root/openpose/data -v  /home/ubuntu/openpose/result:/root/openpose/result --rm -it openpose /bin/bash

あとは、docker内で以下のように処理を行います。出力はjson形式でだけ出しています。また、model_posecocoのデータポイントを出力するようにしています。defaultではBODY_25のデータポイントになるので注意が必要です。

$ ./build/examples/openpose/openpose.bin --image_dir data --write_json result --display 0 --render_pose 0 --model_pose COCO

引数の詳細はドキュメントや以下のhelpで確認して下さい。

./build/examples/openpose/openpose.bin --help

以上でresultディレクトリを確認するとデータがあるはずです。非常に簡単に実行することができました。

おまけ: nvidia-docker導入時のエラー

nvidia-dockerの導入は検索すればいくつか出てくると思いますが、試してみると、私の場合はUbuntu16.04環境で以下のようなエラーが出てしまいました。

docker: Error response from daemon: create nvidia_driver_367.35: VolumeDriver.Create: internal error, check logs for details.

以下のissueにあるようにすれば解決したので参考になれば。

github.com

$ systemctl edit nvidia-docker

以下を追記。

[Service]
ExecStart=
ExecStart=/usr/bin/nvidia-docker-plugin -s $SOCK_DIR -d /usr/local/nvidia-docker-test

以下を実行。

sudo mkdir /usr/local/nvidia-docker-test
sudo chown nvidia-docker /usr/local/nvidia-docker-test
sudo systemctl restart docker nvidia-docker

独自ドメイン+HTTPSなポートフォリオサイトを簡単に作成し、無料で運用する方法

f:id:seishin55:20190216173409j:plain

はじめに

ポートフォリオを手軽にそして安く作りたかったのですが、それを実現させた方法をまとめます。「手軽に」という点ではBootstrapテンプレートを利用することで実現します。「安く」という点ではGithub Pagesを利用します。無料というのは独自ドメインの取得料金は入っていないのでご注意ください(独自ドメインなしでよければこれもかかりません)。他はサーバー代もかかりません。さらに、Github PagesはHTTPS化もサポートしており、これも無料です。

今回私が作ったポートフォリオサイトを掲載しておきます。Bootstrapテンプレートベースで少々いじりましたが2時間程度でできました。このようなサイトが無料で運用できます。

Shizuma Kubo - Web engineering and Machine Learning

目次

  1. Bootstrapテンプレートを利用する
  2. github.ioのURLを使って静的サイトを公開する
  3. ポートフォリオを充実させる
  4. 独自ドメインを設定する
  5. HTTPSに対応させる

1. Bootstrapテンプレートを利用する

テンプレートを探す

ポートフォリオサイトを一から作るのは時間がかかるので、ポートフォリオの元となるテンプレートを紹介します。おすすめは Start Bootstrapです。以下のBoostrapテンプレートを使えば、お洒落なサイトがすぐに手に入ります。コードはMITライセンスとなっているので無料で利用できます。

startbootstrap.com

例えば、以下のリンク先のようなサイトのコードが無料で使えます。

startbootstrap.com

他にもBOOTSTRAP ZERO ALL BOOTSTRAP THEMESもおすすめです。 好きなテンプレートを見つけて、ダウンロードし、ローカルで確認してみましょう。

ローカルでの確認

各テンプレートにダウンロードボタンがあるのでダウンロードして解凍しましょう。その中にindex.htmlがあるのでそれをクリックしてください。ライブプレビューと同じものがブラウザで表示されるはずです。index.htmlがサイトのトップになります。

ダウンロードしたファイルの中から必要なファイルををまとめてディレクトリにしましょう。そしてそれをGit管理します。commitまでしておきましょう。

$ git init
$ git add .
$ git commit -m "Initial commit"
続きを読む

エンジニアの記事のアウトプット先はどこがいい?(Qiita/note/blog)

はじめに

普段から記事を書くことは多いのですが、アウトプット先を複数抱えており、投稿先を自分の中で整理したいと思いました。結論として少し冬眠していたこのblogをアクティブにしようとする宣言の意味も大きいのですが、それと同時にアウトプット先について考えたこともまとめておこうというのがこの記事の趣旨です。

エンジニアが記事を書くことについて

最近では、エンジニアは積極的にアウトプットしたほうがいいという論調の文章を見かける機会も増えたような気もしますし、Youtuberをはじめとしたインフルエンサーの波をエンジニアも受けたのか、文章としてのアウトプットにとどまらず、動画の配信やインフルエンサー化する方もいらっしゃいます。私自身、3、4年くらい各所で記事を公開していまして、QiitaのContributionも現段階で7000を超えています。それによって、恩恵を受けるところもあり、アウトプットをすることはよいという立場にいます。最近はnoteでも記事を書いてみて、思うところもあり、blogに戻ってきたというところです。

各媒体の利点と欠点

私がアウトプット先として考える、Qiita、note、blogの3つの利点と欠点を下記に書きます。

サービス名 利点 欠点
Qiita 記事が書きやすい。ユーザーが多いのでよく見られる。SEO強い(個人的感覚)。エンジニア記事のスタンダードな位置を確立している。いいね、によるモチベーション。 金銭的なインセンティブは基本的にはない。あまり個人の名前が強くでない。
note 記事の内容をエンジニアリングに限定する必要がない。有料記事にできる。エンジニア以外の人にも抵抗感がない。 技術記事が書きにくいエディタ。バズらないとあまり見られない。SEOはQiita程強くない印象。
blog 個人の名前が強く出る。広告が出せる。自由度が高い。 プラットフォーム性が弱いため、ある程度ちゃんとした記事が書けないと全然見られない。

記事を書く目的

記事を書くことの意味は個人的には、

  1. やったことのログ。(個人的に後で見直すため)
  2. 誰かの役に立つ。(承認欲求も含む)
  3. 個人のブランディング
  4. 金銭的なプラス

1. やったことのログ

最初に記事を書き始めたときは、自分のやったことをメモするために記事を書きました。見る人のことをあまり考えているわけではなかったのでいい記事ではなかったですが、当時インターンしていた会社の人に「記事に書いてみて」と言われたのでとりあえず書いたのがはじまりでした。また、今でも作業するときに困ったときは自分の記事を参照することが多いです。誰かが見ているという程よいプレッシャーにより見やすい記事になるので、未来の自分に分かりやすくまとめることになります。

2. 誰かの役に立つ

せっかく記事にまとめるなら、他の人にも共有したほうが全体としてプラスです。自分が困ったこと、気になったことは他の人も同じ用に困ってる人、気になっている人はいるはずです。また、「いいね」のような他者からのリアクションは承認欲求を満たしてくれ、モチベーションに繋がります。

3. 個人のブランディング

アウトプットをしていると各所から色々なお声がかかります。採用関係が多いですが、「Qiitaを見ました!」と言われて声がかかることが多いです。また、最近では「論文見ました!」もありました。積極的なアウトプットをしているとエンジニアとしてポイントが高くなるようなのでおすすめです。思うに、エンジニアを測るのに適切な定量化は難しく、リファラル採用でない限り、どうしてもアウトプットをベースにみる傾向にある気がします。転職の可能性が高い業種、時代でもあるので、その点高めていて損はないはずです。また、人気記事になると実力はさておきすごいエンジニアっぽく見られるのも良いです。

4. 金銭的なプラス

せっかく記事を書くなら、多少なりともお金になると嬉しいです。ブログであれば広告(場合によってはアフェリエイト)、noteなら有料記事にすれば、お金が入ります。記事を書くモチベーション、ひいては、エンジニアリングのモチベーションになるかもしれません。

今後の方針

各媒体の利点と欠点、記事を書く目的を合わせて今後の方針を考えます。

  • まとまった内容の技術的な記事はこのblogで書きます。
  • 技術よりも大きな枠になりそうなこと、一般向けのPRになりそうなことはnoteに書きます。有料にしたい内容が出た場合もnoteに書きます。
  • 技術のtipsのようなまとまった量がないものはQIitaに書きます。

内容はDeep Learningを中心とした機械学習的内容を書こうかなと思っています。また、Web系の技術的内容も書くと思います。その他もそのうち書きます。モチベーションになるので、「読者になる」で読者になってください笑 (ブックマークも笑)

note.mu

qiita.com

twitter.com

まとめ

結局、自分の目的に合わせて使い分けることが大切かと思います。ただし、はじめて記事を書くような方は見られる可能性の高く、書きやすい(Markdownを知らなければ覚える)QIitaからはじめてみるのをおすすめします。

Rails5.0.0.1からRails5.1.5へのアップデート

はじめに

Railsのプロジェクトのアップデートをしたのでそのときのメモをしておきます。 利用しているGem等に大きくよると思いますが、アップデートの際の参考にはなるかもしれません。

環境: MacOS Sierra

Rubyのアップデート

Rubyのバージョンも2.4.1から2.5.0へバージョンアップしました。 rbenvを使っています。

$ brew upgrade ruby-build # ちゃんとこれしないとinstall出来るリストが古いまま
$ rbenv install --list
$ rbenv install 2.5.0
$ rbenv global 2.5.0

参考: rbenvをupdateして最新のRubyバージョンをインストール | 酒と涙とRubyとRailsと

factory girlのアップデート

factory_botに代わっているようです。

#old
gem "factory_girl"
#new
gem "factory_bot"

関連箇所を一括変換。

$ grep -e FactoryGirl **/*.rake **/*.rb -l | xargs sed -i "" "s|FactoryGirl|FactoryBot|"
$ grep -e factory_girl **/*.rake **/*.rb -l | xargs sed -i "" "s|factory_girl|factory_bot|"

参考: factory_bot/UPGRADE_FROM_FACTORY_GIRL.md at v4.9.0 · thoughtbot/factory_bot · GitHub

acts-as-taggable-on の調整

大体以下のようなことをやったと思います。

  1. 最新のバージョンのgemを引っ張ってくる
  2. migrationファイルの一部に[5.1]をつける
  3. 以下のissueを参考にadd_indexの部分の書き換え

mbleigh/acts-as-taggable-on

https://github.com/mbleigh/acts-as-taggable-on/issues/845

form_forからform_withへ

5.1系からform_withなのでform_withへ書き換えます。 以下のようなところを参考に。

[Rails 5.1] 'form_with' APIドキュメント完全翻訳

belongs_to

belongs_toがdefaultでrequired: trueになったようです。これ意外とハマりポイントでした。

Rails5からbelongs_to関連はデフォルトでrequired: trueになる - Qiita

終わりに

プロジェクトによって必要な修正は多くなりそうです。アップデート大変です、、