curluneの日記

日々試行錯誤。雑多に、気ままに、てきとーに。HoloLens/Oculus Rift,Touchと戯れる日々。

Azure App Service で拡張子の無いファイルをダウンロードできるようにする

以前に困った事があったのでメモ。

AzureというよりはwindowsなwebサーバIISの都合での問題。

mimeが設定されていないファイルへのアクセスはブロックされるので、どうにかしないといけないというお話。

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

解決方法

ふつうなやり方

公開ディレクトリに下記の内容のweb.config追加すればok。

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <staticContent>
                <!-- 動作が怪しい時は一旦割当を削除してみると良いかも -->
                <remove fileExtension="." />
                <!-- 拡張子無し バイナリとして割り当てる -->
                <mimeMap fileExtension="." mimeType="application/octet-stream" />
            </staticContent>
        </system.webServer>
    </configuration>

ファイルは App Service のメニュー App Service Editor (プレビュー) から作成・編集する事ができます。 f:id:curlune:20171030053601p:plain

設定の都合上、mimeはすべてのファイルで共通です。通常はこれで問題ないと思います。諸事情により別の方法も書いておきます。

へんな事をしたい場合

urlの書き換えとphpを利用するとこんな感じでもいけます。

  • web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="my file" stopProcessing="true">
                    <match url="^files/(.+)\.([^\.]+)$" />
                    <action type="Rewrite" url="/download.php?file={R:1}&amp;ext={R:2}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
 </configuration>
<?php
$dir = 'files';

$file = @$_GET['file'];
$ext = @$_GET['ext'];
$fileName = "{$file}.{$ext}";
$parts = [__DIR__, $dir, $file];
// XXX ディレクトリトラバーサル
$filePath = implode(DIRECTORY_SEPARATOR, $parts);

if (!is_file($filePath)) {
    http_response_code(404);
    echo 'Not Found!';
    exit(1);
}

$mime = mime_content_type($filePath);
$length = filesize($filePath); // max 2GB

header("Content-Type: {$mime}");
header("Content-Disposition: inline;");
// 保存させたい場合はこちら
// header("Content-Disposition: attachment; filename='{$fileName}'");
header("Content-Length: {$length}");
readfile($filePath);
exit();

ファイルが触れないなら、触れるところから出力すればいいじゃない、という強引な方法。

こうすることで個別にmimeなどの情報を切り替えることができます。本当はファイルに拡張子を付ければよいだけなのだけれど...。

下記のようなプログラムがあって、これに近い事してごまかしたことがありました...。

  • ファイルは拡張子無しのハッシュ値名で保持
  • 拡張子は別途管理
  • アクセスは拡張子付きのリンク
  • url書き換えで実ファイルへアクセス

参考

https://support.microsoft.com/ja-jp/help/326965/iis-6-0-does-not-serve-unknown-mime-types

IIS 6.0 Web サーバーのファイルを要求した際、そのファイルの拡張子が Web サーバー上に定義済みの MIME の種類ではないと、次のエラー メッセージが表示されます。

HTTP エラー 404 - ファイルまたはディレクトリが見つかりません。

stackoverflow.com

リモートデスクトップ環境でCD等を再生する

手元のメモの整理をかねて。

リモートデスクトップで音楽CDやDVDの再生などを行うためには、グループポリシーの設定が必要なようです。 通常のデータディスクを開く分には設定等は不要です。

解決方法

偶然下記の参考のページを見つけて解決。 以下の操作で音楽CD等もアクセスできるようになります。

Win+R で ファイル名を指定して グループポリシーエディタのプログラム gpedit.msc を起動。

f:id:curlune:20171001234207p:plain

ローカルコンピュータポリシー > 管理用テンプレート > システム > すべてのリムーバブル記憶域クラス: リモート セッションでの直接アクセスを許可する

f:id:curlune:20171001234231p:plain

未構成 から 有効 へ変更。

f:id:curlune:20171001234643p:plain

適応を行うとアクセスできるようになっています。

参考

srad.jp

ディスクを 開く 場合と 再生 する場合でアクセス方法違うのだなあ。

NASを増殖させたお話

最近お家NASの調子が悪く、そろそろ危ないかなあ、ということでバックアップを目的にNASを増設してみました。

