[etc]新しいpc買って(windows8.1)でssh使ってcmdからgithubとかをcloneできるようにするのに悩んだときのメモ

ssh回り、いつも悩みながら適当に設定してなんとなく使えるようになっているのだけど、今回も相当悩んで、やっとなんとなく動くようになったので、今後同じことを繰り返すであろう未来の自分へのメモ。
(これの通りにやって動くようになるかはわからないので過度な期待しないように)


■SourceTreeのインストール

cmd使うから厳密にはいらないかもしれないけど、これを使った”おまじない”が必要となる。
そして、puttygen/pageant/plinkもここに含まれている。
(C:\Program Files (x86)\Atlassian\SourceTree\tools\putty)

■ssh用の公開鍵、秘密鍵を作る

puttygenを使って、公開鍵・秘密鍵なるものを作る
(C:\Program Files (x86)\Atlassian\SourceTree\tools\putty/puttygen.exe)
保存するときのファイル名(この名前が大切かもしれない)
秘密鍵:id_rsa.ppk
公開鍵:id_rsa.pub
※OpenSSH形式の秘密鍵・公開鍵に変換しておく必要があるかもしれないのでやっておく
→Conversions → Export OpenSSH key:id_rsa(拡張子なしとする)

参考 → SSH(PuTTY)設定

秘密鍵、公開鍵の保存場所はとても大事
例:C:\Users\393\.ssh\id_rsa.ppk
カレントユーザー直下に.sshフォルダを作ってそこに置く。
(※.sshフォルダは、cmdから、mkdirコマンドを使わないと作れない)

■githubにsshキーを設定する

githubにログインして、settings→SSH keys → Add SSH keyで、
key欄にはさっき作ったやつでputtygenに表示されているkeyをコピペする。

■Gitのインストール

gitfor windowsからDownload.
※インストール時のラジオボタンの設定はちょっと変更する。

・Adjusting your PATH environment > Use Git from the Command Pronmpt
→cmdで、gitコマンドが使えるように環境変数が設定される

・Choosing the SSH executable > Use(Tortoise)Plink
→sshのときplinkを使うように環境変数が設定される
(TortoiseってあるけどインスコしてないせいかplinkまでのpathはSourceTree内のplink.exeになってる)

・Configuring the line ending conversions > Checkout as-is,commit Unix-style line endings
→改行コードが変わる(ここはデフォルトでもいいかも)

cmdでgitをたたいてなんかでればうまくいっている

■pageantにprivate keyをadd

pageantを起動して上で作った秘密鍵をadd keyしておく。
(C:\Program Files (x86)\Atlassian\SourceTree\tools\putty/pageant.exe)
※スタートアップに登録しておくといちいち起動しなくていいから楽。

■githubのリポジトリをcmdからクローン(失敗するはず)

cmdを開いて、githubのリポジトリをcloneしてみる
例:git clone git@github.com:hoge/moja.git

こんなエラーがでるはず。
Disconnected: No supported authentication methods available (server sent: publickey..)

■SourceTreeでクローンしてみる

SourceTree上でsshパスを使って、githubのcloneを試みると、初回だけなんかの認証的なYes/noなポップアップがでる
↓こんなの
popup

Yesを選択する。(これが上に書いていた”おまじない”)
(設定に間違いはなければSourceTree上でもこのままcloneできる)

■githubのリポジトリをcmdからクローン

“おまじない”のおかげでさっきでたエラーはでなくなっている
githubに限らず、bitbucketとかbacklogでもSSHキーを登録したあと1発目のcmdからcloneしようとすると上述のエラーがでるので、SourceTreeでクローンしようとすると、認証のポップアップがでるから、それをOKしてやれば、その後、cmdからもcloneとかできるようになるっぽい。

■intellij IDEA上でのgit操作

上の設定ができてる前提で、
setting/VersionControl/Git/SSH executable:Buit-in
でいけた。

[AS3][?]画像ファイルをEmbedしても正常に表示できないことがある

(まだ、ちゃんと検証してないけど)
FlashCS4で発生した奇奇怪怪な現象。

よく似た画像ファイル2枚をEmbedで埋め込むと1枚しか表示されない。
さらにどっちが表示されるかは、パブリッシュするたびに異なる。

発生した条件。
画像の縦横幅が同じ。
ファイルサイズの誤差が1kb未満
(例:24kbと24.5kbとか)
もちろんこの二つのファイル名は変えてある。

どうもFlash側でこの条件のファイルは同じ画像と認識されてるくさい。
で、結果的には、前のエントリと似たようなことになるんではないかと思う。
あとでちゃんと調べる。

つまりは、IDEでEmbedなんて使うなってことらしい。

[AS][?]画像のEmbedは1回しか使えない?

よくわからんけど、他のクラスでEmbed済みの画像を別のクラスでEmbedしても表示もされなかった。
エラーも出ないから、かなりはまった。
とりあえず、あとで検証する。

[AS][?]FLV読み込み時のonMetaDataを取得するタイミングがわからない

ちょっと気持ち悪いのでメモ

◆現象◆
簡単なFLVプレイヤーでインターフェースは再生ボタンと、頭出しボタン。
FLVPlaybackではなく、Videoオブジェクトによる自作。
この記事にかいてあるLoadMovieクラスの拡張版のような感じ。
(実際はもっとごちゃごちゃしてるのであとで時間ができたら簡略版を作って検証・記載する、つもり)
NetStream.clientにて、onMetaDataを取得するようにしてある。
NetStream.play(“xxx.flv”)で、MetaDataが取得は問題ないのだけど、頭だしボタンを押したときもMetaDataが取得される場合がある。
(読み込むFLVファイルによっては、頭出ししてもMetaDataが取得されない場合がある)
頭出しの処理は、NetStream.seek(0);

