2011年9月20日火曜日

アンドロイドアプリケーションの圧縮について

画像や音声を多く含む、Androidアプリケーションはサイズが大きくなりがちです。工夫次第で品質を保ったままでも、相当量アプリケーションのサイズを縮めることができます。サイズの小さなアプリケーションはユーザーのダウンロードも快適になります。
画像などのサイズが小さな場合プログラムの効率もよくなるでしょう。同じアプリの場合、3G回線で、画像未圧縮で20MBのサイズをダウンロードすることにユーザは躊躇するかもしれませんが、2MB程度になっていれば我慢してダウンロードしてくれるかもしれません

どこをどう圧縮すればいいかは、apkの拡張子を一旦zipにしてアーカイバで確認するとわかりいいです。

以下その手法について


①proguardを用いて不要コードを取り除き、classes.dexファイルを圧縮する
default.propertiesに'proguard.config=proguard.cfg'の行を追加すると、
コードが暗号化され、利用されてないコードが削除されます
⇒ただしライブラリなどを利用している場合無視する条件などを設定しなければいけずそこそこ学習が必要です
⇒生成されたクラスファイルそれ自体はzipすると圧縮されやすいファイルですのでそこまで気にすることはないです
⇒サイズも重要ですが構築に必要なライブラリはまあ使いましょうという話


②ビットマップ画像・音声などのメディアファイルを圧縮する
◎画像、メディアの圧縮はウェブでも共通するノウハウ、効果は高いです
◎PNGはアルファ透過が必要ない場合はたいてい8bitPNGで構わないです。
⇒アルファ透過は変えが利かないので32bit止む無し
⇒スマホやフィーチャーホンの場合ディスプレイの色表現力がそもそもなかったりします
⇒写真でなければ、だいたい256色で表示してもあまり見栄えはかわりません
◎PNG24bitの画像などはJPGで置き換えが利かないか検討しましょう
⇒フルカラーの写真画像であればJPGの方がより縮まります
⇒たいていの場合です。ベタ塗の画像など、「この色が何個続いて、その次にこの色が何個…」という感じな画像はPNGの方が高圧縮になまります。(つまりランレングス圧縮が有効な場合)
◎JPG画像の品質は100%⇒60%くらいまで縮めてもあまりわかりません。
ノイズが気になる場合は80%くらいに。
それも気になるなら95%に
⇒100%と95%では格段にサイズが違いますが品質は変わらないと聞いた記憶が
◎RIOT(Radical Image Optimization Tool)というアプリケーションを使うと、面倒な画像最適化を自動でやってくれます
⇒http://luci.criosweb.ro/riot/
◎音声も圧縮しましょう。
⇒圧縮形式の検討、ビットレートの検討、モノ、ステレオの検討など
⇒高品質な音声がスマホで常に必要かは…その人の主義やアプリによります
◎豆知識
ではJPGファイルはどのように圧縮をしているのか
⇒RGBで表現されるピクセルデータを「輝度」と「二種類の色相」で表現するように変換します
⇒人間の目は輝度には敏感ですが色相には敏感ではないです、ですので色相データを荒くします
⇒色相の部分はわかんない程度にモザイク状にしてしまいます
⇒DCT変換⇒整列⇒エントロピー符号化は難しいので省略
⇒つまり人間の感覚の許容範囲を元に画像を縮めているので場合によっては
他の圧縮形式のが効率がよいということを理解できればOKです
◎画像フォーマットそれ自体に知識を持つといろいろ役に立ちます


③SVGファイルを用いる
画像を使う場合ビットマップでなくSVGファイルを用いるようにすると劇的にサイズを縮められます。
⇒PNGなどのビットマップはどうあがいても画像サイズ分のデータを持ちますがSVGは描画に必要なパスデータしか含んでません
⇒これは制作が使ってるライブラリが対応してればというのもありますね。
  ⇒幸いsvg-androidという名前でgoogleprojectを検索するとモノがありますのでこれを使うようにしましょう

④不要なファイルを削除する
基本的なことですが忘れがちです、使ってないファイルはapkファイルに含まれないように取り除きましょう

