完全食COMPを買ってみた

久しぶりの更新です。
今回は技術とは全く関係ない話です。

COMP購入理由

僕は最近までのここ数年、自炊をせずすべての食事を近くの食堂かコンビニで済ませていました。
調理が嫌いというわけではなく、どちらかと言えば食後の後片付けが嫌いだった事が原因です。

たまに自炊をするとなると、調理量のコントロールが下手くそなので大量に作ってしまいます。
作ってしまうと今度は食べ残しがもったいなくなるので、作った分をすべて食べる。
そうこうしていると、摂食量管理の感覚がバカになり大食いするようになる。
大食いに伴い、食後の後片付けが増え更にめんどくさくなる。
めんどくさいのでまた外食に頼るようになる(以下無限ループ)

という悪循環の結果、体重は数年で激増し月の食費はかさむという二重苦を背負う羽目になっていたのです。

そんな事で悩んでいたある時、クラウドファンディング*1でSoylentという製品のキャンペーンを見つけました。
このSoylentは、粉末を液体で溶き、飲むだけで食事が終わるという完全栄養食となっていました。
画期的な製品です。

素晴らしい。
1食の量が決まっておりドカ食いをする恐れもない。
後片付けも1つか2つの容器を洗うだけで良い。
なにより食事に時間をかけなくて済む。
僕にとっては、摂食量管理・後片付け軽減・食事時間管理を同時に行えるという点で救いとも言えるものでした。

しかしながら、Soylentは日本で購入できないという問題があり、結局上記の悪循環から抜け出せずにズルズルと数年すごしていました。


そんななか、1~2年ほど前から日本版Soylentとも言えるCOMPが発売され始めたという事を知り、これは良いチャンスだと思いトライアルパックを購入してみました。
昨日届いたので今回はCOMPのレビューをしてみたいと思います。

COMPとは

粉末状の完全食です。
サプリメントとは違い、これだけで1食分の栄養とカロリーを摂取する事が可能になるものです。

詳しくは下記公式HPにて
www.comp.jp

COMPの飲み方

指定量のCOMP粉末を水などの液体に溶かし、飲むだけです。


お手軽。


ポイントは、「水など」という所でしょうか。
水以外のジュースやコーヒーなどでも良いとの事です。
個人的な味のレビューは下記しますが、結論から言うと水溶きは個人的に合いませんでした。

トライアルパック

こんなかんじ。
f:id:i-hako:20170226045135j:plain

400kcal/Packが3パックセットになっているものです。
値段は300円。
安い。

粉末を液体で溶く際に振り溶かす必要があったので、専用シェーカーとスコップも併せて購入しました。*2

味について

水溶き

試しに100kcal分(23g)を水50mlで溶いてみました。
見た目は水溶き小麦粉のような感じ。
色は淡いクリーム色。

味は、見た目通り。
小麦粉にほんのり砂糖を混ぜて水で薄めたような味でした。
舌触りは少し粉っぽい感じ。

あまり僕の舌に合う味ではなかったです。

カルピス溶き

