2014/06/30(月)debian X周りのメモ

2014/06/30 16:36 PC(Linux)
久々にX立ち上げようとしたら動かなくなっていた。
ちょっと作業したのでそのメモ。

[ディスプレイデバイスずれ]
PC替えたときに、ディスプレイデバイスの指定を修正していなかった。
# lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)

xorg.confを編集。
> diff /etc/X11/xorg.conf.20140630 /etc/X11/xorg.conf
73c73
<       BusID           "PCI:0:1:0"
---
>       BusID           "PCI:0:2:0"
[GNOME周り]
wheezyでデフォルトX環境が変わったせいか、startx後に"Failed to load session "gnome""が出る。

とりあえず、gnome-session-fallbackを入れればいいと言うので、

# aptitude install gnome-session-fallback

で、とりあえず起動するようにはなった。

その他、sshのX11 forward関係のオプションいじって、Xming+putty経由でX画面出るようにした。

いつも通り、sudo関係は適宜読み換えで。

2014/06/13(金)動画作業の覚え書き

2014/06/13 17:05 お絵かき
自分用メモ。

久々に後輩の動画作業手伝ったのでその作業やらソフトやら。

作業は2212x1244の原画の3色トレス(Hi, 1影あり)、少量の中割。

[作業の流れ]
1.原画整理
原画がスキャン画像で提供された場合、ファイルをリネーム。複数セルある場合、タイムシート指定に従ってセル名+連番とする。修正原画は末尾にs。

pngはdpiを記録できるので意識しておくこと。XnViewでもIrfanViewでもチェック可能。

トリミングが必要ならかける。前回2212x1244で作業したので、これに準拠する形でLO枠の画像から2212x1244を切り出して、同設定で他の画像もトリミング。

2.印刷
常に指示書は見られるようにしておいた方がよいので印刷する。

タイムシートと、指示のある原画をコンタクトシートで印刷。コンタクトシート作成はIrfanView, XnViewで作れる。

デュアルディスプレイ環境であってもタイムシートと原画指示を両方表示しておくのはついめんどくさくなって、指示を見落としがち。というか今回ツメ指定を1つ見落としたのでこれは反省の上で考えた工程。

3.原画トレス
saiの2値ペン/2値消しでトレス。

原画をD&Dして不透明度落としてなぞる。使用するペンツールにショートカットを割り当てておくこと。拡大しすぎると綺麗だが作業効率落ちるのでほどほどに。

修正原画がある場合は、原画と修正原画を別レイヤに入れ乗算で重ねて不透明度を落としまず修正側をトレス。次に元原画の非修正箇所を適宜判断してトレス。

PhotoShop含め他のソフトでも可だが、トレスだけならどのツールでやっても機能面の有無では差が付かない。軽くて2値ペンが綺麗なsaiが優るように思う。

レイヤは分けても分けなくてもいいと思うが、合成するのは簡単なので分ける。黒はbレイヤ、赤はrレイヤ、青はbrレイヤとした。

トレス終わったら、原画レイヤを非表示にして保存。2.で指定を印刷しておかないと、ここで指定を落としてしまう原因になる。

今回自分のトレス能力が想像以上に低くて、100本あたり20分前後かかった。細かいカーブの揺れも全部拾ったのと、拡大しすぎ、やり直しすぎが原因と思う。速度は上げようと思えばいくらでも上がるが精度とのトレードオフ。なかなか難しい。

4.中割
中割に有用なソフトは2014/06現在ベストアンサーがなさげ。

FrameToonとPsAxeが候補。

自分が求める要件は、
(1)PhotoShop/sai/CLIP STUDIO PAINT ライクなペイントI/F
(2)1ピクセルで欠けないドットペン
(3)カスタム可能なオニオンスキン(色つき、色なし、透過枚数、固定参照)
(4)HD解像度以上での作画が可能(3000x2000くらいは欲しい)
(5)複数セルの合成、任意のコマ数、レイヤー機能
(6)外部画像からフレームを生成可能。連番を一括で取り込めたりD&D出来るとなお良い。
(7)軽快なプレビュー
(8)原画の参照が適宜可能ならなお良い