⑤サイズの縮小にあまり頑張りすぎない
手のひら返し的ですが あんまがんばんな、圧縮は単に手段のひとつですよというお話
⇒いいコンテンツならかりかりに圧縮されてなくてもユーザーはおとしてくれるさ
⇒上にあげたようなツールでさくりとできる程度以上の圧縮は必要ないと思います
⇒サイズの圧縮に時間をかけて、ギリギリの線を目指すような必要はないということです。
⇒縮まらないものはどうしても縮まらないです

2011年9月1日木曜日

GoogleAppEngineがプレビューを卒業したらしい

最近ビリングで使いだしたところで卒業はめでたいが
実質値上げという話もあるので、
まあTwitterボット用クラウドは卒業してもらいたいところですね

下記Googleからのお知らせの要約

①App Engineがプレビューを卒業したよ
②HRD+課金のユーザーはSLA(99.95%)保障するよ。
Master/Slaveは今後知らないよ。移行ツールを準備してるよ
③3年間の廃止ポリシーを適用するよ。後方互換性は一程度保たれるけど、これは信頼されたテスたーと実験用のAPIには適用されないよ。あと、こちらのAPIの変更が今後アプリに影響するようになるから気を付けてね。
④月$500のプレミアアカウントを準備したよ。
オンラインサポートとか書面ベースでの(請求書とか)やりとりするよ

よりビジネス向けに規約を改定して新しい料金モデルを適用するよ
今日ただいまから10月31日までの間にサインアップして、ビリングを開始するか、
アップデートしてくれたユーザーに$50やんよ

2011年8月7日日曜日

Androidのバージョン間の互換性について

  • Googleは後方互換性すらばっさり切り捨てている、deprecatedで残しておけばいいのに
  • 1.6対応で対応で出したアプリが2.0で動かないとか、2.3で動きがおかしくなるとか、あれはGoogleがそのようにしてるからでアプリ開発者だけの責任ではない。
  • 具体的にどこがといわれれば、1.6でのカメラのプレビューの扱いと2.0での扱いはもう別物になってるので1.6以前のARアプリはほぼ2.0では動かない。
  • 個別に対応したいのならバージョンでif分をかますか、Relfectionで関数の存在を確認するようなコードを書くことになる
  • Windowsのようにまあ後方互換性を時間とって考えてくれるような会社ではないわけだGoogleは

2011年7月3日日曜日

だらだら思う

  • 平日中は疲れてて、土日昏倒、なんとかゲームするくらいの時間は割こうという感じ。
  • くだけた話、マネーが不足してるからはたらかざるを得ず、まあでもマネーが充分あっても漏れが働くかどうかはわからないというか、まあまず働かないだろうなあと、身内を考えると思ったり。
  • 何かやるには、動機プラス保障が必要で、不安を抱えていてはあれなので、不安はできるだけ払拭すべきなのだよな。
  • だいぶ不安は薄くはなってきたのだけど金額換算的には、あと数百万程度がんばらないといけないのだ。お金で換算できるなら楽な不安だなあとまた思う。
  • 衣食とまあ死なない保障がとれてて、それが自己に依拠するものである。そうした人はそうでない人と考え方が違ってくるのではないだろうか。というのはでも、不安を感じてる人間の考え方なんだろうか。
  • というようなことを漠然と考えていた

2011年6月24日金曜日

今日の怪しいグラフ

  • ngCoreの速度を書いてるスライド記事でこれはないなーと
  • http://www.slideshare.net/zigorou/ngcore-engine-for-mobage-platform
  • 後半の速度比較でOpenGL+Javaが1000個スプライトを描くだけで速度が落ちてるのは、実装がダメなだけだと思います。
  • 多分ネイティブと比較してもそんなにかわらないよといいたいんでしょうが。
  • スプライトバッチ使えばDesireでも、板ポリゴンなんて万単位で描画できるよ? 
  • 専用チップ積んでて、1000個スプライト出してフレームドロップする実装なんてお笑い種じゃないすか。
  • あと1000個出したときのFPSが数字で書いてないのはなんで? 57と58と59の違いはほとんどないけど、0と1と2の違いは大きいと思う。
  • 用途を絞れば実績もあるし素晴らしいものだと思うんだけど、こんな感じで上位の環境を貶めるような書き方はいけないと思います。
  • 最悪ネイティブの1/10も描画できません。ですが簡単な2Dゲームは十分作成できます。と書くべき。

