Home

memo-space

間違ったRuby On Railsのはじめかた

  1. よくあるscaffoldを使ったチュートリアルをやる。
  2. scaffold :modelという一行が何なのか理解できずに悩む。
  3. 2がスタティックメソッドの呼び出しであることを知り、Rubyではクラス定義の中に任意の式を書けることに驚く。
  4. paramssessionは何故@params@sessionではないのか悩む。
  5. Module#attr_internalの存在を知り、気が遠くなる。←今ここ

どうもRubyのコードは苦手だ。

masuidrive on rails ≫ Blog Archive ≫ Railsでアプリを組むのは簡単か?

Railsでアプリを組むのは、PHPやJavaより楽だけど、Ruby/Railsが使えるようになった人間が、アプリを組むのが楽だって言うだけで、Ruby/Railsを覚えるのがPHP/Javaより簡単って訳じゃない。

なるほど。 RailsはWebアプリケーションを作るための便利な黒魔術集といったところか。

フレームワークとしてうんぬんより、script/generateは便利といった印象。 ただしそのscript/generateの使い方をどこで調べたらいいのかよくわからないけど。

より分散された世界を想像する

人のBlogを読んだ時、そこに感想を書き込もうとするのがコメント。 自分のBlogに帰って、そこに感想を書き込んでから送るのがトラックバック。 それぞれ長所短所があるわけですが。

それより、自分がどこに書いた、どこに保存されているか、それをどのように見たいかというのはどうでもいいというか、もっと自由でいいんじゃないかなあ。

hail2uの中の人のblogなんかは、はてなブックマークでブックマークするとコメントできるようになってます。 これは、 はてなブックマークエントリー情報取得API を使ってJSONPでもってきて表示してるんだと思います。

同じことをあちこちでOpenIDでやれば、何がおこるのかな。 僕のBlogも、他のBlogへの感想も、全然バラバラのサーバに対して書き込まれる。 僕がはてなやlivedoorやmixiに書きちらかしたエントリは、IDでひもづけられる。RSSリーダーで気になったエントリがあれば、その場でそこに何か書き込む。 もうエントリとかコメントとかトラックバックとかブックマークとか、そんな区別いらないんじゃないかな。

TTYShareイイヨー

ずっと前から欲しかったもの(というか作ろうとして挫折してたもの)。あったじゃん。

TTYShare - share and view your tty data online.

ttyrecをweb上で再生するしくみです。ついでにOpenID対応してるよ。エクストリームなvi使い(いやemacsでもいいけど)のみなさん。今こそそのテクニックを披露する時ですよ。

あーあと、テクニックを披露する場合はぜひrectickもあわせて使っていただきたい。

関係無いけどtypespeedというのをはじめて知った。

OpenIDとmixiとはてなとlivedoor

話題になりはじめてからもう二年くらいたつのかもしれないけど、 やっとOpenIDが盛り上がってきたんでしょうか。

ほんまかいな。国内では対応サービス全然増えてない気がしますが。

Continue reading

CP932 vs JISX0213

CP932の2バイト部分(何て呼べば良いんだろう)とJIS X0213の1面を比較してみました。元データはunicode.orgのCP932.TXTと、使いこなそうユニコードのsjis0213.txtです。

CP932 vs JIS0213(2)
CP932 vs JIS0213(2) posted by (C)あきを

  • グレーの点はCP932でもJISX0213でもreserved。
  • 赤い点は、CP932とJISX0213でUCSのコードが違う。
  • 緑の点は、JISX0213にしか存在しない。
  • 青の点は、CP932にしか存在しない。

となっていて、白い部分は一致しています。一番気になるのは青いところで、これは13区の10文字です。

CP932UCS
13800x8790U+2252
13810x8791U+2261
13820x8792U+222b
13840x8794U+2211
13850x8795U+221a
13860x8796U+22a5
13870x8797U+2220
13900x879aU+2235
13910x879bU+2229
13920x879cU+222a

これらのうち9文字は、2区との重複文字です。

Windows-31J の文字セット

残りの1文字(13, 84)はどこへいったのでしょう。sjis0213.txtには(1 -6-18)にこんなコメントがありました(適当に改行してあります)。

1- 6-18 0x83B0  U+03A3      # GREEK CAPITAL LETTER SIGMA 
# unified with Windows CP932 0x8794 (as a "KOKUNAI-JISSOU-GOKAN-MOJI",
a domestically implemented compatibility character, N-ARY SUMMATION (U+2211).

うーん。調べてみようと思ったらJISのサイトがメンテナンス中だった。

関連: 図解:Windowsの文字コード

それ、yuiで

tbodyとrowspan

Sybianの日記 - tbodyをスクロール可能に

tbodyで思い出した。JOINの結果みたいなグループ化されたのを表にしたい時に、tdにrowspanを付けるのがけっこうめんどい。 なぜなら、上から走査していくのの、そのグループの要素が何個あるかを最初に知っていなければならないからだ(適当な説明だけどピンとこない人はスルーして下さい)。

