2010年7月30日金曜日

Railsで独自の日付フォーマットを定義する方法

日時の表示フォーマット - 吉見和也(Kazuya Yoshimi) - ZDNet Japan
使い方は、例えばenvironment.rbとかどこでもいいけど
Time::DATE_FORMATS[:jp] = "%Y年%m月%d日 %H時頃"
とかしてあげると、
>> Time.now.to_s(:jp)
=> "2008年04月22日 11時頃"

なるほど。Railsの機能?Rubyの仕様?

Rialsの javascript_tagで文字列としてでなく地の JavaScriptを書く方法

javascript_tagは、ブロックも付けられるのね。 - Text::Easyhacking
できたらいいなーとか思いながら、マニュアルに無いので試してなかった。

こっちの方が直感的だと思う。1行で済むなら別だけど。

<%= でなく <% で始めるとこがポイントか。
.

2010年7月29日木曜日

ActiveRecordの after_xxx系コールバックは return falseしても ROLLBACKしてくれない

Module: ActiveRecord::Callbacks
If a before_* callback cancels the action a ROLLBACK is issued. You can also trigger a ROLLBACK raising an exception in any of the callbacks, including after_* hooks. Note, however, that in that case the client needs to be aware of it because an ordinary save will raise such exception instead of quietly returning false.

例外投げればROLLBACKしてくれる
.

2010年7月28日水曜日

Migrationで Postgresの NOT NULL制約を変更できた

POSTORO: Railsの migrationのオプション
Postgresの場合、後から:nullを変えられないとか! → change_column で NULL の許可 / 不許可の変更ができない - 星一の日記
古い記事だけど今はどうなんだろ?

現時点の最新版(PostgreSQL 8.4、Rails 2.3)では変更できた。すくなくとも許可から不許可へは変更できた。
.

jQuery UIが Buttonに続いて Checkboxや Radiobuttonも作ってる

jQuery UI - Development resources
We're now working on bug fixes for the 1.9 release as well as development of new widgets:

* Tooltip
* Menu
* Panel
* Checkbox
* Radiobutton

YUIとちがってゴージャスなjQeury UIは絵を書けないプログラマにはとてもありがたい。
日本語の中に入れるとちっちゃく見えちゃうのが難点だけど。
.

ActiveRecordのコールバックにおけるトランザクション管理

Ruby on Rails - Active recordのコールバックメソッド - gendosuの企画開発室
トランザクション

before_コールバックからafter_コールバックまで、すべて正常に動作したときは
DBにCOMMITを送信
どこかでキャンセルが発生した場合には
DBにROLLBACKを送信する

トランザクション管理(BEGIN TRANSACTION、COMMIT、ROLLBACK)してくれるみたい。
もちろんDBが対応していればということだろうけど。

ActiveRecordの saveと save!の違い

ActiveRecordを使ったソースコードを読もう - @IT
!マークの付いたsave!メソッドでは、データの保存に失敗した場合に例外をスローするようになります。

保存失敗時のハンドリングをしないならsave!とビックリマークを付けておくべきということか

2010年7月27日火曜日

Railsの Will_paginateプラグインのサイト

Home - will_paginate - GitHub
This is the official home for the will_paginate library. You can find will_paginate API documentation here.

Paginateプラグインで一番有名なWill_(略)のサイトはここが本家みたい。
.

Railsで 間違えたMigrationを書き直してやり直す方法

マイグレーション関連のRakeタスクの再確認 - ひげろぐ
Rails 2.1になってマイグレーション周りで追加されたタスクや覚えておくべきタスクについての確認。
追加された

* db:migrate:up
* db:migrate:down

覚えておいた方がよくなった

* db:rollback
* db:migrate:redo
* db:abort_if_pending_migrations

rake db:migreta:redoすると、rollbackして再度migradeしてくれた。
たぶんself.downも書いてないときちんと動かない。(alterだけならいいかも)
.

postgresでの numeric (decimal)の少数部を含めた桁数の指定方法

数値データ型
この後の説明では、次の用語を使用します。 numericの位取りとは、小数点の右側の小数点以下の桁数をいいます。 numericの精度とは数字全体の有効桁数です。 すなわち、小数点をはさんでいる両側の桁数の合計です。 そのため、23.5141という数値の精度は6で位取りは4となります。 整数の位取りは、ゼロであるとみなすことができます。

numeric列の数値の最大精度と最大位取りはともに設定することができます。 列のデータ型をnumericと宣言するには次の構文を使います。

NUMERIC(precision, scale)

ふむふむ
.

Railsの Migrationのオプション設定値(改)

Class: ActiveRecord::ConnectionAdapters::TableDefinition
Available options are (none of these exists by default):