FrameToon(しじあに)は(2)(3)(5)(6)が○で、他が△。かなり条件を満たしているのだが、サポートが打ち切られており厳しいところ。openCanvas3準拠のインターフェースは今にしてみるとかなり使いづらい(回転戻すのがAltキーを単独で押して離すとか)し、カスタマイズも出来ない。Windowを行き来したときに、回転ツールがロックされるバグがある。大解像度で作業するとプレビューが動かない(低解像度でも30秒前後で限界が来る)。プレビュー窓に自動サイズ調整機能がないので大解像度のプレビューが難しい。プレビューも解像度が上がると遅い。書き出し形式が少ない。ホントにちょっと足りないところばかりなので、アップデートが続いていたらと惜しい限り。

PsAxeはPhotoShopのプラグインでレイヤーとタイムライン機能を使って中割をするツール。PhotoShop依存だが、(1)(2)(4)(6)(7)は○、他が△。レイヤーを始終並べ替える作業手順なので、割り間違いに注意する必要がある。複数セル・フレームごとの複数レイヤーの取り扱いはなかなか難しい。作業は白背景で進める必要がある。透明画像を扱う場合、オニオンスキンがうまくいかないので無理。出力時にまとめて透過処理をしなくてはいけない。色オニオンスキンは自前色調整レイヤーとかでやれないことはない。PhotoShopのスクリプト実行速度が遅いこともあって、並べ替えや透過処理にちょいちょい待ち時間が発生する。透過処理や諸々、現在の状態がどうなっているのか分からないケースがままある。ボタン押下ごとに状態トグルしたりするので、慣れはかなり必要。

この2つ以外では。

商用ソフトでは今のところTVPaintがもっとも高機能。PhotoShopと完全互換とも言い難く、キーカスタマイズも微妙に痒いところに手が届かない。100k近くする上、ドングル付きだし、なかなか手が出ない。PAP、ToonBoomは今のところちょっと直感的ではなく、PhotoShop準拠I/Fとはほど遠い。

将来的に期待できるソフトとしては、Krita, SketchBook Proが面白そう。KritaはAnimator Pluginなる物を開発している人がおり、これの成果が出ればTVPaint的なことが出来るかもしれない。当然オープンソースなので、これの作成に参加することも出来るがとりあえず最初のアウトプットは個人開発の雰囲気なので待ち。SketchBook Pro は企業用の2015でFlipBoard機能なるアニメ作成機能が実装された。企業用は試用できないのでまだ出来が分からないが、個人用にも将来的に搭載することが表明されている。早くて今年夏頃?

結局今回は、FrameToonを実作業に持って行くことは難しかったので断念。中割枚数自体も少なかったので、PsAxeを一部使いあとはsaiで乗算不透明度落としで中割した。動きの確認はPremiereで。セル単位での確認なら、画像ビューアでも結構行ける。Massigra, XnView, IrFanViewどれでも。

5.仮撮
Premiereで。今回はライセンスを保有している中では最新のCS6を使用。

psdを取り込んだり、セルを組み合わせて動かすだけの仮撮ならば圧倒的にAfterEffectsよりPremiereの使い勝手がよい。シーケンスレイヤーに並べ替える手間が無く、AEよりワンステップ作業を少なくできる。インターフェースが若干独特なので慣れる必要はある。

Ctrl+Rでデュレーションをいじれるのもよい。単色背景も作れるし便利。

注意点としては、シーケンスで指定したフレームオーダーが容易に変えられないこと。シーケンスで「偶数から」にして出力を「プログレッシブ」にしても強制プログレになったりしないため、線が欠ける。あとから変更が出来ないので、シーケンスを作り直して全素材をコピーし直す必要がある。

仮撮出力はH264が速いのでよいと思う。プロファイル上げきってしまえばHD以上のサイズでも出力できる。

6.出力
納品用にpngで出力、白背景の画像は白を透明にする、pngに解像度(今回は200dpi)を記録する。

