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 準備会スタッフのみなさま、おつかれさまでした。そして、ありがとうございました。

2018年11月19日月曜日

Helix のキーカスタマイズを行う

環境

  • OS: Windows 10 Pro
  • Msys2

環境構築

Msys2 環境アップデート

pacman -Syu

QMK ファームウェアプロジェクトをクローン

git clone https://github.com/qmk/qmk_firmware.git

ビルド環境構築

cd PATH/TO/qmk_firmware
./util/msys2_install.sh
source ~/qmk_utils/activate_msys2.sh

インストール中は、ひたすら 'a' とか 'y' とか入力していく。

既存キーマップの動作確認

既存 JIS キーマップをビルド

cd PATH/TO/qmk_firmware
make helix:five_rows_jis

ファームウェア焼きこみ

cd PATH/TO/qmk_firmware
make helix:five_rows_jis:avrdude

左右両方に焼きこんだらとりあえず動いた。

キーマップのカスタマイズ

five_rows_jis をベースにキーマップをカスタマイズしていく。

キーマップ設定ファイルコピー

同梱されているキーマップ five_rows_jis ベースにキーマップを作っていくので、同ディレクトリにコピーを作る。

cd PATH/TO/qmk_firmware
cd keyboards/helix/rev2/keymaps/
cp -r five_rows_jis/ mikoto2000_five_rows_jis

キーマップ設定変更

今回は keymap.c, rules.mk を修正。 公開する場合にはドキュメントの変更も忘れずに。

vim keymap.c
vim rules.mk
vim readme.md
vim readme_jp.md

最終的にこんな差分になった。

差分

カスタマイズしたファームウェアを焼きこむ

cd PATH/TO/qmk_firmware
make helix:mikoto2000_five_rows_jis:avrdude

以上。

2018年11月11日日曜日

Helix キーボードキットのはんだ付けの様子を撮ったから見てくれ

そしてやさしい方はアドバイスとかしてください。

背景

Helix キーボードキット | 遊舎工房を買った。

そしてこうなった...

キットを買いなおして右手側を作るついでに、はんだ付けの様子を撮影したので公開。

ちなみに、どうしてもはんだが溶けないので、はんだごての温度設定を MAX にして作業していました。 とりあえず、こんな適当でも動くものが組み立てられるということで。

はんだ付け以外の箇所はビルドガイドを参照。

はんだ動画たち

PCBの準備

パーツ実装 - ダイオード

パーツ実装 - TRRS ジャック

パーツ実装 - リセットスイッチ

Pro Micro

PCB は壊したけど Pro Micro は無事だったので省略。

パーツ実装 - OLEDモジュール

パーツ実装 - Underglow用テープLED

パーツ実装 - キースイッチ

結果

そしてこうなりました。

その他

キートップとキースイッチはこちらから購入しました。XDA Blank Keycap (2Pieces/Gray) と Gateron MX Switch Blue 3Pin (5PCs) 。

TALP KEYBOARD

使用した道具たち

この辺のものを使用しました。