OmniAICreator/Qiita-1.07M huggingface dataset:
flycheck で flake8 を実行する時にオプションを指定する

# 背景

[flycheck](http://www.flycheck.org) を使うとほとんど設定をしなくてもEmacs上で各種チェッカを実行することができるが、例えば python のコードを [flake8](http://flake8.readthedocs.io/) でチェックしていて、特定のプロジェクトでは pep8 のチェックをスキップしたいといった場合があるのでその設定方法をまとめる。

# 設定ファイルの探索順

flycheck-locate-config-file-functionsで制御されていて、

1. チェック対象のソースの居るディレクトリ
2. 祖先のディレクトリ
3. ホームディレクトリ

の順に探索される。

# 設定ファイル名

flake8 の場合だと flycheck-flake8rc の値のファイル名が探索される。デフォルト値は ".flake8rc"

# 設定例

そのプロジェクトで pep8 のランタイムエラー (E9*) のチェック以外をスキップして、pyflakes (F*) のチェックだけしたい場合には、プロジェクトのソースのルートディレクトリに .flake8rc というファイルを以下の内容で作ればよい（探索順のところで書いた「祖先のディレクトリ」でヒットする）

```
[flake8]
select = E9,F
```
Pythonでhttpリクエスト


## やること
* とあるAPIを叩きに行きたかったから、その方法を調べる。

## 準備
### ライブラリインストール

* pip導入してあったのでこれ使う。

```console:console
$ pip install requests
```

## 使用方法

* sample source

``` python:sample.py
import requests

request_url = 'http://google.com'
request_params = {'param1': 1, 'param2': 2}

request = requests.get(request_url, params=request_params)

if request.status_code == 200:
    print("\n", request.encoding)
    print("\n", request.headers['content-type'])
    print("\n", request.text)
```

* result

``` console:console
 Shift_JIS
 
 text/html; charset=Shift_JIS

 <!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja">...</html>
```


## メモ
* requests.get()のところは、リクエストメソッドがそのままメソッド名になっているので、postしたければpost()。deleteやputも同様。
Macでjsonを見やすく整形する方法


## やりたいこと

```console
$ cat some.json

{"searchengines":[{"title":"google","url":"http://google.co.jp"},{"title":"Yahoo!","url":"http://yahoo.co.jp"}]}
```
* 要素が多くなってくると読みにくいので、整形して出力したい。

## 準備
### jqインストール

```console
$ brew install jq
```

## 使い方

``` console
$  cat some.json | jq

{
  "searchengines": [
    {
      "title": "google",
      "url": "http://google.co.jp"
    },
    {
      "title": "Yahoo!",
      "url": "http://yahoo.co.jp"
    }
  ]
}
```

* 読みやすくなった。
* highlightもしてくれた。
iTunesでなぜかチェックがはずれている項目のチェックを自動で直す (JXA)

チェックをいじっていないのに、勝手にチェックがはずれていることがあるらしい。
確かめてみたら、たしかにチェックをまったくいじってないのに何件かはずれていた。

なので、チェックを自動で入れなおす **[JXA](http://qiita.com/zakuroishikuro/items/1b02378bf9e940602d87)** を書いた。
でも意図的にチェックをはずしている項目もあると思うので
ダイアログを表示して「プレイリストを作成」を選ぶとプレイリスト作るだけにする。

```js:itunes_unchecked_tracks.js
// チェックのはずれた項目を取得
iTunes = Application("iTunes");
unchecked_tracks = iTunes.tracks.whose({enabled: false})();

// ダイアログ表示の下準備
app = Application.currentApplication();
app.includeStandardAdditions = true;

if (unchecked_tracks.length == 0){
  app.displayAlert("チェックのはずれている項目はありませんでした。");
} else {
  var answer = app.displayDialog(`チェックのはずれている項目が ${unchecked_tracks.length} 件あります。`,
    {
      buttons: ["キャンセル", "チェックを入れなおす", "プレイリストを作成"],
      defaultButton: 3,
      cancelButton: 1
    }
  )
  
  if (answer.buttonReturned == "チェックを入れなおす"){
    // 全てチェックを入れなおす
    unchecked_tracks.forEach(function(track){
      track.enabled = true;
    });
    
  } else if (answer.buttonReturned == "プレイリストを作成") {
    // プレイリストを作成
    var playlist = iTunes.Playlist({name: "チェックがはずれている項目"}).make();
    
    unchecked_tracks.forEach(function(track){
      track.duplicate({to: playlist});
    });
  }
}
```

わざわざスクリプト書くまでもなくスマートプレイリストで何とかなるだろうけど、使わないと使い方を忘れるので。

## メモ

`whose`に関しては [公式ドキュメント](https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-10.html#//apple_ref/doc/uid/TP40014508-CH109-SW10) の「Filtering Arrays」を参照。
`whose`の後にカッコをつけてる理由は [JXAで子要素のプロパティを一気に得る](http://qiita.com/zakuroishikuro/items/c09afdc62f5ff8283704) を参照。

プレイリストに曲を追加するときは`track.duplicate({to: playlist});`とするらしい。
なんか気持ち悪い。

ES2015の [Template strings](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/template_strings) は涙が出るほど便利なのでばんばん使う。
[アロー関数](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/arrow_functions) は使えなくて泣ける。

`Application.currentApplication()`はスクリプトを実行しているアプリケーション。
Script EditorからScript Editorだし、ターミナルならosascriptコマンド。
ちなみにスクリプトメニューから実行した場合もosascript。
StandardAdditionsのメソッドはここから使うのが無難。(他だとエラーが出ることがある)

# 参考

[iTunesでアルバムの次の曲が再生されない場合の対処法](http://blog.jnito.com/entry/2013/10/13/194406)
[Add track to iTunes playlist using JXA](http://stackoverflow.com/questions/33620401/add-track-to-itunes-playlist-using-jxa)
postScaleを使ってKiiCloudにアップロードするbitmapのサイズを半分にする方法

KiiCloudのチュートリアルを編集して、アップロードするbitmapのサイズを半分にする方法。


```java:PostActivity.java
//uriからファイルのパスを取得する。バージョンによって処理が違う。
//KiiCloudのチュートリアルから取り込んだ。汎用的に使えます。
    private String getFilePathByUri(Uri selectedFileUri) {
        //4.2以降の時
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            // Workaround of retrieving file image through ContentResolver
            // for Android4.2 or later
            String filePath = null;
            FileOutputStream fos = null;
            try {
                //ビットマップの変換サイズを定義
                Matrix varMat = new Matrix();
                varMat.postScale(0.5F, 0.5F);
                //ビットマップを取得
                Bitmap bmp = MediaStore.Images.Media.getBitmap(
                        this.getContentResolver(), selectedFileUri);
                //ビットマップを定義したサイズに変換
                Bitmap bmp2 = Bitmap.createBitmap(
                        bmp, 0, 0,
                        bmp.getWidth(),
                        bmp.getHeight(),
                        varMat, true
                );
                //一時保存するディレクトリ。アプリに応じてappの部分を変更したほうが良い
                String cacheDir = Environment.getExternalStorageDirectory()
                        .getAbsolutePath() + File.separator + "app";
                //ディレクトリ作成
                File createDir = new File(cacheDir);
                if (!createDir.exists()) {
                    createDir.mkdir();
                }
                //一時ファイル名を作成。毎回上書き
                filePath = cacheDir + File.separator + "upload.jpg";
                File file = new File(filePath);
                //ビットマップをjpgに変換して一時的に保存する。
                fos = new FileOutputStream(file);
                bmp2.compress(Bitmap.CompressFormat.JPEG, 95, fos);
                fos.flush();
                fos.getFD().sync();
            } catch (Exception e) {
                filePath = null;
            } finally {//かならず最後に実行する処理
                if (fos != null) {
                    try {
                        //ファイルを閉じる
                        fos.close();
                    } catch (Exception e) {
                        // Nothing to do
                    }
                }
            }
            return filePath;
        } 

```
Pythonの文法 - 制御構文


* 初めてのPython。わからないことをわかったベースで追記していきます。

## 繰り返し&条件分岐

```python
count = 0
while count < 5:
    # 条件分岐
    if count % 2 == 0:
        print(str(count) + ' is even');
    else:
        print(str(count) + ' is odd');
    count += 1
```


## 10繰り返すが、3はスキップ、5で抜ける

```python
for count10 in range(10):
    if count10 == 3:
        continue
    if count10 == 5:
        break
    print(count10)
```
簡単です！！rails開発でエラーと戦おう、pryを使ったデバッグの方法！！

プログラミングする上で避けることができないものの一つに、**エラー**があるだろう。

どんなにすごいプログラマーでも初めは多くのエラーと戦ってきたはずである。

そこで、エラーに負けないために、エラーの対応の仕方を学んでいこうという記事である。

ここでは、pryを用いてエラーに対応していく。

#Gemの追加
```ruby:Gemfile
group :development, :test do
  gem 'pry-rails'  # rails consoleでirbの代わりにpryを使うことができる
  gem 'pry-doc'    # methodを表示する
  gem 'pry-byebug' # デバッグを実施(Ruby 2.0以降)
  gem 'pry-stack_explorer' # スタックをたどることができる
end
```
基本的に、本番環境では使わないとして、開発環境やテスト環境のみとした。
初めは、それぞれのgemの役割は気にしなくてもよい。
Gemfileに追加したら, bundle intsallをします。

##デバッグの方法
ビュー、コントローラー、ヘルパー、モデルなどでデバッグを行いたい部分に,**binding.pry**と記述だけである。すると、そこでサーバーが停止する。サーバーが停止すると、インタラクティブなモードになり、変数名を入力することで、そこに格納されている値やparamsなどを確認できる（なぜかインデントがずれて、表示されています）
<img width="372" alt="スクリーンショット 2016-05-31 14.53.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/115198/dd4b0f29-0464-cda4-61a6-ee0f1421883b.png">

<img width="616" alt="スクリーンショット 2016-05-31 14.30.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/115198/593d3f48-ce36-c2b1-09ba-0dcd18ef4929.png">

<img width="411" alt="スクリーンショット 2016-05-31 14.42.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/115198/880c82ef-a913-0e9b-319b-9fe8ffce6566.png">

また、以下の４つのコマンドでソースコード内を移動することができます。
```next   : 次の行に移動する
step   : 次の行か、メソッド内の行に移動する
exit   : 次のブレークポイントまで実行する
finish : 現在のスタックトレース(画面に表示されているメソッド)が終わるまで実行する```

と、言った感じです。pryを使いこなして、うまくエラーがでたり、思ったような動きをしないときは、デバッグをして、効率良く開発していきましょう！！
flask(anaconda) + herokuでlinebotやってみた

##はじめに
最近はやりのlinebotを作ってみたくてやってみました。
それと、どうしてもpythonで作ってみたかった！

##参考
[anaconda環境でflaskで開発したサーバーをherokuに上げる](http://terabytesmemo.hatenablog.jp/entry/2016/03/10/203445)
[LINE BOT APIを使ってPythonでLINE BOTを作ってみた](http://osa030.hatenablog.com/entry/2016/04/08/214939)

以下の三つは友達が結構詳しくrubyで作っているので見てみてください。
[LINE BOT が チラシをくれた(1) 〜おうむ返し編](http://qiita.com/kurouw/items/f00229e51818d80ae643)
[LINE BOT が チラシをくれた(2) 〜PUSH編](http://qiita.com/kurouw/items/a54b678308f5fe02ccfc)
[LINE BOT が チラシをくれた(3)　〜最後まで](http://qiita.com/kurouw/items/1f86fbd32fdc1d1474f1)

##今回の目標
おうむ返しができるところまで作りたい！


##環境設定ファイル
```conda-requirements.txt
# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: osx-64
flask=0.10.1=py35_1
gunicorn=19.1.0=py35_0
itsdangerous=0.24=py35_0
jinja2=2.8=py35_0
markupsafe=0.23=py35_0
openssl=1.0.2h=0
pastedeploy=1.5.2=py35_1
pip=8.1.1=py35_1
python=3.5.1=0
readline=6.2=2
setuptools=20.7.0=py35_0
sqlite=3.9.2=0
tk=8.5.18=0
werkzeug=0.11.9=py35_0
wheel=0.29.0=py35_0
xz=5.0.5=1
zlib=1.2.8=0
```


```runtime.txt
python-3.5.1
```

##ソースコード
```python3
from flask import Flask
from flask import request


import os
import requests
import json
import re



LINEBOT_API_EVENT ='https://trialbot-api.line.me/v1/events'
LINE_HEADERS = {
    'Content-type': 'application/json; charset=UTF-8',
    'X-Line-ChannelID':os.environ['CONTENT'], # Channel ID
    'X-Line-ChannelSecret':os.environ['CHANNEL'], # Channel secre
    'X-Line-Trusted-User-With-ACL':os.environ['MID'] # MID (of Channel)
}
#proxies = {'https': os.environ['PROXIES']}
proxies = {'http': os.environ.get('FIXIE_URL', ''), 'https': os.environ.get('FIXIE_URL', '')}

def post_event( to, content):
    msg = {
        'to': [to],
        'toChannel': 1383378250, # Fixed  value
        'eventType': "138311608800106203", # Fixed value
        'content': content
    }
    print(msg)
    r = requests.post(LINEBOT_API_EVENT, headers=LINE_HEADERS, data=json.dumps(msg),proxies = proxies)

def post_text( to, text ):
    content = {
        'contentType':1,
        'toType':1,
        'text':text,
    }
    post_event(to, content)

app = Flask(__name__)
@app.route("/callback", methods=['POST'])
def hello():
    msgs = request.json['result']
    for msg in msgs:
        text = msg['content']['text']
        print(text)
        post_text(msg['content']['from'],text)
        return ''
if __name__ == "__main__":
    app.run()

```

##最後に
この記事をあげる前にいろいろ、この先のステップのコードまで進んでいたので、コードを戻すときに余計なものが入っているかもしれませんが、そこはすみません、
channelIDなどはherokuの環境変数としておいています。
技術英語 > , shows that [supposedly] safe levels of lead exposure / allegedly

@ LOE > May 9, 2003
http://loe.org/shows/shows.html?programID=03-P13-00019
> , shows that <font color=red>supposedly</font> safe levels of lead exposure

http://ejje.weblio.jp/content/supposedly
> 推定では(…と思われる)、…と想像される

<hr>
これに近いa***lyという単語を昔覚えたが忘れていた。

多分これだろう。
http://ejje.weblio.jp/content/allegedly
> (真偽は別として)申し立てによると、伝えられるところでは

新聞記事で使われていたかと思う。
自分の関連では使いそうにないので記憶に定着しない。
定期的に自動でコミットさせるスクリプト

PSDとかSketchなんかのデザインファイルもGitで履歴を追えるようにしたいんだけど、
プログラミングと違って、ついついコミットするの忘れてしまうので自動化

```bash:~/scripts/auto_commit.sh
#!/bin/bash

while true
do
  git add .
  git commit -m 'auto commit'
  sleep 300
done
```

この場合５分毎に、変更がある場合に自動的にコミットしてくれる

こいつをターミナルからgitディレクトリの中で実行しておく

```bash
$ ~/scripts/auto_commit.sh
[master abcd123] auto commit
 1 file changed, 0 insertions(+), 0 deletions(-)
[master efgh456] auto commit
 1 file changed, 0 insertions(+), 0 deletions(-)
```
Herokuが再度料金体系変更 - flexible free dyno hoursで月1000時間の無料枠（ただし全アプリ横断で）

Herokuの新料金体系が発表され、Free Dynoで1日6時間のsleepが強制されるようになってはや1年。
ここにきてfree dynoのプランにまた変更が入ったようです。

Herokuから届いた案内メールによると、[flexible free dyno hours](https://hello.heroku.com/e/36622/l-beta-and-flexible-dyno-hours/8h3499/544778402)という概念が導入され、月1000時間まで無料稼働枠が割り当てられるようです。

(2016.6.2追記)
結局1日18時間に減っていた無料枠すらもなくなり、全アプリで1000時間を分け合うことになるため、より無料プランの制限が厳しくなったというのが実情のようです。

注力したい（けどお金はかけたくない）アプリが1つだけの場合は、24時間稼働に戻せるのでよさそうですが、無料で色々アプリを動かしておくという用途だともうHerokuはきびしそうですね。。
（追記終わり）




##  flexible free dyno hoursの概要

- 各ユーザーは月1000時間のflexible free dyno hoursをもらえる（クレカ認証してないと550時間）
- free dyno hoursはアカウント単位で付与され、保有するアプリ横断で同じ枠を消費する

という感じで、以前とは違うものの、既存ユーザーにとってはHerokuの24h無料稼働が復活できそうな感じです。




## 感想
<del>
デフォルトの無料枠が18h/日なので、
24h稼働にするには6h×30日=180h/月必要。

アプリ横断で月1000時間ということは、
アプリ5つまでは毎月24h稼働できそうですね。
</del>

元の１日６時間sleepは完全になくなり、free dynoの稼働はすべてこの１０００時間を分け合うようになったみたいですね。
24h×30日=720h/月なので、２４時間稼働できるのは結局１アプリだけのようです。。

1000時間÷31日=32.2h/日なので、この1日32時間枠を複数のアプリで分け合うことになりますね。。

うちは現状主力アプリ１つ＋遊びアプリ1つだったので、
24h/日と8h/日という区分にしてみました。

主力の稼働時間を伸ばせたのはうれしいけど、1日8時間しか動かないとなるとさすがに時間指定できないので、process-schedulerとNewRelicのpingはあきらめて、アクセスあれば都度起きる形式しかないですね。。
Windows Subsystem for Linux の fork は速いのか

Windows10 で bash が動く！と話題になりましたね。
自宅の Windows にも Build 14352 のアップデートが掛かったので導入してみました。

概要については [Windows Subsystem for Linux Overview](https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/) の記事の画像がわかりやすいです。

## で、fork は速いのか遅いのか

互換性やエコシステムの充実度も大事なのですが、個人的な使い勝手としては一番ここが大きいかなと。

bash で `for i in {1..10000}; do date; done | uniq -c` を実行。
出力の1行目と最終行は除外し、秒間に何回 `date` を呼び出せるかをざっくり計測してみました。

| Platform \ Value            | mean | median | max | min |
|:---------------------------:|:-----:|:------:|:---:|:---:|
| Windows Subsystem for Linux | 38.35 | 37 |  46 | 35 |
| Cygwin                      | 94.65 | 95 | 104 | 93 |
| MSYS2                       | 94.95 | 95 |  98 | 92 |

Windows Subsystem for Linux 遅いですね。
あくまでプレビューなので常用を考えること自体がおかしな話ではありますが、しばらくは Cygwin/MSYS2 のお世話になりそうです。

### 計測環境

- CPU: Intel Core i5-3450 3.10 GHz
- Windows 10 Home Insider Preview (Build 14352.rs1_release.160522-1930)

### 計測条件

- Windows Defender の real-time protection をオフ
- Windows Search サービスを停止

下記をデフォルトインストール後に計測。

- Windows Subsystem for Linux (beta)
- Cygwin (2.5.1, x86_64)
- MSYS2 (20160205, x86_64)
ドットインストールでFlex box の勉強をしたときのメモ

Flexbox

#はじめに
友達にFlexboxはやっといた方がいいよと言われたので、[ドットインストールのFlexbox入門](http://dotinstall.com/lessons/basic_flexbox)で勉強しました。
そのときのメモです。

1. flex containerの設定(display: flex;)
2. flex boxがflex containerの子要素たちが設定される
3. flex-directionがデフォルトでrow方向（変更可能）に設定される。(rowに平行な方向をmian axis,垂直方向をcross axis)
4. flex itemはmain axisに沿って並べられる。


##プロパティ一覧
|flex container|flex item|
|:-------------|:---------|
|flex-direction|order|
|flex-flow|flex-grow|
|justify-content|flex-shrink|
|align-items|flex-bassis|
|align-content|align_self|


##flex container
###flex-direction
flex-direction: row;(デフォルト)
flex-direction: column;
flex-direction: row-reverse;逆順
flex-direction: column-revers;逆順
###flex-flow
flex-flow: nowrap;（デフォルト）折り返しなし
flex-floe: wrap;折り返し有り
flex-flow: warp-reverse;逆折り返し

flex-flowでflex-direction,flex-warpを空白区切りで両方選択可能

###fustify-content
justify-content: flex-start;（デフォルト）左揃え
justify-content: flex-end;右揃え
justify-content: center;中央揃え
justify-content: space-between;要素間の余白を均等化する
justify-content: space-around;要素数で均等に余白を作り、両端にも余白を作る
###align-items
align-items: flex-start;（デフォルト）cross-axis方向の上に揃える
align-items: flex-end:cross-axis方向の下に揃える

###align-content
align-content: flex-start;中身に合わせて大きさを揃え上に揃う、また、このほかにend,centerがあるが、fustify-contentに同じ

align-content: space-between;要素間の余白を均等にする
align-content: space-around;要素間の余白を均等にし、その後、両端に余白を設定する。

##flex item
###order
デフォルト値:0
大きいほどmain-axis方向に後に整列する
プログラムの配列番号と同じ感じ
###aline-self
デフォルト値:0
大きいほどcross-axis方向に後に整列する
プログラムの配列番号と同じ感じ
###1,flex-grow
要素を並べていって、余白ができた時にどの要素をどれだけ広げる
###2,flex-shrink
要素を並べていって、container よりあふれてしまった場合、どの要素をどれだけ縮めるかの指定
###3,flex-bassis
flex-grow、flex-shrinkの計算をする時に基準となる幅や高さ
####1,2,3はflex:で一気に指定
flex:flex-grow flex-shrink flex-bassis;
flex: 0 1 auto;（デフォルト）

###flexボックスだと簡単margin
margin: auto;（デフォルト）
margin-left: auto;要素の左側に余白を持ってくる
margin-right: auto;要素の右側に余白を持ってくる
margin-bottom: 要素の外側の下に余白を作成
###flexboxだと楽にカラムレイアウト
flex:1;
にするとうまく対応してくれる！

#最後に
こちらの講座はプレミアムの講座のため有料です。
僕は初心者なのでよくこちらのサイトで勉強させていただいています。
これからも使わせていただきます
RaspberryPi3 + 3.5 inch TouchPanel Display

話題のRaspberryPi3とタッチパネルを使って何かしたいと思いAmazonでポチった。
Amazonでポチって買ったのはいいけど、インストールしようとしている今家に居るわけでなく嫁の実家のある台湾にいる。しかも外付けキーボードなし、外付けディスプレイなしという環境下でRaspberryPi3の設定をするにはどうすればいいか調べてみた。

偉大な先人がタッチパネルに最適化したOSの公開をしてくれているらしい。
[リンクはここ](https://www.dropbox.com/s/2s02o4jgvnexdov/3.5inch%20RPi%20LCD.7z?dl=0)
DropBoxのハイパーリンクで、英語と中国語で使い方が書いてある。英語を見て理解できるけど、中国語でどんな訳され方をしているのか興味あって見てみた。

これをダンロードすると以下の様な構成になっている。
<img width="222" alt="スクリーンショット 2016-06-02 1.54.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/8433/1205f4b6-304c-68b2-0e6e-a4c60a7fcee1.png">
IMAGEフォルダのLCD35-160406.imgというやつをSDカードに書き込む！ほい

MacにSDカードを挿してからマウント先の確認
`  $diskutil list `

次にSDカードをFAT32でフォーマット。
以下はSDカードのマウント先が/dev/disk3という想定
` $ diskutil eraseDisk FAT32 RPI /dev/disk3 `
フォーマット後、SDカードをアンマウントします。(ddコマンドでの書き込みのため)
`$diskutil unmountDisk /dev/disk3`


`$sudo dd bs=1m if=LCD35-160406.img of=/dev/rdisk3`

書き込みが終わったらSDカードをセットする。
![IMG_0599.jpg](https://qiita-image-store.s3.amazonaws.com/0/8433/1997a247-f9d9-e30b-0766-eeb9baad7024.jpeg)

タッチパネルもセットする
![IMG_0601.jpg](https://qiita-image-store.s3.amazonaws.com/0/8433/9acd33c5-d1ba-60c5-37d8-3dd0f88407e4.jpeg)

電源を入れると白い画面が表示される。これね。
![IMG_0602.jpg](https://qiita-image-store.s3.amazonaws.com/0/8433/7faa146e-56f4-e5e1-a434-668b1d9eca94.jpeg)

起動処理のログが見て取れた後
![IMG_0603.jpg](https://qiita-image-store.s3.amazonaws.com/0/8433/48a3e6b1-b718-28cc-7dee-d290bb8b301d.jpeg)

X Windowが起動される様になっている。
![IMG_0604.jpg](https://qiita-image-store.s3.amazonaws.com/0/8433/35ab6829-27d2-fd9e-49cf-78e1178c39e8.jpeg)

ユーザー名とパスワードはpi/raspberryがセットされているよ。

これで、Wifiの設定をしてあげると、キーボードもない。モニターもない人間でも素のRaspberryPi3にアクセスできるようになる。

後は健闘を祈る。って感じ。自分ではIoTとかの使いみち考えているんだけどね〜。
ufo -> python

#UfoCatch -> python

UfoCatchを参考にXBRLにアクセスしてみる
使い勝手はUfoCatchに近づけたい

http://tecaweb.net/archives/290/ufocatch_2_0_3

取得元
TDNET→有価証券報告書
EDINET→決算短信・コーポレートガバナンス報告書（インスタンスのみ？）

ある銘柄のEDINET上の有報の一覧を取得する
→UCXEdinetXBRLInstance(code)

決算情報の取得（サンプルシート）
→UCXEdinetXBRLInstanceLatestASR(code,close_date)
xbrlのurlに含まれる文字列と年度期間一致する有価証券報告書のurlを取得する
→UCXFact(url,elementName,baseDate,[periodStart],[consolidated],[namespace])

要素が単年度・連結の値かはcontextRefのConsolidated..で判断

xbrlの細かいところは本を読んでもさっぱり覚わらなかったため、
年度の有価証券報告書に絞って必要な部分のみ都度確認。
→インターネット財務情報システム―XML技術とXBRLデータ標準を用いた

日置電機株式会社(code:6866)の2009年‐第58期-有価証券報告書
http://resource.ufocatch.com/xbrl/edinet/ED2010030100130/S0005ASQ/jpfr-asr-E01999-000-2009-12-31-01-2010-03-01.xbrl

##xbrl有価証券報告書

```
-Root:<xbrli:xbrl>
-1:<link:.../>
-1:<xbrli:context id=..>..</xbrli:context>
-1:<xbrli:unit id=..>...</xbrli:unit>
-1:<jpfr-t-cte:.. unitRef=.. contextRef=.. ..>..</jpfr-t-cte>
-1:<link:footnoteLink ..>..</link:footnotelink>
-</xbrli:xbrl>
```

下記記事を参考に作りを確認
http://www.primal-inc.com/column/2009/11/03-000045.php?page=1

要素の一覧はUfoCatchの参考_決算短信等科目リストシートを確認
売上高 -> NetSales
株主資本比率 -> shareholdersequity

この報告書だけで195の誤謬が使用されているが、UfoCatchのリストにないものも多い。大した手間でもなさそうなので必要があれば誤謬の逆引きも出来れば。

finance(codelst,entrylst) -> DataFrame(columns=enrylst,index=codelist)

のように年度の報告書からデータを取ってこれれば楽

##追記（6/19）

データの抽出が上手くいかなかったため、ufo-catchの内容そのままにした

```
Get facts()...
  If (node.baseName <> "schemaRef" And _
    node.baseName <> "context" And _
    node.baseName <> "unit" And _
    node.baseName <> "footnoteLink") Then
```
Rails column名を変更

モデルを作った時にcolumn名を間違えてしまった。
published なのに publishd にしてしまった.


#変更方法

```
$ rails g migration rename_publishd_column_to_books 
```

実行後 

```
Running via Spring preloader in process 50041
        invoke  active_record
        create    db/migrate/20160601171818_rename_publishd_column_to_books.rb
```
こんな感じのができるので

20160601171818_rename_publishd_column_to_books.rb を開いて

```ruby:20160601171818_rename_publishd_column_to_books.rb
class RenamePublishdColumnToBooks < ActiveRecord::Migration
  def change
    rename_column :books, :publishd, :published
  end
end
```

のように
``` rename_column :books, :元の名前, :変えたい名前 ```
を追記

```
$ rails db:migrate
```

を実行すれば変更ができる。
github organizationについて調べてみた


## 概要
アカウントの追加/削除や、レポジトリの取り扱いなど、ちょっと調査が必要になったので利用、運用する際に必要そうな情報を軽くまとめてみました。

## Repositoryのcreateについて
不許可にすれば、memberがレポジトリを作成することは出来なくなるみたいです。
もちろん、Organizationに未加入のコラボレーターは作成不許可です。

Repository creation
Allowing your organization’s members to create repositories lets them share and work on projects more openly. If enabled, members will be able to create public and private repositories

Allow members to create repositories for this organization
Save

Outside collaborators can never create repositories.


## Default Permissionについて
Organizationに参加するメンバーのDefaultのpermissionとして、Admin/Write/Read/None4つが選択出来ます。
追加時のDefaultの設定なので、ここをWriteにしてinvitationを送る必要があると思います。
- Admin
Members will be able to clone, pull, push, and add new collaborators to all repositories.
- Write
Members will be able to clone, pull, and push all repositories.
- Read
Members will be able to clone and pull all repositories.
- None
Members will only be able to clone and pull public repositories. To give a member additional access, you’ll need to add them to teams or make them collaborators on individual repositories.

The default repository permission only applies to organization members, not to outside collaborators.

## Profileの公開範囲
ProfileのOrganization内だけの公開も出来る様です。
Membership private / public

## アカウントのOrganizationからの削除
OwnerであればMembreのremoveも可能でした。

## アカウントのOrganizationへの参加
OrganizationのTopページからInviteします。基本的には、メールなど連絡を受けてコラボレーターとしてOrganizationに追加する、という形になるのかなと思います。
attention model memo

```math
\begin{eqnarray}
\tilde{{\bf h}}_t &=& \mbox{tanh}({\bf W}_c[{\bf c}_t;{\bf h}_t] ) \\
 &=& \mbox{tanh}\left({\bf W}_c ( {\bf c}_t \oplus {\bf h}_t)\right)

\end{eqnarray}
```

```math
p(y_t|y<t, x) = \mbox{softmax}({\bf W}_s \tilde{{\bf h}_t})
```

context vector

```math
\begin{eqnarray}
{\bf c}_t &=& \sum_{s} a_t(s) {\bf h}_s \\
\end{eqnarray}
```
emacsのフォントサイズを変更する

windows上の[emacsのフォントの設定](http://qiita.com/styzo/items/f9d9db9d1455efd24dbe)はなんとかできたので、次はfirefoxなどのwebブラウザで`Ctrl-+`, `Ctrl--`でフォントサイズを変更するように、emacsでも簡単にフォントサイズを変更したい。

```elisp
(defun font0 (size)
  (interactive "P")
  (if (not size)
      (setq size 12))	    ;デフォルトのサイズ
   (set-frame-font (font-spec :size (* size 1.0))) ;整数:pixels 実数:points
  )
(defun font10 () (interactive) (font0 10)) ;13
(defun font11 () (interactive) (font0 11)) ;14
(defun font12 () (interactive) (font0 12)) ;16
(defun font13 () (interactive) (font0 13))
(defun font14 () (interactive) (font0 14)) ;18
(defun font15 () (interactive) (font0 15))
(defun font16 () (interactive) (font0 16)) ;21
(defun font18 () (interactive) (font0 18)) ;24
(defun font20 () (interactive) (font0 20))
(defun font22 () (interactive) (font0 22))
(defun font24 () (interactive) (font0 24))
```
とりあえず一つずつ関数を作って使っていた。

`C-x C-0`, `C-x C-=`, `C-x C--`, `C-x C-+` (`text-scale-decrease`)を使うとバッファごとのフォントサイズは変更できる。しかし、バッファ単位ではなくフレーム単位で変更したいので試行錯誤した。

```el
(defun font+ ()
  (interactive)
  (set-frame-font
   (font-spec :size (+ (* (default-font-height) .6428571428) 1))))
(defun font- ()
  (interactive)
  (set-frame-font
   (font-spec :size (- (* (default-font-height) .6428571428) 1))))

(global-set-key (kbd "C-c C-=") 'font+)
(global-set-key (kbd "C-C C--") 'font-)
```
このようにしたら`C-cC-=`, `C-cC--`で拡大、縮小できた。
フォントサイズが72のとき`(default-font-height)`が112だったので、比率が.6428571428。
しかし、これと`C-x C-0`, `C-x C-=`, `C-x C--`, `C-x C-+` (`text-scale-decrease`)を同時に使うとおかしくなる。

バッファ単位の拡大は使わないので問題ないが、何かいい方法はありますか。
ありました。[zoom-frm.el](http://www.emacswiki.org/zoom-frm.el) 10年前から。
zshで引数付きのrake taskを実行する

最近やっとbashからzshに乗り換えたのですがいつものようにrake taskを実行しようとすると

```sh
bundle exec rake hoge:foo[bar]
zsh: no matches found: hoge:foo[bar]
```
こうなってエラーになってしまいました。
解決法は単純で
```
bundle exec rake hoge:foo\[bar\]
```
[をエスケープするか
```
bundle exec rake 'hoge:foo[bar]'
```
でシングルクォーテーションで囲む必要があるんですね。
bashだとそのまま実行できたので知りませんでした。
Vintageコマンドモード中のみ使えた「_」型のカーソルをいつでもどこでも使用できるようにする


# 誰向け
Vintageコマンドモード中のみ出てくる「＿」な形のカーソルをVintageパッケージ無効でも常に使いたいと思った人むけ

# 隠しパラメータ的な

デフォルトのPreference.sublime-settingsには特に記述は無いのですが、
実はUserのPreferenceに以下の設定を入れるときちんと効果が発揮されます。

```json
{
    "inverse_caret_state":false
}
```

上記設定を組み込むと、SublimeText内のどの場面においても（クイックパネルや検索窓であっても）「＿」型のカーソルが使われるようになります。
ちなみに、

```json
{
    "caret_extra_width": 2
}
```

とかいれると横じゃなくて**縦に**伸びます。
基準が「｜」だと考えればまあ納得できる（？）挙動のようなそうでもないような

# 一応の注意

Vintageパッケージ有効の状態でどういう挙動になるかチェックしてませんので、
おかしな事になったら残念でしたということで…
一応、Vintageパッケージのコマンドモードのみ有効になるような設定だったようなので、
他のパッケージやらSublime自体の基本機能とぶつかる可能性も否定できません。
使用後しばらくして何かカーソル周りで問題が出たらこの設定について気を配ってみてください。
作業効率を格段に向上させるポモドーロテクニックについて

# はじめに

Rebuild.fmでポモドーロテクニックを紹介していたので、生産性を上げるためにポモドーロに挑戦してみました。
1ヶ月弱試してみた結果非常に効果が感じられたので、ポモドーロについてまとめておきます。
作業の生産性を上げたい、集中力が持続しないと思っている人は是非チャレンジしてみてください。
大袈裟かもしれませんが、個人的には1.2~1.5倍くらい生産性を上げることができたのではないかと感じています。

# ポモドーロテクニックとは
TODOリストを作成し、TODOリストの各項目に対して25分の作業と5分の休憩を繰り返して消化します。
ポモドーロテクニックでは25分の作業を1つの単位として、1ポモドーロと呼びます。
25分の作業中は対象のタスクのみに集中してベストを尽くす必要があります。
5分の休憩時間は次のポモドーロ中に最高のパフォーマンスを出すために頭をゆっくり休めなければなりません。

## ポモドーロに必要なアイテムは4つ
ポモドーロに使うアイテムとその使い方を簡単に説明します。

### ①タイマー
下記時間を計るタイマーです。
タイマーが切れた時にすぐに気づける物が良いです。
- 集中時間25分
- 休憩5分
- 4回程度のポモドーロを終えた後は15分の休憩

### ②アクティビティー在庫シート
TODOのマスターシート。いつかやりたいことや、やらなければなら無いことを箇条書きしておきます。このシートに書くことは以下の通りです。
- 作業完了時の状態(タスク名)
- 作業見積もり量(ポモドーロ数)
- 期限
- 作業優先度

### ③今日のTODOシート
朝一でアクティビティー在庫シートから本日行う作業のみを選択してTODOシートに書き込みます。1ポモドーロ終えるごとに実作業量をカウントアップさせていきます。
- 作業完了時の状態
- 作業見積もり量
- 実作業量
- 割り込みタスク数

### ④レコーディングシート
1日の作業を振り返ってポモドーロの質を改善するための素材をレコーディングしていきます。以下に挙げたもの以外にも作業の質改善に通じるものがあれば記録します。
- 1日の総ポモドーロ数
- 1日のMTG数(１日の作業量見積り精度をあげるため)

## ポモドーロテクニックに使えるツール

ポモドーロテクニックはタイマーと紙とペンだけあればできるものですが、
アナログ管理がなんとなく嫌いな僕は以下のツールを使ってポモドーロを実践しています。

①タイマー、③今日のTODOシート、④レコーディングシートを
「Pomodoro Time」というアプリで管理しています。
https://itunes.apple.com/jp/app/pomodoro-time-pomodoro-tekunikku/id973134470?mt=12

②アクティビティー在庫シートは「Remember The Milk」で管理しています。
https://www.rememberthemilk.com/

朝出社後当日の予定を確認して作業可能なポモドーロ数を出します。
本日こなせるだけのタスクを「Remember The Milk」から選んで「Pomodoro Time」にコピーして、
あとは黙々とタスクを熟していきます。

## ポモドーロをやって良かった4つのこと

### 生産性を上げるために何ができるかを日々考えるようになる
集中力を切らせる要因を断とうという意識が高まり、メールやチャットを見る時間を制限したりするようになりました。25分間チャットを見ないと困ったことになるということは基本的にないと思うので、メンションがとんでくる時以外は、基本的にチャットのウインドウは最小化しています。当然ですがTwitterやFacebookを見ることは滅多なことがない限り無いと思います笑
人によってはチャットを常に見ている必要がある方もいると思うので、そういう方はチームメイトの協力が必要になりますね。

### 作業時間は案外少ないことがわかり作業時間を大切にするになる
僕の場合業務時間がAM10時~PM7時で大抵2時間程度残業しているので、出勤時間が660分になります。
ある日MTGが合計90分程度しかなかったので、ポモドーロテクニックを使ってがっつり作業をしていたのですが、
結果集中して作業できたのはわずか350分(14ポモドーロ)でした。
１日の作業時間は思っている以上に少ないので、
ＭＴＧの間の時間の30分も大切にするようになりました。

### 作業の見積り精度が上がる
今までは作業の見積もりを1日、半日という単位で見積りしていたのですが、
ポモドーロをはじめてからは、1ポモドーロという短い単位での作業見積りと振り返りを行うようになり見積り精度が上が格段に上がりました。
また、作業の予定を立てるときも細かい粒度まで決めるようになるので、より計画的に仕事を進められるようになりました。

### 集中力がつく
ポモドーロをしていると集中して作業を行うことを意識している場合と、そうで無い場合の生産性が全く違うことにも気付きます。
作業中はとにかく集中しようと思うようになるので、自然と集中力がつきます。

## 最後に
ポモドーロをしはじめて１日１日が濃く感じるようになり、帰宅後はどっと疲れが押し寄せるのですが、それでも成果は上がっているので気持ちよく日々を過ごせています。個人的には非常におすすめなので、興味を持った方はぜひ実践してみてください！
Unity初心者がDaydreamのサンプルを試すまで　※Mac

とても苦労した
誰か記事書いてくれよ〜

#〜〜〜〜下準備〜〜〜〜〜〜
###①とりあえずUnityを[ダウンロード](http://unity3d.com/jp/get-unity/download?ref=personal)

###②Android-SDKを[ダウンロード](https://developer.android.com/studio/index.html#downloads)
![スクリーンショット_2016-06-01_23_10_03.png](https://qiita-image-store.s3.amazonaws.com/0/9256/7cdc816f-423d-ee12-eb52-a4cbc56ae312.png)

###③Unityをインストール
<img width="603" alt="スクリーンショット_2016-06-01_23_49_13.png" src="https://qiita-image-store.s3.amazonaws.com/0/9256/b736bece-14de-59fe-02ba-b1a99d2c8c39.png">

Androidなのでこのチェックは必須

###④サンプルプロジェクト？を[ダウンロード](https://github.com/googlevr/gvr-unity-sdk.git)しておく

###⑤適当にAndroidにコントローラーアプリを入れておく
 [ここから](https://developers.google.com/vr/concepts/dev-kit-setup#set_up_the_controller_phone)
![スクリーンショット_2016-06-02_0_27_46.png](https://qiita-image-store.s3.amazonaws.com/0/9256/be57e686-ade0-ea93-2c6b-c78ccf9295be.png)
このリンクをAndroidから踏めばAPK手に入るのでそのままインストール
USBデバックなってなければUSBデバックオンに

#〜〜〜〜〜〜プロジェクト〜〜〜〜〜
###①空の３Dプロジェクト作成
<img width="1010" alt="スクリーンショット_2016-06-01_23_51_44.png" src="https://qiita-image-store.s3.amazonaws.com/0/9256/d2d8af27-e4b2-4819-a565-e88b18ec182e.png">
　Unityを起動して「New」をクリック
<img width="1002" alt="スクリーンショット_2016-06-01_23_52_06.png" src="https://qiita-image-store.s3.amazonaws.com/0/9256/5939e872-2f9c-ec5c-3fc5-03cf04f4f27d.png">
適当にプロジェクト名を付けて作成

###②googleVRSDKのインポート
 Asset→ImportPackage→CustomPackage...から下準備で用意したサンプルの「GoogleVRForUnity.unitypackage」を選択
<img width="571" alt="スクリーンショット 2016-06-01 23.58.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/9256/e56db943-bb73-2b78-2993-4ec556ecfff9.png">
<img width="354" alt="スクリーンショット 2016-06-02 0.02.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/9256/34f0a05a-29c6-f48e-60bd-ad28b0bf076e.png">
こんなのが立ち上がるの「import」クリック

###③サンプルっぽいやつダブクリ
<img width="1652" alt="スクリーンショット_2016-06-02_0_11_13.png" src="https://qiita-image-store.s3.amazonaws.com/0/9256/16b401e8-e7b6-bac2-d77b-a71bfda64f7a.png">

###④再生
　コントローラー起動したAndroidUSBで繋いで再生ボタンで再生すればとりあえず起動して、コントローラーとは動きつながった！
<img width="972" alt="スクリーンショット 2016-06-02 0.43.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/9256/45667cab-98ee-a5b4-ee73-2497b456c848.png">

**コントローラーで箱指して、コントローラータップでホールどとか出来る！！！！笑**

[moguravrさんの記事](http://www.moguravr.com/daydream-dev-tips/)を読んで興味持ったんですが、この記事の限りだとコントローラーはwifi接続もいけるらしい。

この記事の限りだとUnity Remoteで他端末でも試せるらしいので手持ちの6sで実行できるように次はためそう。
じゃないと目にはめれないからVRを感じない。。。。。

**明日Googlecardboardに対応してるなんか買おう**
CrystalでREPLを実現するcrystal-icrの紹介

CrystalではREPLが提供されていませんでしたが、これを実現するcrystal-icrというものがあるようです。

 * https://github.com/greyblake/crystal-icr

`icr`コマンドを実行すると以下のようにプロンプトが表示されます。

```shell-session
% icr
icr(0.17.3) > 1 + 2 + 3
 => 6
```

適当にコードを入力して`ENTER`を押すと、それまでに入力したコードからバイナリが生成され、実行されるという仕組みのようです。ちょっとした動作確認には便利ですね。

MacOS環境からは、homebrewで以下のようにtapからインストールできます。

```shell-session
% brew tap genki/core
% brew install crystal-icr
```
C++とは異なる、JavaScriptのローカル変数のスコープ

JavaScriptではローカル変数のスコープの仕組みがC++やJavaの感覚とは違うようなのでメモ。

#if文やfor文にブロックスコープは無い

ブロックの外側からでも内側の変数にアクセスできる。

```js:ブロックの外側からアクセスできる
for(var i=0; i<10; i++){
    var hoge = 1234;
}

document.write(hoge);    //表示:1234
```

if文やfor文だけではなく、関数以外の他の{}で囲まれたブロックにも同じことが言える。

#変数宣言より前でも扱える

ローカル変数はその関数内の全ての場所で有効になる。

もし関数の真ん中で変数宣言をしていても
関数の先頭からその変数にアクセスできる。

```js
function test(){

    i = 10;

    var i;

    document.write(i);    //表示:10
}
```

関数内で行われた変数の宣言は
全て関数の先頭に移動させられるといった感じ。

```js:これが
function test(){

    document.write("Hello World !!");

    var xx = 1234;
    var yy = 555;

    for(var i=0; i<10; i++){
        var sum = xx+yy+i;
    }
}
```

```js:こうなる感じ
function test(){
    var xx;
    var yy;
    var i;
    var sum;

    document.write("Hello World !!");

    xx = 1234;
    yy = 555;

    for(i=0; i<10; i++){
        sum = xx+yy+i;
    }
}
```
ActionController::UrlGenerationError in Devise::SessionsController#create と言われました。

普段ログインできていたDeviseのログインフォームでログインできなくなりました＼(^o^)／

# ログインしようとしたらエラーが
`/users/sign_in` からログインしようとしたらエラーがでました。

```rb:controllersにshowが無いというエラー
ActionController::UrlGenerationError in Devise::SessionsController#create
No route matches {:action=>"show", :controller=>"controllers"} missing required keys: [:id]

Extracted source (around line #46):
        message << " missing required keys: #{missing_keys.sort.inspect}" unless missing_keys.empty?

        raise ActionController::UrlGenerationError, message
      end

      def clear
```
controllers_controllerってなんだ・・？

# git statusで差分を確認
想定しないファイルができていないか`git status`で確認します。

```git:
git status

	modified:   app/assets/stylesheets/scaffolds.scss
	modified:   config/routes.rb
	modified:   db/schema.rb

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	app/assets/javascripts/controllers.coffee
	app/assets/stylesheets/controllers.scss
	app/controllers/controllers_controller.rb
	app/helpers/controllers_helper.rb
	app/models/controller.rb
	app/views/controllers/
	db/migrate/20160524013554_create_controllers.rb
	test/controllers/controllers_controller_test.rb
	test/fixtures/controllers.yml
	test/models/controller_test.rb

```
ん？？この`controllers`なんとかというファイルはなんだろう？？？作った記憶がない・・＼(^o^)／

ふと思い出したら、generateコマンドをtypoして生成されたcontrollersというコントローラを消していなかったようです。

# 不要なgenerateファイルをdelete
controllersというファイルを消します。

```
bundle exec rails d controller controllers
Running via Spring preloader in process 4502
      remove  app/controllers/controllers_controller.rb
      invoke  erb
      remove    app/views/controllers
      invoke  test_unit
      remove    test/controllers/controllers_controller_test.rb
      invoke  helper
      remove    app/helpers/controllers_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      remove      app/assets/javascripts/controllers.coffee
      invoke    scss
      remove      app/assets/stylesheets/controllers.scss
```
ほかにも、routes.rbなどからmodifiedした内容を削除しました。

# エラーが消えた
`rails s` したところ今度は、`/users/sign_in` からログインできるようになりました。

# 参考
http://stackoverflow.com/questions/25185621/actioncontrollerurlgenerationerror-in-devisesessionscontrollercreate-tryi
optional型とは

##optional型とは

objcからswiftに変えた時に出てくるoptional型。
これは一言で言うとnilが入る型の事

##実際に試して見る
以下、playgroundでどうぞ

```
var a:Int
a = nil //エラー
```

普通のIntにnilが入るとエラーになります。

ここでnilを使いたい場合、またはnilが入る可能性がある場合にoptional型を使います。

```
var a:Int?
a = nil //OK
```

使い方は変数型の後にoptional型と宣言するための?を付けるだけです。

このオプショナル型のIntはノーマルIntと異なるので

```
var a:Int?
var b:Int
a + b //できない
```

上のような事はできません。
これはそれぞれ型が異なるからです。

##Optional型を普通の型に戻すには？
先ほどのようにOptional型と普通の型は同じように使えませんでした。
そのためOptional型を外す必要があります。
これがアンラップ(unwrap)になります。

アンラップのやり方
簡単なアンラップのやり方はoptional型の後ろに!をつけます。
これをForced Unwrappingと言います。

```
var a:Int?
var b:Int
a! + b
```

これだけで使えるようになります。
しかし、これではaにnilが入っている状態なのでエラーになってしまいます。
swiftで型を厳密にしているメリットがなくなってしまいます。
なのでこれはnilがない状態でしか使わないようにしましょう。

そこで、nilでない場合に処理を実行してnilの場合はnil用の処理にするようにします。
これがoptional bindingになります。
オプショナルバインディングはif文を使用します。

```
var a:Int?
a = 10
var b:Int = 10
if let opA = a {
    opA + b
} else {
    print("nilです")
}
```

これならnilの場合にもエラーにならず、nil用の処理になるので安全です。
Bashにアラーム機能を搭載する

※下記の記事で、改良版を紹介しています。
[Bashにアラーム機能を搭載する（改）
](http://qiita.com/acro5piano/items/12c829da344464134f37)

作業に没頭していると予定を忘れやすいので、予定時刻になったらターミナル上にメッセージを割り込ませるアラームを作った。

```sh
# この関数を~/.bash_aliasesなどに書いておく
alarm(){
    echo "echo $1 | cowsay | wall" | at $2
}
```

利用方法はこんな感じ

```sh

# アラームをセット
alarm 'The meeting with my boss will start in 10 minutes' 9:50
# => job 22 at Thu Jun  1 9:50:00 2016

# アラーム一覧
atq
# => 22 Thu Jun 1 9:50:00 2016 a k-gosho

# JobIDを指定してアラームを削除
at -d 22
```

なお、導入には`at`と`cowsay`コマンドが必要。

時間になるとこんな感じのメッセージがターミナルに表示される。ちなみにこれはVimで作業している状態。

![image](https://qiita-image-store.s3.amazonaws.com/0/103885/6ef9bce0-61d9-93b3-b796-6f0a717601e8.png)

さすがにこれで忘れることはない。
CrystalのCase+Tupleでマッチング

CrystalのCase文はTupleを使ってマッチングすることができます。

## <i class="fa fa-flask" style="font-size:1em;"></i> サンプル
FizzBuzzと奇数偶数の組み合わせを判別する処理を書いてみました

### <i class="fa fa-code" style="font-size:1em;"></i> コード

```ruby
ret1 = (1..15).map do |i|
  case {i % 3 == 0, i % 5 == 0}
  when {true, true} then "FizzBuzz"
  when {true, _} then "Fizz"
  when {_, true} then "Buzz"
  else i
  end
end

pp ret1

def random1to5
  rand(1..5)
end

before = [[1, 2], [2, 2], [3, 3], [random1to5, random1to5], [random1to5, random1to5], [random1to5, random1to5]]

after = before.map do |(x, y)|
  case {x, y}
  when {.odd?, .odd?} then "Double odd"
  when {.even?, .even?} then "Double even"
  else "mix"
  end
end

pp before
pp after
```

### <i class="fa fa-play-circle" style="font-size:1em;"></i> 実行結果

```
ret1 = [1, 2, "Fizz", 4, "Buzz", "Fizz", 7, 8, "Fizz", "Buzz", 11, "Fizz", 13, 14, "FizzBuzz"]
before = [[1, 2], [2, 2], [3, 3], [3, 2], [4, 5], [2, 2]]
after = ["mix", "Double even", "Double odd", "mix", "mix", "Double even"]
```

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [Crystal 0.13.0 released!](http://crystal-lang.org/2016/03/07/crystal-0.13.0-released.html)
* <i class="fa fa-external-link" style="font-size:1em;"></i> [Tuple literal - case - crystal-lang.org](http://crystal-lang.org/docs/syntax_and_semantics/case.html)
Crystalのマクロのドキュメント

Crystalのマクロのドキュメントは、マクロを評価した後の状態でドキュメントを出力してくれます。
参考として以下のページのサンプルコードのドキュメントを `crystal docs` コマンドで出力してみました。

[Crystalのマクロでメタプロする - tbpgr - GitHub](http://qiita.com/tbpgr/items/4c346e1c0899aabfba52)

```crystal
module Vim
  class Mover
    include Direction::Dsl
    move :k, :↑
    move :j, :↓
    move :l, :→
    move :h, :←
  end
end
```

## <i class="fa fa-file-text" style="font-size:1em;"></i> 出力ドキュメント
move macro によって生成された `j` , `k` , `l` , `h` メソッドがドキュメント化されています。

![sample_doc.png](https://qiita-image-store.s3.amazonaws.com/0/43480/904ccf95-faad-3215-3aaf-0793757b4bfe.png)

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [Crystalのマクロでメタプロする - tbpgr - GitHub](http://qiita.com/tbpgr/items/4c346e1c0899aabfba52)
さくらのIoT通信モジュールのUARTの使い方

[SakuraのIoT Platform α](https://iot.sakura.ad.jp)の通信モジュールのUARTを使う方法が今の所どこにも情報が無くちょっぴり苦戦したのでメモしておきます。(2016/6/1現在)

<img width="507" alt="スクリーンショット_2016_06_01_23_36.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/14768/5ccc096c-8048-1d47-0f99-bbcdfb3ab0fd.jpeg">


#通信設定

115200bps,8bit,パリティ無し

#使い方

上記設定で接続し、電源を入れるとプロンプトが出る
(￣◇￣;)←9600bpsと思い込んで正しい通信速度を見つけるのに時間がかかった

```
Sakura IoT Alpha (201505311020-78e19f6c)
>
```

ここでおもむろにhelpと打つとヘルプが出る。
(￣◇￣;)←気づくまでかなり時間がかかった

```
>help
version                      show firmware version
reset                        software reset
netstat                      show network status (online|offline)
settx <ch> <type> <value>    set transmit channel data
                              <ch> 0-127
                              <type> i,I,l,L,f,d,b
                              <value> 12345,0.1234,08090a0b0c0d0e0f
gettx <ch>                   get transmit channel data
getrx <ch>                   get reveived channel data
settxmode <mode>             set transmit mode
                              <mode> 0:None 1:Auto 2:Once
```

コマンドでモジュールがオンラインなのを確認

```
>netstat
online.
```

そこでデータを送信

```
>settx 0 i 1234
>settx 0 i 1235
>settx 0 i 1236
```

ｷﾀ━━━━(ﾟ∀ﾟ)━━━━!!

<img width="422" alt="さくらのIoT_Platform.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/14768/ce849552-6abc-c158-5cf4-a42962621c2e.jpeg">

いや、これ簡単です！しかもほぼリアルタイム。

# ごにょごにょ

仕事場にはarduinoが無かったので、UARTで試して見ようと思い立ち、I2CでもSPIでもシリアルでもコマンドが同じと聞いていたため[github](https://github.com/sakura-internet/SakuraAlphaArduino)を参考にいろいろコマンドを送り込んだのですが反応せず...。

家に帰ってふと思い立ち、家庭に常備してあるUSB-TTLシリアルコンバーターケーブル(3.3v)を直結してみると結果的にはすごく簡単だったのでした。これにシリアルを使うのは非力なデバイスのIoTには勿体無いですが、動作確認やPCを使う場合などには便利かと思います。
Crystalのコマンドが完全一致で入力しなくても実行されるので中を見た

CrystalのCLIを使う際に、コマンドを最後まで入力していないが、
問題なく実行されていたため中身が気になりました。
例えば

```bash
$ crystal docs
```

は

```bash
$ crystal doc
```

でも実行できます。


中をみてみます。

## <i class="fa fa-code" style="font-size:1em;"></i> Crystalの中身
※該当箇所を抜粋

```rb
    if command
      case
      when "init".starts_with?(command)
        options.shift
        init
      when "build".starts_with?(command)
        options.shift
        build
      when "play".starts_with?(command)
        options.shift
        playground
      when "deps".starts_with?(command)
        options.shift
        deps
      when "docs".starts_with?(command)
        options.shift
        docs
      when command == "env"
        options.shift
        env
      when command == "eval"
        options.shift
        eval
      when "run".starts_with?(command)
        options.shift
        run_command(single_file: false)
      when "spec/".starts_with?(command)
        options.shift
        run_specs
      when "tool".starts_with?(command)
        options.shift
        tool
      when "help".starts_with?(command), "--help" == command, "-h" == command
        puts USAGE
        exit
      when "version".starts_with?(command), "--version" == command, "-v" == command
        puts Crystal::Config.description
        exit
      else
        if File.file?(command)
          run_command(single_file: true)
        else
          error "unknown command: #{command}"
        end
      end
    else
      puts USAGE
      exit
    end
```

[String#starts_with?](http://crystal-lang.org/api/String.html#starts_with%3F%28str%3AString%29-instance-method) で実現していました。

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [command.cr - crystal-lang/crystal - GitHub](https://github.com/crystal-lang/crystal/blob/master/src/compiler/crystal/command.cr)
「彼女ゼロ頻度問題」への対策法

# 彼女ゼロ頻度問題とは？
機械学習、とくに自然言語処理においてはゼロ頻度問題という課題が生じることがある。

例えば単語の種類数に比して、それが使われる文や文章のデータサンプルが少ないため、単語単体であればなんとかなるが単語と単語が共起する例となると一気にサンプル数が足りなくなりうまく学習ができない、といったケースが挙げられる。

これは機械学習を学ぶ理系男子諸氏の恋愛局面にも起こりうる話である。恋愛関係とはテキストの表層的な共起に対比して深層的な格関係に相当し、それは表層的な共起から生じる。

そうした出会いスパースネス問題及び彼女ゼロ頻度問題について、機械学習の視点から考えてみたい。

## ラプラススムージング
ラプラススムージングとは、出現回数を問答無用に+1する方法である。これは表層的な共起の観点では、どんな女性とも一度は出会ったことがあるってことにする、という意味になる。あらゆる初体験を、初体験ではないことにしてしまう、という解釈も可能である。

これにより、オーバーフィットを避けることができる。例えば、女は無限にいると最初から知っていることになるので、出会った女性に一目惚れしちゃって追いかけ回すようなことがなくなるだろう。

## 正則化やベイズ推定
ゼロ頻度問題は、過学習回避の枠組みに含めて考えることができるので、その知見も使いたいところだ。データから学びつつ寄せすぎないテクニックとして機械学習ではベイズ推定や正則化というのがある。

ベイズ推定なら事前分布という出会いや交際を得る前の段階である程度の適応性を担保しておくという意味であり、正則化は出会いや交際とは別の価値を並行して高めようとするような意味になる。

事前分布を高めるというのは、出会いや交際とか以前に、ファッションや身だしなみを整えることに相当するといえる。また、正則化を行うことは出会いや交際以外に趣味を持つ、恋愛以外のリア充要素も追求してみることに相当するだろう。

## 最大エントロピー法
ベイズ推定において、事前分布の決め方は恣意的である。つまり、ファッションを磨けばいいのか、リア充な趣味をもてばいいのかについて決める指針はユーザに委ねられており、そこも機械学習に決めてほしいという要望は当然あるだろう。

そこで最大エントロピー法というのがある。この方法は、出会いや交際に有効に効きそうに思える要素を自由に考案してそれを指針にするさいにどの要素が重要かを自動的に判断できるという手法である。

彼女ゼロ頻度では、とにかくサンプル数が貴重なので、1回の経験から得られる知見を慎重に合理的に活かして次へ行かないといけない。最大エントロピー法は、そうした少ない経験から得られる知見を過大評価しすぎず、過小評価しすぎず、冷静に見つめることが出来る方法でもある。

まずとにかくモテにつながりそうな要素（つがらなそうな要素を避ける、という観点もアリ）を列挙し、そのうちいずれかの要素にまずは取り組んで満たしてみよう。満たした要素は1、満たしてない要素は0だ。そうして実際に行動して女性とコミュニケーションを取ってみる。めでたく交際にいたったら交際を続けてみる。交流している間のコミュニケーションの取り方も要素としてカウントしてよい。満たせば1、満たさなければ0だ。

そうして最終的に振られてしまった時の振り返り手段として、満たしていた要素がどれだけ重要だったかを最大エントロピー法の計算によって求める。

女性は千差万別なので、ある女性にとっては意味のある要素でも、別の女性には意味のない要素だということも少なくない。最大エントロピー法は、様々な女性に共通に効く要素については重みを大きく、女性によりけりな要素は重みを小さく、そして要素どうしの組み合わせについても丁度良いバランスになるようにうまく指針をあたえてくれる。

## 潜在変数（次元圧縮）を使う
機械学習では潜在変数を使うことで、頻度ゼロでもマッチさせることが出来るようになる、というテクニックがよく使われる。上で述べたベイズ推定や最大エントロピー法も広い意味ではそうした手法に該当するが、そうした潜在変数を直接使って出会いや交際を求める方法もある。

これはいうなれば、女性の友達が多い人と交流したり、女性が多い場に出向いたり、お見合い仲介人に紹介をお願いするような手だ。そうした潜在変数となる人や場の数は少ないが、それゆえにハブとなり多くの女性との接点が見込める。そうした人や場は汎化能力が高く、ふさわしい人をマッチングしてくれるだろう。

そんな低次元な出会いは嫌だと言ってはいけない。いつも君は低次元を求めているのに、何をいまさら、という感じだ。

## 終わりに
彼女ゼロ頻度問題について述べた。人生における過学習はよくあることであり、理系諸氏におかれては勉学で得た知識を生活上の課題に適用し幸福な人生を築き上げられたい。
railsのnewとbuildの違い

結論からいうと、ありません。

```ruby
user = User.first
user.comments.new
=> #<Comment id: nil, body: nil, user_id: 1, created_at: nil, updated_at: nil>
user.comments.build
=> #<Comment id: nil, body: nil, user_id: 1, created_at: nil, updated_at: nil>
```

昔は、newだと上のuser_idが入らなかったみたいですね。

今はどちらも入るようになっています。

そのため、慣習的に関連するモデルを生成するときは、`build`を使うようです。

```ruby
User.new(user_params)
```

```ruby
user = User.find(params[:id])
user.comments.build(comment_params)
```

ちなみにrailsのソースコード(5.1)です。

```ruby
def build(attributes = {}, &block)
  @association.build(attributes, &block)
end
alias_method :new, :build  ←むしろnewをエイリアスにしている
```

こんな感じです。

以上です。
js常用数组操作


### shift

将数组的第一个元素删除，并返回第一个元素的值。此方法不会创建新数组（即内存友好）。类似的有pop(pop删除最后一个元素，并返回最后一个元素的值）

```javascript
var theItem = arrayObject.shift()
```

### splice

删除数组中指定位置的元素，或添加项目，或同时。返回含有这些删除元素的数组，如果没有删除元素，返回空数组。最常用的 `arrayObject.splice(index, 1);`删除数组中的某项。

```javascript
arrayObject.splice(index, howmany, item1, item2, ..)
```

### concat

数组合并

```javascript
array1.concat(array2, array3)
```

返回合并了的数组。

如果传参不是数组而是具体的值，直接依次合并到进新数组。

如果传参是一个空数组，什么都不发生。


### slice
从一个数组中抽出从a到b的部分。如果endIndex不传，则默认到最后。如果endIndex为负数，从后面开始数。

```javascript
array1.slice(startIndex, endIndex)
```

### pop
pop() 方法用于删除并返回数组的最后一个元素。

```javascript
arrayObject.pop()
```

### unshift

往数组头部插入数据。用法同push。
Unityプログラミング基礎演習 (変数編)

[Unityプログラミング基礎 (変数からclassまで)](http://qiita.com/tanaka_lit/items/3629ae1fa47eba9a38d7)
の演習編です。
`Debug.Log();`によってコンソールに何が出力されるか考えてください。
答え合わせの方法
Startメソッドの中に問題をコピー&ペーストして再生します

```csharp:答え合わせの方法
using UnityEngine;
using System.Collections;

public class BallScript2 : MonoBehaviour {

	// Use this for initialization
	void Start () {
	    // ここに問題をコピー&ペーストしてゲームを再生する
	}
}
```

まず例題です。

```csharp:例題1
int x = 1;
Debug.Log(x); //コンソールに1を出力
```
それではどうぞ
# Level1

```csharp:問題1
int hp = 10;
hp = 2;
Debug.Log(hp); 
```
```csharp:問題2
int x = 2;
int y = 3;
int answer = x + y; 
Debug.Log(y - x); 
Debug.Log(answer); 
Debug.Log(answer * x);
```

```csharp:問題3
int x = 10;
int y = 3;
float z = 2.0f
int answer = x/y; 
Debug.Log(answer); 
Debug.Log(x % answer); 
Debug.Log(answer / z);
```

```csharp:問題4
int x = 10;
x = x + 2;
Debug.Log(x);
x += 3;
Debug.Log(x);
x = 1;
x++;
Debug.Log(x);
```

```csharp:問題5
int x = 10;
x = x - 2;
Debug.Log(x);
x -= 3;
Debug.Log(x);
x *= 2;
Debug.Log(x);
x--;
Debug.Log(x);
```

# Level2
```csharp:例題2
bool check = true;
if(check){
    Debug.Log("Check is true");
}else{
    Debug.Log("Check is false");
}
//コンソールに"Check is true"を出力
```

```csharp:問題6
int x = 2;
int y = 3;
if(x < y){
    Debug.Log("1");
}else{
    Debug.Log("2");
}
```

```csharp:問題7
int x = 2;
if(x < 0){
    Debug.Log("1");
}else if(x == 0){
     Debug.Log("2");
}else{
    Debug.Log("3");
}
```
```csharp:問題8
int x = 2;
int y = -2;
if(x > 0 && y > 0){
    Debug.Log("1");
}
if(x > 0 || y > 0){
    Debug.Log("2");   
}
if(x != y){
     Debug.Log("3");   
}
```
ExUnitのdescribeとnamed setup

[ブログ](http://joe-noh.hatenablog.com/entry/2016/06/01/224357)から転載。

---

Elixir v1.3.0-rc.0からExUnitに追加された機能に、describeとnamed setupがあります。

## describe

`describe/2`マクロを使うことで、複数のテストケースをまとめることができます。

```elixir
defmodule MyAppTest do
  use ExUnit.Case, async: true

  describe "addition" do
    test "1 + 2 = 3" do
      assert 1 + 2 == 3
    end

    test "6 + 8 = 14" do
      assert 6 + 8 == 14
    end
  end
end
```

`setup/1,2`をdescribe毎に設定することができます。以下の例では、`setup_all/1`が返したmapと`setup/1`が返したmapがマージされ、`test/3`で利用できます。

```elixir
defmodule MyAppTest do
  use ExUnit.Case, async: true

  setup_all do
    %{one: 1}
  end

  describe "addition" do
    setup do
      %{two: 2}
    end

    test "1 + 2 = 3", %{one: one, two: two} do
      assert one + two == 3
    end
  end
end
```

### 制限

- `describe/2`の内側で`describe/2`を使うことはできません。
- `describe/2`の内側で`setup_all/1,2`を使うことはできません。

## named setup

`setup/1`, `setup_all/1`の引数に、ブロックではなく、atomやatomのリストを渡すことができます。

```elixir
defmodule MyAppTest do
  use ExUnit.Case, async: true

  setup_all :define_one

  describe "addition" do
    setup [:define_two, :define_three]

    test "1 + 2 = 3", %{one: one, two: two, three: three} do
      assert one + two == three
    end
  end

  def define_one(_context), do: %{one: 1}

  def define_two(_context), do: %{two: 2}

  def define_three(_context), do: %{three: 3}
end
```

複数の`describe`で同じ内容の`setup`を行いたいときなどに有用です。
nimスレッド操作

# 概要
nimのスレッド操作をコツコツと。
nimのコンパイルオプションに、--threads:onを指定する必要があるようです。
## 以下メモ
### スレッド実行サンプル
```nim
import locks
import math
import os
block:
  var
    thr: array [0..4, Thread[tuple[a,b,c: int]]]
    L: Lock
  # 乱数初期化
  randomize()
  # スレッドとして実行する関数
  proc threadFunc(interval: tuple[a,b,c: int]) {.thread.} =
    for i in interval.a..interval.b:
      acquire(L) # lock stdout
      echo interval.a,"=>",i
      release(L)
      sleep(interval.c)
  # ロックの初期化
  initLock(L)
  # スレッドを複数実行
  for i in 0..high(thr):
    var sleepTime = random(1000.0).toInt + 1000
    # 関数へ渡す値をタプルで渡す
    createThread(thr[i], threadFunc, (i*10 , i*10+5 , sleepTime ))
  # スレッド終了待機
  joinThreads(thr)
```
```
(stdout)
30=>30
0=>0
20=>20
40=>40
10=>10
20=>21
30=>31
40=>41
0=>1
10=>11
20=>22
30=>32
40=>42
0=>2
20=>23
10=>12
30=>33
20=>24
40=>43
0=>3
30=>34
10=>13
20=>25
40=>44
30=>35
0=>4
10=>14
40=>45
0=>5
10=>15
```