wolfmasa's blog

フロンターレとプログラミング関係の話題を、気が向いたときにつぶやくブログです。

OSSへのコントリビュート

medium.com

このモチベーションは自分と同じで、すごくよくわかる。

でも、それを実際に行動に移して、目標を達成している、それが違う。

とはいうものの、心理的障壁が高くて、自分のような技術力でできる気がしなかったのと、ソースを読み進めようとしても、全然わからんということが多く、いつも断念していた。

ここ数年、自分はこの辺で立ち止まっている。

もちろん、この方と比べて自分はさらに何もできないので、比べるだけ失礼かもしれない。

それはそれとしても、最近エンジニアとして自信をなくすことが多かったので、こういう話で少し気が楽なったのは事実。

素直に、もうちょっと自分も頑張らなきゃと思えました。

oss-gate.github.io

ちなみに、OSSにコントリビュートすることにフォーカスするのであれば、このようなイベントがあるらしい。

すごく興味はあるので、ぜひ一度行きたいなと思っている。(でも勇気がない)

MacBook Proを買ってみた

MacBook Pro

ずっと使っていたMacは、late 2013のRetinaではない安いMacBook Pro

さすがにOSをアップデートし続けていると、最近は日本語変換だけでも2、3秒待たされたり、アプリがなかなか起動しなかったり、時間のロスが大きくなってきた。

思えば、当時はまだSSDが高価で、安いHDDにしてしまったし、メモリも増設していないしで、その辺が今になって響いてきているのではないかと思う。

www.apple.com

てな訳で、1年くらい前から検討を重ねていたのだけど、今回リニューアルされたMacbook Proの評判を見ていると、USB-C以外は(苦笑)良さそうなので、思い切って買い換えてみた。

f:id:wolfmasa:20170813154235j:plain

f:id:wolfmasa:20170813154300j:plain

色は、前回シルバーだったので、今回はスペースグレイ。

あと、話題のTouchBarモデルじゃなくて、物理キーボードモデルにした代わりに、SSDは512G、メモリは16Gに増設して、ある程度長く使えるようなマシンを目指してみました。

データ移行に関して

基本的にはiCloudに頼れば良いはずだけど、せっかくなので綺麗にしたいという気持ちもあり、まずは古いMacBookでデータを整理したのちに、Time Machineで外付けHDDにコピー。

その後、新しいMacBookを起動して、移行アシスタントで復元すると、設定とかおおよその設定はコピー完了。

最初の起動時には復元せずに、後からやったので、アカウントがバッティングしたりとかはあったけど、それ以外は特に問題なし。

良いところ

快適

当たり前だけど、まずは反応が早くて、ストレスが全くないところはGOOD!

キーボード

普段会社では、HHKを使っている私としては、今の賛否両論あるMacBookProのペタペタキーボードに慣れることとができるかどうかが不安だった。

多分、自分はキーボードの打ち心地にはこだわってしまう方で、打ちにくいキーボードを使っていると、本当に作業に集中できない反面、打っているのは気持ち良いキーボードだと、それだけで幸せになれる。

実際に使ってみると、音がそれなりにあるところと、思ったよりも反応がある気がして打ちやすい印象。これは打っていて楽しめる側なので、問題なし。正直ホッとしました。

Retina

会社ではRetinaなので、それほど驚きはないのだけど、家では初めてではあったので、時々その違いにびっくりする。

やっぱり、綺麗なことはいいことだ。

悪いところ

USB-C

正確には type C。

今まで使っていたUSBをつなぐためにアダプタが必要なことは、わかっていたことなので、それほど苦にならないのだけど、差し込み具合が結構引っかかるというか、固いのが不満。

Lightningのように、すんなり入ってくれるイメージを持っていたのだけど、結構固くて、入れにくく、抜けづらいには以外にストレス。

3D Touch

使い方が全くわからない。対応アプリも少ないし、存在をすぐに忘れてしまいそう・・・

余談

iCloudやTime Machine経由でデータを移行したおかげで、brewやgemのパッケージもそのまま移行された模様。

goのツリーも当然コピーされたので、長年蓄積されたいらないファイルを一層し損ねた感じはある。いや、移行してくれることは素敵なことなのだけど。