* :limit - Requests a maximum column length. This is number of characters for :string and :text columns and number of bytes for :binary and :integer columns.
* :default - The column‘s default value. Use nil for NULL.
* :null - Allows or disallows NULL values in the column. This option could have been named :null_allowed.
* :precision - Specifies the precision for a :decimal column.
* :scale - Specifies the scale for a :decimal column.

こっちがフルバージョンか
.

Railsの Migrationで書ける列設定のオプション

Class: ActiveRecord::Migration
add_column(table_name, column_name, type, options): Adds a new column to the table called table_name named column_name specified to be one of the following types: :string, :text, :integer, :float, :decimal, :datetime, :timestamp, :time, :date, :binary, :boolean. A default value can be specified by passing an options hash like { :default => 11 }. Other options include :limit and :null (e.g. { :limit => 50, :null => false }) — see ActiveRecord::ConnectionAdapters::TableDefinition#column for details.


見辛いので箇条書きに。
  • :types => :string, :text, :integer, :float,
    :decimal, :datetime, :timestamp, :time, :date, :binary, :booleanのいづれか
  • :default => 初期値
  • :limit => 文字数(バイト数?)
  • :null => true or false

2010年7月26日月曜日

Railsの request.urlと request.request_uriの違い

request.urlにはURLが全て入っている
 → http://localhost:3000/c/a?qs=123
request.reqeust_uriにはURLのパスの部分が入っている
 → /c/a?qs=123



requestには他にも色々入っているみたい。

Rails開発日記: requestオブジェクトの中身
refererなどを知りたい時に、requestオブジェクトに聞くと良い。
具体的には、CGIの環境変数と次のような関係にある。

request.request_uriなどから親切にURLを組み立ててくれた結果がrequest.urlということかな

Railsでログアウト処理

Railsのセッションの制御の仕方について Ruby on Rails Pro
reset_sessionメソッド

セッション情報をすべてリセットします。ログアウト処理などに使えます。

これかあ。destroy_sessionみたいのは無いのかな
.

2010年7月23日金曜日

Railsで HTTP Status Code 403 Forbiddenを返す方法

Trigger a HTTP error in Rails - Stack Overflow
In your controller code add the following line:

render :status => :forbidden, :text => "Forbidden fruit"

いろんな人がいろんなこと書いてるけど、このやり方だときちんと動いた。

Rubyで switch case

