スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

碧血剣 第十六集

 待っていたBOX2も届き、これでようやく生殺しから抜けられる(笑)というわけで、視聴を再開しました。DVD1巻ずつ感想を書いていると、あっとゆーまに見終わってしまいそうなので(^^; 1集ごとに書いていくことにします(笑)何気に凄い勢いでストーリーが進んでいる。

スポンサーサイト

悪魔の発明か(^^;

 以前に碧猫さんにコメント欄で教えてもらった昆虫型ロボットHEX BUGなんだが、どうやら日本限定で新しいカラーバリエーションが発売開始されるらしい。
 黒ってあんた……どんだけ……ああ、碧猫さんの手がぐーになってる(^^;
 製品紹介のページではムービーが観れるらしいぞ(笑)

WindowノートならThinkPadでしょう(笑)

 以前にMacBookAirについて書いたエントリーに、ジャバさんから、
これをwindowsマシンとして使ったら、マックな皆様およびスティーブ・ジョブ氏の逆鱗にふれてしまうのでしょうか?

こんなコメントをもらったのだが、さすがにあのマシンをWindows機として使うには無理がありすぎ、とお返事したのであった。
そんなことするならスナオに定評のあるLet's Noteあたりを選ぶの無難だよね~。

 しかし、前々から噂のあったレノボの薄型ThinkPadが発表になったのだが、これがまたAirとコンセプトがかぶること(^^; キーボードと画面サイズは妥協せずに、底面積が大きくなることは容認、その分薄くすることで軽量化を図る。インターフェースは厳選して極力シンプルに。そのかわり無線関係は充実させる。
 外面を見ると、いかにもThinkPad以外の何ものでもないんだが、大本に流れている設計思想は良く似ているように思う。もっともこちらはAirほど極端なわけじゃなく、ちゃんと有線のLANも繋がるし、USBも三つあるし、光学ドライブも内蔵だし、バッテリーも増量できるようだ。どっちが使いやすいかっつたら、こっちのThinkPadだろうなぁ(^^; いや、まあ、OSがWindowsということで、私にとっては始めから対象外なのではあるが(^^; あと裏返した時に美しくないのは受け付けなくなっちゃたしな。

 で、これを開発したのは大和研。以前からのマックユーザーだったら覚えているかもしれないが、あの日本で人気のあったPowerBook2400を開発したところだ。 そう聞くと納得できるところ。IBMからレノボに変わったあとも、技術は受け継がれていたってことなんだろう。

 しかし、用意されているのがSSDモデルだけって……、やっぱりちょっと極端なノートではあるな。

大旗英雄伝/温黛黛

 ドラマとしての出来はちょっと(ちょっと?)どうかという大旗英雄伝であったが、それでも最後まで見続けられたのは、やはりこのお姐さんのおかげだったような気がする。

ぬくもりも知らない/みを

 このあいだライブに行ってきたみをさんの曲。ライブでも歌っていた曲で、そのときにCDを買ってきたのである。CDに収録されている方は、ライブで演ったものよりもポップなアレンジになってる。私としてはCDの曲調の方が泣けるように思う。明るく歌えてしまう方が悲しいというか。
枕元のオルゴールをくれた幼い面影
旅立って行くあなたの笑顔 すっかり大人だったね

ねぇ あなたの背中を
あんなにしっかり見たことなかった


 このあたり最初に聴いた時には、”お母さんの唄?”と思ってしまったのだが、そういうわけじゃなくて。同い歳くらいの幼なじみだったら、そんな感じにもなってしまうのかな。男の子よりも女の子の方が成熟するのは早いし。もっとも、そういう間柄の相手というのはいなかったので、想像で書いてますけれど(笑)

 ずっと一緒に歩いていたと思ってたのに、気がついたら別々だった。それは淋しいけど、仕方のないことでもある。

作詞/作曲:みを

謝ることで得られる誇りもある

 もう既に旧聞になってしまったのであるが、オーストラリア政府が先住民に対して公式に謝罪を行なったというニュースを知った。率直に言って羨ましい。彼らは己れの暗部から目をそらすことなく向き合い、誠実に相手に謝罪する道を選んだのだ。
 もちろん、簡単に実現したわけではないだろうし、今でも納得できていない人というのもいるというのは、こちらのエントリーからも伺える。だとしても、謝罪を公約に上げた政権を国民が支持したことには代わりが無いわけだ。そしてこちらのエントリーを見れば、謝罪によって得られる誇りもあると信じられる。彼らは自分たちの手で成し遂げたんだ。
 
 自虐史観などと名付けて、自国の暗部から目をそらし続けることで手に入る、安っぽい誇りを与えられて、満足してる連中には縁のないものだろうな。
 まあ、これで少なくともオーストラリアから慰安婦謝罪要求決議とか喰らったら、いつもの手段である道徳的相殺は使えないよね。「俺達はちゃんと謝罪したぜ」と言われておしまい。

RubyCocoaでアニメーション:もっとRubyらしく

 前にもちょっと書いたけれど、RubyCocoaのバージョンが上がって、CocoaのオブジェクトをRubyの様に使えるようになったり、RubyのオブジェクトをCocoaで使えるようにするのが簡単になったりした。
 そしてこの新しいバージョンのRubyCocoaはこの間のOSアップデート(10.5.2)には含まれているそうだ。

 ということで、早速使ってみた。まずは、簡単なところから。awakeFromNIbでフィルターに値を設定している箇所である。
filter = OSX::CIFilter.filterWithName_('CIBloom')
filter.setDefaults
filter.setValue_forKey_((0.0).to_ns, 'inputIntensity')
filter.setValue_forKey_((5.0).to_ns, 'inputRadius')
filter.setName_('plusFilter')

今まではsetValueの時にはNSNumberオブジェクトに変換するために
OSX::NSNumber.numberWithFloat_(0.0)

と書いてやらなければならなかったのだが、これが
(0.0).to_ns

と数字の後ろに".to_ns"と書けば良くなった。こういう書き方は、数値でも何でもオブジェクトになっているRubyならではだね。

このto_nsはかなり強力で、Rubyの配列をCocoaのNSArrayに変えることもできる。だからこの後で、filterの配列をレイヤーにセットするところでも
filterArray = [filter,filter2]
transitionLayer.setFilters_(filterArray.to_ns)

とこのように、Rubyの配列として作ってあげて、プロパティに設定するときに最後に".to_ns"をつけて変換してやればいい。

また、これとは逆にCocoaのNSArrayやNSDisctionaryをRubyの配列やハッシュのように使うこともできる。だから、doAnimationでレイヤーを取ってくるコードは今までは、
layer = @view.layer.sublayers.objectAtIndex_(0)

と書いていたところ、
layer = @view.layer.sublayers[0]

と書ける。またchangeContentsでアクションを登録していた場所では、
layerActions = OSX::NSMutableDictionary.alloc.init
layerActions.setObject_forKey_(transition,'contents')


layerActions = OSX::NSMutableDictionary.alloc.init
layerActions['contents'] = transition

と書けるようになった。

これは、単純に書かなければいけないコードが少なくなったというのもあるけれど、それよりも、よく似た概念なのに、アクセスするために全然別のコードを書かなくても良くなったという方が大きい。結構こういうのってストレス溜まるんだよね。間違いも起きやすいし。

4年目突入

exciteでブログを書き始め、去年の夏ごろにFC2に移行してきたわけですが。旧館のNon-Fictionブログを書き始めてから、今日で丸三年になります。これが781本目。だいたい三日に二本の割合で記事書いてる計算になるという。思えば良く書いたなぁ。中にはしょうもないのもあるとはいえ。(しょうもないのばっかりじゃねえか、というのは聞こえません(笑))

目標だったPSY・S全曲レビューは達成しましたけれど、まだ書きたい事はあるので、よろしくお付き合いくださいませ。

全曲制覇

ブログを始めた当初の目標だった、PSY・S全曲レビュー。まる三年かかってようやく達成しました。
二年くらいあれば全部いくかな~、とか思っていたんだけどね。残りが少なくなるにつれてペースが落ちていったというパターンでしたな。

最後をLotus->Seedsにする、というのは最初のころからのもくろみだったのだが、そこに到達するまでが長かった。

PSY・Sネタがこれでおしまい、ということにはならないのだけどね。

Seeds/PSY・S

 解散の時に出したベストアルバム「Two Bridges」で最後の曲だったのが、このSeedsである。そんなことからも、これがPSY・Sとしてのファンへの最後のメッセージだったのかな、なんて思っている。この曲はバラード調で始まるのだけど、途中で急に激しいラップに変化する。これがなかなかカッコいい。しかし、これに関しては本当に凄いのはライブで演った時のである。残念な事に、このときのライブはビデオが発売されていないので、本当に記憶に焼き付けておくしかなかった一回こっきりのものだ。
If you can trust yourself strong enough to go on
You will someday make your wishes come true
No need to cry
Don't be afraid of tomorrows

この曲が発表されたのは解散する一年以上前だけど、こうして見ると、もうこのときにはそのつもりだったんだろうなぁ。なんてことを改めて思<った。

作詞:CHAKA
作・編曲:松浦雅也
アルバム
Emotional Engine
Two Bridges

Lotus/PSY・S

 彼らの最後のオリジナルアルバムである「Emotional Engine」には二曲のインスト曲が収録されている。そのうちの一曲「sign」の方は、独特の緊張感がある曲で、「be with you」と「魔法のひとみ」の二つのイメージをつなぐ役だった。
 こちらは、アルバムのラスト。優しいような寂しいような、落ち着いた感じの曲である。それは、”最後のオリジナルアルバムのラストの曲”ということから感じさせられる事なのか、それとも、もとからこういうイメージの曲だったのか、今となってはどっちだがわからなくなっているのだが。
 でも、私にとっては、すごく楽しい遊びが終わって、家に帰るときが来ました、って曲なんだよね。(<ー下校の音楽みたいだが)

作・編曲:松浦雅也
アルバム:
Emotional Engine

笑傲江湖 人物伝/緑竹翁

 やはり再放送を見て書いてないことに気がついたステキ爺。ドラマ版では頭の上の植木鉢がチャーミングな御方である。

RubyCocoa 0.13.0

リリースされていたことに今更気づいたorz
この版の改修って結構大きい。特に
•NSArray、NSDictionary が Ruby の Array、Hash のように扱えるようになった。
とか
•Ruby の値クラスを to_ns で Cocoa クラスに変換できるようになった。
とかは、NSArrayやNSDictionaryの出番が多いCoreAnimationを使うとなると重宝しそう。やっぱりこの辺のコレクションクラスはRubyの方が強力だからね。今までのコードは基本的にObjective-Cの部分を文法的にRubyに代えただけだったから、いまいちRubyCocoaでやる利点が見えない
ところがあったんだが、これで少し変わるかも。
つうか、もうちょっとRubyのことも勉強しないとダメなんだが(^^;

断仇谷/海令山

武侠ドラマもいろいろと見て行くうちに、顔なじみの役者さんとかも増えてくる。この海令山の中の人である計春華氏も、あちこちでお姿を見かけ、その独特の風貌から一度見たら忘れられない印象を残してくれるわけだが(血刀老祖様とか)、さてその彼が演じた海令山というのはどのようなキャラクターだったかと言うと……

以下、激しいネタバレを含みます。

いいかげん自分が無教養なのを曝して悦に入るのはやめてくれや

 もうすでにあっちでも、こっちでも、そっちでも、いろんなところでフルボッコにされてるんで、わざわざ新しくエントリーを立てるのもなんだなあ、とか思っているこの産経新聞の記事の件。
 私としてはDoX弟の大人を信じないでくださいってので、もうこの花岡という人の目茶苦茶さは、どんなに頭のユルイ人でも分かると思うのだが、どうも問題だと思ってない人が結構いるみたいで、頭が痛いのである。
 前回もまるっきりおんなじ事があって、おんなじようなことを言う奴がいて、そして援護してる奴のセリフも全く同じだったりした。要するにこんな奴。

2008年02月13日 E_You141 事件, はぁ? 元記事には何の違和感も感じないのだが何か?「立入禁止の場所に入らない」、「知らない人に付いて行かない」って、ごくごく真っ当なしつけでしょ。米兵が悪いのは大前提で、被害者の落ち度がゼロとは言いがたい。


これは先にリンクを上げた、
産経・花岡信昭氏の「鬼畜」っぷりがひどい

これについたブックマークコメントである。で、私もこれにブクマしたんだが、たとえその”しつけ”とやらがどんなに一般論として正しかったとしても、この文脈で書いてしまえばそれは被害者に対するセカンドレイプにしかならない。
もうこんなの当たり前すぎ、教科書に載せたいくらいの典型的な例なんだが、そのくらいのことは教養として知ってないといけない。

これがセカンドレイプである証拠ことは、まさに上にあげたエントリーに付いたこのコメントが証拠証明しているだろう。
んんー 2008/02/13 13:30
なんの違和感もないな。

こんなDQNガキのネタでも、
左翼がいやっほおおおおぅ!と元気になってるのが笑えるだけ。

いいかげん、こういう無教養を曝すのはやめてくれよ。読んでる方が恥ずかしいからさ。

-追記- 読み返して文章が変だったところを修正
-追記その2-
 見たら、私が引用したブクマコメントが消えている。もしかして、無教養で頭のユルいコメントを恥じて、消してくれたのだろうか? E_You141さん、よければ連絡ください。そういうことなら引用部分は消します。

Ready For Your Love/PSY・S

 ラブソングにも”攻め”と”受け”があると思う。もっとも、まるっきり二つに分けられるわけでも無くて、一曲の中でもどっちの要素もあるものが大半だろうけれど、この曲は完全に”攻め”の方だろう。強力なベースとドラムに乗せて、かなり強気の歌詞が続く。で、私はどっちが好きかと言われれば、攻めの方なのである。自分に無い方を求めるというか(^^;
迷ってなんかいたら
音をたてて こわれてく
ハイ・スピード ラブ・アフェア
いつだって準備OK!

守ることなんか考えないで、ひたすら前に出てゆく感じ。とにかく押しの一手。

……そして、アルバムだとこの曲の後に更に強力な”Brand-New Menu"が続くのであった。

作詞:安則まみ
作・編曲:松浦雅也
アルバム
「PIC-NIC」

RubyCocoaでアニメーション:レイヤーの階層構造を作る

 昨日うまくいかなかった移動しながらの画像の押し出し効果だが、今日提供されたOSのアップデータをかけてもそのままであった(^^; しかたがないので、なんとかうまく表示できないか、考えてみることにする。
 動きをよく見ると、どうも移動途中のレイヤーの座標がうまくとれていなくて、押し出される側の画像を、レイヤーが最初にいた位置に表示してしまっているようである。
 そこで、画像を表示してるレイヤーの親レイヤーを作って、移動のアニメーションはそちらで行なうようにする。そうすると、画像を切り替えている方のレイヤーは全く動いていないことになるので、表示する位置がずれるということはなくなるはずだ。図で表わすと、こんな感じになる。
sublayer.png

 では、コードを書いて行こう。まず、awakeFromNibで表示するレイヤーを背景レイヤーに入れている箇所
backgroundLayer.addSublayer_(layer)

を消して、以下のように書き換える。
transitionLayer =OSX::CALayer.layer()
transitionLayer.frame = layer.frame
transitionLayer.addSublayer_(layer)
transitionLayer.masksToBounds=true
backgroundLayer.addSublayer_(transitionLayer)

このコードでは、新しくtransitionLayerを作り、その中に、いままでのレイヤーをaddSublayerで加えている。そして背景レイヤーには新しく作ったtransitionLayerの方を入れているのだ。

 続いて、画像切り替えのcangeContentsの方にも手を入れよう。contentsの中身を入れ替えるレイヤーは一つ階層が深くなっているのだから、最初にレイヤーを取得するコードを
layer = @view.layer.sublayers.objectAtIndex_(0)

から
transitionLayer = @view.layer.sublayers.objectAtIndex_(0)
layer=transitionLayer.sublayers.objectAtIndex_(0)

に変更する。

 これで、アニメーションしながら押し出しの効果を実行しても、おかしな表示にはならないはずだ。

 しかし、移動のアニメーションはちゃんと動作するものの、フィルターのアニメーションが動かなくなっている。アニメーションがtransitionLayerの方についているが、フィルターはもとのlayerの方についているため、フィルターのアニメーションが利かなくなっているのだ。
 そこで、awakeFromNibでfilterをつけるレイヤーをtransitionLayerの方に変えてやる。
layer.setFilters_(filterArray)


transitionLayer.setFilters_(filterArray)

こうかえるわけだ。

これで、思った通りの動きをするようなっているはずだ。

RubyCocoaでアニメーション:表示している画像を入れ替える

 今度は、表示している画像を入れ替えてみよう。そのためには、レイヤーのcontents属性を変えてやればいい。新しくchangeボタンを追加して、このボタンがクリックされたら別の画像に変化するようにしてみる。
まずは、AppController.rbにインターフェースとなるib_actionを宣言する。

ib_action :changeContents

 ここでAppController.rbを保存し、MainMenu.nibをダブルクリックしてインターフェースビルダーで、画面にchangeボタンを配置し、AppController.rbとの間にコネクションを貼る。ここまで終わったら、再びXCodeに戻って、changeContentsに以下のコードを記述する。

def changeContents
bitmapImage = OSX::NSBitmapImageRep.imageRepWithContentsOfFile_(
'/Users/takayukiu/Documents/P1000342.jpg')
image = bitmapImage.CGImage()
layer = @view.layer.sublayers.objectAtIndex_(0)
layer.contents=image
end

 見れば分かる通り、単純に別のファイルから新しいimageを作ってレイヤーのcontents属性に代入しているだけである。これでchangeボタンを押せば画像が新しいものに入れ替わる。フィルターの効果もそのまま残っているのが分かるはずだ。
 で、フィルターがあるから若干分かりづらいのだが、切り替わるときに短い時間だがフェードの効果がかかっている。実はこのcontents切り替わり時の効果もプログラムで変更することが出来る。これにはアクションという機能を利用する。詳細な説明は例によってアップルのドキュメントを参照して欲しい。
Core Animationプログラミングガイド;アクション
 いまいち分かりにくいかもしれないが、簡単に言ってしまうと、何かレイヤーの属性を変化させるような操作を行ったときに、自動的に発動するプログラムを登録しておくことが出来るしくみ、と言えばいいのだろうか。今回は、この機能を使って自分で定義した切り替え効果を実行する。

 まずは、使用する切り替え効果を作成する。これはトランジションアニメーションと呼ばれている。詳しい説明はリンク先を読んでもらうとして、さっそく使ってみよう。先ほど作成したchangeContentsで、レイヤーのcontentsにimageを代入している文の直前に、以下のコードを追加する。
transition = OSX::CATransition.alloc.init
transition.duration = 1.5
transition.type =OSX::KCATransitionPush
transition.subtype = OSX::KCATransitionFromRight

 これは、1.5秒かけてふるい画像を新しい画像が右から押し出して行く、という効果になる。次にこれをレイヤーのcontentsが変化したときのアクションとして登録する。
layerActions = OSX::NSMutableDictionary.alloc.init
layerActions.setObject_forKey_(transition,'contents')
layer.actions=layerActions

 これでビルドして実行し、changeボタンをクリックすると、画像が押し出されながら切り替わるようになるはずだ。

……ところが、これでめでたしめでたしとはならないのが厄介なところ。止まっているときにはこれでOKなのだが、アニメーションしている最中にchangeボタンをクリックするとおかしな動きをしてしまう。どうもOS側のバグのようなのだが……。

サブリミナル効果?

 なんか、ここんところしょっちゅう話題になっているおかげで、無性に餃子が食いたくなった今日この頃(笑)、みなさまいかがお過ごしでしょうか?
 というわけで、今日の晩飯は餃子でした。調子に乗って四十個近く作ってしまったために、明日もあさっても餃子です(^^; まあ、うちの餃子にはニラもニンニクも入ってないから、連日食べても息が臭くなって困る、とかはないのですが……。

 餃子と言えば、近所の中華料理屋で出す奴がかなりうまくてファンなのだけど(なんか中国の調理師の免許を持っているらしい)、さすがにその味には及ばないなぁ(<ーあたりまえです)。つうか、毎回味が安定しないのはどうにかならんのか(笑)

 ……写真を撮りわすれたので、食い意地テロが出来ないのが残念です。

RubyCocoaでアニメーション:レイヤーにフィルタを適用する

 CoreAnimationには、アニメーション以外にも強力な機能がある。前回の最後にリンクを貼ったドキュメントにも記載があったのだが、レイヤーに対してはCore Imageのフィルタが適用できるのだ。
 と、いきなり言われてもピンと来ないかもしれない。とりあえず実際に試して見よう。画像をセピア調に換えるフィルターを使ってみることにする。そのためにはAppController.rbのawakeFromNibに、以下のコードを追加する。 
filter = OSX::CIFilter.filterWithName_('CISepiaTone')
filter.setDefaults
filter.setName_('sepiaFilter')
layer.setFilters_(OSX::NSArray.arrayWithObject_(filter))

 これでビルドして実行すると、画像がセピア調になる。このようにCIFilterを作成して、レイヤーのfilters属性に設定してやるだけで、画像にフィルターがかかるのだ。このフィルター、OSで用意されているものだけでもかなり多い。さらに、自分で新しいフィルターを作ることもできるし、サードパーティが作成したフィルターがインストールされているなら、それを使うこともできる。
OSにあらかじめ用意されているフィルターの一覧は、下のページから見ることができる。
Core Image プログラミングガイド:Core Image フィルタ

 ところで、この属性がfiltersとなっていることに気がついただろうか? 引数として配列を渡すようになっていることからも分かるかもしれないが、複数のフィルターを設定することができる。セピア調にしながら、ブルームフィルターをかける、なんてことも可能なのだ。さらに適用したフィルターのパラメータにアニメーションを設定してやると、フィルターの効果を時間によって変化させることができる。

 実際に試してみよう。先ほどのコードで、レイヤーにフィルターを設定していた、
layer.setFilters_(OSX::NSArray.arrayWithObject_(filter))

の部分を消して、以下のように書き換える。
# ブルームフィルターを作成する
filter2 = OSX::CIFilter.filterWithName_('CIBloom')
filter2.setDefaults
filter2.setValue_forKey_(OSX::NSNumber.numberWithFloat_(0.0), 'inputIntensity')
filter2.setValue_forKey_(OSX::NSNumber.numberWithFloat_(5.0), 'inputRadius')
filter2.setName_('bloomFilter')
# セピア調フィルタとブルームフィルターを配列にして、レイヤーに設定
filterArray = OSX::NSMutableArray.arrayWithObject_(filter)
filterArray.addObject_(filter2)
layer.setFilters_(filterArray)

これで、二つのフィルターがレイヤーに適用されるようになる。(ただし、この時点ではブルームフィルターのinputIntensityが0なので、セピア調フィルターの効果しか現われていない)

 続いて、フィルターのアニメーションをさせるために、doAnimationに以下のコードを書き加える
pluseAnimation = OSX::CABasicAnimation.animation
pluseAnimation.keyPath='filters.bloomFilter.inputIntensity'
pluseAnimation.fromValue = OSX::NSNumber.numberWithFloat_(0.0)
pluseAnimation.toValue = OSX::NSNumber.numberWithFloat_(1.5)
pluseAnimation.duration = 1.0
pluseAnimation.repeatCount = 1e100
pluseAnimation.autoreverses = true
layer.addAnimation_forKey_(pluseAnimation,'bloom')

 ここでは二行目のkeyPathに注目して欲しい。
'filters.bloomFilter.inputIntensity'とある。これはawakeFromNibでフィルターを作成したときに、
filter2.setName_('bloomFilter')

と書いて付けた名前を使って、どのフィルターにアクセスするかを指定している。当然、セピア調フィルターのパラメータを変化させようと思ったらこの部分は'filters.sepiaFilter.xxxx~'となるわけだ。

 これでビルドして実行すると、画像がセピア調になったまま、輝きを増したり減じたりという表示になるはずだ。もちろん、移動のアニメーションはそのままである。

RubyCocoaでアニメーション:自分でアニメーションを設定する

前回やった方法で、一応アニメーションさせることはできたが、実際に自分のプログラムで使おうと思ったら、スピードを変えたり、何回も繰り返したりとか細かい制御をしたいことが多くなるだろう。
そんな場合は、自分でアニメーションオブジェクトを作ってアニメーションさせたいレイヤーに加えてやればいい。

そのために、前回作成したプログラムのdoAnimationを次のように変更する。
def doAnimation(sender)
layer = @view.layer.sublayers.objectAtIndex_(0)
# アニメーションを作成する
theAnimation = OSX::CABasicAnimation.animation
theAnimation.keyPath='position'
theAnimation.duration=5.0
theAnimation.toValue = OSX::NSValue.valueWithPoint_(
OSX::NSPointFromCGPoint(OSX::CGPointMake(400,300)))
# 作成したアニメーションをレイヤーに追加する
layer.addAnimation_forKey_(theAnimation,'move')

end


アニメーションさせるレイヤーを変数layerに代入するところまでは前回と同じ。その後で、theAnimationという名前でアニメーションオブジェクトを作成する。そしてkeyPathにアニメーションさせたいlayerの属性(この場合は、レイヤーの位置=position)を入れる。durationには再生時間を、toValueには最後の値(この場合は目的地の座標)を入れる。
ここで注意しないといけないことは、アニメーションオブジェクトのtoValueに入れる値はNSValueというオブジェクトにする必要があるということだ。前回のコードと同じ感じで、
theAnimation.toValue =OSX::CGPoitnMake(400,300)

と書いてしまうとエラーになってしまう。

ここまでできたら、またビルドして動かして見よう。ゆっくり時間をかけて画像が左下から右上に動くはずだ。さらに、theAnimationにいろいろと値を設定することで、アニメーションの動きを変更することができる。例えば同じ動きを繰り返す場合は、
theAnimation.repeatCount=3

とrepaatCountに回数を代入する。また、動いた後に元の位置にアニメーションしながら戻ってくるようにするには、
theAnimation.autorevers=true

と指定する。また、timingFunctionを指定すると、アニメーションの加速/減速を指定することもできる。以下は、加速と減速を指定した場合である。この設定を追加すると、動き始めはゆっくりで次第に加速し、停止するときに再び減速するアニメーションが表示できる。
theAnimation.timingFunction =
OSX::CAMediaTimingFunction.functionWithName_(
OSX::KCAMediaTimingFunctionEaseInEaseOut)

 このとき、ひとつ注意しておくことがある。
OSX::KCAMediaTimingFunctionEaseInEaseOutというのは、CoreAnimationが用意している定数なのだが、Objective-CではkCAMediaTimingFunctionEaseInEaseOutと先頭は小文字で定義されている。だが、Rubyの言語仕様では、定数は先頭一文字が大文字にしないとならない。そして、XCodeでコード補完機能を使っていると、小文字で書かれてしまい、そのまま実行するとそこでエラーになってしまう。私はこれでずいぶん悩んだ(^^;

 今回と前回は位置の移動をアニメーションしてみたが、CoreAnimationでできるのはこれだけじゃない。例えば透明度を変化させたい場合は、

theAnimation.keyPath='opacity'
theAnimation.duration=5.0
theAnimation.toValue = OSX::NSNumber.numberWithFloat(0.5)

とkeyPathに'opacity'を入れてやり、toValueに変化させたい値を入れればよい。

 アニメーションできる属性にどんなものがあり、それぞれどんな意味をもっているかはアップルの次のドキュメントを参照するといい。

Core Animationプログラミングガイド: アニメーション化可能プロパティ
Core Animationプログラミングガイド: レイヤスタイルプロパティ

公とpublic

 プログラマー、それもC++とかJavaのプログラマーであればおなじみの概念にpublicとprivateというものがある。これ、簡単に言ってしまうと、外側から見たり操作したりできる部分と、内側からしか見たり操作したりできない部分の区分ということになる。
 どんな単位でもいいのだが、例えばプログラムという一個の単位を考えたときに、他のプログラムが値を見たり、操作したりできる部分をpublic、そのプログラムの中でしか見ることのできない部分をprivateと呼んでいる。図にするとこんな感じ。
Public_Private.png

 大切なことは、あくまでも主体となるのはそれぞれの個体であって、その中にpublicな部分とprivateな部分が存在するというイメージであろう。
 思うに、これが英語のpublicとprivateと単語の意味するところなんじゃないかな。

 ところで、publicとprivateというのは日本語に翻訳すると”公”と”私”になるわけだが、こうすると上記の意味とは違った印象を受ける。個人である私の周りを公が取り巻いているイメージが湧くんだが、どうだろうか? 図にするとこんな感じ。
koushi.png

 この二つを比べて見れば、pravateはpublicとは離れて、むしろ外側にあるのに対して、”私”は”公”の中に含まれる。概念としては全く異なるものであろう。

 例えば、gegengaさんのところで知った八木氏のこんな文章も、"public/private"よりは、日本語の"公/私"のイメージで考えた方が良さそうな気がする。そういえば、”最も大きな公”とかいう言い方は”public-privateモデル"ではなく”公/私モデル”で考える方が分かりやすい。”家族的情愛で統治”なんてのは、pubilicとは最も遠いところにありそうだが、この外側の公の部分がどんどん大きくなって行くことをイメージすれば矛盾は無いのだろう。

 ”公/私モデル”が危うく見えるのは、システムの外側を想定できていないことだと思う。公の部分を広げてシステムに取り込むことでしか秩序を保てないと考えてしまうところにあるのではないかと。”八紘一宇”の精神が、結果として侵略戦争という結果を招いたのも、そのせいではないかと思うのだが。

RubyCocoaでアニメーション:最初のアニメーションプログラム

長いので、本文は続きを読むで

RubyCocoaでアニメーション

 今年に入ってからちょっとずつCoreAnimationをいじっていたのだが、PyObjCでCoreAnimation入門というのを見て、Rubyからも使えそうだということがわかり、ちょうどRubyCocoaにも手を出そうかと考えていたところなので、試して見た。

 とりあえず、RubyCocoaに関してはチュートリアルを見て、だいたいの雰囲気を掴むことに成功。そして、CoreAnimationについては、木下さんの解説記事を見ながら、同じような感じでやってみたら、割と簡単に動いた。ここまでは、ある程度MacやRubyでコード書いたことがあれば、到達できるんじゃないかな。
 というわけで、ドキュメント読みながら、いろいろ試行錯誤中。明日あたりから、エントリーに上げて行きます。もうちっと早めにやるはずだったんだがな(^^;

ダブル・ダブル/PSY・S

 この曲を聴くとライブビデオの鏡の演出を思い出す。確かこの曲が収録されているホリディというアルバムでは、ライブメンバーにDATを渡して、個人で録音してもらったフレーズをあちこちに使っているのだが、この曲では間奏と終わりに流れるピアノがそれである。これが軽やかで、とても楽しい。
everyday ふたりが ふたりでいるように
待っててね いますぐ 大好きと あなたに言える

 曲調も歌詞も弾むように幸せで、同じようにふたりでいるのでもどうして?あたりとはずいぶん違う。
 
作詞:松尾由紀夫
作・編曲;松浦雅也
アルバム:
ホリディ

あこがれの食堂車

 久しぶりに新幹線で出張になり、帰りは夕方から夜にかけて新幹線車内ですごすことになった。というわけで、昨日の夕食は駅弁を買って列車の中でとったわけだが、そういや昔、食堂車付きの新幹線があったよなぁ、なんてことを思い出していた。
 子供のころ、というか結構大きくなるまで食堂車ってあこがれだったんだよね。洋画なんかで列車の中で食事を取っているところを見ると、なんか豪華な感じがするじゃない? でもそれだけの長距離を列車移動する機会ってなかなか無くて(両親とも地元民だったので、帰省とかしなかったし)、あったとしても、食堂車を利用するようなリッチな旅行なんてしなかった。
 で、大人になってからなんだが、やっぱり割高な食堂車に行くくらいだったら、駅弁買って、席で食べた方がいいってことに落ち着いちゃうわけだが(笑) それでも一度、ひかりの食堂車が無くなる前に一回だけ食べに行った事がある。もうそのころはグランドひかりの一部にしか無かったんだが、わざわざ食堂車のあるやつにしたような記憶が(笑) でも何食べたんだっけかな? やっぱり割高だったことだけは覚えてる。そして、客もほとんどいなかった(^^; なくなってしまうのも無理はないか。どうやらヨーロッパあたりでも食堂車は減少傾向にあるみたいで、少し残念ではある。それでもイタリア・スペイン・スイスはがんばっているようだ。

 今だと、日本国内じゃ長距離夜行列車のごく一部にあるだけで、やっぱり利用するのはかなりの贅沢になってしまうなぁ。こういうのって、かなり長い時間乗っているような路線じゃないと、無理だよね確かに。

雪の中、空気をつかみに

 銀座まで行ってきた。わざわざ雪の日にでかけたのは、その方がすいてそうだったから……というのは嘘で、昨日行ってこようと思っていたのだけど、二日酔いぎみで出るのが面倒だったのである(笑) あ、空気ってこれのことね。

 感想は、やっぱり薄い。そして、結構しっかりしている感じ。剛性があるので、鞄に入れて通勤電車に乗ってもそんなに不安はないかな。たぶん、これが無理なら普通のMac Book Proとかも無理だろう。そのぶん、見た目よりは重さを感じる。もちろん他のに比べれば軽いんだが、それなりの手応えはあるぞと。

 動作に関しては、そんなに長いことは触れなかったのだが、普通に文章を打ったりとかには特に問題なさそう。もっともこれは、ちかごろのPCだったら当たり前だけどね。重いソフトは試さなかった。GarageBandでソフトシンセのトラック増やして動かすと、性能差が良くわかるんだけど、どう考えてもそういう人はターゲットじゃないよな(^^;

 見た感じを一言で表現するなら、「優雅」だろうか? Mac BookやMac Book Proもデザイン的にすっきりまとまっていて、いいのだが、Airはその上を行く。正直、Mac Book Proが少し野暮ったく見えた。
 

霧の中の独行船

 何の本だったか忘れてしまったし、もうだいぶ以前になるのだけれど、こんな一節を読んだことがある。今の生物種というのは、もともとは同じ祖先ではあったのだけど、進化の枝分かれから長い時間が経過し、お互いに全く異なる生物になってしまった。まるで、同じ港を出た船が、それぞれの航海の果てに、お互い姿も見えないくらいに遠く離れているように、と、確かこんな話。それ以来、私の中で人類と言うのは、霧の中、僚船もなくただ一隻航海を続けている船のイメージになってしまった。

 確かに、同じ人間相手でさえ、分かりあうのは難しい。ましてや生物種まで異なっていては、相手がどのように世界を認識しているのか、どんな”感情”を持っているのかということを、完全に”理解”することは絶望的なのかもしれない。

 だが、そんな連中との間に、確かに友情と呼べるような関係が持てるのはどうしてなんだろう? これは、ヒトの側で一方的に思い込んでいるだけ、なんてことでは無いということは、一度でも他の動物を友としたことがあるなら「違う」と言えるんじゃないだろうか。単純に、餌をくれる人、とか、面倒を見てくれる相手、とかとはまた違うんだよね。

 相手の姿は見えなくても、霧笛は届く。そう、少しは寂しさも薄れるのかもしれない。

笑傲江湖 人物伝/風清陽

 チャンネルNECOの昨日の放送で、この御方の姿を堪能された方も多いのではないだろうか? 崋山剣術派の大師叔、風清陽前輩である。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。