城陽人の本棚 このページをアンテナに追加 RSSフィード

2017-08-18

[]最近考えてること

先日子供が生まれました。めでたい。

というわけで、これからますます、時間の使い方を考えないといけない。

プログラマ35歳定年説みたいなのが言われる理由がなんとなくわかる。まだ35じゃないけど。30過ぎるとみんなライフステージとか仕事とかいろいろ周りの環境が変わっていくんだ。でもマネージメントなんてちっともやりたかないし、自分で手を動かしてるのが楽しいし、生存戦略みたいなのは常に考え続けてる。ネットを見渡してると自分はたぶん一流エンジニアにはなれそうにもないけど、好きなことをやって面白おかしく生きていくために、自分の居場所は自分で作っていかないといけない。家族もいるので今のところ海外で働くつもりはないけれども、エンジニアとしての格というかステージみたいなものを上げるために、英語は避けて通れないという思いは日に日に感じる。

というわけで、最近は空いてる時間の大半は英語の勉強をしてる。読むのはなんとなく意味がわかるけど、聞くのと書くのが絶望的なので、当面はそこに時間を割いてる。自分の場合は話す必要性は今のところあんまりないので、話すのは一旦置いておく。

聞くのはだいたい移動中とか作業しながらとかに英語でしゃべってるIT系のポッドキャストを聞いていて、寝る前にyoutubeで海外のカンファレンスの動画見たりとか、英語学習系のを見てみたりとかで、特にノルマは決めず、気分次第でとにかく耳を慣らす作戦。

書くのはStackOverflowに回答してみたり、洋書を気ままに写経してみたり。StackOverflowで英作文するとよくタイポするんだけど、最近その理由がなんとなく分かってきた。単に小中学校のときに漢字を書くの間違ったのと同じで、圧倒的に書く量が足りてないんだと思う。なので写経は意外と意味あるんじゃないかという気が個人的にしている。量は質に転化する。そのうち。コツコツ積み上げるしかない。

あともうひとつ考えてることは、仕事でGoのコードを書く機会を自発的に作っていくこと。インフラエンジニアという職種自体はそんなにすぐにはなくならんとは思うのだけど、その役割はどんどん変わっていくと思う。既存のソフトウェアの設定を組み合わせてシステムを作るという従来的なインフラエンジニアの重要度は下がっていき、Infra as Code のDSLが書けるだけのエンジニア知識はすぐに時代遅れになり、クラウドネイティブなピタゴラスイッチを作ってみてもベンダーふんどしで相撲を取ってるだけで、エンジニアリングとしての価値は低い。結局のところピタゴラなグルーコードのいらないインテリジェントで自律的なインフラを作るために、ミドルウェアレイヤのコードが書けるソフトウェアエンジニアみたいなのが希少価値が高くて、あるものを組み合わせるのではなくて、特定の問題領域に特化したソフトウェアを新しく生み出せる力がインフラレイヤでも相対的に重要度が増してくると思う。ミドルウェアの領域ではまだまだC/C++が現役だけど、最近Goの勢力が拡大してきているので、Go力を高めていきたい気持ち。でも、子供も生まれたし、趣味でコードを書く時間も減るので、仕事で日常的にGoのコードを書ける環境を作るために、仕事で新しく作るちょっとしたツールとかはGoで書いてる。で、汎用化してOSSとして切り出したりしてみたり。やっぱりなんだかんだ言って、仕事と趣味だと仕事の時間の方が圧倒的に長いわけで、趣味だけだと限界がある。なので如何に仕事でそういう機会を作っていくか、そのために普段からどういう仕込みをしておくかが大事。当面の課題は、次に回ってきそうな仕事を予測して、それを趣味的なアプローチで解決できるだけの事前の仕込みをいかにしておくかという戦略なのかな。

最近だとソフトウェアエンジニアリングに重点を置いたSREみたいなかっこいい呼び方があるけど、信頼性を第1目標に掲げる仕事って、かっこいいこと言っても障害コール対応は切り離せないし、そんな仕事があと30年もできるかというとちょっと自信がない。体力でカバーみたいなのって、システムの重要性が増すに連れて期待値が上がるし、非人道的で家庭を持ってるとさらにつらいと思うんよね。そーゆー自己犠牲で成り立つような場所を主戦場にせずに、もうちょっと抽象的なレイヤで仕事ができるようになりたいなと思うのだけど、雑な文章で特にポエムなのでまとまらないけど、そんなことを最近モヤモヤと考えている。

2017-05-14

[]vimからneovimへの移行

vimからneovimへの移行をしてみた。作業メモ。

インストール

$ brew install neovim/neovim/neovim

.zshrc に以下を追加

export XDG_CONFIG_HOME=$HOME/.config

既存のvimの設定からシムリンクを貼る

$ ln -snfv ${HOME}/.vim ${HOME}/.config/nvim
/Users/m-morita/.config/nvim -> /Users/m-morita/.vim
$ ln -snfv ${HOME}/.vimrc ${HOME}/.config/nvim/init.vim
/Users/m-morita/.config/nvim/init.vim -> /Users/m-morita/.vimrc

起動してみる。なんかエラー出た。

$ nvim
/Users/m-morita/.vim/init.vim の処理中にエラーが検出されました:
行  317:
E518: 未知のオプションです: ttymouse=sgr
You need vim compiled with Python 2.6, 2.7 or 3.2 and later support
for Powerline to work. Please consult the documentation for more
details.
続けるにはENTERを押すかコマンドを入力してください

どうやらneovimではデフォルトマウスをサポートしてるのでttymouseオプションなくしたっぽい

