Subscribe: 研究室
http://www.antimon2.atnifty.com/lab/atom.xml
Added By: Feedage Forager Feedage Grade B rated
Language: Basque
Tags:
chart api  chart  clazz def  clazz  def meth  def  end class clazz  google chart  meth end class  meth  send meth  日付 区切り   
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: 研究室

研究室



JavaScript、Ajax、HTML5(API)、Ruby…Web及び関連技術の実験&情報公開&制作物紹介。



Updated: 2010-12-11T02:38:39Z

 



Ruby東海第15回勉強会

2010-12-11T02:38:39Z

第15回Ruby東海勉強会に参加しました。発表したLT資料を公開します。

昨日、第15回Ruby東海勉強会に行ってきました。
「メタプログラミングRuby」読書会 第2章「火曜日:メソッド」。
動的メソッドによる動的ディスパッチと、ゴーストメソッドを利用した動的プロキシ。2つの魔法を手に入れたw

さて今回、LTやってきました。
「Freedom Patching の実用例(?)」
前回の勉強会で出てきた「モンキーパッチ」、改め「Freedom Patching」についての実例。
以下に資料を公開しております。

Freedom Patching の実用例(?)

なおスライドは普通のHTML5です。
閲覧には Chrome、Safari、Firefox(できれば4.0β以上)推奨。Operaだと一部Webフォントが正常に表示されないっぽいです。あとIEはChromeFrame必須。

来月の勉強会は、私σ(^-^)がまとめ担当に立候補しました。
第3章「水曜日:ブロック」
内容に絡めたLTも余裕があればやりたいなーと画策中♪




【覚書】[Ruby]続・トップレベルに定義したメソッドと同名のメソッドをクラスで定義した場合

2010-11-05T15:49:01Z

Rubyで、クラス定義内で定義したメソッドと、同名のトップレベルのメソッドを呼び出す方法のメモ。の続き。

本日(日付が変わっちゃったので正確には昨日)、第14回Ruby東海勉強会に行ってきました。 そこでヒントをもらったので、半年前の記事に補足。

[おさらい]半年前に考えてたこと

def meth(a) p a; end
class Clazz
  def meth
    《トップレベルで定義した同名メソッドを self を引数に渡して呼び出したい!》
  end
end

こんなことしたい場合に、どうすれば良いのか?

↑こんなことを考えていました。

ポイントは以下の通り:

  • トップレベルで定義したメソッド = Kernelモジュールで定義されたprivateメソッド。
  • Kernelモジュールで定義されたメソッドと同名のメソッドを定義 = メソッドのオーバーライド。
  • privateメソッド = レシーバを指定して呼び出すこと(obj.methのように)が出来ない!(Rubyの仕様)

もう1つの解答

結論から書くと、前回考えた方法の他に、こんな方法で一応可能だった、ということが判明:

def meth(a) p a; end
@@main = self
class Clazz
    def meth
        @@main.send(:meth, self)
    end
end

解説

この書き方のポイントは以下:

  • トップレベルではmainというオブジェクト(Objectクラスのインスタンス)がselfになっている。
    • ↑のmainオブジェクトは他から直接参照できない。
      → 他から参照できる変数に代入してしまえ!
      → ということでクラス変数@@mainに入れてみました。
    • トップレベルのクラス変数 = Objectクラスのクラス変数 = 全てのクラスに共通で使えるクラス変数(なぜなら(BasicObject以外の)全てのクラスはObjectクラスを継承しているから)。
  • privateメソッドはレシーバ付きで呼び出すことが出来ない。
    • でもRubyにはメソッドにメッセージを送るメソッド send が用意されている。
      obj.send(:meth, 《arguments》)で、objオブジェクトのmethメソッドがたとえprivateメソッドでも呼び出し可能。
    • ということで
      @@main.send(:meth, self)
      でOK!
  • 前回は「同じオブジェクト内に属しているコトを期待して継承もとのメソッドを探す方法」に拘っていた。
    でも実はKernelモジュールのメソッドなんだから、別のオブジェクトにも属しているワケで。
    そっちから呼び出す方法を探れば良かった。それが今回の一番の収穫。

特に3番目。こんな単純でありながら目から鱗な方法を当時見落としていたとは。

あ、てことは、

def meth(a) p a; end
class Clazz
  def meth
    Object.new.send(:meth, self)
  end
end

これでもOKじゃん!

