日記
この日記はフィクションです.登場する人名・団体名・地名・職業などはぜんぶ架空のものです. 写真のような画像は画像生成AIもしくは念写によるものです.
2014-06-30
チームに配属予定の新卒とご飯食べに行ったりした.
メモ
http://doda.jp/engineer/it/guide/001/17a.html
スマートフォンエンジニアが増える感じにしたかったはずだけど,インタビュー中も仕事とあまり関係ないことばかり喋ってた気がするし,本当にこれで良いのか感がある.
2014-06-29
今週コード書いてないなと思って,何年か前に書いたAndroidでmqo表示するプログラムを昨日発掘したの思い出して,いじったりする日.
ニコニ立体にmqo投稿するときのメモ.
ミラーと曲面はサポートされてないのでアップロード前にフリーズする.あと,常に裏面非表示っぽいので必要な部分の面の両面化する.
編集時は,「変更の適用」と「保存して公開する」ボタンが個別にあるの気をつける.
2014-06-28
賞味期限切れた食材を消費する日.
先週の続きのJavaScript書くつもりだったのだけど,気づいたらMetasequoia起動してた.1周間も経つとやりたいこと変わってしまうし,ダメっぽいな.
[3dcg] 色々
MMDの動画見てて,3Dモデリングできるようになっておきたいと思ったので,久しぶりにMetasequoia触り始める.
Metasequoia 4にも慣れてきた.
デバッグのために,色々なPMDのデータ見てたおかげで,大分勉強になったっぽい(?)
あとMetasequoia 4からOpenSubdiv使えるようになったのは良いな.