https://neovim.io/doc/user/nvim.html

.vimrc を以下のように修正

if !has('nvim')
  " neovimではデフォルトでマウスサポートしているので不要
  set ttymouse=sgr
endif

あとPythonサポートがないと言ってる。

もともとPowerlineとか入れてた手元のPythonは2系だったんだけど、あとでneocompleteをdeopleteについでに変えようと思ってたのでPython3系を入れておく。

$ brew install python3
$ python3 --version
Python 3.6.1
$ pip3 --version
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)

で、pip3でneovimを入れる

$ pip3 install neovim
$ nvim
Traceback (most recent call last):
  File "<string>", line 4, in <module>
ModuleNotFoundError: No module named 'powerline'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "<string>", line 9, in <module>
  File "/Users/m-morita/.vim/bundle/powerline/powerline/vim.py", line 15, in <module>
    from powerline.bindings.vim import vim_get_func, vim_getvar, get_vim_encoding, python_to_vim
  File "/Users/m-morita/.vim/bundle/powerline/powerline/bindings/vim/__init__.py", line 44, in <module>
    vim_encoding = get_vim_encoding()
  File "/Users/m-morita/.vim/bundle/powerline/powerline/bindings/vim/__init__.py", line 25, in get_vim_encoding
    return vim.options['encoding'].decode('ascii') or 'ascii'
AttributeError: 'str' object has no attribute 'decode'
An error occurred while importing powerline module.
This could be caused by invalid sys.path setting,
or by an incompatible Python version (powerline requires
Python 2.6, 2.7 or 3.2 and later to work). Please consult
the troubleshooting section in the documentation for
possible solutions.
function provider#python3#Call の処理中にエラーが検出されました:
行   18:
Traceback (most recent call last):
  File "<string>", line 53, in <module>
  File "<string>", line 40, in powerline_troubleshoot
  File "/Users/m-morita/.vim/bundle/powerline/powerline/lint/__init__.py", line 12, in <module>
    from powerline.segments.vim import vim_modes
  File "/Users/m-morita/.vim/bundle/powerline/powerline/segments/vim/__init__.py", line 16, in <module>
    from powerline.bindings.vim import (vim_get_func, getbufvar, vim_getbufoption,
  File "/Users/m-morita/.vim/bundle/powerline/powerline/bindings/vim/__init__.py", line 44, in <module>
    vim_encoding = get_vim_encoding()
  File "/Users/m-morita/.vim/bundle/powerline/powerline/bindings/vim/__init__.py", line 25, in get_vim_encoding
    return vim.options['encoding'].decode('ascii') or 'ascii'
AttributeError: 'str' object has no attribute 'decode'
続けるにはENTERを押すかコマンドを入力してください

なんかpowerlineがエラーになるなぁ。

このエラー自体は単にモジュールが読み込まれていないだけっぽいけど、powerlineのissue眺めてたらそもそも現時点ではpowerlineはneovimに正式には対応してないっぽい(?)

https://github.com/powerline/powerline/issues/1287

上のissueでpowerlineじゃなくてairline使えって言われてる。

https://github.com/vim-airline/vim-airline

とりあえず無効化して先に進もう

" PowerLine
if !has('nvim')
  NeoBundle 'alpaca-tc/alpaca_powertabline'
  NeoBundle 'Lokaltog/powerline', { 'rtp' : 'powerline/bindings/vim'}
  NeoBundle 'Lokaltog/powerline-fontpatcher'
  let g:Powerline_symbols = 'fancy'
  set laststatus=2
endif

稼働確認してみる。

neocompleteが動いてなさそう。これはあとでdeopleteに置き換える予定なのでいいや。

deopleteの導入

.vimrc に以下を追加

if has('nvim')
  NeoBundle 'Shougo/deoplete.nvim'
  let g:deoplete#enable_at_startup = 1
endif

nvimを起動

$ nvim

:NeoBundleRemotePlugins を実行。

:NeoBundleRemotePlugins

nvimを再起動すればOK。

補完は速くなった気がする。快適。

airlineの導入

.vimrc に以下を追記

if has('nvim')
  NeoBundle 'vim-airline/vim-airline'
  NeoBundle 'vim-airline/vim-airline-themes'
  let g:airline#extensions#tabline#enabled = 1
  let g:airline_theme = 'distinguished'
  let g:airline_powerline_fonts = 1
  set laststatus=2
endif

テーマはどれにするか悩んだけど、distinguishedにするとNormalモードでバッファに未保存の状態でステータスバーの色が変わるので、わかりやすくてよさげなのでこれにしてみた。

2017-01-18

[]Homebrewにコントリビュートした

Golangで書いた社内ツールをどうやって配布しようかなぁというのは悩ましい。一応Rubyの会社なので、全員がGoのビルド環境ない。できればGitHubのReleaseページにビルド済みのバイナリを添付してダウンロードさせたいところなんだけど、プライベートなリポジトリなのでGitHubの認証とかが必要。で、HomebrewにprivateなGitHubリポジトリからダウンロードする機能が欲しいなぁと思って、年末年始にbrew本体のコード読んでたら、なんか行けそうな気がしたので勢いでがっと実装してプルリクエストを投げてみた。メンテナの人にかまってもらって、レビュー指摘もらって、何回かやりとりした末にめでたくマージされた。

New feature: Allow download from private GitHub repository by minamijoyo ? Pull Request #1763 ? Homebrew/brew ? GitHub

自作ツールを黙々と作るのもいいけど、他の人が作ってるツールパッチ投げるのもよい。今年はコミュ力を上げていきたいのでOSSな活動は継続的にやっていきたい。