あ、もっというと、全てのクラスはClassクラス(のサブクラス)のインスタンスであり、ClasssuperclassObjectだから...

def meth(a) p a; end
class Clazz
  def meth
    Object.send(:meth, self)
  end
end

これでもいける。
全く同じコトはモジュールにも言えるから...

def meth(a) p a; end
class Clazz
  def meth
    Kernel.send(:meth, self)
  end
end

おおおー。これが見た目一番スマートだ。




第39回FLOSS桜山勉強会

2010-06-26T02:27:00Z

第39回FLOSS桜山勉強会に参加してきました。

気がついたら丸1ヶ月更新ほったらかしてたのはさくっと無視して。
昨日、第39回FLOSS桜山勉強会に参加してきました。

今回は、iPad/iPhone特集。
2時間のうちほとんどは、iPhoneアプリとして人気のSpeedText作者、広部さん(@hirobe)の発表。
プログラマ向けの、iPhone/iPad開発入門。
SpeedText開発から得られたノウハウの披露と、iPad/iPhone4(iOS4)の登場で今後のアプリ開発がどう変わるかの展望。

iPhone/iPad、持ってません。
Developer登録もしていないので、今すぐiPhone/iPad開発をするかというとそういうこともありません。
ただ、純粋に、実際の開発者からノウハウを聞く、というのが興味あって。
あと、iPhone4の実機を触りたくてw
iPhone4、噂通り、画面が綺麗。解像度が倍になっているとは聞いていたけれど、凄く緻密で目にも優しい。しかも半紙によると、開発側としては解像度が倍になったことをほぼ意識しなくても良いらしい。iPhone4(iOS4)側が勝手にスムージング処理とかしてくれるらしい。

昨日の個人的な収穫はそれですね。
勝手にスムージング処理のおかげで、曲線描画や文字描画はものすごく綺麗。
逆に画像は実質「勝手に2倍に拡大(おそらく内部的にピクセル補完処理実施)」してるので、イラストや文字画像は気をつけないと逆にぼやけるかも。
iPhone対応サイトはもう「文字を画像で表現」は時代遅れですね。

あと、懇親会で隣に座っていたのが、Ruby東海の片桐さん(@eitoball)。
Rubyに興味があり勉強中だという話をしていたら、お誘いを受けましたので、今度の7月上旬の勉強会に参加予定です。
こういう新しいつながりが出来るのって、こういう勉強会(の懇親会)の醍醐味ですよね♪

次回のFLOSS桜山勉強会は内容未定とのことですが、参加する方向で考えています。




Google Chart API の QRCode 生成機能で日本語を通す方法

2010-05-24T14:56:36Z

Google Chart API の QRコード生成機能で日本語を表示する方法をメモ。

恥ずかしながら、つい最近まで Google Chart API でQRコードが生成できるの知りませんでした。

ということで、色々試してみました。
↓この画像は同APIで生成したものです。(半角カナで「ハロー ワールド」と表示されます)

(image)

普通にURLだけをエンコードするだけなら手軽で簡単なのですが、上記のように日本語や半角カナを入れ込もうとするとちょっとコツが必要だったので、メモを残しておきます。

書式

結論から書けば、書式としては以下の通り。

http://chart.apis.google.com/chart?chs=200x200&cht=qr&chld=M|4&
choe=Shift_JIS&
chl=%EF%BE%8A%EF%BE%9B%EF%BD%B0...《後略》

(説明の都合上複数行に分割していますが、実際には1行です)

ポイントは2つ。

  • choe
    出力文字コードの指定。「Shift_JIS」を指定。
  • chl
    内容。文字列のエンコードはUTF-8で与えます。

chs(サイズ指定)、cht(「qr」を指定)、chld(エラー訂正レベルと余白のサイズを指定)はドキュメント化されているとおりです。

なお上記では説明のため、指定しているテキストはURIエンコードしていますが、ブラウザのロケーションバーに直接入力する場合は、最近のブラウザならきちんとUTF-8で送信してくれるのでエンコード不要な場合が多いです。ただしHTML中に記述する場合はエンコードした方が無難です。

以下、もう少し技術的に突っ込んだ解説(読み飛ばしOK)。

技術的考察

ポイント1:QRコードの内部文字コードは(実質)Shift_JIS

