自転車を修理に預けてきた2017年04月01日 16時47分12秒

自転車が満身創痍なので、自転車屋に預けてきた。ここは通勤途中で、自転車の購入と修理はいつもここ。今は、一階入口の部分を改装中だった。

今回はここの主人が対応。雨の日も風の日も雪の日も毎日よく見掛けるよと言われて少々驚いた。店の閉店時間が六時なのと、特に真っ暗な冬に顔が見えるわけがないと思っていたからだ。聞くところによると、ライトがチカチカと光っていて良く分かるとの事。こちらも少し早く帰って来られたときには、まだ開いているなとか、六時を少し回った程度だと閉店の作業が終ってすこし暗くなっている等と思ってはいた。

先日来た時の査定の話を少しして、自転車を再度見てもらう。チェーンの交換と、後輪部のギアの「カセット」は交換が必須とのこと。前輪部のギアの山も見てはくれたが、必要無さそうに見えるとは言っていたが、痛んではいるだろうとの事で交換自体はする予定にはなった。チェーンと後輪のカセットは在庫があり、作業は一日で終るとの事。前輪のギアだけを替えるよりも、クランクと共に替えた方が安くなるとのことで、一括交換。しかし、注文しないといけないので、到着次第との事になった。

始業式2017年04月02日 11時50分40秒

日本語の土曜日学校は四月一日が最初の土曜日だったので、初日から始業式。入学式、入園式も同時に行われる。幼児部で娘と一緒だったが一歳年下だった友達が一年生に入学してきた。

娘は二年生になって、難しくなるのが心配だが、色々と勉強してもっといろいろと知ることが出来るので、嬉しいとのこと。

新しい PC を会社で支給してもらった2017年04月03日 12時38分58秒

システム部からコンピュータが古いので交換するとの連絡が。4 core 8 GB だった物が、8 core 16 GB の物に置き換えられた。CPU を見ると i7-6700 3.40 GHz と書いてある。

仕事用で一番メモリを使っているたのが、Firefox。大体百から二百ぐらいの半死状態のコードを追うのに、タブが常に開いていて、メモリを大体、2 GB から 3 GB ぐらい持っていっていた。一週間も使わないうちに不安定になり、クラッシュしていた。クラッシュの前の予兆現象は、描画の不具合。線や文字が見えるのに時間が掛かったり、マウスの上しか描画出来なくなったり。

新しい PC に変わってから、メモリの 3 GB から 4 GB を持っていっている。Firefox は前よりも安定するようになった。

自宅では、10 年物のラップトップで、メモリ 2GB の FreeBSD で十分使えているのと比べるとかなりの環境差。

古い自転車は引き取ってもらって、新しい自転車を購入2017年04月04日 11時39分03秒

週末前に修理に出した自転車だが、部品が届いていないので、作業は始まってはいないと言われたが、どうせ木曜日まで届かないのなら、また次の週末に持って来直そうと自転車屋に赴いた。

自転車が作業場に置いてある間に他の何人かの人も、様子を見ていたようだ。こちらの部品も交換しないといけない、あちらの部品も交換しないといけないと言われた。

結局、それぞれの部品を交換すると四百ドルは下らなくなる。古い自転車を持ち込めば、二割りの割引を貰えるそうだ。あれこれ部品を変えてもまだ古くて痛んでいる自転車よりも、$500 ドル前後で、同等の新しい自転車が変えてしまう。

そんなわけで、他の新しい自転車を見ることになった。

Specialized Sirrus Sport を購入2017年04月05日 15時49分13秒

Specialized の Sirrus Sportを購入する事に決めた。定価は $750。これが二割引になるので、$600。引き換えなので、他のブランドは選べない。しかし、最初に乗っていた GIANT などと比べても全体的に出来が良くて、Specialized が気に入っている。店長の話だと、Specialized が値段帯が低くて、出来が良いのでニューヨークやここら辺で一番売れ行きが良いそうだ。

色は SPRUCE/SLATE/VALENCIA ORANGE を選択。黒い自転車は自転車置場で見付けづらいため、色が付いていれば何色でもこだわりはない。

