5.23.2015

Wired Wireless

無線LANルーターが壊れかけてた。
どうも最近回線速度が遅いなとは思ってたが、明らかに異常に遅くなり、じゃぁルーターを再起動しようかなと思って手に取ったらほんのり暖かい。
外側はほんのり暖かいくらいだったんだけどもしかしたら熱暴走かなと思ってドライヤーの冷風モードでスリットから風を吹き込んでみた。冷やせば治るかなと。
するとルーターから香ばしい?焦げ臭い?匂いが漂ってきた…。
おそらく8年以上使ってたはずなので買い替えるいい機会だろう。

で、またしてもヨドバシで散々迷った。IEEE802.11nまでの安いモデルか、11acが使える高い奴にするか。
7年前のVaioには11acなんて無いんだけど、新しいモバイルノーパは11ac使えるし、せっかくネットワークに詳しくなったので11acの使えるやつを買ってやった。一回お酒をがまんすればいいくらいの差額だし。むしろ一人酒やめろだし。

ネットワーク詳しくなるとルーターを設定するだけで結構楽しめるもんだ。ルーターのログが見えるんだけど、DHCP関連のログが、「DHCPDISCOVER」、「DHCPOFFER」、「DHCPREQUEST」、「DHCPACK」と教科書通り流れてて思わずニヤッとする。
無線のチャンネル設定はさすがに自動設定に任せる。
もっと広い部屋などにアクセスポイントを複数台設置する場合はサイトサーベイを行い、各機の設置場所とチャンネル設定の最適な設定を決める。まぁそんな仕事ないけど。

エコ的な考えでは2.4GHz帯は止めたいとこだけどVaioも無線で繋げたいのでとりあえず5GHz、2.4GHzを同時利用する。
XBox360は今まで通り有線LANなので繋ぎかえるだけ。

で壊れた旧ルーターは破棄だけど、ふと見るとMACアドレスを示すシールが貼ってあった。WAN側、有線LAN側、無線LAN側と一台で3つも使っている。こういうのって解放しないで良いんだろうかと思ってしまう。(これもエコ的な考えだが、MACアドレスは理論上70兆個も割り振れるので解放の必要はないはず)

5.10.2015

関数型プログラミングに目覚めた?

「ずいぶんとダサいコードを書いているのね」という言葉で始まる某書籍を読んでみました。
『関数型プログラミングに目覚めた! IQ145の女子高生の先輩から受けた特訓5日間』のことです。先の書き方では検索に引っかからないので書名を載せときましょう。

以前からぼんやりと関数型プログラムが出来るようになりたいと思ってましたが、ネットでちょっと調べる程度で出来るものではなかったです(自分にとっては)。
でたまたま平積みされていた本書を立ち読みすると、ストーリー仕立てで面白そうだったのと、1300円と安価だったので即購入。GW一杯かけて読むことにしました。本書は丁度5月1日に発売されていたのでそういう読み方も想定していたと思う。ちょうど5日間だし。

内容としては「0から9までの数をすべて足すコード」を、関数型プログラムで書くまでが前半の100ページ以上かけて説明されています。関数を一個一個定義していって最後に関数型のコードで「0から9までの数をすべて足すコード」ができるところ、フィボナッチ数列を関数型プログラムで求めるところでかなり感動してしまった。

この前半はかなり充実した内容だと思う。関数型プログラムがどうしてもよく分からない、そもそもなんでオブジェクト指向ではダメなのか、何から始めればいいのかとか、最初の取っ掛かりが掴めずにいた自分にはピッタリ嵌ってしまった。また読み物として前から後ろに読んでいっても復習の章があったりして自然と考え方が定着します。普通技術書は重要なことが書いてあるページは読者が覚えておいて何度も開き直すような読み方になると思いますが、読み物として読んでいってる人にも理解させようという気概がある書き方みたい。
なんというか、ストーリー仕立てということもあるしとても情熱的な書き方になっている。一度オブジェクト脳になってしまった頭をパラダイムシフトさせるにはこのくらいの熱意が感じられないと難しいのかも。今まで関数型プログラムの壁に当たって引き返していたのが、女子高生にダサいコードと罵られたことで何としてでも超えてやろうと思えたわけだ。