QRコードは、ご存じの方も多いと思いますが、日本国産の2次元コードフォーマットです。
QRコード®は、株式会社デンソーウェーブの登録商標です)
その辺の色々な事情があるのでしょう、QRコードで扱える文字コードはShift_JISだけです。
データとしてはバイナリデータ(8ビットバイト)を格納できるので、文字エンコードに無関係にデータを格納しようと思えば出来ますが、携帯電話(QRコードを読むデバイスとして代表的なモノ)で読み込むと、文字化けしちゃいます。

ポイント2:Google Chart API が受け入れる入力文字コードはUTF-8

Google Chart API では、chlパラメータで入力データを受け取ります。
上記「ポイント1」より、ここに普通にUTF-8のデータを指定すれば、普通に文字化けすることが容易に想像されます。
少し考えると、「じゃ、ここにShift\_JISでエンコードした上でURIエンコード(%xx%xxの形式)したものを指定すれば良いのでは?」と、思いつきます。が。これがダメでした。
実際、例えば↓
http://chart.apis.google.com/chart?chs=200x200&cht=qr&chld=M|4&choe=UTF-8&chl=%93%FA%96%7B%8C%EA
と指定(「%93%FA%96%7B%8C%EA」は「日本語」)してみると、QRコードは表示されますが、内容は空っぽです。Shift_JISでエンコードされたデータが全く無視されている感じです。

ポイント1 + ポイント2 → 入力はUTF-8、出力はShift_JIS

ということです←結論。




オリジナル404ページ公開

2010-05-22T07:37:36Z

オリジナルのエラーページを公開。JavaScriptでエラーメッセージをQRコード化して表示します。

誰得なwエラーページを作りました。
404ページを初め、いくつかのエラーページをこのオリジナルのモノに変更しました。

見て戴ければ分かる通り、JavaScriptがONなら、QRコードが表示されます。
また403および404ページでは、エラーの内容に従ってQRコードも変化します。
是非、JavaScriptをONにした上で、存在しないページやインデックスの存在しないパスにアクセスして、携帯等のQRコードリーダーで内容をチェックしてください。
いや、本当はちゃんと存在するページにアクセスして欲しいんですけどね。

以下、技術情報(興味のない方は読み飛ばしOK)です。

仕様

使用ライブラリ

  • uuCanvas.mini ver.2.03
    Canvas描画(IE8以下でCanvasの代わりにVMLを使用して描画)のために使用。
    また一部のDOM操作APIも利用。
  • svgutil
    自作。SVGネイティブサポートの判定とSVG関連のDOM操作をちょっとだけ楽にする機能を提供。
  • QRCode ver.1.0.1
    ※上記リンク先で公開されている最新版ではない可能性があります。
    JavaScriptでQRコードを生成する基本ライブラリ。
  • QRCodeEx
    自作。上記 QRCode に機能を追加・補完するもの。
    日本語対応、Canvas対応、SVG対応(要・svgutil)など。
    ※日本語対応のために、Escape Codec Library: eclのコードを一部利用しています。
  • QRCodeExDs
    自作。QRCodeEx をさらに機能追加するもの。
    デザインパラメータをあたえることでQRコードの見た目を変えることが可能。
  • append_css
    自作。リンク先の記事参照。
  • 404 自作。本体。下記参照。

404 がやってること(概要)

  1. HTMLから

    要素の内容と、エラーメッセージ(id="error_message"が指定された要素、class="error_message"が指定された要素、id="dest"が指定された要素を順に検索し、その内容(テキスト)を抽出)を取得。

  2. id="dest"が指定されている要素の親要素をアンカー要素()と仮定し、そのhref属性値(=リンク先)を取得。
  3. 1.で取得した、h1の内容とエラーメッセージ、2.で取得したリンク先をテキストとして結合。
  4. 3.で生成したテキストを値としてQRコードを生成。
  5. 4.で生成したQRコードのデータ領域を一部改変
    表示されているQRコードの右下に注目!
  6. QRコードをHTMLにはめこみ。
    エラーメッセージが存在する場合はそれをQRコードの下に再表示。

その他特記事項

  • ページそのものは、MTのWebページ機能で管理・生成しています。
  • 403ページ、404ページは、要求されたパスをPHPの $_SERVER["REQUEST_URI"] で取得し、
    リクエストされたURI **** へのアクセスは許可されていません。
    もしくは
    リクエストされたURI **** は存在しません。
    と表示しています。
  • QRCode、QRCodeEx、QRCodeExDs についての詳細は、機会があれば別途紹介します。



第38回FLOSS桜山勉強会

2010-05-21T15:14:04Z