Ralphaが強力。psd->pngはRalpha+susie pluginでいける。

Ralphaで全て出来るはずだが、透明色の指定がうまくいかないケースがあったので出力後に必ず確認すること。MassigraやXnViewが確認しやすいように思う。

IrfanViewの一括処理でも透明色設定・解像度記録ができる。ただしIrfanViewも透明色処理に何かバギーなところがあり、色反転したことがあった。やはり確認手順が必要。

確認ポイントは5つくらい。しょっちゅうやってれば削れるだろうけど、たまにしかやらないことなのでこのくらい気をつけて見る必要がある。
・全ファイル揃っているか
・透明色設定が出来ているか(ビューアで透明部分背景色を白以外にして確認)
・全色出力できているか(青・赤線が落ちていないか)
・解像度が記録されているか
・色反転しているフレームがないか

毎回出力ミスるのでまあ鬼門ではある。
zipで固めて納品。

うーん、速度が足りない。
あと、ホントこれが決定版っていう中割ソフトないのな。

2014/05/08(木)x264オプション変えた

2014/05/08 24:28 PC(全般)
自分用のメモ。

普段使用しているx264エンコの-threadsオプションを2から1に変更した。

動画エンコと作業を同時にしている時間帯で他の作業が重くなるため。

CPUのコア数を増やせば改善することは明らかだが、intel x86の-E系は現在のラインナップだと100kコースで予算が合わない。消費電力の観点でもイマイチ。

Skylakeデスクトップが6コアになるという噂もあったので、待ってもいいかと思ったのだが最上位でも4コアとの情報が出てきたので色々検討。Haswell-E 6コアが安いとの噂もあるけど、それも先の話なのでとりあえず手を入れて様子見。

4C8T CPUだとエンコそのものは早くなりそうだけど、重さは改善しなさそう。後は何だろ、少しでもボトルネック取り除くためにGPU変えるくらいかなあ。

2014/04/23(水)マルチディスプレイ環境下でのFrameToon

2014/04/23 12:53 PC(全般)
メモだけ。

マルチディスプレイ環境下で、手描きアニメ作成ソフトFrameToonのタブレット座標検出がうまくいかない。

[環境]
マルチディスプレイタイプ: 拡張デスクトップ
ディスプレイドライバ: intel系
タブレット: intuos4 PTK-840/K0
ドライバ: Driver 6.3.7-5

タブレットのかなり狭い領域が画面に割りあたってしまい、縦横比もずれる。

FrameToonそのものについてはサポートが終わっていて、Webページも消えたソフトなので更新は期待できない。

タブレットドライバ側をアプリケーション指定で調整してもイマイチで悩んでいたのだが、

butimaru ログ: Windows8向けSai用wintabに位置調整追加

これを使うとあっさり解決した。

wintab.dllをFrameToonのフォルダに放り込むだけ。
cal.exeでの位置調整は使用していない。

突き詰めていないので、本家ドライバでも解消手段があるのかもしれないがこっちの方が早そうだ。覚えておこう。

2014/02/26(水)Ruby 1.9以降のirbでBackspaceで表示が崩れる

Ruby1.9以降(mswin32版)のirbで、Backspaceでの削除時に表示が崩れる問題。

環境はWindows7(64bit)。

消そうとした文字の1文字手前が消えたり、カーソルがプロンプトにめり込んだりとなかなかに怪しい。

画面にフラッシュされるのも数秒程度の遅延がある場合がある。

内部データは正常、あくまで表示が崩れているだけのようだが煩わしいので直したい。

下参照。

ruby - Backspace and arrow keys aren't working in IRB(Git Bash console) on windows machine - Stack Overflow

とりあえずirbで使用しているreadlineライブラリ周りに問題があるのは間違いない。

--noreadlineオプションを使えば問題は解消するが、Up-Keyでのhistory等は効かなくなる。

mingw32版ではこの問題はない。[2014/03/31 下に追記した]
なんだかめんどくさいなあ。

[2014/03/31追記 ここから]
と上では書いたが、mingw32版でも遅延があった。