ハロー"Hello, World" OSと標準ライブラリのシゴトとしくみ

★★★★☆

きっかけ

なぜか地元の図書館にあったので、手にとってみたのだが、

タイトルと中身のギャップが半端ない!!

手にしていると、多くの人から「今更ハロー・ワールド?」と言われるのだが、これはれっきとしたOS、システムコール、標準ライブラリ(glibc等)のソースコードを読み、アセンブラデバッグをする、低レベルでハードな本である。

この手の本は多分あまり売れないこともあって、あまり種類は多くないが、1冊がとても濃密なので、過去のいくつか読んでみたがとても勉強になった。

Inside Linux Software オープンソースソフトウェアのからくりとしくみ

Inside Linux Software オープンソースソフトウェアのからくりとしくみ

Linuxカーネル2.6解読室

Linuxカーネル2.6解読室

Binary Hacks ―ハッカー秘伝のテクニック100選

Binary Hacks ―ハッカー秘伝のテクニック100選

読んだ中でパッと思い出すのはこの辺り。

今回の本は、それのどれとも微妙に違って、

という豪華な(?)内容になっている。本当に丁寧に説明してあって、素晴らしい入門書であると思う。

各章の感想

第1章 ハロー・ワールドに触れてみる

まずはビルドするところから。最初はビルドするだけで一苦労なので、これは地味に大切なこと。

あと、デバッグのやり方にも言及しており、その流れでアセンブラに突入。

ソフトランディングを期待していると、いきなり低レベルな世界に放り込まれた感じで面食らうが、説明は懇切丁寧なのでちゃんと読んでいけば置いていかれることはない。

第2章 printf()の内部動作を追う

printfを追っていくことで、その先のシステムコールの存在を解説する。

概念的にはみんな理解していることだが、実際に追っていくと想像以上に階層化されていたり、単純な仕組みだったりして、意外に発見が多い。

第3章 Linuxカーネルの処理を探る

システムコールの存在をキーに、今度はOS側のソースを使って解説する。

さらりとOSのカーネルの解説を始めるが、これも結構慣れていないと敷居が高く感じるもの。

実際にやりそうな流れで解析を説明しているようで、実は結構効率的に説明してくれているので、それほど混乱せずに説明についていくことができる。

OSとは何かということについても触れ始めており、この辺りで徐々に作者のこだわりが見え隠れするのが面白い。

第4章 ライブラリからのシステムコール呼び出し

共有ライブラリの仕組みなどを解説。

glibcのソースなども当然解説するのだが、あまり考えたことのない動的ライブラリについても仕組みを説明してくれる。

第5章 main()関数の前と後

プロセスの起動について、まずはデバッガを使ってアプリ側から、次にカーネル側から説明をする。

Binary Hacksにもあったが、main関数の前や後など、普通あまり考えたことはない。

システムコールについても、write以外を説明することで理解を深めてもらう工夫がある。

第6章 標準入出力関数の実装を見る

どちらかというとOSの仕組みの話。さらりと流す。

第7章 コンパイルの手順と仕組み

この後の実行バイナリの話のために、前提となるコンパイルとリンクの説明をする。

ここだけではないが、要所要所でobjdumpやreadelfなどのツールの使い方も丁寧に紹介してくれるのが良い。

コンパイラについては、個人的には他でも読んだことある内容だったので、それほど驚きはない。

第8章 実行ファイル解析

実行ファイル、ここではELFについて解説。

txtやdataの説明や、セグメントとセクションの話などがあった。

第9章 最適化

アセンブラを紹介していると、こんな説明もできるのかという章。

実際に最適化をして、どう変化するかと一緒に紹介してくれる。

O0/O1/O2などそれぞれに対して、有効となる最適化オプションは色々あるが、オプションの名前くらいだけで詳細に踏み込まないのも良い。

第10章 様々な環境と様々なアーキテクチャ

ARMなどでビルドしてみたりする。

ごめんなさい。興味がないので飛ばしました。。。

第11章 可変長引数の扱い

可変長の引数を、なぜか章を割いて説明。

x86の例だと思うが、解析しながら説明しているのだが、そりゃそうだよなーという感じではあった。

