ひよこの外部記憶

めもおきば

パーフェクトRuby 1章

パーフェクトRubyが手元に届いたので各章ごとにエントリ書いていく
今後はmarkdownで書ける手作りブログに移行予定のため、Markdown記法っぽく書いてあります。


#第一章
導入なので今までのおさらい感があった。
調べた事や曖昧であった点を備忘録的に書いていく

##.bashrcと.bash_profileの違い

  • bashコマンドを実行した時には.bashrcのみ呼ばれる
  • ・・・現時点の私ではあまり関係ないのか?bashプロセスを新たに立ち上げたいタイミングが分からない

##1-6-5 コードブロックの方針

  • { }は処理が単数行で終わる場合に使用
  • do...endは処理が複数行に渡る場合に使用
  • 処理の優先度が違うらしい(知らんかった・・・)

##RubySpec
複数Ruby実装がテストコードとして利用

  • MRIのテストとは違うっぽい
  • Stringのgsub読んだ、言語のテストはやっべぇ(ロシア語?フランス語?)

##JRuby

  • Javaで実装されたRuby
  • Javaのパッケージ呼び出せる
  • メソッドの記法はJavaっぽい書き方(ex:addEventListener)でもRubyっぽい書き方(add_event_listener)でも呼び出せる
  • setterも変数に直接触るような書き方も出来る
  • 1.9.3互換

##バグ報告

一番新しいエントリで盛り上がっていたのはEnumerable#to_hの振る舞いについて。 最終的に提案は受け入れられなかったが、議論に参加する人は前バージョンとの互換性が・・・等という人が居らず、こう有るべきだ、という議論からずれない所が面白い

Vim

# 覚えておきたい事メモ

### 指定の行に移動

```
:数字 指定の行に移動
```

### or条件での検索

```
\(hoge\|piyo\) "hoge"と"piyoにマッチ
```

### 一部領域をファイルとして保存
選択モードで選択している行がある時に:を入力すると
:'<,'>
的な出力が出る
この状態で
w hoge.txt
とか入力するとhoge.txtに選択行がコピーされる


### bg

  • control + z でバックグラウンドに移行
  • fgで再度Vimを復帰出来る

### カーソル位置の単語を検索

  • 前方検索 #
  • 後方検索 *

Homebrew + rbenv + ruby + Railsインストール

基本的には以下のサイト見ながら行けた

http://d.hatena.ne.jp/takuya_1st/20111224/1324750111


XCodeの重さにドン引き

> ruby <(curl -fsSkL raw.github.com/mxcl/homebrew/go)
>brew install rbenv
>brew install ruby-build
>echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
>source ~/.bash_profile
>brew install readline
>brew link readline
>brew install openssl
>brew link openssl


この後の
> CONFIGURE_OPTS="--with-readline-dir=/usr/local --with-openssl-dir=/usr/local" rbenv install 1.9.3-p194
ってのが動かなかった

エラーとしては色々あったがコレ
configure: error: no acceptable C compiler found in $PATH

持ってきたは良いがコンパイル出来ないとの事だった

解決参考URL:http://stackoverflow.com/questions/9323612/configure-error-no-acceptable-c-compiler-found-in-path

Xcodeにチェック入れろって

実際やったら出来た。

Macの設定メモ

備忘録がてら
はてなブログにこういう記事書くときに記事内の小見出しの目次出したいのだがやり方分からず。。。


環境
バージョン Mac OS X 10.7.4


PC名変更

spotlightで「共有」を探す
上の段にコンピュータ名があるのでそこで設定

ユーザー名変更

アカウントで右クリック(変更できる状態で)
詳細オプションで変更できる
※ここでホームディレクトリも設定出来る

画面キャプチャの保存

Shift + Command + 4
pngで保存されるからそれをGIMPで開いて編集、エクスポートで拡張子変えてOK!

suの設定

Macだとsuのパスワードが初期設定されていないらしい

sudo passwd root

で変更して使えるようになる

bashrcの位置

/etc/bashrc

ctrl + shift + delete

>option + command + esc

Eclipseの設定とか

リファクタリングの輪読の番が回ってきたので覚え書き
Egitの使い方とはてな記法の思い出し

Eclipseの設定

師の推奨設定

オートフォーマット

window > Preferencesで検索にformatって入れれば出るEditor > Save Actions

セミコロン、中カッコの空気読み