他にも少し安めで、良さそうな Specialized の自転車もあったが、カーボンフォークが丈夫で良いのと、寿命が長く、しかも雨天でも効きのいいディスクブレーキがあるので、店長にも勧められてそちらを選んだ。基本的に、雷雨、暴風雨、大雪以外は乗っているので、しっかりとしたブレーキが必要だとのこと。実はディスクブレーキはここ四年、二台の自転車を購入したときから気になっていたが、$1000 を越えないと装備されていなかったので、盗難などの問題もあり、諦めていた。

FRAME
Specialized A1 Premium Aluminum, Fitness Geometry, fully-manipulated butted tubing, integrated lower bearing, fender/rack mounts
FORK
FACT carbon fiber, alloy steerer/crown, post mount disc, Plug + Play fender mount REAR HUB
Shimano Center Lock, disc, 10x135mm QR, 32h
SPOKES
Stainless, 14g w/self-locking threads
RIMS
Disc, 6061 aluminum double-wall
INNER TUBES
OE PV standard Bulk Road 700, 28-38x622, Presta, 48mm valve
FRONT TIRE
Nimbus Reflect, 700x32mm, 26TPI, Flak Jacket protection
REAR TIRE
Nimbus Reflect, 700x32mm, 26TPI, Flak Jacket protection
CRANKSET
FSA Vero, forged alloy, sub compact, 110mm BCD spider
CHAINRINGS
48/32T w/chainguard
BOTTOM BRACKET
BB-7420STw/Bolts w/RPM logo
SHIFT LEVERS
microSHIFT flatbar road, 9-speed
FRONT DERAILLEUR
microSHIFT R9, 31.8mm clamp, 9-speed, road double
REAR DERAILLEUR
Shimano Alivio, 9-speed
CASSETTE
Shimano, 9-speed, 11-34t
CHAIN
KMC X9, 9-speed w/reusable MissingLink
FRONT BRAKE
Shimano M315 hydraulic disc, resin pads, 160mm rotor
REAR BRAKE
Shimano M315 hydraulic disc, resin pads, 160mm rotor
HANDLEBARS
Specialized, double-butted alloy, 9-degree backsweep, 31.8mm
TAPE
Specialized Body Geometry Targa, lock-on
STEM
Alloy, 4-bolt, 7-degree rise, 31.8mm clamp
SADDLE
Canopy Sport, steel rails
SEATPOST
Alloy, 12mm offset, 2-bolt clamp, 27.2mm
SEAT BINDER
Alloy
PEDALS
Specialized Fitness platform

make で二重コロンを用いて複数回動作を記述する2017年04月07日 11時05分31秒

make ファイルに依存関係を記し、その条件を満たすときの動作を記述するにはコロンを用いる。なお、以下の実行環境は FreeBSD 11.0-RELEASE だが、SunOS 等に入っている古い make から GNU make まで、共通の動作だ。
% cat Makefile 
target :
    @echo Hello
% make
Hello
% gmake
Hello
なお、echo の前の「@」は実行時のコマンドの出力を抑制する。まあ、echo を二回しても無駄だと言うわけだ。

実は、コロンを二回使って、ダブルコロンでも動作する。

% cat Makefile 
target ::
    @echo Hello
% make
Hello
% gmake
Hello

さて何が違うかと言うと、一重コロンでは、依存関係と実行動作を一度のみ記述する規則になっている。つまり、同じターゲットを二回書いたら間違えた書式と言うことになる。例えば、.cpp ファイルから .o ファイルを生成するのに、一つは g++ を使うように書かれていて、もう一つ同じルールで llvm を使うように書かれていた場合だ。make 側はどちらのコンパイラを使って欲しいのか、記述者の意図は全く分からない。コンパイラだけでなく、コンパイラオプションなどにも同様の事が言える。

それに引き換え、二重コロンは同じターゲットを複数回に分けて記述する規則になっている。一つのターゲットを意図的に、複数回に分けて記述するのだ。良くある例としては、clean ターゲット等があげられる。コンパイル時の生成物の .o を消すコマンド、特定のライブラリや実行ファイルを各々消すコマンドなどは分けて記述すると可読性も増す。

