OmniAICreator/Qiita-1.07M huggingface dataset:
Swift2の定数宣言方法まとめ

Swift 2.0 を使っているのですが、アプリケーション内やクラス内で定数宣言をする際に、
書き方や宣言場所によってスコープや利用方法が変わってくるのでまとめてみました。


| 定数名       | 宣言場所       | 接頭辞 | スコープ |
| ----------- | ------------- | ----- | ------ |
| `ConstantA` | クラス宣言の外側 | `let`         | 同一のモジュール内でどこでも使える |
| `ConstantB` | クラス宣言の外側 | `private let` | 同一のファイル内でどこでも使える |
| `ConstantC` | クラス宣言の内側 | `static let`  | 同一のモジュール内でクラス変数としてどこでも使える |
| `ConstantD` | クラス宣言の内側 | `private static let` | 同一のファイル内でクラス変数としてどこでも使える |
| `ConstantE` | クラス宣言の内側 | `let` | 同一のモジュール内でインスタンス変数としてどこでも使える |
| `ConstantF` | クラス宣言の内側 | `private let` | 同一のファイル内でインスタンス変数どこでも使える |


```swift:SomeClass.swift

let ConstantA = "A"
private let ConstantB = "B"

class SomeClass: NSObject {
    
    static let ConstantC = "C"
    private static let ConstantD = "D"
    
    let ConstantE = "E"
    private let ConstantF = "F"
    
    class func classMethod() {
        print("A=\(ConstantA)")
        print("B=\(ConstantB)")
        print("C=\(ConstantC)")
        print("D=\(ConstantD)")
        print("E=\(ConstantE)") // コンパイルエラー
        print("F=\(ConstantF)") // コンパイルエラー
    }
    
    func instanceMethod() {
        print("A=\(ConstantA)")
        print("B=\(ConstantB)")
        print("C=\(ConstantC)") // コンパイルエラー
        print("D=\(ConstantD)") // コンパイルエラー
        print("E=\(ConstantE)")
        print("F=\(ConstantF)")
    }
    
}
```

```swift:OtherClass.swift
// SomeClass とは別のファイル
class OtherClass: NSObject {

    class func method() {
        print("A=\(ConstantA)")
        print("B=\(ConstantB)") // コンパイルエラー: privateなので参照できない
        print("C=\(SomeClass.ConstantC)")
        print("D=\(SomeClass.ConstantD)") // コンパイルエラー: privateなので参照できない
        print("E=\(SomeClass().ConstantE)")
        print("F=\(SomeClass().ConstantF)") // コンパイルエラー: privateなので参照できない
    }
}
```
Windows でのサービスの制御

# Windows のサービスの制御

## PowerShell を使う場合

* **指定のサービスを列挙**

    ```powershell
    PS> gsv | ? { $_.Name -match "sqlserver" }

    Status   Name               DisplayName
    ------   ----               -----------
    Running  MSSQLSERVER        SQL Server (MSSQLSERVER)
    Running  MSSQLServerOLAP... SQL Server Analysis Services (MSSQL...
    Stopped  SQLSERVERAGENT     SQL Server エージェント (MSSQLSERVER)
    ```

* **指定かつ動作しているサービスの列挙**

    ```powershell
    PS> gsv | ? { $_.Name -match "sql" -and $_.Status -match "Run" }

    Status   Name               DisplayName
    ------   ----               -----------
    Running  MSSQLFDLauncher    SQL Full-text Filter Daemon Launche...
    Running  MSSQLSERVER        SQL Server (MSSQLSERVER)
    Running  MSSQLServerOLAP... SQL Server Analysis Services (MSSQL...
    Running  SQLWriter          SQL Server VSS Writer
    ```

    以下でもよい

    ```powershell
    PS> gsv | ? Name -match "sql" | ? Status -match "Run"
    ```

* **動作しているサービスを停止させる** 

    ```powershell
    PS> gsv | ? Name -match "mssql" | Stop-Service
    ```

    開始させる場合は、 `Stop-Service` の代わりに `Start-Service` を使う。

    > :memo: ただし、後述の「スタートアップの種類」を考慮しないため、設定によっては OS起動時にサービスが起動される場合がある。

* **スタートアップで自動起動させなくする** (`「手動」`に)。

    ```powershell
    PS> gsv | ? Name -match "mssql" | Set-Service -StartupType Manual
    ```

    「自動」に戻す場合: `-StartupType Automatic` と指定する。


    > :memo: 【メモ】 「サービス停止」と同時に「自動起動させない」ために、 `-Status Stopped` を使いたくなるが、以下のように依存関係がある場合には停止できない模様。 前述の `Stop-Service` を使うのが確実なようだ。
    > 
    ```powershell
    PS> gsv | ? Name -match "mssql" | Set-Service -Status Stopped -StartupType Manual
    Set-Service : サービス 'SQL Server (MSSQLSERVER) (MSSQLSERVER)' には依存サービスがあるため、停止できません。
    発生場所 行:1 文字:31
    + ... Name -match "mssql" | Set-Service -Status Stopped -StartupType Manual
    +                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (System.ServiceProcess.ServiceController:ServiceController) [Set-Servi
       ce]、ServiceCommandException
        + FullyQualifiedErrorId : ServiceHasDependentServicesNoForce,Microsoft.PowerShell.Commands.SetServiceCommand
    ```

## 参考

