【WIP】珠玉のプログラミング

私のこの本を心の中でたまたまのプログラミングと読んでいる。かわいい ここでは演習問題について自分の理解を書き連ねていく、逐次アップデート予定

コラム1 問題2

bit列のsetについて

rubyで書くとこんな感じなると思われる

a =  0 #初期化
b = a | 1 << 2 # 3番目のフラグをonにする1 << 2 = 4(100)
c = b | 1 << 3 # 4番目のフラグをonにする 1 << 3 = 8(1000)
d = c | 1 << 4 # 5番目のフラグをonにする 1 << 4 = 16(10000)
e = d | 1 << 5 # 6番目のフラグをonにする 1 << 5 = 32(100000)
puts e.to_s(2) # => 111100

# 各配列要素は添字でのアクセスで見れる
puts e[5] # 1 6番目はonにしたので1になってる

# bit列aのi番目をonにする。
def set(a, i) 
  a | 1 << i - 1
end

puts set(a, 7).to_s(2) # =>  1000000
puts set(a, 64).size # => 8 defaultだとIntegerは8bytes
puts set(a, 10000000).size # => 1.25mb シフトしたら勝手に拡張されるっぽい

これでソートしたら速度って変わるんけ?

読書感想文 - リーダブルコード

概要

名著としてよく知られている。コード改善のノウハウ本。四章十五章から構成されており、パフォーマンス改善といったアプリの挙動には一切触れない チーム開発をするときにどのようにコードを書けば同僚・第三者に読みやすく、開発しやすく、改善しやすいコードが書けるかを具体的な例を交えながら解説されている。

備忘録代わりにざっくりと何が書かれていたのかを自分用に噛み砕く。

一部 表面上の改善

  • 変数はひと目でわかり易い名前にしろ
    • 多少長くても意味が第三者にわかる変数をつけろ
    • tmpとか汎用的な名前はやめろ
  • 誤解されそうな前はつけなように第三者にレビューしながら慎重に決めろ
  • レイアウト・フォーマットは絶対揃えろ。
  • イコールの位置だったり、関数宣言を意味のある塊に分けたり
  • 今だったらlintにここは任せても良いかも[IMO]
  • コメントは書け
  • コードから読み取れることは書くな。
  • 理由があってこういった実装したみたいな、背景とかならどんどんかけ
  • とはいえど下手な文章でコメント書くな
    • 引数にコメントもかけるよ
    • 入出力の実例も複雑になりそうなら書いとけ。エッジケースを含んでると良いぞ

二部 ロジックの整理・単純化

  • 条件式は否定より肯定を使え
  • 関数からはできるだけ早く戻り値を返せ
  • ネストはなるたけ浅くなるように
  • 論理式はわかりやすのを使え
    • ド・モルガンとか有効
  • 不要な変数(一時変数や中間結果を保存しているような変数、フローを制御するような変数{flagとか?})は削除せよ
  • 変数のスコープは短いほうが良い
  • constは積極的に使え
    • 一度しか書き込まない変数は理解しやすい

三部 コードの再構成

  • 通化できそうな汎用的な関数は抽出しろ
    • やりすぎると見通しが悪くなるので要注意
  • 一つの塊で一つのタスクを行う
  • たまにでいいのでライブラリのドキュメントを見ること
  • コードが何をやっているか言葉で説明できるようにしろ
    • 言葉にできないのであればやりたいことが明確になっていない
  • コードは小さい/短いほうが見通しが良い。
  • 問題に対して過剰な機能を利用して解決する必要はない
  • YAGNIの法則かな.(IMO)

    四部 選抜テーマ

  • 今までの原則をテストコードや実際のコードに適用してみよう。
  • テストのために実際のコードを犠牲にするのはちょっとまって
  • カバレッジ100%はつらいぞ
  • テストがプロダクト開発の邪魔になるのは本末転倒
  • エラーメッセージは第三者が見てわかるように書け

一つひとつの事柄は基本的なことで、難しくなくともなかなか全部満たしているコードは見つけられない。 ぜひこれらのことを意識して今後コードを書いていきたい。

個人的に15章の難易度が他に比べてドチャクソ上がったのが気になった。 15章ぐらいの難易度の設計をぱっと思いつくくらいにはなりたい。忘れそうならその都度読み返して見ようと思う。

【感想】この世の果で恋を唄う少女YU-NO【WIP】

前述