Machinarium

  • Machinarium。チェコ製のFlashゲーム。2年前のゲームになるのか。7時間でクリア。
  • 基本画面をクリックして脱出する脱出ゲーム。。。
  • 脱出ゲームなんて新規に分類作らなくても、普通にADVでいいんじゃないかと思うんだ。
  • 海外ゲーといってもUIが英語なくらいで本編に文章は一切存在しない。アニメの流れる吹きだしで会話や心理状態は表現される。
  • 画面上のものを工夫して組み合わせて場面を乗り切っていく感じ。例えばこの画面では、
    ⇒椅子の脚をつかむことでのっぽの悪人を椅子ごと転倒させる
    ⇒転倒しているうちに、皿の上の弾と腰についた鍵を盗む
    ⇒射的の弾がないので的に悪人は弾を集めに行く
    ⇒そのすきに弾を床にばらまく
    ⇒鍵で画面左のコンパネを操作し牢屋を解放する
    ⇒囚人が現れるが転倒して悪人はすこし遅れて後を追う
  • こういうのはトライアンドエラーでなんとか見つからないことはない。
  • ただ難易度のけっこう高いパズルが都度都度提示されそれを解かないと進めない箇所がある。
  • 右上の本を開くと見られる、ヒントを見れば全部答が書いてあるんだが、頼ると負けた気がするよねー。
  • 最後の画面の鍵盤を叩く場面で一番左の音がわかりづらくてこれもヒントを読んだ。
  • 基本クリックしたところに主人公は歩いていくという操作方法なので、待ち時間が多い。まあこれはこうしたゲームの宿命なのかな。
  • ゲームは全編Flashで制作されている。つーても、2Dならたいていのゲームが今FlashでOKだと思いますが。
  • なんか綺麗だしだらだらやってしまうよね。
  • 他とあわせて5個パック$9.99で購入したのでまあ200円しない?
  • 正規の値段で単品で$9.99払うのは・・・まあ価値観によりますよね。まあ、同じくらい書き込まれた絵本を考えても、全然それだけの手間はかかってると思います。
  • けど、すでに安く買った人がいるのに金を多く出すのも癪だったり。セール狙いすな。

2011年6月20日月曜日

Alice Madness: Returns

  • Steamで購入、四章導入まで。
  • 日本語が対応言語に含まれています。国内リリース前なんだけどなあ。
  • 内容はデビルメイクライとかそんな感じの3Dアクション、ジャンプアクションシーンが多め。
  • 完全一本道。集め物山ほど、よくある最近のゲーム。
  • 雰囲気はとても好きなので、こういった感じが好きな人が買えばいいと思います。
  • 似たようなものを積んでたりだとちょっときついかもしれない。
  • 360コンでプレイしてるんですがいくつかはまった点があるので書いておきます。
  • 敵が強いとかそういったことでなく気づかないとツラくなりそうな点だけね。。。
  • 防御用の傘が初登場時、コントローラー操作だと対応するキーが表示されない。また説明書を読んでも使い方がどこにも書いてない。
  • ⇒敵をターゲットした状態でジャンプボタン(A)を押すと傘が展開されます。キー設定とかいじる必要はないです。
  • すぐ落ちる。ジャンプの距離が足りない。
  • ⇒ジャンプボタン長押しでアリスはホバリングします。序盤は距離があまりとれなくてもごりおせるのでなかなか学習できない。ホバリングになれると大分ジャンプシーンが楽になる。
  • スイッチの上に、時限爆弾を置くイベントがカメラの切り替えのせいもあってシビアすぎる。カメラの切り替え時には危なくて移動できない。
  • ⇒時限爆弾をスイッチの上に置く際は、慌てずに、アリスをスイッチの上に立たせて、しかる後爆弾を置くようにする。この手順でカメラの切り替え後に時限爆弾を設置できる。
  • ⇒基本アリスは戦闘中、時限爆弾ほりなげてるので、たちどまると丁寧に足元に置く動作をするのが気づきにくい。またこの場合明らかにスキップできないカメラが罠になってるのでタチが悪い。これは流石にチュートリアルでもいれるか、カメラを改善すべき気がする。
  • それにしても一章が長い。三章終了までで、下手糞をさておいても15時間かかっている。
  • あまりネタバレないスクリーンショット(Steam Cloud)
  • http://steamcommunity.com/profiles/76561197998376622/screenshots/?tab=all
  • けっこう先の方の面までプレイしてるのでプレイする予定があるなら閲覧はあまりしないほうがいいかも。