約300kcal分(70g)を冷蔵庫にあった味わいカルピス(http://www.elbee.jp/ajiwai/)で溶いてみました。
見た目は水溶きとあまり変わらない。

味はカルピス特有の甘さが抑えられた感じで、酸味が独立しているような感じ。
水溶きよりも比較的飲みやすくなりました。

とは言え、あまり大量に飲めるものではない...

コーヒー溶き

慣れてきたので400kcal分(93g)を雪印コーヒー(http://www.meg-snow.com/products/milk/807ef.html)で溶いてみました。
見た目はコーヒーの色が少し白くなった感じ。

味はコーヒーときなこ豆乳飲料(http://www.pokkasapporo-fb.jp/products/soymilk/soyafarm/HK62.html)を併せたような味。
今まででは一番飲みやすい味になりました。

この味なら毎食これでも大丈夫かなという感じ。

摂取後の効果

さすが完全食というだけあって空腹感は一切ありません。
満腹感があるかと言われると、そうでもないという感じです。
おそらく、いままで食事をする際に咀嚼をし腹を食べ物で満たして満腹感を得ていたのが、飲料のみで胃が満たされたため、脳がついていってないんだと思います。

腹持ちは非常に良い気がします。

まとめ

食習慣にまつわる理由からCOMPを買ったのですが、粉末を溶く液体を美味いこと選定すれば飲み続けられるし、食事の質もとても良いと感じています。
溶媒を色々選ぶのが楽しみになりそうです。
面白い組み合わせを見つけたら更新していきたいと思います。
(定期購入しようかな…)

*1:確かkickstarterだったと思う

*2:シェーカーを持っている人は購入する必要ないと思います

Avegant Glyphが来た

4/23にAvegant Glyphという物が届いた。
「Avegant Glyphってなんぞ…?」という方は下記の公式ページをみていただくと良いかもしれない。
www.avegant.com
要するに、ヘッドホン一体型のHMDのことです。
以前kickstarterでbackしてから待つこと約2年、ようやく手元に届きました。
ありがとうAvegant。
せっかく届いたので簡単に粗雑なレビューをしようとおもう。

Glyphについて

HMDって言うと、最近だいぶ話題になってきたOculus Riftだったり、HTC Viveだったり、PSVRだったりを想像する方がいるかもしれないが、アレとは完全に別物だ。*1
OculusなどのHMDは一般的にVRHMDなどと呼ばれていて、主にVirtual Realityで用いられる物で、今回のGlyphとは全然違う。
Glyphは系統的には、VuzixのiwearシリーズやSONYのHMZシリーズなどの過去主流だったHMDと同一の系統である。
つまりVRHMDにある没入感は無い

Glyphの利点

では一体何が良いのかという事について。
今まで出てきた過去のHMD

・配線がアホみたいに多い
・やたら重心が前に有るのでずり落ちる
・鼻の位置が合わなくて装着感最悪
・オーディオ一体型が少ない(あるには有ったがチープなイヤホン程度)
・そもそも、画質が悪すぎて映像なんて見れたもんじゃない(PCミラーリングしたら文字見えない)

などの問題点が有った。
僕も過去に幾つかHMDを試してみたが、Oculus Rift DK1/DK2を除くほとんど全てのHMDに共通の事が言えた。*2

一方で今回のGlyphはそのほとんどをいい感じに解決した製品で

・配線が少ない(映像見るだけならHDMIケーブルだけで良い)
・ヘッドホン部分で固定されるのでなかなかずり落ちない
・ノーズピースが複数付け替えられるので自分に合わせられる
・一体型のプレミアムオーディオヘッドホンがついてる(通常はヘッドホンとして使える)
・片目1280x720pのなかなかの高解像度
・(一応)網膜投影式なのでスクリーンドア効果が無い

などと言った感じになっている。あと、割りとデザインもいい感じなので製品としての完成度はなかなか高い。
特に、撮像方式がマイクロミラーアレイを使った網膜投影方式なので、画が非常に鮮明に見える。(サイコー!)
新しいものが好きなので、当初は単純に網膜投影方式に惹かれてbackしたが、届いてみると割りと色んな所がいい感じで良かったと思っている。
以下レビューしてみる。

開封の儀

まず外箱
f:id:i-hako:20160425024517j:plain
きれい。

開けてみると
f:id:i-hako:20160425024524j:plain
さらに中は二段構成になっており、上段にケーブルなど周辺部品、下段に本体という感じ*3
f:id:i-hako:20160425024529j:plain

これがGlyphだ!

Glyphの内容物
f:id:i-hako:20160425024535j:plain
内容物は
・Glyph本体
・ヘッドストラップ
・ノーズピース
HDMIケーブル(Avegant刻印入り)
・USBケーブル
・収納バッグ
・取説
・謎のカード×3枚

Glyph本体はこんな感じ
f:id:i-hako:20160425030458j:plain
割りとでかい。ちなみにヘッドバンド部分に投光部が来る。
f:id:i-hako:20160425024649j:plain

HMDモードの場合は、ヘッドストラップをつけることで頭にしっかり固定できるし、ノーズピースを付け替えれば自分の鼻の形に合った固定ができる。
f:id:i-hako:20160425030436j:plain
f:id:i-hako:20160425024627j:plain
f:id:i-hako:20160425024638j:plain

HMDモードで使う場合に用いるHDMIケーブルは付属品があって、Avegantオリジナルのもの。
ちゃんと刻印も入ってていい感じ。
f:id:i-hako:20160425024553j:plain

Glyphは専用の収納バッグもついている。これが割りと便利。ちゃんとケーブルを入れるポケットがある。
f:id:i-hako:20160425024632j:plain
f:id:i-hako:20160425031820j:plain
ただ、箱から取り出したときは袋がものすごくイカ臭かった…

あと、取説とともに謎のカードが3枚入ってた。Avegant社とカードバトルする時に使えばいいのかな…
f:id:i-hako:20160425024610j:plain
f:id:i-hako:20160425024619j:plain

オーディオモード

まずオーディオモードについて。
Glyphは通常オーディオモードというモードでヘッドホンとして扱える。かなりゴツいヘッドホンとして…

装着してみた感じ。
f:id:i-hako:20160425025123j:plain
でかい…

音質について

音質については、おそらく賛否両論あると思うけど僕の感想は中低音域が弱いなぁという感想。
僕は普段SENNHEISERのIE80というイヤホンを使っているのだけれど、それと比較するとやはり高音域が強くて、中低音域が弱いという感じだった。
音質は人の好みがあるので、まずはお試しあれという感じ。

装着に関して

まずオーディオモードで使うためには3.5mmオーディオケーブルが必要。
現状Bluetoothはヘッドトラッキングにしか使えないようなので、BTヘッドホンとしては使えない。
ただ、オーディオケーブルに関しては1点注意が必要。
Glyphのオーディオジャックの外壁が割りと狭い…(8mmぐらい今見たらノギスの値7mmだ…)
f:id:i-hako:20160425035621j:plain
通常オーディオに用いいるAUXケーブルだと、モールド部分(持ち手部分)が10mmぐらいあって確実に入らないので、細身のケーブルが必要。
個人的には下記のケーブルを使ったら割りときれいにはまった感じ。
www.amazon.co.jp
f:id:i-hako:20160425035633j:plain
外形6.75mmほどなので、しっかり収まる。

装着感について。
頭頂部にレンズ部があるので、これが頭に結構当たる。痛み的なものはあまり感じないので、個人的にはそれは気にならないのだけれど、
どちらかと言うと頭でレンズ部分を押しちゃっててぶっ壊れないかどうかがすごく不安になる…。
あと、側面のスピーカー部の締付けが割りとあるので、長時間の着用(2時間over)はなかなか疲れる。

この辺全部クリアできれば割りとヘッドホンとしても最高っぽい。

HMDモード

実は、スマホからの画面出力について書きたかったんだけど、僕のスマホが故障したのか、MHLケーブル繋いでもうんともすんとも言わないので、書けない…
代わりに、Raspberry pi 1でやった事について文字で書く。*4
オーディオモードからHMDモードに切り替えるにはレンズ部のレンズカバーを外して、レンズを飛び出させる必要がある。
これは両レンズの真ん中にある丸いボタンを押すと簡単にリリースされる。(とりあえず動画にしてみました。)
vine.co
これをやって、Avegantが指定したキャリブレーションを行ってからいざ映像ソースに接続するとちゃんと見れました。
映像はやはりかなり鮮明。
raspberry piは起動時にターミナルにやたら細かい文字が出てくるけれどそれもしっかり読める。色にじみもない。
冒頭で言ったスクリーンドア効果が無いからかもしれない。とてもきれい。
次回は(というか、スマホの問題が解決したら)スマホAmazonビデオ視聴とかしてみたい。

まとめ

Avegant Glyph、使えます。
ようやく普段使い用の映像視聴用HMDとして標準的なデバイスが出たという感じでした。
今後は、ソフトウェアアップデートとかでBTオーディオが使えるようになったりしたらいいなぁと思う。
(あと、できれば早くヘッドトラッキングとかその辺の開発API公開してほしい…)
多分、Glyph自体これで完成ではないとおもうし、網膜投影だって本物のレーザー走査型ではないので色々改善点が出てくると思うので、今後のAvegant製品に是非着目したい。
次はVRHMDにも使える様なこういうHMD出して欲しいなぁ…

最後にどうしてもこれだけ…

やっぱりこの格好は人前でやるのはちょっとアレな感じある。
f:id:i-hako:20160425025128j:plain

だってこれ、絶対コレ
http://vignette2.wikia.nocookie.net/xmenmovies/images/d/d3/Cyclops_04.jpg/revision/latest?cb=20140330215941
(source: Cyclops - X-Men Movies Wiki - Wikia

か、もしくはコレ

http://www.startrek.com/uploads/assets/db_articles/20a3668f5e41172f613551aa4e8d0fe5911925d8.jpg
(source: Star Trek La Forge, Geordi )

だもんなぁ…
((サイクロップス先輩では)ないです。)



以下WIREDの""ディス""レビュー
www.wired.com


追記(2016/4/26)

関税について書いてなかった。
通常海外発送のものだと、関税でいくらかお金がかかるので、受け取る時に配達業者に支払うんだけれど*5、Avegant Glyphはなぜか関税がかからなかったです。
発送予定日からだいぶ遅れて発送したことに対するサービスなのかな…?

*1:もっと言えば、HMDは Head Mounted Displayのことであって、頭にかぶせて使うディスプレイであればなんだってHMDなのだ。

*2:HTC ViveとPSVR、Rift(製品版Oculus)は試したことが無いのでこの比較には含まない。

*3:写真ぶれてて非常に申し訳ない…

*4:写真が無い…

*5:Oculus Rift DK1のときは900円ぐらいだったはず

博士課程合格しました

本日発表があって無事(?)合格しました。
修士1年生の時に色々あって心をボキボキに折られて相当へこんでいたのですが、"なんとかここまで来ました。"
以前とあるイベントに参加した時にいろんな方とお話したのですが、「ドクターは頑張って進学するものではなくて気づいたらドクターだったという人が多いと思うよ」という話を伺いました。
その観点で見ると「なんとかここまで来た」というこの言葉から、僕がいかに低レベルでギリギリ滑り込んだかがわかるかなと思います。
(心が折れたためにギリギリだったわけではなく、純粋に博士課程で生き残れるかどうかかなり怪しい技術力/知識力なのでギリギリなのです。)
僕が知ってる/会ったことがある/教えてもらったことがあるドクターの先輩方は相当腕のたつ人ばかりだったので、彼らを追い越すためにも着実に色々熟していきたいと思います。


博士課程、一応目標を立てておくと

  • 人前に出せる"モノ"を作る
  • 現在関わっているプロジェクトで使いやすいライブラリと有用なデータセットを作る(できればオープンにしたいけどそのへんは政治事情に任せる)
  • あと1本特許申請
  • 3年で修了する

という具合にしておく。

「人前に出せる"モノ"を作る」と言うのは、完成度を重視した話。
「あと1本特許申請」については、学部4年のときの研究ですでに1つ申請したものがあるが、修士課程では結局1本も出せなかった(あまり研究内容を発展させられなかった)。悔しいので今度こそという気持ち。
「3年で修了する」というのは、博士課程はなかなか難しいとの事なのだけれど、経済状況的にも長引くのはよろしくないのでぜひとも叶えたい所。
若干2016年の目標とかぶってる気もするし、弱気な感じもあるけど一歩一歩地に足をつけて行きたいです。

何にせよ、楽しんで研究したい。

あけましておめでとうございます

新年明けましておめでとうございます。
去年の今日のエントリを見てみると
inside-my-box.hatenablog.com
という感じで、なんだかすごく適当に書いてる感じありますね。
「一年の計は元旦にあり」なんて言葉もあるぐらいですから、もう少しまともな文章書くべきだったのではないかという気がします。
かと言って、じゃあ今年は何か書くものがあるのかというとぶっちゃけ何も無い。(まるで成長してない…)
ほら、だって「来年の事を言えば鬼が笑う」なんて諺もあるぐらいだし。*1

まぁでも目標ぐらいはしっかり定めた方がいいかななんて思うしもう少しまじめに書いてみます。
とりあえず今年は以下の事ができるとすごく嬉しいなという感じ

  • ちゃんと研究
  • 基礎知識の地固め
  • とりあえず人前に出しても恥ずかしくないようなアプリケーションを少なくとも1本
  • 真面目に生きる*2

特に最後の「真面目に生きる」はかなりちゃんと実行したいですね。
というわけで今年もよろしくお願いします。

*1:英語では”Fools set far trysts”(愚か者は遠い先の会合の約束をする)と言うらしいです

*2:やばい

MinGWでOpenCVをビルドしてCLionで使った話

CLionでOpenCVも使えるようにしたいので,MinGWでビルドした話とかをする.
なお,環境は下記

  • Windows10(64bit), Windows7(64bit)
  • OpenCV2.4.11
  • CLion1.2.1

MinGWとCMakeは既にインストールされてるものとする.

OpenCVをビルドする

必要なものは

OpenCVをダウンロードしてくる

公式サイトからダウンロードするsourceforge.net
好きな場所に展開する(僕はD:\OpenCVに展開)

CMakeでgenerate

CMake GUIを開いて"Where is source code"にソースの場所を入れ,"Where to build the binaries"にビルド出力先を指定する.
Where is souece codeにはopencv\sourceを
Where to build the binariesにはopencv\mingwを指定した.
f:id:i-hako:20151125191500p:plain

場所の指定が終わったら,Configureを選択.
するとまずは真っ赤になって色々出てくる
f:id:i-hako:20151125191337p:plain
この赤い色が消えるまでConfigure.
TeX環境が整ってない場合はBUILD_DOCSのチェックボックスをオフにしておくと良いらしい.)

赤い色がすべて消えたらGenerate
これでCMakeの出番は終わり.

MinGWのヘッダーを書き換える

CMakeでGenerateが終わったら本当はすぐにMinGWでビルドするのだけれど,OSのバージョンによってはmingw32-makeがエラーで途中で止まってしまう事がある.
そこでMinGWのヘッダーの一部を書き換える必要がある.
まずはMinGWがインストールされてる場所まで行き,includeの中の"commctrl.h"を開く
f:id:i-hako:20151125192342p:plain
commctrl.hの中に_WIN32_IEを定義してる場所があるので,そこを下図の様に書き換える
f:id:i-hako:20151125193303p:plain
よくわからないけれど,こうすることでmingw32-makeのエラーを回避できる.

MinGWでビルド

コマンドプロンプトを開いてCMakeでGenerateした場所まで行く.(僕の場合D:/OpenCV/opencv_2-4-11/mingw
続いて下記コマンドを入力

mingw32-make

makeが終わったら続いてinstall

mingw32-make install

こうするとOpenCV/opencv_2-4-11/mingw/install下にインストールされる.
後は環境変数にbinとlibのパスを追加して終了.

CLionでOpenCVを使う

CMakeLists.txtを編集

CLionでプロジェクトを開いたら,CMakeLists.txtを編集して,下記を追加する

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(<project name> ${OpenCV_LIBS})

おそらくこれで本当はちゃんと使えるはずだけれど,僕は上手く行かなかったので上手く行かなかった時のための方法も下記しておく

CMakeLists.txtを編集してもうまく行かなかった場合

CLionとCMakeの連携が取れていないのかも知れないけれど,たまに正しいディレクトリが反映されない事がある.
そういう場合はCLionのGUI上でCMakeListsを編集すると良い.
まず[View]->[Tool Buttons]を選択し,ツールボタンを表示させる.すると,CLionの下部に変なボタンが幾つか現れる.
f:id:i-hako:20151125194743p:plain
この中のCMakeを選択し,Cacheを選ぶとCMakeで設定されているパスとかが表示されるので,その中から

を探し,ここの値にMinGWでビルドしたパスを入れる.(僕の場合は画像の通り)
f:id:i-hako:20151125195511p:plain
あとは,左側の保存マークを押して完了*1
f:id:i-hako:20151125195526p:plain
おそらくこれでちゃんと使える様になるはず.

OpenCVとマウスでお絵かきできるミニアプリを作った

試しにLenna*2さんを表示するのは皆やってるので,とりあえずマウスポインタでお絵かきできる奴を作ってみた.

コード

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;

bool drawing = false;
cv::Point point;

void drawLine(cv::Mat* img, cv::Point points){
    cv::circle(*img, points, 3, cv::Scalar(255,255,255), -1, CV_AA);
}


void onMouse(int event, int x, int y, int flag, void* params){
    cv::Mat* image = static_cast<cv::Mat*>(params);

    switch(event){
        case cv::EVENT_MOUSEMOVE:
            if(drawing){
                point.x = x;
                point.y = y;
            }
            drawLine(image, point);
            break;

        case cv::EVENT_LBUTTONDOWN:
            drawing = true;
            point.x = x;
            point.y = y;
            drawLine(image, point);
            break;

        case cv::EVENT_LBUTTONUP:
            drawing = false;
            break;
    }
}

int main() {
    string name = "canvas";

    cv::Mat black_image = cv::Mat::zeros(cv::Size(800, 600), CV_8UC3);
    cv::Mat temp = black_image.clone();

    cv::namedWindow(name, CV_WINDOW_AUTOSIZE);

    cv::setMouseCallback(name, onMouse, (void *)&black_image);

    while(1){
        black_image.copyTo(temp);

        if(drawing)
            drawLine(&temp, point);

        cv::imshow(name, temp);

        if(cv::waitKey(100) == 27)
            break;
    }

    return 0;
}

実行画面
f:id:i-hako:20151125200649p:plain
ちゃんと動いた.

エラーコード0xC0000135で落ちる

CLionつかってると,たまにエラーコード0xC0000135とかいうのが出て実行ができない事がある.
そういう場合はとりあえずCLionを終了して,管理者として実行してみると割りと上手く行く事がわかったのでおすすめ.

*1:そういえば今だにフロッピーマークなのかと気づいた

*2:レナ (画像データ) - Wikipedia

*3:2015/11/25 21:00追記

CLionでBoost

最近、JetBrainsという所が作ってるCLionというC/C++IDEを導入した。
学生ならば*1一年間無料で利用できる。学生特権バンザイ。www.jetbrains.com

CLlionではCMakeとMinGWを使うので、これらもインストールする必要がある。

今回はCLionでBoostを使うための手順を書いていく。

Windowsにboostを入れる

boostをダウンロード

まずは、Boostを本家からダウンロードしてくる必要がある。

最新版で良い。
ダウンロードしたら、展開して好きな場所に置く。(僕は D:\boost に置いた。)

ビルド

boostはそのままでも使えるらしいが、一部はビルドしないと使えないらしい。
ビルドは主にVisual Studioを使ったビルドとMinGWを使ったビルドがある。
今回はMinGWを使ったビルドを行ったのでその方法を書く。
とは言っても何も大したことではなく、まずコマンドプロンプトを開いてBoostを置いたディレクトリまで移動する。
ここで下記コマンドを入力して実行

bootstrap.bat gcc

これで、b2.exeなる実行ファイルが出来上がる。
この実行ファイルが出来上がったら続いて下記コマンドを入力して実行する。
このコマンドでprefixの値は自分がライブラリを展開したい場所、-j 12はビルド時の並列処理のスレッド数なので各自自分のマシンに合わせた値を入れる。

b2.exe install --prefix=D:\boost\stage toolset=gcc link=static,shared threading=multi variant=debug,release runtime-link=shared -j 12

しばらくすると(ぼくの場合)D:\boost\stageにライブラリが出来上がる。

PAHT通し

システムの環境変数に値を追加する。
(CPLUS_INCLUDE_PATHの値はboostをインストールしたディレクトリ)

変数名
CPLUS_INCLUDE_PATH D:\boost\stage\include\boost-1_59\boost
LIBRARY_PATH D:\boost\stage\lib

これでwindowsにboostを入れる処理はおしまい。

CLionでBoostを読めるようにする。

…書こうとしたけど、微妙に上手く行ってないから上手くいった部分まで。*2

CMakeLists.txt編集

cmake_minimum_required(VERSION 3.3)
project(cpptest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)
add_executable(cpptest ${SOURCE_FILES})

include_directories(D:/boost/stage/include/boost-1_59)

target_link_libraries(cpptest ${Boost_LIBRARIES})

という感じで

  • include_directories()にヘッダーファイルの場所
  • target_link_libraries()にリンクしたいライブラリ

を書く。
ソースコード[C++] Windows での Boost 環境構築まとめ (Visual Studio 2012, MinGW) - クソネミ( ˘ω˘ ) から拝借した物を使ってみた。

#include <iostream>
#include <boost/version.hpp>

using namespace std;

int main() {
    cout << (BOOST_VERSION / 100000) << "." << (BOOST_VERSION / 100 % 1000) << "." << (BOOST_VERSION % 100) << endl;
    return 0;
}

実行結果

C:\Users\Home\.CLion12\system\cmake\generated\ba481e8e\ba481e8e\Debug\cpptest.exe
1.59.0

Process finished with exit code 0

ちゃんと正しいバージョンが出てる。

CLionでBoostがちゃんと動かない

「何を言っているんだこいつは…」と思うかもしれないけれど、動かなかったのだ。
詳しく言うと、上記のboost/version.hppではなくboost/thread/thread.hppを使ってマルチスレッド処理を書こうとした所、

CMakeFiles\cpptest.dir/objects.a(main.cpp.obj): In function `_static_initialization_and_destruction_0':
D:/boost/include/boost-1_59/boost/system/error_code.hpp:221: undefined reference to `boost::system::generic_category()'
D:/boost/include/boost-1_59/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()'
D:/boost/include/boost-1_59/boost/system/error_code.hpp:223: undefined reference to `boost::system::system_category()'
collect2.exe: error: ld returned 1 exit status
CMakeFiles\cpptest.dir\build.make:96: recipe for target 'cpptest.exe' failed
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/cpptest.dir/all' failed
mingw32-make.exe[2]: *** [cpptest.exe] Error 1
mingw32-make.exe[1]: *** [CMakeFiles/cpptest.dir/all] Error 2
mingw32-make.exe: *** [all] Error 2
Makefile:82: recipe for target 'all' failed

と出てしまい、上手く動かなかった。
どうやらgccのオプションで -lboost_systemを付けると良いらしいがよくわからない。
またこの辺は後日。
(それより早くOpenCVの記事書かなきゃ…)

*1:ac.jpドメインのメールアドレスを持ってるならば

*2:後述

windows10にアップグレードしたら死んだ話①

経緯

7/29から一般リリースされたwindows10が気になって、アップグレード通知が来るまで待てなかったので手動でアップグレードした。
元のOSはwindows7 Pro。
なお手動アップグレードの方法はこれ
http://www.microsoft.com/ja-jp/software-download/windows10
手順通りにやったらwindows10にアップグレードは出来たもののなんだか色々ぶっ壊れてた。
「何もしてないのにこわれた!」
という気持ち。

何が死んだのか。何が壊れているのか。

具体的には、以下の通り

  • 僕のグラボのドライバがwindows10に対応していなかった*1(そしてこれが大本の原因)
  • windows10からwindows7にもどせなくなった。*2
  • explorer周りが完全に死んでいる。
  • OSのブートマネージャが死んだ*3

おそらく他にも気づいてない細かい点があると思うけど、多分クリティカルなのはこれぐらい。

それぞれの原因と時系列

原因

上記の問題はそれぞれ下記の原因によって起こっているらしい。*4

  • ドライバがwindows10に対応していなかった
  • 何らかの原因でwindows7のバックアップが作成されなかった
  • インストールが正しく行われていない。あるいはインストール後に何らかの原因で破損した。
  • BCDがプライマリディスク*5から何故か消失している。

実はこれらの問題は僕のとある動作によって引き起こされている可能性が高い。

時系列

windows10にインストール後ディスプレイドライバが死んでるのでドライバ入れなおす(nVidia)
-> 対応したハードウェアが見つからないと言われる(大本のドライバがぶっ壊れている)
-> win7の時に使用したドライバディスクでドライバインストール
-> OSがHDDブートしなくなる(ブルスク)
-> USBでレスキューディスク作ってスタートアップ修復(何回やっても失敗)
-> 何故かUSBを挿せばブート出来るようになった(何故かBCDがUSBに作られてしまった。)
-> explorer周りが死んでる事に気づく。
-> windows7に戻せなくなってる事に気づく。

という感じ。

解決方法

以上の問題の解決方法について数回に分けて書いていく。*6
今回はディスプレイドライバの話とOSがHDDブートできなくなった事に対する解決案みたいな話。

ディスプレイドライバ

僕が使ってるPCのグラボGeForce GTS450という割と古い物で、標準のドライバだとwin10に対応してないっぽい。
これはnVidiaがwin10リリース後に配布したドライバソフトをインストールする事で解決した。
http://www.geforce.com/drivers/results/87789
上記URLのドライバをインストールしたらちゃんと機能したので、グラフィック周りがおかしい人は試してみると良いかもしれない*7

OSがHDDブートできなくなった事について

今回は原因とMSのサポートに聞いた解決案についてだけ。*8

原因

windowsは起動に関してどのディスクのどこにwindowsがインストールされているのかという事を記録しているファイルが存在する。
これはBCD(Boot Configuration Data)と言うファイルで、このファイルにパラメータが記述されているらしい。
通常はC:\windows\Boot下に存在するが、何故か僕のwindowsではBCDのみが消えていた。

解決案①

幾つか試してみたがとりあえずMSサポートに言われた内容を記載。
とてもシンプルだが、今回僕のケースではUSBからブート出来るという事で、USBにBCDがある事がわかった。
そこで、プライマリHDDにUSBにある"Boot"というフォルダと"bootmgr"をコピーしてスタートアップ修復を2回行えとの事だった。
(試してみたが、結論から言うとだめだった。どうやらbootmgrがブートするディスクを読みに行けないらしい。)

解決案②

ちょいと技術的な話。このページに掲載されていた。pcsupport.about.com

~> bootrec /rebuildbcd

ここでwindowsが見つかればwindowsがインストールされているディスクをBCDに設定しておしまい。
見つからなければ。

  • 現在設定されているBCDのバックアップをとる
~> bcdedit /export C:\bcdbackup

なお、ここでのドライブはCかどうかは自分のパソコンに合わせて。

  • 続いてBCDのアクセス権を自由にする。
~> attrib C:\boot\bcd -h -r -s
  • BCDをリネームする。
~> ren C:\boot\bcd bcd.old
~> bootrec /rebuildbcd

見つかればwindowsBCDに設定して終了。
どうやらwindowsが見つけられる*9状態であれば、BCDwindowsに設定しそこねているだけらしいので、おそらくこれでうまくいくらしい。

やっぱりだめっぽい

ブルスクになった段階で結構変なところを弄ってしまったらしく、僕のPCは現在windowsがインストールされている領域が何故かロックされているとみなされてしまう。
そのため、上記の解決策ではどちらも上手く行かなかった…

次回

まだ今回の事が結論出てないので、まずはもう少し試してみる。
解決したら次のexplorerの問題とダウングレードできない問題を解決していくつもり。



はー…なんでぶっ壊れるかなぁ…

*1:現在は対応済み

*2:大変つらい

*3:一番でかい!

*4:MSサポート曰く

*5:windowsがインストールされてるディスク

*6:僕もまだ全部解決できてない。

*7:自己責任で

*8:解決できてない

*9:bootrec.exeがOSが入っているディスクにアクセス出来る