2013-04-24
「継承した定義 ***(名前空間 public)にコンフリクトが存在します」理由
FlashProfessionalプロジェクトとして、AS3プログラミングをしていると、なんかサラッと生じるエラーの代表格がこれなんじゃないかと思うくらい、俺がAS組むとこのエラーにぶち当たるんですが、案外具体的な情報がなくていつも困っていたわけだけれども、いろいろ実験してみたところ、なんとなく原因がわかったので、ブログる。
参考資料
実際に表題のエラーがでるソースコードをおいておくので、cloneしてくだしあ。
https://github.com/kkotaro0111/FlashProf_Conflict_Error
withErrorブランチが、上記エラーが生じる状態、
createClassBブランチが、それが修正された状態その1。
wrapClassブランチが、それが修正された状態その2。
状況
FlashProfessionalのステージ上に、オブジェクトB、Cがある。
オブジェクトBは、FlashProfessionalのライブラリ内でリンゲージを設定されており、クラスとして"classB"を、基本クラスとして"classA"を設定してある。
オブジェクトCは、classC.asという外部ASファイルがあり、その中で"extends classA"つまりクラスAの派生クラスとして宣言されている。FlashProfessional上では、同様にリンゲージされているが、外部ASファイルがあるので、基本クラスが設定されていない(外部ASファイルに設定が移譲されている)。
オブジェクトAは存在しないが、"classA.as"として外部ASファイルが存在しており、オブジェクトBおよびCの親クラスとなっている(はず)。一応、MovieClipから派生している。
オブジェクトBおよびCは、そのMovieClip内にそれぞれ、"share"というインスタンス名を持つオブジェクトが配置されている。つまり、オブジェクトBもCも"this.share"でアクセスできるインスタンスを持っている。
この状態で、コンパイルすると、表題のようなエラーが吐き出される。
この場合、"1152: 継承した定義 classA.share (名前空間 public) にコンフリクトが存在します。"と表示される。
原因
オブジェクトC側で、インスタンス"share"が多重宣言されたことになっているのが原因。
普通に考えたら、オブジェクトBはclassBに関連付けられており、オブジェクトCはclassCに関連付けられているように感じる。確かに、オブジェクトCの方はインスタンス"share"をclassCのインスタンスとして自動宣言されており、その挙動には違和感がない。
ただ、外部ASファイルを作らなかったオブジェクトB(classB)が問題で、コンパイラ的にはclassBというクラスは存在しないことになっているようだ。さしずめ、"var classB:classA = new classA();"として作られた感じだろうか。そのため、オブジェクトB側のインスタンス"share"は、【classAのインスタンスとして自動宣言される】わけだ。コンパイラはこの事実から、【classAは"share"というインスタンスを持つ】と認識する。しかもpublic。
さて、classCはclassAの派生クラスである。つまり、classCは特に"share"というインスタンスを宣言しなくても、"share"インスタンスを持っていることになり、それにアクセスできることになる。しかし、先にあげたように、classCはclassCで独自に"share"が宣言される。そのため、ここで多重宣言が生じ、コンフリクトが起きるわけだ。
解決策
1つは、"classB.as"というファイルを作り、リンゲージの設定で関連付けさせる方法だ(createClassBブランチ)。classB.asがあれば、オブジェクトBは"new classB();"として宣言され、インスタンス"share"もclassBのインスタンスとして宣言される。(おそらく)classAはインスタンス"share"の存在を知ることはない。ただし、この方法では、classAを基本クラスに持つオブジェクトが100個あった場合、外部ASファイルを100個作らなければいけない。大変だ。その場合の解決策がもう一つ方法である。
もう1つは"外部ASファイルを持たないオブジェクトの基本クラスに設定するためのラップクラス"を外部ASファイルで宣言する(wrapClassブランチ)。この場合、例えば"public class WrapClassA extends classA"なクラスを外部ASファイルとして作っておき、オブジェクトBのリンゲージ設定の「基本クラス」に"WrapClassA"を設定する。こうしておくと、オブジェクトCの"share"インスタンスは"classCのインスタンス"として、オブジェクトBの"share"インスタンスは"WrapClassA"のインスタンスとして宣言されるので、classAには影響が及ばなくなるため、オブジェクトCで多重宣言されることはなくなる。
他にも、外部ASファイルを作らず、オブジェクトCの第1フレームに直接書くという手もあるが、AS3のコードをタイムラインに書くのって俺的にナンセンスなので却下だ。
注意
ここに書かれてるFlashProfessionalおよびそのコンパイラの挙動については、あくまで俺が感じた雰囲気を元に予想したものであり、実際に上記のような判断、構成になっているかどうかは不明である。なので、「あぁそういうイメージかー」程度に認識していただきたい。
2013-02-13
Sonyのアクションカム“HDR-AS15”を購入した
小さい
もう4日も前の話になるんだけれども、Sonyのアクションカム“HDR-AS15”を購入した。動機は幾つもある、というかいくつかある動機が重なって購入するに至ったわけだけれども、買って一番驚いたのは、その大きさ。いや、小ささ。十円玉数枚程度。手で握っても隠すことはできない大きさではあるけど、握っててもそれがカメラであると認識しにくいような気がするサイズ。これ、分解して配置しなおしたら(以下自重
動機
- 自転車乗るので、車載カメラ欲しかった。
- 映像に興味があった。
- というか映像編集楽しい。
- 俺もYoutuberになりたい。
- 動画はもっと流行るべき。
- 動画ブログはもっと流行るべき。
- iPhoneで動画を撮ると、画質はいいがマルチタスクできないし、自画撮り難しい。
- アクションカムって耐衝撃性高いんでしょ? 多少無茶できるんでしょ? そういう面白い画、撮れるんでしょ?
- ハンディカム、でかいし、撮る時気負いそうで、映像初心者にはハードル高い。
GoProとの比較
今比較するならGoProHERO3 BlackEditionになると思う。
実際に比較してみると、機能の面ではほとんど全てにおいてGoProの方が勝ってて、大多数の人はそっちに流れるんだろうな、と思うんだけど、一方で、AS15にもメリットはあって、それが「画質」。詳細は次項に譲るが、たぶんカメラ内で行われている画質補正のお陰で、撮ったものをいちいち調整せずとも綺麗なものとして公開できるという手軽さ(完全に日本人向けな感じだけど)が気に入った。
GoProより劣っているとはいえ、必要十分な機能を持っているので、そもそも比較する必要もない感じだったし、価格的にはこっちのほうが安かったし、GoProHERO3Blackは品薄で手に入らないし。
後述するが、電子式とはいえこのカメラの手ぶれ補正は非常に優秀で、それだけでもアクションカムとしての価値は大きい気がする(のに俺は一切気にしてなかった)。
画質
画質チェック代わりに、早速自転車に載せて走ってみた。

日暮れ前から30分程度撮ってみて、各環境光の状態でのチェックや、手ぶれ補正の有無の差などを確認してみた。
基本的に色味は青に寄っており、元々強い青を持つ部分は青潰れしてしまうが、それ以外の部分については、比較的記憶色に近い(非常に鮮やか)感じがしてよい。
夜間でも、暗部が黒く沈み込まずに、しっかりと形状が分る。その状態でありながら明るいところも完全に飛んでしまうわけではなく、「ざっくりと記録する」という意味では、非常に適している気がする。さすがSonyのExmorRセンサーだ。
手振れ補正についてはそれほど気にかけていなかったのだが、使ってみるとその優秀さが驚愕する。シーン1では手ぶれ補正無しなので、画面下部のバッグはフレームに対して固定位置に映っており、風景については映っているものがなんなのかわからないくらいに揺れることも多々あるが、手ぶれ補正をONにしたシーン2では風景の揺れがわずかになり、一方で下部のバッグの揺れが激しくなっているのがわかる。手ぶれ補正をONにすると画角が120度に制限されてしまうが、あとの編集のことを考えれば、手ぶれ補正により静止している画のほうが使いやすいだろうし、車載など揺れの起きる場面では遠慮なくONにしたほうがいい気がした。
不満点
不満点がないわけではない。1つは本体に三脚穴が開いていないこと。これは同梱の防水ケースに入れることでなんとかなるが、今度は音を拾わなくなる。車載カメラにおいて音はさほど重要ではないのでそれでも問題ないが、普通に撮影する際に困ることになる。Claspのような、三脚穴にクリップが付いたようなもので挟むなどの対策が必要だ。お金に余裕があるなら、公式のLCDユニットを購入するのもいいと思う。本体には(あくまでアクションカムなので)液晶がついていないが、この液晶付きの製品につけることで、ハンディカムのように用いることもできる。ちなみに俺は全部買った。
録音も問題だ。本体のマイクは非常にクリアで文句はないのだが、同梱の防水ケースは防水性を高めるために密封される関係で音をほとんど拾わなくなる。本体には外部音声を録音するためのミニジャックが付いているが、ケースに入れるとそこが塞がれてしまい用いることができない。防水ケースやLCDユニットと一緒に用いても外部マイクを使えるような仕様にして欲しかったな、とは思う(たとえば、Bluetooth変換ミニジャックを刺す空間が空いてるとか)。
色味が青により過ぎているのも気になる。アクションカムなのでーと言い訳すれば済む話だし、それが与える好印象もあるので、一概に直せとは言えない(というか直して欲しいならGoPro買え)が、すこし勿体無いな、という気はする。
買ったもの
AS15自体は非常にシンプルな構成なので、これでいろいろやりたいと思えば、周辺機器を買い揃える必要がある。俺は昔から「周辺機器大好き」な人だったので、今回も例に漏れずいろいろ買ってしまった。
| 製品 | 価格(定価) |
|---|---|
| HDR-AS15 | 26,000(29,800) |
| グリップスタイルLCDユニット AKA-LU1 | 8,750(10,500) |
| ハンドルバーマウント VCT-HM1 | 2,600(3,150) |
| Transcend microSDHCカード 32GB Class10 TS32GUSDHC10E | 2,480 |
| ソニー NP-BX1 互換 バッテリー 2個セット | 1,000 |
| Clasp for smartphone | 945 |
| NPBX1用充電器 カメラバッテリーチャージャー | 840 |
| PLANEX 55メディア対応USB2.0 メモリーカードリーダー/ライター PL-CR55S3U2-W | 691 |
| 送料 | 500 |
ちなみに、AS15自体はヨドバシ川崎店で23,000円弱で売ってたので、欲しい人はAmazonよりヨドバシとか探したほうがいいと思うよ。
お願い
そもそもの動機が「映像編集したい」というところに起因するので、経験を積むという意味でも、例えば俺が参加する勉強会などの様子、会話をまとめあげ、雰囲気を伝えられるような映像を作っていきたいと考えている。ただ、勉強会などの雰囲気を伝えられる映像を作るには、俺一人が録画しているのでは不十分で、様々な角度から録画された映像を(恣意的な何かも含まれつつ)編集した方が楽しいものができると思う。なので、もし良かったら、俺が参加している勉強会、イベントではその様子をみんなにも録画して貰いたい。ガラケーのカメラでもいい。数千円のチープなやつでもいい。MacBookのinSightで自分の顔を撮るのでもいい。四六時中録画するのではなく、なんかキーになる部分だけ録画するのでもいい。なんかそういう機会があったら、みんなも録画して、そのデータを送ってほしいなぁと思うのである。
どうせ良い物が作れるようになるに時間がかかるんだ。ざっくり行こう。
2012-11-29
lokkaをherokuでrunする話
lokkaというCMSがある。
rubyで書かれており、herokuで動く。それ以外の特徴はよく知らない。
なんとなく1日1エントリのTwitterの延長的なブログが欲しくなったところに、そういえばherokuでアプリ走らせるの成功したことないなーと思って、lokkaを採用してみた。
インストールからrunまで
基本的なインストール手順は、“Getting Started - Lokka”の“heroku”項目を参考にすればいいのでシンプルだが、実はこれだけだと動かない。“heroku run rake db:setup”をしたところで“rake aborted!”と言われてしまうのだ。
そこで“rubyでCMS構築したい ~lokka~ | Chie a la Mode”の「で、その後、ソースをよくよく見たら、」項目を参考にデータベースの設定をする必要があるのだが、ぶっちゃけこれでも動かない。というもの、あなたがいまcreateしたheroku appには、postgresqlが入っていないからだ。そこでこのaddonsを入れる必要がある。
それも含めて実行すると、下記のようなコマンドを打つことになる。
※途中の“HEROKU_POSTGRESQL_***の***部分は人によって変わるようなので、適宜置き換え
$ gem install heroku bundler #herokuコマンドとbundlerコマンドを入れる $ git clone git://github.com/komagata/lokka.git #gitからlokkaを落としてくる $ cd lokka $ heroku create <your app name(アプリページのサブドメインになる。)> #herokuにアプリを作る $ git push heroku master #herokuにlokkaをアップロードする $ heroku addons:add heroku-postgresql:dev #追加:アドオン契約する(Free) $ heroku addons | grep POSTGRES #追加:契約したpostgresqlのデータベース名(?)を確認する #> heroku-postgresql:dev HEROKU_POSTGRESQL_*** $ heroku pg:promote HEROKU_POSTGRESQL_*** #追加:よくわかんないけど、DBはじめる? $ heroku run rake db:setup #lokka起動 $ heroku apps:open #ページを開く
あとは、自分のアプリページを開いて、ログイン、id/passを変更して完了である。
2012-03-29
ペアプロ合コン行ってきた(募集から開催前日まで)
ネタだけど!
ネタじゃなかった!
結構楽しかったです。
ちょっと副アカで参加していた関係で、このアカウント(@kkotaro0111)を知るものは1人しかいないわけだが、参加したのは俺だし、副アカのブログないし、正直複アカで参加申請したことを公開するレベルで楽しかったので、大人しく本垢でレポート書く。
副アカと本アカとは明確に他人化したかったんだけどなー ← 努力すらしてない
募集時代
まずは女性枠の募集が行われました。
こちらは問題なく募集が終了したようで、むしろ男性陣のギラギラとした視線が、並ぶIDに注がれ続けたのではないかと思います。
その後しばらく全くの音沙汰がなく、「本当に開催されるのか!?」という意見が浮上し始めたころ*1、突如として、男性枠の募集が開始されます。
しかし、結構狙ってた男性が多かったのか、一瞬で20名の枠が埋まってしまい、それ以降は「記念カキコ」の嵐でついには114人/20人という事態に。みんな暇だよな。
かくいう俺も、ネタ判定をした上で、「記念カキコ」として応募しておりました。最悪、何らかの理由で参加可能になった場合でも、Javascriptを武器にがんばろうかと思ったのです。
参考
第1回ペアプログラミング合コン(女子枠) on Zusaar
第1回ペアプログラミング合コン(男子枠) on Zusaar
選考応募開始時代
時代というのは、なんの前触れもなく変わるものでして、応募が締め切られたあと、zusaar経由で運営から連絡が来ました。内容は、
RoRかCakeでやっから、組める証拠を1週間でだせや。*2
というものでした。普通に考えたら、「Javascript使えるんちゃうんかい!」とクレームを付けるものですが*3、そもそも俺補欠ですし、記念カキコですし、そんなことも言えず、一方で「もしかして、この選考のせいで、俺にも参加できる可能性があるんじゃね?」と妙なことを考えだし、俺は応募締め切りまでの1週間、仕事の合間と仕事の時間を使って、Rubyを勉強したのであります。
選考応募締切時代
Rubyは簡単だというし、Railsも超簡単と皆は口をそろえてピーチクパーチクしてるので、1週間もあれば何とかなるだろうと挑んだ3月上旬、見事にその期待は裏切られ、期限までにはたのしいRuby 第3版を読破する程度のことしかできませんでした。しかし、それでは選考レベルに達していないわけですよ。そこで俺は苦肉の策として、「ネットに転がってたチュートリアルを少しやって、そのソースをGitHubに上げつつ、『開催まで2週間あるので、教えられるレベルにはなりますよ!大丈夫っすよ!』などという、どう考えても大丈夫じゃない臭いしかしないメールを書いて送る」という暴挙にでました。
結果大公開時代
その後しばらく全くの音沙汰がなく、「本当に開催されるのか!?」という意見が浮上し始めたころ*4、突如として、選考の結果がメールで送られてきました。
内容は「当選」。どう考えても大丈夫じゃない臭いしかしないレベルのGitHubとどう考えても大丈夫じゃないレベルのメールを送った人に「当選」のメールを送ってきたんですよ、運営は。運営かっこいい。そしてありがとう。*5
しかし、選考結果が通知されたのは、開催日の約1週間前。俺はもう落ちたつもりでいたので、RubyのRの字すらみてなかったんですが、約1週間前になって、Railsを勉強しなければいけない状態に陥ったのです*6。しかし仕事のほうが忙しく、なかなか仕事の時間をRailsの勉強に割くことも出来ず(仕事しろ)、やっとこさ勉強を開始したものの、ほぼ先に進まない状態になってしまったのです。
開催日前時代
その後しばらく全くの音沙汰がなく、「本当に開催されるのか!?」という意見が浮上し始めたころ、突如として何かメールが送られて…くることもなく。前日に@pp_conにリマインダー送ってーと連絡をして、実際に開催されるだろう確認を得てやっと安心できる状態でした。*7
一方で、Railsの勉強はまったくはかどらず、結局前日までにできたことといえば、改訂新版 基礎Ruby on Rails (IMPRESS KISO SERIES)の第6章までをトレースするのがやっとでした。
ここまでが、募集から開催前までの流れになります。読んでいただければ分かる通り、ネタ臭がプンプンします。なんかGDGDになるんじゃないか。てか、本当に開催されるのだろうか。そういう謎めいた感じがまた楽しくて、良いレポートがかけるんじゃないかなーなんて思っていたのです。
そう、前日までは…
2012-02-24
ガチホモ合コン行ってきた

もとい、 #perlbeginnersに行ってきました。
まぁ最初に言っておきますが、ガチホモ合コンはネタなので、本当にそれ目当てでこのブログにたどり着いた人は、Perlの勉強しておいてください。
#hachiojipmでお馴染みの @ytnobody さんが主催する、Perl初心者向け勉強会 #perlbeginnersが五反田で開催されるということで、Perlビギナーな俺はさっそうと参加することにしたのですよ。告知から2週間くらい参加表明せず様子見てましたが。
んで、仕事の都合上、遅刻するはめになってしまったのですが、遅れてたどり着くと、すでにその場で取り交わされる質疑の内容が、思いの外レベルが高くなっていました。というか、たぶん最初っからレベルの高いもの(といってもビギナーから見てレベルが高く感じるだけで、どうも「中級」というのが丁度いいらしい)で、へーへーとか思いながら聞いていたのですが、明日から試せるか、というとちょっとまだ無理かな、という感じでした。
ただ、Encode.pmを使った文字コード変換、日本語マッチングの部分は、ある種Perlの本懐な感じもするので、ビギナーの俺から見てもタメになったなぁと思います。
勉強会終了後、2次会場への道中、主催の @ytnobody さんと話したところ、「Perlの裾野が狭すぎて、初心者があまりいないんじゃないか」(Perl Mongerは、昔サーバーサイドプログラムといえばPerlという時代からPerlいじってた人が殆どで、長らくやってるから中級者になっており、それより若い世代だとPHPやRubyにいってしまうので、Perl初心者がいない)という意見でまとまりまして、しばらくの間大事なのは、「Perl初心者を作るところから始める必要があるかも」ということになった気がするんですがよく覚えてません。
ちなみに2次会は対面式の長い座敷机に向かい合う感じで14人が座ったので、7対7のさながら男性オンリー合コンという形相になりまして、通称「ガチホモ合コン」が開催されたわけであります。
次回 #perlbeginnersは、5月前後に開催ということで、主催者的には超初歩的な質問が出て欲しい(それこそ、HelloWorldしか試してないような人)らしいので、ぜひとも「私、Perl始めたいんだよねー」という人は参加してみるといいかもしれません。なんで一人称が「私」なのかというと、どうやら次回は@ytnobodyさんが女性参加者獲得のためにケーキを作ってくれるそうなので、みんなスイーツ食べに来るといいよ!

