2017-02 << 2017-03 >> 2017-04

2017-03-31 (金)

出かける予定だった気がするけど,結局引きこもって本読んだりコード書いたりしていた.今週1週間有給とったけど,あと1ヶ月くらい休みたい.

JavaScriptマクロプラグインにタイマー周りの実装を追加.

メタセコイア上で簡単なゲームが動くようになった(目的を忘れている感がすごい).

mqogame.png

キー入力とか無いので,オブジェクトの選択状態で操作.

* 3Dプリンタ

ファームウェアはMarlinというOSSのコードがベースっぽいので色々いじりたいのだけど,パラメータ調べるの面倒でそのまま使っていた.

GitHubに同じ機種持ってるぽい人のリポジトリがあったので調べる手間が省けた.

https://github.com/camalot/alunar-prusa-i3-marlin-i3-firmware

試しにこれで動かしてみたけど,X軸とエクストルーダの回転方向が逆だな.ホーム位置とか直したりSDカードサポート有効にしたりして様子見.

あとは好きにできそうなので,Bluetoothモジュール繋いで無線化したりしよう.

コードを読むと,G02,G03の円弧とか,G05のB-スプラインとかが実装されてるけど,STLを経由するスライサだと使えないのがもったいない.

2017-03-30 (木)

Androidアプリ書いたりする日.Java書くのも久しぶりな気がする.

気づいたら Chrome + IntelliJ 2つ, + VisualStudio 3つ 起動しててメモリ足りなくなっていた.一枚あたり32GBのSODIMMメモリまだ売ってないのかなあ.

V8触りながらNode.jsのコードも読んでたけど,モジュールをrequireするとき,存在しないはずのファイルスコープが作られててどうやってるんだと思ったけど,とても単純だった.

https://github.com/nodejs/node/blob/7139b93a8b4e9115167954fbb507feaa01d79129/lib/internal/bootstrap_node.js#L524

読み込んだソースを文字列として加工して関数に閉じ込めている.

あとV8のAPI,頻繁に変わりすぎでStack Overflowとかで見つけた情報が大抵古くなってるのが面倒.NodeではNANで変更を吸収してるのか.

2017-03-28 (火)

C++11で文字コードどう扱うの調べたりしていた.

std::locale sjis(".932", std::locale::ctype);
typedef std::codecvt<wchar_t, char, std::mbstate_t> mbCvt;
const mbCvt& cvt = std::use_facet<mbCvt>(sjis);
std::wstring_convert<mbCvt, wchar_t> sjisConverter(&cvt);
std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> utf8Converter;


std::wstring ws = sjisConverter.from_bytes("sjis string");
std::string utf8 = utf8Converter.to_bytes( ws );

std::wstring ws2 = utf8Converter.from_bytes("utf8string");
std::string sjis = sjisConverter.to_bytes( ws2 );

これで,wstring と sjis文字列とutf8文字列の相互変換ができるっぽい.mbstowcs系の関数は使いたくないなと思ってたので良かった.

メタセコイアのプラグインのために,久しぶりにWindowsで実行されるコード書いたけど,ワイド文字(UTF-16)とマルチバイト文字(CP932)とUTF-8が入り乱れててひどいな.

ほとんどの関数はwchar_tなのに,オブジェクト名とかはマルチバイト文字返すのが残念.

2017-03-27 (月)

飲み会.

VisualStudioが一番使いやすいIDEだと思ってたけど,何年かIntelliJ使って久しぶりにVisualStudioに戻ってきたら色々面倒に感じた.

https://github.com/binzume/mqo-jsmacro-plugin

jsmacro.png

作りかけのプラグインを置いておいた.

V8でSetIndexedPropertyHandlerして配列として振る舞うオブジェクト,何回かアクセスするとv8内でキャッシュされるのか,先頭の何要素かのデータが知らない場所に書き込まれてる気がする...C++側のデータの更新処理を呼んでくれないと困るのだけど言うことを聞いてくれない.

謎な挙動だなと思ってコード読んでたけど,IndexedPropertySetterCallback は ReturnValueをセットしないといけないのか.通常のSetterと違ってReturnValueの型がvoidじゃないのに気付いてなかった.

V8の作法が分からないので嵌まる場所多いのだけど,デバッグがむずい.