第38回FLOSS桜山勉強会に参加してきました。

第38回FLOSS桜山勉強会というものに参加してきました。
前々から某知人にお誘いを受けていたのですが、このたびやっと参加できました。

毎回テーマを決めて勉強会を行っているそうなのですが、今回は8月に開催する「OSC名古屋」の運営打ち合わせがメイン。

打ち合わせとは無関係のLTもあり、そちらでちょっとご挨拶がてら簡単な発表してきました。
プレゼン資料作ってなくてほぼぶっつけ本番状態。でも、ま、なんとか形になったかな、という感じ。ウケも取れたしw
ちなみに内容は、HTML5(API)のさわりとして、SVG(or Canvas)とJavaScriptを利用した動的なQRコードと、WebWorker(マルチスレッド)のデモ。
あ、ちなみにWebWorkerのデモは完全自作ではありません。サンプルはここで公開されているWebWorkeをラップしたライブラリ「AlexService」を使用したモノで、そのチュートリアルをDLして自前サーバーで動作確認したモノであり、動きとしてはこのサイトで公開されているモノとほぼ同じです。

取り敢えず今回は、初参加と言うこともあり顔出し挨拶程度でしたが、今後OSC名古屋とかでもっとdeepに関わっていくことになるかと。
関係者のみなさま、よろしくお願いします。




ひと足早くiPadのWebを考える勉強会

2010-05-15T07:50:23Z