seek(0)から再生させたときにonMetaDataを取得するということなのか?
(seek(0)のタイミングではなくって、そこから再生させたら、みたいな感じ)
flvファイルによって、上記条件でMetaDataを取得したり、しなかったりという感じが???なのです。
原因よくわからんのでとりあえず例外処理書いたけど、なんか気持ち悪い。

[JSFL][?]JSFLでモーショントゥイーン(色)させる

久しぶりにタイムラインでの作業。
MCのカラーを黒→赤、または赤→黒といったモーション(時間は4フレーム)で行うという作業が大量に発生。
最初はとりあえずクラシックトゥイーンにショートカットを割り当ててシコシコやっていたけど、よく考えたら、全部コマンド化して一括に実行すればいいんじゃね?と思い、試してみました。

まずはヒストリパネルから、必要な手順を選んでjsfl化しようと思ったのですが・・・
フレームの移動の部分をjsfl化してくれないので無理ということに。
※ヒストリパネルからコマンド作成は、↓の記事が参考になりました。
Mattari Blog:jsflのすすめ

じゃあ、足りない部分は自分でjsfl書いてみる!ということでjsfl初チャレンジ!!

で、できたのがこちら。

// 赤になる
// This command was recorded by Adobe Flash CS4.

//タイムラインを変数で保持
var path = fl.getDocumentDOM().getTimeline();

// インスタンスの濃淡: '#ff0000', 100%
fl.getDocumentDOM().setInstanceTint('#ff0000', 100);

//フレーム数を取得
var fr4 = path.currentFrame-4;

//指定したフレームをキーフレームに変換
path.convertToKeyframes(fr4);

//指定したフレーム数をモーショントゥイーンに変換
path.createMotionTween(fr4);
// 黒になる
// This command was recorded by Adobe Flash CS4.

var path = fl.getDocumentDOM().getTimeline();

// インスタンスプロパティ: colorMode, none
fl.getDocumentDOM().setElementProperty('colorMode', 'none');

//フレーム数を取得
var fr4 = path.currentFrame-4;

//指定したフレームをキーフレームに変換
path.convertToKeyframes(fr4);

//指定したフレーム数をモーショントゥイーンに変換
path.createMotionTween(fr4);

使い方としては、トゥイーンを終了させたい位置にキーフレームを打って、上記のコマンドを実行すると、
それぞれ4個前のフレームから始まるモーショントゥイーンが設定されます。

本当は、最初のキーフレームを打つ部分もjsflにまとめたかったのだけど、その処理を入れると色のプロパティを変更する処理が実行されなかったのよね・・・
なんかできそうな気はするけど、こんどえらい人に聞いてみよう。

[AS][?]progression addCommandのexecute()について

_onload(),_onInit(),_onCastAdded(),_onCastRemoved(),_onGoto()などのoverride系のメソッドの中のaddCommand()は、execute()無しで、自動的に実行されるみたい。

addCommand()はリスト(CommandList?)にコマンドを追加するメソッドで、色んなクラスに入っている。
が、しかし、
CommandListクラスのメソッドのaddCommand()と
SceneObjectクラスのメソッドのaddCommand()とでは
動作の意味が若干違うみたい。(ドキュメントに書いてあることが違うし)

[AS][?]xmlから取得したデータをBoolean型として認識するには?

なんかうまくできなかった。

[AS][?]loaderInfo.addEventListener( Event.COMPLETE, _complete );

loaderInfo.addEventListener( Event.COMPLETE, _complete );
↑これってメインのタイムラインとかドキュメントクラスには書いといた方がいいのかな?

[AS][?]progression ParallelListとかSerialListについて

まずはドキュメントのサンプルより

パラレルリストの中にパラレルリストを作って実行しているがメリットがわからない・・・

var list:ParallelList = new ParallelList();
list.addCommand(
new ParallelList( null,
new Trace("この Trace コマンドは同時に実行されます。" ),
new Wait( 1000 ),
new Trace( "この Trace コマンドは同時に実行されます。" ),
new Wait( 1000 ),
new Trace( "この Trace コマンドは同時に実行されます。" )
);
list.execute();

コマンド内に書くとexecute();無しでも自動で実行されるのでシンプルな感じ
↓これで上と同じ意味になってるっぽいけど厳密には違うのかしら?

addCommand(
new ParallelList( null,
new Trace( "この Trace コマンドは同時に実行されます。" ),
new Wait( 1000 ),
new Trace( "この Trace コマンドは同時に実行されます。" ),
new Wait( 1000 ),
new Trace( "この Trace コマンドは同時に実行されます。" )
)
);

[AS][?]progressionでのprogression.containerについて

gihyoでのプログレッション特集4のサンプルでの疑問点

各シーンの閉じるボタンを表示リストに追加する際に、各シーンに割り当ててるページ(CastSprite)ではなく、SceneObject自体に追加している。
これは、閉じるボタンの戻り先を設定をする際、SceneObjectじゃないと、sceneId:progression.root.sceneIdが使えないから・・・でいいののか?
(CastSpriteはprogressionプロパティをもっていないので)

それでも、CastSpriteに閉じるボタンをおきたいときは、
progression.root.sceneIdをtraceすると中身は”/index”だったので、、、
var sId:SceneId = new SceneId(“/index”);とSceneIdのインスタンスを用意して
sceneId:sId;
としてあげればOKでした。