服着せて,髪の毛付けたら,それっぽくなった.
この時点で昔ゲーム用に作っていつもデバッグに使ってたモデルとくらべると頂点数4倍くらい.まだ大雑把だけど,思ったより増えないな.
トラックポイントで作業してるせいか,指が痛くなってくる. キー操作だけで今選択してる頂点の座標いじったり,同じ面の隣接してる頂点に選択を移動するショートカットキーが欲しい. プラグイン書けば出来るのかな...
2014-06-27
熱は下がったので会社へ.
2014-06-26
夜帰ってきて寝てそのまま12時間寝ていた.
昨日から熱っぽかったのだけど,やっぱり風邪引いた気がする.
会社休んで,夜まで寝る.
夜,少し動けるようになったので,コンビニ行ったり,https://github.com/binzume/mikumikudroid を少しいじったり.
タッチパネルからまともに操作できるように計算まじめにやる.
メモ:
カメラ移動(T1) → 手動回転行列(R2) → センサーでの回転行列(R1) みたいな順番の変換を行ってるので,
Dispaly = R1 x R2 x T1 x Model
ディスプレイ上での回転操作(R)を,
R2 = R1^-1 * R * (R1 x R2)
とすれば良さげ.
移動(T)も同様に,
T1 += (R1 x R2)^-1 * T
あとは座標系に合わせて適当に符号をいじる.
2014-06-22
今日の成果 http://binzume.github.io/secure-chat/public/test/rsa.html
安全なチャットサービス欲しいなと思ってjsの公開鍵暗号化ライブラリ探す.
サーバサイドでの暗号化は,サーバを管理している組織なり人なりを信頼しないといけない時点で不安なので,クライアントサイドで暗号化するしか無い.とくに個人だとVPSとかAWSとか使うので,サーバの物理的な安全性には手出しできない.
本来は,ブラウザがSSLのインターフェイスをjsから使えるように公開するべきだと思うのだけど...
[JavaScript] JSEncryptを使ってみる
最近はJavaScriptの実行速度もかなり良い感じになってきたので,RSAの鍵生成とかも実用に耐える気がします.
JavaScriptでRSA暗号を扱うために,JSEncryptを使ってみます.MTIライセンス.
https://github.com/travist/jsencrypt
まず,適当に bin/jsencrypt.js を読み込む.
RSAキーを生成してみる.
var crypt = new JSEncrypt({default_key_size: 1024});
console.log(crypt.getKey());
console.log("pub:" +crypt.getPublicKey() );
console.log("pri:" +crypt.getPrivateKey() );
pem形式で出力される.
getKey()を呼ぶと,鍵がなければ新たに作るらしい.
512ビットだと一瞬だけど1024だと1~2秒待たされる. 2048とかだと結構待たされるので,非同期にしたほうが良さげ. getKey()に何か関数渡すと非同期になるっぽい.
キーを生成するときの乱数は,window.crypto + マウスイベントを使っている. まぁ,大丈夫そうに見える.
setKeyで,pemフォーマットの鍵を読み込める.
var crypt = new JSEncrypt({default_key_size: 1024});
crypt.setKey(document.getElementById('ras_key').innerText);
console.log(crypt.getKey());
console.log("pub:" +crypt.getPublicKey() );
あたりまえだけど,公開鍵を setKey()に渡した場合は,getPrivateKey()は呼べない.
得られるのはPEM形式の鍵なので,SSH形式が欲しい場合はRFC4253を読みつつ,
function hex2b64(h) {
var len = h.length / 2;
var buf = new Uint8Array(len);
for (var i=0; i<len; i++) {
buf[i] = parseInt(h.substr(i*2,2),16);
}
return btoa(String.fromCharCode.apply(null, buf));
}
function int2hex(n) {
return ("0000000" + n.toString(16)).substr(-8);
}
function sshkey(key) {
var e = "0"+key.e.toString(16);
var n = "0"+key.n.toString(16);
var e = e.substr(e.length%2);
var n = n.substr(n.length%2);
var hex = int2hex(7) + stohex("ssh-rsa") + int2hex(e.length/2) + e + int2hex(n.length/2) + n;
return "ssh-rsa " + hex2b64(hex);
}
console.log(sshkey(crypt.getKey()));
みたいにすればそれっぽくなる.(ちゃんと出来てるかは確認してない)
hex2b64()関数は,JSEncrypt内にあるけど外から呼べないのでコピペしてくるほうが良さげかも?.
自分でパースした公開鍵を読み込むには,RSAKey や BigIntegerを自分では作れないので,setKey(null)で初期化したあと,getKey().setPublic(n,e)でセットするしかなさそう(?).
あとは,encrypt(), decrypt()メソッドが使えるので良しなに.
色々やるにはJSEncrypt.js使うより,JSEncryptが中で使ってるRSAライブラリを直接使うほうが良さそう.
RSASSA-PSS-SIGNを実装する
RSA使えるの確認して,準備が整ったので署名とかを実装してみる. RSAベースの電子署名で安全だとされているものに,RSASSA-PSSがあります.
RFC 3447 の Section 8と9 を読めば良さそう.
RFC読んでいけば実装できそうなのですが,全体を見渡さないと意味がわからないので調べると,わかり易そうな解説はロシア語のWikipediaが見つかる. 見た感じ,わかり易そうなのだけど,そもそも読めない...
ハッシュ関数はSHA1を使うことにして,光成せんせのこれを使う.
http://labs.cybozu.co.jp/blog/mitsunari/2007/07/sha1_1.html
先,長い.
リンク:
2014-06-18
ニコニコPlayer(仮)を更新.
レビューでログインできなくなったという報告が,たぶん不正ログインされてしまったアカウントだろうと,それっぽい場合は設定画面からのログイン時にブラウザを開く処理を追加.あまり意味はなかったかも.
2014-06-16
眠い...
[Android] スマホのカメラを使った3D形状取得(仮)
昨日の続き.
画像から物体の3D形状を推定するために,多くの場合,複数の視点から見た画像を入力として処理しますが,カメラが2つ以上必要か,もしくはカメラを移動して2回画像を取得しないといけないのがネック(?)です.
他の方法として,フォーカス機構のあるカメラならカメラを動かさなくても,フォーカスを変えながら撮った画像を使えば,奥行きの情報が得られそうなので試してみました.
AndroidのカメラAPIにはマニュアルフォーカスが無いので, FOCUS_MODE_INFINITYにした状態からFOCUS_MODE_AUTOにした時にプレビュー画像を連続で処理することで無理やりどうにかします.

適当に作ったアプリで写真を撮ると,