に、参加中。 お借りしたiPadで入力。 MTの記事入力画面は扱いづらい(^-^...

に、参加中。

お借りしたiPadで入力。
MTの記事入力画面は扱いづらい(^-^;

(ここからはMacBookで追記)

ということで、applepleさんの会議室でiPadで色々試しながら、Webの今後について色々話してたりします。

個人的には特にHTML5 APIの対応状況が知りたくて色々調査。
ところどころでツイッター上で報告(ハッシュタグ #ipadnagoya )してたりするので、そちらも参照してください。
(ちょっとめんどくさいのでリンクは後から張りますm(_ _)m)

取り敢えず気になったこと。
WebWorkers って、iPadで動かないのね(T-T)
そもそもiPhoneOSがシングルスレッドなんでしたっけ?

ただ基本webkitなので、それ以外のSafariでできることは概ね出来る感じ。
SVGが綺麗ですねー。CanvasももちろんOKだし、Webグラフィックはそこそこよさげ。
さすがにPC(Mac)に比べれば、タイマー処理とかは多少もたつきますけど。




【覚書】[Ruby]トップレベルに定義したメソッドと同名のメソッドをクラスで定義した場合

2010-05-11T08:04:53Z

Rubyで、クラス定義内で定義したメソッドと、同名のトップレベルのメソッドを呼び出す方法のメモ。 ちょっとばかしハマったのでメモ。 トップレベルであるメソッドを定義します。 それと同名のメソッドをあるクラスでも定義します。 例えば、 def meth(a) p a; end class Clazz def meth; p self; end end こんな感じ。 このとき、クラス Clazz 内で、トップレベルのメソッド meth(a) を呼ぶにはどうしたら良いのか? もっと言うと、同名のメソッド内で def meth(a) p a; end class Clazz def meth 《トップレベルで定義したメソッドを self を引数に渡して呼び出したい!》 end end こんなことしたい場合に、どうすれば良いのか? ...あ、もちろん、 「トップレベルで定義したメソッドと同名のメソッドを定義して、なんてそんな変な設計にしない」 というのが正解なのは分かっています。 仮に、あくまで仮に、そんな事態に陥った時の解決法は? ということですので。 [基本1]トップレベルでメソッドを定義するということ Rubyでは、def xxx ? end で定義されるものは「メソッド」です。 「メソッド」というからには、必ず何らかのオブジェクトをレシーバーとして持つわけです。 クラス定義内でメソッドを定義すれば、そのレシーバーはそのクラス(またはサブクラス)のオブジェクト(instance)です。 モジュール定義内なら、そのモジュールをinclude(Mix-in)したクラスのオブジェクトです。もしくはextendした場合はそのクラスのクラスメソッドとなり、つまりレシーバーはそのクラス(クラスオブジェクト)になります。 ではトップレベルで定義したら? と言うと。 Kernelモジュールのメソッドとして定義したのと同じ扱いになります。 KernelモジュールはObjectクラスでincludeされています。 Objectクラスは全てのクラスのスーパークラスです。つまり、全てのオブジェクトはObjectクラスのインスタンスメソッドを使用可能です。 つまり。 トップレベルでメソッドを定義すれば、どんなオブジェクトでもレシーバーとなる、イコールいつでもどこでも呼び出しができる、ということになります。 [基本2]メソッド呼び出し時にレシーバーを明示しない場合の挙動 Rubyではメソッドの呼び出しは、obj.xxx()のように所謂「ドット記法」を利用できます。 他にも文法上有効な記法はありますが、とにかく「レシーバー(前置)、メソッド名(後置)」というよくある基本法則で成り立っています。 ところがいくつかのオブジェクト指向言語がそうであるように、Rubyでもレシーバーの記述を省略できます。いきなり「メソッド名」を記述できるわけです。 その場合、self が指定されたと見なされます。 self は、現在の文脈における「自分自身」を表すオブジェクトです。 メソッド定義内なら、そのメソッドを実行しているオブジェクト(レシーバー)、クラス定義内やモジュール定義内ならばそのクラス/モジュール自身。 なおトップレベルでは、main という特殊なオブジェクト(Objectクラスのインスタンス)になります。 いずれにせよ。 「メソッド名」だけを指定した場合は、取り敢えずなんらかのオブジェクトが必ずレシーバーとなり、Objectクラスで定義されている[...]



動的にCSSを追加 append_css

2010-05-09T12:13:51Z

CSSをテキストで追加するScript appendCSS() の紹介。

なんか探せばどこかにありそうなツールですが、仕事用に作ったものを一般公開してみます。

WebページにCSSを追加するJavaScriptです。
ポイントは、外部CSSファイルではなく、要素への直接適用でもなく、CSSをテキストで指定する、という点。

使用例

appendCSS(
    ".debug { display:block !important; }" +
    "#dest1 { color: #ef0000; font-weight: bold; }"
);

デモページ

http://www.antimon2.atnifty.com/works/append_css/
(リロードするたびに表示が変わります)

ダウンロード

取り敢えずファイルへの直リンクを張っておきます。

http://www.antimon2.atnifty.com/works/append_css/append_css

動作環境

  • IE6以降
  • Firefox 3.0.x以降(2.xでも多分動作)
  • Safari 2.0.x以降
  • Google Chrome 4.0以降
  • Opera 9.6以降

仕様

グローバルスコープ(windowオブジェクト)に1つの関数 appendCSS() を追加します。

特徴

内部的には、引数で受け取ったテキストを、そのまま内容としてstyle要素を生成(document.createElement())して内に追加しているだけです。

比較

CSSを動的に追加するという意味で、機能的にはMooTools(more)のAsset.css()とほぼ同様です。 違いは以下の通り:

  • Asset.css()
    ...外部のCSSファイルを読み込む
    • ○ 追加するスタイルの管理・編集が楽
    • △ MooTools に依存(※1)
    • × サーバーへリクエストが発生する
  • appendCSS()
    ...テキストで直接CSSの内容を指定する
    • ○ サーバーへ追加のリクエストは発生しない
    • ○ 他のライブラリに非依存
    • × 追加するスタイルを運用で変更しにくい

※1:やってることは appendCSS()と同じくらい単純なので、MooToolsに依存しない形に書き直すのは全然難しくないですけれど。

免責事項

著作権は Antimon2 が保持します。MITライセンス日本語参考訳)に従います。
Copyright © Antimon2, MIT-style license.




Rubyでちょっと込み入った変数の初期化

2010-05-06T03:34:40Z

JavaScriptだと、1つの変数にちょっと込み入った処理の結果を初期値として...

JavaScriptだと、1つの変数にちょっと込み入った処理の結果を初期値として定義するとき、わざわざ他のローカル変数や別の関数を導入してスコープを汚したくないときとかに↓

var a = function (x, y) {  
    :(x、yを利用した複雑な処理)  
    return XXX;  // こんな形で最終処理結果を返す  
}(b, c);

みたいに、無名関数(JavaScriptの世界ではこれをクロージャと呼ぶこともある)を定義してその場で実行する、ってよくあります(あると思います)(ありますよね?)。

Rubyで同じようなこと出来ないかな? と思ったときに、こうすれば出来るじゃん、っていう方法を見つけたのですが↓、

a = proc {|x, y|  
   :(x、yを利用した複雑な処理)  
  XXX  # こんな形で最終処理結果を返す  
}.call(b, c)

これって一般的? よく使われる方法? あとこう言った場合に、もっとスマートな方法って何かあるでしょうか?

教えて、えらい人(or Ruby識者)。

【2010/05/06 追記】

その後、自分なりにいろいろ調べてみた。
大体あってたけれど、↓こっちの書き方の方が互換性とか考えると良さげ。

a = lambda {|x, y|  
   :(x、yを利用した複雑な処理)  
  XXX  # こんな形で最終処理結果を返す  
}.call(b, c)

「lambda」と「proc」は、ここでの使い方ではRuby1.8.xなら全く同じ意味で、Ruby1.9.xだと少し違うらしい。

  • lambda
    ...ブロック内で return するとそのブロックを抜ける
  • proc
    ...ブロック内で return するとそのブロックを実行している関数を抜ける

ということらしい。

あとコンパクトと言う意味では、「Proc#call」の代わりに「Proc#[]」の書き方ができる。

a = lambda {|x, y|  
   :(x、yを利用した複雑な処理)  
  XXX  # こんな形で最終処理結果を返す  
}[b, c]

さらにRuby1.9.xなら、「.call()」を「.()」と省略して書ける。
↑の例より1文字(1バイト)多いけれど、より「呼び出してる」感が出て直感的。

a = lambda {|x, y|  
   :(x、yを利用した複雑な処理)  
  XXX  # こんな形で最終処理結果を返す  
}.(b, c)



Twitter Bot の紹介

2010-05-03T01:10:12Z

拙作のTwitter Botを紹介。Rubyで作っています。

ツイッター(http://www.twitter.com/)で活動するボット(Bot)をいくつか作っています。

2010/05/03時点で、2つ。
それらの特設ページを作成しました。

これらのBotの詳しい内容は、各解説ページを参照戴くとして。
ちょっと技術的な話とか、苦労話とか。

そこにRubyがあったから

元々ツイッターのBotを作ろうと思ったきっかけは、Rubyの勉強。
それも(新しもの好きな自分としては)Ruby1.9の言語仕様を実例で覚えていきたいな、と思っていたのです。

できれば本職により近いところで、Webアプリでも作れたらな、と思ってました。でも話題のRADツールであるRailsは、ベースがRuby1.8。1.8系と1.9以降でRubyに色々と仕様変更があり、そこがRailsが1.9系に移行できていない原因だとは思うのですが、言語仕様を見ると、多言語対応(マルチバイト文字対応)強化とか、その他諸々、1.9系の方がより洗練されているんですよね。じゃ、せっかく一から覚えるんだったら1.9じゃなきゃ。と。

そこで手軽だったのが、ツイッターのBot作成だったというわけ。
これならツールが言語仕様に縛られることも(そんなには)なく、(多少はあっても自分でこねくり回して何とか出来るレベルだしそれも含めて)ちょうど良い勉強になりそうだ、というワケです。

初めは Twitter4R

Rubyは組み込みライブラリとしてネットワーク関係も初めから充実しているので、RESTFULなプログラムだったら追加ライブラリなしで書けちゃいます。(ま、それは昨今のサーバーサイドスクリプトとして使用されることをある程度想定されている言語ならほぼ当然ですけれど)
でも簡単なやりとりならそれでも良いですけれど、そこそこ多機能なTwitter APIをいきなり使いこなして色々やるのはやっぱりちょっと面倒。

そこで最初に手を出したTwitter APIラッパーライブラリが、Twitter4R
ま、最初に知ったRuby対応のTwitter API操作ライブラリがこれだった、ということなんですけれど。

このライブラリの良い点は、徹底したラッピング。
TwitterのAPIを操作するのではなく、ツイッターを操作するのにより近い感覚のクラスやメソッドが定義されていて、それが裏で適切なTwitter APIを使用している。
TwitterのWeb APIが返してくるデータ(xmlとかJSONとか)も、独自定義のクラスできれいにラップしてくれる。
普通なら、JSONをparseしてできるHashをそのまま扱う、というパターンが多い(その方が内部処理はシンプルだし、実際巷に出回っているTwitter API操作ライブラリの多くはそうなっていると思う)のですが、Hashだと「名前の指定間違い」があっても気付きにくく、デバッグしにくい(コンパイル型言語なら実行時までエラーに気付かないとか)という難点があるんですよね。
そう言う点でもUI設計的にも優れているし、そう言う仕組みとしてみれば、ソースコードそのものもRubyの勉強になる良い材料だったのです。

ただ大きな欠点が1つ。
あまり開発がアクティブではない、ということ。

Twitterは日々進化し続けており、APIにも仕様変更がたびたび発生しています。
今まで使えたAPIが明日いきなり使えなくなることはあまりありませんが、新しい機能が増えたり(listとか)、そういうのに追従していかないとAPI操作ライブラリとしてはどんどん置いてかれちゃうわけです。
Twitter4Rの不満はそこでした。欲しい操作が使えない!
ま、そこはRubyのダイナミック性を活かして、勝手にクラスを拡張(ライブラリのソースを直接編集するのではなく、クラスを再定義して欲しい機能を持ったメソッドやプロパティを追加する、ということ)で回避できましたけれど。

でも、それでも解決できなかった大きな問題が発生したのです。

「6月末日をもってベーシック認証が使えなくなります」

前々から言われていたことだった(らしい)のですが、セキュリティの問題等で、Twitter APIでベーシック認証の仕様が廃止されるのです。
ベーシック認証廃止カウントダウン特設サイトまであります。
ちょっと楽観視していたのですが、地上アナログ放送よりも1年も早いw

で、ベーシック認証に替わってOAuth認証の使用が勧められていたのです。
Rubyでも、その名もズバリoauthという追加ライブラリがあり、これを導入すれば今までのネットワークAPIとほぼ同じ感覚でOAuth認証を使用したREST API操作プログラムが書けるのです。
実際、APIライブラリを使用しないTwitter発言orTL収集サンプルを書いてみたら、今までと同じ感覚でちゃんと動きました。

が、ここで大きな問題が。
Twitter4Rは、ベーシック認証にしか対応していない!
ソースを見てみましたが、Net::HTTPが深く入り組んでいて、何処をどう弄ればOAuth対応化できるのか、非常に分かりづらい。
サンプルを少し書いてみましたが、なかなかうまくいきませんでした。

で。
かける労力と時間を天秤にかけた結果、諦めて別のライブラリを探すことに。

次回予告:rubytterとの出会い

OAuth認証にも対応していて、手軽に使えるRuby用Twitter APIライブラリを探して見つけたのが、rubytterでした。
Twitter4Rとの違いは......と、書きたいところですがかなり長文になってしまったので、一旦区切ります。

rubytterとの出会いの話、Twitter4Rからの以降の話等は、また次の機会に。




メールフォーム(再)設置

2010-04-25T11:52:13Z

リニューアルし、メールフォームも再設置しました。

技術ブログとしては約1年半ぶりの更新です。
......と、いうのはさらっと流して。

リニューアルを受けて、メールフォームも再設置しました。
H.Fujimoto氏作のメールフォームプラグインV2.2β1(MT5用)
以前設置していたものはずいぶん古いバージョンのものだったので、MT5にも対応した新しいバージョンを再設置です。

ついでに、今回はMT5のプロフェッショナルテーマを改造しているので、「プロフェッショナルウェブサイト」テンプレートセットでメールフォームを使うを参考に、メールフォームのサンプルテンプレートやナビゲーションテンプレートを修正して、以下を実現しています。

  • ナビの「Contact」をクリックすることでメールフォームに移動。
  • メールフォームページを開いたらナビの「Contact」をアクティブ表示に。

サイト全体に対してのご意見・ご要望、管理者(あんちもん2)への直接のコンタクト、コメントとして残したくないコミュニケーション手段を採りたい場合等にご使用ください。

メールフォーム




『日付の言語』の設定を拡張! - DateLangX プラグイン for MT4

2010-04-18T12:11:19Z

『日付の言語』機能を拡張するプラグイン DateLangX for MT4 の公開!

ニッチなニーズに応えられる(かもしれない)プラグイン、MT4対応版を公開します。
Movable Type (以下、MT) の、ブログ記事設定『日付の言語』を拡張する、DateLangXプラグインです。
MT4.0以降に対応しています(MT4.01、MT4.22で動作確認済み)。
インストールすると、以下の図のように『日付表示用の言語』に項目が追加されます。

(image)

このプラグインは、MT4.x用です。MT3.xをご利用の方はこちらをご覧ください

ダウンロード

(どちらかを選択してください。内容は同じです。)

ver.0.1 [New!]

動作環境

MT4.0x以降(transformer利用)。
MT4.01、MT4.22 で動作確認を行っております。

インストール

  1. ダウンロードしたファイルを解凍してください。
    解凍ソフトに「ディレクトリ構造を**」というオプションがある場合は、「ディレクトリ構造を有効(再現、等)」にして解凍すると、以下のようなディレクトリ構造が生成されます:
    DateLangX
      ┣DateLangX.pl
      ┗lib
        ┗DateLangX
          ┣L10N.pm
          ┗L10N
            ┣en_us.pm
            ┗ja.pm
  2. 解凍して得られた DateLangX フォルダごと、[MT]/plugins/ フォルダ内にコピー(アップロード)してください。

機能 - 日付の言語の拡張

インストールすると、ブログ記事設定(各ブログ→グランドナビの「設定」→「ブログ記事設定」、もしくは「設定」→「ブログの設定」→「ブログ記事設定」)の『日付の言語』に、いくつか項目が追加されます。
ver.0.1では、以下の2つが追加されます。

  • 英語(日付 '/' 区切り)
  • 日本語(日付 '/' 区切り)

例えば、『日本語(日付 '/' 区切り)』を選択し「保存」すると、以降ブログを再構築した場合、ブログの基本的な日付表記が「2008/12/02」のようなスラッシュ区切りになります。
(拙作「DateSlashedFilter」の代替として使用いただけます。)

現在分かっている問題点

このプラグインは、現在のところ、ダイナミックパブリッシングには対応しておりません。
よってダイナミックパブリッシング環境では、『日本語(日付 '/' 区切り)』に設定しても表示は日本語の通常の表示(例:2008年12月2日)になってしまいます。
これを解決するには、MTのコアライブラリになる MTUtil.php を直接弄ってして改造しないとなりません。
機会があれば、そのハック方法もご紹介したいと思います。
(なおこの問題は、MT3用のDateLangXでも同様です。)

更新履歴

2007/01/20
(for MT3 ver.0.1 公開)
  • 「英語(日付 '/' 区切り)」、「日本語(日付 '/' 区切り)」を提供
2008/12/02
for MT4 ver.0.1 公開 [New!]
  • MT4.x への対応完了。別アーカイブとして公開。

免責事項

Movable Type のユーザーは目的を問わず、このプラグインを無償で自由に利用することができます。著作権は Antimon2 が保持します。
このプラグインは無保証です。このプラグインの利用によるいかなる損害にも作者は一切の責任を負いません。




丸1年ぶりの更新です。。。

2010-04-18T12:11:19Z

業務多忙を言い訳にほぼ丸1年更新できませんでした。これから少しずつ更新を再開します。

業務多忙を言い訳にかなーり更新さぼってしまいました。
それに加え、業務ではJavaScriptがメインになってしまい、Movable Type からはしばらく遠ざかっていました。

いろいろあったのですけれど、これから、少しずつ更新を再開します。
表示がおかしいところも直していって、できればMTOS4.2xに移行していきたいな、と。。。

この1年で、MovableTypeはver.4.2xまでバージョンアップしたし、MooToolsは最近1.2.1にやはりバージョンアップ。
MooToolsは業務でも常に接しているので、ネタはあるし技術ノウハウもかなり溜まってます。
でも一方のMovableTypeの方は、実質MT4.01(今日時点でこのブログのMTのバージョン)を少しかじった程度で基本知識はMT3.3x止まり。

ただ、これから業務でMT4.22を触るので、MovableTypeの方も少しずつ時流に追いつけるかなー、と。

あと、ここだけの話(になるのか?)、会社の方で技術ブログを立ち上げる話も出ていたんです。
そうなったらそちらに移行するかも、という構想もあったのですが、話が進まないまま1年が経過しようとしているので、待つのはやめて行動を起こさないと、と思ったわけでして。

ということで、細々とした更新を続けていくことになると思われますが、これからもよろしくお願いします。




リニューアル(ほぼ)完了

2010-04-18T12:11:19Z

ブログのMT4化&デザイン変更(小粋空間テンプレートのカスタマイズ)が完了。

ブログをMT4化しました(やっとこさ)。
取り敢えずきちんと動作しているはずです。

デザインも変更しました。
今まで小粋空間テンプレートのMT3.2用をカスタマイズして使用していましたが、MT4用のものに差し替え、さらに少しカスタマイズして使用しています。

ただまだちょっと完全ではなく、一部のページが旧テンプレートで表示されてしまいます……。
少しずつ直していきますので、長い目(??_??)で見てやってください。
他にも、何か動作がおかしいところとかありましたらご指摘ください。