* Microsoft TechNet
    * [Get-Service](https://technet.microsoft.com/en-us/library/Hh849804.aspx) (gsv) 
    * [Set-Service](https://technet.microsoft.com/en-us/library/hh849849.aspx) 
    * [Stop-Service](https://technet.microsoft.com/en-us/library/hh849790.aspx) (sasv)
    * [Start-Service](https://technet.microsoft.com/en-us/library/Hh849825.aspx) (spsp)
Ubuntu で/boot領域が足りないためupdateできない(Not enough free disk space)

# 状況と対処 

* GUI のSoftware Updater の表示  
![Ubuntu_NotEnoughFreeDiskSpace_0000.png](https://qiita-image-store.s3.amazonaws.com/0/70152/7e7ddf5b-276d-8ce9-9958-e35942fc7c02.png)



```text:/boot以下に入っている古いkernelを確認する
foo@bar:~$ dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
linux-headers-3.19.0-16
linux-headers-3.19.0-16-generic
linux-headers-3.19.0-18
linux-headers-3.19.0-18-generic
linux-headers-3.19.0-20
linux-headers-3.19.0-20-generic
linux-headers-3.19.0-21
linux-headers-3.19.0-21-generic
linux-headers-3.19.0-22
linux-headers-3.19.0-22-generic
linux-image-3.19.0-20-generic
linux-image-3.19.0-21-generic
linux-image-3.19.0-22-generic
linux-image-extra-3.19.0-20-generic
linux-image-extra-3.19.0-21-generic
linux-image-extra-3.19.0-22-generic
linux-signed-image-3.19.0-20-generic
linux-signed-image-3.19.0-21-generic
linux-signed-image-3.19.0-22-generic
```


現在使用しているkernel はuname -r で見ることができるので、現在のバージョンを確認し、誤って現在のベージョンのkernel を削除しないよう確認しておきます。

```text
$ sudo uname -r
3.19.0-22-generic
```


`sudo apt-get purge` コマンドを使って不要なkernel を削除します。

```text
$ sudo apt-get purge 3.19.0-{16,18,20,21}-generic
```


削除したら、再度Software Updater を実行してください。  
![Ubuntu_NotEnoughFreeDiskSpace_0001.png](https://qiita-image-store.s3.amazonaws.com/0/70152/8cd175c5-9e5b-3159-790d-b0243c0f1ac9.png)


# コマンドラインからアップデートした場合の挙動の違いについて 
TODO: 詳細が分かり次第更新予定です
`sudo apt-get dist-upgrade` コマンドを使用すると、GUI からはできないといわれたupgrade ができてしまった…。
実行したコマンドは以下の通りです。

```text
sudo apt-get update
sudo apt-get dist-upgrade
```


GUI のツールとコマンドラインの`apt-get dist-upgrade` では領域の見積もり方が違うのかもしれません。

# 参考 
Not enough free disk space when upgrading

```text
http://askubuntu.com/questions/298487/not-enough-free-disk-space-when-upgrading
```
What is the command line equivalent for the update manager?

```text
http://askubuntu.com/questions/247881/what-is-the-command-line-equivalent-for-the-update-manager
```
PHPでプロセスの実行ユーザーを確認する

PHPで、現在のプロセスを実行しているユーザー名は
`posix_getpwuid(posix_geteuid())['name']`
で確認できます。

参考：
[PHPマニュアル - posix_geteuid](http://php.net/manual/ja/function.posix-geteuid.php)
[PHPマニュアル - posix_getpwuid](http://php.net/manual/ja/function.posix-getpwuid.php)
Pycharmの "pep8 indentation is not a multiple of four"や"Variable in function should be lowercase" という警告を抑制する方法

## はじめに

Pythonの開発はPycharmを使っています。

PythonのCoding styleの警告である

* `Variable in function should be lowercase`
* `pep8 indentation is not a multiple of four` (Indentサイズを半角スペース4つから2個に変更すると出る)  

という警告が至る所で出てウザいので、これを抑制するPycharmでの設定方法をチラシの裏しておきます。

## 設定方法

* **Variable in function should be lowercase**を消す方法
 * `File`→`Setting`で`Inspections`を開き、`PEP 8 coding naming convention viloation`のチェックを外す
* **pep8 indentation is not a multiple of four**を消す方法
 * `File`→`Setting`で`Inspections`を開き、右ペインの検索画面で、`PEP 8 coding style viloation`を選択
 * `Ignore errors`に、`E111`を追加して、`Apply`を実行

### 他の開発環境での同様の警告
* その他の開発環境でPEP8のLinterを使う場合にも、特定のErrorをIgnoreする設定は大抵あるはずです。例えば[ATOMのPEP8 Linter](https://atom.io/packages/linter-python-pep8)の場合`config.cson`に`'ignoreErrorCodes': 'E111, E501'`などと記載しておけば良いみたいです

## PEP8について補足
### PEP8について
* PEP8はざっくり言うとPythonのCoding Ruleの事です。[この記事がとても参考になります](http://qiita.com/ynakayama/items/8616f4c0c6e372de9a42)
* PEP8の[日本語訳はこちらを参照](http://pep8-ja.readthedocs.org/ja/latest/#)
* PEP8のError Codeの一覧は[こちらを参照](http://pep8.readthedocs.org/en/latest/intro.html#error-codes)

### 主要なCoding Rule
* Indentについて
 * Space 4つで1つのindent(Tab)にする事を推奨
 * このerrorを抑制したい場合は、E111, E114をignore
* 関数名、変数名についての
 * 関数名、変数名：全て小文字で`_`で区切る、を推奨 (`set_stream_logger`など)
 * クラス名：Upper Camel Caseを推奨 (`GetImageLocation`など)
 * Pycharm以外では[Flake8(PEP8のWrap library)](https://pypi.python.org/pypi/flake8)と[pep8-naming(flake8のplugin)](https://github.com/flintwork/pep8-naming)を入れて、N802/N806などをignoreする設定にすれば良いらしい(試した事無し)

* 1行の長さ
 * 1行は79文字までを推奨
 * このerrorを抑制したい場合は、E501をignore
* Import宣言について
 * 1行 1 libraryのImportを推奨
 * このerrorを抑制したい場合は、E401をignore
* 演算子の前後の空白
 * `=, ==, <, >, is, in, not in`などの演算子の前後には、1個スペースを入れる
 * このerrorを抑制したい場合は、E221, E222をignore

### PEP8 Check Toolについて
`pep8`、`autopep8`という2種類のToolがあります。

* `pep8`について
 * 修正箇所を教えてくれるToolです
 * `pip install pep8`でInstallして、`pep8 xxx.py --show-source`とチェックしてほしい*.pyを指定すると、以下の様にError codeと該当箇所を吐いてくれます
 * 特定のErrorを無視する場合には、`pep8 xxx.py --ignore=E111,E114,E501 --show-source`  
 E111/114は`Indent Error`, E501は`Line Too Long`

```py
xxx.py:4:1: E302 expected 2 blank lines, found 1
def foo():
^
misc_test.py:5:9: E225 missing whitespace around operator
    msgs=['Hello','World!!']
        ^
misc_test.py:5:18: E231 missing whitespace after ','
    msgs=['Hello','World!!']
                 ^
misc_test.py:9:10: W292 no newline at end of file
    foo()
         ^
```

* `autopep8`について
 * 自動で修正までしてくれるToolです
 * `pip install autopep8`でInstallして、`autopep8 -i xxx.py`と自動修正してほしい*.pyを指定すると、問答無用にFileの中身を修正してくれます(ので実行時は注意です)
unity > uGUI > Button > サイズ変形に使う青い丸が表示されない > Sceneタブを使う

```txt:動作確認
Unity 5.1.1-f on MacOS X 10.8.5
```

uGUIのButtonを使っているのだが、よく分からなかった。

http://qiita.com/2dgames_jp/items/b3d7d204895d67742d0c
にあるようにツールバーの四角形のアイコンを選ぶのだが、「青い丸」が表示されない。
アンカーも表示されない。

そのため、Buttonの変形ができない。

Mac版のUnityの問題なのか、何か設定を変えないといけないのか？

VMのWindows 8.1にUnityをインストールしてみたが、同様に青い丸は表示されなかった。Unity 5.1.2f1 Personal.

<hr>
Sceneタブに切り替えると青い丸が出てきて編集できるようになった。
Gameタブで編集できると思っていたのが間違いだった。

SceneタブとGameタブが同時に見れるレイアウトにしておかないと、見た目の調整は難しそう。
localtunnelを使ってPaypalなどの外部連携機能を開発環境で手軽にテストする

Paypal決済など、外部サービスから開発中のアプリケーションに対するHTTP(s)の連携が必要な時に、どうやってテストしているでしょうか? 多くの場合、開発環境は手元のマシンだったり、仮想マシンの中で動いていて、インターネットから到達できない場合が多いと思います。そのような状況でも、外部サービスとの連携テストが簡単に行うための方法を紹介します。

# localtunnel

手順としては非常にシンプルで

```
$ npm install -g localtunnel
$ lt --port 80
your url is: https://mgwwbinxja.localtunnel.me
```

のように実行してやると、インターネット上で `https://mgwwbinxja.localtunnel.me` にアクセスすると、手元マシンの `http://127.0.0.1:80` に接続されるようになりました！

 - https://localtunnel.me/

## 同じ名前を使いたい

`--subdomain` オプションを使うことで、同じ名前を使い続けることができます。

```
$ lt --port 80 --subdomain localtunnel012qiita
your url is: https://localtunnel012qiita.localtunnel.me
```

## セキュリティに注意

この方法で公開すると、開発中のアプリケーションに対して、世界中の誰もがアクセスできるようになってしまいます。
それは好ましくないため、 Nginx or Apache で Reverse Proxy を作成し、特定のパス配下のみアクセスできるようにしておきましょう。

Apacheの場合:

```
Listen *:18080
NameVirtualHost *:18080
<VirtualHost *:18080>
    ServerName localtunnel.example.com
    CustomLog /var/log/httpd/access-localtunnel.log combined
    ProxyPass /something-callbacks http://127.0.0.1:80/something-callbacks
</VirtualHost>
```

# Links

 - http://stackoverflow.com/questions/11469636/paypal-sandbox-test-tool-ipn-simulator-in-localhost
 - https://github.com/localtunnel/localtunnel (クライアント実装)
 - https://github.com/localtunnel/server (サーバ実装)
 - https://github.com/NoahShen/gotunnelme (goのクライアント実装)
Windows 10でAtomがインスコできない件

## 状況
Windows 10にアップデートしたらAtomが行方不明になった
まあ再インストールすんべとインストーラをダウンロードして起動するもスプラッシュが出てからすぐ落ちるような状態

## 結論
環境変数%TEMP%に入ってるディレクトリのテンポラリファイルを消せる範囲で全消しすればOK
もしアップデート前にアンインストールしてない状態なら再インストール後にパッケージなどの設定もそのまま残ってる
AndroidのINSTALL_REFERRERテストでadbコマンドがうまくいかない時

AndroidのGoogleAnalyticsのCampaign計測テストで、adbコマンドを使ったときにうまくいかなかった。

[公式ドキュメント](https://developers.google.com/analytics/solutions/testing-play-campaigns)によると、下記コマンドでテストができると書いている。

```
$ adb shell am broadcast -a com.android.vending.INSTALL_REFERRER
                     -n "com.example.gatestapp/com.google.android.gms.analytics.CampaignTrackingReceiver"
                     --es referrer "utm_source=testSource&utm_medium=testMedium&utm_term=testTerm&utm_content=testContent&utm_campaign=testCampaign"
```
そうすると、Logcatに次のように出力されるらしい。

```
Thread[GAThread,5,main]: Campaign found: utm_source=testSource&utm_medium=testMedium&utm_term=testTerm&utm_content=testContent&utm_campaign=testCampaign
```

しかしながら、パラメータを&でつなげると、```utm_source=testSource```までしか出てこない。
adbの最新(1.0.32)でもバグがあるようである。

以前は=と&をエンコード文字列に置き換えれば動いたが、それもなぜか動かなくなっている。

そんな場合は下記の対応でいける。
一旦adb shell am〜〜〜でまとめてやるのでなく一旦shellを起動させてからam broadcastする。

```
$ adb shell // 一旦adb shellを起動する
$ am broadcast -a com.android.vending.INSTALL_REFERRER
                     -n "com.example.gatestapp/com.google.android.gms.analytics.CampaignTrackingReceiver"
                     --es referrer "utm_source=testSource&utm_medium=testMedium&utm_term=testTerm&utm_content=testContent&utm_campaign=testCampaign"
```
unity > uGUI > スクリプト側からレイアウトを操作する

http://tsubakit1.hateblo.jp/entry/2014/12/19/033946
> uGUIをスクリプト側から操作する際、ちょっと面倒な点がEditorの表記とRectTransformのフィールドが一致しない点です。例えばPos X等のパラメータは存在しませんし、Width/Heightも存在しません。

>そんな時はInspectorをDebugモードに変更してRectTransformの隠しているパラメータを晒します。これで大体パラメータが何を指しているのかが分かります。マニュアルも読むとなお良し。

InspectorをDebugモードにするには、「Inspector」という表記（Inspectorタブ)の上で右クリックして「Debug」を選択する。
unity > uGUI > Buttonの処理

こちらがわかりやすかった。
http://hwks.hatenadiary.jp/entry/2014/12/10/024926

OnClick()の+においては、自分自身を追加せず、scriptの方を追加してしまいOnClickが見つからないようになってしまっていた。

また、OnClick()をscriptにてpublic宣言しないとinspectorのOn Click()にてOnClick()が見つからない。
link_toでネストした画像や文字列を 表示する方法

ブランド一覧画面みたいなものを作ってるのですが、

- ブランド１の画像（クリックでブランド詳細ページに飛べる）
  - ブランド１の説明文
- ブランド２の画像（クリックでブランド詳細ページに飛べる）
  - ブランド２の説明文

という感じで、画像一覧を表示しつつ、画像クリックでそのブランドの詳細情報ページに飛べるようにリンクを貼って、さらにブランドについての説明文などを合わせて表示する処理を考えていたのですが、link_toで画像＋文字列をどうやってネストすればいいのか地味にわからず、今後また似たことで悩みそうなのでまとめておきます

自分の開発環境

- Mac OS X 10.8.5
- Ruby 2.2.2
  - rbenv利用してインストールしてます
- Rails 4.2
  - Haml使ってます。
  - haml (4.0.7)

です

## はじめにlink_toの基本

link_toで

```haml
- @brands.each do |brand|
  = link_to "ブランド名", brand_path(brand) 
```

というのは知っていたものの、恥ずかしながら、文字列以外をどのように指定していいのか知らなかったです^^;

通常文字列を指定する箇所に、image_tag()をこんな感じで指定できるんですね

```haml

- @brands.each do |brand|
  = link_to image_tag("brand/#{brand.id}.jpg") ,brand_path(brand), class: "brand_image"
```

これを踏まえて、画像と一緒に、その画像についての説明文などを表示する方法を模索しました


## 最初考えたやり方

```haml
- @brands.each do |brand|
  = link_to image_tag("brand/#{brand.id}.jpg") ,brand_path(brand)
    %p
      = brand.name
      %br
      %span
      = brand.url
```

みたいな感じを考えたのですが、これだと構文エラーになってしまいました


## こう書くのが正解でした

[rails 3 link_to with nested content_tag to create <a href with nested span - how to?](http://stackoverflow.com/questions/9646194/rails-3-link-to-with-nested-content-tag-to-create-a-href-with-nested-span-how)を見てたらブロックを使えばいいことがわかりました


```haml
- @brands.each do |brand|
  = link_to brands_path do
    = image_tag("#{brand.id}.jpg")
    %p
      = brand.name
      %br
      %span
      = brand.url
```

これ書き終えてから[API Dock](http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to)見たらしっかり書いてありましたね。こういう基本処理はドキュメントをあたるべきですね
Bluebirdを利用したコードをMochaでテストする


Mochaを使ってBluebirdを利用したコードのテストを行おうとした際、正しくテスト結果が得られない場合があったので原因と対策をメモ。

まず、バグを含んだ関数を用意する。

```promise-add.js
var Promise = require('bluebird')

module.exports = function promiseAdd(a, b) { // ２つの値を足し算する関数
  return new Promise(function(resolve, reject) {
    resolve(a + b + 1) // 正しい結果に+1されてしまうバグ！
  })
}
```

次に、上記の関数のテストを用意する。

```promise-add-test.js
var assert = require('assert')
var promiseAdd = require('./promise-add.js')

describe('promise-add', function() {
  it('promiseAdd(1, 1) == 2', function(done) { // promiseAdd(1, 1)の結果が2であることをテストする
    promiseAdd(1, 1).then(function(result) {
      assert.equal(result, 2) // result == 3なので、テスト失敗！
      done()
    })
  })
})
```

結果は、timeoutとなり期待していた結果(AssertionError)が得られない。

```
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
```

さらに、例外として「Umhandled rejection」が投げられてしまう。

```
Unhandled rejection AssertionError: 3 == 2
    at promise-add-test.js:7:14
    at tryCatcher (node_modules/bluebird/js/main/util.js:26:23)
    at Promise._settlePromiseFromHandler (node_modules/bluebird/js/main/promise.js:503:31)
    at Promise._settlePromiseAt (node_modules/bluebird/js/main/promise.js:577:18)
    at Promise._settlePromiseAtPostResolution (node_modules/bluebird/js/main/promise.js:244:10)
    at Async._drainQueue (node_modules/bluebird/js/main/async.js:128:12)
    at Async._drainQueues (node_modules/bluebird/js/main/async.js:133:10)
    at Immediate.Async.drainQueues [as _onImmediate] (node_modules/bluebird/js/main/async.js:15:14)
    at processImmediate [as _immediateCallback] (timers.js:358:17)
    1) 1 + 1 = 2
```

## 原因
bluebirdのPromiseは、例外が投げられたりreject関数が呼ばれたりするとcatch handlerに飛ぶ仕組みになっている。そのため、assertを呼び出しエラーが起きた時点でcatch handlerに飛ぼうとするため、後続のdoneが実行されずにtimeoutとなる。
さらに、catch handlerを記述していないため「Unhandled rejection」が表示されてしまう。

```promise-add-test.js
var assert = require('assert')
var promiseAdd = require('./promise-add.js')

describe('promise-add', function() {
  it('promiseAdd(1, 1) == 2', function(done) { // promiseAdd(1, 1)の結果が2であることをテストする
    promiseAdd(1, 1).then(function(result) {
      assert.equal(result, 2) // result == 3なので、テスト失敗！ -> catch handlerへ飛ぶ
      done() // !!!呼ばれない!!!
    })
  })
})
```

## 対策
assertによって投げられたエラーは後続のcatch handlerで受け取れるので、catch handlerの中でdoneを呼び出すように変更する。

```promise-add-test.js
var assert = require('assert')
var promiseAdd = require('./promise-add.js')

describe('promise-add', function() {
  it('promiseAdd(1, 1) == 2', function(done) { // promiseAdd(1, 1)の結果が2であることをテストする
    promiseAdd(1, 1).then(function(result) {
      assert.equal(result, 2) // result == 3なので、テスト失敗！ -> catch handlerへ飛ぶ
      done() // !!!呼ばれない!!!
    }).catch(function (e) { // catch handlerを追加
      done(e) // 呼ばれる
    })
  })
})
```
これを実行すると、timeoutにならずきちんとAssertionErrorが表示される。

```
AssertionError: 3 == 2
+ expected - actual

-3
+2
```
qiita > 検索 > タイトルにて".NET"では検索できない


以下のようなタイトルの記事を投稿した。

> .NET > xxxx...ddd

検索ボックスにて`user:7of9 title:.NET`で検索しても上記の記事は検索結果に出てこなかった。
`user:7of9 title:".NET"`でも出てこなかった。

タイトル文字列に.で始まる文字列をつけてそれで検索するのは無理なようだ。

.NETはdotnetにして記事を編集した。title:dotnetで検索できる。

こういう場合もtagに.NETをつければtag:.NETやtag:.netで検索できる。
検索時はtagをもっと使っていくのがいいのかもしれない。
研修における「評価」

#はじめに
研修をつくって、届けていくうえで、「評価」というのは実にデリケートな問題だ。
やり過ごしてしまえればこのうえなく楽なことはない。

と、常々考えていたところに、この記事がかなり刺さる内容だったので、研修における「評価」についてちょっと考えてみた。
【品質工学から見た日本の教育の疑問点】
http://brevis.exblog.jp/19817386/

#カリキュラムの評価と受講者の評価
研修における評価対象には、カリキュラムと受講者の2つがある。
前者はいわゆる講義や講師の質。
後者は、言葉を選ばずに言えば、その研修を受けた受講者の出来不出来のこと。
ちなみに、受講者に対して講義後のアンケートで「この講義はどうでしたか？」と聞くのは、前者であって後者ではない。（「受講者による」評価ではないということ）

上記の記事は、後者の必要性を述べていて、かつその目的は、受講者を峻別するためではなく、カリキュラムの品質評価のためである、と。

研修をインプット-プロセス-アウトプットの枠組みで捉えるならば、
* インプット：受講前の受講者
* プロセス：カリキュラム
* アウトプット：受講後の受講者
となるわけで、前者はプロセスを、後者はアウトプットを評価しましょう、ということなのだろう。
そしてもちろん、「何のため」かと問われれば、「アウトプットを評価する⇒その結果をプロセス改善のためにフィードバックする⇒アウトプットの質を上げる」となり、結局はひとつの目的に収斂していくのだ。

#満足度と到達度
さきほどの、受講者に対して講義後のアンケートで「この講義はどうでしたか？」と聞くのは、受講者自身が感じる主観的な「満足度」を評価している。
一方、理解度確認テストを実施するときに評価しているのは、受講者の「（カリキュラムが設定したゴールへの）到達度」である。（そう、カリキュラムには事前に「ゴール」を設定しなければならない！）
こちらは、受講者自身が結果を作為的に操作することができない、という点においては客観的なものだ。

満足度を高めることは、到達度を高めるためのひとつの方策ではあるけれども、両者はあくまで別の観点なので、別々に評価しなければならない。
そして、「受講者を研修に送り出す側（＝受講後の受講者を受け入れる側）（≒現場）」の人々にとっての関心事は、あくまで到達度なのだ。

繰り返しになるが、この到達度も、その目的は受講者の峻別ではなく、カリキュラムというプロセスの改善のためのものになる。

#アセスメントとフィードバック
評価の目的というか、用途というか、「その評価結果を受講者に伝達することによってなにを期待するのか」という点でも共存させなければいけない観点がある。

アセスメントとはすなわち査定なので、評価者が被評価者に対して、評価結果を一方的に伝達して終わり。「査定」で辞書を引くと「金額・等級・合否などを調査したうえで決定すること」とあるので、評価者と被評価者の関係が一方的で、被評価者にとって評価結果は所与のものであり、それに対する反応が求められていないことがわかると思う。

一方、フィードバックは、「被評価者が自身の評価結果を知ることにより、自身の到達度と改善点を認識し、次の改善行動につなげる」ことが目的となる。
この「自身の到達度と改善点を認識」するためには、被評価者自身の内省が必要なのだけれど、これが難しいので、他者（研修の場合は講師などの評価者）が介入して内省を支援する。

アセスメントとフィードバックも、どちらが良い・悪いの問題ではない。
受講者の成長という究極的な目的のためにはフィードバックが必要なのは明らかだけれど、有効なフィードバックをするためには、妥当な評価方法によって導かれる、正確かつ受講者の納得度の高い評価結果が欠かせない。
「妥当な評価方法によって導かれる、正確かつ受講者の納得度の高い評価結果」を形作る行為がアセスメントに他ならない。

加えて、「受講者を研修に送り出す側（＝受講後の受講者を受け入れる側）（≒現場）」の人々にとって必要なのは、アセスメントという「最終結果」なのだ。

#おわりに
「評価」と一言で括られているけれど、そのなかにはいろんな立場の人のいろんな思いが交錯していて、そしてそれらはどれも大事なことで、八方美人と言われるかも知れないけど、バランスさせていかなきゃいけない。
2015-08-13 difference > std::map / std::unordered_map > unorderd_map: キーを登録した順番とは関係なく（ハッシュを使って）格納する / 速度比較...

http://program.station.ez-net.jp/special/handbook/cpp/stl/map.asp

> ちなみに、std::unordered_map<> は、キーを登録した順番とは関係なく（ハッシュを使って）格納するタイプのものになります。

<hr>
http://d.hatena.ne.jp/sleepy_yoshi/20121111/p1

> - unordered_mapの全走査はmapよりも速い (1.5-2倍程度)
- keyだけvectorに入れてmap/unordered_mapから引くという操作をすると5倍以上遅くなる
c++11 > typeindex / map > std::cout << m[typeid(int)] << std::endl;

[本の虫さんのページ](http://cpplover.blogspot.jp/2014/10/ctypeidtypeinfotypeindex.html)を読んでいて興味を持ったコード　

```cpp
#include <typeindex>
#include <map>

int main()
{
    std::map< std::type_index, std::string > m =
    {
        { typeid(int), "int" },
        { typeid(double), "double"}
    } ;

    std::cout << m[typeid(int)] << '\n' ;
}
```

元々は[こちらのコード](http://ideone.com/c2kaeg)において、
`if (t == typeid(int)) {`の部分をswitch, caseで処理させようとして失敗して、調べた所、単純に`switch(iter->type())`ではダメでifで==比較しないといけないようだと分かったことから。

上記においては`m[typeid(int)]`とした時に等価演算(==)で処理されてるのだろう。
gruntがインストール出来ない？

mac10.9.5環境下
node,npm,homebrewはインストール済み。
grunt-cli v0.1.13。

作業用ディレクトリ下で
”npm init”を実行後続けて”npm install grunt”を実行。

多数のnpm ERR!が発生し、gruntがインストールされたかどうか
"grunt -version"で確認するも
「grunt-cli v0.1.13」とだけ表示されgrunt自体はインストールされてない模様。

類似エラーを探して見るもなかなか原因が分からない状態です。
Cassandraでcqlツール（gui）を使ってみる

#Cassandraでcqlツール（gui）を使ってみる

##インストール
http://www.datastax.com/what-we-offer/products-services/devcenter
からDataStax DevCenterをインストール

DevCenter.exeから起動して
ConnectionsビューからCreate a new connection（ケーブルと＋のアイコン）を行う

##接続
今回はローカルのCassandraを使用するので
Connerction name に「localhost」
Native Protco; portに「9042」
を入れる
（Cassandraのバージョンが古いとつながらない可能性あり）

##使い方
http://docs.datastax.com/en/cql/3.0/cql/cql_reference/cqlCommandsTOC.html
使い方

SQL的な感じでCassandraを使うことができる

##keyspaceの作成
`create keyspace testkeyspace
with replication = {
    'class' : 'SimpleStrategy',
    'replication_factor' : 1
};`

with replicationの部分はレプリケーションに関することらしい。
複数のマシン（分散システム）でどのように、どのくらいデータを保存するかの設定らしい。
今はただの遊びなので無視。

##ColumnFamilyの作成
in keyspaceを作成したkeyspaceに変更して
`create table user(
    corp text PRIMARY KEY,
    department text,
    name text
);`


##データの挿入
`insert into user (corp,department,name) values ('yamada-Shoji','Accounting','takeda');
insert into user (corp,department,name) values ('yamada-Shoji','Accounting','takahashi');
insert into user (corp,department,name) values ('yamada-Shoji','Finance','tanaka');
insert into user (corp,department,name) values ('yamaguchi-Shoji','Accounting','tutumi');`

select * from user;

PRIMARY KEYが重複した場合（yamada-Shojiの部分）は上書きされてしまっている

deleteやupdateも同様にできそう
CasandraでIncompatible SSTable found.が発生する

#CasandraでIncompatible SSTable found.が発生する。

cassandra.batを実行させた際に
java.lang.RuntimeException: Incompatible SSTable found.
と表示されてしまう。

##原因
apache-cassandra-1.1.12
から
apache-cassandra-2.0.16
にした際に
apache-cassandra-1.1.12のSSTableがapache-cassandra-2.0.16の作成するフォルダに
残ってしまっていたからっぽい（たぶん）

##解決策
apache-cassandra-2.0.16\conf\cassandra.yamlの
data_file_directories
commitlog_directory
saved_caches_directory
を違うディレクトリにした

それにしても
 /var/lib/cassandra
ってどこにあるんだろう。。。

こんなとこにあった。。。
C:\var\lib\cassandra

参考にしたサイト
http://www.intra-mart.jp/download/product/iap/setup/cassandra_administrator_guide/texts/versionup/index.html
dotnet > MemoryStreamクラス > データを区切りなく追加できるストリームバッファ

引用: オンラインゲームのしくみ: Unityで覚えるネットワークプログラミング by 河田匡稔（まさとし）さん

3.3 簡単な通信ライブラリを作ってみよう

> 送受信するbyte[]型のデータは、MemoryStreamクラスでバッファリングします（図3.11)。このクラスはデータを区切りなく追加できるストリームバッファで、通信のデータを簡単に扱える便利なクラスです。

<hr>
http://www.atmarkit.co.jp/fdotnet/dotnettips/985memstream/memstream.html

> ストリームからデータを読み込む際、あらかじめデータ全体の長さが分かっていれば、そのサイズのバイト配列を最初に作成し、データを順に読み込んでいくだけでよいが、すべてのストリームで事前にサイズが分かるわけではない
...
メモリ上に少しずつデータをため込んでいくような処理には、MemoryStreamクラス（System.IO名前空間）が使える。
tcp > バッファリングしないように > Socket.NoDelay =true / Socket.SendBufferSize=0

引用: オンラインゲームのしくみ: Unityで覚えるネットワークプログラミング by 河田匡稔（まさとし）さん
3.1 はじめよう、ソケットプログラミング

> 作成したソケットは、小さなパケットをバッファリングしないようにSocket.NoDelayプロパティをtrue, Socket.SendBufferSizeプロパティを0に設定しています。

<hr>
https://msdn.microsoft.com/ja-jp/library/system.net.sockets.socket.nodelay(v=vs.110).aspx

https://msdn.microsoft.com/ja-jp/library/system.net.sockets.socket.sendbuffersize(v=vs.110).aspx
技術英語 > You sent for me?

@ Star Trek Voyager > EX POST FACTO

艦長室に入るときにNeelixが言った言葉

> You sent for me?

「お呼びで?」という訳がついていた。

<hr>
http://eow.alc.co.jp/search?q=send+for&ref=sa

>send for
> 1. ～を自分の居場所に来させる［届けさせる］ために使者を派遣［人を使いに出す］、〔誰かに依頼して〕（人）を呼びに行かせる

<hr>
send 人で思い出したもの

> Could you send someone to repair? (誰か修理によこしてくださいますか？[日本語がおかしかも])

<hr>
「Placeholder.com」でダミー画像を瞬時に用意しよう

# Placeholder.com

## Placeholder.comとは
瞬時にシンプルなダミー画像を用意することができるwebサービスとなっています。また、手元に画像を用意しなくても使用することができるのが大きな特徴となっております。

## 使い方
使い方は至って簡単
普段の画像挿入と同じように`<img src="◯◯◯">`のURL部分にテンプレートに沿った任意のURLを入れてあげるだけで使うことができます。

### 1. サイズの指定

![500x200](https://via.placeholder.com/500x200)

```html:Template
<img src="https://via.placeholder.com/[width]x[height]">
```

```html:Sample
<img src="https://via.placeholder.com/500x200">
```

こちらが一番の基本的な使い方になります。
URLの[width]と[height]に任意の数字を入れることによってそのサイズの画像を挿入することができます。

### 2. サイズの指定 (正方形)

![300](https://via.placeholder.com/300)

```html:Template
<img src="https://via.placeholder.com/[width]"> 
```

```html:Sample
<img src="https://via.placeholder.com/300"> 
```

画像のwidthとheightとが同じ値を取るような正方形の画像を挿入する場合は[width]値のみの記入で省略をすることができます。

### 3. 色の指定

![300/79b74a/fff?text=Green](https://via.placeholder.com/300/79b74a/fff?text=Green)

```html:Template
<img src="https://via.placeholder.com/300/[背景色]/[文字色]">
```

```html:sample
<img src="https://via.placeholder.com/300/79b74a/fff">
```

16進数表記のカラーコードを挿入することで背景色及び文字色の変更をすることも可能です。
表記方法は前が背景色、後ろが文字色となっています。

### 4. テキストの指定

![300/?text=text](https://via.placeholder.com/300/?text=text)

```html:Template
<img src="https://via.placeholder.com/500/?text=[テキスト]">
```

```html:sample
<img src="https://via.placeholder.com/300/?text=text">
```

デフォルトでは画像サイズの表記のみですが任意のテキストへ変更することもできます。

### 5. フォーマットの変更

![https://via.placeholder.com/300.jpg?text=.JPEG](https://via.placeholder.com/300.jpg?text=.JPEG)

```html:Template
<img src="https://via.placeholder.com/300.[拡張子]">
```

```html:sample
<img src="https://via.placeholder.com/300.jpg">
```

デフォルトの拡張子はpngですがjpegに変更することも可能です。
サイズや色の指定はスラッシュで区切りますが拡張子の前はドットを入れて区切ります。

### 6. 全部のせ

![500x200/79b74a/fff.jpg/?text=Qiita](https://via.placeholder.com/500x200/79b74a/fff.jpg/?text=Qiita)

```html:Template
<img src="https://via.placeholder.com/[width]x[height]/[背景色]/[文字色].[拡張子]/?text=[テキスト]">
```

```html:Sample
<img src="https://via.placeholder.com/500x200/79b74a/fff.jpg/?text=Qiita">
```

1~5までを全て合わせると上記のようになります。

## おわりに
如何でしたでしょうか。このようにしてURLの一部を変更するだけで任意の画像を挿入することができます。画像を挿入する時間がないけどレイアウトを確認したい場合や必要な画像が手元にないときにもとても有用なサービスとなっていて、私自身も実際の開発でとてもお世話になっています。
この記事が、そして「Placeholder.com」がみなさまのコーディングに少しでもお役立ちになれたら思います。

## リンク
[placeholder.com](http://placeholder.com)
英語ですがplaceholder.comの使い方が記載されています。
GitHub Desktopの使い方

# 概要
[GitHub Desktop](https://desktop.github.com/)が[リリース](https://github.com/blog/2046-github-desktop-is-now-available)されました :tada: 
早速使ってみたので、使い方を説明します。
説明は適宜追加していきます。
まずは簡単なところから。

# cloneからpull requestを出すまで

## clone
起動時の画面
![150813-0001.png](https://qiita-image-store.s3.amazonaws.com/0/42729/84e81b10-1d10-468d-09eb-c85e5df8b147.png)

「+」を押してcloneしたいリポジトリ選択する。
ちなみに、自分がforkしたものと所属しているオーガニゼーションのリポジトリしかcloneできなかった。
(forkはこのアプリではできないのでブラウザ操作等で行う)
![150813-0002.png](https://qiita-image-store.s3.amazonaws.com/0/42729/27fee21d-b117-4ca6-990a-f597cabd7d80.png)

cloneする場所を選ぶ。
![150813-0003.png](https://qiita-image-store.s3.amazonaws.com/0/42729/6f3f49e0-f37f-3105-3bd9-bb63794dc1c6.png)

clone後の画面
![150813-0004.png](https://qiita-image-store.s3.amazonaws.com/0/42729/53fb5a8d-71fb-9362-0c09-595b48d9e9a1.png)


## ブランチを切る

ブランチマークを押して、切りたいブランチ名を入力し、「Create Branch」を押下。
![150813-0005.png](https://qiita-image-store.s3.amazonaws.com/0/42729/43df35f6-bd6e-2027-773c-87d88564003a.png)

ブランチを切った後の画面
![150813-0006.png](https://qiita-image-store.s3.amazonaws.com/0/42729/2283de15-7f5d-52e5-5e42-9b71fe38f423.png)

## ファイルを編集する
任意のエディタでファイルを編集する。
Atomを使ってる人は、メニューバー -> Repository -> Open in Atom (⇧⌘A) でAtomが開く。
![150813-0008.png](https://qiita-image-store.s3.amazonaws.com/0/42729/54fc026d-0763-4f26-8c14-0b9e9d5426b4.png)

編集後の画面
差分が見やすい。
![150813-0009.png](https://qiita-image-store.s3.amazonaws.com/0/42729/f5a9bbad-1a96-14dd-ed43-e7bdaa98fe99.png)

## コミットする
コミットメッセージを入力して「commit to 〜」を押下。
![150813-0010.png](https://qiita-image-store.s3.amazonaws.com/0/42729/bb86435f-fe5d-4f74-3eba-93a4857e9390.png)

間違えたら「Undo」で簡単に戻せる。
![150813-0011.png](https://qiita-image-store.s3.amazonaws.com/0/42729/a7db3213-350d-19de-3e9c-007d54eb0d44.png)

## pull requestを投げる

「Pull Request」を押下する
![150813-0012.png](https://qiita-image-store.s3.amazonaws.com/0/42729/1c447026-3926-693b-a5bb-0bbf89a5e3ec.png)

PRのタイトルと説明を書いて、「Send Pull Request」を押下する。
![150813-0013.png](https://qiita-image-store.s3.amazonaws.com/0/42729/158406e1-c6b2-895b-8bb1-637da8a979b1.png)

PR作成成功後の画面
![150813-0015.png](https://qiita-image-store.s3.amazonaws.com/0/42729/afc88b35-d9bb-b822-5287-6c2dccb7e8b4.png)

リンクを踏むと、GitHubのPRの画面に遷移する
![150813-0016.png](https://qiita-image-store.s3.amazonaws.com/0/42729/ad854ed4-968f-f817-59dc-8325607f7164.png)

以降、コミットを積み重ねていき「Sync」を押すとリモートにpushされる
![150813-0018.png](https://qiita-image-store.s3.amazonaws.com/0/42729/295cca30-fe0e-ef96-e98f-0775c927a0c3.png)

## 補足
Gitを操作する上で、基本的で最低限の機能に絞ったイメージ。

* git addは無い。
* git add -pなんかも無い。
Go でタイ文字やアラビア文字の個数をうまく数える

前に自分で書いた記事 [Python でタイ文字やアラビア文字の個数をうまく数える](http://qiita.com/kitsuyui/items/1a0e627a3d1f36b79c95) を Go でやってみたくなった。

Bytes, Unicode(Rune), Grapheme の単位でそれぞれ数えて、 Rune ごとでばらして表示してみた。

Grapheme での数え方は、それっぽい手段が標準ライブラリに用意されてはいなかったので、自分で関数 GraphemeLength を書いた。


```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"unicode"
	"unicode/utf8"
)

func printer(targetString string) {
	bytelength := len(targetString)
	runelength := utf8.RuneCountInString(targetString)
	graphemelength := GraphemeLength(targetString)
	tmpl := "Bytes:\t%d\nRunes:\t%d\nGrapheme:\t%d\n"
	fmt.Printf(tmpl, bytelength, runelength, graphemelength)
	for _, ca := range targetString {
		c := fmt.Sprintf("%#U", ca)
		println(c)
	}
}

func GraphemeLength(targetString string) int {
	length := 0
	inPart := false
	for _, ca := range targetString {
		if unicode.Is(unicode.M, ca) {
			if !inPart {
				inPart = true
			}
			continue
		}
		length++
	}
	return length
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	for scanner.Scan() {
		printer(scanner.Text())
	}
}
```

```console
$ go run main.go <<< 'กินข้าวเย็น'
Bytes:	33
Runes:	11
Grapheme:	8
U+0E01 'ก'
U+0E34 'ิ'
U+0E19 'น'
U+0E02 'ข'
U+0E49 '้'
U+0E32 'า'
U+0E27 'ว'
U+0E40 'เ'
U+0E22 'ย'
U+0E47 '็'
U+0E19 'น'
```
Dynamic Boneでboneを物理挙動させてみる

###Dynamic Boneで遊んでみました 

<a href="https://www.assetstore.unity3d.com/jp/#!/content/16743" target="_blank">
![1.png](https://qiita-image-store.s3.amazonaws.com/0/46444/f9569c22-2f50-66ec-3795-b3b99d3f561e.png)</a>

##何ができるか
うーんと　尻尾を揺らしたり胸を揺らしたりできます。
さすがに揺らすにはモデルにboneがはいっていないと無理です。
前から気になっていたのでこの機会にちょっとためしてみます。

###インポートしたところ  
![2.png](https://qiita-image-store.s3.amazonaws.com/0/46444/d97d9fad-fbae-e146-1363-e7e35b2ad342.png)
うんシンプル。
デモをみて、早速どうなってるかしらべてみる。
c1のモデルをシーンにドロップしたところ
![3.png](https://qiita-image-store.s3.amazonaws.com/0/46444/7ccb12f6-bd95-4ecc-49d7-17bd11363b0f.png)
左がc1モデル 右はDemoシーンのモデル
あれ尻尾がない。どうやらtailというのが尻尾のようです。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/46444/2ab0b708-9fd5-95d0-31ff-9cc96f54a1fa.png)
尻尾。これをシーンに配置し、

![5.png](https://qiita-image-store.s3.amazonaws.com/0/46444/53cb89d3-5e19-a549-a154-e861352e775c.png)
Component->Dynamic Bone->Dynamic BoneでScriptをアタッチ

![6.png](https://qiita-image-store.s3.amazonaws.com/0/46444/c3a7caa0-423e-31d3-577d-f4c029ef2ff3.png)
インスペクタに動かすボーンのルートを設定して

![tail.gif](https://qiita-image-store.s3.amazonaws.com/0/46444/8c06b49a-2741-fd9b-654f-018861e6519d.gif)
Scene window上で動かすだけでゆれる！なんとお手軽!

![7.png](https://qiita-image-store.s3.amazonaws.com/0/46444/b44ca716-947f-1be4-7b28-64fd9271f240.png)
ちなみにしっぽのモデルをmayaでみるとこんな感じ。

胸なども骨をいれて同じようにScriptをアタッチすると動く仕組みでした。
ここで気になったのが胸のボーンってどう入れているんだろうと気になったので見てみました。
rPectoralが胸のボーンです
![pectoral.gif](https://qiita-image-store.s3.amazonaws.com/0/46444/46b75347-cc27-ca8c-69cc-2d22501d8f69.gif)
作るときはなんか適当にボーンつけてウェイトだけちゃんと設定しとけばあとなんとかなるのかな。
という印象

おんなじ感じで髪の毛とかもいける気がする
スカートとかどうなんだろう。スカートの骨の入れ方・・・

なんか頭が寂しかったので簡単に耳をモデリングして骨をいれてつけてみました。
![Dog.gif](https://qiita-image-store.s3.amazonaws.com/0/46444/15ee5d82-2c09-ee47-1c78-ade7d1a82d39.gif)![Dog2.gif](https://qiita-image-store.s3.amazonaws.com/0/46444/6d4f5c92-c5a6-4dc9-449b-664ed650ebd9.gif)![Dog3.gif](https://qiita-image-store.s3.amazonaws.com/0/46444/199cdb6d-d9ba-2560-c169-f205de82c2f0.gif)
1つめ：尻尾を２つつけてみたw
2つめ：耳を簡単につくって設定をかえずにつけてみた。タコみたいうごくw
3つめ：耳の設定をウサギっぽくしてみた。

おお、動物の耳とか触手とかいけるねうん
最後のウサギの耳のは設定をこんな風にかえてみました。
![8.png](https://qiita-image-store.s3.amazonaws.com/0/46444/2647fb0b-487f-0fb5-2e6b-6b549e6470a9.png)
下の方 Freeze Axisで動かない方向を指定できるのでこれで横には動かないようにしました。

##もう一個のDynamicBoneColliderはなんだろう？
これはDynamicBoneのあたり判定につかうようです。
![10.png](https://qiita-image-store.s3.amazonaws.com/0/46444/43fe97ea-20af-4f8a-f92a-e2a6a493788c.png)

![9.png](https://qiita-image-store.s3.amazonaws.com/0/46444/6bd6c419-5dc6-bb03-4cf4-b5059f15c222.png)
あたり判定をつけたいボーンにScriptをアタッチし、サイズなどを設定

DynamicBoneの下の方のCollidersにぶつかるものをセット
![11.png](https://qiita-image-store.s3.amazonaws.com/0/46444/5620aef2-005d-ae24-f235-05743d2247aa.png)

![Dog5.gif](https://qiita-image-store.s3.amazonaws.com/0/46444/2b47feb2-e3e8-593f-c95c-a8089f2069ed.gif)![Dog4.gif](https://qiita-image-store.s3.amazonaws.com/0/46444/8cfa2933-0971-f0cf-90ca-1566f956f4ea.gif)
簡単にスカートが・・・・骨の入れ方とかやったことなかったので尻尾で実験w
左：あたり判定なし　右：あたり判定あり
なるほど、これでスカートとかもいけそうな気がする

###まとめ
アセットのソースが結構短いので時間があるときに見てちょっと操作方法を覚えたいなと思いました。
はい、今回はここまで
Rails - 処理中アニメーション付ボタン(コード1行)

# やりたいこと

クリック後にボタンを無効化し、こんな感じで処理中のアニメーションをボタンに表示したい。
>|<i class='fa fa-spinner fa-spin'></i></button>　検索中|
|:---:|

# 環境

- Rails 4.2.1
- jQuery UJS
- FontAwesome

# RailsでHAML

```haml
= f.button "検索", data: { disable_with: "<i class='fa fa-spinner fa-spin'></i>検索中" }
```

# HTML

```html
<button name="button" type="submit" class="submit"
  data-disable-with="<i class='fa fa-spinner fa-spin'></i> 検索中">
  検索
</button>
```

# 参考資料

- [This option is incredibly useful for adding loading animations to your buttons.](https://www.omniref.com/ruby/gems/actionview/4.1.1/symbols/ActionView::Helpers::FormTagHelper/button_tag#annotation=72&line=452)
- [Button Loading Animations with jQuery UJS](https://gorails.com/episodes/button-loading-animations-with-jquery-ujs)
Jenkinsでいろいろ

# Jenkinsとは何か？


最新バージョン
https://www.jenkins.io/changelog/

<img width="400" alt="mojikyo45_640-2.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/21c1ea31-d5e9-4c8f-fe8b-dd0ab91bc6d5.jpeg">

**簡単に纏めてみます。**

```lang:継続的インテグレーション
Javaで記載されたオープンソース継続的インテグレーションツール
で、継続的インテグレーションって何？
```
```lang:継続的インテグレーション説明
継続的なビルドとテストの環境が整備され、実装工程から日々実施されるビルドならびにテストでビルドエラーを発見できるようになります。また、CI環境の導入によりプロセスが自動化されるため、開発者に負担をかけず、かつ、開発者に依存する作業を減らしながら、ビルドやテストの実施漏れを防げられる。
```

```lang:ツールにより自動化できる
①単体テスト
②ビルド
③デプロイ作業
```

# 何が良いのか
```lang:品質の向上
開発効率を上げ、今まで難しかったテストを容易に行いながら、開発者ひとりひとりの生産性や品質の向上が可能
```
```lang:問題を早期発見
インテグレーション時の問題を早期発見し、防止策の実施や、プロセス改善へとつなげることが期待可能
```
```lang:開発プロセスの統一化
複数の開発者や開発拠点にまたがる開発プロセスの統一化やノウハウの共有
```

# 導入しましょう
**Jenkins**をインストールする
Java 6 以上があらかじめインストールされている必要

私は、さくらのVPS(v4) SSD 512を用意しました。

```lang:java-1.7.0-openjdk
yum install wget java-1.7.0-openjdk
```
```lang:wget
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
```
```lang:installjenkins
 yum install jenkins
```
起動しているか確認

サーバーに問い合わせ
![jenkins.png](https://qiita-image-store.s3.amazonaws.com/0/55160/8a03c0f3-41e3-d057-0117-33207e4104a3.png)

まずは設定ですね。

**「Seleniumhq」** プラグインと **「seleniumhtmlreport」** プラグインを選択

プラグイン設定したあと、再起動です。

![テスト.png](https://qiita-image-store.s3.amazonaws.com/0/55160/ed94601f-3ec5-dfa0-881e-7e87a59cb7b3.png)

Seleniumと連携をとるように。

# HipChatと連携
1.Jenkinsの管理の「プラグインの管理」→　HipChat Pluginを選択します。
2.GroupAdmin画面からAPIを選択
3.CreateNewTokenの欄　→　トークンを発行
4.Jenkinsの設定 → システム設定で「Global HipChat Notifier Settings」が表示
5.HipChatに通知 → HipChat Notifications
6.Project Roomに通知　→　HipChatのRoom名　→ Start Notiricationにチェック
7.成功は緑、失敗は赤で表示します。
Apache Sparkで同じIDを1つにまとめる方法

# はじめに

以下のようなユーザIDとアイテムIDの表に対して、Apache Sparkを利用して
同じユーザIDを持つアイテムIDをひとつにまとめるコードを書いていきます。

| ユーザID | アイテムID |
|----|----|
| 1 | B | 
| 2 | B | 
| 1 | C |
| 3 | C |
| 2 | B |
| 3 | A |


同じユーザIDを持つアイテムIDをひとつにまとめると以下のようになります。

| ユーザID | アイテムID |
|----|----|
| 1 | B, C | 
| 2 | B | 
| 3 | A, C |


# Java、Scala、sbtのインストール

JavaとScalaとsbtをインストールします。
今回は以下のバージョンをインストールします。

```
$ java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
$ scala -version
Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL
$ sbt about
[info] Set current project to App (in build file:/Users/)
[info] This is sbt 0.13.8
[info] The current project is {file:/Users/} 1.0
[info] The current project is built against Scala 2.11.6
[info] Available Plugins: sbt.plugins.IvyPlugin, sbt.plugins.JvmPlugin, sbt.plugins.CorePlugin, sbt.plugins.JUnitXmlReportPlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.4
```


# 実装

以下の内容をbuild.sbtとして保存します。
今回はApache Spark 1.4.1を利用します。

```scala:build.sbt
name := "App"
version := "1.0"
scalaVersion := "2.11.6"

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "1.4.1"
)
```
 
次に以下の内容をmain.scalaとして保存します。

```scala:main.scala
import org.apache.spark.SparkContext

object Main {
  def main(args: Array[String]) {
    val sc = new SparkContext("local[*]", "App") // ローカルモード
    val rdd = sc.textFile("sample.csv").map(_.split(",")).map(x => (x(0), x(1))).cache()

    rdd.reduceByKey((x, y) => x + "," + y).collect.foreach { r => 
      println(r._1 + "\t" + r._2.split(',').distinct.mkString("", ",", "")) // 重複のあるアイテムIDを排除する
    }

    sc.stop()
  }
}
```

`sc.textFile("sample.csv").map(_.split(","))` でファイルを指定してカンマで分割します。
`map(x => (x(0), x(1)))` で`(1, B)`、`(2, B)`というようなキーとバリューのペアにします。


次に以下の内容をsample.csvとして保存します。

```text:sample.csv
1,B
2,B
1,C
3,C
2,B
3,A
```

# 実行

実行方法は以下のとおりです。

```
$ sbt run
```

大量の実行ログの中にprintlnの内容が表示されます。

```
2	B
3	C,A
1	B,C
```
Cygwin環境にcowsayコマンドをインストールする

## <i class="fa fa-cubes" style="font-size:1em;"></i> 概要
Cygwin環境にcowsayコマンドをインストールします

## <i class="fa fa-download" style="font-size:1em;"></i> インストール
* 下記にアクセスする
    * https://code.google.com/p/bamanzi-misc/downloads/list
* cowsay-3.03-1.tar.bz2 をダウンロードする
* 解凍する

```bash
$ tar jxf cowsay-3.03-1.tar.bz2
```

* 解凍したファイルを `%cygwin%usr/local` 配下に移動

## <i class="fa fa-check-circle" style="font-size:1em;"></i> 動作確認
```bash
$ cowsay "ntt-san"
 _________
< ntt-san >
 ---------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
$ cowthink "ntt-san"
 _________
( ntt-san )
 ---------
        o   ^__^
         o  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
```

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
<i class="fa fa-external-link" style="font-size:1em;"></i> [How to install cowsay for Cygwin - CODE YARNS](http://codeyarns.com/2013/07/26/how-to-install-cowsay-for-cygwin/)
RubyでAWS EC2の起動・停止・インスタンスタイプの変更

## 利用環境

- Ruby 2.1.2
- aws-sdk 2.1.11

## Gemインストール

```Gemfile
gem 'aws-sdk'
```

## EC2の操作

### Clientインスタンス生成

各種EC2の操作は、Clientインスタンスを利用して行う。

```
require 'aws-sdk'

access_key ="xxxxxxxxxxxxxxxxxxxxxxxxxxx"
secret_key ="xxxxxxxxxxxxxxxxxxxxxxxxxxx"
region = "ap-northeast-1"

client = Aws::EC2::Client.new(
    credentials: Aws::Credentials.new(access_key , secret_key),
    region: region
)
```

### インスタンスの停止

```
client.stop_instances({
                               dry_run: false,
                               instance_ids: ["i-1234567" ],
                             })

# 停止まで待つ。5秒間隔で15回
client.wait_until(:instance_stopped, instance_ids: [ 'i-1234567']) do |waiter|
      waiter.interval = 5 
      waiter.max_attempts = 15
end
```

### インスタンスタイプの変更

インスタンスタイプを指定してインスタンスを変更する。変更対象のインスタンスは停止している必要がある。

```
# m1.small に変更
instance_type = Aws::EC2::Types::AttributeValue.new(value: "m1.small")

client.modify_instance_attribute({
                                          dry_run: false,
                                          instance_id: "i-1234567",
                                          instance_type: instance_type,
                                      })
                                          
```
  
### インスタンスの開始

```
client.start_instances({
                               dry_run: false,
                               instance_ids: ["i-1234567" ],
                             })

# 起動まで待つ。5秒間隔で15回
client.wait_until(:instance_running, instance_ids: [ 'i-1234567']) do |waiter|
      waiter.interval = 5 
      waiter.max_attempts = 15
end
```
python urllib3 を使った通信で認証プロキシを通す


python の urllib3 を使ってプロキシ認証を通す。

```python:proxy_test.py
# コロン区切りでユーザID、パスワードを設定 userid:password
PROXY_BASIC_AUTH = "userid:password"

# プロキシのURL, port
PROXY_URL = "http://proxy.net:8080"

# 接続先 URL
REQUEST_URL = "https://www.djangoproject.com/"

if __name__ == '__main__':

   headers = urllib3.util.make_headers(proxy_basic_auth=PROXY_BASIC_AUTH)
   http = urllib3.ProxyManager(proxy_url=PROXY_URL,
           proxy_headers=headers, cert_reqs='CERT_REQUIRED', ca_certs=certifi.where())
   r = http.request("GET", REQUEST_URL)

   # 出力
   print(r.data, r.status, )
```
GAS→chatworkへメッセージを飛ばす

## 概要

GASでチャットワークへ発言する関数を作成したので手順をまとめました。

これを利用すると以下のようなスクリプトを作成することが出来ます。

`例：売上シートの内容をbotアカウントが毎朝つぶやく`

## 参考

[GAS - Class UrlFetchApp](https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app)
[ChatWork API - /rooms](http://developer.chatwork.com/ja/endpoint_rooms.html)

## 事前準備

事前にAPIトークンの生成をしてください。
http://developer.chatwork.com/ja/authenticate.html

## チャットワークに発言

[YourAccountAPIToken]には発言させるアカウントのAPIトークンを入力してください。

```js
function sendHttpPost (message, room_id) {

  var payload = {
    "body" : message
  };
  
  var headers = {
    "X-ChatWorkToken" : [YourAccountAPIToken]
  };

  var options = {
    "method" : "post",
    "payload" : payload,
    "headers" : headers
  };

  UrlFetchApp.fetch("https://api.chatwork.com/v1/rooms/" + room_id + "/messages", options);
}
```

## 使用例

```js
function main () {
  sendHttpPost("ピザは野菜もとれるしバランスいい", 99999999);
}
```
MacのMail.appで送信後にエラーで返ってくる


Mac標準の```Mail.app```でメールを送信した際に下記エラーで戻ってきたので、対処方法をメモ。

```
Remote Server returned '550 5.6.0 CAT.InvalidContent.Exception: InvalidCharsetException, Character set name (iso-2022-jp-2) is invalid or not installed.
```

相手側が```IOS-2022-JP-2```をサポートしてないのが原因っぽい。
(Exchange Server 2010 ??)

相手側を変えることはできないので、自分の方で対応する。

[LetterFix for Mac OS X Mail.app](http://osdn.jp/projects/letter-fix/)

というのをインストールすれば、対応できるみたい。

```Mail.app バージョン 8.2 (2102)```に入れてみたけど、問題なく送信できた。

***
参考サイト

* [Macのメール](http://www.aikawa-net.com/category/Apple)
* [Apple Mailを快適に使う設定](http://rinihi.com/inspiration/apple-mail-setting)
* [外部からメールが受信できない状態です。](https://social.technet.microsoft.com/Forums/ja-JP/9d2ec938-8326-4d50-8125-86c4d140e8c5?forum=exchange2013jp)
PlayFrameworkでCookieを試してみました

## はじめに

PlayFrameworkでクッキーを保存したり、削除したりしてみました。結構ニッチな話かもしれませんが、よろしくお願いします。

ひとまず、参考にした記事を紹介します。

- [How to use Cookies in Play framework | Knoldus](http://blog.knoldus.com/2014/04/05/using-cookies-in-play-framework/)
- [typesafe activatorを使わないplayframework2.3の始め方 - scalaとか・・・](http://d.hatena.ne.jp/xuwei/20140531/1401525122)
- [Allowed characters in cookies - Stack Overflow](http://stackoverflow.com/questions/1969232/allowed-characters-in-cookies)

この記事では、使用したディレクトリ構造と使用したファイルを紹介します。(もし、気づいたことがありましたら、ご指摘いただければ幸いです。)

## ディレクトリ構造

使用したディレクトリ構造は下記のディレクトリ構造になります。

```
.
├── app
│   └── controllers
│       └── Tokyo.scala
├── build.sbt
├── conf
│   ├── application.conf
│   └── routes
└── project
    ├── build.properties
    └── plugins.sbt
```

サーバーを起動するコマンドは下記のコマンドラインになります。(Javaやsbtが必要です。)

```
sbt run
```

sbtのインストールは、sbtを[こちら](http://www.scala-sbt.org/0.13/tutorial/Installing-sbt-on-Mac.html)からダウンロードして、解凍して、PATHを通しました。

このコマンドを実行すると、サーバーが起動します。

サーバー起動後、ブラウザのアドレスバーに`http://localhost:9000/`としたり、`http://localhost:9000/cookie`としたり、`http://localhost:9000/eat`としてみて下さい。

`/`でブラウザにクッキーを保存して、`/cookie`でクッキーの値を表示して、`/eat`でブラウザに保存したクッキーを削除します。

## ファイル

まずは、build.sbtを見てみます。ここではプロジェクトを設定しています。

```build.sbt
lazy val commonSettings = Seq(
  version := "0.1-SNAPSHOT",
  organization := "com.sandbox",
  scalaVersion := "2.11.6"
)

lazy val root = (project in file("."))
  .settings(commonSettings: _*)
  .enablePlugins(PlayScala)
```

つぎに、plugins.sbtを見てみます。ここではプラグインを指定します。

```plugins.sbt
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.2")
```

build.propertiesを見てみます。ここではsbtのバージョンを指定します。

```build.properties
sbt.version=0.13.8
```

routesを見てみます。ここではリクエストをコントローラのアクションに関連付けます。(余談ですが、eatは動詞なので、URLに使用することはあまり好まれないようです。)

```routes
GET /       controllers.Tokyo.index
GET /cookie controllers.Tokyo.cookie
GET /eat    controllers.Tokyo.eat
```

application.confを見てみます。このファイルが存在しない場合、実行時エラーになります。

```application.conf
# conf/application.conf
```

Tokyo.scalaを見てみます。ここではコントローラを用意します。

```Tokyo.scala
package controllers

import play.api._
import play.api.mvc._

object Tokyo extends Controller {
  def index = Action {
    Ok("Hello cookie!").withCookies(Cookie("mycookie", "Oh-Cookie."))
  }
  def cookie = Action { request =>
    Ok(request.cookies.get("mycookie").map(_.value).getOrElse("Nothing."))
  }
  def eat = Action {
    Ok("Good taste!").discardingCookies(DiscardingCookie("mycookie"))
  }
}
```

クッキーの値を"Oh, cookie!"とすると、実行時エラーになります。原因は、クッキーの値に利用できないカンマや半角スペースを使っているからでした。

## 振り返り

クッキーだけではあまり面白くないかもしれませんが、クッキーを利用するような話は面白いかもしれません。

また、クッキーの値に利用できる文字も奥深そうな話です。`!`は利用できるかと思ったのですが、利用できませんでした。よく分からない状態です。
-mainオプションを省略してコンパイルする

cliなら

```
haxe -js main.js Main
```

でOK。

`hxml`なら

```
Main
-js main.js
```

でOK。

これでコンパイルすると`main`メソッドでBootする処理が出力されなくなります。
知らんかった…
Xcodeのデバッグで、実行中に変数の値を書き換える方法


まず、
　目的の箇所があれば、ブレークポイントで止めます。

値を変更する変数
![スクリーンショット 2015-08-12 22.04.44.png](https://qiita-image-store.s3.amazonaws.com/0/47947/bbb93d71-9c86-e581-863a-000cf364901e.png)

コンソールにコマンドを打ち込みます。
expr 変数名 = 代入したい値。
![スクリーンショット 2015-08-12 22.04.30.png](https://qiita-image-store.s3.amazonaws.com/0/47947/d3a49928-a6e5-f139-3dca-ff56443b8451.png)

結果：
　変数　iの中身が1になり、if文の中に入ります。
　（キャプチャ忘れましたが

<hr>
さらに詳細が欲しい場合＝lldb デバッガ コマンド などでググる。