制御構造 - Rubyリファレンスマニュアル
case [式]
[when 式 [, 式] ...[, `*' 式] [then]
  式..]..
[when `*' 式 [then]
  式..]..
[else
  式..]
end

いつも忘れる...
.

Rails (ActiveRecord)で使える Validateionいろいろ

使えるvalidate一覧
railsにある強力なvalidation機能で、どんな制限ができるか一覧化してみました。


emailとかパスワード再入力とかが実用的そう。ちょっと古い資料?今は増えてたりして
.

Railsの migrationについての参考サイト

ここがわかりやすそう。ちょっと古い?

pylori*style wiki - MigrationによるDB管理
Migrationとは

Migration とは、Railsで使うデータベースの管理機能で、テーブル作成・カラ ムの追加/変更などの作業を一元管理できます。SQL でスキーマを書くのでは なく、Rails独自の記法(Rubyの文法の範囲内)を使ってDB管理を行います。以 下のようなメリットがあります。

* スキーマのバージョン管理ができる
* rake コマンドでスキーマのバージョンアップ/ロールバックが可能
* データベースに依存しない書き方ができるので、他のデータベースに切り替えるのが容易


.

Ruby not on Rails

Ruby off Rails (japanese)
Ruby off Rails
by Stoyan Zhekov
Kyoto, 17-May-2008

タイトルが気に入った
.

postgresの charcterはバイト数でなく文字数

検索したけど見つからないので実験した。
charcter(n)も charcter varying(n)も、マルチバイト文字であるかどうかに関わらず、n文字までデータを入れられる。

ActiveRecordの削除を論理削除にしてくれるプラグイン

Railsで論理削除 - sumihiroの作業ノート
Scaffoldで生成されるdestroyメソッドを実行すると、
レコードがばっさりと物理削除されてしまいます。
acts_as_paranoid プラグインを導入することによって
destroyメソッドを実行しても、論理削除にすることができます。

列にdeleted_atを追加すればいいんだって。
業務系アプリでは基本は論理削除だよね。
.

2010年7月22日木曜日

Railsの script/consoleで "no such file to load -- readline (LoadError)" その2

railsのscript consoleでno such file to load -- readlineと怒られた - tetu1984の日記
rubyをインストールする時にreadline-develが無かったため、readlineが使えない状態みたい。

ので、readline-develを入れて、使えるようにしてあげる。

こっちもか。両方やったら無事script/consoleが動いた!

Railsの script/consoleで "no such file to load -- readline (LoadError)"

centOS 5.3でrubyのreadlineがコンパイルされなくてrailsのscript/consoleが動かない | tkosugaのブログ
railsでscript/consoleを動かすとこのエラーがでる。うーんreadlineが入っていないらしい。

CentOS5.4だけど同じ症状。やってみよう。
.

一定時間内の同一IPからのアクセス数を制限する Apacheモジュール

Apacheに対するサービス拒否攻撃を回避する方法 - 最新Windowsセキュリティ事情:ITpro
mod_evasiveが機能する仕組みを説明しよう。mod_evasiveはまずURLリクエストをApacheサーバーに送信するIPアドレスの記録を取る。その後,あらかじめ設定した許容範囲を超えるリクエストがいずれかのIPアドレスから送信されていないか測定する。許容範囲を超えるリクエストがあった場合,そのIPアドレスからのリクエストは一時的にブロックされる。

標準モジュールだったらすぐ使うのに。

Windowsではセットアップが面倒みたい。
.

Rubyの else if

制御構造 - Rubyリファレンスマニュアル
Ruby では if を繋げるのは elsif であり、else if (C のように)でも elif(sh のように)でもないことに注意してください。

elseifでもないんだね!
.

Ruby (もしくはPython)と PHPを比べる、について

プログラミング言語の優秀さと道具としての評価は別 - kなんとかの日記
もちろん今なら Rails や Django の存在が前提だろうけど、そこまで含めるとそれは Rails や Django の評価であって Ruby や Python の評価じゃないし、PHP だってたくさんのフレームワークがある。

そもそもHTMLテンプレートエンジンとして誕生し、今でもほとんどHTMLテンプレートとして使われているPHPと、普通のプログラミング言語であるRubyやPythonやPerlを比べるのに無理があるんだろうけど、あえてその無理を押し通して比べてみたい人/時もあるでしょう。
(メモ帳とハサミを比べるようなものかもしれないが、人は思考を好むし、思考には際限が無いから。ハサミはメモ帳より偉い?)
本当に似たものしか比較しちゃいけないって言うなら窮屈でしょう。

同じように、Rails/Django/他とPHPを比べるのもありなんじゃないかな。正統かどうかは別として。「正統」なんて角度しだいで変わるしね。

Railsの routes.rbの分かりにくさ

Rails の routes.rb がわかりにくい - kなんとかの日記
なんか、もう、こう、ね、もっとわかりやすく書きたいよね。

こうじゃだめなんだろうか。

Railsのroutes.rbの分かりにくさは、RESTfulな(設計的)美しさの代償だと思う。
PHPerにはその辺むずがゆいところだ。
.

Rails2の routesの書き方の参考ページ

Rails2.0のRouting(config/routes.rb)の記述方式についてのまとめ。 - RAILS PRESS
なんだかRails2.0になってから、routes.rbの書き方を毎回Googleさんに聞いている気がしたので、ちょっとまとめておきます。
(この他にも、routesの記述方式についての有用な情報があれば、コメントいただければうれしいです!!)

まず、Rails2.0のroutes.rbでは、以下の6種類のRoutingの書き方があります。
1.map.connect
2.map.purchase(任意のパス名)
3.map.with_options
4.map.root
5.map.resource
6.map.resources
7.map.namespace

自分も毎回Googleさんに訊いてこのページを探すのは面倒なのでリンクさせてもらいます。
.

2010年7月21日水曜日

config/ environment.rbにセッションの設定が無いと思ったら

Rails 2.3以降でのセッションの設定場所 - なんとなく日記
(確か)Rails 2.x から,config/initializers/ と言うフォルダができており,アプリケーションの初期設定はここに書かれるようです.そして Rails 2.3 からはここに session_store.rb というファイルがあります.

こんなとこに移動してたのね
.

なぜHTML5の meta charset="UTF-8"が後方互換性を持つのか

HTML5のFPWDとmeta要素のcharset属性 - vantguarde - web:g


あらふしぎ、属性がみっつ。

こんなのがずーっと前からあった*1ようで、主要なブラウザはほとんど対応してるんだそうです。

そうだったんだ。知らんかった。なるほどねえ。
.

Railsで 共通のlayoutファイルを作る

Ruby on Rails Tips - application.html.erb 共通layoutファイル - | Agenda Labs IT技術ブログ
Rails2.0でプロジェクト作成しても、application.html.erbが作成されません。

自動では作ってくれないんだ。script/generateでもできなさそう。

Controllerごとのlayoutファイルがある場合、そっちが適用されるみたい。

Linuxのファイアウォール (iptables)でポートを開ける設定

floatingdays: Linuxコマンド備忘録
# iptables -I チェイン名 番号 -p tcp --dport ポート番号 -j ACCEPT

* ファイアウォール通過を許可するポートを追加する
* CentOS 5でデフォルトで使われているチェイン名はRH-Firewall-1-INPUT
* 番号はチェイン内での設定を上から数えたときの番号(一番上が1)
* 追加後に設定の保存とiptablesの再起動が必要
 /etc/init.d/iptables save
 service iptables restart

すぐ忘れちゃう
.

Railsの migrationのオプション

rails:migration [paulownia.jp]
:limit => 255 # 文字列長、桁数
:default => "hoge" # デフォルト値,
:null => false # NOT NULL,
:precision => 10 # decimalの精度,
:scale => 8 # decimalのスケール

Postgresの場合、後から:nullを変えられないとか! → change_column で NULL の許可 / 不許可の変更ができない - 星一の日記
古い記事だけど今はどうなんだろ?

Error on Rails

エラー on rails 「no such file to load -- openssl」 - はたはた
no such file to load -- openssl (RuntimeError)

エントリのタイトルが気に入った。

Video Sitemapの仕様がいつのまにかいろいろな要素が必須になってた

Creating a Video Sitemap - Webmaster Tools Help
Each URL entry must contain the following information:

* Title
* Description
* Play page URL
* Thumbnail URL
* Raw video file location and/or the player URL (SWF)

昔はloc, content_loc, thumbnail_locぐらいあれば大丈夫だったような気がするけど...
.

新プログラマ35歳定年説だって

新プログラマ35歳定年説、あるいは2010年問題 (arclamp.jp アークランプ)
どう生きていくべきか
 今は技術の変わり目なので旧世代のエンジニアも重宝されます。古いシステムはすぐにはなくなりません。でも、5年ぐらいするとニーズが減ってきます。そこら辺が本当の分水嶺。だから、この5年くらいで何かをやっておかないと飲み込まれる。

そうかもねー。

2010年7月20日火曜日

Railsでログイン管理するプラグイン

Railsの認証プラグイン Authlogic について - おもしろWEBサービス開発日記
基本的に

* ログイン/ログアウトの状態を管理するセッション
* ユーザモデルへの認証機能の追加

の二つの機能が定義されている。

便利そうだけど、結局カスタマイズしたりソース追ったりするなら、自分で必要な機能だけで作っちゃった方がいいのかな。

プログラマ的英語(プログラマ語?)

sumはsummaryのこと? - Database Expert - @IT
IT業界には NULL を「ヌル」、Warning を「ワーニング」と呼んだり、Referrer を「Referer」と綴ったり (HTTPプロトコル) する人がいるように、「合計」について、sum は動詞で summary はその名詞形なんて勘違いした人がいて、そう呼ばれるようになったのかもしれません。

Refererは仕様としてもうRefererだからしょうがないでしょう。
リヌクスとかシークゥエルとか、全部ちゃんと(?)してたら大変だ。
(下の方の人が書いてるように、レイディオとかね!)
ブイはヴィーになるしゼットはズイ(微妙)か!

DBなんてドイツ語っぽくデービーって読んじゃうよ!
(英語の得意な後輩が意地になってディービーって綺麗に発音してたっけ。)

summaryは熟語だと集計という意味で使われてそうだけど、どうなんだろう。

Rails2の 擬似RESTfult

2.0のPUTにハマる - ザリガニが見ていた...。
これは、RailsがHTMLの規格に沿ってPUT、DELETEメソッドをサポートしても、現状のブラウザでは実装されていないので、それを補うため、見えないinputタグで:_method=>"put"を送信しているらしい。Railsは:_method=>"put"を受信すると、postであってもputメソッドと解釈して処理を進めるようだ。

HTTP的にRESTfulじゃなくても内部的にはRESTfulっぽくつじつまを合わせてしまうということか
.

ウィルスバスターで困っているというPOSTについた広告がウィルスバスターのだった

POSTORO: SfCtlCom.exeとは
現在CPU使用率が高すぎて困ってる...

他のウィルス対策ソフトの広告が表示されれば、宣伝効果が高そうなのに。
まあいいけど。
.

メールの件名の「Re:」についての詳しい調査

Gmailでのスレッドの扱いとか、正式な仕様とか。


たかがRe: されどRe: - ザリガニが見ていた...。
RFC 5322によると...

* 「Re: 」(大文字R + 小文字e + コロン: + 半角スペース)
* 重複する場合は、余分に付加しない。(つまり、何度返信しても「Re: メールの件名について」となる)

上記の仕様が正解らしい。


Re:はReplyの略だと思ってたが、そうではないらしい。

Rails2の map.resources

2.0のmap.resourcesのオプション設定いろいろ - ザリガニが見ていた...。
* 追加オプションなしの基本ルート設定map.resources :slipsによって、以下のルート規則が生成される。
* ルート規則は上にあるものが優先される。
* .:formatが付属する偶数No.の行は、http://XXXX.XXX/slips.xml等の拡張子付きのリクエストを、respond_toブロックで適切に処理するために存在する。

# ルート設定: config/routes.rb
ActionController::Routing::Routes.draw do |map|
map.resources :slips
end

めもめも

2010年7月16日金曜日

docomoだけ input要素の maxlength属性の扱いが違うらしい

maxlength属性の仕様の違いには要注意! | 株式会社シンメトリック公式ブログ - 携帯開発から生まれる技術情報
この結果を見ると、docomoだけがバイト数として扱っているようだ。SoftBank C型・P型の場合もバイト数として扱っていた記憶があるけど、C型とP型は3月末でサービスが終了したから該当しなくなった。

まさかmaxlengthを文字数以外として使うクライアントがあったとは。
上記サイトにも書いてあるが、厳密にはバイト数ではなく、ASCIIは1文字あたり1、それ以外は1文字あたり2としてカウントするようだ。

Rubyコーディング規約まとめ

Rubyコーディング規約 « 山本隆の開発日誌
Rubyコーディング規約について調べてみました。

3つの規約へのリンク+アルファで参考になる。
.

ソースコード・ドキュメンテーション

Let’s use doxygen!
まつもとの苦手なもの。彼は普段から「ソースがドキュメントだ。 バグも完全に記述されている」と主張しているが、誰も受け入れない。 当り前だ。

そりゃバイナリを読むのは辛いからね。ソースコードなら読める。
.

Rubyのまつもとさん (Matz)によるコーディング規約的な啓示

コーディング規約というほどカッチリしたものではないが、味わい深い。

Matzにっき(2004-10-06)
コーディングスタンダード

社内メーリングリストでRubyのコーディングスタンダードの話題が持ち上がる。 個人的には「自分で勝手に決めて」という感じなのだが、 まあ、私のスタイルを参考にしたい人もいるだろうということで、 まとめてみた。

だいたいはShugoさんのRubyコーディング規約と同じ。
でもRuby以外でも役に立つことがちらほら。
以下抜粋。
  • ライブラリファイルの末尾には if __FILE__ ==
    $0 で囲んで テストケース(かサンプルプログラム)を書いておくとよい。
  • 自明なことはコメントしない。なぜなら本当に大切なコメント が埋没してしまうから。
  • 「未来の自分が混乱しそう」と思ったことは躊躇せずコメント する。そうでなければコメントはあまり必要ない。
  • 「本当に必要だ」と感じた時以外はメソッドは20行以内に抑え る(数はどうでもよい、目安に過ぎない)。例外は巨大なcase文
    を含むディスパッチコードくらいか。

Rubyコーディング規約テンプレート

Rubyコーディング規約
本文書は、Rubyによりコーディングを行う際の規約について述べる。 実際のプロジェクトに適用する際には、このコーディング規約をカスタ マイズして用いることを推奨する。

まとまっていて助かる。

Rubyは言語内言語が作りやすい「緩い」言語なので、けっこう幅広い書き方ができるので、それだけに書く人の好みによって書き方が違ってくる。それだけにコーディング規約を決めようとすると、チームの人数が増えれば増えるだけ紛糾する。

上記規約について、個人的には下記の方が好き。
  • インデント:スペースよりタブが使いやすい。(インデントをまとめて戻す時に。)タブは4文字分が好き。(2文字だと窮屈。でも2文字のほうが「横幅80文字ルール」的に楽なことも多いけど。)
  • コメント:メソッド定義内でもコメントは入れちゃうよ。必要ならね。

Railsとかはどうなってるんだろう?

2010年7月15日木曜日

Windowsと Macで使えるフォントいろいろ

font-family CSS フォント
Windows・Macintosh の両プラットフォーム(OS)に共通して標準的にインストールされている欧文フォント名に "Arial, Arial Black, Comic Sans MS, Courier New, Georgia, Impact, Times New Roman, Trebuchet MS, Verdana" などがあります。

Comic Sans MSとかImpactがおもしろい
.

iPhoneでアルファベットを高速にフリック入力する動画

YouTube - Japanese ten key style.MP4
Japanese ten key style.MP4

速い速い。外国に人?
.

2010年7月14日水曜日

Google Appsでも新しい Googleドキュメントが使えるようになった

変更内容はこれだそうだけど良さが分かりづらい。


Google ドキュメントの新バージョン : Google ドキュメントの概要 - Google ドキュメント ヘルプ
Google ドキュメントの概要: Google ドキュメントの新バージョン
印刷

Google ドキュメントの新バージョンには次のような便利な機能が用意されています。

* リアルタイムでの共同編集: ドキュメントを編集している他の共同編集者からのアップデートを見ることができます。
* 高品質のインポート: パソコンから Google ドキュメントへのインポートの一貫性がさらに高くなりました。
* 他の共同編集者とのチャット: ドキュメントを編集しながら、他の編集者と変更内容についてチャットすることができます。
* ルーラー: Google ドキュメントに余白、インデント、タブ位置を設定するためのルーラーが追加されました。

逆に使えなくなった機能としては、「ブログへの投稿」とか書式としての「引用」とか。

2010年7月13日火曜日

CentOSに Ruby on Railsをインストールするための参考サイト

blog: ゼロから構築するrails環境
CentOS5.4にrails環境を構築します。
エディタ以外のライブラリはインストールしていない空の状態からスタートです。

checkinstallのインストールはrpmforgeからyumで入れるのが楽だと思う
.

Rubyを make installする

マルニカ。 CentOSに最新Rubyをインストール。
CentOS5.2のyumでrubyをインストールするとバージョンが1.8.5だった。
ので、現在の最新1.8.7をインストールしたときのメモ。
(最新版は公式ページで確認してください。http://www.ruby-lang.org/ja/downloads/ )

メモメモ。
.

2010年7月12日月曜日

Deliciousの "Tagometer"

Tagometer on Delicious
With our JSON powered Tagometer Badge, you can add some flair to your site. With this badge, it's easy to show both tags and number of saves, so it's easy to show visitors how interesting you are.

名前はたぶん「タコメーター」のダジャレなんだろうな...
.

FeedBurnerは記事を自動で Twitterに転送してくれる機能があるらいい

FeedBurnerからTwitterへ自動投稿可能に - F.Ko-Jiの「一秒後は未来」
これで FeedBurner に Ping を飛ばせばフィードの更新とともに Twitter へ即座に反映することができます。

TwitterFeedとかのアレと同じ感じですね。

RSS/Atom Feedに関することはFeedBurnerが何でもかんでもやってくれた方がいいと思う。FeedBurnerの居場所ってそこしかないんだから。
.

2010年7月9日金曜日

Railsと MVC

Life is beautiful: Ruby on Railsの「えせMVC」の弊害
(誤解した人が多かったので追記すると)結論としては、「Railsを使って(データの整合性が大切な)アプリケーションを作る場合、素のままのActiveRecordにControllerから直接アクセスするのは避け、ActiveRecordの上に一枚皮をかぶせる形でビジネスロジックを含んだModelをきちんと設計・実装し、ビジネスロジックがControllerに浸食していくことを意識して避けることが大切である。

そうそう、ActiveRecordはたしかにそれだけでModelとして通じる場面も少なくないけど、ビジネスロジックがあるならそれをModelに実装するのがMVCの精神。
もっといえば、DBに関連してなくても、つまりActiveRecordでなくてもModelは必要になってくる。

ただし、WebプログラミングにおいてはそもそもビジネスロジックをModel化するのが面倒な場合も多い。
下手するとそのページでしか使わないページ専用モデルがいくつもできることになる。
そういう場合はMVCにとらわれずに、あきらかにそのページ固有であるビジネスロジックはModel化せずにコントローラに書いちゃったほうがスパゲッティにならない。
判断は難しいけど。
コントローラに書いたのを後で共通化したければリファクタリングしましょう。
.

jQueryで内側の要素がクリックされた時に外側の要素のクリックイベントが起きないようにする方法

jQueryでバブリング(bubbling)のテスト - せつないぶろぐ
バブリングを利用する時はそのまま素直に利用すればいいのですが、上位エレメントにイベントを伝えたくない時もあります。
その時はイベントに対してstopPropagationメソッドを発行します。

bubblingというキーワードで探せばたくさん情報があったが、このbubblingというキーワードを見つけるまでに手こずった。(bubbleupだっけ?と探してみたら違うプラグインが絶賛されてた。)
.

jQueryの find(expr)と filter(expr)の違い

ryan's blog» Blog Archive » jQueryでfind()とfilter()の違い
$(‘div’).find(‘.someclass’)では,.someclassを持つ,divの子要素を返す.filterは.someclassを持つdiv自体を返す.

なるほど!そうだったのか!
.

jQueryの live()で使えるイベント、使えないイベント

live(type, fn) - jQuery 日本語リファレンス
この関数で指定できるイベントは、次の通りです:
click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup

現時点ではサポートしていないイベントは、次の通りです:
blur, focus, mouseenter, mouseleave, change, submit

submit使えないのか。blurとfocusとchangeも。
これは使えたっけ?と右往左往するくらいならlive()自体使わない方がすっきりする?

それから$(...).hover()はイベントじゃないのね。
.

prototype.jsは将来的には DOMの拡張をやめるらしい

ノート/Prototype 1.7 RC と jQuery 1.4.*
そして最後に Prototype.js にとってステキな情報がでました。 Prototype 2.0 から DOM の拡張をやめるようです。さんざんダメだと言われてきたことではありますが、あらためて詳しく述べられています。簡単にざっくりまとめてみると:
(中略)
以上の問題を解決するためには、 jQuery のような "wrapper approach" がベストだとしています。順次対応していくのか( Mootools は、 Event の拡張だけやめている)、 ver.2 から全て変えるのか、リリース時期はいつなのか、等は分かりませんが、かなり大きな変化(互換がない)になりそうです。でも歓迎しますよ。

そりゃwindow.$と(window.jQuery)だけにしか影響が及ばないようになってた方が、何かと無難だろうねえ。

でも先にPrototype.jsが普及した後jQueryが出てきた時、DOMそのものでなくそのラッパーを操作するというのにかなり違和感があったのを思い出した。
その違和感をjQueryの普及が薄めてくれたからPrototype.jsの方も変われるんだろうねえ。

Prototype.jsの CSSセレクタエンジンがSizzleになるらしい

ノート/Prototype 1.7 RC と jQuery 1.4.*
Prototype の今回の一番大きな変更は、 CSS セレクタエンジン( CSS3 セレクタに対応したのは ver.1.5.1 から)を、 jQuery に使われている Sizzle にしたことでしょう。さらに、ソースからビルドする場合、別のセレクタエンジンを使うことができるようになっていて、例として、速いと言われている(使ったことはない、、、) NWMatcher が挙げられています。

びっくり。
でもそもそも、Prototype.jsでCSSセレクタ使えるようになってたことも知らなかった。
.

iPhoneアプリで「振ると×××できる」ブームか?!

iPhoneのEchofonって振ると最新のつぶやきを取得できるんですね - IDEA*IDEA ~ 百式管理人のライフハックブログ
友達に教えてもらって「へー」と思ったのでエントリー。iPhoneのEchofonって「振ると」最新のつぶやきを取得できるんですね。

プリキュアのパフューム(?)も振ると心の種が生まれるよ!iPhoneじゃないけど!

CSSにより全ページに同じヘッダーを印刷する方法

Tableのヘッダーをすべてのページに印刷させるためのCSS - IDEA*IDEA ~ 百式管理人のライフハックブログ
いっつも忘れちゃうのでメモ。印刷時にTableのヘッダーを繰り返し印刷させるためのCSSです。こちらを印刷用CSSに書いておけばOK。

きちんと用意されてるんだ
.

RoundCubeとは

FrontPage - RoundCube Webmail 日本語サイト
このサイトはajaxとPHPで組み合わされたウェブメール「RoundCube Webmail」の日本語サイトです。 RoundCube Webmailの日本語対応の促進と情報交換などを目的に構築されています。

有名なオープンソースのWebメール用ツールらしい。

httpdのエラーログに下記のような感じの存在しないURLへのアクセスがあったのはこれを狙ったのか。
  • roundcube
  • rc
  • roundcubemail
  • rms
  • roundcubemail-0.1
  • roundcubemail-0.2
  • roundcube-0.1
  • roundcube-0.2
  • round
  • cube
最後の方のcubeって、もう原型がわからない...

2010年7月8日木曜日

古籏一浩伝説 その2

めろんぱん || よりすぐりメルマガサイト
これだけ超絶の生産性にもかかわらず、キーボードは左右それぞれ一本指で 打っている。一般の人が彼に勝てるのはおそらくここだけ。「古籏さんって、 キーボード、10本指で打てないんですって? プ」とか言ってみよう…orz

たしかにマイコン世代の人ってブラインドタッチ(タッチタイピングって言わなきゃいけないんだっけ)が広まる以前に自己流タイピングを身につけちゃってたイメージがあるからその口なのかな。

自分もなかなか、かな入力から抜け出せなかったのを思い出した。(マイコン世代ではないけど。)

古籏一浩伝説

jQuery等のオープンソースのJavaScriptライブラリの日本語リファレンスでもおなじみの古籏一浩さん。
その本業は実はプログラマでも執筆業でもないらしい。

めろんぱん || よりすぐりメルマガサイト
だが、あくまで本業は運輸配達業。そう本人が力説している。配達は昼と深 夜の2回。午前一時の塩尻市で軽トラをぶっ飛ばすという、リアルイニシャルD 状態をもう何年も続けている。

え!
.

PHPでセッションが有効なパスを指定する方法

セッションクッキーパラメータを設定する - PHP 5.3 日本語マニュアル
ファイル php.ini で定義されたクッキーパラメータを設定します。 この関数の効果が持続するのは、スクリプトの実行が終了するまでです。 したがって、リクエスト毎や session_start() がコールされる前に session_set_cookie_params() をコールする必要があります。

php.iniでも設定できるが、session_set_cookie_params()の2番目のパラメータでも設定できる。
session_start()前に設定すること。

クローラ系botには Wait入れようよ

法と技術とクローラと私 - 最速転職研究会
ウェイトを入れません(入れるとしてもごく短い)

1分に1回くらいで。せめて1秒に1回までにしようよ
.

HTTPステータス 402 Payment requiredの事例

法と技術とクローラと私 - 最速転職研究会
もし過剰なアクセスにより金銭的な負担が発生しているのであれば402 payment requiredを返すのも良いでしょう。

このステータス使ってるとこあったんだ
.

2010年7月5日月曜日

Djangoをアンインストールする方法

Django のインストール — Django v1.0 documentation
setup.py install を使って Django をインストールした場合は簡単で、 Python の site-packages ディレクトリから django ディレクトリを削除 するだけです。

たしかに簡単だ
.

/usr/bin/envとは

UNIXの部屋 コマンド検索:シェバング (*BSD/Linux)
しかし perl や ruby などの新しめのコマンドは、OS によって /usr/bin にあったり /usr/local/bin にあったりと、置き場所がバラバラである。そこで
#!/usr/bin/env ruby
などと env コマンドを使用することが多い (特に ruby 界隈でよくみかける)。どこの ruby コマンドが実行されるかは、実行時に設定されている環境変数 PATH の内容次第であるため、確実性には少し欠ける。

Rubyのバージョン違い等で複数の実行ファイルが共存している場合はどれを使って実行されるか注意!
.

jQuery UI Datepickerを SELECT要素に対応させるのは少し面倒そう

jquery ui datepicker with select lists - jQuery Forum
Yes. Use beforeShow to set the current date based on the select lists, and onSelect to populate back into those lists. These are applied to a hidden datepicker input field.

それほどの手間ではないが...オリジナルでそこまで面倒みてくれないのかな。でもそうするとバリエーションが増えすぎてシンプルさが損なわれそう。
.

jQuery UI Datepickerを年月選択を日本語化すると改行してしまう

こんな感じで解消できるみたい


SigmaGridを使ってみた(その2) - ushidayの日記
datepickerを日本語にすると、デフォルトcssだと、年月のセレクタが縦に並んでしまうので、以下のクラスを調整して横に並べます。

2010年7月2日金曜日

Google検索結果に RSS等のフィードが表示される場合

Feedmedia: Googleは検索結果にRSSフィードを表示するべき?
P.S. 「なぜRSSフィードがインデクシングされているか」についてはスレッドに答えらしきものがあって、Content-Type が text/xml だとインデクシングされ、application/rss+xml や application/atom+xml だとインデクシングされないのだそうです。へぇー×100。

そうなんだ。今どきのツールでフィードを吐けばたいていapplication/(xxx+)xmlになりそうだけど。

上記記事に書いてある"inurl:index.xml OR inurl:rss.xml OR inurl:index.rdf OR inurl:atom.xml OR
inurl:rss20.xml OR inurl:feeds"で検索したら、今でもフィードがヒットした。
.

Windowsのデータを完全に消去するコマンド

@IT:Windows TIPS -- Tips:ディスクの内容を完全に消去する
■ ディスクを破棄したり、譲渡したりする場合には、あらかじめディスクの内容を消去しておかないと情報が漏えいする危険性がある。
■ ファイルをごみ箱に捨てても、インデックスが削除されるだけで、データ本体を消去するわけではない。そのためファイルを復活させることもできる。
■ データを完全に消去するためには、ディスク全体に渡ってデータを完全に上書きする必要がある。このためにはcipher /wコマンドを実行すればよい

遅いので、快適にやりたいなら市販ツールの方がお薦めらしい。

フォルダまで指定したいなら下記を参考に。
データを完全に削除できる「cipher」ってコマンドがあったのね… - IDEA*IDEA ~ 百式管理人のライフハックブログ
.

jQueryでリッチな表を表示するプラグイン

いよいよjqGrid使ってみる: ページアウトされた記憶の残骸
jqGridは、JavaScriptライブラリであるjQueryのプラグインで、リッチな感じのテーブルだ。見た目、結構かっこ良さ気なんだよね。Excelっぽくて。

Flexigridとどっちがいいだろう?
.

ブログ アーカイブ

カテゴリー