2011年6月17日金曜日

翻訳

  • ちらちらGNU関係を見てたら、手ごろな長さの文章ですこし話題になってた、
  • 微妙に間違った解釈が流れていて気になったので
  • まーでも漏れの翻訳が全部正しいわけはなく、気になったら訂正するぬー
  • コメント欄は俺の自由に基づき封じている
  • 立方根(Cube root)てなんぞ、リンク先も読まないといかんのか
  • 義侠心的には賛意を示したいけど、仙人みたいな生活は無理なので受け入れがたい

電子書籍の危険性(The Danger of E-books) 私家訳

電子書籍の危険性(The Danger of E-books)
Richard Stallman

ビジネスが政府を支配し法を記すこの時代にあり、あらゆるテクノロジーの進歩は公衆に対してあらたな制限を強要する機会となっている。テクノロジーがわれわれを力づけるのでなく代わりに、縛り付けるのだ。

印刷された書籍では
  • 現金で匿名性を保って購入することができる
  • そしてそれを所有できる
  • 制限条項が課せられたライセンスに署名する必要はない
  • フォーマットは既知のものであり。書籍を読むにあたりいかなるプロプライエタリな技術も必要とされない
  • 他人に、譲り、貸し、転売することができる
  • 物理的にスキャンやコピーをとることができる。またしばしそれは著作権上合法な行為である
  • なんびとたりとも、あなたの本を破壊することはできない
翻ってAmazon ebooks(代表的なもの)
  • Amazonはebookを取得するにあたり個人情報を要求する
  • いくつかの国で、Amazonはebookの所有を認めないとしている。
  • Amazonはebookを利用するにあたり、ユーザーに制限的なライセンス条項を課す
  • フォーマットは秘密であり、プロプライエタリでユーザーを制限したソフトウェアだけでしか読むことができない
  • 時間を限った不完全な「貸与」がいくつかの書籍で認められている。だがそれは同じシステムを利用している(名前だけで識別される)ユーザーに限られる。譲渡も転売も行うことはでぎない。
  • プレイヤーに仕込まれたデジタル制限管理(Digital Restrictions Management)によってebookを複製することは不可能である。また著作権法より制限の厳しいライセンス条項によっても複製行為は妨げられる。
  • Amazonはバックドアを用いebookを遠隔操作で削除することができる。このバックドアは、2009年に利用され、ジョージ・オーウェルの「1984」を大量に削除した。
これらの侵害行為の中のひとつでさえebooksを印刷書籍からの退歩と成すに足る。彼らが我々の自由を尊重するまでebookを強く拒否しなければならない。

電子書籍の販売業者はわれわれの典型的な自由を著者に支払いを行う必要性から否定している。現状の著作権システムは(これにあたっても)卑劣な行いしかしていない。むしろそれは業者を維持するために適しているものなのだ。われわれは著者をわれわれの自由を制限しない別の形で支援することができる。これは法に則った分配形式でさえある。私の提案する2つのメソッドは以下のとおりだ。
電子書籍は、もし企業がそうしようと考えなければ、我々を攻撃するものではない。彼らを止める責任は我々にある。戦いはすでに始まっているのだ。

Copyright 2011 Richard Stallman
Released under Creative Commons Attribution Noderivs 3.0.

