OmniAICreator/Qiita-1.07M huggingface dataset:
Ansibleでシェルコマンドを実行させるときのノウハウ

基本的にAnsible側に制御を委ねることで冪等性の保持やエラーハンドリングが成されるので、やりたいtaskに対してまずはmoduleを探すべき（`sed`を使わずに`lineinfile`モジュールを使えないかとか）ではあるのだが、どうしてもmoduleで実現できない場合にシェルコマンド直書きになってしまう場合はある。 ~~てかコマンド書いちゃうならAnsibleじゃなくてシェルスクリプトでいいじゃんって話でさ。~~

**※追記 2017-04-05 17:00**

記事執筆時点から時を経た現在の自分の見解としては、shell, command両モジュールの活用には以下の面から否定的であり、なるべくコマンド実行は行わないべきと考えています。

* 冪等性の保証が困難になる。
* Ansible Playbookは実現されるべきシステムの「状態」を示した「実行可能なドキュメント」という側面があるが、コマンドが記載されている場合は実現される「状態」が判別しづらくなる。
* （冗談めかして書いてはみたが）コマンドによるデプロイを行いたいのであればシェルスクリプトでよい。Ansibleを何のために使っているのか？

# commandではなくshellを使う

シェルコマンド直書きする場合によく話題になることとして、`command`と`shell`のどちらのモジュールを使うべきかというのがあるが、`shell`を使う方が間違いない場合が多い。相違点としては、公式ドキュメント上で`command`が["It will not be processed through the shell"](http://docs.ansible.com/ansible/command_module.html)と表現されている通り、シェルを通すのでシェルの機能が使える点。`command`が環境変数を読めない、`&`やパイプ、リダイレクトが使えないのに対し、`shell`ではこれらが使用できる。

シェルを通さないので`command`には環境に左右されず実行できるという利点はあるが、あまりそれが必要になる場面も浮かばないので、迷うようなら`shell`だけ使っていても良いのではないかと。

**※追記 2016-05-19 08:45**

Ansible Docsには以下の記述があるので、汎用性や安全性を高めるのであれば`command`の方が望ましい。あくまでパイプ等のシェル機能がどうしても必要な場合、あるいは楽をしたい場合は`shell`という位置付けの方が良さそうです。

> The command module is much more secure as it’s not affected by the user’s environment.

# エラーハンドリング

Ansibleはリターンコードが0以外の場合に`failed`と判断するが、シェルコマンドを実行させる際にこの条件だと困ることがある。`ignore_error: True`を使ってエラーを完全に無視させることも可能だが、`register:`と`failed_when:`を使った方がより細かく制御できる。

```yaml
- name: check default ruby version
  shell: /home/{{ user_name }}/.rbenv/bin/rbenv version | grep {{ ruby_version }}
  register: ruby_version_check
  failed_when: ruby_version_check.rc not in [0, 1]
```

`register:`は指定した名前の変数にコマンドの実行結果をregisterする。公式ドキュメント上での記載はおそらく[ここ](http://docs.ansible.com/ansible/playbooks_conditionals.html#register-variables)になると思うものの、あまり詳しくなくてモンニョリするのだが、キーバリュー形式でいくつかの値が収まっており、`.hoge`と記述することで値を取り出すことができる。

* rc => リターンコード
* stdout => 標準出力
* stderr => 標準エラー出力
* stdout_lines => 標準出力を1行ずつ出力する（with_items等と組み合わせて使う模様）

上記のyamlではリターンコードを取り出して、0か1以外の場合は`failed`となるよう指定している。`grep`のリターンコードは0と1に限られるので事実上`ignore_error:`と変わらない指定になっているが、例えば0のときに`failed`にもできるし、`stdout`の内容を確認して`failed`させることもできるので、`failed_when:`を使う習慣を身に付けて良さそうに思う。

またregisterした変数はその後のtaskでも引き続き使えるので、コマンド実行結果を`when:`で条件分岐として利用して、taskの実行要否を判断させることができる。上述のyamlでやろうとしているのがまさにそれで、rbenvで指定しているデフォルトのRubyバージョンが想定と異なる場合に限り`rbenv global`を実行させるよう、下記のtaskを続かせている。

```yaml
- name: set default ruby version
  shell: /home/{{ user_name }}/.rbenv/bin/rbenv global {{ ruby_version }}
  when: ruby_version_check.rc == 1
```

# becomeやsudoを使う場合の注意

taskをsudo実行させる`become: yes`（あるいはdeprecatedになっている`sudo: yes`）を指定して`shell`モジュールを実行する場合、当然ながらコマンド実行ユーザーがroot（もしくは指定されたbecomeユーザー）になるので留意する。例えば新しくファイルやディレクトリがそのコマンドの中で作られると所有者がrootになってしまったり、予期せぬ構成となることがままありうる。`become: yes`をズボラにplaybook内で指定しておけば全taskがsudo実行されるのでエラーが起こらなくなるが、`shell`モジュールを含んでいる場合はtask単位できちんと`become: yes`の要否を見極めた方が良い。
[WordPress]ショートコードの中でget_template_partを使ってテンプレート呼び出す

ショートコードの中で
```
echo "<div>hogehoge</div>"
```

みたいなのをたくさん書くのはイマイチなので


```php:functions.php
add_shortcode('items', function(){
ob_start(); //これがないと投稿の一番上に表示されてしまう
get_template_part('item_template');
return ob_get_clean(); //これがないと投稿の一番上に表示されてしまう
});
```

```html:item_template.php
<div class="item">
</div>
```

ob_start()とob_get_clearn()使うのは少し行儀悪いが
このほうがロジックとHTMLを分離できてよい。

## 参考
http://blog.mah-lab.com/2014/05/23/wordpress-shortcode-template/
iOS複数人で開発する時にこれだけはやっておけ

基本的な内容ですが複数人でiOS開発するときのやっておけ設定についてです。
#1.cocoaPodsのバージョンを合わせてライブラリ管理する
iOS開発するときのライブラリ管理のデファクトは[cocoaPods](https://cocoapods.org/)ですが、
cocoaPods自体のバージョン差異で問題が起こったりします。
rubyのgem管理ツールであるbundlerを使ってcocoaPodsのバージョンを管理できるようにしときます。
bundlerのインストールは以下のコマンドで、

```
$gem install bundler
```
インストールできたら開発プロジェクトのルートで

```
$gem init
```
を実行するとGemfileが作成されます。Gemfileに開発者内で合わせるバージョンを記述しておきます。
例えば、cocoaPods v0.38.2で統一する場合には以下の様にします。

```
gem 'cocoapods', '0.38.2'
```
Gemfileの作成が終わったらbunler経由でcocoaPodsを導入します。
以下のコマンドを叩くとインストールできます。--pathで設定している場所はインストール先です。

```
$bundle install --path=vendor/bundle
```
ここまででcocoaPodsのバージョンを合わせることができます。
bundler導入後はvendor/bundle以下にインストールしたcocoaPodsを使う様にしたいので
ライブラリのインストールはbundler経由で以下のように実行してください。

```
$bundle exec pod install
```
bundlerを利用することでcocoaPodsのバージョンを合わせてライブラリの管理をすることができます。
ちなみに、以下のコマンドを実行してしまうとシステムにインストールされたcocoaPodsが実行されてしまうので気をつけてください。

```
$pod install
```

Circle CI等を導入するときもこのあたりはシステム環境と切り離す必要があるので早めにbundler経由でcocoaPodsの管理をするようにしておくと後々楽かも。

#2.Xcodeのバージョンを合わせる

Xcodeのバージョン差異で問題が発生したりするので開発者同士なるべく合わせるようにしたいですよね。
私がやっているのは、Run Scriptを設定する方法です。

Xcodeの「Build Phases」->「New Run Script Phase」でRun Scriptを追加します。
![スクリーンショット 2015-09-24 19.46.36.png](https://qiita-image-store.s3.amazonaws.com/0/21158/97a4ed08-4520-f7dd-b4f0-92665a4cce8d.png)

追加されたRun Scriptに以下のScriptを追加する。

```
if [[ $XCODE_VERSION_ACTUAL != "0700" ]]; then
echo "different Xcode version."
return -1
fi
```
上記の数字の部分はXcodeのバージョンを表しています。
開発に使っているXcodeのバージョンに置き換えてください。

![スクリーンショット 2015-09-24 19.49.37.png](https://qiita-image-store.s3.amazonaws.com/0/21158/60c378f0-5b6b-054f-3cb5-3192fa445c46.png)

上記設定をしておけばXcodeのバージョンが違う場合は警告を出してくれるようになります。


他にも複数人で開発する場合のやっておけ設定あったらコメント等で教えてください。
【本家Stack Overflowより】C++11の<random>で１個目に同じ乱数が出続けるという話

<random> generates same number in Linux, but not in Windows
http://stackoverflow.com/questions/32730906/random-generates-same-number-in-linux-but-not-in-windows の記事が面白かったので紹介。

以下のコードにおいて、Linux環境では何度か実行しても、1回目に出る乱数が同じだったが、なぜか、という疑問。

```cpp:
#include <iostream>
#include <random>
#include <time.h>

using namespace std;

int main()
{
    const int upper_bound = 100;
    const int lower_bound = 1;

    time_t system_time = time(0);    

    default_random_engine e(system_time);
    uniform_int_distribution<int> u(lower_bound, upper_bound);

    cout << '#' << '\t' << "system time" << endl
         << "-------------------" << endl;

    for (int counter = 1; counter <= 5; counter++)
    {
        int secret = u(e);
        cout << secret << '\t' << system_time << endl;
    }   

    system("pause");
    return 0;
}
```

1回の実行で5個の乱数を出すこのコードを、質問者はWindows, Linux で各5回ずつ実行したが、Linuxでは、1個目の乱数が5回とも25になり、Windowsではその現象が起こらなかった、とのこと。2個目以降はWindows, Linuxともバラバラであった。

```text
      | Windows:       | Linux:        
---------------------------------------
Run 1 | 54,01,91,73,68 | 25,38,40,42,21
Run 2 | 46,24,16,93,82 | 25,78,66,80,81
Run 3 | 86,36,33,63,05 | 25,17,93,17,40
Run 4 | 75,79,66,23,84 | 25,70,95,01,54
Run 5 | 64,36,32,44,85 | 25,09,22,38,13
```

私も試しにLinux環境で実行してみたところ、何度実行しても18が得られた。

で、それに対する回答が

* GCC標準ライブラリのlibstdc++では、default_random_engineはminstd_rand0、すなわち単純な線形合同法となっている。
* 乱数の生成方法は、 $x_{i+1} = (16807x_i + 0)\ mod\ 2147483647$だ。[1, 2147483646]までの乱数を生成することができる。
* この式から、仮に乱数の種を1変えれば、1個目に得られる乱数は大抵の場合16807だけ変わることがわかる。
* 一方、件のコードでは、uniform_int_distribution でこれを[1, 100]に割り当てている。もし乱数nが2147483600未満ならば(n-1)/21474836 + 1 を返し、それ以外なら新しい乱数でやり直す。
* ということは、たとえnが16807違っていたとしても、ほとんどの場合、同じ数字を返す。もっというなら、21474836 / 16807 = 1278なので、最大で1278秒 = 21.3分間は、1度目に同じ数字が出続ける。この現象が起こっているとは考えられないか？
* ちなみに、MSVCではdefault_random_engineはmt19937なので、この問題は発生しない。

知らず知らずのうちに罠にハマっていると「あれ？　なんじゃこりゃ？」ってことになってしまいそうだ。乱数を使われる皆様、ご注意あれ。
CentOSでGithubにpushするときpassphraseを省略するための設定

タイトルの通り．

ssh-agentなるものがあるらしく，それを起動する．

```
eval `ssh-agent`
```

もし既にssh-keygenしているなら，

```
ssh-add ~/.ssh/id_rsa
```

まだssh-keygenしていないなら，

```
ssh-add
```

そうすると```~/.ssh/id_rsa.pub ```が生成されているはず．
このファイルをGithubに登録する．
登録の方法はググればわかるはず．
perl - length @array

ご無沙汰しております。

http://mattn.kaoriya.net/software/lang/20150924170051.htm

````perl
my @a = split /,/,"";
warn length @a; # 1 # 訂正前
````

何を隠そう、ワシも時々やってしまうので。

Perlの配列要素数を、`length()`でやってはいけません。

http://perldoc.perl.org/functions/length.html
> This function cannot be used on an entire array or hash to find out how many elements these have. For that, use `scalar @array` and `scalar keys %hash` , respectively.

手短には `0+@array` 。

これだけ知っていれば使う分には十分なのだけど、`length(@array)`が構文として正しいとなると、一体どういう意味なのかも知っておきたいのがハカーの佐賀。

## `length @array` ＃ って一体…

というわけで答えを見る前に、一つクイズを。以下のコードは何を出力するか。

````perl
my @array = (1..42);
print length @array;
````

正解は、`2`。

ではこれは?

````
my @array = (0..0xffff);
print length @array;
````

正解は、`5`。

これでなんとなく察しがついたのではなかろうか。こういうことだったのである。

* `length @array`
* `length (scalar @array)`
* `length 65536`
* `length "65536"`
* `5`

個人的には、"length"という単語を要素数にあてるのは不適切だと思っている。その意味でPerlの`length()`が文字列の文字数を数える以外の意味を持たないのは正しい一方、文脈=contextを読みすぎて`length @array`にあさっての答えを返してしまうのはひどい地雷だとも思う(`use warnings;`で警告してくれるとはいえ)。

要素数は"count"とかの方がよいのではないか。Objective-CやSwiftのように。

Dan the Man with too Many Elements to Count
SwiftでCFunctionPointerのAPI実装

AudioUnitSetPropertyの場合Callback指定

AudioManager.swift

```swift
// Set input callback
var callbackStruct = RenderCallbackStruct({cbInRefCon, cbIoActionFlags, cbInTimeStamp, cbInBusNumber, cbInNumberFrames, cbIoData in
           
            
   return self.recordingCallback(cbInRefCon, ioActionFlags: cbIoActionFlags, inTimeStamp: cbInTimeStamp, inBusNumber: cbInBusNumber, inNumberFrames: cbInNumberFrames, ioData: cbIoData)
            
})

...

func recordingCallback(inRefCon: UnsafeMutablePointer<Void>, ioActionFlags: UnsafeMutablePointer<AudioUnitRenderActionFlags>, inTimeStamp: UnsafePointer<AudioTimeStamp>, inBusNumber: UInt32, inNumberFrames: UInt32, ioData: UnsafeMutablePointer<AudioBufferList>) -> OSStatus {
        
        println("recordingCallback")
}
```

AudioHelper.h

```objc
#import <AudioToolbox/AudioToolbox.h>

typedef OSStatus (^RenderCallbackClosure)(void						*inRefCon,
                                   AudioUnitRenderActionFlags    * ioActionFlags,
                                   const AudioTimeStamp 		* inTimeStamp,
                                   UInt32						inOutputBusNumber,
                                   UInt32						inNumberFrames,
                                   AudioBufferList			* ioData);


OSStatus renderCallback   (void						*inRefCon,
                          AudioUnitRenderActionFlags    * ioActionFlags,
                          const AudioTimeStamp 		* inTimeStamp,
                          UInt32						inOutputBusNumber,
                          UInt32						inNumberFrames,
                          AudioBufferList			* ioData);

AURenderCallbackStruct RenderCallbackStruct (RenderCallbackClosure rClosure);
```
游ゴシックとヒラギノとメイリオの見比べた結果、font-familyには游ゴシックを指定したい


Mac OS 10.9とWindows 8.1から游書体が標準搭載されている。
とはいっても、今までどおりヒラギノとメイリオでいいやと思っていた。
しかし、見比べてみたら游ゴシックが思った以上にキレイ！
個人的にはヒラギノよりもやわらかい感じで游ゴシックの方が好き。
これからは、font-familyには是非とも游ゴシックを指定したい。

# 見比べる

## 環境

| 環境    | OS            | ブラウザ | 備考        |
|---------|---------------|----------|-------------|
| Mac     | OS X Yosemite | Chrome   | MacBook Air |
| Windows | Windows 7     | Chrome   | 個別に游書体をインストール(※1) |

※１ Windows 7に游書体をインストール
[Yu Gothic Yu Mincho Font Pack](http://www.microsoft.com/en-us/download/details.aspx?id=49114)

## Mac(ヒラギノと游ゴシック)

左がヒラギノで右が游ゴシック

![mac.png](https://qiita-image-store.s3.amazonaws.com/0/50720/980ddd73-6055-f2ad-68ef-0b509b11e026.png "mac.png")

## Windows(メイリオと游ゴシック)

左がメイリオで右が游ゴシック

![win.png](https://qiita-image-store.s3.amazonaws.com/0/50720/be71321a-3285-2375-11a4-504467c8e2c7.png "win.png")

## 同じ游ゴシックなのに？

同じ游ゴシックなのにWindowsの方が細いフォントになっているのは、font weightのサポートの違い。
Macはlightが搭載されていない。

個人的には、細いフォントが好きなので、Windowsの游ゴシックが一番キレイに見える。

# ベースにしたいfont-family指定

結論から言うと、游ゴシックを頭にして、ヒラギノ、メイリオを指定する。
もちろん、アルファベットは別指定とかメイリオはバグが多いから避けるとかはあるけど、日本語の基本指定はこれでいいかな。

```css
font-family: "游ゴシック体", "Yu Gothic", YuGothic, "ヒラギノ角ゴ Pro", "Hiragino Kaku Gothic Pro", "メイリオ", "Meiryo", sans-serif;
```

# 参考サイト

## 伝わるデザイン

デザインの基本がとてもわかり易く説明されたサイト。
フォント以外の内容も役に立つ。
フォントについては、以下にわかりやすく基本からおすすめまで説明されている。
游ゴシックのLightはWindowsのみなどの情報もある。

http://tsutawarudesign.web.fc2.com/yomiyasuku.html

## Font−familyのベストな書き方 2015年版

基本的なことからわかりやすく記載されている。
特に、フォントの搭載状況が参考に。
 
http://sole-color-blog.com/blog/design/246/
mail gemでgmailにメールを送受信する


ruby + mailを使って、gmailに送受信してみた

## 送信
```rb
# -*- coding: utf-8 -*-
require 'mail'

Mail.defaults do
  delivery_method :smtp, {
    :address => "smtp.gmail.com",
    :port => 587,
    :domain => 'example.com',
    :user_name => '<自分のgmailアカウント>',
    :password => '<自分のgmailアカウントのパスワード>',
    :authentication => 'plain',
    :enable_starttls_auto => true
  }
end

m = Mail.new do
  from "<送信元メールアドレス>"
  to "<送信先メールアドレス>"
  subject "test mail subject"
  body "テストメールです"
end

# 本文のエンコーディング設定。これを書かないと実行時にワーニングが出る
m.charset = "UTF-8"
m.content_transfer_encoding = "8bit"
m.deliver
```

## 受信
```rb
require 'mail'

Mail.defaults do
  retriever_method :pop3, {
    :address => "pop.gmail.com",
    :port => 995,
    :user_name => '<自分のgmailアカウント>',
    :password => '<自分のgmailアカウントのパスワード>',
    :enable_ssl => true
  }
end

Mail.all.each do |mail|
   puts mail.subject
   puts mail.body
end
```

  * 結果

```
test mail subject
テストメールです
```

## 注意点

* パスワードは2段階認証プロセスのアプリパスワードを設定しないと、ログインできない場合がある（通常のパスワードでもログインできる場合もあるが、突如できなくなる場合もある）
  * https://support.google.com/accounts/answer/185833?hl=ja
s3のファイルをexistsチェック(ファイルの存在チェック)したい

#Exceptionを無理矢理...
aws sdk for Javaには配置オブジェクトのexistsチェックapiが存在しない。仕方ないので、exceptionを無理矢理処理に埋め込みました。

```java

public boolean existsFile(String bucketName, String key) {
        /**
         * ファイルの存在をチェックするapiがs3に存在しないので、やむなく例外処理を利用しています
         * ファイルの数がすくなければ、bucket以下のファイルをlistで取得してから舐める方法もありかもしれません
         */
        try {
            s3.getObjectMetadata(bucketName, key);
            return true;
        } catch(AmazonServiceException e) {
            if (e.getStatusCode() != 404) {
                throw e;
            }
            return false;
        }
    }
```

#参考
http://stackoverflow.com/questions/8303011/aws-s3-how-to-check-if-specified-key-already-exists-in-given-bucket-using-java
AlamofireでUser-Agentを変更する

アプリでAPIなどにリクエストをする場合に、UAを書き換える必要があったためAlamofireを使用した場合の実装です。

## コード
```swift
// managerのインスタンスを取得してUAを書き換え
let manager = Alamofire.Manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders = [
    "User-Agent": "Hogehoge"
]

// リクエストの方法は特に変更なし
manager.request(.GET, "https://api.com/user/get").responseJSON(
			options: NSJSONReadingOptions(), 
			completionHandler: { (request, response, JSON, error) -> Void in
    			println(JSON)
			})
```

## 参考
https://github.com/Alamofire/Alamofire/issues/111
SourceTreeで困った時の対処法まとめ

sourcetreeで困った時シリーズがたまってきたのでまとめておきます
※コピペ元は自分の投稿です

# 「リポジトリは移動または削除されています」というエラーが出て困った　そんな時
例えばsamba経由で作業リポジトリを登録しているとこんな現象に見舞われる。
そもそもsamba経由でSourceTreeを操作すると激重なのでこれをなんとかする方法を是非教えていただきたいところです。

## 作業リポジトリをおいているサーバーにアクセスする
macならfinderから、windowsの場合はエクスプローラーから作業リポジトリをおいているサーバーにアクセスをしてみましょう ※完全にsambaアクセスを想定しています。
ここでwindowsの場合はサーバーにアクセスできた時点で「リポジトリは移動または削除されています」現象が解消されていることがあるので一度アプリを再起動してみても良いかもしれません。

## 作業リポジトリの再登録
SourceTreeに移動し、一覧からエラーの出ているリポジトリをダブルクリックします。
すると警告文がでるので「フォルダを変更」を選択します。
表示されたファインダーから移動した(実際には移動はしていませんが)リポジトリの場所を指定します。

コピペ元：http://qiita.com/nnmr/items/8ff2faf72fd0c082bf86

# 「index.lock': File exists.」というエラーが出て困った　そんな時

SourceTreeを使っていて、いざ変更内容をindexにステージするぞ、という肝心な時に
「index.lock': File exists.」というエラーが出ることがある。
日頃頻繁に出くわす人はまだしも、久しぶりに使ってこの現象が起きた時のためにメモ

## 対象リポジトリに移動
macならファインダーなり、windowsならエクスプローラーなり、今回のエラーが発生したリポジトリの場所に移動する。もちろんコマンドでもOK

##「.git」に移動
対象リポジトリに「.git」があるのでそれに移動
※macだと表示されなかったような...なのでターミナルで操作されることをオススメします。

## 「index.lock」を削除
「.git」に移動したら「index.lock」というディレクトリがあるのでそれを削除
再びindexにステージを試してみよう。

コピペ元：http://qiita.com/nnmr/items/62ebaa81ce0035f6f210

# 「Couldn't load this key」という画面が出て困った　そんな時

![upload3.png](https://qiita-image-store.s3.amazonaws.com/0/57635/1be42a89-ba06-4b47-00ac-0f14568f3767.png)

WindowsでSourceTreeを使っている時にこんな画面が出る時がある。
**「SourceTree Couldn't load this key」**
とググって英語のページばかり出てきてがっかりした人も少なからずいることだろう。

冷静になって、英語を読めばその通り、何かしらのkeyが読み込めていない。
という訳で、読み込みを行う。

##読み込むには

### Pageantを起動

Pageantの開き方は人それぞれあるが、Windowsの画面右下にある▲マークを一覧の中にPageantのアイコンが出てくるのでそこをクリックするというやり方が一つある。

### keyを追加
![upload5.png](https://qiita-image-store.s3.amazonaws.com/0/57635/bccec38d-b223-42a1-cc3a-54919fc98fc9.png)  

Pageantを開いたら左側の「Add key」があるのでそこでkeyを指定して読み込ませ、「close」
次こそは「SourceTree Couldn't load this key」と表示されないはず。

## 起動時に毎回出るんだけどどうすればいいの？

![キャプチャ6.PNG](https://qiita-image-store.s3.amazonaws.com/0/57635/d8f72714-8955-d04e-361c-68a66ce8c785.png)

どっかのタイミングでkeyの場所を変えたりした可能性がある。
SourceTree画面左上の「ツール」→「オプション」を開くと「全般」タブにこのような画面がある。
ここでkeyの場所を指定すれば次の起動時はその場所を見に行くので次こそは出てこないはず。

コピペ元：http://qiita.com/nnmr/items/d4c618566e77fd9a1921

#error: Your local changes to the following files would be overwritten by checkout:　が出てブランチが切り替えられなくて困った　そんな時
手元の作業済みファイルをindex→commitしてから再度ブランチを切り替えてみよう。

#'git apply' failed with code 128:'fatal: Unable to write new index file' というエラーが出てインデックスに上げることもできなくて困った　そんな時

SourceTreeを再起動すると直る。
Laravel5でroutingの設定をしたらlaravel-debugbar が消えたんだけどどうなってんの

Laravel5で他言語対応できるようにURLのプレフィックスを設定したらこの現象に遭遇

middlewareで以下のような設定を加えた

>sample.com でアクセスした時に必ず
>sample.com/en にリダイレクトする

laravel-debugbarでは以下のJSとCSSを呼び出している

>http://[ドメイン]/\_debugbar/assets/javascript/
>http://[ドメイン]/_debugbar/assets/stylesheets/

それが今回のプレフィックスの設定で呼び出す場所が変わっているのである

>http://[ドメイン]/en/\_debugbar/assets/javascript/
>http://[ドメイン]/en/_debugbar/assets/stylesheets/

laravel-debugbar側で呼び出しているURLと実際のURLが異なることでこのような現象が起こる。

# 設定

vendor/barryvdh/laravel-debugbar/config/debugbar.php を少しいじる
prefix付きのURLに切り替える

```
'route_prefix' => 'en/_debugbar',
```

# 注意

composer updateする時に元に戻っている時があった(気がする)ので、composer update
した際は再度debugbar.phpを直す必要がある
【備忘録】ちょいちょい使うunixの一括系コマンド


## カレントディレクトリ以下から特定の形式のファイルの特定の行を削除
jsの読み込みを消す時なんかに便利

```
find . -name "*.html" | xargs sed -i -e '/common\.js/d'
```

## カレントディレクトリ以下から特定のファイルのファイル名を一括変更
プレフィックスが決まってるファイルを使いまわす時なんかに便利
aaa.phpやaaa.htmlをbbb.php,bbb.htmlに変えたい時はこちら

```
ren aaa* bbb*
```
[Bootstrap] レスポンシブ＆ハンバーガーのヘッダー。コピペ用。

Bootstrap を使って作成するヘッダー。コピペ用。
レスポンシブ対応、メニューはハンバーガー化で一元管理可能。
bootstrap の css, js と、jquery の読み込みが必須。

```
      <nav class="navbar navbar-default">
　　　　<!--デフォルトのスタイリングをリセットしたい場合、navbar-default を削除。--->
        <div class="container-fluid">
          <div class="navbar-header">
              
　          <!--ハンバーガー-->
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#site-menu">
                <p>■</p><!--好きなハンバーガーに変更。-->
            </button>
            <!--//ハンバーガー-->

            <!--左ロゴ-->
            <a class="navbar-brand" href="#">サンプル株式会社</a><!--左上のロゴ部分-->
            <!--//左ロゴ-->
            
          </div>
          
          <!---メニュー　li が項目。必要な分だけ li をコピペで増やす。---->
          <div class="collapse navbar-collapse" id="site-menu">
            <ul class="nav navbar-nav navbar-right">
              <li><a href="#">会社情報</a></li>
              <li><a href="#">事業情報</a></li>
              <li><a href="#">ニュース</a></li>
              <li><a href="#">お問い合わせ</a></li>
            </ul>
          </div>
          <!---//メニュー---->
          
        </div>
      </nav>
     <!--ここまで-->
```
The Last Git-Alias You’ll Have to Remember


ネタ元：[gitで登録したaliasコマンド一の覧や内容をイイ感じに確認できるようにしてみた](http://qiita.com/ktty1220/items/d1daf4357ed5f5ceae69)

aliasを設定したはいいものの、使用頻度の低いものはわりと何のキーだったか忘れがち。
そこで、aliasを一覧しつつ中身をチラ見しつつさらに実行する、というようなものを考えてみました。

```sh
z = "!f(){ git $(git config --get-regexp '^alias\\.' | sed -e 's/^alias\\.//' | grep -v '^z ' | peco | cut -d' ' -f1); }; f"
```

何がおこるかというと

1. `gitconfig`のalias定義を抜きだす
2. `alias.`という文字列を抹消
3. 自分自身のalias定義を抹消
4. `peco`でaliasをインタラクティブに選択
5. `git [選択したalias]`を実行

という感じ。

というわけで今後はとりあえず
- `git z`してaliasを選んで実行
- 慣れて覚えたらaliasを直接実行

そもそも使用頻度の高いものをaliasにするような気はするのですがチラ裏程度に。
gif動画からLGTM画像を作る

自分が好きなアニメgifをLGTM画像にしたかったので作りました．
![](https://cloud.githubusercontent.com/assets/8043276/12905186/70d03ac4-cf18-11e5-8f3c-94e0fa53a21e.gif)

shell scriptでも良かったのですが，rubyです．
問題があったらissueやPR投げて下さい．

https://github.com/8398a7/lgtm_creator

# 参考

http://qiita.com/kasei-san/items/207dbf57c555110ede45
KnockoutJSの細かすぎて伝わらないtwo way bindingのネタ帳

# two bindingについて

最近のマイブームは`two-way-binding`という言葉です。その言葉の意味を簡単に説明してしまうと、参照型変数の動作です。aとb２つの変数が違うはずですが、片方に違う値を代入するともう片方の値も書き換わります。つまり、aとbは同期状態になっています。これをhtmlとjsにも同じ動作してあげると、次のような効果になります。

```
<span data-bind="text: a">
<input type="text" data-bind="value: a, valueUpdate: 'afterkeydown'">
```

違う要素のはずなのに、上記のようにaという変数をバインディングしてあげると、inputに代入されたものがspanの値はキーダウンするたびにシンクロされ、同じ値が反映されます。


最近仕事関係でknockoutJSを使って高度なバインディングをしてみました。その結果を下記にまとめました。

# objectのobjectのobject... をバインディング
例として、`item.category.name`についてのバインディングです。このケースはitemのcategoryが可変オブジェクトです。

itemにobserveを効いているはずですが、次のやり方だとcategoryをいくら代入しても変わってくれません。

```
#html
<input type="text" data-bind="value: item().category.name, valueUpdate: 'afterkeydown'">

#js
this.item = ko.observable();

// このケースだとデータが変わりますが
this.item({category: {name: "shoes"}});

// このケースだとデータが変わりません
this.item().category.name = "shoes";
```

なぜかというと、nameにobserveが代入されていないので、監視される変数ではないとknockoutjsが判断し、何も反映してくれません。

しかし、面白いことにjsの代入ではなく、input要素から入力するとcategoryのname変数が変わってくれます。

話が戻ると、変数が監視されるように、必ずobserveをつけなければいけません。

```
#html
<span data-bind="text: item().category().name">

#js
// 初期化
this.item = ko.observable({
    category: ko.observable({
          name:ko.observable(""),
    }),
}); 

// データが変わります。
this.item().category().name("shoes");
```

# valueUpdate

AngularJSをやっている人たちへ、これはkeypressするたびに変わりません。

```
<span data-bind="text: a">
<input type="text" data-bind="value: a">
```

keypressするたびに変わるにはvalueUpdateを使わないといけません。

```
<span data-bind="text: a">
<input type="text" data-bind="value: a, valueUpdate: 'afterkeydown'">
```

デフォルトとして、入力最中のテキストが変わってもバインディングされた変数が変わりません。

# ３つ以上異なる変数のバインディング

今回のケースはhtmlと２つ違うオブジェクトという３つの変数をバインディングするケースです。

```
#html
<span data-bind="text: a">  // １つ目の変数

#js
this.a = ko.observable();  // 2つ目の変数
var objA = { a: ko.observable() };  //３つ目の変数
```

これらを全部シンクロさせるやり方はこれだと考えている方

```
#html
<span data-bind="text: a">  // １つ目の変数

#js
this.a = ko.observable();
var objA = {a: this.a};
```

実はそこに罠が潜んでいます。knockoutJSのデータ更新はobservableを関数として実行する際のみです。つまり、`objA.a(this.a())`はデータ更新してくれますが、上記のサンプルは`objA.a = this.a`と等しくいため、データは更新されません。

じゃ、objA.a(this.a())でやれば良いのではないかと考えている人は、また罠に引っかかりました。これは値を渡しているだけで、this.aとobjA.aはそれぞれ独立の変数になり、this.aの値が変わってもobjA.aに反映しません。objA.aの値を編集しても、this.aの値は変わりません。

```
var objA = {a: ko.observable(this.a())};
objA.a("first"); // this.aは"first"になりません。
this.a("second"); // objA.aは"second"になりません。
```
【Wordpress】予約投稿が失敗した時のチェックリスト

# だいたいの原因突き止め
予約投稿はwp-cron.phpを実施することで公開される。
なので、wp-cron.php周りがうまく動いてるかどうかを動作チェックする。

# wp-cron.phpをサーバ内からアクセスができるか

シェルログインができるなら下記

```lang:command
wget http://xxx.com/{wordpress設置ディレクトリ}/wp-cron.php
```

401が返ってくる場合、アクセス制限がある可能性があるのでその周りチェック、ベーシック認証とか。
最悪、.htaccessに条件付きでアクセスできるように指定すれば200にはなるはず

```lang:.htaccess

<Files wp-cron.php>
order deny,allow
deny from all
Allow from xxx.xxx.xxx.xxx #サーバのIP
Satisfy Any
</Files>
```

# wp-cronを無効にする記述をfunctions.phpで記述してないかチェック

何らかの事情でwp-cronを無効化してる記述がある場合はうごかん（そりゃそーだ

```lang:functions.php
define('DISABLE_WP_CRON', 'true');
```

どうしても上記を記入して運用しなくちゃいけない場合は、cronでcron.phpを実行する記述を行う。

```lang:cron
0-59/1 * * * * root wget http://xxx.com/wp-cron.php?doing_wp_cron 1>/dev/null 2>/dev/null

```

いまのとここのどっちかで解決。
プラグインで対応ってのもあるけど、根本解決ではないのでこの辺チェックで。
指定した番号のtabindexがあるtextボックスにfocus移動したい

こんにちわ～
犬好きの@wannkoromaru|@wankoromaru_kunです。
最近うちのチワプ－（9ヶ月齢）は、ゴムボールのダイレクトキャッチに夢中です。
　　　．．．．．．

さて・・・

HTMLのtabindexってありますよね。

```html
<input type="text" name="hoge" value="" tabindex="123">
```
・・・みたいなやつです。

画面上にいろいろtabindexを割り付けたinput type="text"があるわけですが、処理の都合で、あるtextボックスからfocusOutしたとき、特定のtabindexにfocus移動したくなっちゃったわけです。（・・・ホントはそんなややこしいことしたくなかった(／_・)／）

・・で、やり方をググったのですが、わかるまでちょっと時間がかかった（同類の記事がそれほど多くないような気がした）のでメモめもです。

．．．．

下記のサンプルは、EnterキーでTABキーの動作が出来るようにも~~しろ！と言われた~~した時のcodeをとってきたものです。・・ご勘弁を～

```js
  $(document).on('keypress', 'input[type="text"]', function(ev) {
    var $me = $(this);
    var $list = $('input[type="text"]:enabled');
    if (ev.keyCode == 13) {
      var metabindex = $me[0].tabIndex;

      $list.each(function(index){
        if ($(this).is($me)) {
          var targetIndex = (!event.shiftKey) ? (metabindex + 1) : (metabindex - 1);
          $('[tabindex='+targetIndex+']').focus();
          ev.preventDefault();
        }
      });

    }
  });
```

Enterが押されたとき、

```js
var metabindex = $me[0].tabIndex; 
``` 

で、フォーカスの抜ける前のtabindexを取得できました。（ieの開発者ツールF12で確認しました）





```js
var targetIndex = (!event.shiftKey) ? (metabindex + 1) : (metabindex - 1);
```
のところで、次に移動するtabindexを計算しています。
この例は、単にShiftを押しながらで無ければ現在のtabindexの値にプラス１を・・Shiftを押しながらであれば、マイナス１を・・しているだけです。

そして、その計算したtabindexにfocusを移動するとき、

```js
$('[tabindex='+targetIndex+']').focus();
```
・・・を実行します。


要は・・・・

```js
$('[tabindex=999]').focus();
```
とすれば、tabindexが999の所にfocusがうつるというところでしょうか？


後記；
書き終えれば、たいした話ではないのかな （?_?>
でも、どこかでお役に立てればうれしいです。
[WordPress] 勝手に追加される<p>タグや<br>タグを取り除く

どういった条件で追加されるのか不明だが、

投稿のテキストエリア内には

```html
<main>
<!-- 内容 -->
</main>
```

と書いたはずなのに
最終的に表示されるソースを見ると

```html
<p>
<main></p><br>
<!-- 内容 -->
<p></main></p>
```

おかげでレイアウトが崩れてしまうので、以下の様な対策をした。
functions.phpに追加


```php
remove_filter('the_content', 'wpautop');　// 記事の自動整形を無効にする
remove_filter('the_excerpt', 'wpautop');　// 抜粋の自動整形を無効にする
```


## 参考
http://webkikaku.co.jp/staff/wordpress/wordpress-automatic-forming-control/
あたるクンっぽいもの


単なる乱数の練習用に。

```cpp:a.cpp

#include <stdio.h>

#include <string>
#include <map>
#include <random>

int main( int , char ** ) {
	
	std::random_device rd;
	std::mt19937 mt( rd() );
	std::uniform_int_distribution<int> loto7( 1, 37 );
	
	std::map< std::string, int > already;
	
	while( 1 ) {
		
		std::string ret;
		std::map< int, bool > number;
		
		for( int i = 0; i < 7; ) {
			
			int r = loto7( mt );
			
			if( number.find( r ) == number.end() ) {
				
				number[r] = true;
				++i;
				
			}
			
		}
		
		for( auto &n: number ) {
			
			char buf[32];
			sprintf( buf, "%02d,", n.first );
			ret += buf;
			
		}
		
		if( ret.empty() ) {
			
			continue;
			
		}
		
		ret.erase( ret.end() - 1 );
		
		if( already.find( ret ) == already.end() ) {
			
			already[ret] = 1;
			
		} else {
			
			++already[ret];
			
			// 1回だけだと味気なかった？ので、3回出現したら結果とする。
			if( already[ret] >= 3 ) {
				
				printf( "%s\n", ret.c_str() );
				break;
				
			}
			
		}
		
	}
	
	return( 0 );
	
}


```

<pre>
[todanano@localhost tmp]$ ./a.out
15,18,20,21,24,28,33
[todanano@localhost tmp]$ 
</pre>
UbuntuにPython環境インストールする手順

# pyenvのインストール

## zsh

```
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
```

## bash

```
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
```

## copy用

```
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
```

# pythonのインストール

```
pyenv install 3.4.3
pyenv rehash
```

ちなみにrehashを自動でやるpyenvプラグインもある

# pyenv-virtualenvのインストール

## zsh

```
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
echo 'export VIRTUAL_ENV_DISABLE_PROMPT=1' >> ~/.zshrc
source ~/.zshrc
```

## bash

```
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
echo 'export VIRTUAL_ENV_DISABLE_PROMPT=1' >> ~/.bashrc
source ~/.bashrc
```

## copy用

```
eval "$(pyenv virtualenv-init -)"
export VIRTUAL_ENV_DISABLE_PROMPT=1
```

# virtualenvの作成

`pyenv virtualenv 3.4.3 my_application-3.4.3`

# virtualenvの適用

プロジェクトディレクトリ直下で

`pyenv local my_application-3.4.3`

# 依存関係の出力	

プロジェクトディレクトリ直下で

`pip freeze > requirements.txt`

# 依存関係のインストール

プロジェクトディレクトリ直下で

`pip install -r requirements.txt`
Submitできない ERROR ITMS- 90533 Missing Architecture. Extension Bundle requires a UIRequiredDeviceCapabilities value of "arm64"

下記を参考に解決しましたが、少し分かりにくかったため残しておきます。
http://stackoverflow.com/questions/32534178/submitting-app-with-xcode-7-error-itms-90533-missing-architecture-extension-b

１、メインAppのTARGETSの修正
　　Valid Architecturesをarm64にします。
![スクリーンショット 2015-09-24 17.11.47.png](https://qiita-image-store.s3.amazonaws.com/0/89206/f9e9931a-594a-19b1-ccab-f0b3526cffd9.png)

２、メインAppとExtensionAppのinfo.plistの修正
　　下記のように追加します。
　　UIRequiredDeviceCapabilitiesをコピペすると、既に存在しますが～というメッセージが出てくるので「はい」を選んでください。

メインApp
![スクリーンショット 2015-09-24 17.13.29.png](https://qiita-image-store.s3.amazonaws.com/0/89206/2ee8fcf2-5f11-61b5-3a82-c62400e99f2d.png)
ExtensionApp
![スクリーンショット 2015-09-24 17.13.47.png](https://qiita-image-store.s3.amazonaws.com/0/89206/bffbb7e1-9f57-cc56-f30c-0b757bad969f.png)

2015/9/30追記
今回は下記のアプリをSubmitしたのですが無事リリースできました。

Safari上の広告をブロックする -Adバスター-
https://itunes.apple.com/jp/app/safari-shangno-guang-gaowoburokkusuru/id1042279527?mt=8

2015/10/9追記
有料ユーティリティ部門で1位になりました。

2015/11/25追記
2015/10/24に有料部門で1位になりました。
学习 sneaker


sneaker 很好的把使用 bunny 和 rabbitmq 封装了起来, 而且提供了灵活的进程管理机制. 成为 rabbitmq 官方的推荐版本. 下面来看看它到底做了些什么.

首先来看看 Demo:

```ruby
require 'sneakers'
require 'redis'
require 'json'

#$redis = Redis.new

class Processor
  include Sneakers::Worker
  from_queue :logs

  def work(msg)
    err = JSON.parse(msg)
    if err["type"] == "error"
      #$redis.incr "processor:#{err["error"]}"
      puts err["error"]
    end

    ack!
  end
end
```
然后通过

> ─> sneakers work Processor --require boot.rb   
  
就可以启动当前这个`Processor`作为一个`worker`来处理 message.
然后默认会创建4个进程来监听代码里设定的queue `logs`, 默认在对于 queue 的处理上,当没有对应的 queue 的时候它会负责创建.


- Sneakers::Publisher



>It uses a hybrid process-thread model where many processes are spawned (like Unicorn) and many threads are used per process (like Puma), so all your cores max out and you have best of both worlds.

这个信息量有点大啊. 采用超轻量的进程-线程模式. 

- 像`Unicorn`那样,复制很多的进程.
- 然后像`Puma`那样,每一个进程都使用了多线程. 

所有这样可以最大使用CPU;


#尼玛最后跑题了啊, 跑到了进程线程哪里去了!!!

link:

1. http://thorstenball.com/blog/2014/11/20/unicorn-unix-magic-tricks/
2. http://unicorn.bogomips.org/
3. http://media.pragprog.com/titles/jsthreads/wwrt-puma.pdf
Resources.Loadのメモ（複数プレハブの読み込み・複数フォルダの扱い）

- Resources.Loadで指定した名前のプレハブが複数存在する場合、どれが呼ばれるかわからない。
- １つだけが呼ばれるので、もし複数全部をInstantiateする場合
<pre>
foreach( var obj in Resources.LoadAll( pathName ) )
		Instantiate( obj );
</pre>
- などと書くと全部Instantiateできる。

-----
- Resources.Loadした時に複数のResourcesフォルダがあった場合どうなるのか。
  - 複数フォルダのいずれかに指定したファイルがあれば取ってこれるよ。
  - Resourcesフォルダは２つ以上あっても大丈夫。

気になってちょこっと調べてみてた。
Zabbixでネットワーク機器をSNMPで超簡単に監視する

##はじめに
Zabbixでネットワーク機器の監視について
あまり情報が少ないかなと思いまとめてみたいと思います。
MTRGやCactiなんかよりも簡単に出来るのではないでしょうか。
トラフィック情報の可視化やリンクステータスのトリガーなど特に設定することなく得られます。

##環境
- Zabbix 2.4.6
- CnetOS 6.5 64bit

##対象機器
- Cisco Nexus
- F5 BIG-IP

##ステップ1
管理 -> 一般設定 -> マクロ で{$SNMP_COMMUNITY}をデフォルトのpublicから実際のネットワーク機器に設定されているコミュニティ名に変更する

下記は変更後の画面
![1.png](https://qiita-image-store.s3.amazonaws.com/0/24044/ed4c2ff9-7a65-1dc6-f02f-1e32809c04b8.png)


##ステップ2
設定 -> ホスト -> ホストの作成 で下記のように設定する。私は「bulkリクエストを利用」のチェックは外しています。
![22.png](https://qiita-image-store.s3.amazonaws.com/0/24044/9aa69ba9-2598-b6b5-cfe8-b30ca67db39c.png)


テンプレートは下記を選択。
![3.png](https://qiita-image-store.s3.amazonaws.com/0/24044/9d5d32c8-cfc3-3112-9aa4-fbc1b003a1bd.png)

この2ステップで基本的に完了します。
ディスカバリで取得するアイテムの中には更新間隔が3600秒のものもあるので気長に待ちます。

##確認
監視データ -> 概要 で下記のようにインターフェースのステータスが確認出来ます。ステータス監視にトリガーがついています。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/24044/d474a5be-12a4-c4b9-f7ba-5ec7f573f06d.png)


監視データ -> グラフ でIN/OUTのトラフィック量も確認出来ます。
![5.png](https://qiita-image-store.s3.amazonaws.com/0/24044/e4767b90-d78a-fd7a-2fdc-04c7c9bd9979.png)

##まとめ
特に監視したいインターフェースはスクリーンを用意しておくと良いかもしれません。
まだ登録したばかりですがロードバランサー(BIG-IP)のDisk使用率、CPU使用率、インターフェイスなんかも簡単に監視出来ます。
Linuxにおけるユーザーの操作まとめ

# Linuxにおけるユーザーの操作まとめ

この記事におけるLinuxディストリビューションは **Ubuntu** になります
ディストリビューションによってコマンド名は変わってくるのでご了承ください

## ユーザーを作成

```
$ useradd -m user
```

`-m` オプションで **ユーザーディレクトリの作成** （この場合は `/home/user` に作られる）

## ユーザーのパスワードを作成

```
$ passwd user
```

削除して作り直したい場合は

```
$ passwd -d user
$ passwd user
```

## グループを作成

```
$ groupadd usergrp
```

## ユーザーにグループを所属

```
# gpasswd -a user usergrp
```

`usermod -G usergrp user` はやめましょう（[src](http://d.hatena.ne.jp/thegoodbadugly/20130116/1358316032))

## ユーザーをsudoersに追加

```
$ sudo su
# vim /etc/sudoers
```

管理者権限で編集してください。

```
# User privilege specification
root    ALL=(ALL:ALL) ALL
```

この部分に1行追加して

```
# User privilege specification
root    ALL=(ALL:ALL) ALL
user    ALL=(ALL:ALL) ALL
```

## ユーザーのログインシェルを変更

```
$ sudo chsh -s /bin/bash user
```

## ユーザーの設定を参照

```
$ id -a
```
[Swift] わからない言葉をとことん調べて基礎を積み上げる 「モジュール」

#モジュールのインポート
クラスや関数の使い方に関する情報を取り込むためにimportする
システムが提供するSDKのディレクトリの中を探すとある.swiftdocや.swiftmoduleというファイル。これがSwiftが利用できるモジュールの情報。
（どこにあるか不明）
モジュール
例 Cocoa , UIKit , SpriteKitなど

-モジュールのインポートの仕方
`code`
import Cocoa
import UIKit
これをインポートすることによって様々な機能を追加できる



- SDKとは？

> ソフトウェアを開発するために必要な技術文書やツールなど一式のことである。

-モジュールとは？
>組み立てユニット。また、装置・機械・システムを構成する、機能的にまとまった部分。


#名前空間(namespace)
**名前の混同(衝突)を回避するための概念**
- 同じ名前が存在すると区別できずにエラーになるため必要。
- 予約語?(fopenなど)の記述を詳細に書くことにより回避→名簿で木板くん２人を区別するために、木板金太郎くんと木板桃太郎くんのように詳細に記述するようなもの）

関数名のfopenとC言語標準ライブラリのfopen。混同する時は後者をFoundation.fopenと置いて区別。
一般には、「モジュール名.名前」細かく指定しないといけない場合は「モジュール名.クラス名.ネスト型名.名前」




アプリ開発も記事書くのも初心者なので至らない点がありましたら助言していただけると幸いです。
参考サイト:https://ja.wikipedia.org/wiki
rspec: match_array は 多次元配列の順番を検証してしまう

match_array は配列の順番を問わずに検証してくれる。

```rb
expect([1,2]).to match_array [2,1] # => true
```

だけど多次元配列 ( 配列の中の配列 ) だとダメだ。

順番を気にしないのは、1階層分だけ。
2階層目以降は検証されてしまう。

```rb
expect([[1,2],[3,4]]).to match_array [[2,1],[4,3]] # => false
```

もし多次元配列をチェックする場合は、各配列の順序を合わせること。

```rb
expect([[1,2],[3,4]]).to match_array [[3,4],[1,2]] # => true
```

だがそれより、何回かに分けた方が良いだろう。

```rb
expect([1,2]).to match_array [2,1] # => true
expect([3,4]).to match_array [4,3] # => true
```

---

バージョン: Rspec 2.14.8



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
$("[ 属性 ^= '値' ]")　前方一致が便利で好きです。

```html:hoge
<nav>
  <ul>
    <li id="nav_home">ホーム</li>
    <li id="nav_about">アバウト</li>
    <li id="nav_contact">コンタクト</li>
  </ul>
</nav>
```

$("[ 属性 ^= '値' ]")  が便利です。 :bowtie: 

上記のようなHTMLがあって、
id名がnav_で始まるものいずれかをクリックした時に
反応して欲しい時とかによく使います。便利です。

あとラジオボタンのグループ選択とかの便利です。

```js:hoge

// id名が"nav_"からはじまる要素をクリックしたときにアラート
$("[id^='nav_']").on('click', function() {
    alert("hit!");
});
```
Apache2.4でMultiViewsを指定してphp拡張子なしでアクセス出来なかった話

ついさっき気付いた事。
Apache2.4ではMultiViewsにしても拡張子無しでPHPにアクセスできないっ。

# 前段

Apache2.2の頃までは

~~~apache
<IfModule php5_module>
	AddType application/x-httpd-php .php
</IfModule>

<Directory /directory/>
	Options MultiViews
</Directory>
~~~

こんな記述をして、
http://domain.tld/sample
と、sample.phpがある場所にアクセスすれば、MultiViewsが動作して sample.php が実行されていたのに・・・。

# 理由

どうやら、上みたいな感じで安易に使ってしまって sample.bak とか sample.old で退避していたファイルが見えてしまうとか色々問題があったようで、MultiViewsの挙動が変ってしまったもよう。

[mod_mime - Apache HTTP サーバ バージョン2.4](http://httpd.apache.org/docs/2.4/ja/mod/mod_mime.html#multiviewsmatch) から引用
> 最後に、mod_mime が認識しない拡張子であろうとも、 どんな拡張子でもマッチさせる Any が使用できます。 この挙動は Apache 1.3 のときと同じもので、予期しない動作、例えば .old や .bak ファイルといったウェブマスタが送信を意図していない ファイルを送信する、といった動作を行なう可能性があります。

細かくは、ネゴシエーション順としてContent-Typeから判断したりとか色々高度に処理してくれるみたい。
[mod_negotiation  - Apache HTTP サーバ バージョン2.4](http://httpd.apache.org/docs/2.4/ja/mod/mod_negotiation.html)

# 今回の結論

で、Apache2.4で今回はどうするか、、、。

~~~apache
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
~~~

と、mod_rewriteでお茶を濁すのが手っ取り早かった。。。

# 他に試したこと

この他にも

~~~apache
RemoveType .php
<Files "*.php">
	MultiviewsMatch Any
</Files>
~~~

と、MultiviewMatch のデフォルトが NegotiatedOnly になったから Any を強制してみたり

~~~apache
<IfModule php5_module>
#	AddType application/x-httpd-php .php
	<FilesMatch \.php$>
		Sethandler application/x-httpd-php
	</FilesMatch>
</IfModule>

<Files "*.php">
	MultiviewsMatch Any
</Files>
~~~

AddTypeからSetHandlerに変更してみたりしたけど、どれも思った挙動には成らず、404 Not Found を返される状況だった(T_T)
もう少しドキュメントを読み込んで理解すれば、mod_rewriteではない方法でやれるのかもしれないけど、今はこの対処で。。。
(知ってる方いれば、教えてください－。)

# 2016/12/12 追記

何だか、自分の記事に再度検索で引っ掛かってしまったので修正加筆。

MultiviewsMatch Handlers で動作させることができます。
その場合、

```apache
AddType application/x-httpd-php .php
MultiviewsMatch Handlers

Options +MultiViews
```

という設定になります。
ただ、「AddType」による指定は

> Apache が特定の拡張子のファイルを PHP としてパースするよう設定します。 たとえば、Apache が拡張子 .php のファイルを PHP としてパースするようにします。 **単に Apache の AddType ディレクティブを使うだけではなく、 悪意を持ってアップロード (あるいは作成) された exploit.php.jpg のようなファイルが PHP として実行されてしまわないようにしたいものです。** この例では、PHP としてパースさせたい任意の拡張子を追加していくだけです。 ためしに .php を追加してみましょう。
> 
> [Apache 2.x (Unixシステム用)](http://php.net/manual/ja/install.unix.apache2.php)より引用

と言う感じで、PHPのインストールページを見るとAddTypeはお奨めではないようなので、mod_rewriteで対応していた方が気が楽そう。
Travis CIでPull Requestではなく、デフォルトブランチのみでコマンドを実行する


Pull Requestではなく、デフォルトブランチ(特定のブランチ)でのみコマンドを実行するパターン。

```sh
test $TRAVIS_PULL_REQUEST == "false" && test $TRAVIS_BRANCH == "master" && したいこと
```

例えば、デプロイ系のやつをTravisでやりたい場合、Pull Requestとかで行われると困ったりする。

```yaml
after_success:
- test $TRAVIS_PULL_REQUEST == "false" && test $TRAVIS_BRANCH == "gh-pages" && deploy
```

みたいな感じでやったりする。

デフォルトブランチの取得ってコマンドでできるのかな?(デフォルトブランチという概念があるのかよくわからないけど)

----

`.travis.yml`の[Building Specific Branches](http://docs.travis-ci.com/user/customizing-the-build/#Building-Specific-Branches "Building Specific Branches")だとPull RequestでTravisが動かなくなる。

Travisのdeploy機能に対応してるサービスは`on:`でブランチしていできるのでそもそも問題なさそう。

- [Conditional Releases with on:](http://docs.travis-ci.com/user/deployment/ "Conditional Releases with on:")
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"? 

Sinatraでpostgresqlにつなごうとしていたら、下記のようなエラー。Rails等他のところでは繋げられているのになぜ？


```terminal
bundle exec rake db:migrate
rake aborted!
PG::ConnectionBad: could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
```

http://taise.hatenablog.com/entry/2013/10/13/162546 によると
`/var/pgsql_socket/.s.PGSQL.5432` という場所が違うらしい。

自分の場合は下記のようにしてOKでした。

```
$ sudo find / -name .s.PGSQL.5432
$ sudo mkdir -p /var/pgsql_socket
$ sudo ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket
```
CoffeeScriptのREPLでunderscoreを`__`にrequireして起動する

`_`は直前の実行結果を表す変数にbindされているので、underscoreは`__`あたりを使えば良さそうですが、いちいち起動時に `__=require 'underscore'` するのも面倒なので、

```
coffee -r __=underscore
```

のようにすればokです。

`package.json`に

```json
{
  "scripts": {
    "console": "coffee -r __=uncerscore",
  }
}
```

などと書いておけば、`npm run console` で起動できますね。
Xcode7でうっかり skip bundle したみなさんへ


僕もそうだよ。

まず、

```
defaults delete com.apple.dt.Xcode DVTPlugInManagerNonApplePlugIns-Xcode-7.0
```
してからxcodeを再起動して下さい。
例の確認アラートがもう一度表示されます。

今度はskip bundleしないように気をつけて。
Google Cloud SDKをインストールしようと思ったらAttributeError: 'module' object has no attribute 'HTTPSConnection'

（追記）Caskでインストールできそうなので、そっちの方がオススメです

MacOSX上でGoogle Cloud SDKをインストールしようと思ったら怒られました。

```
$ curl https://sdk.cloud.google.com | bash
（略）
Welcome to the Google Cloud SDK!
Traceback (most recent call last):
（略）
AttributeError: 'module' object has no attribute 'HTTPSConnection'
```

HomebrewのPythonをアップデートしたら動くようになりました。

```
$ brew update && brew upgrade python
```

# 元ネタ

同じ内容でハマってる人がいました

- https://code.google.com/p/google-cloud-sdk/issues/detail?id=110
PostgreSQLのシーケンスがズレてしまった時の対応


```
select setval('シーケンステーブル名',(select max(カラム名) from シーケンスの対象テーブル名));
```
例としては、EC-CUBE2の新着情報テーブルについて書くと次の通り

```
select setval('dtb_news_news_id_seq',(select max(news_id) from dtb_news));
```
fmtファイルについて

>フォーマット ファイルとは、特定のテーブルに関連するデータ ファイル内の各フィールドのフォーマット情報を保存するために使用するファイルです。フォーマット ファイルには、データの一括エクスポートや一括インポートに必要なすべてのフォーマット情報を指定します。フォーマット ファイルを使用すると、他のデータ形式に準拠したり、他のソフトウェアからデータ ファイルを読み取るための編集をほとんど (あるいはまったく) 行うことなく、データ ファイルを出力できる柔軟なシステムが実現します。

>SQL Server テーブルにデータを一括インポートする場合、またはテーブルからデータを一括エクスポートする場合、フォーマット ファイルを使用して、他のデータ形式に準拠するため、または他のソフトウェアからデータ ファイルを読み取るための編集をほとんど (あるいはまったく) 必要としないデータ ファイルを柔軟なシステムに出力できます。

#**作成方法**
1. 以下のCMDを実行する。
*`bcp [DB名]..[テーブル名] format nul -c -f"[ファイル保存先\ファイル名.fmt]" -U"[ユーザID]" -P"[パスワード]"`*



2. 出力されたファイルの 「\t」 を 「\",\"」に置換する。


#**使用例**
テーブルをCSVエクスポートする
*`bcp [DB名]..[テーブル名] out "[テーブル名.csv]" -f"[作成したファイル.fmt]" -S"[サーバ名]" -U"[ユーザ名]" -P"[パスワード]"`*
Google Maps APIs のコントロール変更で変わったこと (v3.21→v3.22)

Google Maps APIを利用していて見た目が変わったと思ったので、[Google Developerサイト](https://goo.gl/b3IJp8)を少し調べてみたところ、3.22へのアップグレードのタイミングでコントローラのデフォルトが変更になった模様。よりモバイルでの操作を意識して改良しているように感じました。
Googleマップのコントローラとの親和性もあるので、しばらくすれば見慣れると思われます。

新しいコントローラは、Jsライブラリ呼び出しのEndpointにv=3.expやv=3.22などのパラメータを指定することで使用できます。

```html
<script src="https://maps.googleapis.com/maps/api/js?v=3.22&signed_in=true&language=Ja&region=JP"></script>
```

![Screen Shot 2015-09-24 at 14.21.45.png](https://qiita-image-store.s3.amazonaws.com/0/94223/ac83d4f6-4463-c808-f42e-9d54735d8f14.png)
   **Version 3.21以前で描画した場合のコントロール（[サンプルコード](http://goo.gl/myFpc2)）**

![Screen Shot 2015-09-24 at 14.11.58.png](https://qiita-image-store.s3.amazonaws.com/0/94223/5d45426f-867c-fffe-810b-72bf7870b448.png)
   **変更後（Version 3.22）のイメージ（[サンプルコード](http://goo.gl/tlFQ6K)）**

サンプルコード内にも記載しましたが、Versionにv=3.21と指定するか、以下の1行をイニシャライズ前に加えることで旧コントローラに戻せます。今後のバージョンアップ予定は明らかではないものの、おそらく3.21が完全になくなるまで（今のペースだと、おそらく2016年の中頃の予想）は利用出来ると思います。

```html 
google.maps.controlStyle = 'azteca'
```
念のため上記を含んだコードを以下に追加します。面白いのは、仮にV=3.22と指定しても、**'azteca'**のパラメータが勝り旧コントローラとなる点です。

```html:sample.html
<!DOCTYPE html>
<html>
  <head>
  <meta name="description" content="Ver3.21のコントロールイメージ">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Marker Symbol with label</title>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.21&language=ja&region=JP&signed_in=false"></script>
    <script>

  function initialize() {
    var mapOptions = {
      zoom: 10,
      center: new google.maps.LatLng(35.66, 139.7),
  };

  var map = new google.maps.Map(document.getElementById('map-canvas'),
      mapOptions);
  var marker = new google.maps.Marker({
          label:'A',
          position: map.getCenter(),
          icon: {
            path: google.maps.SymbolPath,
            scale: 5,
           },
          draggable: true,
          map: map
   });
  //しばらくの間このパラメータを追加することで、バージョン管理とは関係なく旧コントローラに戻せる
    google.maps.controlStyle = 'azteca'
}
google.maps.event.addDomListener(window, 'load', initialize);
    </script>
  </head>
  <body>
    <div id="map-canvas"></div>
  </body>
</html>
```
カスタムコントロールを使用したWebサイトを作っている方はそのタイミングまでに改修が必要になるかもしれないので、要チェックですね。
[Swift] わからない言葉をとことん調べて基礎を積み上げる 「識別子」

#識別子
識別子としてアスキー文字を用いる場合キャメルケースと呼ばれる方法で大文字と小文字を使う


- そもそも識別子とは？
> ある実体の集合の中で、特定の元を他の元から曖昧さ無く区別することを可能とする、その実体に関連する属性の集合のこと。
(var x = 100と記述した時の xの関数名などのこと？)



キャメルケースには２種類ある。
-キャメルケースの定義
>複合語をひと綴りとして、要素語の最初を大文字で書き表すことをいう。 キャメルケースとは、大文字が「らくだのこぶ」のように見えることからの命名である。

(1)アッパーキャメルケース(2)ロアキャメルケース
例を見てもらうとわかるように、最初が大文字か小文字かということ。
例
(1)AnyObject , AutoreleasingUnsafePointer //型やクラス名に使用
(2)totalCount , localizedDescription //メソッド名、変数名に使用



Swiftでは変数名などの識別子にASCII文字以外にUnicodeの文字を利用できる。
(Unicodeには漢字や数学記号なども入っているため128文字しかなかったASCII文字よりもかなり多くの文字を取り扱えるようになった)
- ASCII(アスキー文字)文字とは？
> ASCII文字とは、文字コードの標準規格として広く普及している「ASCII」（American Standard Code for Information Interchange、アスキー）に含まれる文字のこと。いわゆる半角の英字（a～z、A～Z）やアラビア数字（0～9）、記号、空白文字、制御文字など128文字が規定されている。

- Unicodeの文字とは？
> Unicode（ユニコード）とは、符号化文字集合や文字符号化方式などを定めた、文字コードの業界規格である。
var ラーメン = 500
var 消費税 = 0.08
var 合計金額 = 500 * 1.08 //Unicodeのが使えるおかげでこう表記することが可能
////////////Unicodeを識別子に使う場合の注意点は後ほど

予約語を関数名や変数名に使用する方法
バックククォーテーション「`」(shift + @ボタン)で囲むと利用できる
- 予約語とは？
> プログラミング言語において字句的には識別子（変数名、関数名、クラス名など）としてのルールを満たしているにもかかわらず、識別子にならない字句要素。 

(例はvarやifなど。例えばifを使う時、にifが条件文のifなのか関数名のifなのか役割を機械側が判別できないためだと思う。)

#型パラメータ

`code`
var a : [Int] //配列の一般的な記法(わかりやすいため）
var a : Array< Int > //型パラメータを利用した記法（本来の記法）
この< Int >の部分が型パラメータ
////////ここは後から取り扱ったほうが扱いやすいようなので後ほど


アプリ開発も記事書くのも初心者なので至らない点がありましたら助言していただけると幸いです。

参考サイト:http://e-words.jp/w/ASCII%E6%96%87%E5%AD%97.html
https://ja.wikipedia.org/wiki
git bashでコピペ


##選択範囲を右ダブルクリックでコピぺできるように設定
* Git Bash 上部を右クリックして「プロパティ」を開いて、「オプション」タブを選択
* 簡易編集モードにチェックを入れる  
* 範囲を指定して右クリック×2
* コピペされる

##ペーストだけしたい場合
範囲選択せずに右クリック、もしくは、
`ctl + y`でペーストできる

##参照
http://kn-fujii.hateblo.jp/entry/2013/08/07/191052
git bashの文字化け解消

##profile を作成
```
vim ~/.bash_profile
```

##.bash_profileの中身に以下を記入
```
alias ls='ls --show-control-chars'
```

##以下を入力し.bash_profileを反映させる
```
source ~/.bash_profile
```

##それでも文字化けが直らない場合
* Git Bash 上部を右クリックして「プロパティ」を開いて、「フォント」タブを選択
* フォントサイズを変更
* 日本語化成功！

##参照
http://cartman0.hatenablog.com/entry/2015/06/27/175201
bash パラメータ展開

bash のパラメータ展開、覚えておくと意外と使えます。

| パラメータ展開 　　| 内容 　　　　　　　　　　|
|:-----------------|-------------------------------------------:|
|${parameter#word} |先頭から前方最短一致した位置まで取り除く|
|${parameter##word}|先頭から前方最長一致した位置まで取り除く|
|${parameter%word} |末尾から後方最短一致した位置まで取り除く|
|${parameter%%word}|末尾から後方最長一致した位置まで取り除く|
|${parameter:開始位置:終端位置}|指定した開始位置から終端位置まで抜き出す|

その他、$[#parameter} でparameterの文字数が取得できる

以下簡単な使用例

```lang:test.sh
#!/bin/bash

url="hogehoge@hoge.com"

echo "url        :${url}"

# domain_part の抜出
echo "domain_part:${url##*@}"

# local_part の抜出
echo "local_part :${url%%@*}"

# 開始位置、終端位置を指定しての抜出
echo "${url:0:4}"

# 文字数取得
echo ${#url}

```

[user@hoge script]$ sh ./test.sh
url         :hogehoge@hoge.com
domain_part :hoge.com
local_part  :hogehoge
hoge
17
coffeescriptの関数呼び出しと引数の扱い

通常の引数や省略可能引数をもちつつ、名前付き引数も欲しい。もちろん名前付き引数は省略したらデフォルト値を設定してね。さらにRubyのblockのように最後に関数を受け取りたいな。

ok. これで行けます

```coffeescript
foo = ([[a,b,[c=3]...,{config="./cofnig.conf"}={}]...,fn]...) ->
  [a,b,c,config,fn]

coffee> foo 1,2, ->
[ 1, 2, 3, './config.conf', [Function] ]

coffee> foo 1,2, config:"/etc/config.conf", ->
[ 1, 2, 3, '/etc/config.conf', [Function] ]
```

分割代入便利ですねえ。
AngularJSとSocket.IO(angular-socket-io)を利用するときに気をつけること一つ。

基本的にAngularJS上でSocket.IOを稼働させる際には[angular-socket-io](https://github.com/btford/angular-socket-io)を利用するかと思います。

こちらを利用する上で気をつけなければいけないことがあったので書き留めておきます。

## 問題点

Controllerからsocket.onを使用してイベントリスナーを貼っていた所、一度別のコントローラにいった後にもう一度同じコントローラに戻ると2重にイベントが発火されてしまいました。

## 解決策

解決するためには、Controllerが破棄される際と同時にsocketのイベントリスナーを破棄する必要があります。

```js
$scope.$on('$destroy', function(event) {
    socket.removeAllListeners();
});
```

当初、なんでなんで？Controllerのオブジェクトが残ってるの？なんで発火されてしまうの？とか色々思いましたがイベントリスナーが残ってしまうんですね。

解決して良かった。

後ほど分かったことですが、
2重以上に発火される原因として、emitが複数回流れてしまってonがその2倍返されたりすることがありました。これは単純な記述ミスでした。socket通信は難しいですね。
XcodeGhostを確認するときに不安にならないために

# XcodeGhostでないことを確認する
Apple からの正式な情報は以下にあります
https://developer.apple.com/news/?id=09222015a

`spctl --assess --verbose /Applications/Xcode.app`
を実行して

>/Applications/Xcode.app: accepted
>source=Mac App Store

こうなったらおｋだよ。って書いてる（ざっくり


# が、しかし。
ほとんどの開発者(極端)の環境ではこのままにはならないように思ったのでメモします。
これは僕自身がやった方法なので、必ずしも正しいとは限りませんので、自己責任でお願いします。


以下に上記では記載されてない出力に対しての対処書いときます
## a sealed resource is missing or invalid
これは多分一回もXcode起動してないとか、僕みたいに`/Application/Xcode.app/`の中に無理やり過去のSDKとか入れてると出るっぽい。
`codesign -vvvv /Applications/Xcode.app`
をやってみて最後の方に
>/Applications/Xcode.app: a sealed resource is missing or invalid
file added: >/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.5.sdk

とか出てたら言われたファイルを一時的に避難or削除してあげれば`a sealed resource is missing or invalid`は出なくなりました。


## override=security disabled
次にこれ。
安心していいと思います。
セキュリティーとプライバシーの設定で`全てのアプリケーションを許可`等にしてると出ます。
そういうもんなんだ。と思ってます。（気になる方は一回Mac App Store onlyに変更すると心の平穏を保てるかもしれません。
※もちろん意図しない`全てのアプリケーションを許可`の設定はあまりよろしいものではないです。推奨しているわけではありませんので、設定する際は自己責任にてお願いします。


## 最後に
他の方の環境はどうかわかりませんが、僕はこんな感じでGhostBusterしました。
他の情報もあればコメント等いただけると嬉しいです。