2017-03-26 (日)

3Dプリンタで遊びつつ,メタセコイアのプラグイン書く日.

* v8とか

C++側の配列をJavaScriptでArrayとして扱いたかったのだけど,JSArrayとかinternalなnamespace内にあるしで悩んでたのだけど,SetIndexedPropertyHandlerして,lengthプロパティ追加して,SetPrototype(Array::New(isolate))するだけで Array.forEachとかは使えるようになった.

本当はArray::NewせずにObjectTemplate作る時点でどうにかしたいのだけどちょっと読んだだけだと良くわからない.

2017-03-25 (土)

寝る.

1週間休み.

2017-03-23 (木)

君の名は。そろそろ見ないとと思ってたので見てくる.

2017-03-21 (火)

しばらく忙しかったけど今月(というか今年度)やる仕事ほぼ終わったので,来週休むことにする.

2017-03-20 (月)

オーディナルスケールそろそろ見ないとと思ってたので見てくる.

2017-03-19 (日)

久しぶりにC++でコード書いている.

2017-03-18 (土)

最近のV8をVisual Studio上でライブラリとして使うときのメモ.いろんな情報が古かったりして嵌まるので.

Visual Studio 2013のソリューションファイルが生成される

2015と2013両方ある環境では2013が優先されてしまうみたい.そして,2013だとconstexpr周りでエラー出る...

  • GYP_MSVS_VERSION=2015 しておく

ドキュメントには2013でもいけると書いてあるので,アップデートしてないせいかもしれない.

ビルド時にPython 2.7が必要

depot_tools は勝手にPython2.7のバイナリをダウンロードしてきて使ってるみたいだけど,Visual Studioからビルドするときもpythonコマンドを実行してるやつがいる.Python3.5だとビルドできない.

  • とりあえず, depot_tools/python276_bin にPATHを通しておく.

未だに2.7が世の中で使われてるの,半分はGoogleのせいな気がしている...

size_tをintに入れている

警告をエラーとして扱ってるとビルドできないので,プロジェクトの設定で無視するようにする.

*.lib たくさんある

昔は,v8.lib とかだったみたいですが,なんかたくさんある.

  • v8_*.lib と icu*.lib を依存に加える.

natives_blob.binが無いと死ぬ

Isolate::New() するときに GetBuiltinsCount() 内でOS::Abort()が呼ばれて死ぬ.InitializeExternalStartupData() で指定したディレクトリにnatives_blob.binがあれば死なない.

  • v8_external_snapshot.lib じゃなくて v8_nosnapshot.lib をリンクする

InitializeExternalStartupData()ではエラーでないので原因わかりにくい.

2017-03-17 (金)

www.binzume.netへのIPv6のリクエストの割合

  • iPhone 9.3%
  • Android 16%
  • Windows 9.6%
  • Mac OS X 12%

1年半前 と比べると大分増えている.

Androidの増加が顕著なののは,IPv6対応で安いMVNOのsimを使っている人が多いんだろうか.

2017-03-15 (水)

税務署行って申告書出して,そのまま会社行く途中で銀行へ.なんとか銀行閉まる前に終わった.

ここ何年か,最終日に確定申告してて大分危ない.

2017-03-14 (火)

会社行く前に税務署行こうと思ったけど,雨降ってたので税務署行くのは明日にする.

2017-03-13 (月)

確定申告書作ったりする.

2017-03-09 (木)

3Dプリンタで大き目のものを出力しようとしたら14時間かかる計算だったので会社行く前に動かしておく.見えないの不安なので,以前使ったカメラモジュールを毎分写真をアップロードするように設定してプリンタの前に置いておく.

たまに様子見てると,途中で出力失敗していた...帰って確認したら,エクストルーダーのネジが緩んでて空転していた.

2017-03-04 (土)

JavaScript使いたかったのでV8をビルドしたりする.ビルドツールがninjaだったりするけど良くわからない.

Visual Studio 2013と2015が両方ある環境だと2013が優先されてしまうのか.そしてconstexpr使われててVisual Studio 2013だとビルドできない.GYP_MSVS_VERSION で2015を指定したら上手く行った.そのままの設定だと,size_tからintへの変換がエラーとして扱われるのだけど,なんか間違ってるのかな.