2018年12月25日火曜日

athrill を MSYS2 環境でビルドする

次の現場で tmori/athrill を使いそうなのでとりあえず環境構築までやってみる。

しかし、 athrill リポジトリに格納されているバイナリが、MinGW 用と Linux 用の 2 種類のようで、 そのまま MSYS2 環境で使えない。(何かの共有ライブラリを入れれば動くかもしれないが...)

なので、MSYS2 の gcc を使ってビルドしなおす。

ちなみに、 WSL か docker コンテナを使うのが推奨されているっぽいです。

環境

MSYS2 のベース環境アップグレード

pacman -Syu

MSYS2 MinGW 64bit を再起動してもう一度 pacman -Syu

pacman -Syu

必要パッケージのインストール

pacman -S make mingw-w64-x86_64-gcc git

athrill の取得とビルド

取得

git clone https://github.com/tmori/athrill.git

ビルド

athrill, athrill2, athrill_remote をビルドする。

cd athrill

# athrill のビルド
cd trunk/src/build/target/v850esfk3
make

# athrill2 のビルド
cd ../v850e2m
make

# athrill_remote のビルド
cd ../../../remote/remote_cui_client/
make

動作確認

athrill/bin/windows 内の athrill, athrill2, athrill_remote を叩いてみる。

$ cd PATH/TO/athrill/bin/windows

$ ./athrill
Usage:athrill -m <memory config file> [OPTION]... <load_file>
 -i                             : execute on the interaction mode. if -i is not set, execute on the background mode.
 -r                             : execute on the remote mode. this option is valid on the interaction mode.
 -t<timeout>                    : set program end time using <timeout> clocks. this option is valid on the background mode.
 -m<memory config file>         : set athrill memory configuration. rom, ram region is configured on your system.
 -d<device config file>         : set device parameter.

$ ./athrill2
Usage:athrill -m <memory config file> [OPTION]... <load_file>
 -i                             : execute on the interaction mode. if -i is not set, execute on the background mode.
 -r                             : execute on the remote mode. this option is valid on the interaction mode.
 -t<timeout>                    : set program end time using <timeout> clocks. this option is valid on the background mode.
 -m<memory config file>         : set athrill memory configuration. rom, ram region is configured on your system.
 -d<device config file>         : set device parameter.

$ ./athrill_remote
Usage: athrill_remote <athrill debug command>

ヘルプメッセージが表示されれば OK.

...athrill2 もヘルプの表記は athrill なんですね。

以上。 とりあえず実行可能な状態にはなったのでこれまで。

2018年11月27日火曜日

embulk-output-chart を作ったけどあんまりうれしくなかった話

mikoto2000/embulk-output-chart を作っていろいろ遊ぼうとしたけれど、そもそも機能が足りないという感じであんまりうれしくなかった。

環境

やろうとしたこと

vim/vim-history リポジトリから、日ごとのコミット数をグラフにした(したかった)。

作業記録

概要としてはこんな感じ。

  1. vim-history リポジトリをクローン
  2. git log を xml として出力
  3. xml から sqlite に取り込み
  4. sqlite に集計クエリを投げつつチャート表示

vim-history リポジトリをクローン

git clone https://github.com/vim/vim-history.git
cd vim-history

git log を xml として出力

メッセージのエスケープ問題を回避するため、 xml の CDATA を活用することにした。

練習用に、今回使わない情報も入れている。 必要に応じて追加削除修正する感じで。

date は、書いた時の日付ということで、 author date のほうを取得している。

echo "<xml>"$(git log --pretty=format:'<commit><hash><![CDATA[%H]]></hash><subject><![CDATA[%f]]></subject><body><![CDATA[%b]]></body><author><![CDATA[%aN]]></author><commiter><![CDATA[%cN]]></commiter><author><![CDATA[%aN]]></author><date><![CDATA[%aI]]></date></commit>')"</xml>" > history_tmp.xml

xml から sqlite に取り込み

必要プラグインのインストール

embulk.bat gem install embulk-parser-xml embulk-output-jdbc

sqlite 用 jar ファイルのダウンロード

Maven リポジトリから sqlite-jdbc-3.25.2.jar をダウンロードしてカレントディレクトリに配置。

設定ファイル記述

in:
  type: file
  path_prefix: ./history_tmp.xml
  parser:
    type: xpath
    root: //commit
    schema:
      - {path: hash, name: hash, type: string}
      - {path: author, name: author, type: string}
      - {path: date, name: date, type: string, timestamp_format: "%Y-%m-%dT%H:%M:%S.%L%z", timezone: "+0000"}
      - {path: body, name: body, type: string}