前半に比べると後半は技術的な内容、というか関数型プログラムに関する説明が少なくなって、React.jsの解説になっていくのでちょっと話がずれてるかなーという感じ。ラムダ式だのカリー化だのを同じ調子で説明してくれれば良かったのにと思う。
読み終わってみると、そもそもラノベに近い読み物だったのかと思える。

とにかく関数型の最初の取っ掛かりとしてはかなり良いものが読めたという気がする。ただラノベ要素が余計というかちょっと煩く感じる部分はある。とてもある。

読み終わってアマゾンを見ると本書に関して内容が薄いとかそもそも誤解に基づいた主張とか、レビューの点数があまりに低いのでビビった。
 まぁ本の内容が正しい、ということより、内容がどうであれその本に影響を受けて関数型プログラムの習得に強い動機付けがなされた人、あるいは最初の壁を突破した人が一人いる、ということの方が重要なので、個人的には超おすすめ。

関数型プログラムをやりたいけどよく分からない、って状態で(女子高生に罵られるのがそんなに嫌いじゃない人が)読むと絶対面白いと思う。

というか普通に考えて発売から1週間足らずでこれだけのレビューを集めてる、そんでほとんどが低評価ってのがなんていうか、、本の内容がどうというより余程嫌われてるんですねこの作者w。

Amazonのレビュー見てると、どうもこの作者の人となりによって不当に評価されている気がする。この本のターゲット層は関数型プログラムなんか出来ないって人で取っ掛かりを求めてる人なんじゃないの?
言語として、関数型プログラムなんか出来ない人にも馴染みの深い、関数型プログラムが書けるものって、JavaScriptがぴったりだと思う。
で関数型をこれから始める取っ掛かりって意味で関数型の考え方とか作り方とかをここまでページ数使って簡単に解説してるものは他にないと思うけど。

変な先入観を持ってこの本読まずに、難しい本を最初に手に取って「やっぱ関数型って意味わかんね」ってなるくらいなら、この本を最初に読めばいいと思う。
まぁ、表紙が良いのと値段も安いので買う人多いと思うけど。

なんと著者のブログでこのレビューが紹介されているのだ
すさまじい長文なのだが真ん中辺り(と書いても無駄なくらい長文)にしっかりと引用されている。

5.02.2015

C++にfinallyがない!

Heavy obj = new Heavy();
try {
  obj.connect();
 obj.goodFunction();
} finally {
  obj.close();
}
のfinallyことだ。 何か処理した後、必ず最後に終了処理を入れて閉じたい、ということはよくあると思う。しかしC++にはこのfinallyという仕組みがない。
すると途中で終了する場合など終了処理のコードを全部に入れなきゃならなくなるので嫌なんだが。C++にこれが無いのは代わりにコンストラクタ、デストラクタを使え、ということらしい。
つまり、上記コードをClassとして分離し、コンストラクタで「Heavy obj = new ..」を行い、デストラクタで「obj.close();」を行う。すると、途中で何が起ころうと利用者側は意識せずともインスタンスの削除時に必ず終了処理が行われるということだ。
class Connector {
  Heavy* obj;

  Connector(){
    obj = new Heavy();
  }

  ~Connector(){
    obj->close();
    delete obj;
  }
  
  void doGood(){
    obj->connect();
   obj->goodFunction();
  }
}
と行いたい処理のラッパークラスを用意し(コードがすげぇ適当…)、利用者は、
Connector conn;
conn.doGood();
とだけすればよい。もちろんconnをnewで作っても良いがdeleteを忘れると終了処理をしない。
最初は小さなクラスが沢山出来そうで嫌な気がしたが実際にやってみると、ほぼ抵抗のない分解ができるのでこの考え方は悪くないと思う。

C++にinstanceof がない!というのもそうだし、コーディングはこうあるべしという主張が強い言語みたいだ。