なお、複数の二重コロンは記述された順番に実行される。

% cat Makefile 
target ::
    @echo Hello
target ::
    @echo Goodbye
% make
Hello
Goodbye
% gmake
Hello
Goodbye

若干注意点があるので、何回かに分けて書く。

make で二重コロンと一重コロンは共存できない2017年04月09日 14時09分06秒

二重コロンを用いて複数回動作を記述できるので便利なようだが、「二重コロンと一重コロンは共存できない」という制約がある。
% cat Makefile 
target :
    @echo Hello
target ::
    @echo Goodbye
% make
make: "Makefile" line 3: Inconsistent operator for target
make: "Makefile" line 4: warning: duplicate script for target "target" ignored
make: "Makefile" line 2: warning: using previous script for "target" defined here
make: Fatal errors encountered -- cannot continue
% gmake
Makefile:3: *** target file 'target' has both : and :: entries.  Stop

全ての make ファイルが自分の支配下にあれば、全て二重コロンにしてしまえば問題はないのだが、他人の make ファイルを基にしたルールを記述していると、この問題は簡単には回避できない。このターゲットを二重コロンにしてくれと頼んで変えてもらえたら何とかなるが、拒否されたら他の名前のターゲットを使うくらいしか回避策はない。

make で一重コロンを用いて複数回動作を記述するのは間違っている2017年04月11日 12時01分47秒

make の二重コロンは動作を複数に分けて記述する事が出来る。同じことを一重コロンで行うと、make によって動作が変わるようだ。
% cat Makefile 
target :
    @echo Hello
target :
    @echo Goodbye
% make
make: "Makefile" line 4: warning: duplicate script for target "target" ignored
make: "Makefile" line 2: warning: using previous script for "target" defined here
Hello
% gmake
Makefile:4: warning: overriding recipe for target 'target'
Makefile:2: warning: ignoring old recipe for target 'target'
Goodbye
まあ、元々間違った記述なわけで、どちらの実装が正しいとかはないだろう。BSD make は最初のターゲットを、GNU make は最後のターゲットを実行している。

ただし、どちらともエラーとして動作を中断していない。つまり、この間違った記述をしてしまうと、特定の環境では意図した動作をするのに、移植しようとしたら突如変な動作をするようになる典型である。

フレームワークとしての make の二重コロン2017年04月12日 12時27分55秒

二重コロンは clean ターゲットのように、一つの動作を分けて書くこと以外にも、フレームワークとして使うことも出来る。make では include を使うことにより、他の make ファイルを読むことが出来る。

例えば、make check や make install といった、各々のターゲットを準備しておくと、make のデフォルトの動作として使うことが出来て、それぞれに敵した動作は後で追加出来る。

% cat uyota-framework.mk 
check ::
        true
install ::
        true
% cat Makefile 
target :
        @echo Hello
include uyota-framework.mk
% make install
true
% gmake install
true

最近は、Jenkins やその他の解析ツールなどで、特定のシェルスクリプトや make のターゲットを順次実行するようなフレームワークなどがあちこちで見られる。新規のものだったら、一つずつ追加なので良いが、既にあるものを大量に対応するのには手間と時間が掛かる。そんなときに、共通 make ファイルに追加することで、利用可能なターゲットから順次対応していく時などに、この方法が役に立つ。

確かにディスクブレーキは効きが良い2017年04月13日 13時38分41秒

新しく購入した自転車だが、一週間程経過した。

生憎にも、天気があまり良くない。折角買ったばかりの綺麗だった自転車だが、雨の中を走ったのですぐに、汚れがついてきてしまった。晴天が続くと、結構長い間綺麗なままで使えるのだが。

自転車屋の店主に勧められた理由は、雨天、積雪でも乗り続けるから良いブレーキと。確かに、効きは良く、良く止まる。最初は強すぎて、前のめりになるくらい効いたときもあった。