WindowsでVirtualBoxのVMが起動できなくなった


2017年07月09日

他に書きたい事があるけれど、直近で不具合に遭遇したのと解決出来たのでまとめてみます。

Windows10 に VirtualBox を入れて使用していたのですが、何かの拍子で VirtualBox 自体が起動できなくなりました。恐らくですが Windows10 Creators Update が怪しいんじゃないかと思っています。アップデート後にすぐに使っていなかったので確信はないのですが。

そこでひとまず VirtualBox を最新のもの(5.1.22)に更新してみました。すると VirtualBox は起動できるようになったのですが、今度は肝心の仮想環境が立ち上がりません。エラーメッセージには「NtCreateFile(\Device\VBoxDrvStub) failed: Unknown Status -626」という表示が。なんのこっちゃって感じです。

検索してみたら 2 年前の QA がヒットしたりしてたので Windows の更新が原因じゃないのか?と悩んだりしましたが、回答としては最新の物で更新したり Windows を以前のバージョンに戻したり、test buildsという beta 版のようなものを使ってみるというものがありました。そこで 5.1.23 を入れてみたところ、ちゃんと動いてくれるようになりましたヽ(´ー`)ノ

ちなみに何か変な設定が残るとまずいかなと思って VirtualBox は毎回アンインストールしてからインストールし直してました。それと仮想イメージには一切手を触れなかったのでデータとしては何も問題なく使えました。

一時はどうなることかと思いましたが、無事使えたのでホッとしてます。しかしこの症状の原因が Windows10 Creators Update が原因だとしたら、リリースされてから時間が経ってると思うのでもっと色々被害があってもおかしくないと思うのですが、何か別の原因なのかあるいは環境によるんでしょうかね? 結局問題の原因がわからなかったのが、今後また再発しないかが気になる点です。

2017/07/20 追記
5.1.24 がリリースされていたので導入してみたところ、こちらでも問題なく動作しました。

Angular2を利用していると思ったら…


2017年06月15日

去年の後半に、リリースされたばかりの Angular2 を使用してチャット機能を作っていました。チュートリアルとかを一通りこなして実装しましたが、Rails に組み込む部分で四苦八苦したのが印象深いです。

そんなシステムが今朝クラッシュしていました。なんでだろうと思ったら zone.js が何かコケていると。でも昨日まで動いていて特に手を触れていないのになぜ急に壊れるのか。DB には特に問題はなかったのでこれはもう完全に JS 側の問題だろうと思って調べていたところ、RxJS が原因でした。

CDN から読み込んでくる時にバージョン指定していなくて、昨日次期メジャーバージョンアップの alpha 版が出されたことでコケたみたいです orz

完全にケアレスミスですね。チュートリアルからコピーしてきた部分でしたが、バージョン指定をしているライブラリもあったので、まぁ気づけよと。RxJS の 5 系を指定したらまた問題なく動いてくれました。

やれやれこれで一件落着かと思っていたのですが、引き続き systemjs.config.js を眺めていたらどうも angular core の方にもバージョン指定がされていないように見えました。何か嫌な予感が、胸騒ぎがしました…。

_あ …ありのまま 今 起こった事を話すぜ!

『おれはチュートリアルに従い Angular2 を動かしていると
思ったらいつのまにか Angular4.2.2 になっていた』

な… 何を言ってるのか わからねーと思うが
おれも何をされたのかわからなかった…

頭がどうにかなりそうだった…

見間違いだとか自動アップデートだとか
そんなチャチなもんじゃあ 断じてねえ

もっと恐ろしいものの片鱗を味わったぜ…_

いやぁ、本当に設定がザルでした(汗) 幸いな事に Angular4.2.2 の今でも(確認した範囲では)問題なく動いてくれていたので、このバージョンでロック。今後こういうことが無いように注意します…。

Let's Encryptを利用してSSLを導入してみた


2017年05月09日

Let’s Encrypt が正式サービスを開始してからだいぶ経ちますが、ようやくこのブログにも導入してみました。前々から入れよう入れようと思っていたものの、基本サーバとかネットワークに疎いためどうにも億劫で先延ばしにしていました。もうあちこちに導入方法とかまとまっていますし結構簡単だったんですが、Ubuntu16.04 で nginx を使っていて、それもパッケージを使って入れるという方法があまり見かけなかったので、備忘録も兼ねて書いてみます。

まず最初に参考にしたのは Certbot の公式ドキュメントです。nginx と Ubuntu16.04 の組合せについてはこちらのページに書かれていますが、ここでまず一つ問題が。ここに書かれているコマンドは私が見ている現時点では

$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot

となっていますが、ここのadd-apt-repositoryが Python の環境が入っていないと実行できませんでした。そのため先に

$ sudo apt-get install software-properties-common python-software-properties

を実行しました。余談ですが、私は基本aptitudeを使っています。今回はapt-getで書き換えていますが、aptitudeを使っている方は置き換えて考えてください。

さて、上記を一通り実行したらもう Certbot の導入は完了ですね。次はもう証明書の取得です。

$ sudo certbot certonly --webroot -w [ドキュメントルート] -d [ドメイン] --email [メールアドレス]

これで証明書の取得が可能です。ドキュメントルートは Rails だったらRailsルート/publicですね。一つ気をつけたいのは、パッケージで導入した時のコマンドはcertbotだということです。よく Qiita とかでcertbot-autoで書かれたりしてますが、あれは恐らくソースを DL した場合のコマンドです。今回パッケージで導入したから違うわけですね、私はちょっと戸惑いました。

ここまで来ればあとは nginx の設定と証明書の更新の設定です。nginx の設定については

server {
    listen 443 ssl;
    ssl_certificate     /etc/letsencrypt/live/www.example.com/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
}

ここらへんを気をつければ大丈夫なはずです。さくらのナレッジの記事を参考にすると、80 でアクセスしてきた場合のリダイレクト処理も書いてあげるとなお親切ですね。

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  www.example.com;
    return  301 https://www.example.com$request_uri;
}

そして証明書の更新については root ユーザの cron に

0 5 * * 0 certbot renew --post-hook "service nginx restart"

こんな感じで設定しておくと良いかと思います。上記は毎週日曜日の午前 5 時に証明書の更新を試みる内容になっていますが、どうもこれを実行しても証明書の有効期限が一体期間以上残っていたら更新はしないようになっているようです。

以上が私が Let’s Encrypt で SSL を導入するまでの大まかな手順でした。

Dockerのマウントが重すぎる件


2017年04月10日

まず前置きとして私は使い慣れている Windows 環境が好きで、Mac を試してみたものの馴染めずに戻ってきました。しかし Web 開発、それも主に Ruby と Rails を使って開発しているため Linux 環境は欠かせません。そのため常に仮想環境が必要となりますが、エディタはやはり Windows 上で、それも IntelliJ IDEA を使いたいという思いがあります。

そんな私の最近ローカル仮想環境は Docker で構築しています。ただ、Docker を上手に使っているかと聞かれるとそんなことはなくて、普通の VM のように SSH だの DB だのあれこれ一つのコンテナに詰め込んでしまっているので、むしろ Docker 使いの方からは怒られるような使い方をしてしまっている気がします(汗

ただし最近この環境の重さ・遅さに辟易としてきました。何が重いかというと、Docker でホストのフォルダをマウントしているのですが、その読み込みがとてつもなく遅いときがあるのです。ファイル数も影響しているのか、以前は気にならなかったのですが、最近悪化している気がしていました。

これはどうも Docker というよりもそれを動かしている VirtualBox の shared folder 機能に問題があるみたいです。確かに以前 VirtualBox 単体で使用していた際も重いと感じたことはありました。またこれはホスト OS が Windows か Mac かという点は関係なく重いそうです。それと Docker のフォーラムで結構長いやりとりがされていますが、同じ VM というジャンルでも VMware でもそういう現象が報告されています(人によって程度に違いはあるみたいですが)。

そんな重さに嫌気が差したため、Docker のマウントを捨てて以前も使っていた SSHFS に変更してみたところ、すこぶる快適になりましたヽ(´ー`)ノ いやぁ、あんなに読み込みが遅かったのが嘘みたいにサクサク動いてくれます。

