研究室

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

Ruby東海第15回勉強会

| コメント(0) | トラックバック(0)

昨日、第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]続・トップレベルに定義したメソッドと同名のメソッドをクラスで定義した場合

| コメント(0) | トラックバック(0)

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

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

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

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

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

ポイントは以下の通り:

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

第39回FLOSS桜山勉強会

| コメント(0) | トラックバック(0)

気がついたら丸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 生成機能で日本語を通す方法

| コメント(0) | トラックバック(0)

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

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

ハロー ワールド

普通に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)。

オリジナル404ページ公開

| コメント(0) | トラックバック(0)

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

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

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

第38回FLOSS桜山勉強会

| コメント(0) | トラックバック(0)

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

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

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

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

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

| コメント(0) | トラックバック(0)

ちょっとばかしハマったのでメモ。

トップレベルであるメソッドを定義します。
それと同名のメソッドをあるクラスでも定義します。
例えば、

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

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

...あ、もちろん、
「トップレベルで定義したメソッドと同名のメソッドを定義して、なんてそんな変な設計にしない」
というのが正解なのは分かっています。
仮に、あくまで仮に、そんな事態に陥った時の解決法は? ということですので。

動的にCSSを追加 append_css.js

| コメント(0) | トラックバック(0)

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

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

使用例

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

デモページ

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

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

| コメント(0) | トラックバック(0)

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識者)。

カテゴリ

月別 アーカイブ

OpenID対応しています OpenIDについて

最近のコメント

最近のブログ記事

アイテム

  • qr_hello_world.png

タグクラウド