発売日直後に買ったものの読むためのまとまった時間がとれず今日まできてしまいましたが、ようやく「ウェブ時代5つの定理」を読みきりました。
- 作者: 梅田望夫
- 出版社/メーカー: 文藝春秋
- 発売日: 2008/03/01
- メディア: 単行本(ソフトカバー)
- 購入: 29人 クリック: 4,720回
- この商品を含むブログ (425件) を見る
発売日直後に買ったものの読むためのまとまった時間がとれず今日まできてしまいましたが、ようやく「ウェブ時代5つの定理」を読みきりました。
通常、C-hは以下のようにしてバックスペースにしてます。
(define-key global-map "\C-h" 'delete-backward-char)
C-sのインクリメンタル検索中、検索文字列の入力を間違えたときに修正したいなーと思いC-hとすると、検索モードから抜けてバックスペースしてしまいます。それでずっと「インクリメンタル検索使えない!」と思っていたのですが、下記の一行を付け足したら解決。すごく快適になりました。
(define-key isearch-mode-map "\C-h" 'isearch-delete-char)
subversionの知識が中途半端なのでsvnbook日本語訳のPDF版を作成してみましたをざっくりと1章〜3章まで読んでみた。
3章までで力つきたので、4章以降はまた後日。
BASEとCOMMITTEDってリビジョン番号は違っても、中身は一緒だよね?あえて二つに分ける必要ってあるんだろうか?
svn checkout http://hoge.net/repos/svn/trunk hoge
の様にすると、hogeディレクトリに作業コピーを作る。
hogeを付けないと、trunkディレクトリに作業コピーを作る
Conflictがおこったら、以下の三つのファイルが作成される
svn resolved filenameで三つのファイルは消える。commitできるようになる。
svn diff > patchfile
みたいにファイルにリダイレクトするとパッチが作れる
svn list http://hogehoge.net/repos/svn
でリポジトリのディレクトリ構成を表示
Lが表示されたらsvn cleanupで解決
本日、level20という転職プロフィールサービスをリリースしました。
一言でこのサービスを説明するのは難しいですが、あえて言うなら「ブログやSNSを履歴書にして、ブログパーツで転職活動ができるサービス」です。
level20のアピールポイントの一つとして、ブログやmixiとの関連づけをすることで、従来の転職サービスにありがちな膨大な登録作業(氏名、年齢、住所、資格、自己PR・・・)を省略できるというものがあります。僕は半年くらい前に転職活動をしていて、大手転職サービス4つに登録したのですが登録にはだいぶ骨が折れました。特に資格の欄を埋めるのがめんどかった記憶があります。無数の資格が微細に分類されていて、大分類→中分類→小分類みたいな感じで順々に選んでいってようやく一個のスキルを登録。この資格はどの分類なのかなーとか考えながらやらなきゃいけない。検索する側(企業の人事さん)や運営側にとっては検索しやすくなって楽なのでしょうが、登録する側としてこれは大分敷居が高いです。level20はブログやmixiを見てもらうのが前提なので、登録に最低限必要な情報はニックネームとブログのアドレスだけです。らくちん。
また、level20は転職に興味がある人のプロフィール情報は誰でも見ることができます。誰でもメッセージを(level20に登録したら)送れます。なので、転職する気はあんまりなくても、「とりあえず自分のスキルセットをみんなに晒しておくよー」とか「友達募集!」というような使い方もできます。(後者はちょっと無理があるかもしれないけど)
というわけで気軽にどんどん登録したらいいと思うよ!
railsでこんなふうに書いたら
class HogeController < ApplicationController def hoge begin redirect_to :back rescue RedirectBackError => e redirect_to :controller => "main", :action => "index" end end end
こんなエラーが出た。
NameError: uninitialized constant HogeController::RedirectBackError
RedirectBackErrorのスペルミスか?それともRedirectBackErrorなんて存在しないのか?とか思いつつ色々調べた結果、これを
rescue RedirectBackError => e
こう直したら動いた。
rescue ActionController::RedirectBackError => e
HogeControllerはActionControllerを継承してるのになんでだろう?
と思ったが、どうもクラス定数は継承できないみたい。
最近、効率のよい○○にはまっています。
などなど。
この中から、まず手始めに効率の良いコードの書き方を学ぶことにしました。個人的に、小手先のテクニックを学ぶよりも基礎から勉強した方が長い目で見た時に効率がいい!と思うので、思いっきり基礎から勉強していきます。そこで、基礎からの勉強のためにプログラミング作法と言う本を買ってみました。
最近いろんなことに手を出しているので、全部読みきるまでには結構かかりそうですが…気長にお付き合いください。まずは第一章。
ローカルグローバルにかかわらず、長くてもわかりやすい名前をつけた方がよいと思っていた。
time_displayみたいな名前つけてたかも><。統一しよう。
unlessはいいのかな?railsで結構多用するんだけど。こんな感じで。
name = params[:name] unless params[:name].blank?
式を分割してコードが複数行になった時に、途中結果を変数に格納しなくてはいけなくなって、変数名が増えて書きにくい→短くしちゃえ
みたいなことをしがちなので、これから自重しようと思います。
そうだっけ?やばい。Cだいぶ忘れてるなー。
else-ifを使うっていうだけなら、「当たり前じゃん」って思うんだけど。
間違い例
if (argc == 3) if ((fin = fopen(argv[1], "r")) != NULL) if ((fout = fopen(argv[2], "w")) != NULL) { while ((c = getc(fin)) != EOF) putc(c, fout); fclose(fin); fclose(fout); } else printf("Can't open output file %s\n", argv[2]); else printf("Can't optn input file %s\n", argv[1]); else printf("Usage: cp inputfile outputfile\n");
正解例
if (argc != 3) printf("Usage: cp inputfile outputfile\n"); else if ((fin = fopen(argv[1], "r")) == NULL) printf("Can't optn input file %s\n", argv[1]); else if ((fout = fopen(argv[2], "w")) == NULL) { printf("Can't open output file %s\n", argv[2]); fclose(fin); else { while ((c = getc(fin)) != EOF) putc(c, fout); fclose(fin); fclose(fout); }
僕は正常系を先に書いて異常系を後に書くってことを意識している(気がする)ので、その感覚で書くと間違い例のようになってしまいそうな気がした。(まあさすがにこの例では正解例を書くと思うけど)
個々の判定とそれに対応する動作はできるだけ近くに記述するのが原則だ。
って書いてあったけど、これは覚えておこうと思う。
これはCオンリーな話なので飛ばす。
これだけだと「そうだよねー」という話。でも
コメントはコードと一致しているだけではだめで、それに沿っていなければならない。
これは参考になった気がする。以下例。
time(&now); strcpy(date, ctime(&now)); /* ctimeからコピーされた末尾の改行文字を除去 */ i = 0; while(date[i] >= ' ') i++; date[i] = 0;
コメントとコードは一致しているんだけど、コメントは改行文字について書いてあるのにコードは空白について書いてあるのが問題だよねーという話。これだと確かに一見コメントとコードが一致してない内容に見えてわかりづらい。
太字の部分を抜粋。
最後の部分を引用
コメントは、コード自体からは即座に意図を読み取れないプログラムの部分を解読しやすくするためのものだ。とにかくできるだけわかりやすいコードを各個と。そうすればそうするほど必要なコメントは少なくなる。優れたコードは下手なコードよりコメントが少なくて住むのだ。
コメントが少なくても分かるコードを書けるように頑張ろう。
Cをだいぶ忘れている気がするので、ちょっとリハビリしたい。
*1:この本に書かれているサンプルプログラムは、ほとんどCです
今の僕のrails開発環境はemacs + emacs-railsです。でもemacs-railsがどうもいまいち。
多分railsが2.0にバージョンアップしたのに、emacs-railsは去年の5月から更新が途絶えているのが原因。で、ちょっとtextmateに浮気をしてみた。
TextMate ― The Missing Editor for Mac OS X
インストールはあっさり。起動して、rhtmlの編集モードにしてみると・・・おー。タグの折りたたみができる。すごい。
でもC-hがバックスペースにならない。やり方調べても???バインドエディタやKeyBindings.dicsをいじってもうまくできなかったので、とりあえずTextMateを使うのは保留にします。
使いこなせたらものすごく生産性が上がりそうなんだけどね。