結果

  • NAS増えた
  • ZFSベんり
  • 物理つよい!

現役のこ

  • ハード: PRIMERGY MX130 S2
  • OS: FreeNAS
  • メモリ: 12GB
  • HDD: WD Red 3TB (+ 250GB, 4GB? USB)

iSCSIにて接続。 しばらく接続しているとフリーズ?することがある。

具体的にはタスクマネージャーでのディスクのアクティブが100%に張り付いて、読み書きが止まるという状態。放置すると一応は読み込むけれど、またフリーズをくりかえす。再起動するとしばらくの間は起らない。原因は謎。

新しいこ

  • ハード: PRIMERGY MX130 S2
  • OS: FreeNAS
  • メモリ 18G
  • HDD: HGST Deskstar NAS 4TB (+ 250GB)

眠っていた MX130 S2 に 発掘した 8GBx2のメモリと、新しく拾ったHDDを装備!

FreeNAS

FreeNASには2種類あって、今回は iX system の方のやつを使います。 もう一種類はNAS4Free、元々のFreeNASです。

詳しい経緯は分からないけれど、なんだかんだで分かれたようです。 個人で使う分にはどちらも大差は無いかと思います。 ざっくり、FreeNASがpythonで、NAS4Freephpなぐらい?

住んでいるのデータ 現役のNASは領域をいくつかに分けて、別々のディスクとしてiSCSIで接続しています。 これらの中身を新しい子に移植できればバックアップ完了です。

iSCSI

ざっくり、ネットワークで接続できるHDDです。

新規分に接続すると未フォーマットのディスクとして認識されるので、好きにフォーマットして利用できます。 今回はwin上から接続して

バックアップ方法

データの転送方法としては2種類。 ZFSな機能を利用しての転送 両方のNASに接続してOS上でコピー

単純コピー

前者のZFS機能での転送を行おうとして問題発生… 前提となるコマンドが失敗したため、まずはOS上でコピーする事に。 普通にコピペするだけ。

諸事情により空きスペースが必要なので、コピーが終わったスペースを1つ削除。

ZFS利用

ZFSのスナップショット機能を利用してコピー。

ZFSではディスクの領域の一部をブロックデバイスとして切り分けることができます。 このブロック単位でスナップショットを作成やオプションの指定を行えます。

スナップショットを作ると、対象はそのままに、その時点の状態のリードオンリーverにアクセスできるようになります。 そしてスナップショットはファイル化して他所にバックアップしたり、ブロックに戻してリストアすることができます。

スナップショットはリードオンリーなハードディスクとしてiSCSI接続する事も出来てたまに便利です。

スナップショット作成以降はWEB UIが無いのでコマンドで行います。

  • 単にファイル化
zfs send pool1/idisk01@manual-201709xx > pool1_idisk1.img
  • 転送&新環境へのリストア(圧縮つき)
zfs send pool1/idisk01@manual-201709xx | bzip2 -c | ssh new_nas_user@new_nas_ip "bzcat | zfs recv nas2017_pool1/idisks/idisk01"

CPU弱い&ファイルシステム丸ごとなので圧縮は遅くなるだけだったような気も…

これを繰り返してバックアップ完了です。

うるさい

バックアップ完了したのはよいものの、新しいこがうるさい…

もともと PRIMERGY MX130 S2 は繊細?なこで、少し熱くなると前面のファンが元気になってそこそこ音がします。チップセットが高温になりやすい事が原因らしいです。

構成はほぼ同じだけれども、HDDの差でぎりぎりファンの回転ふえるのだろうか…

仕方が無いので先人に倣って対策を行ってみます。

富士通 PRIMERGY MX130 S2 - usyWiki

ファンをトップフローへ

CPUはAMDだけど、クーラの配置はIntelらしいです。ややこしい。

適当に実績のありそうな物を選択。

元々の方が立派感はあるけれど、チップセットを冷やしてほしいのでさくっと交換。 グリスはファン側に添付してあったので、CPU側をきれいにしてから載せるだけ。

若干は静かになったものの、まだうるさい…

物理技

今度はなんとも原始的?な方法へ挑戦。チップセットヒートシンクに熱を通しそうな物をくっつけるという。

早川工業 アルミクリップリング大 8P×3個セット 131651