(http://stallman.org/articles/ebooks.pdfからの翻訳です)

2011年6月6日月曜日

World of Goo

  • 最近STEAMで購入して最後までプレイしたのだが今日見たらセールで半額だったよ(2011/6/6)
  • 出たときに評判になっていて欲しいなあと思っていたが去年までクレカを持っておらず買えずじまい
  • WiiとかiPhone販売してたのね。でもマウスでポチポチの方がゲーム性に会うと思う。
  • 物理パズルゲーの中でも絵作り音作りで卓越。
  • 動きの面白さに頼らずちゃんと作品として成立している点は稀有。
  • META SCORE90は伊達じゃないですよね。
  • まあ、マウスを思いっきり振ってGooを動かすと壁をつきぬけたりして、
  • Youtubeのハイスコアリプレイがほとんどそれ使ってやってるとかはご愛嬌か。

2011年6月4日土曜日

エレベーター サザエさん

エレベーター

朝急いでいると主婦風の女がエレベータのかごの中に男とはいってきた、
主婦風の女は男に対して何か親切というか他人行儀で、苗字にさんをつけて名前を呼ぶ

「あら、Sさんはどうして、この時間?」
「ええ、下階に車をとりにいこうと思って」
「あー、でも見られたらばれてしまうかもしれないわね、それはいけないわ」

ふふと女が笑う。男の方は先客に私が乗っているのを見て何か気後れした風だ。
なんとも怪しい空気だが、まあ美男美女というわけでなく面白い光景ではない。
構造上建物の出入り口は二階なので、私は親切心を発揮して1Fへのボタンを押した。

「そう、そういえばKさんよ、Kさんとこの間会ったのだけれど」
「Kさんですかお会いしたことはないなあ、どんな方でした」
「あの人はすごいのよ、シナリオを書いているの」
「へえシナリオですか、映画とかドラマの、そんな風には見えなかったな」

女は男を馬鹿にしたように笑う。

「いえ、違うのよ今度の○○党の混乱劇のシナリオを書いていたのがあの人なの」

聞き捨てならない。そして申し訳なくも他人事ながら胸が痛くなった。エレベーターのかごの旅路はまだ半ばでしばらくの間、この空気に私は耐えなければならない。

「そうなのですか」
「ええ、いいお話が聞けたわ」

中流より上くらいの人間が住む場所だし、まあそういった陰謀もあるのだろうが、この婦人がすこしおかしいか、だまされてるかと思うのが普通で、まあなんというかもやもやした感じだ。

長い沈黙。チン。かごが二階についた。

もやもやした気持ちをひきずりながらかごを降りると駅に向かった。そんなすごい人が身の回りにいるというのはまあ世界はあの婦人近辺を中心に回っているのだろう。
それが事実だとして、それが虚構だとして、婦人が山師に騙されてるとして、とりあえず私には関係のないことである。

サザエさん

子供の頃に暗い病院の待合室でサザエさんの再編集版でよりぬきサザエさんというのを読んだ。

サザエとフネがでかけるので、マスオと波平が今晩の食事を作ることになる。
高価なエビを使ったエビフライだ。最後のコマでは波平がフネに「お金をかければ美味しいものができるに決まってるんです」と怒られている。

こんな話がだいぶ記憶に残っている。
生ガキをブルーオイスターとか名前つけて何千円で売りつけたり、美食を煽るグルメ漫画はのきなみフネさんに謝罪すべきだよね。
まあとにかく、食べ物に関しては成長期を通じて、なんというかそんなことを言うのも野暮なような空気が出来たが。学校を出て、世の中に出ると食い物に限らず、「金かければいいってわけじゃない」と思い当たるケースにまま当たる。お金がなければ使うのは知恵で、なんというか世の中知恵が足りないのだ。
まあ今度ヒマができたらサザエさんを一巻から読んでみようかな

2011年5月19日木曜日

Flash CS5 Professional購入

  • CS5発売前で安くなってたのでつい…無料アップデートもあるし
  • Flash CS3を会社のアレで使ってたのですが。
  • Flash4⇒Flash5⇒Flash 8⇒Flash CS3という感じ。年季だけは入ったFlash屋さん。
  • バイナリいじったりするくらいにはな。
  • でもFlash4⇒Flash5で、こんな複雑なスクリプトFlashごときで覚えられるかと投げた記憶があるな
  • 10年後仕事化してる恐怖。
  • そしてだいたいは携帯のFlash Lite 1.1でつまりFlash 4ベースであるのよな。Action Scriptなんていらなかったんだ。
  • いやPCも作ってるから、両方やってる(やらされてる)けどね
  • もうすっかり開発環境化してるが、個人的にはいまだにベクタお絵かきツールの印象が強い
  • CS5はインストーラーも含めUIが軽い気がする。CS3はなんかいろいろUI関係がひどかったので。
  • で、とりあえず今やってるものをいじってみたのだが。埋め込みフォントが崩壊。
  • というかなぜかいつのまにか、ボールドがついていて、消したらフォントが表示されなくなった。
  • そして仕様を調べたらあまりの変化っぷりに吹いた。いやほんと何がしたいんだよ、Adobe。
  • なんかIKとか、ばねとかパターン描画ブラシとか追加されて、xml形式でflaファイルができるんですよ。
  • そしてAndroidとかiPhoneのアプリが書き出せて、モバイルにもリーチできて
  • 当のモバイル業界にはFlashくん消費電力増えるから・・・とかいわれて嫌われてるんです。
  • 実際、たいしたことに使わないんだけどね。ほとんどスクリプトでコーディングして実装だし
  • Flex SDKでことたりるうえに両方使ってると微妙な違いに混乱すること請け合い

2011年4月28日木曜日

ImageMagick PSD続き、PNGをインデックスカラーで透過

  • PSDをレイヤ単位で分割して重ね合わせること(-flatten)することで再構成するような話をこの間書いたが。
  • あれは嘘だ
  • というかそれだけでは元のレイヤの高さなどが反映されてしまうため、出力サイズが想定のものにならない。なので(-flatten)した後に画像サイズに(-crop)をかけてあげる必要がある。
  • 画像の元サイズが480x480で100x100に出力したい場合はこんな感じになった。
  • 当然前の記事を参照して、レイヤごとのオフセットはあわせること。
  • convert -page +0+0 hoge.psd[1] -page +0+0 hoge.psd[2] -page +0+0 hoge.psd[3] -flatten -crop 480x480+0+0 -geometry 100x100 +repage 100x100 result.gif
  • (追記)レイヤの大きさに影響されないようにするためには-cropの後にさらに+repageして仮想画面のサイズを修正する必要がある
  • これでレイヤのサイズが不均等でも正しく出力されるようになる。
  • -cropしてから-geometryでリサイズする、つまり順番が重要になるわけです。
  • ここからPNGの話。
  • アルファ付きのPNGをリサイズして出力すると。アルファチャネルが崩れる問題がImageMagickにはある。というかなんかいかにもメモリリークしてますよーという感じのゴミが画像にのっかってしまいいかにも見苦しい状態に。
  • というかPNGまわりの実装がImageMagickは非常に怪しく、バージョンによっては何もしなくても、出力時にゴミが入ってしまうようだ。(2011年4月時点で6.6.8に当該バグが存在した、アルファ周りのバグは最新版でも存在)
  • ImageMagickの更新ログを見るとPNGがらみの問題が結構多い。
  • まだまだ未成熟なんだね
  • まあとにかくそんな感じでアルファ付き(透過)、PNGを正しく出力するにはどうすればいいか。いろいろオプションがあるので試してみたがこれといった解は見つからなかった。明らかにバグ。
  • 単なる一色抜きの透過PNGが欲しいだけなのに、8bit Alpha付きのPNGでImageMagickは処理しているのだ。
  • いちばん簡単な解決法。
  • GIFで一旦出力して、(-transparent #XXXXXX)を指定しPNGに変換する。
  • こうすることでImageMagickにおけるPNGのアルファチャネル由来のバグは回避できた。
  • こういう情報をバッドノウハウといいます。

2011年4月27日水曜日

ソニーの個人情報流出

  • PS3は堅牢なプラットフォームだったけど、秘密鍵をハックされて以後一気にやられてしまったようだ。
  • 半年もたってないよね。
  • 土台完璧なプログラムなんてないのだから。ゲームなら尚更のこと。バグとセキュリティホールは存在するしハッキングはされるものなのだ。
  • まあ今回のようなケースでは、シッペ返しを食らうのは当然だなあ。という文化や空気感が僕の知る限り昔はありました。今はそういう人たちは声をひそめてるのだろうか。
  • むしろあの文化圏の人たちにはソニーとか今騒いでる人たちが異物に見えてると思うよ。善悪とか数の大小はさておき。
  • スパムの流量とか、クラウドハッキングとか持ち出すまでもなく、ネットは依然そういうお行儀の悪い人たちのものなのである。
  • そこに繋ぐからにはまあ覚悟して繋ぐべきですよね。ルートキーが割れてからも、ハッカーとやりあい続けたのは、全裸で住民をディスりながら、ヨハネスブルグの路地裏をうろついているようなもので。ヤられた側に責任がないかどうかは…。
  • 一般常識として拳銃突きつけられたら手をあげるべきです。今年頭からの経緯を見ても、爆発物持った相手にソニーは威圧的すぎた。つまり渉外担当があんまりにも無能すぎた。それに尽きるんだと思います。
  • 責めるとしたらセキュリティリスクの報告に対して対応に当たった人間
  • これが、いかにも日本的な威圧感漂うアホだったんだろうなと妄想
  • よし、周りにいた警備員がなんとか暴漢を観念させたとしても。それを見て周囲が今度は爆発物を投げつけてくる。今度は覆面をして。
  • 辿る道筋が分かってるからITを周知してる会社は弱腰ですし、最初の暴漢に感謝すらする。その場所が危険であることをわざわざ教えてくれてるのだから。
  • 願わくばまあこうしたことが、規制の方向に進まずに、社会がよい方向に進むようにと思う。

ImageMagickのPSDの扱い方

  • ImageMagickにおけるPSDの扱い方
  • PSDのレイヤを比較的正しく扱ってくれるフリーウェアはこれとGIMPくらいでPaint.NETは論外でした。多分元ソースをゲーム用のとあるライブラリからとってるであろうやつはなんかダメそう。
  • Photoshopではレイヤに特殊効果がつけられるのですが、これが無視されてしまう。
  • コマンドラインが結構いろんな組み合わせでききいれてくれるので混乱するですね。
  • 今日の嘘情報 : レイヤ付のPSDはImageMagickで出力するとレイヤが全て書き出されるので-flattenのオプションをつけると正常に出力されるよ。これは嘘これで成功するケースは偶然レイヤがみんな同じサイズで、偶然移動されてないだけのことだ。ああ、あとレイヤの特殊効果もこの書き方だと消滅します、よいとこなしです。
  • PSDをかたっぱしから流し込んでためしてみればわかるけどレイヤのサイズがまちまちだとレイヤの重ね合わせも出力サイズもずれてしまって悲しいことになる。
  • レイヤ付のPSDは特殊なシーケンスとして扱われる。hoge.psd[0]がレイヤをすべて結合した画像。[1]番以降は各レイヤを底から見ていく。アニメーションGIFと同様な感じです。
  • なので正常に重ね合わせが行われた、画像をPSDから出力したい場合は単に
  • convert hoge.psd[0] -geometry 100x100 moge.gif
  • と書けばよい。
  • 理由があってレイヤを-flattenで重ね合わせたいときはもう少し複雑。
  • Identify hoge.psdからレイヤの枚数と、各レイヤのオフセットを取得。出力の真ん中くらいにある100x100-10+20の-10+20の部分。
  • identify -format %X%Y hoge.psd[1]
  • という感じで取得可能、で-pageで各レイヤにオフセットを指定してあげると正しい位置にレイヤが配置される。全てのレイヤの情報が欲しければ下のように書けばいい
  • identify -format %X%Y, hoge.psd
  • こう書くことでCSV風に出力されて、スクリプトの中で扱いやすくなる。カンマが重要
  • でここで得た出力が以下のようなものの場合
  • +0+0,+0+0,-100+50,+163+22
  • このようにconvertで全てのレイヤを結合してあげれば正しく重ね合わされた画像が得られる。
  • convert -page +0+0 hoge.psd[1] -page -100+50 hoge.psd[2] -page +163+22 hoge.psd[3] -flatten result.gif
  • この際Phostoshopレイヤの特殊効果はなくなってしまうことに注意が必要。
  • (追記)これだけでは情報が不十分なのでこちらのページも参考にしてください
  • (追記)ImageMagickでPSDのレイヤを何かしようという人がどれだけの数いるかは疑問ですが

2011年4月21日木曜日

WindowsForms + C# : ツリービュー、ノードの順番入れ替え

  • ツリービューにおけるノードの順番の入れ替え。構造化テキストエディタとかだと順番重要。
  • XMLで書いたフィルタに対するエディタを作成していて必要になったので。
  • ソートはあるが、順番の入れ替えは、機能的に準備されてない。
  • ウェブ眺めて情報がないわけではなかったが、全部要素を消してループ書いて入れ替えとか面倒じゃないか
private void MoveTreeNodeInSiblings(Boolean upward)
{
//要素をCloneしてコピーすると比較的簡単に入れ替えられる//

TreeNode nodeClone = (TreeNode)treeViewFolder.SelectedNode.Clone();
TreeNode node = (TreeNode)treeViewFolder.SelectedNode;
TreeNode fowardNode = upward?node.PrevNode:node.NextNode;

if (node.Parent == null) {
MessageBox.Show("最上位の要素の入れ替えはできません");
return;
}

//参照のコピー
TreeNode ParentClone = (TreeNode)node.Parent.Clone();
IEnumerator en = ParentClone.Nodes.GetEnumerator();
TreeNode ParentRef = node.Parent;

int nodeHash = node.Tag.GetHashCode();//タグにデータが入ってること前提
int fowardHash = fowardNode.Tag.GetHashCode();

node.Parent.Nodes.Clear();//入れ替えのために消す

treeViewFolder.Visible = false;//描画対策
//基本的にクローンした要素に差し替える工程
while (en.MoveNext()) {
TreeNode tn = (TreeNode)en.Current;
if (fowardHash== tn.Tag.GetHashCode()) {
if (upward) {
ParentRef.Nodes.Add(nodeClone);
ParentRef.Nodes.Add(tn);
} else {
ParentRef.Nodes.Add(tn);
ParentRef.Nodes.Add(nodeClone);
}

} else if (nodeHash == tn.Tag.GetHashCode()) {
/*Skip*/
} else {
ParentRef.Nodes.Add(tn);
}
}
treeViewFolder.Visible = true;
treeViewFolder.SelectedNode = nodeClone;
treeViewFolder.Focus();
}

2011年4月14日木曜日

FLVPlaybackとFLVPlaybackcaptioning

  • 忙しい忙しい。
  • FLVPlaybackとFLVPlaybackCaptioningを最近使う機会があった。
  • 環境はCS3。入れ替えてないだけ。
  • 字幕とかなんだか、オーバーレイするビデオプレイヤーは作ってるが、Flex SDKでやってたりで標準のコントロールを使うのははじめてかも。
  • FLVPlaybackとキャプションを使用する上で何点かあまり情報がないTIPS
  • FLVPlaybackCaptioningを用いた字幕はシーク時に開始地点(ttmlでいうところのbegin属性で指定された時間)以外の所に再生ヘッドを動かすと表示されないが、CaptioningコントロールのshowCaptioningを一旦falseにしてtrueにすると表示される・・・・え?
  • 具体的には 「caption.showCaptions = false; caption.showCaptions = true;」というのをFLVPlaybackのseekイベントのハンドラに仕込んでやればいい。
  • シークバーのつまみから手を放すと表示される。
  • 理屈は分かるが納得いかない。
  • この問題のせいで糞認定されてるケースも多分あるよな。
  • FLVPlaybackのコンポーネントであるところの、シークバーとボリュームバーの実装が悪い。
  • 両方同時に画面におけないというバグがあったらしい。まあそれには対面していないのでさておき。
  • 最悪なのは「つまみ」のムービークリップがドキュメントの直下にaddChildされているところ。seekBarのインスタンスからつまみにアクセスする手段はない。
  • たとえば、操作できないように半透明のマスクをかぶせたりするようなことをする場合、このシークバーコンポーネントがあるとつまみが、画面に操作できる状態で表示されてしまう。
  • ドキュメントの子要素を列挙すると「つまみ」のインスタンスがわかりやすい名前で存在しているので、取得してvisibleをfalseにしてあげればとりあえずは解決するように見えるが・・・
  • 上記のハックでseekBarの「つまみ」を消すことはできるが、volumeBarに関しては不可能だった。消した後、visible = trueとしても再度表示されなくなる。
  • なので用件に応じてvolumeBarは自作すること。まあそんなたいしたものでもないので。
  • FLVPlaybackには機能としてミュート機能が存在するが、プロパティやメソッドでアクセスする手段はない。仮に画面上に配置したミュートボタンにMouseEventを投げて押してあげると使える。
  • いろいろ細かいところに難点はあるものの乗り越えられれば出来のよいコンポーネントだと思います。