irbについては、--noreadlineであっても何か1文字入力すればUp-Keyでhistoryが動くようだ。これでいいことにする。

Windowsの Users\<ユーザ名>以下に設定ファイルを置いてやって、irbはreadline不使用をデフォルトにする。

Users\<ユーザ名>\.irbrc
IRB.conf[:USE_READLINE] = false
ついでに、pryも同様の問題を抱えてるので直したい。
が、pryには--noreadlineオプションがない模様。
しゃーないのでコンフィグを怪しげにいじる。

[参考]
Changing Pry.config.input makes the prompt disappear · Issue #821 · pry/pry · GitHub

pry.config.inputをSTDINに差し替えるとreadlineが外せるらしい。
ただし、これをするとプロンプトを自前で表示しないといけない。

以下を参考に、
Rubyistよ、irbを捨ててPryを使おう - TIM Labs

Users\<ユーザ名>\.pryrc
Pry.config.input = STDIN
Pry.config.output = STDOUT

Pry.config.prompt = [
  proc {|target_self, nest_level, pry|
    nested = (nest_level.zero?) ? '' : ":#{nest_level}" 
    prompt = "[#{pry.input_array.size}] #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}(#{Pry.view_clip(target_self)})#{nested}> "
    print prompt
    prompt
  },
  proc {|target_self, nest_level, pry|
    nested = (nest_level.zero?) ?  '' : ":#{nest_level}"
    prompt = "[#{pry.input_array.size}] #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}(#{Pry.view_clip(target_self)})#{nested}* "
    print prompt
    prompt
  }
]
promptの表示を追加。
プロンプト内容はお好みで。
Pry.config.output = STDOUT行が必要かはちゃんと判断していない。

このやり方では入力後に改行が重複出力される問題がある。
また、起動直後にプロンプトがwarningなどと重なるので1回Enterしないといけない。
個人的には許容範囲内だが気になる人は気になるかも。

pry初心者なので、pryの全機能が不足なく動くかは確認していない。
なお、ターミナル上での日本語文字化けが改善するケースがある(追求していない)。

さて、readline周りの挙動は悩ましい。自分でコンパイルすれば直りそうなのだが、やりたくないなあ… やるんだったら配布までやらなきゃだと思うので。
[2014/03/31追記 ここまで]

さて、--noreadlineオプションは記憶しておくとして、Windowsに入れているRubyの措置について考える。

・mswin32版 -> mingw32版にする?
する。PATH環境変数と、スクリプト起動用のexeパスを書き換えた。

とりあえず、mingw32を避けてるのも変なので使ってみるというのが一つ。

mingw32版はcygwin版のようにcygwin周りのファイルが必要ということはないので、mswin32版とほぼ同じように使っていける(はず)。2.1.0が来てないあたり、若干保守的な様子。高速化はmingw32版の方が効いているとのこと。

mswin32版はgemでコンパイルをかけるような場合ではどうもトラブりやすい。pryにしろ、atomicにしろ自分の腕ではgem installに失敗したし、これを打開するためのコストをかけるほどの余裕がない。exerbとかが標準梱包なのは有り難く、gemで追加しない分にはこちらの方が便利か。オフィスでオフラインで使用する場合などではmswin32版の方がうれしいかも。DXRubyが入ってるのも楽しい。

・CP932なrubyスクリプトのエンコードをUTF-8に変える?
変えない。今回は断念して、マジックコメントでWindows-31J指定が入ってないものには追加。

動いてるスクリプトが、コマンドラインから日本語を含むファイル名を受け取って動くようなものが多いため、テストに時間がかかるというのが一つ。

Windowsのファイル名を扱う以上どうしてもSJISで処理したほうが楽だというのも間違いはない。今後UTF-8混じりのファイル名などでバグが起きない限り、既存のスクリプトはこのままにしておいて新規作成分はUTF-8で作ることにする。

2014/01/18(土)Rubyでtwitterライブラリを動かすまでのあれこれ

環境はWindows7(64bit)。

各所にやり方はまとまっているのだが、ここしばらくのTwitterの仕様変更やRuby特有のwinケアの甘さでちょいハマリしたのでメモ。