早川工業 アルミクリップリング大 8P×3個セット 131651

結果としては改善しました… 本当に効果あるのだなあと感動。

すっかり音がしなくなったので満足。ぶつりはっくつよい!

せっかくなので1セット全部くっつけたの図。なかなかにアレ… f:id:curlune:20170916225524j:plain

残った悩み

win10になってから?iSCSIの切断ができない…

FreeNASあたらしくしたら改善しないかなと淡い期待を持っていたけれどダメだった模様。

仕方ないので切断のためにはOS再起動か、NASシャットダウンという荒技がつづく。

HoloLensの充電を比べてみる

Hololensさん、純正でないと充電が遅い、とのことでいくつか比べてみました。

純正だけOK、という訳ではないですがたしかに相性的なものは存在するようです。単にカタログスペックでは分からないかも...

比べ方

こちらのチェッカーを使ってAの値を測ってみました。精度は謎ですが、比べるだけなら多分大丈夫でしょう。 ケーブルは手元にあった短めのやつをつかいました。

HoloLens - ケーブル - 測るやつ - 充電元[ここをいくつか試す] f:id:curlune:20170216003846j:plain

たしかに制限されるらしい

まず、純正の付属品は 1.5A から 2.0A ぐらい。 f:id:curlune:20170216023220j:plain

それに対して多くものは、0.45Aぐらいという結果になりました。ほぼ共通しているのでなんらかの制限に掛かっているようです。代わり映えしない&面倒になったので写真は省力。 f:id:curlune:20170216011221j:plain

測った対象

  • HoloLens付属品
    • 1) 5.2V 2.5A
  • Anker PowerPort 6 Lite (30W 6ポート)
    • 2) 5V 2.4A PowerIQ 対応ポート
    • 3) 5V 1A 通常ポート
  • iPhone5付属品
    • 4) 5V 1A
  • PCのUSBポート
  • cheero Power Plus 6000mAh DANBOARD version -mini-
    • 8) 5V 1Aのポート
    • 9) 5V 2.1Aのポート
  • cheero Power Plus 3 10050mAh
    • 10) 5V 2.4A

固定の値にならなかったもの

純正以外で制限を受けなかったのは下記の2種類だけでした。 他はすべて0.45A止まりという結果です。

Aの値が少ない側の方が早いという意外な結果になりました。

3) 5V 1A 通常ポート Anker PowerPort 6 Lite (30W 6ポート)

純正と大体同じで 1.5A から 2.0A でした。代理に使えそうです。 f:id:curlune:20170216004022j:plain

8) 5V 1Aのポート cheero Power Plus 6000mAh DANBOARD version -mini-

純正と比べると少し小さく 1.0A から 1.3A でした。制限?の0.45Aは突破しています。モバイルのバッテリーで充電できる可能性!! f:id:curlune:20170216004406j:plain

Aが大きければ良いわけではない

今回調べた中での収穫はこの事実ですね。大きければとりあえず速いものかと思っていました。

手元の端末では同じように、2.xAよりも1Aのポートの方が大きな値になる物が多かったです。何らかのチェッカー持ておくと便利そうです。

おまけ

延長ケーブル付けると遅くなるかも。

制限?にかかった0.45A系には影響ありませんでしたが、掛からなかった側は明らかに値が下がりました。 f:id:curlune:20170216020007j:plain

HoloLensへデバイスポータル経由で日本語を入力

バイスポータルを眺めていたら Virtual Input なるものを発見。

これはもしや…と試してみたらHoloLensに対して日本語入力できちゃいました! Bluetoothなキーボードが無い時にPCやスマホから入力したり、ペーストもできて便利です。 f:id:curlune:20170207002933j:plain

バイスポータル

何かと機能が詰まっている便利なヤツです。

msdn.microsoft.com

セキュリティ設定から開発者モードをオンにして、ポータルもオンにするとWEBブラウザからアクセスできるようになります。 初回アクセス時にベーシック認証用のユーザ名とパスワードを設定します。

アクセス方法は2種類、USBをつないで http://127.0.0.1:10080 か、同じネットワーク内から https://{HoloLensのip}/ です。