検索にsemicolonとか入れれば一意に絞れる
Automatically insert a correct posion見たいなヤツで設定
セミコロンは分かるが中カッコの空気読みの使いどころは分からん。

JUnit追加

EclipseにはJUnitをプロジェクトに追加する機能がある。
プロジェクトのProperties > Java Build Path > Librariesタブ > Add Library > JUnit
JUnit追加出来る



まずは普通にプロジェクト作成
構成は

-Refacotoring11
 -src
  -com.example
   -Test.java
 -test
  -com.example
   -AssertTest.java
 -lib
  -junit4.5.jar

フォルダ構成の書き方は何が良いのかな?まぁ次
発表の時はここを見ながら進められるようにしよう

委譲による継承の置き換え

テストとリファクタリング(ライブコーディングの練習として)

継承による委譲の置き換え

extends付けて使ってたインスタンス名消すだけ(ライブコーディングの練習として)

大きなリファクタリング

今回コードはありません
⇒作るべきロジックがわからなすぎたためです。
作るべきアプリケーションのロジックが分かれば作って展開します、申し訳ありません。

リファクタリングは目的を持って行う

⇒今までのはリファクタリングの中でも簡単だったからここからが本当のリファクタリングだ的な感じ
・チーム内での合意が必要
リファクタリング実行中である事を全員が知っている必要がある。
例え話は訳分からん、なんのこっちゃ?

大きなリファクタリングの目的

リファクタリングする事でプログラムをどう設計すべきかが常にプログラムに反映される。
中途半端な設計判断がプログラムに伝播していくのを防ぎたい


今回の発表では12章コード無しです。
ここは作っとけって言うものがあればりファクタリング前、りファクタリング後を別途送付します。

4つの大きなリファクタリング

継承の分割

ちょっとした仕事のために小さなサブクラス作成、その後(一週間、一ヶ月、or more)別の箇所で同じ仕事をするための別のサブクラス追加
⇒そして地獄へ
例で説明(ロジックがあんまり分かりませんでした)
PPT作成してみた。

手続き的な設計からオブジェクトへの変換

オブジェクト指向に反する状況
・データ少なくて長いメソッドがずらずら
・アクセサのみのデータオブジェクト
第一章の最初の例
・データとそのアクセサだけを持つクラス作成(RDB使ってるならテーブルに対応させる)
・手続き的なコードを全て一つのクラスに格納(第一章でのstatement()の最初の状態みたいな)
・statementをメソッドの抽出やメソッドの移動等で適切なデータクラスに移動する。
⇒カット

プレゼンテーションとドメインの分離

GUIのなかにあるロジックを分けましょう
MVCで作りましょう的な

階層の抽出

コード書いてみた・・・けど分からない、そもそも作るもんが違うのかリファクタリングが思い浮かばないだけなのか・・

Webを支える技術 第二部(4,5章)

URI

インターネット上でリソースを一意に識別するID

Cool URI

CoolなURIの在り方は今後も変わらない:シンプルである事
シンプルであるための条件は以下


1.プログラミング言語に依存した拡張子やパスを含めない
  • URIが.plとか.jspとかで終わるサイト良くない(他の言語に変わった時困る)
  • LoginServletとかも良くない(javaっぽいし何より大文字)
2.メソッド名、セッションIDを含めない
  • Strutsで作るとメソッド名がURLに入る⇒メソッド名変えるとURIも変わっちゃう
  • jsessionid=みたいなURIも良くない⇒ログインするたびに破棄されるのは知っているがクエリパラメータとして送られるURIを見た事がないな、何か例ないかな?
3.URIリソースを表すべき

 URIで表されるリソース(Object)にHTTPのメソッドで表される事をする(Verb)
という対応関係になっているべき



URI設計

URIを見てどんな情報にアクセスしようとしているのか予測出来るような設計

1.どうしても変えたい時は新しいページへリダイレクト
  • 古いURIにアクセスしたら新たなURIにリダイレクトするように作るべき
2.拡張子で表現を指定
  • .jaとか.enとかだったら付けた方が分かりやすくて良い

所感

言われてみれば当たり前だが、良いURIとは何かを具体的に言語化して理解出来た事は有意義であった。javaでWEBアプリ作っている時にはhttp://hoge.com/LoginServletのようなURIを平気で作成していた。これは作っている立場からするとアクセス出来るリソースを一番良く表しているリソースだと感じる。実際にURIを設計する事になったら”使う人にとって”良いURIとは何か常に意識していられるようにしたい。