なお、gem installの項でmswin32版(ActiveScriptRuby 1.8~2.1全て)は環境構築できなかったので、minGW版 2.0.0の話になる。

gem install twitter周り

gem install twitterが通らない。依存で入ってくる"atomic-1.1.14"パッケージが鬼門の模様。
atomic_reference.c(75) : fatal error C1189: #error :  No CAS operation available for this platform
このエラーで止まる。

mswin32版では結局打開できず。

minGW版で打開できた。
どうやらコンパイラ=gccかつgcc4.8.1以降でないとソース変更なしではコンパイルできないらしい。以下参照。
failed compile with atomic-1.1.14.gem · Issue #32 · headius/ruby-atomic · GitHub

バイナリを集める。

RubyInstaller for Windows
minGW版Ruby最新の2.0.0-p353+DevKit-mingw64-32-4.7.2-20130224-1151を取ってくる。

MinGW | Minimalist GNU for Windows
gccはDevkitの4.7.2では×。MinGWを別に入れてgcc 4.8.1を取ってくる。

以下2箇所にパスを通す。
MinGW\bin
MinGW\msys\1.0\bin

dk.rb init, dk.rb installを終えた後に、
Ruby200\lib\ruby\site_ruby\devkit.rb
を書き換える。
$ diff devkit.rb.orig devkit.rb
10d9
<   ENV['PATH'] = 'C:\\online\\Ruby200\\devkit\\bin;C:\\online\\Ruby200\\devkit\\mingw\\bin;' + ENV['PATH']
devkit内のPATH追加を削っただけ。

これでgem install twitterが通るようになった。

token取得

RubyでTwitterのapiを使ってみる - D-ramu blog
twitter側にアプリを登録するまでは上記参照。

自分の環境ではget-twitter-oauth-tokenは上手く動かなかったので、tokenは以下のやり方で取得した。
RubyでTwitterのOAuth認証のアクセストークンを得る手順 - Qiita [キータ]

ssl周り

