OmniAICreator/Qiita-1.07M huggingface dataset:
Toppers/asp for Renesas RXにrx64m archを追加

# 概要
 非公式で開発しているToppers/asp for Renesa RXにrx64mアーキテクチャを追加しました。ソースコードはgithub( https://github.com/farmer-bism/bismath_evalkit_target )から取得してください。 
開発環境はgccです。

# RX64Mのアーキテクチャの初期設定
 初期設定は以下になります。

- クロック
    - ICLK 120MHz
        - PCLKA: 120MHZ
        - PCLKC: 60MHZ
        - PCLKD: 60MHz
        - FCLK: 60MHz
        - BCLK: 120MHz
- オプションメモリ設定
    - OCD(オンチップデバッガ)の接続可能
    - ROMデータの読みだし可能 

# ターゲット(kaede-gcc)の初期設定
 ターゲットボードはGR-KAEDE( http://gadget.renesas.com/ja/product/kaede.html )です。GR-KAEDEはSDRAMが使用できますが、今回の更新では内臓メモリのみを使用する設定になっています。
SDRAMについてはこれから使えるようにする予定です。

- SCI
    - SCIデバイス: SCI0
    - 9600bps
    - 端子設定
        - TxD: P20
        - RxD: P21
- メモリ
    - 内臓ROM、RAMを使用 

# sampleソフトの実行方法
  toppers/aspのsampleソフトを実行する場合は以下のコマンドを実行してください。

- perl asp/configur -T kaede_gcc
- make depend
- make
iOS10でローカルPushを送信してみた


iOS10から追加されたUNUserNotificationCenter周りについて調べてみました。
すでに多くの方が記事を書いていますが備忘録も兼ねて

##Push通知の許諾
Push通知の許諾がEventKitのような形式に変更されたようです。

```swift
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert,.sound,.badge]) { (granted, error) in
            if !granted {
                debugPrint("Pushの許諾が拒否されました")
                return
            }
            else {
                debugPrint("Pushの許諾が許可されました")
            }
            
}
```

##Push許諾情報の取得
Push通知の許諾状況も取得できるメソッドがあります。

```swift
let center = UNUserNotificationCenter.current()
center.getNotificationSettings { (settings) in
            
}
```

##LocalPushを追加してみる
LocalPushはUNUserNotificationCenterにUNNotificationRequestをaddすることで追加できます。
5秒後に発火するローカルPushを追加してみます。

```swift
let center = UNUserNotificationCenter.current()
// ① NotificationContent
let content = UNMutableNotificationContent()
content.title = "サンプルのローカルPushです"
content.subtitle = "サンプルのsubtitleです"
content.body = "サンプルのbodyです"
content.badge = 1
content.sound = .default()

// ② NotificationTrigger
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)

// ③ NotificationRequest        
let request = UNNotificationRequest(identifier: "SamplePush", content: content, trigger: trigger)

// ④ 通知の追加
center.add(request)

```

以下で詳しく見てみます。
####① UNNoticationContentを生成
UNNotificationContentで通知領域に表示されるPushの情報の整形が行えます。

```swift
let content = UNMutableNotificationContent()
content.title = "サンプルのローカルPushです"
content.subtitle = "サンプルのsubtitleです"
content.body = "サンプルのbodyです"
content.badge = 1
content.sound = .default()
```

UNNotificationContentはimmutableなクラスになるためサブクラスのUNMutableNotificationContentを使って情報の整形を行います。

####② UNNotificationTriggerの生成

UNNotificationTriggerでPushの発火するタイミングの制御を行えます。
Triggerは以下

|||
|:--|:--|
|UNPushNotificationTrigger|APNSサーバからのPush受信時<br>※自分でこのTriggerを作成することは無いはず|
|UNTimeIntervalNotificationTrigger|指定した秒数後にPushを発火|
|UNCalendarNotificationTrigger|DateCompornentsを指定してPushを発火<br>Repeateと組み合わせて毎朝○時のPushなどに使えるそう|
|UNLocationNotificationTrigger|ジオフェンスを利用してPushを発火|

ローカルPushを利用する際は

+ UNTimeIntervalNotificationTrigger
+ UNCalendarNotificationTrigger
+ UNLocationNotificationTrigger
+ nil

の中から最適なものを選択します。
ここではUNTimeIntervalNotificationTriggerを使ってみます。

```swift
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
```
※TimeIntervalNotificationTriggerでrepeatsをtrueにする場合は60秒以上をしていしないと叱られます

####③ UNNotificationRequestの生成
上で生成したUNNotificationContentとUNNotificationTriggerを使ってUNNotificationRequestを生成します

```swift
let request = UNNotificationRequest(identifier: "SamplePush", content: content, trigger: trigger)
```

identifierは通知領域に表示中のコンテンツの更新や、発火前の通知のキャンセルに利用します。

##結果
🎉

![IMG_2028.jpg](https://qiita-image-store.s3.amazonaws.com/0/49151/7ae56715-fe05-8361-83b3-c905a98335cd.jpeg "IMG_2028.jpg")

次はUNUserNotificationCenterDelegateについて調べて見ようと思います。
初心者向けrails generate しないでmodel を作ってみる。

仮にtodoリストのモデルを作ることにします。

|title:string|body:text|priority:integer|
|:--:|:--:|:--:|

こんな感じのカラムを持つtodoテーブルをrailsでgenerateコマンドを使わずに作っていきます。

generateコマンドを使うと

```
rails g model todo title body:text priority:integer

      invoke  active_record
      create    db/migrate/20160917065918_create_todos.rb
      create    app/models/todo.rb
      invoke    test_unit
      create      test/models/todo_test.rb
      create      test/fixtures/todos.yml
```

では、これからgenerateを使わずにモデルを作っていきたいと思います。
マイグレーションファイルから作っていきます。

```
rails g migration todos
  invoke  active_record
  create    db/migrate/20160919105130_todos.rb
```

参考 http://qiita.com/zaru/items/cde2c46b6126867a1a64

###マイグレーションとは

>通常テーブルを新規に作成するには必要なSQL文を直接実行して作成します。カラムを追加したりする場合も同じです。それに対してマイグレーションを使う場合はテーブルを新規に作成するためのマイグレーションスクリプトと呼ばれるスクリプトファイルを作成し実行します。後からカラムを追加したい場合には、カラムを追加するための別のスクリプトファイルを作成し実行します。

>スクリプトファイルはRailsで決められた文法で記述するのですが、使用しているデータベースがMySQLであってもSQLiteであっても同じ記述が対応できます。またスクリプトファイルは作成された順に残っていますので、最初のものから順に実行することでまったく同じテーブルを簡単に作成できます。

引用　http://www.rubylife.jp/rails/model/index5.html

先程作成したマイグレーションファイルにrubyでデータベースに追加したいテーブル、カラムなどの情報を書いていきます。

```20160919105130_todos.rb
class Todos < ActiveRecord::Migration[5.0]
  def change
    create_table :todos do |t|
      t.string :title,         null: false
      t.text :body,            null: false
      t.integer :priority,     null: false, limit: 7
    end
  end
end
```

railsのcreate_tableメソッドを使ってテーブルを作成。

rake db:migrateをすると...

```
➜  todo_app git:(master) rake db:migrate:reset
                         
Dropped database 'todo_sample'
Database 'todo_sample' does not exist
Created database 'todo_sample'
Database 'todo_sample' already exists
== 20160919105130 Todos: migrating ============================================
-- create_table(:todos)
   -> 0.0154s
== 20160919105130 Todos: migrated (0.0155s) ===================================
```

無事テーブルが作成されました。

次にtodo.rbを作成。

```app/models/todo.rb
class Todo < ApplicationRecord
end
```

以上！
GBDKでゲームボーイプログラミング

世間がポケモンGOで沸き立つ中、なんだかゲームボーイが懐かしくなって色々調べてたら、ソフトの開発環境を見つけたので、やってみたくなった。
しかしポケモンGO人気スゴイなー。
初めてポケモンを知ったのは女の子がゲームボーイに片方だけ通信ケーブルさして、もう片方をくるくる振り回してるCMを見た時だったなぁ。
あの時はこのゲームが世界的な社会現象になるとは微塵も思わなかった。

さて、環境のセットアップとか"Hello World"を表示させるまでに色々と手間取ったので、備忘録として。
同時に今回初めてLinuxをいじってみたので、ところどころLinux絡みの覚書も残します。
あと、プログラミングはほぼ素人です。

[環境]
・OS
Linux Bean(Ubuntu 12.04.5 LTS)

・GBDK 
http://gbdk.sourceforge.net/
からLinux版をダウンロード。
俺がダウンロードしたときは2.96だった。

・エミュレータ
PC上で動作確認をするために必要。
bgb(V1.5.2)とkigb(V2.05)を使用。
（なんで２種類使ったかは後述。本来だったら1種類でいいはず。）

[環境の構築]
①ダウンロードしたファイルを解凍する。
圧縮ファイルを保存したディレクトリまで移動し、

`tar xzf gbdk-2.96a-i586-pc-linux2.2.tar.gz -C $HOME`

のコマンドを実行。/home/user/以下にgbdkというディレクトリが現れる。この時初めて知ったんだけど、$HOMEはホームディレクトリを指すんだね…。ここでは/home/userと同義ってことなんだなぁ。

②環境変数の設定

`export GBDKDIR=$HOME/gbdk/`

を実行して環境変数を設定する。
これを設定しないとコンパイルができない様子。
PCを再起動するとこの設定が消えてしまうようで、純粋にこの設定をしただけだとまた次回起動時に同じ設定をしなくちゃいけないらしい。
次回起動時にもこの設定を生かしたままにする方法があるみたいなんだけど、そこまで詳しく調べてないのでそれについては追記予定。

③コンパイルできるかどうかを確認。
配布ファイルに同梱されているサンプルをコンパイルして、ちゃんと
コンパイルができるかどうかを確認する。

`cd /home/user/gbdk/examples/gb`

でサンプルプログラムのディレクトリまで移動して

`make`

を実行し、コンパイルをする。

何種類かのサンプルがコンパイルされ、いくつかファイルが生成されるので、何らかのゲームボーイエミュレータで「.gb」ファイルを実行する。
（例えば、space.gbを実行するとシューティングゲームみたいな画面が確認できる)
無事実行できたら、とりあえず開発環境の構築はOK（だと思う）。

[Hello Worldしてみる]
①下記のディレクトリ構造を構築する。
`/home/user/gbdk/projects/gb/tests`

②testsディレクトリ内にテキストエディタでtest01.cというファイルを作り、以下を記述する。

```c:test01.c
#include <gb/gb.h>
#include <stdio.h>

void main()
{
	printf("HELLO WORLD");
}

```

③Makefileを編集する。
`/home/user/gbdk/examples/gb/dscan `
内の「Makefile」をtestsディレクトリにコピーしてテキストエディタで開き、「dscan」の文字列を「test01」に置換して上書き保存。

④コンパイルする。
`make`
 を実行する。

`warning: no newline at end of file`
という警告が出る場合があるけど、これは「ファイルの最後の行に改行コードが入ってませんよ！」って意味の警告で、気にしなくていいそうな。本来一番最後の行が改行コードを入れるのが決まりなのかな？
とりあえず、この警告が出ても実行ファイル「test01.gb」は生成される。同時に、「test01.o」「test01.map」「test01.lst」の３つのファイルも生成される。

コンパイルはここまで。

[実行]
ゲームボーイのエミュレータでtest01.cを実行する。
俺はbgbというので実行してみた。

…あれ。
何も表示されない。

サンプルはbgbで実行できたのになぁ。

VirtualBoy Advanceも試してみようとしたけどWineで起動することができず、さらにKigbで試してようやくHello Worldを表示することができた。

うーん？これはなんでだろう。
同じ環境下でコンパイルしたはずなのに、動作がエミュレータに依存するのか？？

ちょっと原因調べているけど、自分で書いたソースで動作させるところまではできたので、とりあえずここまで。

次は図形の描画なんぞ試してみたいですね。
Jupyter Notebookを自分仕様に：背景，アイコンの変更

Qiitaへの初めての投稿です．
Jupyter Notebookの背景や文字色，アイコンなどのテーマをWindowsで変更する方法の記事です．
~~Mac bookあたり欲しい~~

# 目的
便利な Jupyter Notebook を自分仕様のカラーリング，背景にします．

![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/141274/9eaa6c04-8a59-0f08-696b-074ba57e8fc4.png)


###### 環境
- Windows 10 (7でも)
- Google Chrome
- Anaconda3 version 1.4.0? ~~多分~~
- Jupyter Notebook version 4.1.0? ~~多分~~

# Jupyter Notebook，素敵ですよね
この2016年春から機械学習を本格的に(?)勉強し始めたのですが，新しくPythonを触ることになり，更には便利なIPython，からのJupyter Notebookを触ることになりました．素敵です．Jupyter Notebook．ただ，やっぱり画面の色が白っぽいと疲れませんか...

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/141274/1927d62d-e6f0-916e-3906-a9c6f019a01d.png)
![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/141274/f74fad67-ed06-8e77-1a59-54fa53d98d6f.png)
~~あ～まぶし～~~

Jupyter Notebookがブラウザソフト(?)で動くってことは，htmlだかcssだかでいじれるんちゃう? ってことで検索すると，やっぱりありましたね．あります．
ただ僕のWindows君だと上手くいかなかったです．特にプログラム実行させるノートのとこで．
検索してもWindows使ってる場合は解決できていない様で，困ってる方も多いかなと思ったので，メモで置いとかずに世話になってるQittaに書くことにしました．

# CSSファイルが何処か分からん
`F12`を押して確認するも
`<link rel="stylesheet" href="/static/notebook/css/override.css?v=31167f96aa4a3bc95ad24680a64a7ffd" type="text/css">`
`<link rel="stylesheet" href="/custom/custom.css" type="text/css">`
っぽいのは見つかる...
**どこや**
まあ情弱なんで何処か分からない...Windowsメニューで検索すると何個か出てくる...
**どれや**
で結局見つけました．
~~どのCSSがどんな意味があるのか分かれば教えてください~~

# 具体的な方法
~~残念ながら~~Windows7，10での方法です．Linux系とかは大体ネットで調べたら出てくるので...

1. まず，エクスプローラを開いてアドレスバーかコマンドラインとかなんでもいいので
`C:\Users\(あなたの名前とか)\.jupyter\custom`
に行きます．多分最初はcustomが無いと思うので無ければcustomフォルダを作ってください．
2. 作ったcustomフォルダの中に，cssファイル `custom.css` を作ります．custom.cssを開いて，中身に適用させたいCSSを記述します．Jupyter Notebookで使われてる属性は，Chrome だと Jupyter Notebook を起動してキーボードの `F12` を押すと見れると思います．
3. でもまぁぶっちゃけめんどくさいので，素敵なものを作ってくれている方がいます．https://github.com/nsonnad ~~勝手にリンク張って大丈夫かな...~~ ここから気に入ったCSSをダウンロードなりして，さっき作ったCSSファイルにコピペするなりすれば，Jupyter Notebook のメニューページは変えることができます．
4. `C:\Users\(あなたの名前とか)\Anaconda3\Lib\site-packages\notebook\static\notebook\css` にある override.css にまたまた変更を加えれば，Jupyter Notebook のコードを書いたり実行したりするページの見た目を上書きすることができます．

# それでも変更されない場合
ブラウザがおそらく勝手にCSSファイルとかを記憶してるらしく，それを消さないといけないみたいです．Chromeなら，

1. 右上の・が縦に3つ並んだようなの(それか横棒みたいなの-)をクリックして，履歴を開きます．
2. `閲覧履歴データの消去...`みたいなところをクリックすると，`キャッシュされた画像とファイル`というのがあるので，それだけにチェックを入れて消去．

こうしてJupyter Notebookを新しく起動すれば治るかもです．

# ぼくのわたしの Jupyter Notebook
![キャプチャ1.PNG](https://qiita-image-store.s3.amazonaws.com/0/141274/c3c91d07-b40e-f1c8-019c-66e1145186bd.png)
![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/141274/9eaa6c04-8a59-0f08-696b-074ba57e8fc4.png)

僕はこんな感じに変えました．背景画像を`body`タグのCSSに追加しました．Continuum Analytics のロゴがウロボロスみたく自分の尻尾を加えてる (?) っぽくてクールで気に入っていて，自分色に変えちゃいました (個人用だからいいかな...線引いてごまかしてますが...)．ハンドルネームも込めて．
こんな風に画像も差し替えられます．
`C:\Users\(あなたの名前とか)\Anaconda3\Lib\site-packages\notebook\static\base\images`
にあると思います．`favicon.ico` を新しく読ませるのもまた上でやったキャッシュを消去しないと変更してくれないです．
背景はやっぱ暗めじゃないと疲れます...

背景画像の細かいCSSは適当に．htmlを修飾するときと変わらないです．
~~PyCharm使えよ ! は無しで...gif動かなかったり\r使えなかったりするので...~~
Cocos2Dで独自フォントを使用する際に気をつけること


Cocos-2dxで独自フォントを使用する際、多くの参考資料にはResourcesの中にあるfontフォルダにttfデータを置けば良い、とあるがそれだけではうまくいかず四苦八苦していた。

結果、プロジェクトのInfo内にある「Fonts provide by Application」という項目に、読み込んだフォントの置き場所を追記する必要があった模様。

![スクリーンショット 2016-09-19 21.59.57.jpg](https://qiita-image-store.s3.amazonaws.com/0/43677/29d473b4-dc25-c76a-c7cf-6f02b2766228.jpeg "スクリーンショット 2016-09-19 21.59.57.jpg")


これで、無事独自フォントが使えるようになった。
【Swift3.0】【Xcode8】【iOS10】 socketのbindでエラー


ほぼ自分用のメモでごめんなさい。

# はじめに

iOSで例えば簡易HTTPサーバとか作ろうとすると割に面倒っぽいです。私が知らないだけの可能性も高いのですが、NSなんちゃらでそれっぽいのを探すことが出来ませんでした。

そこでgithubとか漁ってみますと、いくつかありました。HTTPサーバとなると[swifter](https://github.com/httpswift/swifter)とかが良さげに見えます。で中見るとお馴染みのsocketなAPIでよしなにしている感じでした。あーじゃあライブラリ理解するのも面倒だし、自分でもやれるなーと思って組んでみた訳です。

# ところがbindでエラー

最近xcode8とかiOS10、Swift3になった関係か、いろいろと怒られまくりました。多くはxcode様のお導きで勝手に直っていったのですが、以下のコードだけがどうにもエラーから先に進みません。コード自体は[swifter](https://github.com/httpswift/swifter)のを見ながら組んだ感じなのです。

```swift
var addr = sockaddr_in(sin_len: UInt8(strideof(sockaddr_in)),
             sin_family: UInt8(AF_INET),
             sin_port: port.bigEndian,
             sin_addr: in_addr(s_addr: in_addr_t(0)),
             sin_zero:(0, 0, 0, 0, 0, 0, 0, 0))
                
 let bindResult = withUnsafePointer(to: &addr) {
    bind(socketFileDescriptor, UnsafePointer<sockaddr>($0),
        socklen_t(MemoryLayout<sockaddr_in>.size))
}
```
上記のbindがこんな感じで怒られるのです。withMemoryReboundとかSwift初心者にはかなり厳しそう（滝汗）

```bash
'init' is unavailable: use 'withMemoryRebound(to:capacity:_)' to temporarily view memory as another layout-compatible type.
```

# これでOK

socket系になると私のスキルではAppleDevelopperサイトから情報を引き出すのは難しかったです（お恥ずかしい話です）。

で、答えは[stackoverflow](http://stackoverflow.com/questions/39184544/cast-to-different-c-struct-unsafe-pointer-in-swift)にありました。どうもポインタ系の修正が必要になるみたいです。つまりはエラーメッセージの通りではあるのですが…。[stackoverflow](http://stackoverflow.com/questions/39184544/cast-to-different-c-struct-unsafe-pointer-in-swift)に従って以下のように記載することでパスりました（一応Xcodeに言われたような方法でなおしてみました）

```swift
var addr = sockaddr_in(sin_len: UInt8(strideof(sockaddr_in)),
             sin_family: UInt8(AF_INET),
             sin_port: port.bigEndian,
             sin_addr: in_addr(s_addr: in_addr_t(0)),
             sin_zero:(0, 0, 0, 0, 0, 0, 0, 0))
                
let bindResult = withUnsafePointer(to: &addr) {
    $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
        bind(socketFileDescriptor, $0,
            socklen_t(MemoryLayout<sockaddr_in>.stride))
    }
}
```

bind以外はそれほど大したこともなく、シミュレータレベルですが、bindした後accept出来ることをiPhone7/iOS10で確認できました。いやーSwiftでメモリ操作なんて、C++で「；」をしょっちゅう忘れてしまう私にはハードルが高い高い（なぜか涙が…）

ただこれ、[swifter](https://github.com/httpswift/swifter)とか大丈夫なのかなーとは思いました。

# おわりに

[stackoverlow](http://stackoverflow.com/)様には（いつもではありますが）もう感謝です。

（一応）上記のコードはパブリックドメインとします。当然ですが使用した際の損害は誰も請け負ってくれません。そこだけ注意願います。

以上です。
chromeでyoutubeの再生が遅い時の解決のヒント

chromeを使っていてyoutubeの動画再生が遅くなっていたが以下の方法で解決したのでその時のメモ。（参考までに）

1. アドレスバーに`chrome://flags/`を指定しchromeの設定画面を表示
2. `QUIC プロトコル`を`無効`に変更する(項目が多いのでCtrl-Fで「quic」で検索）
2. chromeを再起動

以上。
nginxのインストール(CentOS7)

# nginxのインストール(CentOS7)

## 確認環境
「さくらのVPS」 http://vps.sakura.ad.jp/
カスタムOSインストール:CentOS7
での確認となります。
以下ルート権限での作業となります。

## インストール
### リポジトリの追加
```shell-session
# vi /etc/yum.repos.d/nginx.repo
-- viで編集 --
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/x86_64
gpgcheck=0
enabled=1
-------------
```
### インストール
```shell-session
# yum install nginx
```


純粋にインストールとなるとこれだけですが・・・
他にもやることはあるのでついでにメモ。

## 起動/自動起動設定
### 起動
```shell-session
# systemctl start nginx
```
### 自動起動設定
```shell-session
# systemctl enable nginx
```

## ファイヤーウォール設定
### http/httpsを通すように設定
```shell-session
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https
```
### ファイヤーウォール再読み込み
```shell-session
# firewall-cmd --reload
```

## 確認
ブラウザでアクセスしてこの画面が見れればひとまずのインストールはOK!
![welcomenginx.JPG](https://qiita-image-store.s3.amazonaws.com/0/138460/86489290-39c9-49f2-f146-598db2dd5a32.jpeg)

## 謝辞
こちらを参考にさせていただきました。（というか、追試に他なりません・・・。）
ありがとうございました。

NginxをCentOS7にインストールする @ keiwt’s diary
http://keiwt.hatenablog.com/entry/2015/03/31/181104
選択範囲のセルに指定した文字列を追加するマクロ

```vbnet
Option Explicit

Sub addStringMain()

    Dim bufferString As String
    Dim addString As String
    
    Dim selectionCell As Range
    Dim lastRow As Long

    addString = InputBox("input")
    Debug.Print addString
    
    For Each selectionCell In Selection
        bufferString = selectionCell.value
            
        selectionCell.value = bufferString & addString
        
    Next selectionCell

End Sub

```
pipで導入したパッケージ内のコマンドがEmacsから見つけられない

Jediによるpython自動補完の環境をセットアップしているときにハマった事象をメモする。

## 事象
[JediのQuick start](http://tkf.github.io/emacs-jedi/latest/#quick-start)の3ステップ目、

> Install Python server (jediepcserver.py) by running `M-x jedi:install-server` in Emacs

を実行すると、`Program named "virtualenv" does not exist.`と言われてしまう。

## 原因
pyenv経由のpipで`~/.pyenv/shims/virtualenv`
にvirtualenvコマンドが導入されていたため。

## 対処
Emacsがログインユーザーの$PATHを参照できるようにする。[こちらの記事](http://qiita.com/catatsuy/items/3dda714f4c60c435bb25)[1]や[こちらの記事](http://keisanbutsuriya.hateblo.jp/entry/2015/12/08/011832)[2]を参考にした。

こうすることで、シェルの$PATHに設定されていた`/Users/ユーザー名/.pyenv/shims`をEmacsから参照できるようになる。

## 参考文献
[1] http://qiita.com/catatsuy/items/3dda714f4c60c435bb25
[2] http://keisanbutsuriya.hateblo.jp/entry/2015/12/08/011832
phina.jsとenchant.jsの自分のためのまとめ

最近node.jsにはまっています。しかし、Hello,Worldを出すのに一苦労。そこでJSゲームライブラリを比較します。(なぜ?)

#enchant.jsとは?
•カンタンにゲームやアプリを開発できる HTML5 + JavaScript フレームワークです。
•2011年に公開され、すでに 1,000 本以上のゲーム/アプリが公開されています。
•オープンソース (MITライセンス) で、無料で利用できます。
•ドキュメント・書籍・チュートリアルサイトが充実しています。
•たくさんのプラグインで機能を拡張できます。
•UEI/ARC を中心としたメンバによって開発・メンテナンスされています。
•プログラミング教育のためにも利用されています。
[enchant.js公式サイト](http://enchantjs.com/ja)より

#phina.jsとは?
phina.js(フィナ ドット ジェイ・エス) は, JavaScript で作られた国産のゲームライブラリです.

プログラミング初心者でも始めやすく, それでいて上級者のハイレベルな要求にも 応えられる, 柔軟な設計と豊富な機能を備えています.

使い方はカンタン! あなたの HTML ファイルに `<script> `タグで phina.js を読み込むだけ でで導入でき, あとは公式サイトで提示しているサンプルコードをベースに, あなたがやりたいことを追加していくだけです.

phina.js は, ゲームで必要となる個々の機能をただ提供するだけにとどまりません. 
ゲームプログラミングをする上で, 「ゲームの作り方」の大まかな枠組みも提供しています.

『ゲームプログラミングといっても, まずどこからどんなふうにコードを書いていけば良いか分からない』 という初心者の方でも, phina.js の枠組みに従ってコーディングしていくことでとてもカンタンにゲームを作ることができるのです.

また, phina.js は「オブジェクト指向」を意識して作られています. シーンやレイヤー, UI 部品といったゲームに必要な要素を「実際の物を扱うような」感覚で 組み合わせていくイメージでゲームを作ることができます.

上級者は, phina.js の提供するクラスを継承して拡張することで, より多彩な表現を実現できます.

初心者でもカンタンに扱えて, 上級者であれば自分好みにカスタマイズできる, そんな幅広いニーズに応えるべく開発が続けられているゲームライブラリ. それが phina.jsです!!
[本日 JavaScript ゲームライブラリ『phina.js』をリリースしました!｜phiary](http://phiary.me/phinajs-release/)より

#双方のメリット
##enchant.js
- 広く使われている。
- 長く(5年)使われている。
- 本も出ている。
- シーン切り替えがしやすい。
- マップ機能が豊富。

##phina.js
- 軽い
- 早い
- [Runstant](http://runstant.com)ですぐに実行できる
- 上のためにすぐに共有できる
- サウンドの扱いがうまい

#双方のデメリット
##enchant.js
- 重い
- サウンドループがちゃんとできないときがある（プロパティが違うため）
- 遅い

##phina.js
- 情報が少ない（ただしtmlib.jsのチュートリアルも参考になる）

欠点は↑だけだと思います

#まとめ
こんなところですかねぇ?
自分は今enchant.jsユーザーなのですが、phina.jsはいろいろ使えるので、とても便利だと思いました。
個人的には`phina.globalize()`が好きです。
Laravel の Passport で利用できる認証方法を制限する

先日、[Laravel 5.3 で Passportを試す | ぴんくいろにっき](http://blog.hinaloe.net/2016/09/15/try-passport-laravel-5-3/)という記事にLaravel 5.3 で使えるようになった公式パッケージである **Passport** で　OAuth2を使う方法とかを書いたわけですが、この際に気になったこととして**デフォルトで全ての認証方法(パーソナルアクセストークン含む)が利用できる**といった懸念点がありました。

そこで、これを解決する手段を探してみました。

## 使用できるgrant_typeを制限したい

Passportでは `\League\OAuth2\Server\AuthorizationServer` の`$enabledGrantTypes`に`\Laravel\Passport\PassportServiceProvider::registerAuthorizationServer`で各grantTypeを登録しています。これを制御すれば有効化するgrantTypeを絞れるのでは、と思ったものの、当該メソッドが軒並みprotectedだったのでなんだか面倒そう。(言い換えれば、`\Laravel\Passport\PassportServiceProvider`を継承するProviderを作ってregisterAuthorizationServerをオーバーライドし、このクラスでconfigの該当箇所とかを置き換えれば十分用がたせそうな気がしますね、書いてから気付いた。)

パーソナルアクセストークンは要らないけれど、それ以外の各種は使いたいので少しやるたいことと違う気もします。

## パーソナルアクセストークン、grant_type:passwordはいらない

検証できてなくてアレだけど personal_access_client, password_client のそれぞれを持つクライアントがなければいいはず(?)

とはいえこれだけではパーソナルアクセストークン取得のエンドポイントは残るので少し気持ち悪い。

## 利用できるAPIエンドポイントを絞る
**[多分これが一番手っ取り早いと思います](http://dic.nicovideo.jp/a/%E5%A4%9A%E5%88%86%E3%81%93%E3%82%8C%E3%81%8C%E4%B8%80%E7%95%AA%E6%97%A9%E3%81%84%E3%81%A8%E6%80%9D%E3%81%84%E3%81%BE%E3%81%99)**

セットアップガイドに沿って進めている場合、`Passport::routes()`を`app/Providers/AuthServiceProvider.php`に追加していると思いますが、このメソッドは実は第一引数にクロージャでコールバックを取ります。

指定がなかった場合のデフォルトコールバックは

```php
function ($router) {
    $router->all();
}
```
で、引数に渡ってくるrouterは`\Laravel\Passport\RouteRegistrar`、すなわち `$router->all()`は

```php
    public function all()
    {
        $this->forAuthorization();
        $this->forAccessTokens();
        $this->forTransientTokens();
        $this->forClients();
        $this->forPersonalAccessTokens();
    }
```

となっています。

例えば「パーソナルアクセストークンは不要、普段はパスワード認証を用いるが管理者側から生成したcode認可のクライアントも使用できるようにする」といった場合、AuthServiceProviderには

```php
        Passport::routes(function (RouteRegistrar $router) {
            // /oauth/tokens
            $router->forAccessTokens();
            // /oauth/authorization
            $router->forAuthorization();
        });
```
としておけばこの条件が満たせるルーティングになります。

必要に応じてこれを1つ目、2つ目の方法と併用されることをおすすめします。

-----

Passport、便利なんだけどドキュメントがあまり充実していなくて日本語資料も全然見当たらなくてつらい。
もし戉や「こここうした方がいいよ」等指摘があればコメントでどんどん投げていただければと思います。
WindowsのCPU、メモリーに簡単に負荷をかける方法

# 0. はじめに
負荷試験の観点の一つに、サーバーOSが高負荷状態でもアプリケーションが問題なく稼働することを試験項目として入れる場合があります。その時に、どうやってサーバーOSを高負荷状態にするかは悩ましいものです。適当な演算をするバッチを作って動かしても、シングルスレッドで動いて目的通りに負荷をかけられないとか…。

そこでマイクロソフトが出しているツールを用いて負荷をかける手順をまとめておこうと思います。ソースの記事はこちら（[The Way I See It：Tools To Simulate CPU / Memory / Disk Load](https://blogs.msdn.microsoft.com/vijaysk/2012/10/26/tools-to-simulate-cpu-memory-disk-load/)）です。

# 1. CPUに負荷をかける
## 1-1. ツールの取得
[Windows Sysinternals](https://technet.microsoft.com/en-us/sysinternals/)  提供されているツールを利用します。下記のツールをダウンロードしてください。ダウンロードしたZipファイルを解凍すると「CPUSTRES.EXE」があります。
[CPUSTRES.EXE（Zipダウンロードの直接リンク）](http://download.sysinternals.com/files/CPUSTRES.zip)

蛇足ですが、Windows Sysinternalsのサイトを参照する場合は、英語の本家サイトを参照してください。ja-jpのサイトは邦訳が滞っているため情報が古いです。

## 1-2. ツールの実行
「CPUSTRES.EXE」をダブルクリックして実行するとツールが起動します。
あとはお好みの負荷状態を選択すればOKです。（項目を選択するだけで負荷がかかる状態になっています。）

![d29fda56-b6ca-576f-9214-85ad91c7b12e.png](https://qiita-image-store.s3.amazonaws.com/0/34410/98b7745b-8902-ebcc-cd0d-b5e6648b9595.png)


なお、このツールは4スレッド分の負荷まで対応しています。さらに多くのスレッドに負荷をかけたい場合は、このツールを複数立ち上げれば良いです。16スレッドに負荷をかけたい場合は、ツールを4つ立ち上げるということです。

# 2. メモリーに負荷をかける
## 2-1. ツールの取得
同様にSysinternalsから下記のツールを取得してください。
[TestLimit（Zipダウンロードの直接リンク）](http://download.sysinternals.com/files/TestLimit.zip)

## 2-2. ツールの実行
「TestLimit」はCUIのプログラムです。コマンドプロンプトから実行してください。
下のスクリーンショットでは、2GB（2048MB）のメモリー負荷をかけてみました。

![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/34410/fc6b3ae5-5c20-726e-36e8-d18db15524d0.jpeg)

# 3. おわりに
Sysinternalsではたくさんツールを用意していますね。ただ日本語の情報が少なく、あまり使われているようには思えないです。少しずつ使ってみて展開したいと思います。

#4. 参考資料
- 負荷試験の基本を押さえる書籍
    - [アート・オブ・アプリケーション パフォーマンステスト](http://amzn.to/2muf0ay) 
    - [Amazon Web Services負荷試験入門](http://amzn.to/2msfQVt)
Quiitaを始める

Quiitaを初めてみることにしました。
rexです。

最近、Quiitaで機械学習系の記事をよく見て、大変勉強になるんですが、一方、数値解析系のもの、とくにFEMは少なく、この分野もオープン志向で行った方が、今後発展するんじゃなかろうかと思い始めた次第です。

電気系の出身なので、有名な機械系の応力解析ではなく、電磁気、電気回路などの解析法について、少しずつでも書いていければなと思います！

とりあえず、以下のMaxwell方程式を対象にしてしばらく書いていこうかなと思います。
電磁波ではなく、変位電流dD/dtが無視できる領域を中心に行きます。

```math
\mathrm{rot}\vec{H}\quad=\quad\vec{J}_{all}\\
\mathrm{div}\vec{B}\quad=\quad0
```

どこまで行けるか分かりませんが、ゆっくり行くのでお願いいたします。
tcpdumpとiptablesで理解するTCPのハーフコネクション・ハーフオープン(half-open connection)

## TCPのハーフコネクション・ハーフオープン

TCPでデータを転送する場合、データの転送を行う前にコネクションが確立されている必要があります。
一方で、TCPは、状態を持つ(ステートフルな)プロトコルであり、サーバ、クライアントそれぞれが状態を持つことになります。
TCPのハーフコネクション・ハーフオープンは、サーバまたはクライアントのノードが、他方に知らせることなく終了した場合などに発生し、そのどちらかのノードのみがコネクション接続状態となっていることを示します。
この状態となってしまった場合、そのコネクションを使った通信には応答が返ってくることありません。コネクションプールで常時接続を行うアプリケーションでは、応答が返らないことで障害が長期化する恐れがあります。

本事象は、対抗ノードのOSのクラッシュ、プロセス停止なしでのNICの停止、ケーブルが抜けたケースなどで発生する可能性があります。
TCPキープアライブの機能を有効とすることで、ハーフコネクション・ハーフオープンの状態を検知し、解消することが可能です。TCPキープアライブについては以下のエントリを参照してください。

[tcpdumpとiptablesで理解するTCPのキープアライブ(TCP keepalive)](http://qiita.com/keikmobile/items/5f2f427baf9121ccf40f)

TCPのコネクションについての詳細は以下のエントリを参照してください。

[tcpdumpで理解するTCPのコネクション](http://qiita.com/keikmobile/items/93cf6dc5b95019c6a442)

上記TCPのハーフコネクション・ハーフオープンの状態をiptablesコマンドとtcpdumpコマンドで実際に確認して行きます。

## tcpdumpとiptablesで理解するTCPのハーフコネクション・ハーフオープン

### 0.前準備

本エントリでは、以下のLinuxコマンドを使用します。

* tcpdump
 * ネットワーク上のパケットを出力するために使用します。
* nc,telnet
 * tcpサーバー/クライアントとして使用します。
* netstat
 * コネクションの状態を確認するために使用します。
* iptables
 * コネクション確立要求をDROPするために使用します。

上記コマンドがインストールされていない場合、以下のコマンドでインストールします。

```
$ sudo yum -y install tcpdump nc telnet net-tools iptables
```

### 1. コネクションの確認、iptablesの前準備

以下のエントリの1.2.の手順を実施して、コネクションの確認、iptablesの前準備までを確認してください。

[tcpdumpとiptablesで理解するTCPのコネクションタイムアウト (connection timeout)](http://qiita.com/keikmobile/items/5be0a4c5781797c9cf35)

* 1. コネクションの確認
* 2. iptablesの前準備

## 2. iptablesでハーフコネクション・ハーフオープンを発生させる

telnetまたはncコマンドでTCPクライアントを起動し、ローカルで起動している1.のTCPサーバに接続します。

```
$ telnet 127.0.0.1 12345
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

```

netstatコマンドでncとtelnetのコネクションが確立されている(ESTABLISHになっている)事を確認します。

```
$ netstat -anp | grep 12345
tcp  0  0 0.0.0.0:12345     0.0.0.0:*        LISTEN      <PID>/nc
tcp  0  0 127.0.0.1:<port>  127.0.0.1:12345  ESTABLISHED <PID>/telnet
tcp  0  0 127.0.0.1:12345   127.0.0.1:<port> ESTABLISHED <PID>/nc 
```

tcpdumpコマンドでlocal interfaceのport12345を指定して実行します。

```
$ sudo tcpdump -i lo -nnn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
```

iptablesで、上記の<port>のport番号のdestination portのパケット廃棄(DROP)のためのルールを設定します。

```
$ sudo iptables -A INPUT -p tcp -d 127.0.0.1 --dport <port> -j DROP
```

ここで、TCPサーバとして起動していたncのプロセスを停止します。
ncプロセスにkillコマンドまたはCtrl-cにてシグナルを送信します。

ここでtcpdumpの出力に以下のような、FINパケットの再送が確認できます。

```
20:28:59.148263 IP 127.0.0.1.12345 > 127.0.0.1.<port>: Flags [F.], 
20:28:59.349161 IP 127.0.0.1.12345 > 127.0.0.1.<port>: Flags [F.],
20:28:59.752355 IP 127.0.0.1.12345 > 127.0.0.1.<port>: Flags [F.],
20:29:00.557410 IP 127.0.0.1.12345 > 127.0.0.1.<port>: Flags [F.],
```

この状態で、netstatを実行すると以下のような結果が得られます。

```
$ netstat -anp | grep 12345
tcp  0  0  127.0.0.1:<port>  127.0.0.1:12345  ESTABLISHED  <PID>/telnet
$ 
```

nc(TCPサーバ)のプロセスがない状態で、telnet(TCPクライアント)がESTABLISHになっています。
この状態をTCPのハーフコネクション・ハーフオープンと呼びます。

この状態で、telnet(TCPクライアント)がいかなる要求を発行しても、nc(TCPサーバ)から応答が返ることはありません。
[Unity] 任意の無限遠の平面とベクトルとの交点を求める


通常の `Plane` オブジェクトとの交差判定ならレイキャストを使って表現するのが手っ取り早いですが、例えば擬似的に、無限遠に存在する平面に対してどこを指し示しているか、というのが分かると便利そうです。

ということで、その実装です。
（[こちらの記事](http://physmath.main.jp/src/line-plane-intersection-point.html)を参考にしました）

上記の記事から引用させてもらうと、式は以下になります。

```math
// 平面 \\
(n, x) = h
```

```math
// 直線 \\
x_0 + tm
```

```math
// 交点 \\
x_0 + \frac{h - (n \cdot x_0)}{n \cdot m}m
```

図解すると以下。
![平面との交点.png](https://qiita-image-store.s3.amazonaws.com/0/5616/d5a1991a-0a82-7f05-ae2a-cd2e8bcf38ed.png)

ここで $n$ は平面の法線、 $x$ は「平面上の任意の点」、 $x_0$ は起点となる点、$t$ はいわゆる「媒介変数」。$m$ は起点から平面に向かうベクトル、そして $h$ は符号付き距離となります。

Unityベースのプログラムで言えばそれぞれは以下の意味となります。

- $n$ ... 法線。`GameObject` を利用するなら `transform.forward` などを利用する。（もちろん、 `new Vector3` してもいい）
- $x$ ... plane.transform.position。交点を求めたい平面上にある「任意の点」。 `transform.position` も当然平面に含まれるため、これをそのまま利用する。
- $h$ ... 上記ふたつのベクトルの内積。具体的には法線の射影した位置ベクトルの長さ。
- $x_0$ ... transform.position 始点としたいオブジェクトの位置。（もちろん `new Vector3` でプログラム上で生成した点でもOK）
- $m$ ... transform.forward 始点から平面へ向かうベクトル。もちｒ（以下略）。

## 解説

さて、上記式の導出ですが、以下のように考えます。
基本的な考え方として大事なポイントは、

1. 平面上の任意の点は、始点から平面に向かうベクトルに沿って進めていく中にある
2. 平面上の任意の点は、平面の法線との内積を取ると必ず同じ値になる（[こちらの記事を参照](http://physmath.main.jp/src/plane-signed-distance.html)）

という点です。

(2)の平面上の任意の点と平面法線との内積が同じになるのは、任意の点が「原点」からの位置ベクトルとして考えると、位置ベクトルを法線に射影するとすべて同じ距離、つまり平面の点の集まりとなることがイメージできるかと思います。

そして上記理由から $n \cdot (x_0 + tm) = h$ もまた成り立つことを利用して、媒介変数である `t` の値を求めることができます。

ひとつずつ展開していくと以下のようになります。

```math
n \cdot (x_0 + tm) = h \\

(n \cdot x_0) + (n \cdot tm) = h \\
(n \cdot tm) = h - (n \cdot x_0) \\
t = \frac{h - (n \cdot x_0)}{(n \cdot m)}
```

となります。

`t` の値が求まれば、あとは始点と方向ベクトルに `t` を掛けてやることで交点を求めることができる、というわけです。

ちなみにここで $h$ が未知な感じがしますが、実は $n \cdot x$ の $x$ は平面上の任意の点なので平面の位置ベクトルを使って求めることができます。

これを実行すると以下のように、擬似的に無限に広がる平面に対しての位置を求めることができるようになります。

![Sample GIF](https://i.gyazo.com/34f67dc4a90ec0fbcc61cd92fba17b1b.gif)

見てもらうと分かるように、見た目の平面上だけでなく、そこから外れても平面に相当する場所に球体が移動しているのが分かるかと思います。

最後に、ここで利用したコードを全文載せておきます。

```csharp
using UnityEngine;
using System.Collections;

public class PlaneSample2 : MonoBehaviour
{
    public GameObject StartPoint;
    public GameObject Plane;
    public GameObject Pointer;
	
	// Update is called once per frame
	void Update ()
    {
        var n = Plane.transform.up;
        var x = Plane.transform.position;
        var x0 = StartPoint.transform.position;
        var m = StartPoint.transform.forward;
        var h = Vector3.Dot(n, x);

        var intersectPoint = x0 + ((h - Vector3.Dot(n, x0)) / (Vector3.Dot(n, m))) * m;

        Pointer.transform.position = intersectPoint;
	}
}
```

ちなみに `StartPoint` にカプセルを、`Plane` にはプレーンを、`Pointer` にはスフィアを設定しています。
"12:30:50"をISO formatに変換

[moment.js](http://momentjs.com) に`12:30:50`をそのまま渡すと、validではないmomentオブジェクトになる

>Deprecation warning: value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.

こんなDeprecated Warningがブラウザコンソールに出る

```js
time = moment().format('H:mm:ss') //=> "12:30:50"
moment(time).isValid() // => false
```

「12:30:50 PM の44分32秒後」を`moment.js`使って知りたくても

```js
moment(time).add(44, 'minutes').add(32, 'seconds').format('H:mm:ss') 
//=> 'invalid date'

```

となってしまう。

なのでISO formatに変換する必要がある

```js
// @flow
const getISOSformat = (str: string) => string {
  if (!/^(?:0?|[1-2])\d:(?:0?|[1-5])\d:(?:0?|[1-5])\d$/.test(str)) throw new Error('not H:mm:ss')

  const [h, m, s]  = str.split(':')
  const d =  new Date()
  d.setHours(h)
  d.setMinutes(m)
  d.setSeconds(s)
  return d.toISOString()
}
moment(getISOSformat("19:54:57")).add(6, 'minutes').format('H:mm:ss')
// => 8:37:31
```

「`2016/10/12` の42日後」とかもmoment.js使って知りたいときは同じやり方でいけると思う
mysql user 作成

自分用メモ

##mysqlで新しいuserを作成していく。
参考
http://www.dbonline.jp/mysql/user/index1.html
mysqlをrootで起動

```
mysql -u root -p
```

userを作成

```
CREATE USER '<username>'@'localhost';
```

passwordを設定

```
SET PASSWORD FOR <username> = '<plaintext_password>';
```

以上。

作成したuserでログインしたい場合は。

```
mysql -u <username> -p
Enter password:
```

パスワードを入力するとログインできる。
ShinobiLayer: VMware ESXiのAPIが稼動しているかどうかの確認方法

#1. はじめに
VMware ESXiはVMware APIというものを提供しています。実は、SoftLayerで提供されるVMWare ESXiも、このVMware APIに`ibmvmadmin`ユーザーでアクセスして稼動情報を取得しているようです。この記事は、VMware ESXiのAPI Interfaceが稼動しているかを確認する方法をお伝えします。

#2. 稼動確認方法

wgetで確認可能。10.117.1.130はVMware ESXiに割り当てられているPrivate側のVMKernel PortのIPです。
オプションは随時省略して下さい。この例ではちゃんと200番が返ってきていますね。

```
[root@osc01 ~]# wget -O- --no-check-certificate --debug https://10.117.1.130/sdk/vimService.wsdl
DEBUG output created by Wget 1.14 on linux-gnu.

URI encoding = ‘UTF-8’
--2016-09-19 20:13:39--  https://10.117.1.130/sdk/vimService.wsdl
Connecting to 10.117.1.130:443... connected.
Created socket 3.
Releasing 0x0000000001803080 (new refcount 0).
Deleting unused 0x0000000001803080.
Initiating SSL handshake.
Handshake successful; connected socket 3 to SSL handle 0x0000000001803110
certificate:
  subject: /C=US/ST=California/L=Palo Alto/O=VMware/OU=VMware Engineering/CN=10.117.1.130/emailAddress=vmca@vmware.com
  issuer:  /CN=CA/DC=vsphere/DC=local/C=US/O=vcenter6
WARNING: cannot verify 10.117.1.130's certificate, issued by ‘/CN=CA/DC=vsphere/DC=local/C=US/O=vcenter6’:
  Self-signed certificate encountered.

---request begin---
GET /sdk/vimService.wsdl HTTP/1.1
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: 10.117.1.130
Connection: Keep-Alive

---request end---
HTTP request sent, awaiting response...
---response begin---
HTTP/1.1 200 OK
Date: Mon, 19 Sep 2016 11:13:38 GMT
Cache-Control: no-cache
Connection: Keep-Alive
Content-Type: text/xml; charset=utf-8
X-Frame-Options: DENY
Content-Length: 545

---response end---
200 OK
Registered socket 3 for persistent reuse.
URI content encoding = ‘utf-8’
Length: 545 [text/xml]
Saving to: ‘STDOUT’

 0% [                                                                                                                                                 ] 0           --.-K/s              <?xml version="1.0" encoding="UTF-8" ?>
<!--
   Copyright 2005-2016 VMware, Inc.  All rights reserved.
-->
<definitions targetNamespace="urn:vim25Service"
   xmlns="http://schemas.xmlsoap.org/wsdl/"
   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:interface="urn:vim25"
>
   <import location="vim.wsdl" namespace="urn:vim25" />
   <service name="VimService">
      <port binding="interface:VimBinding" name="VimPort">
         <soap:address location="https://localhost/sdk/vimService" />
      </port>
   </service>
</definitions>
100%[================================================================================================================================================>] 545         --.-K/s   in 0s

2016-09-19 20:13:39 (119 MB/s) - written to stdout [545/545]

```
Mattermostを利用してiPhoneでプッシュ通知を受ける方法

##目的
Mattermostを利用していると、チームでのやり取りを逃さないためにもモバイルアプリでの通知が重要であると思います。Mattermostには、いくつかのモバイルアプリが提供されているようですが、今回はiPhoneを利用してプッシュ通知を受けるまでの手順をメモしておきます。


##手法
AppStoreで、「Mattermost」で検索し、純正アプリをダウンロードします。
<img width="375" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/85495/3174ebce-dd9b-dce6-0043-72fe30b2c60d.png">

Mattremostが稼働しているサーバーを「http://またはhttps://」から記入します。
![image](https://qiita-image-store.s3.amazonaws.com/0/85495/86acaaa7-e500-d33a-8b50-c6642fa5574b.png)


プッシュ通知を受け取るかを聞かれますので、OKをタップします。
![image](https://qiita-image-store.s3.amazonaws.com/0/85495/de69fac8-ccbd-4409-7b61-dea893b583ee.png)


ログインをします。
![image](https://qiita-image-store.s3.amazonaws.com/0/85495/5cfc9610-58a5-64a9-f823-ea383ce0d644.png)

基本はこれだけでOKです。
ただ、プッシュ通知はデフォルトでは、チーム内での会話はプッシュされず、プライベートメッセージだけがプッシュ対象になっています。

通知をチーム内会話にも行いたい場合は、アカウントの設定から行います。
![image](https://qiita-image-store.s3.amazonaws.com/0/85495/c0c83540-fcb2-84df-a76d-28409e3b72ad.png)


![image](https://qiita-image-store.s3.amazonaws.com/0/85495/f305ed48-7cc1-12a7-0797-0e1cad1a13b8.png)

モバイルプッシュ通知で「For all activity」にすると、チーム内のメッセージもプッシュ通知の対象となります。

![image](https://qiita-image-store.s3.amazonaws.com/0/85495/1e942c3a-55bd-465e-fe01-0a16f811f5bb.png)

これで設定は完了です。
あとは、iPhone側でロック時に通知を出すか等の諸設定を行う必要があります。
きちんと設定ができれば以下のように通知が表示されます。

![image](https://qiita-image-store.s3.amazonaws.com/0/85495/aff30af7-abcf-2f1e-660e-b176155a2e9d.png)
Bitcoreを使ったトランザクションの生成(ターミナルから)

Bitcoreを使ったトランザクションの生成(ターミナルから)
Macのターミナルを使用。

・bitcoreをインストールする手順は以下の通り
https://bitcore.io/guides/full-node/


$node
var bitcore = require(‘bitcore-lib’);
var privateKey = new bitcore.PrivateKey();
// 秘密鍵を生成
var send_address = privateKey.toAddress();
// PublicKeyHash型のアドレスを生成
var receive_address = ‘1EYPYinomdFgxwYKdjzaqxyLKSHZVYMXot’;
// 再度他の秘密鍵から生成した中身の無いアドレス(サンプルとして)
＊予めsend_addressにお金を送金しておくこと。

■Get UTXOS
var Insight = require(‘bitcore-explorers’).Insight;
var insight = new Insight();
var UTXOS = ‘ ’;
insight.getUnspentUtxos(send_address, function(err, utxos) {
if (err) {
// エラー処理
} else {
UTXOS = utxos;
console.log(utxos);
}
});
■Transaction
var Transaction = bitcore.Transaction;
// トランザクションの変数を生成
var transaction = new Transaction().fee(1000) // 手数料の金額をsatoshi単位で指定
.from(UTXOS) // ■Get UTXOSの場面で取得したUTXOSを参照
.to(receive_address, 10000) // (送り先, 送金金額を指定)
.change(send_address) // 自分のアドレスへのおつり
.sign(privateKey) // 自分の秘密鍵で署名
■Broadcast
insight.broadcast(transaction, function(err, returnedTxID) {
if (err) {
// エラー処理
} else {
console.log(returnedTxID); //ブロードキャスト成功の場合、トランザクションのIDがreturn
}
});

【参照】
http://noumenon-th.net/webstrategy/2015/04/21/bitcore-2/
https://bitcore.io/api/
iOS10のプッシュ通知でカスタムサウンドが鳴らない


UserNotifications.frameworkを使ってプッシュ通知を実装しましたがカスタムサウンドが正しくならなくて困ったのでメモです。
通知ペイロードで指定したサウンドが再生されず、デフォルトの通知音が鳴ってしまう状態です。

結論としてはReleaseビルドすればちゃんと指定したサウンドがなりました。
なのでリリースすれば問題ないと思うのですが、ちょっと不安ですね。

Debugビルドだと音声ファイルが見つからないバグとかなんでしょうか・・・ (・・*)ゞ

使ったJSON（sound.mp3はCopy Bundle Resourcesに入ってます）

```JSON
{
  "aps": {
    "alert": "message",
    "sound": "sound.mp3",
    "badge": 1
  }
}
```

一応optionsのとこでsoundを設定しています（デフォルト通知音はなっているのでここが問題じゃないと思いますが）。

```swift
UNUserNotificationCenter.current().requestAuthorization(options:  [.sound, .alert, .badge], completionHandler: { ・・・
```

__再現環境__

Xcode Version 8.0 (8A218a)
iPhone5S
iOS 10.0.1
メールの暗号化の難しさ

メールの暗号化について調べたのでメモ。
主に`PGP`、加えて`S/MIME`について。


# 言葉の難しさ

メール暗号化には`PGP`と`S/MIME`がある。
…とざっくり言えれば良いのだが、`PGP`はソフトウェアの名前である。そして今使うならおそらく`PGP`をオープンにした`OpenPGP`互換の`GPG（GnuPG）`を使うことになる。それに対して`S/MIME`は規格の名前である。もうこれだけでややこしい。
`PGP`と`GPG`を同じものとして考えておけば良いのではあるが…。

`PGP`と`S/MIME`は対になっているわけではなく、`PGP/MIME`という選択肢もある。`MIME`というのはマルチパートのことで、非対応メーラーでは添付ファイルとして扱われることになる。ただの`PGP`ならテキストが本文に埋め込まれる。

`PGP`は信頼性が個人に依存するのに対して、`S/MIME`は信頼性が第三者に依存する。`S/MIME`の信頼性は`SSL`と同様に`CA`によって担保される。
`PGP`は完全に個人同士のやり取りになるので、自分が信頼を担保できるような手続きを踏む必要がある。


# 境界の難しさ

自分のPCとメールサーバーとの通信の暗号化は`TLS`で行われる。では`PGP`の意味とは…？という難しさがある。
メールサーバーに保存するときはテキストなので、そこに不正アクセスがあるとメールが見られますよって言っても不正アクセスが無いと見られないわけだし、サーバー管理者には見られますよって言っても`SSL`を使ったクレジットカード番号の送信でも同じだよね？的なややこしさがある。

何をどこまで暗号化するのが良いのか、線を引くのが難しい。
素人のユーザーに「信頼とは」みたいな概念的なことまで交えて説明する破目になる。


# 概念の難しさ

暗号化メールを送るには送り先の公開鍵が必要である、暗号化されたメールの復号化には自分の秘密鍵に設定したパスフレーズが必要である、というのが難しい。
パスフレーズ管理の責任が非常に重くなる。暗号化zipなどのパスワードをもし忘れてしまっても人に聞けば良いが、秘密鍵のパスフレーズを忘れてしまうとそこで終了である。鍵ペアを作りなおさなければいけない。（古い公開鍵を無効にすることもできない）
もちろん、本来はパスワードの管理の責任は重いものであるので、正しいと言えば正しいのだが。

`PGP`の信用の輪（Web of Trust）の概念も難しい。Webならブラウザが自動でCAのチェーンを管理していたものについて、もっと複雑なグラフを自分で把握しないといけない。
`S/MIME`の場合は`SSL`と同じような認識でも良いが、`SSL`がドメイン所有者であれば誰でも取得できるのと同様に、`S/MIME`はメールアドレス所有者であれば誰でも取得できるということを念頭に置いておかなければいけない。一般人が`EV SSL`かどうかまで気にしないのと同様に、`S/MIME`が`Class 2`かどうかも気にしないと思う。
`SSL`は1対複数が前提であるのに対して、メールは1対1が前提であるので、不特定多数向けの`S/MIME`より個人の信頼に基づいた`PGP`の方が方向性は合っているのではないかなと思っている。この辺も信頼のレベルを自分で考える必要があるので難しいポイントだと思う。

署名って何？という根本的な署名の概念の難しさもある。


# 操作の難しさ

サーバーに`SSL`を設定するような作業を個人個人でやらないといけない。
特に`PGP`は、別途`GnuPGP`をインストールして、メーラーは標準対応していないのでプラグインも入れる必要がある。

そして非対応メーラーで見た場合では、文字化けのような文章やよく分からないファイルが添付されて「何これ？ウィルス？」的な拒否反応があるかもしれない。

`PGP`を対応メーラーで見たときは、フィンガープリントを確認して信頼するかどうかを自分で決めないといけない。

ただでさえPOP3、SMTP、IMAP、STARTTLS、SSL/TLS、パスワードの認証方式、など色々選ぶ項目があるのに、そこに暗号化で更に複数方式追加で素人がどんどん置いて行かれる。


# まとめ

メールの暗号化は様々なレベルで難しい。

色々調べていて気付いたが、`S/MIME`は結構前から無料で取得できるものがあるようだ。検索すればすぐに出てくる。（ただし個人利用のみ）
Spring-bootでWebAPIのマーケットプレイスを作った

## はじめに
[引用元の記事](http://blog.apitore.com/2016/09/12/apitore-closed-beta/)
<a href="https://apitore.com/store/index.html">Apitore</a>はICT領域の技術をWebAPIで売り買いできるマーケットプレイスを提供しています。特にICT領域の研究技術を対象としていて、学会発表をする気軽さで研究技術を公開・利用できるようにすることを目的としています（会社概要は<a href="https://apitore.com/about/company">こちら</a>です）。先日Apitoreのサービスを公開し、クローズドベータを開始することにしました。現状は完全無料のサービスとなっています。クローズドベータ期間中は、１ヶ月間でAPIを100コールまで、と利用回数制限を設けています。Qiitaで情報科学技術の情報を公開されている方も一緒にAPI載せませんか？

<a href="https://apitore.com/store/index.html">WebAPIのマーケットプレイス Apitore</a>
![amarec (20170113-064626).png](https://qiita-image-store.s3.amazonaws.com/0/113163/10c8b20e-b371-ed5b-0876-6e040a2497ff.png)

<!--more-->

## ラインナップ
現状のラインナップは日本語の形態素解析器である<a href="https://apitore.com/store/apis/details?id=7">kuromoji</a>のみです。IPAdicとNeologdの２種類の辞書をサポートしています。Neologdについては以前<a href="http://blog.apitore.com/2016/07/11/kuromoji-ipadic-neologd-webapi/">こちらの記事</a>でご紹介しましたが、最新の新語を登録した辞書になります。SNS系のテキストを解析するのに役立つと思います。

## 今後について
Apitoreで扱うAPIはこれから随時増やしていく予定です。リクエストもお待ちしています。APIとして追加して欲しい技術がございましたら、この記事への返信でも構いませんし、<a href="https://apitore.com/store/threads/list">Apitoreの掲示板機能</a>でも構いませんので、ぜひご連絡ください。

また、Apitoreを通して研究技術を公開したい、あるいは研究技術の価値検証をしたい企業や研究者の方がいらっしゃれば、ぜひご連絡ください。WebAPI化のお手伝いもできます。Apitoreを使うメリットは<a href="https://apitore.com/about/target/research_engineer">こちら</a>を参照してください。現在はサービスを試行錯誤している段階ですので、ご要望にも柔軟に対応していきたいと考えています。例えば、ハッカソンイベント用に期間限定かつクローズドにAPIを公開したいというご要望にもお応えできます。

直近では、有用なOSSをWebAPI化してApitoreで公開したり、汎用なOSSをカスタマイズして有用なWebAPIを作成してApitoreで公開していく予定です。ご不便な点がございましたら、是非とも教えて下さい。よろしくお願い致します。
Laravelでrollbackができない場合の対処

#事象
laravelでmigrateしたあとにrollbackをしようとすると、以下のエラーが出る。
`Symfony/Conponent/Debug/Exception/FatalErrorException
Class {クラス名} not found`

#解決法
たぶん、laravelを使っている人はComposerを使っていると思うので
それを使ってあげればおk
`$ php ../composer.phar dump-autoload`
で
`Generating autoload files`
メッセージが出るから、もう一度
`$ php artisan migrate:rollback`
すれば無事rollback完了。
"Permission denied (publickey)"と表示されたときの対処法

```
$ git pull origin master
Permission denied (publickey).
fatal: Could not read from remote repository.
```
と表示されたときの対処法。

私の場合、このエラーが出る直前に、
次のようなコマンドを実行した覚えがありました。

```
$ ssh-keygen
```

おそらく、同名のkeyを生成してしまったため、今までのkeyが上書きされてしまったのだと思います。

このエラーに対して、私が講じた解決策は、

***SSHの鍵を作成し直し、Githubに登録し直すこと***

です。

以下、手順です。

```
$ cd ~/.ssh
$ ssh-keygen -t rsa -C address@example.com
```

// address@example\.com は自分のメールアドレス

```
$ chmod 600 id_rsa
```

以下を' ~/.ssh/config 'へ追加します。

```~/.ssh/config
Host github
  HostName github.com
  IdentityFile ~/.ssh/id_rsa
  User git
```

MacOSの方は、

```
$ pbcopy < ~/.ssh/id_rsa.pub
```

WindowsOS（WSL）の方は、

```
$ chmod 600 ~/.ssh/config
```

```
$ alias clip='clip.exe'
$ clip < ~/.ssh/id_rsa.pub
```

---

Githubの右上のリストから、Settingsを選び、
飛んだページでSSH & GPG keysを選択、
さらにNew SSH keyで出てきたフォームにペーストしてください。
//Titleは適当で構いません

最後にTerminalに戻って、

```
$ ssh -T git@github.com
```

以上です。

当記事が、どなたかの一助となれば幸いです。

## ※ 追記 ( 2018/06/26 )

Mac以外の環境では下記のコマンドが必須のようです。

```
$ ssh-add
```
Laravelのファサードの仕組み

アプリケーション内のクラスを手軽に呼べてしまうLaravelのファサードって、どんな仕組みで実現されているのか気になったので調べてみました。
と言ってもそれほど難しい仕組みではなく、オートローダ上で目的のクラスのエイリアスを登録しているだけでした。
（バージョンはLaravel5.3です）

## ファサード登録処理が実行されるまで
ファサードは目的のクラスのエイリアスを`class_alias`メソッドを使って登録して、別名で呼び出せるようにして実現されます。
実際に登録を行うのは`Illuminate\Foundation\AliasLoader`というクラスで、こいつはアプリケーションの初期化過程で、`Illuminate\Foundation\Bootstrap\RegisterFacades`クラスを経由して呼ばれます。

## AliasLoaderで行われること
初期化段階ではまだエイリアスの登録まではまだやらず、spl_autoload_registerメソッドに、自身の`load`メソッドをオートローダとして登録します。

`load`メソッドがオートローダとして呼ばれた時、呼ばれたクラス名と一致するものがconfigの`app.aliases`にあれば、`class_alias`メソッドでエイリアスを登録し、目的のクラスを別名で呼び出せるようにして、ファサードを実現しています。


## 疑問
要するに`class_alias`メソッドで、目的のクラスを別名で呼び出せるようにしているだけ、って僕は解釈しているんですけど、何故一度オートローダを経由させているのかは分かりませんでした。
（最初から全部エイリアス登録するだけじゃあかんの？みたいな）
werckerがbundle installで止まったので調べた

## 最終的な修正

* `wercker.yml`の`box`を`ruby`から`rvm`に変更
* version指定を`2.0.0`に（たぶん動くrubyのverならどれでもいい。2.1.2はだめだった。）

## 経緯

久しぶりにwercker動かしてみたら下記エラーで止まった。

```bash:
Gemfile found. Start bundle install.
bundler gem is available, and will not be installed by this step
type bundle: bundle is /usr/local/bin/bundle
bundle version: Bundler version 1.3.0
bundle install --path /cache/bundle-install/ --retry 3
Unknown switches '--retry'
```

ググってみたらissueを発見
[bundle install fails on versions before 1.4.0](https://github.com/wercker/step-bundle-install/issues/15)

こっちを見てね。と書いてあった先に
「boxをrubyの新しいやつに変えてね。rvmとか」と書いてあったので変更。

`wercker.yml`更新して再度動かすも、

```bash:
An error occurred while installing json (1.8.1), and Bundler cannot continue.
```

と出るので、versionを2.1.2指定して再挑戦。
しかし2.1.2は無いらしく

```bash:
ruby-2.1.2 is not installed.
```

指定を2.0.0にすると通った。
docker で localtime, date が UTC でおかしいので、日本時間に設定する場合の設定方法

docker の version

```
$ docker -v
Docker version 1.12.1, build 6f9534c
```

# 結論

`TZ='Asia/Tokyo'` の環境変数を設定すれば直ります。

# コマンドラインからの起動の場合

`-e TZ='Asia/Tokyo'` で環境変数を設定しましょう。

```bash
$ docker run --rm -ti -e TZ='Asia/Tokyo' mongo date
Mon Sep 19 18:10:52 JST 2016
```

# Kitematic で設定する場合

Setting > General > Environment Variables に設定しましょう。

![スクリーンショット 2016-09-19 18.21.02.png](https://qiita-image-store.s3.amazonaws.com/0/30708/a211483c-51b6-eff9-78b7-ec9f44849759.png)

# なぜ時間を日本時間にしないといけないのか

色々要因はあるのですが、僕が引いたのは memcached でした。

expired time(time) がズレます。
expired timeが設定される時には内部的には「消えるunixtime」が保存されるようで、すごい未来になってしまっていました。

クライアントがローカル（日本時間）で、ローカル上で動いているDocker（UTC）で動作させていたのも原因だと思います。（未検証）

# 参考

- https://github.com/docker/docker/issues/12084

# 上手くいかなかった方法

- http://qiita.com/ganta/items/a0f34866c994ebaeef69
    - `-v /etc/localtime:/etc/localtime:ro` をつけても変わらなくて泣いた
    - Kitematic は Volumes を変更する方法がまだない
MACアドレス(NCの物理アドレス)を調べる


# Macだったら簡単に調べられるのに…

> 普段Macを使ってるので、急に聞かれると答えられない。

コマンドプロンプトでも調べられるらしい。と言っても、最近のWindowsはコマンドプロンプトに辿り着くのも大変。

1. "Windows"キーを押しながら"X"キーを押すと、ショートカットメニューが表示される。そこから、コマンドプロンプトを選んで起動する。
2. 次に、以下のコマンドを実行する。
3. 無線LANなど, 探しているNCの物理番号を見る。

```
C:¥Users¥(USER NAME)> ipconfig/all
```

# GUIベースで。

1. "コントロールパネル"を開いて, "ネットワークと共有センター"を開く.
2. 次に, "アダプターの設定の変更"に進む. 
3. "使いたい手段(例えば, Wi-Fiとか)"で, 右クリックして"状態"を表示する.
4. "詳細"をクリックして、表示された画面で確認する。

[参考にしたサイト](https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=014380)
JIRAでカンバンゲームの準備


[Atlassian User Group Chugoku](http://augca.connpass.com/)の第３回のイベントで[JIRA](https://ja.atlassian.com/software/jira)のスクラムボードを活用したカンバンゲームを行いました。
ちなみに、[すくすくスクラム広島との共催](http://sukusuku-scrum-hiroshima.connpass.com/event/39999/)イベントでした。

ここには、イベントで使用したJIRAの設定などについて記述します。
カンバンゲームのルールについては説明しません。

元にカンバンゲームは前回すくすくスクラムで行ったカンバンゲームです。
同じゲームをJIRAを用いて行いました。ボードの運用、バーンダウンチャート作成などをJIRAですることでJIRAの使い方を学ぶことができました。

スクラムを擬似体験しつつも、JIRAの使い方を学べたわけです。

* 参考 [タスク管理や業務改善を体験できる『かんばんゲーム』がすばらしすぎる](http://daipresents.com/2013/kanban-game/)



# ゲームの概略

チケットの種類はストーリとサブタスクを使いました。
いくつかの優先順位をもったストーリーがあり、ストーリに紐づく見積もり工数をもったサブタスクがあります。
スプリントを１週間として、１日あたり、午前、午後とサイコロを２回振ります。
降った分だけ担当のタスクに対して消費時間を入力していきます。
見積もり工数分タスクをすすめると、タスクを完了させることができます。
サイコロの１が出ると問題が発生し、みんなで解決するというフローがありました。

# JIRAの準備

* スクラムボードの作成
* フィールドに時間管理を追加
* タスクをCSVからインポート
* カンバンのカードレイアウトのカスタマイズ

## スクラムボードの作成

プロジェクトを作成します。
作成時にスクラムソフトウェア開発を選べばスクラムボードができます。

![Kobito.IpXBIr.png](https://qiita-image-store.s3.amazonaws.com/0/5840/281694ae-20b5-b258-63b7-e66aba5de6a9.png "Kobito.IpXBIr.png")


### 脱線 カンバンボード

スクラムソフトウェアでなくてカンバンソフトウェア作成を選んでゲームをすることはできます。
ただし、バーンダウンチャートを自動で作成してもらうことはできません。
お好みでお選びください。

## フィールドに時間管理を追加

タスクに見積もりが設定されていたので、これを活用するために時間管理の機能をつかいました。
デフォルトでは有効になっていなかったので、

プロジェクトの管理 > フィールド > アクション > フィールドの編集 > 時間管理 > 画面 

から作成したプロジェクトにチェックをいれます。

![Kobito.9NJ6il.png](https://qiita-image-store.s3.amazonaws.com/0/5840/ca3df7c8-102f-9d29-e78c-c6917c947693.png "Kobito.9NJ6il.png")

## タスクをCSVからインポート

上部の課題メニューから課題のCSVインポートができます。

![Kobito.ELUIKs.png](https://qiita-image-store.s3.amazonaws.com/0/5840/9791fec0-4b32-c387-5edb-eb632119d26b.png "Kobito.ELUIKs.png")

CSVの形式は以下のような感じです。
著者に確認をとってないので、サンプルです。

```csv
ID,type,親ID,概要,見積もり時間,優先度
1,Story,,"S1 私はユーザとして、メッセージを読む",,4
11,Sub-task,1,"T1-1 相手ユーザを指定する",3456000,
12,Sub-task,1,"T1-2 ファイルに保存する",1728000,
```

ストーリーは３つの項目とtypeを設定しています。

* ID
* 概要
* 優先度

サブタスクは４つの項目とtypeを設定しています。

* ID
* 親ID
* 概要
* 見積もり時間 (単位: 1/60秒)

見積もり時間は秒で指定するとJIRAのドキュメントにありましたが、なぜか60分の１秒でした。

### 蛇足

分なのでやろうとおもいましたが、表示が微妙でした。
やや面倒でしたが、時間で見積もりを入力するほうがおすすめです。

## カンバンボードの設定

以下の２つを設定しました。
しなくてもゲームはできますが、やりやすくなります。

* カードレイアウト
* 見積もり

カードレイアウトの設定には消費時間の合計と初期見積もりの合計を表示しました。
残り時間は見積もりの設定をしているのでそちらで行います。

![Kobito.rXPksT.png](https://qiita-image-store.s3.amazonaws.com/0/5840/d035989d-dc17-1487-c3d6-bc1738aca31e.png "Kobito.rXPksT.png")


見積もりは見積もり統計と、時間管理の設定を数のように変更しています。

![Kobito.sSWjbZ.png](https://qiita-image-store.s3.amazonaws.com/0/5840/c2ba94c6-f1f7-35ea-21ca-060ad9f71969.png "Kobito.sSWjbZ.png")

ボード表示に各タスクで、残工数が表示できます。


# ゲームの進め方

サイコロを降ったときに「作業の記録」でサイコロで出た数字を入力してもらいました。

![Kobito.2gavSY.png](https://qiita-image-store.s3.amazonaws.com/0/5840/86d06ffa-6d7d-0aec-bb87-11741dbedc30.png "Kobito.2gavSY.png")

３がでた場合は3hと入力するだけです。

![Kobito.YC0ziV.png](https://qiita-image-store.s3.amazonaws.com/0/5840/8594f2f2-b57c-67e5-4ee9-ed5a28603c37.png "Kobito.YC0ziV.png")

これでかんたんに残り時間がわかります。

# まとめ

本記事だけではカンバンゲームの様子は伝わりませんが、みんなとても楽しんでいました。
「こんなときどんな風にチケットを使う?」
「スプリント内にタスクが終わらない?残業しましょうか?」
「完成までわずか、みんなでペアプロ(4人プログラミング)しよう」
とゲームを枠を飛び越えて実務にも役に立ちそうな議論もできていたと思います。

私はゲームに参加はしませんでしたが「CSVインポートの使い方」、「作業の記録」の使い方が学べました。

ゲームのレポートは別途誰かが書いてくれると思います。
Ecto用のstate machine 

phoenixプロジェクトでstate_mcの使い方について説明したいと思います。
[state_mc](https://github.com/leogi/state_mc)とはelixirのEcto用のstatemachineライブラリです。


# Ectoのstate_mcライブラリ
## インストール
まず、phoenixプロジェクトのmix.exsに追加します。

 ```elixir
  def deps do
    [{:state_mc, "~> 0.1.0"}]
  end
 ```
そして、`mix deps.get`コマンドを実行し、パッケージをインストールします。

## 使い方
以下のサンプルを一緒に見ましょう。
 
```elixir
defmodule Example.User do
  use Example.Web, :model

  # StateMc.EctoSMをインポートする
  import StateMc.EctoSm

  schema "users" do
    # stateカラム
    field :state, :string, default: "waiting"
  end

  # statemcとはmacroです。第一引数はステータスを格納するカラム名です。
  statemc :state do

    # defstateマクロで、ステータス配列を定義します。
    defstate [:waiting, :approved, :rejected] 

    # defeventマクロで、イベントを定義します。
    # ステータスを:waitingあるいは:rejectedから:approvedに変更するイベント
    defevent :approve, %{from: [:waiting, :rejected], to: :approved}, fn(changeset) ->
      # ここはコールバックです。changeset引数を使用して、DBにステータスを格納するなど、自由に処理できます。
      changeset
      |> Example.Repo.update()
    end

    # ステータスを:waitingから:rejectedに変更するイベント
    defevent :reject, %{from: [:waiting], to: :rejected}, fn(changeset) ->
      changeset
      |> Example.Repo.update()
    end
  end
end
```

上記のコードは:waiting, :approved, :rejectedという三つのステータスとapproveとrejectという二つのイベントを定義しました。approveイベントで、ステータスを:waitingあるいは:rejectedから:approvedに変更します。そして、rejectイベントで、ステータスを:waitingから:rejectedに変更します。

最後にステータスを変更してみましょう。

```elixir
user = Example.Repo.get(Example.User, 1)
Example.User.current_state(user) # => 現在のステータスを取得
Example.User.can_approve?(user)  # => :approvedステータスに変更できるかどうかチェック
Example.User.can_reject?(user)   # => :rejectedステータスに変更できるかどうかチェック
Example.User.approve(user)       # => :approvedステータスに変更する
Example.User.reject(user)        # => ：rejectedステータスに変更する
```

# 参考リンク
https://github.com/leogi/state_mc
フォルダ内のファイル名一覧をクリップボードにコピーする

#フォルダ内のファイル名一覧をクリップボードにコピーする

##環境
 - Windows
 - コマンドプロンプト

任意のフォルダまで移動
`cd 'folder_path'`

フォルダ内のファイル名の一覧を取得し、クリップボードにコピー
`dir /b |clip`
jqで複数の日付・時刻形式でstrptimeを試みる方法

```
cat tmp/log | jq '. | [(.timestamp | strptime("%Y-%m-%dT%H:%M:%sZ")), (.timestamp | try strptime("%Y-%m-%dT%H:%M:%s.000Z") catch . + " hoge"), null] | first(.[] | arrays)'
```

各行 → JSONオブジェクト → [timestampを一つ目の形式でパースした結果, 2つ目の形式でパースした結果] → エラーでない（＝arrayである）最初の値

というように変換するところがポイント。