第12章 解析の集大成―システムコールの切替えを見る

まとめのような章。

Ruby(本体)のビルドとデバッグ

はじめに

Ruby本体にコミットし、あわよくばコミッターになるというのが、私の人生の目標です。

そのためには、C言語で実装されているRubyのビルドやデバッグが最低限必要になります。

とは言え、基礎知識はあるものの、OSS開発に慣れているわけではないので、gccgdb、makeやconfigureなど、覚えるべきことが沢山あります。

というわけで、メモしておきます。

情報収集

開発者メーリングリストruby-devとか眺めていて、気になる挙動があったら、内部をデバッグして追ってみタイト思います。

bugs.ruby-lang.org

あと、issueに関しては、ここに記載があるので、ざっと眺めてみるのも良さそう。

内部実装の基礎知識

Rubyのしくみ -Ruby Under a Microscope-

Rubyのしくみ -Ruby Under a Microscope-

Rubyのランタイムの仕組みを知るには、今はこの本が秀逸だと思う。本当に難しい実装の内容を、すごく絶妙なレベル感で説明してくれる。

クラスの仕組みから、ハッシュの構造や、最後はJRubyなどの解説まで、すごく分かった気にさせてくれる。

Rubyのコミッタになる人だけじゃなくて、Rubyを扱う人全員に基礎知識として是非読んでよ欲しい。それくらわかりやすいし、勉強になる良い本だと思う。

Rubyソースコード完全解説

Rubyソースコード完全解説

昔は、Rubyのランタイムを知るとなれば、まずはこの青木さんの本だったが、今は少し内容が古い。

特に、バージョン1.9で入ったYARVよりも前だったこともあり、内部の設計がかなり現実と乖離してしまっているのが残念。

それでも、基本的なところで変わらないところもあると思うし、最終盤でなければWebで公開されているので、一度読んでみるのは良いこと。

ビルド

techlife.cookpad.com

で、そのRubyの仕組みを勉強して、実際に中身を追ってみたいと思った時には、この記事を参考にして、ビルドとデバッグをしてみるのが良い。

#!/bin/bash

make clean
./configure optflags="-O0" debugflags="-g3"
make
mkdir bin
mv ruby bin/ruby
./bin/ruby -v

内容をざっとスクリプトにしてみると、こんな感じかな。

git clone http://github.com/ruby/ruby
cd ruby

当然ですが、一応補足すると、ソースコード自体はこんな感じで取得できます。

あとは、余裕があれば簡単な動作確認をしてみると良いでしょう。

rubyソースコードGitHubが大元ではないので、厳密な最新版が必要な場合は注意。

make check

これで、ruby単体テストを一通り実行することができます。

が、大体いつもopensslがない!ってエラーで怒られたりします。

 # Running tests:

Finished tests in 2.272786s, 97.2375 tests/s, 200.6348 assertions/s.                                  
221 tests, 456 assertions, 0 failures, 0 errors, 0 skips

