gotagota日記

「面白きことは良きことなり」

Xcode の iOSシミュレーターでブラウザがうまく使えなかった件

おもむろにiOSのアプリ開発なんかに手を出して、iOSシミュレーターのsafariをいじってると時々こんな感じの画面がでてきてつながらない。

f:id:gotagotagoat:20150529123520p:plain

動作環境

  • OSX: 10.10.3
  • Xcode: 6.3.2
  • iOS: 8.3
  • eset CYBER SECURITY PRO: 6.0.14.0

顛末

動作環境に eset のバージョンが書いてあるところから察する通り、原因はこいつだった。

設定 -> Webアクセス保護 -> 設定... と飛んでいって、HTTPプロトコルで使用するポート から 80 と 8080 を消してみるとうまく接続できた。

f:id:gotagotagoat:20150529123536p:plain

f:id:gotagotagoat:20150529123542p:plain

所感

どうも https にはアクセスできるけど、http にはアクセスできないみたいだった。 当初、シミュレーター自体がそういう仕様なのかと思い込もうとしてたので危なかった(笑)
これで小一時間はまってしまった。。。

先人の方々には感謝です。

参考URL

vagrant 自分用コマンドなどまとめ

ドットインストール見て、vagrant やそれを使った仮想環境作りについて学んだのでその個人的なメモ。

$ brew cask install virtualbox
$ brew cask install vagrant
  • vagrant にboxをいれる -> ~./vagrant.d/boxes に追加されていく

$ vagrant box add [name_of_box] [欲しいボックスのURL]

-> URL はここ A list of base boxes for Vagrant - Vagrantbox.es から

  • 入れた box を確認

$ vagrant box list

  • box を消したいときは

$ vagrant box remove [name_of_box]

  • 専用のディレクトリを作って cd する
$ mkdir [name_of_directory]
$ cd [name_of_directory]
$ vagrant init [name_of_box]
  • 設定ファイルである Vagrantfile 編集する
    -> しなくても動くことは動く。
    -> コメントアウトしてあるところを読めばなんとなくわかるかと。

起動停止関連

  • 起動

$ vagrant up

  • ssh で接続

$ vagrant ssh

  • スリープ

$ vagrant suspend

  • スリープから復帰

$ vagrant resume

  • 終了

$ vagrant halt

  • 再起動

$ vagrant reload

  • 状態確認

$ vagrant status

  • 仮想マシンの削除 (-> 設定ファイルや box(≒テンプレート) は消えない。vagrant up すればまた作れる)

$ vagrant destroy

$ sudo ln -fs /vagrant /var/www/html

ssh 接続後

  • webサーバーインストール
$ sudo yum -y install httpd
$ sudo service httpd start
$ sudo chkconfig httpd on <- 起動時にサーバー立ち上げる
$ sudo service iptables stop ファイアーウォール切る
$ sudo chkconfig iptables off <- 起動時に

[plugin] sahara の使い方

$ vagrant sandbox on
$ vagrant sandbox status
$ vagrant ssh
~なんらかの作業~
$ vagrant suspend
$ vagrant sandbox rollback   on にした時の状態に戻る
$ vagrant sandbox commit   
$ vagrant sandbox off
参考URL

ruby でヒアドキュメントするさいに - つけると(・∀・)イイ!!

migration ファイルなどで SQL文を直接書きたいときにヒアドキュメントを使うというケースが考えられるけど、そのときには <<- のように - をつけるとシンタックスハイライトとかされたり色々便利。
こんな感じ。

.
.
.
      reversible do |dir|
        dir.up do
          execute <<-SQL
insert into facility_phone_numbers(facility_id, phone_number, description, main)
  select id, phone_number, phone_number_description, 1
    from facilities where phone_number <> '' and phone_number is not null
          SQL
        end
      end
所感

勉強になった。

rspec で raise_error を expect する時に

備忘録

rspec でバリデーションエラーが発生することをテストしたい場合、

expect(@facility.phone_numbers.create!(phone_number: '000-0000-00a1', main: true)).to raise_error(ActiveRecord::RecordInvalid)

ではなくて、

expect {@facility.phone_numbers.create!(phone_number: '000-0000-00a1', main: true)}.to raise_error(ActiveRecord::RecordInvalid)

としないといけない。
つまり、 expect() ではなくて、 {} で囲まないといけない。

所感

考えてみれば () だと単純に create! が失敗してるのでその時点でテストは終了してるから {} のブロックで囲んでその結果を expect しなければならないんだなあ。

参考URL

Google Chrome で白黒印刷したい時は

なんか以前と操作方法変わった・・・? ちょっとわかりづらかったのでメモ。

動作環境

手順

  • ⌘ + p で印刷プレビューを出して、「システムダイアログを使用して印刷」をクリック f:id:gotagotagoat:20150320160907p:plain

  • 「レイアウト」の部分を f:id:gotagotagoat:20150320161106p:plain

  • 「品位と用紙の種類」に変えて、モノクロ印刷にチェック f:id:gotagotagoat:20150320161217p:plain

所感

品位て。

カラムが blank のやつを抜き出した時のメモ

Rails でとあるテーブルの中の特定のカラムが空(≒blank)のものだけを抜き出したいときは、

Facility.where("phone_number <> ''")
# または
Facility.where.not(phone_number: [nil, ''])

みたいにするといいっぽい。

ちなみに、 null のものを抜き出したいときは、

Facility.arel_table[:phone_number].not_eq(nil)
# または
Facility.where("phone_number IS NOT NULL")

とする。

参考URL

Homebrew でいれた 古いバージョンの mecab が mecab-ruby といい感じにならない

以前書いた記事 古いバージョンの mecab を homebrew でいれたのでメモ とちょっとしたエラー対処 - gotagota日記 にある通り、 Homebrew で少し古めの mecab をいれたのですが、どうも mecab-ruby とうまいこといってない。

こんな感じのエラーが出ました。( PATH/TO/ の部分は各自の環境によって様々です)

dyld: lazy symbol binding failed: Symbol not found: __ZN5MeCab12getLastErrorEv
  Referenced from: /PATH/TO/MeCab.bundle
  Expected in: flat namespace

いろいろ調べました結果、これはライブラリの参照先が間違ってる場合におこるようです。

そこで、上のエラーメッセージにあります、 Referenced from: のうしろにあるパスをまるっとコピーして以下のコマンドに渡します。

$ otool -L /PATH/TO/MeCab.bundle

自分の場合は以下のように出ました。

/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
/usr/lib/libmecab.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

このうち、 mecab とはいっている /usr/lib/libmecab.1.0.0.dylib は次で使うのでメモっておいてください。

次に

$ sudo install_name_tool -change "/usr/lib/libmecab.1.0.0.dylib" /usr/local/lib/libmecab.2.dylib  /PATH/TO/MeCab.bundle

として、本来使いたいパスを通します。

ここで、初めて出てきた /usr/local/lib/libmecab.2.dylib ですが、これが本来使いたいパスです。

つまりこのコマンドの構文は

sudo install_name_tool -change "古いパス" 新しいパス 適用したいファイル

といった感じです。

参考URL