で、楽する方法としてtbodyとrowspan="0"を使うという方法を思いついたんだけど、IEだと表示できなった。以上。

111aaa
bbb
ccc
222aaa
bbb
ccc

図解:Windowsの文字コード

先日、某所でWindows Vistaで採用されたJIS X 0213:2004の話を聞いてきた。 実際にVistaに触る機会があれば色々実験してみたいと思うけど、 その前にとりあえずWindowsの文字コードについてまとめておきたいと思う。

まずは私の知っているWindows XPまでの話。以下のページを参考にさせてもらいました。 あわせて見ていただけるとわかりやすいと思います。

Windows-31J(CP932とも呼ばれることがあるけど、以降Windows-31Jと呼びます) というのは、

  • JIS X 0201:1997
  • JIS X 0208:1997
  • NEC特殊文字
  • NEC選定IBM拡張文字
  • IBM拡張文字

からなっている(あれ?ユーザ定義外字が無いな)。

JIS X 0201は1バイトなので置いておいて、マルチバイト文字の基本は JIS X 0208という文字集合。これは94×94文字の集合なので 領域としては8836文字分あるけど、空きとかがあって実際に定義されているのは 6879文字だそうだ。

そこに特殊だったり選定だったり拡張だったりを追加した図がコレ。

Windows-31J
Windows-31J posted by (C)あきを

13区と89〜92区はJIS X 0208の空き領域に文字を追加している。 それはともかく115〜119区って94越えてるんだけど、 これはShiftJISというエンコードのなせる技だったりする。

で、本題はこの先。これらの追加された文字は、 歴史的経緯によってすべて重複している。同じ文字の形(グリフ)のものが 2箇所以上にある。つまり2つ以上の文字コードを持っているわけだ。 その重複を表わしたのが次の図。

Windows-31Jの重複符号化文字
Windows-31Jの重複符号化文字 posted by (C)あきを

普通ベン図 は楕円とかで書くんだろうけどそれじゃ上手く書けないので四角になってます。 赤い数字は各四角形の中の文字数。つまりNEC特殊文字は8+1+61+13=83文字と なっていて、そのうち14文字はIBM拡張文字と重複している。 また、9文字はJIS X 0208の2区と重複しているというわけです。

さてこの中には1つの文字で3つの文字コードを持つものは何文字あるでしょう? というと公文式か日能研かという感じだけど。実際のところ2文字あります。

しかし何時間もかけた割にはイマイチな図だな。誰か絵心のある人に書き直してもらいたい。

次はVistaについて書きたい。

Makefileをもっと簡潔に

ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き - - Makefile は簡潔に書きましょう

hoge.cからhogeを生成するより簡単な方法は、Makefileを書かないことです。

$ make hoge

Makefileを書くのであれば、

hoge:

とだけ書いて

$ make

で十分。

速攻automake

何回やっても覚えられないので最低限のことだけ。

  1. ソースファイルを作る。

    #include <stdio.h>
    #include "config.h"
    
    
    int
    main(int argc, char **argv)
    {
        printf("hello, world\n");
        return 0;
    }
    
  2. (どうせ捨てるけど)Makefile も作っておく。空でいい。

  3. autoscan を実行し、できた configure.scan を configure.ac にコピー。

  4. configure.ac を編集。AC_INIT を直すのと、AM_INIT_AUTOMAKE を追加。

  5. aclocal, autoconf, autoheader を実行。

    #                                               -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.
    
    
    AC_PREREQ(2.59)
    #AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
    AC_INIT(hello, 0.0.0, iakio@mono-space.net)
    AC_CONFIG_SRCDIR([hello.c])
    AC_CONFIG_HEADER([config.h])
    AM_INIT_AUTOMAKE
    
    
    # Checks for programs.
    AC_PROG_CC
    
    
    # Checks for libraries.
    
    
    # Checks for header files.
    
    
    # Checks for typedefs, structures, and compiler characteristics.
    
    
    # Checks for library functions.
    
    
    AC_CONFIG_FILES([Makefile])
    AC_OUTPUT
    
  6. Makefile.am を作る

    bin_PROGRAMS = hello
    hello_SOURCES = hello.c
    
  7. automake --foreign --add-missing

繰り返しの比較表

いやなブログ: 配列操作の比較表: Ruby, Python, JavaScript, Perl, C++

僕がすぐわからなくなってしまうのは、for 文とか foreach とかの書き方だ。 この表の最後にも a.each の例があるけどさ。

なわけでこんなのを作ってくださいエライ人。