いざアクセスしようとすると、sslでエラー。
c:/online/Ruby200/lib/ruby/gems/2.0.0/gems/twitter-5.5.1/lib/twitter/rest/client.rb:143:in `rescue in request': SSL_connect returned=1 errno=0 state=SSLv3 read
server certificate B: certificate verify failed (Twitter::Error)
証明書がRubyから見えてないですね。
以下を参考に設置。
igaiga diary(2013-06-17)

api周り

twitterライブラリの仕様もちょくちょく変わってるので注意。

3分でスッキリ! Oauth 1.0図解とRuby Twitter bot開発 | KumanBlog

よく見かけるドキュメントと、configへのアクセスやconfig内のkey名が変わってる。

RTFM。
File: README ― Documentation for twitter (5.5.1)

2014/01/16(木)clは環境変数PATHからインクルードファイルを探さない

メモだけ。

環境はWindows7(64bit), mswin32版Ruby 1.8(ActiveScriptRuby)。

gemで要コンパイルのライブラリ入れるときにコンパイルに失敗する。
c:\online\ruby\lib\ruby\1.8\i386-mswin32\win32/win32.h(31) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory
NMAKE : fatal error U1077: 'C:\Windows\system32\cmd.exe' : return code '0x2' Stop.
原因。mswin32版RubyはMS VC++をコンパイルに使用する。コンパイラCL.exeは環境変数"PATH"にINCLUDEファイルのディレクトリを記述していても見に行かない。

初歩的な話だが、ここんとこMS VC++コンパイラ触ってなかったのですっかり仕様を忘れていた。

対策は、環境変数INCLUDEに記述するか、/Iオプションで明記してやる。

gemの中いじるのめんどくさいので、eveで環境変数INCLUDEにディレクトリを追加した。

[参考]
/I (追加インクルード ディレクトリ)

そろそろbundler周りも覚えた方が良さそうだ。

2013/12/29(日)WindowsでUSBデバイスが最後に挿された日付を確認する

2013/12/29 16:53 PC(全般)
あるUSBデバイスが最後にPCに認識された日付を確認する方法。
for Windows7。

以下を参考。
NetAgent Official Blog: USBメモリとレジストリ

手順をまとめると、
  1. そのデバイスのベンダ名、デバイス名を把握する
  2. HKEY_LOCAL_MACHINE\SYSTEM\MountedDevicesからベンダ名、デバイス名で該当デバイスのGUIDを探す(バイナリデータ内にベンダ名、デバイス名が入っているので頑張って探す)。
  3. HKEY_USERS\<ユーザSID>\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2から前項で調べたGUIDを持つキーを探す。
  4. 前項で得たキーのタイムスタンプを調べる。
タイムスタンプの確認にはタイムスタンプを見られるタイプのレジストリエディタを使う。もしくは、Windows標準のレジストリエディターを使用しtxt形式でエクスポートして確認する。

以下を参照。
レジストリ・キーの最終更新日時を調べる- @IT

2013/12/28(土)IE8のtable表示バグメモ

かなり以前に書いたメモから起こしてるので、ちょっとおぼろげ。

IE8において、特定の条件下でtableタグのレンダリングに以下の問題が発生する。
問題の内容は、
・表の外枠の上罫線が欠ける
・表の外枠の左罫線が欠ける

先にコードを提示する。
IE8で以下のようなコードをレンダリングすると発生する。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
	<title>test</title>
	<style type="text/css">
		table{
			border-collapse: collapse;
		}
		td,th{
			border: solid 1px black;
		}
		div{
			overflow: hidden;
		}
	</style>
</head>
<body>
	<div>
		<table>
			<thead>
			</thead>
			<tbody>
				<tr>
					<td>a</td>
					<td>b</td>
					<td>c</td>
				</tr>
			</tbody>
		</table>
	</div>
</body>
</html>
条件は以下の通り。

・ブラウザ: IE8
・モード: 標準モード
・tableの親divで"overflow: visible"以外を指定
・border: collapse
・空のtheadタグがある

必要十分かどうかは不明。

主たる原因は、空のtheadタグがあるから。
これを消すと罫線が表示される。

バグという表現を使ったが空theadは元々validate通らないので、IE8が必ずしも悪いわけではない。ただし他のブラウザで線が欠けるものは発見できなかった。

空theadを使うなと言えばその通りだが、IE対応かつ表の固定ヘッダ(Excelのような)を作ろうとするとsampleなどにもちょいちょい出て来るコードなので多少留意をしておくこと。

2013/12/13(金)fi-6130のTWAINがフォーカスを取るのを抑止する

2013/12/13 16:27 PC(全般)
fi-6130等、Fujitsuのfi系ドキュメントスキャナのTWAINドライバウィンドウが1枚スキャンするごとにフォーカスを持っていってしまう問題。スキャン中他の作業、特に入力作業が出来ない。

とりあえずAPIフックで対処可能。

Windows API Hooking Tutorial

上を参考に、SetForegroundWindowを握りつぶせば良い。

最初単にグローバルフック(SetWindowsHookEx)でどうにかなるような気がしていたのだが、WM_ACTIVEAPPメッセージを握りつぶそうとしてもうまくいかなかった(WM_ACTIVEAPPが飛んできたタイミングは捕まえられる。そこで元のウィンドウにフォーカス移すのはちょと……)。

実のところWindowsのメッセージ機構の理解にあやしいところがあって、キーボード・マウス以外のメッセージにキャンセル機構がないのか、SetWindowsHookEx自体の制限か、それともWM_ACTIVEAPPメッセージは通知だけで、ウィンドウのアクティブ処理自体はエクスプローラ側の触れない領域にあるのかといったあたり判断できてない。C++でWin32ネイティブアプリ書いて、WndProc内であれこれやってみれば結論が出るんだろうけど、今回は時間がないので次回以降の課題。

.NET系でもマウス・キーボードのグローバルフックがかけられることは覚えておこう。

ソース整理できたらそのうち載せたいけども、元コードのライセンスがわからないな……
OK キャンセル 確認 その他