特に理由がなければ、USB不要なWi-Fi経由でのアクセスが便利です。 IPアドレスの確認は Holographic Remoting Playerがおすすめ。確認以外にもUnity等から繋いで遊ぶ事もできます(本来の用途)。 www.microsoft.com

別の端末からHoloLensへテキスト入力

まずはHoloLens側で入力状態を開始します。

次にお好みの端末からデバイスポータルを開いて、一番の Virtual Input を選択。

最後にテキストエリアに入力してSendのボタンを押すだけ! 日本語も通りました、万歳。

iPhoneでの入力例、こんな感じです。 f:id:curlune:20170207004945p:plain

コマンド(curl)を使ってHoloLensへテキスト入力

こんな感じで行けました!夢が広がります。

curl -X POST -k  --data '' https://auto-{ユーザ名}:{パスワード}@{HoloLensのIP}/api/holographic/input/keyboard/text?text={入力したい文字}
  • ユーザ名の前にauto-を付ける必要があります。
    • 付けない場合は代わりにCSRFのトークンを渡さないといけません。
  • {入力したい文字}はエンコード必要です。
  • POSTで投げますがdataは空で良いようです。
  • -kは証明書のエラースキップのための物です。しっかり証明書対応してあげると不要です。

Fedora25 に Caffe(GPU/CUDA8+cuDNN) + pyCaff(Python3) 環境を作る

先日Fedora 25で環境を作ったときに頑張ったので作業メモ。

試行錯誤を繰り返し、なんとか Fedora 25 + CUDA 8 + cuDNN + Caffe(git) + pyCaffe(python3)という環境は作れました。

取りあえず必要なものはnvidiaGPU。今回はGTX 1080です。 Fedora25のLiveイメージをインストールし、アップデートとVimのインストールをしただけの環境です。

.# 先週からちょこちょこと書き足しつづけ、きりがないので取りあえず公開。

最終的にはこんな感じ

いろいろ試していたのでもしかしたら過不足あるかも...。 設定ファイルは差分を最後に載せておきます。

# リポジトリ追加
sudo dnf config-manager --add-repo=http://negativo17.org/repos/fedora-nvidia.repo
# GPUドライバインストール
sudo dnf install nvidia-driver kernel-devel dkms-nvidia
# 念のため再起動
# (sudo reboot)
# いろいろインストール
sudo dnf install cuda-devel gflags-devel glog-devel lmdb-devel cuda-cudnn-devel cuda-cublas atlascpp-devel clang python3-devel boost-python3-devel
# Caffeのコードを取ってくる
# (cd path/to/dir)
git clone https://github.com/BVLC/caffe.git caffe
cd caffe
# 設定をコピーして調整
# 差分 > 別途記述
cp Makefile.config{.example,}
# (vim Makefile.config)
# boost のヘッダファイル調整
# 差分 > 別途記述
# (sudo vim /usr/local/boost/config/suffix.hpp)
# Caffeをビルドしてテストを実行!
make all && make test && make runtest
# pyCaff ビルド
# venv作成 名前や場所はお好みで
python -m vemv ~/venv_caffe
. ~/venv_caffe/bin/activate
pushd python
# 依存パッケージインストール
pip install -r requirements.txt
# python3対応のためアップグレード
pip install python-dateutil --upgrade
popd
# PATH設定 同等の内容を ~/.bash_profile へ追記すると便利
# /path/to/caffe はcaffeのディレクトリ
PYTHONPATH=/path/to/caffe/python/:$PYTHONPATH
export PYTHONPATH
make pycaff

# pythonでインポートしてみる
python
import caffe

cudaのインストール

こちらの成果物をありがたく使わせてもらいました。

negativo17.org

公式配布verでは、依存関係の都合でドライバ周りがややこしい事になってたり、そもそもFedoraは23しかなかったりするのですが、こちらのリポジトリではすんなりと25へ入れられました。感謝!

Caffeビルドの設定

ここでけっこうつまづいていました... 結局のところ以下の4つの改善でどうにかなりました。

最終的な設定ファイルは最後のあたりに。

  • 新しいgccではビルドできないのでclangを使う
  • boost 1.60 はそのままではビルドできないので少し細工する
  • atlasのライブラリインストールと場所指定
  • CUDAの場所指定

gccの代わりにclangを使う

