エンジン将棋盤を買った
Macで将棋の検討をするためにいろいろ探していたら「エンジン将棋盤」なるアプリを見つけました。
将棋ぶらうざQの挙動があやしいなーと思っていろいろ調べたら「エンジン将棋盤」なる有料アプリを見つけたんだけどどうなんだろ。評判が見当たらない…
— 海苔 (@arrow_elpis) June 8, 2018
調べてみたら全然口コミなし…ということで2000円しましたが人柱になる覚悟で購入してみましたのでレポートします。
とりあえず起動した画面はこんな感じ。
盤の色は設定で変えられるみたいです。
試しにこちらのサイトを参考にしつつポンポン桂を入力してみました。このアプリは裏の解析エンジンを差し替えられるのですが今回使ったのはelmoです。
最善手が評価値167なので先手よしということですかね。
解析で読んだ結果も見せてくれます。
これは…王手飛車…ここまで行けばかなりよさそう。
試しに失敗例で解析してみます。
ほぼ互角になってます。
解析の例を見ると…
私には後手よさそうに見えます…
さて、ここまで書いてきましたがしばらく触った限りでいくつか気になった点があります。もし何か見落としていて私の勘違いだったらごめんなさい。
- 手元のkifファイルを読み込ませたら無言で落ちました
- 将棋ぶらうざQで作ったファイルなのでこのアプリのバグでは無いかもしれませんが、エラーメッセージ出して欲しかった
- 棋譜の分岐を本譜に移す機能が見当たりません
- うっかり間違えて駒を動かすと本譜としてはそれで確定されるみたいで、修正は全部分岐に入ります
- 棋譜の保存がうまく動かないみたい
- メニューの保存ボタンを押してもなんの反応もない…
UIは良いと思うので今後の発展に期待ですね。
聖書通読botをherokuに移行した
今朝メールをみてびっくり。
This is your final notice that the sunset of the previous generation OpenShift Online 2 platform will be September 30, 2017.
完全に忘れてた…(たしかにだいぶ前にメールが来ていたような…)
と、いうわけで、急遽、聖書通読botをお引っ越しです。
移行先はherokuにしました。
聖書通読bot ( @seishotsudoku )を運用しているOpenShift v2が今日でEoLらしく、今から別のクラウドサービスに移す。
— 海苔 (@arrow_elpis) 2017年9月30日
OpenShiftでは「どこまで投稿したか」の情報を面倒くさがってテキストファイルに保存していたのですがherokuではそれも厳しそうだったのでheroku postgresを使いました。
DBと言ってもステータスをメモしているだけなので超簡単です。
というわけで夕方には完成。
herokuに移動した聖書通読bot、ちゃんと動いてる。よかったよかった。 https://t.co/IeKfR6mr8D
— 海苔 (@arrow_elpis) 2017年9月30日
FPGAに書き込めた
前にブログで「FPGAに書き込めない」と言っていましたが無事書き込めました。
LatticeにはDiamond Programmerというツールがありまして、それを使ってFPGAに書き込むのですが、どうしてもエラーになって動きませんでした。
ERROR - Programming failed.
ERROR - Failed to Open FTDI USB port. Make sure to select the right cable type.
If you have not installed the FTDI Windows USB Driver, follow the instructions in the Programmer Help topic:
"Installing/Uninstalling Parallel Port Driver and USB Driver".
If you have installed the driver, if you recently plugged in the cable, please wait a few seconds and try again.
This will give the operating system time to recognize the cable.
解決策
ice40にはOpen Sourceの書き込みツールicestormがあります。それを1度使うとDiamond Programmerも動くようになりました。
http://www.clifford.at/icestorm/
手順
- icestormのインストール*1
- FPGAをPCにつなげます
- icecube2で生成したbinファイル(bitmapファイル)をiceprogコマンドで書き込みます
- Diamond Programmerを起動します
- Diamond ProgrammerからFPGAに書き込みます
1度iceprogコマンドで書き込みを行っていれば、後はDiamond Programmerから何度でも書き込めるようです。
なぜ?
iceprogコマンド実行前後でlsmodコマンドを実行し比較すると、lpモジュールがロードされていることがわかりました。詳しいことはよくわからないのですが、lpモジュールはparallel port driverだそうなので、driver周りのエラーだったと言うことが推測できます。
ただし、iceprogコマンドの代わりにmodprobeコマンドでlpモジュールをロードしてみてもエラーは解消しませんでした。なのでlpモジュールが直接の原因というわけではなさそうです。(結局わからない)
*1: https://github.com/nesl/ice40_examples が参考になります
golangのimport順を並び替えるツールを作った
tl;dr;
やりたいこと
標準ライブラリ→3rd partyライブラリ→ローカルライブラリの順に並べたい
goimportsつかえよという声が聞こえてきそうですが
goimports、おおむね良いのです。たとえば、
に対して*1goimports使うと、
import (
"fmt"
"math"
d "./data"
)
になって素敵です。
でも、変換元が
import (
"github.com/ziutek/blas"
"math"
d "./data"
"fmt"
)
のとき(mathの後ろに一行空行がある)、
import (
"math"
"fmt"
d "./data"
)
になっちゃうんです。これ、IDE使っていると一番下の行に挿入されるので容易に順番が崩れちゃうんですが、同じ要望を持ってる人どうしてるんですかね?
作ったもの
ゆるいツールを作りました。mukagoと名付けていますが適当です。
importの順を並び替えるだけですが、GolangのASTがよくわからなくて、結構ハマりました。
mukagoを使うと、上記の状態でも、
import (
"fmt"
"math"
d "./data"
)
になって幸せです。
まとめ
かなり雑な作りなので、同じ機能をもったもっとちゃんとしているものがあったら使いたいです。探した限り見当たりませんでしたが…
聖書通読botを再開
奇跡的に「しばらく休む」で止まっていた聖書通読bot @seishotsudoku 、昨日思い立って復活させました。
— 海苔 (@arrow_elpis) 2017年2月6日
なんでまた急に
いつも礼拝ではiPhoneアプリの新改訳聖書を使っています*1。
で、昨日の礼拝でも使おうと思ってiPhone開いたら、バッテリーがなかった…
やばっ、と思ってAndroidのスマホを取り出しまして*2、急いでその場でアプリを入れました。それがこちら。
口語訳聖書の初版は著作権が切れているので、そのデータをつかったアプリがこれ以外にもたくさんありました。Public Domainありがてぇ。
まあそういうようなわけで思考が、
そういえば自分も昔このデータでbot作ったな→止まっちゃってるな→やるか。(短絡的な発想)
となった結果、帰宅後に開発が始まりました。
聖書通読botの裏側
前はRubyで書いてましたが今回はPythonです。サーバーはOpenshiftを使わせていただきました。技術の進歩の感じる。
— 海苔 (@arrow_elpis) 2017年2月6日
ざっくりいうと、Python3+SQLAlchemy+SQLite+OpenShiftです。OpenShiftのCronカートリッジを使っています。
SQLiteにデータ突っ込んで、前から順にデータを投稿しているだけなので、全然難しいことしてません。
ハマった点
OpenShiftでは、プログラムのコード等をGitでpushすることでDeployします。SQLite形式のDBファイルそのままGitにつっこんだら、そのデータの書き込みに失敗しました*3。
調べてみたら永続化が必要なファイルは環境変数OPENSHIFT_DATA_DIRで指定されたディレクトリに置く必要があるとのこと。そちらにファイルを作ってしのぎました。
ところで
副産物として口語訳聖書のSQLite形式のデータが手元にあるのですが、需要ありますかね?(Public Domainなので配布しても問題ないはず。)
圧縮配列ライブラリyunomiをリライトしました
数年前に圧縮配列を作ってgithubで公開していました。 この度そのライブラリを一から書き直してリニューアルしました。
元々圧縮配列ライブラリであることをメインに作っていたのですが、今回のリニューアルで簡潔データ構造のライブラリとしても使えるようになっています。
圧縮配列とは
大量のデータを配列に格納しないといけないとき、あまりにデータが大きすぎてメモリに乗り切らないことはありませんか?圧縮配列は情報を圧縮状態でメモリに格納するためのものです。圧縮されているためそのまま格納するより省メモリですみます。当然通常の配列に比べて速度は落ちますが、ランダムアクセスリードが可能です。yunomiでは、Kimmo Fredriksson and Fedor Nikitinの論文に記載してあるFibonacciコーディングによる圧縮配列を実装しています。詳細を知りたい方は参考文献に当たってみてください。
簡潔データ構造とは
簡潔データ構造とは、0, 1からなるビットベクトルの様子を調べるためのデータ構造(とアルゴリズム)です。主に2つの関数からなり、rank関数、select関数と呼ばれます。rank関数は、nビット目より前に何個1があるか求めます。select関数はn個目の1がどこに現れているかを求めます。rank/select関数を応用することで、圧縮配列のようなアプリケーションを実装することができます。
なぜ作ったのか
自分で気軽に使える簡潔データ構造のライブラリが欲しかったのです。 簡潔データ構造自体はいろいろなOSSで(内部で使うために)実装されていますが、なかなかそれ自体をライブラリ化して切り出したものはあまり見かけません。 知っている限りGPLなライブラリはありますが、それを非GPLなプロジェクトで利用するにはハードルが高いです。
なぜリライトしたのか
前述の通り、自分で気軽に使える簡潔データ構造ライブラリが欲しかったのですが、過去に書いたyunomiは簡潔データ構造ライブラリ部分と圧縮配列部分が入り交じっており、簡潔データ構造のライブラリとして使うことはできませんでした。そこで、再設計し、書き直そうと思いました。
以前のコードは数年前に急に思い立って数日間で一気に作り上げたものでした。 一応動いてはいましたが、設計が甘く、ユーザー視点では使いにくいライブラリとなっていました。 また、テストがほとんど存在しておらず、信頼性の面でも問題がありました。
今回のリニューアルは使いやすさに重点を置き、時間をかけて設計・実装を行いました。 (足かけ半年以上もかかっています。)
加えて今回のリニューアルでは、コードの信頼性に重点を置き、できるだけたくさんのテストを書きました。たぶんほぼすべての関数にテストが存在するはずです。リニューアル前のコードにはテストがほぼ存在しなかったことを考えると大きな進歩です。正直テストのないライブラリを使いたくありませんから。
開発環境
Mac OS X + clangで開発しました。 また、同梱したDockerfileによる環境でもテストが通ることを確認しています。
今後やりたいこと
- ちゃんとCIする
- せっかくテストケースをたくさん書いたのでCIしたいです
- 旧バージョンとの速度比較
- 旧バージョンとはいくつかアルゴリズムも変更したところがあります。念のため調べておきたいです。
さいごに
どんな小さなものでもpull requestいただければ飛び上がって喜びます。