Hatena::ブログ(Diary)

satosystemsの日記 このページをアンテナに追加 RSSフィード

2016-12-25

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 の再インストールを何度も繰り返したので致し方ないが。

2016-01-03

[] 年末年始の作業

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

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

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

まずは、以下。

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

Haskell が動くようになったら cgi: A library for writing CGI programs で CGI として実装。アプリケーションサーバが動かせればもっとモダンに作れたのだと思うけど、レンタルサーバなので致し方ない。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 を用いて JavaScript と jQuery を使うことにした。

年末年始で 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 に置く予定。

2015-09-13

[] Qt ライセンス

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

開発ターゲットは Android と iOS。

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

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


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

2015-07-31

[] Context メモ

Android にはいくつかの Context がある。

Activity から参照可能なのは:

  • this : Acrivity
  • getBaseContext() : ContextImpl
  • getApplicationContext() : Applicaiton

となる。

Activity を Context として持ちまわるのは、Activity のリークにつながるので、getApplicationContext() で取得した Application を持ちまわる、というのが慣習になっていると思っていたが、Application だと問題が発生することがある。

具体的に遭遇した問題は:

View view = inflate(context, R.layout.sample, null);
addView(view);

という具合に、inflate を用いて View を生成する際に使用する Context が Application だった場合、生成された View にアプリのテーマが適切に設定されず、EditText の背景が不正になることがあった。

getBaseContext() で取得した ContextImpl を使用した場合は適切なテーマが設定されたため、これがワークアラウンドなんだと思う。

2015-05-17

[] FrameLayout メモ

FrameLayout は z index を簡単に調整することができる便利なレイアウトなんだけど、View が Button だった場合、z index を無視して最上位に表示されるようだ。

これが ImageButton なら期待した通りの z index になるようだ。