NVCC src/caffe/layers/elu_layer.cu
/usr/lib/gcc/x86_64-redhat-linux/6.2.1/include/stddef.h(436): error: identifier "nullptr" is undefined

/usr/lib/gcc/x86_64-redhat-linux/6.2.1/include/stddef.h(436): error: expected a ";"

/usr/include/c++/6.2.1/x86_64-redhat-linux/bits/c++config.h(2092): error: expected a ";"

/usr/include/c++/6.2.1/exception(63): error: expected a ";"
... (略)

今回の環境は gcc バージョン 6.2.1 20160916 (Red Hat 6.2.1-2) (GCC)。

なにやら新しいめのGCCはサポートされていない模様。試しに実行するもエラーに遭遇...。理由?みたいなものを何処かで見た気がするけどURL失念。

この辺りや、他いくつか見ながらフラグと調整すると、若干は進んだ気がするけれど、また別のエラーに。対処しきれないオーラを感じて別の手段を検討。

bugs.archlinux.org

さすがにgccビルドは面倒オーラがひしひしとしたのでclangへ逃げました! エラーも読み易くなってお得!

CUSTOM_CXX := clang++

boost 1.60 のヘッダファイルを細工

NVCC src/caffe/layers/cudnn_lrn_layer.cu
/usr/include/boost/config/suffix.hpp(511): error: identifier "__float128" is undefined

1 error detected in the compilation of "/tmp/tmpxft_00006b3e_00000000-11_cudnn_lrn_layer.compute_50.cpp1.ii".
Makefile:588: ターゲット '.build_release/cuda/src/caffe/layers/cudnn_lrn_layer.o' のレシピで失敗しました
make: *** [.build_release/cuda/src/caffe/layers/cudnn_lrn_layer.o] エラー 1

下記ページにたどり着いてどうにかビルドは通るようになりました。ちょっと怪しいけれど取りあえずはよし、ということで。 コメントのsource:のリンク先の通りに書き換えで解決?です。

github.com

