nvim の J

びっくりしたのでメモ。

以下は Brainfuck のコードですね。

+>++><<
>[-<+>]<
+++++++.

これを nvim で J を押して一行に結合しようとしたところ

  1. >++><< [-<+>]< +++++++.

なんと、2 行目を結合する際に > が消えてしまう現象が発生した。なんか引用符だと判断されてか、勝手に消えてしまうようだ。
vim では発生しなかったので nvim の仕様だと思う。

nvim 色々変わっててつらいな・・・。どうやって無効にするんだろう・・・。

Final Fantasy V Advance

ひょんなことから FF5GBA でリメイクされていることを知った。そして GBA 版は SFC 版から追加要素(クリア後ダンジョン、新ジョブ)があるということも知り、25 年ぶりにやりたくなった。

SFC 版が 1992 年、GBA 版は 2006 年発売。1998 年に PS でも出ていたらしい。

当時は 2 回クリアした。

宝箱回収率というものがあり、1 周目は 95% ぐらいだった。
そんなものがあるのか、と 2 周目はかなり念を入れてくまなく探索したが、99% だった。
取り逃したのはどの宝箱なのか・・・。
この喉につかえた小骨を取り除くべく、25 年の時を超え、再び挑もうと思う。

ということで、Amazon でカセットと攻略本をどちらも中古でサクッと購入。
攻略本はネットで攻略サイトを見ればいらないと思うんだけど、攻略本を見ること自体が好きなので惜しくない出費だ。

GBA 本体を起動するのは数年ぶりだが、ホコリをフーフーしたら起動した(良い子は真似しないでね)。

主に通勤時間にやろうと思ったが、なんと GBA 本体にイヤホンジャックがついていない。
専用の変換器が必要で、バルク品しか売っていない。

通勤中なので、本体のスピーカーは使えない。
ミュートでもいいんだけど、やっぱり音楽を聞きたいじゃないですか。

んで、調べていたらなんと任天堂バーチャルコンソールで FF5A がなんと 700 円で売っていた。
うっ、なんという情弱っぷり。
すでに Amazon で中古カセットを 3000 円で買ってしまった。

先程 GBA の動作確認をしていて思ったんだけど、GBA は重さ 148g と非常に軽い一方、画面サイズは 2.9 インチしかないので、4.9 インチの 3DS LL に慣れた身としてはかなり辛いものがあると感じた。
3DS ならイヤホンジャックで悩んだりしなくても済むし、バーチャルコンソールで買い直そう。

GBA カセットがまだ到着していなくて、始めていなかったのがまだ救いだった、かも。

Final Fantasy V Advance #2

3DS LL を分解掃除して、いざ FF5A をダウンロードしようとしたら、FF5A は Wii Uバーチャルコンソールにしかなく、3DS にはなかった・・・。

Amazon で買ったカセットが無駄にならなくてよかったが、3DS でできると思い込んでいたワクワク感から突き落とされた気分でなんか虚しい・・・。

Nintendo 3DS LL 分解掃除

久しぶりに 3DS LL を起動したら A ボタンの効きが悪かった。
具体的には下側を押すと反応するけど、真ん中より上を押す場合はかなり押し込まないと認識しない。

任天堂のサイトを見ると、修理は 3000 円ぐらいで、10 日から 2 週間ほどかかるとのこと。
3000 円は出せるけど 2 週間は待てないので、自分で治すことにする。

まずは分解。

分解はこのサイト 分解工房・NINTENDO 3DS LL/ABXYボタン交換修理方法 を参照した。非常に分かりやすかった。

ABXY ボタンはここなんだけど、基盤にシールが張ってあって、そのシールにドーム状の金属が収まっている。

なるほど、ボタンを押すとドーム状の金属がへこんでショートする仕組みなのか。
この時点でペコペコしてる。
ボタンがヘタったらこのシールを交換すればいいんだな。

見た目はきれいだけど、A ボタンだけ効きがわるいのはこのシールの下が原因に違いない。
思い切って剥がしてみた。

ビンゴ! なんか知らないけど汚れてる。
これをきれいに拭き取ればいいだけなんじゃね?
エタノールみたいなものがあれば一番良いんだけどそんなものはないので、薄めた中性洗剤と水を綿棒の両端にしみさせて、最後に乾拭きした。

まあまあきれいになった。
これで改善されているか確認するために、組み立ててみた。

ボタンはバッチリ効くようになったが、上液晶が映らず、下液晶もノイズが入っている。
組み立てた際にフレキがうまく刺さっていなかったようだ。

慎重に組み上げたところ、もとに戻った。
良かった良かった。



分解掃除してみてやってみてわかったこと。

  • 内部にものすごい量のホコリや割と大きな糸くずも入り込んでいた。不具合の原因になるのでそれらはきれいに取り除いた
  • 分解より組み立てのほうが数倍難しい。特に下の基盤と上の基盤を繋いでいるフレキの長さに余裕がなく、そこが組み立ての鬼門
  • 分解は自己責任。僕は壊れてしまったら New 3DS を買う覚悟だった
  • 作業は 4 時間ほどかかった。二回目の分解と組み立ては 30 分ぐらいでできた
  • 分解して組み立てたことで愛着が出た。ボタンと十字キーのシールは 80 円ぐらいで売っているのでひとつ注文して手元においておくことにした

VMware Fusion に Windows を入れる