絶賛放映中のアニメを視聴したのと最近発売したswitch版YU-NOがあることを知って、プレイを決意。 このGWにクリアする。

実際もう10年レベルで前にSS版だったかのYU-NOをプレイしたことがある。しかし当時は革新的だったかもしれないA.D.M.Sとクリック総当たりのゲームシステムがだるく、早々にクリアを諦めてしまった。 10年ぶりの再チャレンジで無事クリアというわけだ。

プレイしただけだと何なので感想とか、疑問点を列挙しておく。 【WIP】なので徐々に感想をアプデートしていくつもり。

あ、ちなみにバリバリネタバレ含まれるのでよろしくおねがいします。

総評

ストーリー

システム

各ヒロインについて

多分言及されていない疑問点

明確に言及されていない謎(多分)

  • 龍造寺の日記にあった「彼女」について ** 言及されていないが思念体が龍造寺に成り代わる前の成り代わり先が「彼女」?もしかしたらもとは一人目のタタリの被害者かもしれん。
  • 龍造寺の土蔵が急に古くなった理由 ** なんで?
  • ナイアーブって結局なんだっけ? ** 異世界編では出てこなかったし

どっかで言及されたかもしれないけど忘れちゃった

  • 広大ってどこでリフレクターデバイスを入手したんだっけ? ** ケイティアが持ってたんだっけ?
  • 結局タタリの一人目の被害者ってなんで殺されたんだっけ? 一人目の成り代わり先として思念体に殺された? *「燕雀安んぞ鴻鵠の志を知らんや」っていまいちなんであのタイミングで婆様言ったの? 婆様がボケたフリをしているってこと示唆してるだけかな?

【書評】オブジェクト指向言語解体新書

どんな本?

"(オブジェクト指向を)"あきらめたらそこで技術者終了(staticおじさん)ですよ・・・?"という挑発的な帯を持つ一冊 staticおじさんについては下記リンクを参照

www.google.com

いわゆる同人技術書として技術書店 3でデプロイされた。

kauplan.org

位置づけ的には初/中級者が更にオブジェクト指向がどのように動いていているのかの内部実装を深掘りしたいときに読む本。 意外とオブジェクト指向がどういう仕組みで、親クラスのメンバ関数、クラス関数などを呼んでいるのかという部分を解説した本は世の中に出回っていないので。そういった意味でオブジェクト指向実装入門としてこの書籍は非常に有用であると感じた。

コードも程々にあるが、特にインスタンス変数からメンバ関数が呼ばれたときどのようにどのように目的にメンバ関数が探索されて実行されるかという、今までふわっとしか認識していなかった部分を明確に図を用いて解説してくれているのがこの本である。 言語別にも(JavaScript, Python, Java)解説が非常に多く割かれており、静的オブジェクト指向言語であるJavaがなぜメソッドオーバーロードが実現でき、動的オブジェクト指向言語JavaScript, Pythonが実現できないのかというのが解説されている。(3.7 動的と静的を参照)

またオブジェクト指向におけるメッセージ呼び出し(Receiver)における誤謬も解説されていることも面白い点かなと感じる(オブジェクト指向におけるメソッド呼び出しとRubyのsendメソッドの話)(2.11 メッセージとレシーバを参照)

JavaScriptにおけるprotoってこういった役割を持っていたとか、JavaScriptにおけるprototypeってなんだろうみたいな話も解説されている。(6章)

現在もcomic zinやboothなどで入手可能かはわからないが、機会があれば読んでみることをおすすめしたい一冊だ。

Eclipse便利ショートカット

概要

Eclipseの便利ショートカット随時記載 Qiitaあたりに書こうかなと思っていたけど検索汚染が辛いのでこちらへ

クラスの検索(Open with Type)

ctrl + shift + T

Quick text search

ctrl + shift + L 正直このコマンドは神だと思いました

Oculus + touch 50000円

世の中実にボーナス商戦…なのかは知りませんがAmazon primeから始まり色々とお安くなり物欲を刺激する季節となってまいりました。

そんな中最高に私の物欲を刺激してくれたのがこれ

www.oculus.com

やばない? エナニコレ、touch,sensor,全部こみこみで50000?まじかよ…

Oculus自体が相当やばいのか、次世代機のリリースのための在庫処分か。

まぁなんにせよ f:id:kitunetokirin3:20170711221515p:plain

買ったよね。まぁしょうがないよね。しょうがないしょうがない…