リーダブルコード
今更ながら、買って一読した。余すとこなく良書という印象を受けた。
小さいコードを扱っているときや、自分だけがコミットするコードでは、リーダブルコードの内容は当たり前と思って問題に気づかないかもしれない。しかし、自分が詳しく知らない大規模なコードを触る際に、本書に書かれた内容を自分が本当に実践できるかが顕著に現れてくると思う。 自分の実体験を言うと、プロダクトコードを触る中でこの本に書かれた内容が実践されていないことが、有識者の方からのレビューで明らかになっており悲惨な気持ちになっている。
また、巻末の須藤さんによる解説に以下のようなコメントがあった。
「あなたがこれからプログラマとして信頼してもらえるコードを書くかどうかは本書に書いてあることを身につけるかどうかにかかっていると言ってもいい。もし身につけていないなら、少なくとも私は信頼しない。」
厳しい意見だが、こう言い切れるほどプログラマに必須な事項が書かれていると思う。
すぐわかるオブジェクト指向Perl
https://www.amazon.co.jp/dp/4774135046
Perl5のOOPがよくわかってない人向け。OOP自体を知ってても知らなくても、Perlの簡単なコードを見たことある人なら読める構成。
具体的には リファレンス, @INC, @ISA, Exporter, bless, use strict 'vars'; に引用符が必要な理由... などがよく分かってない人にはお薦め。
古い本(2008年4月末日)なので、最後に「お待ちかねのCGI」の説明があったが、今はPSGI(Plack)を使うことからそこだけ飛ばした。ただ、Perlは後方互換性が強みの言語なので、10年前の本だから悪いということはないと思う。
Punycodeとは
grepで該当行の前後を見る
-n
で行数表示
-数字
で前後の表示行数指定
-A 数字
で該当行と下方向に行数指定
-B 数字
で該当行と上方向に行数指定
grep <string> -n -10
grep <string> -n -A 10
grep <string> -n -B 10
protobuf で ./tests.sh cpp を動かす
v.3.5.1でテストを動かす。
リリース済みのもので2018/5/4現在で最新のタグを引っ張ってくる。以下の手順で ./test.sh cpp
を回す。
brew upgrade gcc brew upgrade gawk ./tests.sh cpp
gccとgawkのbrew upgradeが必要だった。Macのgccは標準でclangだが、恐らくprotobufが見ているパスが異なるため、ちゃんと入れた。gawkは以下の記事と同じエラーが出たため記事の指示通りに対処した。
commit id: 92898e9e (2018/5/4現在のmaster) で動かす。
上の操作を行ったあと、masterブランチでも ./test.sh cpp
を試す。
Making check in . (CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/sh /path/to/protobuf/missing autoheader) rm -f stamp-h1 touch config.h.in cd . && /bin/sh ./config.status config.h config.status: creating config.h /Applications/Xcode.app/Contents/Developer/usr/bin/make check-local Making lib/libgmock.a lib/libgmock_main.a in gmock make[3]: *** No rule to make target `lib/libgtest.la'. Stop. make[2]: *** [check-local] Error 2 make[1]: *** [check-am] Error 2 make: *** [check-recursive] Error 1 ++ cat src/test-suite.log ================================================ Protocol Buffers 3.5.1: src/test-suite.log ================================================ # TOTAL: 7 # PASS: 7 # SKIP: 0 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 .. contents:: :depth: 2 ++ false
原因がわからず、ディレクトリを眺めたら、"autogen.sh" が存在していたので
./autogen.sh ./configure ./test.sh
の実行によって、テストが進行するようになったが、以下で落ちた。
no_warning_test.cc:2:10: fatal error: 'google/protobuf/stubs/atomic_sequence_num.h' file not found #include <google/protobuf/stubs/atomic_sequence_num.h> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mv -f google/protobuf/.deps/protobuf_lite_arena_test-arena_test_util.Tpo google/protobuf/.deps/protobuf_lite_arena_test-arena_test_util.Po depbase=`echo google/protobuf/testing/zcgzip.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\ g++ -std=c++11 -DHAVE_CONFIG_H -I. -I.. -Qunused-arguments -pthread -DHAVE_PTHREAD=1 -DHAVE_ZLIB=1 -Wall -Wno-sign-compare -O2 -g -DNDEBUG -MT google/protobuf/testing/zcgzip.o -MD -MP -MF $depbase.Tpo -c -o google/protobuf/testing/zcgzip.o google/protobuf/testing/zcgzip.cc &&\ mv -f $depbase.Tpo $depbase.Po depbase=`echo google/protobuf/testing/zcgunzip.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\ g++ -std=c++11 -DHAVE_CONFIG_H -I. -I.. -Qunused-arguments -pthread -DHAVE_PTHREAD=1 -DHAVE_ZLIB=1 -Wall -Wno-sign-compare -O2 -g -DNDEBUG -MT google/protobuf/testing/zcgunzip.o -MD -MP -MF $depbase.Tpo -c -o google/protobuf/testing/zcgunzip.o google/protobuf/testing/zcgunzip.cc &&\ mv -f $depbase.Tpo $depbase.Po 1 error generated. make[2]: *** [no_warning_test-no_warning_test.o] Error 1 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [check-am] Error 2 make: *** [check-recursive] Error 1 ++ cat src/test-suite.log ================================================ Protocol Buffers 3.5.1: src/test-suite.log ================================================ # TOTAL: 7 # PASS: 7 # SKIP: 0 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 .. contents:: :depth: 2 ++ false
何らかのヘッダがinstallされていない。以下を実行した後、再度試す。 master環境のヘッダがグローバルに入り込んでいいのかという問題はあるが、ひとまず置いておく。
make && make install
何もしない時間を削る
そうそう。世の中のライフハックとかって「効率を上げよう」とするんだけれども、僕の中で一番重要なのは「何にもしない時間を削ること」なんです。何もしない時間は生まれる原因には、腰が重いとか、別のところでストレスを受けてしまって心の治療に時間を使っているとかがあるわけです。そういう何もしない原因を解決して、何にもやってない時間を削ると、ライフハックなどで効率を1割2割改善しようと頑張らなくても結構なパフォーマンスが出る。
cite: カーネルハッカー・小崎資広の「コードを読む技術」 | サイボウズ式
何もしない時間が最近増えてきて気合いのせいかと思ってたが、精神状態の修復に時間食ってたのか。
精神を蝕む原因が自分にあるのなら、他人にあるよりはずっと容易に治しようがあるので元気を出すと良い。
一般に悩む人ほど学習してない・努力してないとか、半ば根性論的な話を受けるものだが、そういうのを真に受けると悪循環になるのもこういったところが理由。人に言われ慣れて自分で言うようになるのも辞めたほうが身のため。