ただこの SSHFS が万能かというと、そうとは言い切れません。ソースコードは Git で管理しているのですが、ホスト側から管理できなくなりました。正確に書くと、以前はホスト OS である Windows の環境下に SourceTree を使って管理していたのですが、今回 Docker 下にファイルを置くことになったため、どうも不具合が発生して取り扱えません。

IntelliJ IDEA にも Git 機能はあるのですが、これも正常に動作しません。むしろ index.lock ファイルを生成したままでロックされてしまうため(SourceTree でも同じ現象が発生しました)、使わないように設定を変更した方が無難です。というわけでソースコードの管理は Docker 上でコンソールで Git コマンドを叩いて対応しています。私は以前もコンソールから叩いていたので思い出せば楽勝でした、助かった(´ー`;

という感じに完璧ではないですが、私はこの方法で最近は開発しています。ありがたい事に Windows で Docker を使うためのwin-sshfsdokan(dokany)の開発が再開(?)されているため、Win10(64bit)環境でもきちんと動いてくれています。Docker を使う人だけじゃなく、VirtualBox や VMware 等を使っていて、共有フォルダの挙動の重さに困っている人も試してみると良いかもしれません。

GRAPH APIのユーザIDからFacebookユーザへのリンク


2017年03月21日

最近プログラミングに関する投稿をしてなかったので、軽めの内容ですが自分のための備忘録として。

Rails でアプリを作ってて、ログインを Omniauth を使って Facebook と連携させるようにしていたのですが、この時受け取るユーザ ID から Facebook 上のユーザのページって見れないのかなって調べてみました。結論としては可能ですが、GRAPH API v2 以降仕様が変わったみたいですね。

基本的にhttps://www.facebook.com/4(これはマーク・ザッカーバーグさん)のように、global な ID が各自に振られているのですが、このユーザ ID は API からは取得できません。以前はこの値を API で使用していたようですが、v2 からは各アプリ毎に振られている模様です。

それじゃどうすれば良いのかと言うと、https://www.facebook.com/app_scoped_user_id/ユーザID/ の「ユーザ ID」の部分を置換することでユーザのページへのリンクとなります。

数ヶ月前にも一度調べたんですけど使っていなかったら忘れていて、また調べるのに時間かかったため書きました…最近こういうこと多いな…。しかしこれ、キーワードとしては何が良いのでしょうか? 国内の記事もあまり引っかからなくて(無いわけではない)。

デンカレ4thライブに行ってきました


2017年03月20日

1st ライブは開催を知らなかったため参加できませんでしたが(黒箱と白箱は後で購入)、2nd から参戦し始めたためこれが 3 回目ですね。昨日の電気式華憐音楽集団のライブに行ってきました。今回も大満足させてもらいました、余韻に浸りつつ感想とか書いてみます。

今回は Carnaval The Abyss の曲が中心なのかな、最初は Phantasmagory かなと思っていたら、いきなり B.M.S.からの expiate sin で、参戦出来なかった 1st の再現に感動。一体何度 Gig Grimoire を聞いたことか、そしてそこにいたかったと思ったことか。

続いて Nekulaholic まで来るかと思ったらさすがにそこまではやりませんでしたね(笑) でもその後に演奏があったので嬉しかった。ところで電波部分ってあんなに長いバージョンあったんですか、知りませんでした。あのままもしかして続くのかと思っていたら途中でブチ切れの流れは笑いました。

今回 Carnaval The Abyss で歌われなかったのって Silver Orbit と The woman でしょうかね? The woman は結構叫ぶところあってライブで映えるかなと思ってたけど残念。それと 2nd の時から思っているのですが、どうか Unbind もお願いします m(_ _)m 今のところ全ライブで皆勤賞は Vampire, Distorted Pain, Raison d’etre, Sudden Death R99, I pray ですかね?

今回から参加の弐式さん、準備期間1ヶ月の中であれだけ弾けるの凄かったですね。代わりに電気さんがあまり参加していなかったのが気になったり。他のお仕事が忙しかったのだろうか。

それとまだ出てない 3rd のライブアルバム待ってるけど、出るのだろうか。今回も新旧入り乱れていろんな曲があったので、是非 CD 音源で残して欲しいですね。

最近のお仕事


2017年02月26日

たまには仕事の話でもしてみようかなと思います。というか宣伝ですね、今までリリース前だったので全然書けなかったのですが、ようやくリリースしたので。

去年からArtistGuildというサービスを黙々と作っていました。サービス内容としてはアーティストとパトロン(支援者)を結びつけることを目標としたもので、私はこのサービスのほぼ全体を一人で実装してます。まったく 0 からのスタートというわけではなく予めベースとなる DB の設計があったり、一部のフロントエンドのコーディングを外注したりした部分があります。とはいえほぼほぼ全て手がけているので、何かバグがあったりした場合は大体私がやらかしたことになりますね(苦笑)

そんな感じで自社サービスを作っていますが受託開発も受けていますので、お仕事の依頼がありましたら会社のHPのフォームからお問い合わせください。私個人としても受けているので、そちらは Twitter からどうぞ。

mt x JINS SCREENを買ってみました


2017年01月29日

私は視力は悪くないので、以前はまったくメガネをかけていませんでした。しかし 2011 年頃はかなりハードワークをしていて、眼精疲労と思われる、ピントが合わなかったり肩こりが酷いといった各種症状に悩まされていました。そんな時に JINS PC(後に SCREEN に改名)が発売され、予約をしてまで購入。各種症状が緩和されて、本当に助かりました(プラシーボ効果も多少含まれてるかもしれませんが)。

その後クリアレンズタイプの発売時も発売と同時に購入したりと JINS PC を使ってきましたが、mt x JINS なるキャンペーン(?)をやっているのを店頭で見かけて、思わず買ってしまいました。JINS SCREEN のパッケージタイプで弱点とされていたテンプルの部分が、シリコン(?)ではなく他のフレーム箇所と同じくプラスチックになっています。

これは結構ありがたいです。過去に一度、シリコン部分が割れて中から接着剤っぽいものがにじみ出てきてお店で交換してもらったこともあったので、この箇所には不満を持っていました(ちなみに交換は無料で行ってもらえました)。これは限定販売ではなく通常のパッケージタイプにも是非とも反映して欲しいですね。

ただ少し残念なのは、若干通常版よりお値段が高いということです。それでもカスタマイズタイプでフレームを別に購入するよりは基本的には安く済むはずなので、JINS SCREEN を使ってみたいけどそこまでお金をかけたくない方は検討の価値があるのではないでしょうか? 11 月頃にはもう発売していたみたいですし、オンラインでは売り切れの種類も出ているのであまり長くは売ってないかもしれません。
https://www.jins.com/jp/Products/Detail/number/FPC-16A-964/

ちなみに女性用と書かれていますが、模様が入っているのは内側なので普通にかけていれば男性でも問題ないと思います。当方は三十路過ぎの少し顔がでかいおっさんですが、問題なく使ってます()

ドラゴンボール ゼノバース2でトロコン達成しました


2016年12月11日

先月の発売日から遊び続けてたドラゴンボール ゼノバース 2 ですが、ようやくトロフィーをコンプリートしました。期間にして 1 ヶ月とちょっとですね。プレイ時間はきちんと計測していなかったので正確にはわかりませんが、100 時間はいってないはず。ただ、攻略以外でも遊んでたので 7,80 時間ぐらいはかかったかも? 一通り遊び終わったということで、軽くレビューでも書いてみます。

前作は遊んでいなかったのですが、PS3 のレイジングブラスト 2 を持っていたので似たようなものなのかな?と思っていたところ、全然違いましたw レイブラ 2 は基本的にバトルしか無かったのに対して、こちらは箱庭有りストーリー有りとちょっと豪華に感じました。ただし使えるキャラクターは少なめな印象。これでも前作よりは増えているようです。まぁ多すぎても使いこなせないんですけどね、というかストーリー進めてると自分で作ったキャラしか使わないです。

バトルの操作とかはチュートリアルが用意されているので、NPC 相手に闘うにはそれで十分です。ただしオンライン対戦しようと思うと次元が変わります。気力管理が超重要、ブレイクされるとコンボから究極技くらいます。

遊んでてトロコンを一回諦めかけたのは、このオンラインのレベルの違いからでした。オンライントロフィーの「よっしゃーーっ!!!」と「長い長い闘いの歴史のなかでも 2 番目に強かった…」は厳しかった。最初は負け続けたのですが、エンドレスバトルで他人のプレイをじっくり見ていたのと、運良くイベントで天下一武道会がやってて対戦相手に事欠くことが無かったので学習しました。天下一武道会だと勝敗のカウントされないんですけどね。

トロフィーで難関だったのは上記オンライン対戦のトロフィーだけでしたね。あとは基本的に時間がかかる系のものでした。PQ の後半の方も難しかったのは難しかったのですが、全部オフラインソロプレイで攻略できました。EM も最後の方はデスビーム打ってれば倒せます。たまに不運が重なって事故りましたが、数こなせば行けるはず。レベル MAX と能力調整、技を揃えれば大丈夫。

ゼノバース2

最後に取得したトロフィーは全キャラクター開放の「オレは貴様を倒す者だッ!!」でした。ゼノバース 2 のトロフィー取得時のスクショって真っ暗なのが多いですが、最後は狙って神龍に写ってもらいました。

5 点満点で点数を付けるとしたら 4 点ぐらいでしょうか。前作をやっていなくても単純に楽しめました。各週末にイベントも開催してくれているので、遊ぶならプレイ人口も多い今ですね。ドラゴンボール好きで、アクションも苦としていないならば買いだと思います。

マイナス要因はロード時間の長さがちょっと気になったのと、PQ でなかなか狙ったアイテムが落ちてこないのが面倒な点です。Z 評価もらったら選択できるとかだとありがたかった。それとレイブラ 2 では BGM がアニメのものだったのに対して今作はオリジナルなのがちょっと寂しい。悪い音楽ではないんですけど、やっぱり基本はキャラゲーなのでオリジナルに近いほうが嬉しいです。

これでプラチナトロフィーは 29 個目。次はちょっと出遅れましたが FFXV ですかね。あ、それと余談ですがこれで遊んでる途中に PS4 Pro を購入しました。PS4 でも PS4 Pro でもきちんと動作しました。鈍感なので参考になるか微妙ですが、体感的に特に違いはありませんでした(笑)

Railsでのboolean型の命名


2016年11月19日

かれこれ 4 年近く Ruby と Rails を触っているのですが、それでもいまだに初歩的なことで「これ、どうしよう?」と悩んだり、「以前はこうしたけど、今回はどうしよう?」という問題にぶつかる日々です。

先日再びぶつかったのがタイトルのとおり、boolean 型の値を保持するカラムの命名です。この手の問題は命名規約と既存のテーブルの板挟みに合うことがよくありますが、今回は新プロジェクトだったことと、Rails での boolean 型に関しては命名規約が見当たらなかったので余計に悩みました。

候補として挙がるのは 2 案ですね。例として削除フラグ(論理削除は筋悪という議論は置いておきます)を作ろうとした場合

1. deleted
2. is_deleted

この 2 つの間で悩みます。PHP をやってた頃は delete_flag みたいな名前をつけているのを見かけましたが、Ruby 界隈ではあまり見ない気がします。それと海外の文献を見ててもあまり見かけない気がしますが、私の観測範囲はそんなに広くないので偏見かもしれません。

話を戻して、1 番か 2 番かで悩んでいるわけですが、今回参考にしたのは Stack Overflow の回答でした。公式ドキュメントとかじゃないのかってツッコミは勘弁して下さい、見つけられなかったのです…。
convention - rails boolean fields: is_foo or just foo? - Stack Overflow
http://stackoverflow.com/questions/3112078/rails-boolean-fields-is-foo-or-just-foo

Rails で even?, nil?, empty?, blank?といった使われ方をしているのに対して is で始まるのは is_a?ぐらいしか思い浮かばない、だからis_を取り除いた方が良いのではないだろうかというコメントが支持されていますね。Ruby では変数の後ろに?を付けると true false の判定が行われるので、それもこのシンプルさの手助けをしています。

というわけで私はひとまず 1 番の deleted を採用しました。とはいえ正解・不正解を見つけたわけではないのであくまで主観です。それに変数名によっては変更せざるを得ないので(例:public 等の予約語)、高度の柔軟性を維持しつつ臨機応変に対処する必要がありそうです。