out:
  type: jdbc
  driver_path: './sqlite-jdbc-3.25.2.jar'
  driver_class: 'org.sqlite.JDBC'
  url: 'jdbc:sqlite:vim_history.sqlite3'
  table: vim_history
  mode: 'replace'
  create_table_constraint: PRIMARY KEY(hash)

embulk 実行

embulk.bat run .\xml2sqlite.yml

sqlite に集計クエリを投げつつチャート表示

必要プラグインのインストール

embulk.bat gem install embulk-input-jdbc

embulk-output-chart のクローン

gem 化されていないので、 git clone で持ってきてビルドする。

git clone https://github.com/mikoto2000/embulk-output-chart.git ..\embulk-output-chart
cd ..\embulk-output-chart
.\gradlew.bat package
cd ..\vim-history

設定ファイル記述

exec:
  max_threads: 1
  min_output_tasks: 1
out:
  type: chart
  chart_type: LINE
  x_axis_name: Date
  x_axis_type: NUMBER
  y_axis_name: Commit
  y_axis_type: NUMBER
  serieses:
    - {name: "commit count", x: d_date, y: count}
in:
  type: jdbc
  driver_path: './sqlite-jdbc-3.25.2.jar'
  driver_class: 'org.sqlite.JDBC'
  url: 'jdbc:sqlite:vim_history.sqlite3'
  query: select cast(strftime('%s', date(date), 'utc') as long) as d_date, count(date) as count from vim_history group by d_date;
  column_options:
    d_date:
      value_type: long
    count:
      value_type: long

チャート表示実行

..\..\embulk\embulk.bat run -L ..\embulk-output-chart .\sqlite2chart.yml

はい。

まー、そうですね...。残念ですねという感じで。

今後に向けて

  • Date Axis が欲しい
    • カスタムラベルとかでごまかせるかな?
  • 表示範囲調整機能が欲しい
  • 集計が SQL 任せなのつらい
  • 画像保存できないとダメでは???

以上。ぼちぼちやっていきましょう。(そもそもチャート表示して嬉しいの?ということは考えてはいけない)

VimConf2018 に参加しました

VimConf 2018 のメモ書きです。

基本的な情報は公式ページ(VimConf 2018)を参照。

今回は Vim 本体の中身の話が印象に残りました。

変なまとめ方になっちゃったけど、以下、印象に残ったもののメモ書きです。

メモ書き

  • 未来の話
    • Vim のプラットフォーム化
      • プラグインプラットフォームとして、プラグイン開発者に便利な機能を追加していく
    • Vim script 高速化
      • Vim script 自体を早くする方針で検討していく
        • Vim script のコンパイル?
      • 検討したけど採用しない(つもり)の話が面白かった
        • 別言語化(if_xxx)
        • マルチスレッド化
    • Text Properties
      • 「任意の 1 行だけ抜き出してもちゃんとハイライトできるデータ構造にする」という感じの理解だったけどあっているのかな?
      • ばかでかい XML とかよく開くのでそういったものが上手くハイライトできるようになってくれると嬉しいですね
    • Support DRCS Sixel on :terminal
      • mattn さんの Suggestion
      • これすごく欲しいと思った
      • mlterm on android とかで、Markdown や PlantUML のような描画用 SDL のレンダリング結果を確認したいときとかあるんですよ
        • Sixel 対応来てくれると Vim 滞在率が上がって嬉しい
  • 現在の話
    • Oni
      • 内臓ブラウザとスニークモードの組み合わせが Vimperator を思い出させてくれた
        • 「内臓ブラウザとのやり取りが簡単なら Vimperator 代替になるのでは???」と思った
      • 帰ってから少し触った
        • Tutorial と Achievement の組み合わせが素敵だった
        • :Browser で内臓ブラウザが立ち上がらなかった
      • 今使っている .vimrc とマッチしない操作感の場所があるので、少しずつ試していきたい
    • 自作プラグイン書き直さなきゃ...
    • :Termdebug
      • Vim ソースコードウォーキングのお供にも良さそう
      • 入門として、Linda_ppさんの発表にあったあのシーケンス図をたどるのに使ってみるとか良さそう?(たどれるのは getchar.c までだけれど)
    • プラグイン系
      • w0rp/ale
      • ggreer/the_silver_searcher の話で mattnjvgrep を思い出したので、比較して導入する
      • eclipse/eclipse.jdt.ls
        • 懇親会で教えてもらったもの。どうにかして Vim で Java を書きたい...
      • 性能確認
        • :help profile
        • :help --startuptime
      • oldfiles_selector.vim を作る
        • :help oldfiles
      • :help ins-completions
        • 補完とスニペット、自作したい

私的 TODO

以下、やっていきます。

おわりに

やりたいことがもりもり出てきました。 今回補給した情報とやる気でやっていきたいと思います。

VimConf 準備会スタッフのみなさま、おつかれさまでした。そして、ありがとうございました。