こんな感じで奥行き情報が取得できます(赤くなるほど手前にある.0の箇所は上手く取れてない気がする.上3行と左2列くらいも,バッファ初期化忘れててゴミが入ってます). 複雑なことは全くしていなくて,ブロックの情報量が最大になる時間を表示しているだけです. このままだとノイズも多いし解像度も低くて使い物にならないけど,画像の輪郭情報などを使って補完したり,ブロックを適当な窓関数で扱うとかすればかなりマシになりそうです.
端末のカメラの特性に大きく依存するのと,AndroidのCamera APIから現在のフォーカスの状態とか取得出来ないので,時間から推測するしかなくて結構つらい.
さらに,FOCUS_MODE_INFINITYからFOCUS_MODE_AUTOにしてフォーカス合わせしたときの レンズの動きが1方向では無いので,経験則で変なパラメータをいじらないといけない.
理想は,1枚写真撮るだけでテクスチャ貼った状態の3Dモデルをグリグリ動かせるアプリ作りたい.(誰か作ってくれないかなあ)
あとは背景と対象物を分離したいときのヒント情報としてはこれくらいでも使えそうか.
すぐ出来そうだなと思いつつ,実際3~4時間試しただけなのだけど,手をつけるのに時間かかるのどうにかしたい.
あんま実用的ではないけど,ネタとしては面白い気がするので,同人誌の記事として書くか...
2014-06-15
そろそろ暑くなってきたので,エアコンのフィルターと室外機の掃除とかした.
[Android] カメラのフォーカスで遊ぶ
2013-09-30あたりの続き.
カメラのフォーカスを調節している間の,プレビュー画像を適当なサイズのブロックにして処理する. とりあえず実現できるか試しただけなので,とても適当.
いけそうな感じがしてきた.
ニコニコPlayer(仮)
動画が見れない報告が,レビューでたくさん出ているのでニコニコPlayer(仮)をいじる.
Flash Playerがインストールされていると,取得する動画の判定に問題が出そうなのて修正して様子見.これで治ると良いな.
朝にアップデートしたけど,直した気でいただけだったので,午後もう一度アップデート.
flv形式の動画を再生するために使ってるFlash Player周りの実装が酷い感じ&最近はほとんどの動画がmp4だしそろそろ消すか悩ましい.
2014-06-14
本屋行って,ユニクロ行って,髪を切る
2014-06-13
今日普通に木曜日だと思って仕事してたのだけど,金曜日だった. 普段は金曜日のはずの予定が入っていて変だとは思ったのだけど.
2014-06-11
最近天気が悪い気がしてたけど,もしかして梅雨ってやつか.
何度か不在着信があったり留守録にメッセージ入ってたり, なんとか電話に出たけどあまり気乗りしないので明日かけてくださいと言ったりで, 3日かけて電話でコミュニケーションを取ることに成功した. そして面倒そうだったので,メールで資料送っといてくださいと頼んだ. 電話応対能力が圧倒的に足りない.かといってgmailの未読件数もどんどん増えるし,メールも駄目な感じ.
飲み会.
2014-06-10
なんか仕事が忙しくて仕事できてない気がする
2014-06-06
OpenSSLを更新するついでにSSL証明書を更新.
StartSSLのSSL証明書の更新手順メモ
Webサーバの証明書はたまに作るので大体大丈夫. 忘れそうで危ないのはクライアント証明書.これも1年で切れる.
- "Validations Wizard"の"Email Address Validation"でメールアドレスを認証
- "Certificates Wizard"で "S/MIME and Authentication Certificate"からクライアント証明書を発行
- 正常に発行されるとそのままインストールされるので,念のためエクスポートしてバックアップ
次にWebサーバの証明書を更新.すでに使ってる秘密鍵がある前提.
- CSRを作る: openssl req -new -key 秘密鍵 -out CSRファイル.csr
- "Validations Wizard" でドメインを認証する
- "Certificates Wizard"で "Web Server SSL/TLS Certificate"
- 秘密鍵作れという画面が出るけど,自前のがあるので "Skip"
- フォームにcsrのテキストを張り付ける
- SSLを使うドメイン選んで,ホスト名を入れる
- pem形式の証明書が出てくるので保存
あとは,ApacheとかNginxに設定.NginxはCA証明書とかの設定はないのでつなげてchainedな証明書にする.
更新時期がばらばらだと面倒なので,全ドメインの証明書を再発行しておこうと思ったけど,期限が迫っていない証明書は一度無効にしてからじゃないと再発行できなかった. そして,StartSSLは証明書の Revocation Requestには$25くらいかかる. 悩ましい.
2014-06-05
雨...
2014-06-02
なれない仕事して疲れる一日でした.