--- /usr/include/boost/config/suffix.hpp.orig    2016-12-18 02:21:02.614381963 +0900
+++ /usr/include/boost/config/suffix.hpp  2016-12-07 01:23:21.636332835 +0900
@@ -507,7 +507,9 @@
 #if defined(BOOST_HAS_FLOAT128) && defined(__cplusplus)
 namespace boost {
 #  ifdef __GNUC__
-   __extension__ typedef __float128 float128_type;
+   // https://github.com/BVLC/caffe/issues/3578
+   // __extension__ typedef __float128 float128_type;
+   __extension__ typedef long double float128_type;
 #  else
    typedef __float128 float128_type;
 #  endif

atlasのライブラリインストールと場所指定

NVCC src/caffe/solvers/nesterov_solver.cu
AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so.1.0.0-rc3
/usr/bin/ld: -lcblas が見つかりません
/usr/bin/ld: -latlas が見つかりません
clang-3.8: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile:566: ターゲット '.build_release/lib/libcaffe.so.1.0.0-rc3' のレシピで失敗しました
make: *** [.build_release/lib/libcaffe.so.1.0.0-rc3] エラー 1

今回不足していたのはこちら。

  • atlas-static

ライブラリ別枠なのね...。さらに読み込むための設定も必要です。

実は読み込みについてはドキュメントに載っていたのだけれど気づかず。エラー見ながら実体さがしてました。(ここではatlas-devel って書いてあるだけなのに...。

Caffe | Installation: RHEL / Fedora / CentOS

CUDAの場所指定

CXX src/caffe/solver.cpp
In file included from src/caffe/solver.cpp:6:
In file included from ./include/caffe/solver.hpp:7:
In file included from ./include/caffe/net.hpp:10:
In file included from ./include/caffe/blob.hpp:8:
In file included from ./include/caffe/common.hpp:19:
./include/caffe/util/device_alternate.hpp:34:10: fatal error: 'cublas_v2.h' file not found
#include <cublas_v2.h>
         ^
1 error generated.
Makefile:575: ターゲット '.build_release/src/caffe/solver.o' のレシピで失敗しました
make: *** [.build_release/src/caffe/solver.o] エラー 1
NVCC src/caffe/layers/cudnn_lrn_layer.cu
make: /usr/local/cuda/bin/nvcc: コマンドが見つかりませんでした
Makefile:588: ターゲット '.build_release/cuda/src/caffe/layers/cudnn_lrn_layer.o' のレシピで失敗しました
make: *** [.build_release/cuda/src/caffe/layers/cudnn_lrn_layer.o] エラー 127

2種類の設定、CUDA自体のインストール場所と、CUDAのヘッダファイルの場所が必要です。

まずは気づきやすいCUDAのインストール先。 CUDA_DIR/usr/local/cuda から /usr変更します。

もうひとつは分かりづらいヘッダファイルのインクルードパスです。 どうやらサブディレクトリにいるため見つからないと怒られるらしい...。 インクルードパスを追加してあげる事で解決です。 INCLUDE_DIRS += /usr/include/cuda

CUDA周りの悩ましい(?)事は、CUDAのコマンドが見つからないよりも先に、ヘッダが見つからないエラーに遭遇する事です。(なので、nvccが見つからないにはおそらく遭遇しない)

NVCCでのコンパイルより前に、CXX側からCUDAのヘッダファイルを使おうとしています。 そのため CUDA_DIR だけを設定してもエラー内容に変化が無く気づきにくいのです。 cublas周り入れているはずなのに見つからないといわれて割と悩んでました。

pycaffeまわり

>>> import caffe
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
... (略)
  File "/home/user/venv_caffe/lib64/python3.5/site-packages/dateutil/rrule.py", line 55
    raise ValueError, "Can't create weekday with n == 0"
                    ^
SyntaxError: invalid syntax

requirements.txtで指定されているpython-dateutil>=1.4,<2がpython2用な模様。

python-dateutil - Labix

Ported to Python 3, by Brian Jones. If you need dateutil for Python 2.X, please continue using the 1.X series.

最新版ではpython3対応しているようなのでアップグレードしてみます。初期設定がpyhon2用なのでこうなってるのかなと信じて...

pip install python-dateutil --upgrade

今回は 2.6.0 が入りました。その後、改めてimportを実行すると何も起きない!つまりは問題無し、といことで無事インストールは終了です。

終わりに

どーにか入れられました!

個人的な都合でCentOS系でやりたかったので挑戦してみました。 公式でサポートされているUbuntu環境でやった方が無難かと思います。

何かの役に立ちますよーに。

雑多メモ

文章にまとめきれなかったやつ...

  • ドライバを入れて再起動したときにマウスカーソル動くようになった
  • akmod-nvidia は依存解決失敗で dkms-nvidia にした
  • cuDNNリポジトリから入れられた...
  • deviceQuery は cuda-samples をインストールで入る/usr/share/cuda/samples/1_Utilities/deviceQuery/
  • 多分不要だけれど試行錯誤で入れたパッケージ
    • redhat-rpm-config
    • cuda-cli-tools
    • nvidia-settings
    • atlascpp-devel
      • このatlascppは、途中まで必要なものとして書いていた。ふと dnf removeしてもビルドできたので他が原因だった?
  • CUDA_ARCHcode=sm_20sm_21 は警告出ていたので取り除いた
  • ビルドをやり直す時は make clean

書き換え差分

Makefile.config

--- Makefile.config.example  2016-12-05 03:11:35.958259593 +0900
+++ Makefile.config   2016-12-18 01:28:12.538826746 +0900
@@ -2,7 +2,7 @@
 # Contributions simplifying and improving our build system are welcome!

 # cuDNN acceleration switch (uncomment to build with cuDNN).
-# USE_CUDNN := 1
+USE_CUDNN := 1

 # CPU-only switch (uncomment to build without GPU support).
 # CPU_ONLY := 1
@@ -18,23 +18,21 @@
 # ALLOW_LMDB_NOLOCK := 1

 # Uncomment if you're using OpenCV 3
-# OPENCV_VERSION := 3
+OPENCV_VERSION := 3

 # To customize your choice of compiler, uncomment and set the following.
 # N.B. the default for Linux is g++ and the default for OSX is clang++
-# CUSTOM_CXX := g++
+CUSTOM_CXX := clang++

 # CUDA directory contains bin/ and lib/ directories that we need.
-CUDA_DIR := /usr/local/cuda
+#CUDA_DIR := /usr/local/cuda
 # On Ubuntu 14.04, if cuda tools are installed via
 # "sudo apt-get install nvidia-cuda-toolkit" then use this instead:
-# CUDA_DIR := /usr
+CUDA_DIR := /usr

 # CUDA architecture setting: going with all of them.
 # For CUDA < 6.0, comment the *_50 lines for compatibility.
-CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-      -gencode arch=compute_20,code=sm_21 \
-      -gencode arch=compute_30,code=sm_30 \
+CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
        -gencode arch=compute_35,code=sm_35 \
        -gencode arch=compute_50,code=sm_50 \
        -gencode arch=compute_50,code=compute_50
@@ -48,7 +46,7 @@
 # Leave commented to accept the defaults for your choice of BLAS
 # (which should work)!
 # BLAS_INCLUDE := /path/to/your/blas
-# BLAS_LIB := /path/to/your/blas
+BLAS_LIB := /usr/lib64/atlas

 # Homebrew puts openblas in a directory that is not on the standard search path
 # BLAS_INCLUDE := $(shell brew --prefix openblas)/include
@@ -61,8 +59,8 @@

 # NOTE: this is required only if you will compile the python interface.
 # We need to be able to find Python.h and numpy/arrayobject.h.
-PYTHON_INCLUDE := /usr/include/python2.7 \
-      /usr/lib/python2.7/dist-packages/numpy/core/include
+# PYTHON_INCLUDE := /usr/include/python2.7 \
+#      /usr/lib/python2.7/dist-packages/numpy/core/include
 # Anaconda Python distribution is quite popular. Include path:
 # Verify anaconda location, sometimes it's in root.
 # ANACONDA_HOME := $(HOME)/anaconda
@@ -71,16 +69,17 @@
        # $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \

 # Uncomment to use Python 3 (default is Python 2)
-# PYTHON_LIBRARIES := boost_python3 python3.5m
-# PYTHON_INCLUDE := /usr/include/python3.5m \
-#                 /usr/lib/python3.5/dist-packages/numpy/core/include
+PYTHON_LIBRARIES := boost_python3 python3.5m
+VENV_HOME := $(HOME)/work/repos/caffe/venv_caffe
+PYTHON_INCLUDE := /usr/include/python3.5m \
+         $(VENV_HOME)/include

 # We need to be able to find libpythonX.X.so or .dylib.
-PYTHON_LIB := /usr/lib
+## PYTHON_LIB := /usr/lib
 # PYTHON_LIB := $(ANACONDA_HOME)/lib

 # Homebrew installs numpy in a non standard path (keg only)
-# PYTHON_INCLUDE += $(dir $(shell python -c 'import numpy.core; print(numpy.core.__file__)'))/include
+PYTHON_INCLUDE += $(dir $(shell python -c 'import numpy.core; print(numpy.core.__file__)'))/include
 # PYTHON_LIB += $(shell brew --prefix numpy)/lib

 # Uncomment to support layers written in Python (will link against Python libs)
@@ -88,6 +87,7 @@

 # Whatever else you find you need goes here.
 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
+INCLUDE_DIRS += /usr/include/cuda
 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

 # If Homebrew is installed at a non standard location (for example your home directory) and you use it for general dependenciesf

Fedora25環境にVimをインストール

何かと使うので、まずはVimをインストール。 最新verをビルドします。

最新版をビルド & インストール

# vim用として開発環境で不足するのは大体これぐらい
# コレさえ準備できれば権限無くてもビルドできる(はず)
sudo dnf install ncurses-devel
# 最新コードを取得
mkdir ~/repos/
cd $_
git clone https://github.com/vim/vim.git vim
cd vim
# とりあえず最小限必要なものだけ
./configure --enable-multibyte --enable-fail-if-missing --prefix=$HOME/local
make && make test && make install
# パスを設定
PATH=$HOME/local/bin:$PATH
export PATH
# 設定ファイルにも追記
# (export PATHの前の行にに上記の PATH=...を入力)
vim ~/.bash_profile

~/.local ではなく、別に~/localを作る理由は「優先順位を上げたいから」です。 .localはPATHの末尾にあるため、システムにもvimが入っているとそちらが優先されてしまいます。自前のスペースより、シズテム優先この仕組みはなぜなのだろう??