ruby -v: ruby 2.5.0dev (2017-02-08 trunk 57577) [x86_64-darwin16]
/Users/myname/go/src/github.com/ruby/ruby/test/rubygems/test_bundled_ca.rb: cannot load such file -- openssl
Skipping `gem cert` tests.  openssl not found.
/Users/myname/go/src/github.com/ruby/ruby/test/rubygems/test_gem_remote_fetcher.rb:84:in `<class:TestGemRemoteFetcher>': uninitialized constant TestGemRemoteFetcher::OpenSSL (NameError)

< exception call stack >

make: *** [yes-test-almost] Error 1

そこでこのあたりを参考にして、opensslを指定してビルドしなきゃいけないことに気づきます(汗 qiita.com

openssl_dir=`brew --prefix openssl`
./configure --with-openssl-dir=$(openssl_dir)
make
make check

デバッグ

デバッグオプション付きでビルドできたら、あとは通常のC言語プログラムと同じようにデバッグできます。

gdb ./ruby -e "print 1"

のようにデバッガで起動して、見たいところにブレークポイントをはって、ステップ実行するとかかな。

詳しくはgdbのヘルプを見れば書いてあるけど、よく使うコマンドとしては

  • b:ブレークポイントをセットする
  • c:処理を継続実行する
  • n:ステップ実行する
  • l:現在のソースコードをを表示する
  • p:変数などを表示する
  • s:ステップインをする(関数の中に入る)

あたりでしょうか。

まとめ

rubyをビルド、デバッグの方法に関する概要を紹介しました。

Developers Summit 2017

全体を通して

毎年行っているデブサミに今年もなんとか(業務に無理を言って)行ってきました。

全体的にエモい話が増えた印象ではあるけど、それでも気持ちを新たにすることのできる貴重な刺激の場であることには変わりがない。

今年の特色の1つに、技術系同人誌を販売するというのがあって、従来はコミュニティのブースであまり盛り上がっていないところも多かったけど、普段は見れないものが見れてよかったと思う。

登壇者の目玉を選ぶのは難しいのだけど、つい先日炎上(本人とは関係ないところだけど)していたちょまどこと千代田まどかさんだろうか。

初日は、A会場がYAHOO!のTech Conference扱いになっていて、企業色のないデブサミに似つかわしくないと思っていたけど、セッションを聞いてみるとかなり骨太な感じで、先入観を反省しました。

あとは、自分が効いたセッションをざっと紹介。

講演資料が追加でアップされたのに気づいたら、なるべく更新します。

Day 1

Web フロントエンドの変遷とこれから(仮)

speakerdeck.com

speakerdeck.com

最近気になっているフロントエンド話。歴史から振り返っていてわかりやすかった。

変遷が早いけど、コンテキストを考えると仕方ないので、変化に適用して頑張ろう、ということ。

Yahoo!ブラウザーアプリのプロダクトマネージャーが考えていること

Yahoo!ブラウザという微妙な(失礼)立ち位置のブラウザアプリの戦略を、プロダクトマネージャの視点で語る。

とても理論的で、明確で、すごく勉強になった。会社で、同じようなミッションを与えられている人に聞かせて、心改めて欲しい。

パネルディスカッション「エンジニアが創るプロダクトの未来 ~エンジニアからプロダクトマネージャーへ~」

www.slideshare.net

プロダクトマネージャとは今年のバズワードなのだろうか。

パネルディスカッション形式で、プロダクトマネージャとは何か、どうしてなったのか、何が重要なのか、について語っていた。

海外ではもともとあるポジションが、ようやく日本に入ってきたということだろうけど、同じような仕事をしていた(すべきだった)人はいるはずで、名前をつけ直したということになるかな。

市場で勝ち続けるための品質とテストの技術

テスト自動化を推進するために、何が必要か、という話。色々な誤解や不安を、落とし穴を交えながら丁寧に説明してた。

最終的には、自動化のコーチングがなくても自走できるチームになっていくべきで、それを後押ししていくという、素晴らしい流れ。夢のよう。

新しいビルドターゲットとしての Webブラウザ。もしくは C/C++ で書く Web フロントエンドプログラム

今回一番技術っぽい話。主にWebAssembly:WASMの紹介。

C/C++で実装したプログラムをWASMに変換して実行するやり方を紹介。難読化はされないなど、夢のような技術でないことを説明しつつ、これによってまたWebの世界観が広がる可能性がある気がした。

位置づけ的には、RubyPythonにおけるC拡張のような、ピンポイントでのC/C++実装というのが現実的なのではないか。

事業成長にコミットするエンジニア組織への道のり

リクルートの組織が、数名のエンジニアだった時から、急激に拡大していく中で、エンジニアの文化を試行錯誤した話。

基本的には、俺たちやってやった!成功した!どやっ!って感じの内容ではある。

しかし、その取り組み1つ1つが具体的で、参考になるので、全体通して面白く聞けた。

Day 2

自動化はどこに向かうのか~まだ開発・運用の自動化で消耗しているの?

www.slideshare.net

自動化はなぜ消耗するのか?というテーマでの割と抽象的な話。

私のように導入に苦労している人が聞いていると、すごく勇気をもらうというか、考えるヒントや道しるべになるような話が多かった。

反面、どうしても抽象的であったり、言葉としては当たり前(手段が目的化するな、とか)に聞こえるので、実感を持っていない人が聞くと、ちょっと物足りなかったのではないか。

サーバーレスアーキテクチャにしてみた - エンタープライズチャットアプリでの挑戦

チワワというチャットアプリを作る過程で、Firebaseを活用した事例を紹介。

mBaaSは試したことがなかったけど、データの同期や認証など、とても便利そう。

ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪

文字通り、エンジニアとしての欲求と、子供の教育という観点から、ラズパイを子供と一緒に遊んでみた経験談

自分も子育て世代に、なかなか勉強する時間が取れなかったりするのは共感できるし、子供にエンジニアリングをやらせたいというのもよくわかる。

ただ、仕方ない部分も多いとは思うけど、後半尻すぼみというか、消化不良感があった。

リーンスタートアップとスマートなエンジニアリングの葛藤

www.slideshare.net

リーンスタートアップという手法と、アジャイル(主にスクラム)開発という手法の両立を考えたセッション。

どちらも導入するに至っていない職場の人間としては、2つともやっているだけで眩しいくらいだけど、図を見るとちょっと複雑(オーバースペック)のように感じてしまった。

本質的には、ビジネス的観点でのみ考えられたリーンという手法と、開発の観点でのみ考えられたアジャイルでは、ビジネス・開発両面から見た場合には、どちらも片手落ちになってしまうのではないかと感じた。

もしそれが正しいのであれば、どうしてもリーンとアジャイルを融合したようなプロセスというのは、ちょっと無理があるように思えてしまった。

C#で簡単にモバイルアプリを作ろう!

ちょまど人気(とXamarin人気)で会場に多数の立ち見が出るほどだった。

さすがのMSエバンジェリスト、なんだかんだ言いながら会場をちょまどワールドで包みこみ、時に爆笑、時にハラハラさせながら全力で駆け抜けた感じ。

C#やXamarinの紹介ということもあり、スライドだけ見るとほとんど内容がない(失礼!)のだけど、それでもあれだけ観衆を惹きつけるのだから、これはもうエンターテイメントと言っても良いだろう。

Xamarinはもともと興味があって一度は試してみたいと思っていたし、.NETcoreには期待しているし、C#も言語としてすごいのは理解しているし、Visual Studio 2017には是非期待したい。

コミニュティとエンジニアの生き方

www.slideshare.net

コミュニティを運営している2名の方が体験談を交えながら、コミュニティを運営するということの大切さとメリットを熱く語った。

運営に関わると、エンジニアとしていいことがたくさんあるよ!というのは知っているつもりでも、それを再確認した感じ。

それ以上に、好きな技術を使うだけで、使い尽くしたら捨てるだけで、それでいいのか?という問いには本当にドキッとさせられた。

コミュニティの運営だけじゃない思うけど、好きな技術にはきちんと貢献しなければと、襟を正さなければと改めて思った。

『もしもスクラムマスターがテストエンジニアだったら』(もしテス)

会社の説明、新しく開発したツールと、その開発や意図の説明に多く時間を使って、あまり面白い(一般的に参考になる)話がなかったように感じた。

品質保証を専門に扱う会社というのは、重要だし、注目されるべき企業だと思うけど、セッションとしては残念だった。

おじちゃん

f:id:wolfmasa:20081016112550j:plain

本日、おじちゃんこと、私の大叔父さんが亡くなりました。

長い間療養中で、大きな手術もし、遅かれ早かれこの日が来るとは思っていました。

中学生、高校生の時に、休日時間があれば遊びに行き、トランプや花札で遊びながら、多くのことを学びました。

旅行にも、本当に数え切れないほどたくさん連れて行ってもらい、色々なものを経験させてもらいました。

人生の師匠であり、

友人であり、

祖父であり、

兄弟であるような、

そんな不思議な関係だったと思います。

英語の教師だったこともあり、カナダへの短期留学を一番後押ししてくれたのもおじちゃんでした。

だからといって、勉強しろとか、うるさく言われたことは記憶にありません。

祖母と3人で山陰横断、九州縦断などもしましたし、2人でハワイにも行きました。

はた目には、祖父と孫の旅行でしたが、私からすると、ちょっと英語の得意な友達と旅行しているような、そんな気分でした。

ここ数年はずっと病気や手術のせいで、体調が思わしくないというか、何度も生死の境をさまよっている状態でした。

それでも、意識がはっきりしているときは、政治の話や野球の話など、他愛もない話する、いつものおじちゃんがいました。

亡くなる前日まで、好きなコーラを飲み、よく喋り、自分の人生を、自分の意思で最後まで生き抜いたと聞きました。

何よりそれがおじちゃんらしくて、どこか誇らしく思えてきます。

おじちゃんから学んだものを次の世代に伝えるべく、今はただ冥福を祈りたいと思います。

チャントをちゃんと覚えよう 2017年開幕版

今年ももう少しで始まります。

新加入選手のチャントが決まってようなので、気持ちを新たにして覚えましょう!

GK1 / チョン ソンリョン

川崎フロンターレ応援歌2016 GK1 チョン ソンリョン - YouTube

DF2 / 登里享平

川崎フロンターレ応援歌 23 登里享平 - YouTube

DF3 / 奈良竜樹

川崎フロンターレ応援歌2016 DF3 奈良竜樹 - YouTube

DF4 / 井川祐輔

川崎フロンターレ応援歌2011 井川祐輔 - YouTube

MF5 / 谷口彰悟

川崎フロンターレ 谷口彰悟選手 応援歌 - YouTube

MF6 / 田坂祐介

川崎フロンターレ応援歌 06 田坂祐介 - YouTube

DF7 / 車屋 紳太郎

川崎フロンターレ応援歌2015 DF 20 車屋紳太郎 - YouTube

MF8 / 阿部 浩之

川崎フロンターレ応援歌2017 MF08 / 阿部浩之 - YouTube

FW9 / 森本貴幸

川崎フロンターレ応援歌2016 FW9 森本貴幸 - YouTube

MF10 / 大島僚太

川崎フロンターレ 16 大島僚太チャント - YouTube

FW11 / 小林悠

【川崎フロンターレ】小林悠のチャント - YouTube

MF13 / 三好 康児

川崎フロンターレ応援歌2017 MF13 / 三好康児 - YouTube

MF14 / 中村憲剛

川崎フロンターレ応援歌 14 中村憲剛 - YouTube

MF16 / 長谷川 竜也

川崎フロンターレ応援歌2017 MF16 / 長谷川竜也 - YouTube

DF17 / 武岡優斗

川崎フロンターレ応援歌2014 DF17 武岡 優斗 - YouTube

DF18 / エウシーニョ

川崎フロンターレ応援歌2015 DF 18 エウシーニョ - YouTube

MF19 / 森谷賢太郎

川崎フロンターレ応援歌2013 森谷賢太郎 - YouTube

FW20 / 知念 慶

なし

MF21 / エドゥアルド ネット

川崎フロンターレ応援歌2016 MF21 エドゥアルド ネット - YouTube

FW22 / ハイネル

川崎フロンターレ応援歌2017 FW22 /ハイネル - YouTube

DF23 / エドゥアルド

川崎フロンターレ応援歌2017 DF23 / エドゥアルド - YouTube

GK24 / 安藤駿介

[川崎フロンターレ]VSアビスパ福岡戦 安藤専用チャント - YouTube

DF25 / MF25 / 狩野健太

川崎フロンターレ応援歌2016 MF25 狩野健太 - YouTube

DF26 / タビナス ジェファーソン

なし

FW27 / 大塚翔平

川崎フロンターレ応援歌2016 FW27 大塚翔平 - YouTube

DF28 / 板倉滉

川崎フロンターレ応援歌2017 DF28 / 板倉滉 - YouTube

DF29 / 舞行龍 ジェームズ

川崎フロンターレ応援歌2017 DF29 / 舞行龍ジェームズ - YouTube

GK30 / 新井章太

30 新井章太チャント(歌詞+メロディ) - YouTube

GK31 / ポープ ウィリアム

なし

MF32 / 田中 碧

川崎フロンターレ応援歌2017 MF32 / 田中碧 - YouTube

MF41 / 家長昭博

川崎フロンターレ応援歌2017 MF41/ 家長昭博 - YouTube