Python Perl PHP
for x in a: for my $x (@a) {..} foreach $a as ($x) {..}
for x in xrange(10): for my $x (0..9) {..}
for (my $x = 0; $x < 10; $x++) {..}
for ($x = 0; $x < 10; $x++) {..}
for k, v in h.iteritems(): while (my ($k, $v) = each $h) {..} foreach $a as ($k => $v) {..}
while (list($k, $v) = each($a) {..}

と、ここまで書いてこんなのを見つけた。

Foreach文 - Wikipedia

まあいいや、あと filter 系とか map 系も欲しいな。Python でいうところの [ x * 2 for x in range(10) if x % 2 == 0 ] 的なやつ。

アンチフルスタックという開発手法

また何となく思いついただけなんだけどさ。

Ruby on Railsみたいな「フルスタック」って、要するに最大公約数的?な手法だと思うわけだ。

「SQL を書かなくてもデキる」みたいなのとかもあるけど、SQL 書いちゃった方が楽な場合もあるわけで。

で、それぞれの構成要素が得意分野でベストを尽す、みたいな開発手法もあっていいなじゃないかなと。

クライアント側は JavaScript でテンプレートでも使って、サーバー側はひたすら JSON でやりとり。

画面遷移とか認証、セッション管理なんかは Apache でやらせる。Apache モジュールを C で書いちゃうのは究極だけど、mod_{perl,python,ruby} のフックを使ってやるのがいいと思う。ブラウザが「画面遷移してくれ」と Apache に通知する感じだ。

あと、トランザクションが必要ならもうデータベース側でストアドプロシジャにしてしまう。

そうすることのメリットはこれから考える。

PHPは何故ダメか

PHPを他の言語が見下す理由 - 404 Blog Not Found とか F's Garage:昔、2ちゃんとかでよくあった、Perl = C++ , PHP = VBってな感じ? あたりを見て、PHP がいかにダメか、PHP に対す不満をつらつら書こうと思った。いったいなんでこんなことになってるんだ、と思ってソースツリーを見てみたら、PHP の意外な(そして誰も使っていない)実力を発見してしまった気がする。 もっとも僕の勘違いかもしれない。これについてはちょっと調べてみてからまた書こうと思う。

それはともかく、YAPC::Asia なんかを見たり聴いた感想としては、PHP がダメな理由は「PHP には Larry も Matz もいないから」とか言ってみたい。半分本気。

そもそも大抵の言語は C で実装されてるわけで、で、大抵 C で拡張可能になっている。なので「何ができる / 何ができない」というのはほとんど意味がない。 C で拡張書いちゃえば、C でできることは全部出来るからだ。 だから、「何ができる」よりも「どのようにできる」の方が大切だと思う。

あと、言語が生き物である以上、「今こうである」ということはすぐには言語の魅力には結びつかないんじゃないかな。大切なのは、ひとつは生い立ちで、もうひとつは成長を支える環境だと思う。(まあ現状の PHP にもいっぱい不満はあるけど)。

今コマンドライン上で動こうとも、PHP は生れは Web アプリケーション専用の言語だった。そのことが売りだったわけだ。Perl で CGI を書こうと思ったら、 print "Content-type...\n\n"とかしていたころもあったし、 CGI.pm だ、DBI、DBD、セッション管理はどうするの?とかやっていたころもあった。

PHP はいきなり $_GET とかできるし(それすら必要無かったけど^^)、 $_SESSION でセッション管理できるし、それなりのパッケージいれれば RDBMS にもすぐ繋がる。

でも、状況はかわってきた。他の言語のフレームワークもコマンド一発でインストールできるようになってきた。

で、この先の PHP に何があるのだろう。

O/Rマッピングがダメとかじゃなくて

O/R マッッパーがダメなわけじゃない。現状ではそれも一つの解だけど、でもやっぱ別の解がありそうな気がするというだけのことだ。

もちろん、"O" の方がダメだとか "R" の方がダメだとかいうわけでもない。 ただ、RDBMS というのは Web アプリケーションのためだけのものではないし、むしろ元々はそんな使われかた想定されていなかったんだと思う。だって RDBMS が出来た時は Web アプリケーションなんてなかっただろうし。

そして、言語の進化と比べれば、RDBMS は(表向きは)ほとんど変化していないし、これからもそうだと思う。

つーか単純な ActiveRecord とかやるなら、REST でいいんじゃないかな。ある URL に対して REST でアクセスするとそのまま RDBMS にマッピングしてくれるというサーバがあればいいんだ。 で、SELECT の結果は XML とか JSON で返せばいいじゃん。GET なら JavaScript からでも XMLHttpRequest でアクセスできる。何より言語に依存しない。 (もうどっかにあるのかな?)

FireBugすごいかも

Web Developper 向けの FireFox Plugin。

IT戦記 - FireBug の新しいバージョンが便利すぎる件について

リンク先の、さらに先にあるムービーを見よう。いちおうここにもリンク貼っておきます。

http://sample.ecmascript.jp/20060331.html

Home

Search
Feeds
Profile
石田@苫小牧市と名乗りつつ札幌の某社に勤務するプログラマ
書いた本
Links

Page Top