年末に時間があったので、手元の Mac Book Pro を初期化して環境を整えてみた際に、色々ハマったメモ。

  • VMware Fusion 7 は Sierra をサポートしておらず、Yosemite で VMware Fusion 7 をインストール、各種ゲスト OS をセットアップ後、Sierra までアップデートすることでセットアップされたゲストは使用可能。ただし、新たにセットアップすることができないゲストも存在する
  • 通常、OS のダウングレードはできないが、方法はある。この辺( http://www.kazu-log.com/entry/2015/11/06/122553 )を参照した
  • Bootcamp で Windows 7 を再インストールしようとしたが、Windows 7 はすでに延長サポートに突入しており、Bootcamp 用のドライバの署名が切れており、インストール途中でコケる
  • VMware Fusion の代わりに VirtualBox を試したが、Ubuntu Server で共有フォルダ設定がどうしてもできなかったため VMware Fusion 8.5 にアップグレードしたら、やっぱり VMware は素晴らしいと再認識した
  • 仮想マシンWindows で使用するのは秀丸WinMergeバイナリエディタぐらいなので、Windows 2000 で良いかと思いセットアップしてみたものの、VMware Tools をインストールするための Windows Installer 3.1 をインストールできないため断念。Windows XP でも良いかと思ってセットアップしてみたものの、アクティベーションサーバに接続できないため XP の使用も断念。2020 年まで延長サポートがある Windows 7 にすることにした

上記で 7 日ぐらい費やした。OS の再インストールを何度も繰り返したので致し方ないが。

年末年始の作業

2015年12月25日から2016年1月3日まで、さくらのレンタルサーバで15年ぐらいメンテナンスしている掲示板の刷新を行った。

元の掲示板は Perl で実装してあって、古い掲示板にありがちなヒアドキュメントで HTML を出力する形式になっていて、メンテナンスが非常につらい。もともと Perl は得意だったんだけど、仕事で使わないのでどんどんスキルが落ちていき、今では調べながらじゃないと書きたいことが書けない。

ということで、年末年始は時間があったので Perl をやめて Haskell で再実装した。

まずは、以下。

ずっとさくらのレンタルサーバ上で Haskell を動かす環境を作ろうと思っていたんだけど、これがようやくきちんと完成した。

Haskell が動くようになったら cgi: A library for writing CGI programsCGI として実装。アプリケーションサーバが動かせればもっとモダンに作れたのだと思うけど、レンタルサーバなので致し方ない。CGI でも Haskell が動くだけよしとする。

Perl で実装した時は、データはすべてファイルに溜め込んでいたけど、Haskell で再実装する際にはレンタルサーバで提供されている MySQL を使用することにした。使用したのは mysql-simple: A mid-level MySQL client library.。どんなにデータがあってもデータベースに突っ込んでクエリで取り出せるというのは素晴らしい。Perl で実装していた時はある程度の件数でファイルを分割していたので、何をするにしても非常にややこしかった。

CGI が HTML を生成して返すか REST API を用意して Ajax で通信するか迷ったけど、掲示板ユーザの環境を見ると古いブラウザや古いスマートフォンを使用している人はあまりいないので、後者にした。

API のエンドポイントは、独立した実行ファイルを用意するようにしたけど、ひとつにまとめたほうが良かったかもしれない。エンドポイントは 10 数個になってしまい、ひとつひとつの CGI は小さくて良いんだけど見通しがあまり良くない。

フロントエンドは、タブレットスマートフォンでも使いやすくしたいという狙いがあったので、レスポンシブデザインを取り入れた。React を使えばフロントエンドでも react-haskell: Haskell React bindings を使用して JavaScript ではなく Haskell でコードを書けるんだけど、休み中に完成しなそうなので、慣れている Bootstrap を用いて JavaScriptjQuery を使うことにした。

年末年始で 50 時間ぐらい実装に費やしたけど、完成度は 80% ぐらい。内訳は:

  • レンタルサーバ上に環境を構築する調査および構築: 10 時間
  • MySQL バックエンド: 5 時間
  • CGI エンドポイント: 15 時間
  • HTML5 フロントエンド: 20 時間

という感じだろうか。とにかくフロントエンドに時間がかかる。逆にバックエンドは非常に簡単。ちょっとだけ悩んだのが、データベースの型と Haskell の型。Persistent entity syntax · yesodweb/persistent Wiki · GitHub を見れば解決した。CGI フロントエンドは、つまらないハマりをしてしまって時間をロスした。バックエンドは cabal repl で動作確認が簡単に行えるんだけど、エンドポイントはブラウザなり curl なりで叩かないとならないので面倒というのと、エラーが発生した場合エラーログを見れば原因がわかるんだけど、さくらのレンタルサーバの場合、前日のエラーログが翌日 0:06 ぐらいに $HOME/log に配置されるようになっていて、すぐにはエラーログを確認できないことなどがある。ちなみに、つまらないハマりというのは、バックエンドをデバッグ中に putStrLn でデバッグ出力を行ったコードを消し忘れて、その関数をエンドポイントから呼び出してしまうことで、そのデバッグ出力がレスポンスとして扱われてしまい、500 Internal Server Error が発生するというもの。

完成したら GitHub に置く予定。

Qt ライセンス

とあるプログラミングコンテストに参加しようと思って、Qt を調べてみた。主にライセンス。

開発ターゲットは AndroidiOS

  • Qt は商用ライセンス、LGPLGPL
  • LGPLAndroidiOS の開発は可能
  • ただし iOS はスタティックリンクになるため、アプリが LGPL 感染する(ソースコード公開が必須)
  • モバイル向け商用ライセンスは 50 万以上する

ライセンスフィーが高いな。商用ライセンスは開発者にくっつくので、例えばプロダクト開発で 3 人のチームとなると 3 人分のライセンスを購入する必要がある。また、商用ライセンスは譲渡が可能だけど 6 ヶ月に 1 回という制限がつく。Unity ぐらい(20 万)だと買いやすいんだけど。


参考にしたのは以下サイト。