Xcodeのキャッシュのせいでエラーが出ていた
Tipsレベルですが・・
Xcodeでとあるフレームワークを入れたり消したり、バージョンを上げたり下げたりしていたら、 バージョンAを参照してるつもりが、バージョンBが参照されていました。
ちゃんとFramework Search Pathもフレームワークのパスも確認したが、 やっぱりバージョンAのものになっていました。
どうしようもなくなってしまったので先輩社員に泣きついたところ、 Xcodeが生成するキャッシュにバージョンBのものが残っており、それが利用されていることが原因かもしれないとのこと。
試しに"/Users/${user_name}/Library/Developer/Xcode/DerivedData/"ディレクトリにあるプロジェクトごとのキャッシュから、 該当するプロジェクトのディレクトリをまるごと削除したところ無事にエラーを解消することができました。
いやー先輩マジ偉大っす
みなさんもよく分からないエラーが出たらとりあえずキャッシュを消してみるといいかもしれません。
追記
どうもXcode上からでも削除することができるようです。先人の皆様ありがとうございますm( )m
Homebrewで"configure: error: cannot run C compiled programs"が出た
最近、iOS 9の開発のためにMac OSXをEl Capitan 10.11 Betaに、
XcodeをXcode 7 Beta変えたところ、
しばらく使っていたら、急にtigが使えなくなりました・・
なんか依存ライブラリのReadlineが死んでいたっぽいので、
再インストールしてみました。
$ brew install readline
すると下のエラーが出ました。
==> ./configure --prefix=/usr/local/Cellar/readline/6.3.8 --enable-multibyte checking for suffix of executables... checking whether we are cross compiling... configure: error: in `/private/tmp/readline20150915-84835-wmsgny/readline-6.3': configure: error: cannot run C compiled programs. If you meant to cross compile, use `--host'. See `config.log' for more details
取り敢えず、brew doctor
コマンドで診察してみたところ、
どうも心当たりのある警告が出ていました。
Warning: Your Xcode (6.4) is outdated Please update to Xcode 7.0. Xcode can be updated from https://developer.apple.com/xcode/downloads/
あれ?Xcode入れたんだけどな
と思って、xcode-select
$ xcode-select -p /Applications/Xcode 6.4.app/Contents/Developer
sudo xcode-select -s /Applications/Xcode-beta.app/Contents/Developer/
どうやらxcode-selectの参照がXcode 6.4になっていたことが原因だったみたいです。
Xcode 7 Betaにしたところ、インストールすることができました。
これに限らず、iOS 9の開発でバージョン上げてから何かと詰まることが多いなあ・・(´・ω・`)ショボーン
Rubyのスコープと変数定義で「What!?」ってなった話
最近になって急に、開発言語がPerlからRubyとObjective-Cに早変わりして大変です。
そして、Perlの感覚でRubyを書いていると「What!?」ってなったことがあったので、
久しぶりに記事にしてみました。
下記はPerlのコードです。
#!/usr/bin/env perl use strict; use warnings; use utf8; if (0) { my $message = 'hoge'; } print "$message\n";
が、当然エラーは出ます。
Global symbol "$message" requires explicit package name at.. Execution of.. aborted due to compilation errors.
message変数のスコープがIfブロック内なので当たり前ですよね。
下記はRubyのコードです。
#!/usr/bin/env ruby if false message = 'hoge' end puts "#{message}"
が、エラーは出ません
(何も表示されない)
どうやら、RubyにおいてIfやFor,Whileブロックはスコープを生成しないらしいです。
Ruby
#!/usr/bin/env ruby hoge = 10 puts hoge if true hoge = 100 puts hoge end puts hoge
10 100 100
Perl
#!/usr/bin/env perl use strict; use warnings; use utf8; my $hoge = 10; print "$hoge\n"; if (1) { my $hoge = 100; print "$hoge\n"; } print "$hoge\n";
10 100 10
それでは、話を下記のコードに戻します。
#!/usr/bin/env ruby if false message = 'hoge' end puts "#{message}"
さて、Ifブロックがスコープを生成しないため、Ifブロック外で変数が見えていることは分かりましたが、
何故、undefined local variable or method
エラーが出ない理由が分かりません。
実際にmessage変数のクラスを表示するとNilClassになっています。
#!/usr/bin/env ruby if false message = 'hoge' end puts "#{message.class}";
NilClass
理由は簡単で、ちゃんと定義されているからです。
どうも、Rubyのパーサは代入を見つけた時点で、勝手に変数を定義するようになっているそうです。
知っていれば当たり前なのかも知れませんが、
慣れていない自分からすると、
初期化されていない気がして不安になってしまいます(||゚Д゚)ヒエー!!
参考URL
未変更のファイルが変更扱いになっていた問題(サブモジュール編)
最近、git add
してもgit checkout
しても、変更扱いされているファイル(以下hoge)がありました。
僕としてはhogeをまったく変更した記憶がないんですが・・
同じような現象としてファイルモードの問題があったので、
下記URLを参考に解決しようと思ったのですが、
あんまり関係ありませんでした(ノ゚゚Д゚゚)ノオラァッ!!
その後・・
たまたまgit submodule init
やgit submodule update
したときにhogeに対して下記エラーが発生しました。
No submodule mapping found in .gitmodules for path hoge
なんかサブモジュールになってる・・
工エエェェ(´д`)ェェエエ工
どうやら「インデックスに紐付いていないサブモジュールがあるぞい」というエラーらしいです。
サブモジュールはファイルモードが160000になっているため、
以下コマンドでインデックス一覧を確認できます。
git ls-files --stage | grep 160000
インデックス一覧と".gitmodules"ファイルを比べたときに一覧にしかないインデックスがあったので、git rm
することで無事に解決しました。
--cached
オプションを付けなければファイルごとサヨナラします。注意しましょう。
git rm --cached hoge
サブモジュールェ・・
追記
実はhogeは拾ってきたZshのプラグインで、こいつがコミット時にディレクトリエントリとみなされたことが原因でした。
git clone
したものをリポジトリに含むときにはちゃんとサブモジュールにしましょう。
参考URL
Macでトラックパッドのスピードを限界突破したい
最近全然更新してなかった割にはしょぼい記事ですが・・
Macのトラックパッドのスピードが遅いです。
Better Touch Toolを使って速くしているつもりですが、それでも遅いです。
すごいイライラします´д` ;
そこで、defaults
コマンドを使ってみました。
こいつはシステムやアプリの設定値を読み書きできるツワモノです。
$ defaults read -g com.apple.trackpad.scaling 8
現在、BTTで設定できる最大値の8になっているのですが、
あまりにも遅いので倍の16にしました!!
$ defaults write -g com.apple.trackpad.scaling 16
再起動後、めちゃくちゃ速くなりました。
しかし、BTTが勝手に設定値を書き換えるので併用できない・・
でも、BTTが使えないのは困る´д` ;
結局いい解決案は思いつかなかったんですが、defaultsコマンドが便利でいろいろできるので紹介させていただきました。
(この前までBTTで8以上に設定できたような気がするんだがなぁ・・)
BTTを使っていない人はこの手を使ってください。
でも、使ってない人はさっさと入れたほうがいいと思います_φ( ̄ー ̄ )カリカリ
参考URL
Magic trackpad tracking speed changes | Apple Support Communities
ScalaのArrayとApplyについて調べた
初、Scalaの記事です。
Scalaは言語仕様にオマジナイ的なものが少なくて、
勉強していて「なるほど、ここはこうなってんだ〜〜」て思うことが多いです。
さて、そんなScalaの配列ですが、定義方法だけでも結構あります。
val num: Array[Int] = new Array[Int](5); // 型と要素数で定義 val num = new Array[Int](5); // 型推論 val num: Array[Int] = new Array(5); // 型推論 val num = new Array(5); // Array[Nothing] val num: Array[Int] = new Array[Double](5); // error: type mismatch;
上記はコンストラクタを用いた初期化です。
型と要素数をきっちり定義してもよし、型推論に身を任せてもよしです。
ちなみにブラケットはジェネリックです。
C#あがりの自分にとってはなつかしいものです(-_- )シミジミ
またクラスやオブジェクトにはApplyメソッドという特別なメソッドを定義することができ、定義されていればクラス名(オブジェクト名)のみで呼び出せます。
ArrayオブジェクトではArrayクラスのコンストラクタを呼び出すように実装されているので、 インスタンスの生成は以下のように記述することもできます。
val num: Array[Int] = Array[Int](1, 2, 3, 4, 5); // 型と初期値で定義 val num = Array[Int](1, 2, 3, 4, 5); // 型推論 val num: Array[Int] = Array(1, 2, 3, 4, 5); // 型推論 val num = Array(1, 2, 3, 4, 5); // Array[Int] val num: Array[Int] = Array[Double](1, 2, 3, 4, 5); // error: type mismatch
Applyメソッドあなどれん・・
こんなかんじでオブジェクトをファクトリーにして同名クラスのインスタンスを生成させていることが多いです。
ちなみに、オブジェクト名とクラス名が同じものをコンパニオンオブジェクトといいます。
また、Applyクラスでは要素の取得・代入するように実装されているので、 要素の取得・代入は以下のように記述することができます。
val num = Array(1, 2, 3, 4, 5); num(0) // 1 num.apply(0) // 1 num // 1, 2, 3, 4, 5 num(0) = 6 num.update(1, 7) num // 6, 7, 3, 4, 5
引数がふたつのときはUpdateメソッドを呼び出すように実装されています(こっちはオーバーロード)
うーん、Scalaはおもしろいですねー^_^
補足
実際のコードはこんなかんじです。
Arrayオブジェクト
def apply[A: ClassManifest](xs: A*): Array[A] = { val array = new Array[A](xs.length) var i = 0 for (x <- xs.iterator) { array(i) = x; i += 1 } array }
CentOS 6.4にTorch7をインストールしてみた
最近あまり記事書いてないなーと思いながら投稿・・
巷で噂のディープラーニングをやろうと思ってTorch7をインストールしてみました。
CentOS 6.4でやりました。
ディープラーニング系のライブラリは導入が割とメンドクサいらしく日本語の記事が少ないですね。
H2OとかCaffeとかいろいろあるのですが、
H2OはR言語なのがなんとなく嫌で、Caffeは導入で死ぬことが多いっぽかったのでTorch7でいっかーくらいの気持ちでTorch7にしました。
こちらに導入手順があるのですが、僕のCentOS 6.4だと依存ライブラリ解決スクリプトが、
/etc/os-release
ファイルがないという理由でちゃんと動かなかったので、
依存ライブラリの一覧だけ引っ張ってきて、普通にyum
コマンド叩いてインストールしました。
sudo yum install -y cmake curl readline-devel ncurses-devel \ gcc-c++ gcc-gfortran git gnuplot unzip \ nodejs npm libjpeg-turbo-devel libpng-devel \ ImageMagick GraphicsMagick-devel fftw-devel \ sox-devel sox SDL2-devel zeromq3-devel \ qt-devel qtwebkit-devel sox-plugins-freeworld
あと、OpenBlasとかいうライブラリも必要っぽかったので入れました。
これに関してもスクリプトから引っ張ってきただけです。
cd /tmp/ git clone https://github.com/xianyi/OpenBLAS.git cd OpenBLAS if [ $(getconf _NPROCESSORS_ONLN) = 1 ]; then make NO_AFFINITY=1 USE_OPENMP=0 USE_THREAD=0 else make NO_AFFINITY=1 USE_OPENMP=1 fi RET=$?;_ if [ $RET -ne 0 ]; then echo "Error. OpenBLAS could not be compiled"; exit $RET; fi sudo make install RET=$?;_ if [ $RET -ne 0 ]; then echo "Error. OpenBLAS could not be installed"; exit $RET; fi
最後にPythonとipythonを入れたら依存関係は完了です(ipythonのバージョンが古いとダメみたいです)
git clone https://github.com/torch/distro.git ~/torch --recursive cd ~/torch; ./install.sh
後は上記コマンドを実行して、シェルスクリプトを再読み込みしたらいけました。
vagrant:^_^[~]$ th ______ __ | Torch7 /_ __/__ ________/ / | Scientific computing for Lua. / / / _ \/ __/ __/ _ \ | Type ? for help /_/ \___/_/ \__/_//_/ | https://github.com/torch | http://torch.ch th>
う~ん、なんかざっくりですがインストールできました。
近々、社内の勉強会でディープラーニングの発表をしないといけないのでさわっていこうと思います。
追記
あとから確認したんですが、SDL2-develとsox-plugins-freeworldがインストールできていなかった・・
どちらもサウンド系のライブラリみたいなんですが、音声解析とかさせるときに使うのかな??
入れる場合はソースから入れる必要があるかもしれません。