OmniAICreator/Qiita-1.07M huggingface dataset:
SQLについてのインデックス

## データ操作言語 (DML Data Manipulation Language)

DMLとは、データベースにおいてデータの検索・新規登録・更新・削除を行うための言語です。


### 選択（基本）

| 項目 | 関連SQL |
|:------------:|:------------:|
|[レコードを検索](http://qiita.com/adevalue/items/0d2ef29d0a35eef1b755) | SELECT，FROM，WHERE，AND，OR |
| [指定した範囲のレコードを検索する（BETWEEN）](http://qiita.com/adevalue/items/6b452af3d4147770f8b3) | BETWEEN |
| [指定した複数の値に一つ以上一致するレコードを検索する（IN）](http://qiita.com/adevalue/items/80c82530d309f63337aa) | IN |
| [ワイルドカードを使用してレコードを検索する（LIKE）](http://qiita.com/adevalue/items/e32a118626d6c9c454df)| LIKE |
| [検索結果の列名を別名で表示する（AS）](http://qiita.com/adevalue/items/3b8c004244b0ff36f024) | AS |
| [レコードを並び替える](http://qiita.com/adevalue/items/79f8251a390a7581622f) | ORDER BY |

### 選択（結合）

| 項目 | 関連SQL |
|:------------:|:------------:|
| [選択（結合：等価結合、内部結合)](http://qiita.com/adevalue/items/58d7ef40d6144f6d9c5e) | JOIN ... ON （INNER JOIN） |
| [選択（結合：外部結合)](http://qiita.com/adevalue/items/19fe8113215f0bfee15a) | LEFT OUTTER JOIN |


### 選択（副問い合わせ）

| 項目 | 関連SQL |
|:------------:|:------------:|
| [副問合せ（サブクエリ）を行う](http://qiita.com/adevalue/items/a8ec60cafdaf02366495) |   |
| [スカラ・サブクエリ](https://qiita.com/adevalue/items/6eb186d6e8e5f36b19f2) |   |
| [相関サブクエリ](http://qiita.com/adevalue/items/1cba2575de0e46871c81) |   |



### 選択（集合演算子）

| 項目 | 関連SQL |
|:------------:|:------------:|
| [複数の検索結果を統合する（和集合）](http://qiita.com/adevalue/items/c1ca79e181f774266d4e)| UNION |
|[複数の検索結果の差集合を取得する](http://qiita.com/adevalue/items/ab96a33a704060823152)|MINUS|
|[複数の検索結果の共通するデータを取得する（積集合）](http://qiita.com/adevalue/items/ddbed4efee46e1b3ef1c)|INTERSECT|

### 削除

| 項目 | 関連SQL |
|:------------:|:------------:|
| [レコードを削除する](http://qiita.com/adevalue/items/f4650cc88afd391fd900) | TRUNCATE |


### 集計関数

| 項目 | 関連SQL |
|:------------:|:------------:|
| [集計関数を使用する](http://qiita.com/adevalue/items/55dac83230e43701ef5d) | GROUP BY、COUNT |
|[検索条件に集計関数を使用する](http://qiita.com/adevalue/items/0cd6dbc0f4ef9b990fd2)|HAVING|


### 数学関数

| 項目 | 関連SQL |
|:------------:|:------------:|
| [四則演算を行う](http://qiita.com/adevalue/items/a3ebc0d115a66c8330ef) | +、-、*、/ |



## データ定義言語 (DDL Data Definition Language)

DDLとは、データベースにおけるデータ構造を定義するために用いられる言語です。

### [SQL-データベース（Oracle SQLの概要とテーブル操作）](http://qiita.com/adevalue/items/a014b073742b974d8d26)


| 項目 | 関連SQL |
|:------------:|:------------:|
| [ビューを作成する](http://qiita.com/adevalue/items/a1d1a26140422c8f611c) | CREATE VIEW |

### インデックス

| 項目 | 関連SQL |
|:------------:|:------------:|
| [インデックス・シーケンス](http://qiita.com/adevalue/items/1a533e51f40314913b1b) |  |

## DCL データ制御言語（DCL）

利用者へのデータベースへのアクセス権の制御やデータベースの状態管理などを行ないます。

| 項目 | 関連SQL |
|:------------:|:------------:|
| [トランザクション](http://qiita.com/adevalue/items/8cb3f4809150d4ba85dc) |  |


## その他

### セキュリティー

- [SQL インジェクション](http://qiita.com/adevalue/items/ba75a3a3bb3625ca169d)

### 環境設定について

- [JDBCについて](http://qiita.com/adevalue/items/5cdb6f8a4d1d406b35fe )
Microsoft Tech Summitに行ってきました。

これは [日本情報クリエイト  Engineers Advent Calendar 2016](http://qiita.com/advent-calendar/2016/njc) による2日目の記事になります。
※慣れてないので記事の公開時期が遅れてしまいました(^^;

# 行ってみました

縁あって **Microsoft Teh Summit** に行ってきました。
IT系のイベント参加は初めてで右も左もわからず、ネットでググっても参加者のお作法等の情報が無かったので心配でしたが、なんとかなるさで参加してきました。

## 終わってみての感想

楽しかったです。
ただ色々と慣れないせいか疲れましたねー、先週末会社のイベントで行った標高1,574mの登山よりも疲れました(^^;
ネットにない情報も幾つか聞けて有意義でした。早速自分のところのDBをチューニングしてみたり刺激になりましたね。
最近の流行りである **まずは有るものを使う** をMS社も本気で実践するんだなー、1-2年後が楽しみと感じました。

## お作法(参加の流れ)

- 事前準備
  - 丁寧にMS社の方から電話連絡やメールの案内が有りましたので、なんとなく雰囲気やイベントの内容をなんとなく理解していきます。
  - 幸いイベント用のアプリが用意されておりその中にあるスケジュールビルダーにより、沢山のセミナーの中から何を選択するかはおぼろげながら見えてきました。
  - ただ実際にどのような形で行なわれるのかさっぱりわかりませんでした。立つのか座るのかも、参加型なのか聞くだけなのかもわかりませんでしたので、これと言って準備もしなかったですね。
  - ![0.PNG](https://qiita-image-store.s3.amazonaws.com/0/85663/cb0bb0c9-d5a5-9e6a-fc41-50e3634fa4ab.png)


- 受付
  - 沢山のスタツフの方にお出迎えしていただき、迷うこと無く受付ができました。
  - ![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/85663/e32c6c1a-147d-1b16-4032-c566249e8e34.png)

- 基本講演
  - スタッフに案内されるまま会場に入り、沢山の人のなか椅子に座って開始を待ちます。
  - 趣向を凝らした演出のなか、いろいろな方からこのイベントの趣旨。セキュリティ、管理、イノベーションとしてwindows 10,windows server 2016,SQL server 2016, office 365, Azure 等楽しくお話を聞きました。
- セッション
  - 基本講演の後部屋をでて、8つの部屋から希望する講演を選び、スタッフに参加者カードをみせて部屋の中にはいり、開いてる席にすわり講演を聞きます。
  - その情報は知っているなーってものから、へ～そんなの有るんだーってものまでいろいろでした。今回特に面白かったのはSQL Server 2016でした。実際にクエリ叩いて見せていただきましたが、速っ! って感じでした。
- 昼食
  - 昼食はお昼に開催される講演の際にお弁当が配られて、お弁当を食べながら講演を聞くという不思議な体験でした。ちょっと忙しなかったかな。
- 立食パーティー
  - 初日の講演終了後は立食パーティが開催され、お腹が空いていたので助かりましたー。
- ハンズオン
  -  参加型のイベントで少数の参加者で実施するタイプのイベントでした。
  -  １日目は満席だったため、二日目は朝イチで予約して参加することができました。1枠(45分)はちょっと短かったですが、人数が少ないこともあり講師に気軽に話ができて良いイベントでした。
- その他
  - 公演後の講師と話ができる **Ask the Speaker** や、　MS社のエンジニアと話ができる**Ask the Expert** が別の部屋で行なわれました。
  - **TAPIA** ロボットスタンプラリーや、スポンサーによる製品案内、MS社のデバイスの紹介など通路で実施させておりました。
- 二日目の最後の講演が終わったら解散です。
  - 最後に私が参加した講演は 元AWSのエバンジェリストが登場したりとても肩の力が抜けた楽しいパネルディスカッションでした。
  - ![2.PNG](https://qiita-image-store.s3.amazonaws.com/0/85663/10fe0deb-6e49-7055-14d6-a1549a3968af.png)
【Swift】reduceを使って配列の中身に特定のサブクラス型があるかを確認する


# reduceで配列のサブクラス確認
ある型を継承したインスタンスの配列を作ったときに親クラスが同じなら、サブクラスの型は違っても配列を作ることができます。

```swift
let anyArray :[Any] = [1, 2.2, "hello"]
```

このとき、特定のサブクラスが入っているかどうかを判定するのにreduceが便利だなと思ったのでメモします。

```swift
let anyArray :[Any] = [1, 2.2, "hello"]

let isExitString = anyArray.reduce(false, {
    flg, value in
    switch flg {
    case true :
        return flg
    case false :
        return value is String
    }
})

print(isExitString)//->true
```

## 解説
SwiftのArray型のメソッドreduceを使うと配列の要素を畳み込むことができます。
第一引数を初期値に第二引数のクロージャーで各要素の処理を書きます。
クロージャーのキャプチャリストに今までの処理の結果と、要素の値が入ります。
クロージャー処理に判別したいサブクラスの型を判定する処理を書けば、配列の要素にそのサブクラスがある配列かどうかを確認することができます。

各イテレーションのflgとvalueとresultは以下のようになります

|iteration	|flg: U	|value: T	|result|
|:-----------|:----|:----|:---|
|1|false|1|false|
|2|false|2.2|false|
|3|false|"hello"|true|

# 実践編
iOSのプッシュ通知でAppDelegateでアプリビューを特定のビューで表示したかったのです。
ビューはナビゲーションバーで管理しているのですが、メイン画面、設定画面がスタックされて、設定画面の上にさまざまな各設定詳細画面が乗っているという状態です。
で、設定詳細画面が表示されていたら設定画面まで戻るということをしたいと思っていました。
その判定をreduceで書いてみると以下のようになると思います。

```swift
///実際にやりたかったこと
class MainViewCon :UIViewController {}
class SettingViewCon:UIViewController{}
class SettingDetailCon1:UIViewController{}
let mainViewCon = MainViewCon()
let settingViewCon = SettingViewCon()
let settingDetailCon1 = SettingDetailCon1()//SettingDetailCon2, SettingDetailCon3などいろいろな設定詳細画面がある
let navi = UINavigationController()

navi.addChildViewController(mainViewCon)
navi.addChildViewController(settingViewCon)
navi.addChildViewController(settingDetailCon1)

//
let isSecond = navi.childViewControllers.reduce(false, {
    flg, viewController in
    switch flg {
    case true:
        return flg
    case false:
        return viewController is SettingViewCon
    }
})
if isSecond && navi.childViewControllers.count >= 2 {
    //設定詳細画面を表示しているなら設定画面に戻る
    navi.popToViewController(settingViewCon, animated: true)
}

```

## おわりに
reduceで検索すると数値の合計がよくサンプルコードででてくるんですが、配列の要素の型調べでも使えるかと思い記事にしました。

皆さんのお役に立てれば幸いです。
GitGraph.js で GitHub Flow のコミットグラフを書いてみる

GitGraph.js で GitHub Flow のコミットグラフを書いてみます

## GitHub Flow とは？
GitHub Flow については下記の記事を参照ください。

* [GitHub Flow 図解](http://qiita.com/tbpgr/items/4ff76ef35c4ff0ec8314)

## <i class='fa fa-download'></i> ダウンロード
```sh
$ git clone git@github.com:nicoespeon/gitgraph.js.git
```

## <i class='fa fa-flask'></i> サンプル
### <i class='fa fa-sitemap'></i> GitHub Flow サンプル
ダウンロードしてきた gitgraph.css と gitgraph.js を任意の位置に配置します。

```html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>GitGraph.js</title>
    <link rel="stylesheet" type="text/css" href="./gitgraph.css" />
  </head>
  <body>
    <canvas id="gitGraph"></canvas>
    <script src="./gitgraph.js"></script>
    <script language="JavaScript">
    var gitgraph = new GitGraph({
      template: "metro",
      reverseArrow: false,
      orientation: "vertical",
      mode: "extended"
    });
    gitgraph.template.colors = ['#CCC', '#F00', '#0F0', '#00F']
    var master = gitgraph.branch('master');
    gitgraph.commit({
      message: "tbpgr commit1",
      author: "tbpgr",
    });
    gitgraph.commit({
      message: "tbpgr commit2",
      author: "tbpgr",
    });

    var topic_a = gitgraph.branch('topic A');
    gitgraph.commit({
      message: "tanaka commit1",
      author: "tanaka",
    });
    gitgraph.commit({
      message: "tanaka commit2",
      author: "tanaka",
    });

    master.checkout();

    var topic_b = gitgraph.branch('topic B');
    gitgraph.commit({
      message: "suzuki commit1",
      author: "suzuki",
    });
    gitgraph.commit({
      message: "suzuki commit2",
      author: "suzuki",
    });

    topic_a.checkout();
    gitgraph.commit({
      message: "tanaka commit3",
      author: "tanaka",
    });
    gitgraph.commit({
      message: "tanaka commit4",
      author: "tanaka",
    });

    topic_b.checkout();
    topic_b.merge(master, { message: "merge topic b", tag: "v1.0.0", author: "tbpgr" });
    topic_a.merge(master, { message: "maerge topic a", tag: "v1.0.1", author: "tbpgr" });

    var topic_c = gitgraph.branch('topic C');

    gitgraph.commit({
      message: "kudo commit1",
      author: "kudo",
    });
    topic_c.merge(master, { message: "merge topic c", tag: "v1.0.2", author: "tbpgr"  });

    </script>
  </body>
</html>
```

* 画像

![github_flow.png](https://qiita-image-store.s3.amazonaws.com/0/43480/b6c434f6-39ae-16d8-4178-fddf32c1c364.png)

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* [Gitgraph.js](http://gitgraphjs.com/)
* [gitgraph.js - npm](https://www.npmjs.com/package/gitgraph.js/)
Gitで1ファイルの複数箇所をいじった場合にある箇所の変更だけ残してあとは捨てたい

結論→`git checkout -p foo.txt`

ある大きな1ファイルの離れた場所を何箇所もいじっており、その中で一部の変更は残したまま作業を続けたいが、不要な変更をした箇所は元に戻したいと思った。

「部分checkout」や「部分reset」みたいな一発でやる方法はないものかとググったがすぐには見つからない。

そこで考えたのは、

1. まず残したい場所だけを`git add -p`でstageにあげる
2. それを適当にコミットする
3. 該当ファイルをチェックアウトして綺麗な状態にする(不要な変更が消える)
4. `git reset HEAD^`で先ほどのコミットを未コミット状態に戻す

こういう方法しかないのかな？

該当ファイルが`foo.txt`だった場合の上記の流れを一応書くと、こう。↓

```
$ git add -p foo.txt
$ git commit
$ git checkout foo.txt
$ git reset HEAD^
```

（2016年11月23日追記）

`git stash`にも`git add`と同じく`-p`オプションがあることに気づきました。
なので、以下のようにもう少し簡単になる。

1. 残したい箇所だけを`git stash -p`で退避させる
2. 該当ファイルをチェックアウトして綺麗な状態にする（不要な変更が消える）
3. `git stash pop`で先程の退避したものを適用する

（2016年11月23日追記2）

`git checkout`にも`-p`オプションがありました…。無いと思っていたのは思い込みでした。
なので、以下だけでOK。簡単！

1. `git checkout -p`を使い、不必要な部分だけ捨てて残すところは残す。
ソースコードの整形


#Artistic Style(AStyle)
研究でソースコードの分析や評価のために，LOC(Line of Code)を用いている．
でも，人によってソースコードの記述方法が異なってしまうので，一定の測定をすることが難しい．
そこで，ソースコードを規則に従って整形してくれるツールを使っている．
Astyleと言うツール．
このツールの使い方はこんな感じ．
astyle 変換ソースコード名 変換後ソースコード名

http://astyle.sourceforge.net/astyle.html

いろいろとオプションは有るが，今は使っているのはこんなの．

--style=kr  --indent=spaces=2 -c -xe -n

|option|description|
|:---|:---|
|--style=kr|K&Rスタイル|
|--indent=spaces=2|インデントはスペース2つ分|
|-c|タブをスペースに変換|
|-n|バックアップを作成しない|
C言語によるAOP

#C言語でAOP
C言語でわざわざアスペクト指向プログラミング(AOP)をやっています．
C言語ベースなので，AOPと言っても処理系のACC(AspeCt-C)はトランスレータとして実装されてます．
ここからダウンロード可能です．最新版でもVersion0.9の開発版ですが…
[ACC:AspeCt-C](aspectc.msrg.utoronto.ca/)

現在はC言語ベースのRTOSをカスタマイズするために使わせてもらっています．

#ACCでAOP
かんたんにACCの使い方を書いときます．
アスペクトの定義(aspect.acc)はこんな感じ．
アスペクトは処理を織り込むポイントカットと処理を記述するアドバイスからなる．

```aspect.c
#include <stdio.h>
before() : execution( int main(void) ) {
	printf("called the advice before main func\n");
}
```

```main.c
#include <stdio.h>
int main() {
	printf("in main func\n");
}
```

1. アスペクトファイルとCファイルのプリプロセッサを展開．
2. 展開したファイルをACCに入力
3. 出力されたファイルをGCCでコンパイル

1.1. gcc -E aspect.c > Aaspect.acc
1.2 gcc -E main.c > Amain.mc
2. acc Aaspect.acc Amain.mc
3. gcc Aaspect.c Amain.c

こんな感じで実行ファイルが生成される．
アスペクトをACCでトランスレートすると，アドバイス部をinline関数として定義し，対象のCソースコード内で呼び出すコードを生成する．
【Excel】【数学】大まかな正規分布をかんたんな手法で出す

かんたん(すぐに出来るとは言ってない)

おおまかな正規分布の作り方

#1.=RAND()とうつだけ

![image](https://qiita-image-store.s3.amazonaws.com/0/139300/e27a0c02-3401-d4be-e5fa-ed56ca8c9137.png)

このように　どばーッ！と

3万列　×　20行しました

そして、　どっかにオートSUMで1列ごとの和を出します。

そして、細かく＝COUNTIF()で条件設定。

ちなみにやったときは、CY行にSUMで合計を出したので、
=COUNTIF($CY:$CY,"<20")
こんな感じでCOUNTIFを使いました。


#2.果たして結果は・・・?(なんでも鑑定団)

![image](https://qiita-image-store.s3.amazonaws.com/0/139300/8a4893b3-d5d4-ba6d-fcf3-9c266c542e7f.png)

ウホッ！　きれいな正規分布・・・


まぁ、乱数の期待値が0.5で20個別のものを足しているので、
まぁ0.5*20で10くらいになるのは目に見えているのですが・・


確か・・・
***中心極限定理***
とかいうのだったはずです。

理学部数学科とかに行っている(た)人なら、
前田のクラッカーと言われそうですが、

それは置いといて、

やっぱりこういう整然としたきれいなものに
心惹かれるのは
男の性とでもいいましょうか


という筆者の戯言でした、
それではまたﾉｼ
CentOS 6でRe:dashを試す


## 導入手順

### 事前準備
* yumアップデートしておく
	
	``` bash:console
	yum update
	```

### docker engineインストール

* yum repositoryの追加
	
	``` bash:console
	cat << EOF > /etc/yum.repos.d/docker.repo
	[docker]
	name=Docker Repository
	baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
	enabled=0
	gpgcheck=1
	gpgkey=https://yum.dockerproject.org/gpg
	EOF
	```

* dockerインストール
	
	``` bash:console
	yum install -y docker-engine --enablerepo=docker
	```

* 自動起動設定

	``` bash:console
	chkconfig docker on
	
	cat << EOF > /etc/sysconfig/docker
	other_args="-H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock"
	EOF
	```

* docker起動
	
	``` bash:console
	/etc/rc.d/init.d/docker start
	Starting cgconfig service:	[  OK  ]
	Starting docker:			[  OK  ]
	```

### docker-composerインストール

* docker-composer取得 & 実行権限付与
	
	``` bash:console
	sh -c "curl -L https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose"
	chmod +x /usr/local/bin/docker-compose
	```


### Re:dashセットアップ

* redashをクローン

	``` bash:console
	git clone https://github.com/getredash/redash.git /var/redash
	```


## とりあえず動かす

* 設定ファイルを用意

	``` bash:console
	cd /var/redash
	cp docker-compose-example.yml docker-compose.yml
	```

* redash起動
	
	``` bash:console
	docker-compose up
	```
【iOS】ちゃんと紐付けたはずのIBOutletがUnrecognized Selectorになってクラッシュする時に試すこと

## あれ？故障かな？
なかなか珍しい現象ですが何回か陥ったので、備忘録として残しておきます。
XcodeのInterface BuilderはiOS開発者にとってかかせないものとなっていますが、
ViewやButtonをIBOutlet/IBActionでコードに紐付けるというありふれたユースケースにて、
ちゃんと紐付いてるのに実行するとエラーで落ちる！？あれ？なんで・・・？ということが起きました。
そう、エラーの正体は単純明快、稀によく見るこいつです（笑）
```“Unrecognized Selector Sent to Instance”```

ちゃんと実装しているはずなのに動かないエラーほどフラストレーションのたまるものはありません:joy:

## 解決策
1. Interface Builderを開いて、親のViewを選択した状態でXcode右ペインのUtilitiesの一番右、
Connections Inspectorを開きます
2. 一旦、何も考えずに動作しないconnectionをすべて消します
3. 同時に該当するクラスのコードの動作しないIBOutlet/IBActionもすべて消します
4. 真ん中のペインをAssistant Editorに変えて、Interface BuilderとCode Editorが見れる状態にします
5. 先ほど消したconnectionをIB上からCtrlを押しながらコードへ一つ一つ紐づけ直します
（propertyやmethodはもう一度入力し直してください、ここが重要です）
6. 実行しましょう :arrow_forward:
7. 晴れて解決するはずです :sun_with_face:

## 考えられる原因
今思うと、ファイルの名前を別のクラスに変えてOutletを紐付けようとしたことが悪かった気がします。
ぽちぽちドラッグだけで紐づけを行っていました。が、何度正確にやり直してもダメでした。
このような現象に陥らないためにも、ファイルは新規作成してやるように心がけたいと思います。
とはいえ、Xcodeのバグのような気もしますので今後起きなくなることを願ってます。

## 開発環境
最後になりますが、参考に開発環境を記しておきます。
* Xcode 8.0
* Swift 2.3
（ちなみにXcode7, Objective-C 2.0の時も起こりました）

## 参考
[IBAction Button “Unrecognized Selector Sent to Instance” Error - StackOverflow](http://stackoverflow.com/questions/12783670/ibaction-button-unrecognized-selector-sent-to-instance-error)
HTTPはもう過去のもの！時代に取り残されるな！ 安全なHTTPS トンネリングを無料であなたのコンピューターに!

**This is a translation of the [Readme on Github for beame-insta-ssl.](https://github.com/beameio/beame-insta-ssl)** 
Hope you find it useful! :-)

**beame-insta-sslとは ?**

beame-insta-sslは、パブリック IP アドレスを必要とせずランダムなホスト名経由で HTTP または HTTPS サーバーを使ってコンピューターを安全に公開することができる無料のオープンソース　ツールです。
Beame.io 使用時、秘密鍵（private key)があなたのコンピューターまたはサーバーから流出することは決してありません。
Beameは、あなたのトラフィックを見ることはできません。
理論上では、Beame.ioがワイルドカード *. beameio.net  証明書を発行し、トラフィックに接続可能ですが、発行することはありません。これについてはフィンガー プリント証明書の確認をすることによって回避できます。

###3つの簡単な操作でスタート!

**ステップ 1:**  [ここから](https://ypxf72akb6onjvrq.ohkv8odznwh5jpwm.v1.p.beameio.net/insta-ssl)　簡単サインアップ!
**ステップ 2:** `npm install -g beame-insta-ssl` を実行します。
**ステップ 3:** 登録確認メールの指示に沿って実行してください。 beame-insta-ssl があなただけのbeameホスト名を取得し、有効な公開証明書を発行します。証明書は即座に発行されるので、トンネルはすぐに利用開始可能。 
まさにワンストップショップ!

**...でもこのサービスはngrokやLet's Encryptが既に提供しているもの、これも同じサービスですか?**

 はい。でも他のサービスは次のことが必要でした。例えば：SSL 証明書を購入する、プレミアムトンネリング サービスを購入する、TLS　Terminationを取得する(安全とは言えない)、および/または現在無料の証明書を使用している場合、DNS を再構成する。
beame-insta-sslなら、無料で安全な通信が手に入ります。
それがとっても使いやすってこともうお話し、しましたっけ？:-)

**beame-insta-sslは誰のためのもの?**

Web 開発者、web デザイナー、ブラウザー上にディスプレイされる仕事に携わるすべての人のためのもの。

**費用は**
登録時のbeame資格証明は無料で、その後も永久に無料。

**収入はどこから**

このサービスは、幅広く誰もが利用できる暗号化機能を提供します。もちろん暗号化初心者の方にも。
より高度なサービス、または企業用のサービスをご希望の場合は [beame-sdk](https://github.com/beameio/beame-sdk)をお勧めします。

beame-sdkによってオンデマンドの資格情報とトンネルを作成し、暗号化ベースの信頼されたプライベートネットワークを構築できます。
この夢のような機能は、より多くのbeame資格情報の作成して(a)バックエンドサーバの認証、 (b)モバイルクライアントの認証、(c) ユーザーの認証、(d)クラウドストレージの暗号化ができます。

**最も一般的で、効果的な活用例は何**


私は、iOS用のデベロッパーです。Webアプリケーションのバックエンドコードをテストしたいのですが、手元でテストできるならそのほうがはるかに便利です。 
Beameなら、ローカル ワークステーション内で TLS Terminationされたモバイル デバイスにローカル開発サーバーを公開することができます。

**ターミネイティングトンネルとノンターミネイティングトンネル（Terminating and non-terminating tunnel）の違いは何ですか？**
結論から言うと、ノンターミネイティングトンネルのほうが優れていますが、更なるセットアップが必要です。証明書を注入する必要があります。

**beame ドメインを失うことがあり得ますか？**
はい。phishing に利用された場合、ブラック リストに載せ、証明書の失効を行います。

**beame-insta-sslを使用するためのコマンド:**

**ステップ 1:**  サインアップはここから、人類のみ、 から発行されたあなた個人のtokenをEメール(アクセス可能なメールアドレスであることをご確認の上ご利用ください)から取得してください。https://ypxf72akb6onjvrq.ohkv8odznwh5jpwm.v1.p.beameio.net/insta-ssl
**ステップ 2:** `npm install -g beame-insta-ssl` を実行しbeame-insta-sslをインストール してください。
**ステップ 3:** 送られてきた登録確認メールのコマンドを実行します。beame-insta-ssl があなただけのbeameホスト名を取得し、有効な公開証明書を発行します。証明書は即座に発行されるので、トンネルはすぐに利用開始可能。 

ンネルを開設するためコマンド例: `beame-insta-ssl tunnel 8008 http`

安全な接続を利用したいが、サーバーに証明書をインストールしたくない場合は、上記のコマンドを使用してください。その場合下記の出力が表示されます。`Starting tunnel https://qwertyuio.asdfghjkl.v1.d.beameio.net -> http://localhost:8008`

指定したポートでサーバーを起動し (上記の例では8008) 任意の web ブラウザーでランダム Beameホスト名(上記のサンプル出力では https://qwertyuio.asdfghjkl.v1.d.beameio.net)を実行します

**Beameの資格情報が複数ある場合等には、トンネルを実行する特定のBeameホスト名を指定することもできます：**

`beame-insta-ssl tunnel 8008 http --fqdn qwertyuio.asdfghjkl.v1.d.beameio.net`


**Beameデータはどこに保存されているの？**
作成された資格情報は、ローカルコンピューター内の `$HOME/.beame` フォルダーに保存されます。次のような  `export` (`エクスポート`)コマンドを使用して指定の場所に簡単に資格情報をエクスポートできます：`beame-insta-ssl export qwertyuio.asdfghjkl.v1.d.beameio.net ./destination_folder_path`
EclipseCollectionsをプロダクトで導入した結果、メリット・デメリット

「EclipseCollectionsって何？」って方は下記をご覧ください。サンプルをいくつか記載しております。
[EclipseCollections(旧GS Collections)実践](http://qiita.com/kohei789/items/a3ab9bebd182295920da)

---

##1 導入経緯
　

- 手続き型主体の実装では冗長になっており、また元々java8には移行済み（ただし書き方はjava7と変わらず）
　だったこともあり関数型に移行したかった。
- チームの方針として一定のペースで新技術を導入していた。
- 対象プロダクトのjava使用したアプリケーションの規模感はそこまで大きいものではなかった。

　当時のチームの状況は上記で、元々冗長なコードを排除したい、新技術を導入してみたいと考えていたためEclipseCollectionsへの移行はちょうどいい規模感でした。


##2 導入するにあたって
　実は当初の予定ではjava8で提供されているStreamを使用する予定でした。
極力不要な余計なライブラリは入れたくなかったですし、Streamであれば今後もサポートされる可能性が高いためです。
　ただ、Streamを利用すると必ずStream呼び出し終端操作を加える必要があり、思ったほどコードが短くならない。誤って再利用すると例外が発生する（実行しないと分からない）ためバグの原因になりうるため導入を見送りました。
　
　EclipseCollectionsの導入対象がbatchのため、比較的他に依存しない小さなプロセスに対して仮導入・検証し開発や運用の観点で問題ないことを確認後導入しました。


##3 導入した上でのメリット・デメリット
####3．1 メリット

**① nullチェックから解放される**

　下記のようなリストを取得する度に行っていたnullチェックが不要になりました。

```title:before
List<User> users = findUsers();
if(CollectionUtils.isEmpty(users)){
  return;
}
for(User user: users){
 // 処理
}
```

```title:after
findUsers().collect(u -> //処理);
```

**②複雑な処理がスッキリする**

　条件分岐やループが絡み合うような複雑な処理でも、EclipseCollectionsのListやMap関連のリッチな関数群を使用すると、コード量が半分程度になります。

**③変数のスコープが自然と小さくなる**

　これをメリットとするのは強引かもしれませんが、関数を利用すると関数内で使用する変数のスコープは関数内のみですので、自然とスコープは小さくなり、final変数であるため他の処理との依存関係が小さく保守性が向上します。
　もちろんこれは手続き型でも実装を徹底すれば可能ですが、明文化することなくチームに普及できるメリットが有ると感じました。

```title:after
//変数uはfinal変数かつスコープはcollect内
findUsers().collect(u -> //処理);
```


####3．2，　デメリット  

**①Optionalとの連携は完全ではない。**

　例えば下記のように最初の要素を取得する場合、usersが空の場合nullが返却されます。
nullが存在しうる戻り値をOptionalで徹底している場合、Optionalでラップする必要があります。


```title:getFirst()
ImmutableList<User> users = findUsers();
// nullが渡される。
User user = users.getFirst(); 
// nullを避ける場合Optionalでラップする必要がある。
Optional<User> userOpt = Optional.ofNUllable(users.getFirst())
```

※ **ただし2016年2Q,3QにOptionalに対応したAPIを導入予定**のようです。（下記38P参照)
[Eclipse Collections 最新アップデート](http://www.slideshare.net/kanjava-jug/eclipse-collections)

**②例外ハンドリングがダサい。**

　普通に実装すると下記のようになります。個人差もあるとは思いますが人によっては違和感があるかもしれません。

```title:関数内での例外でハンドリングする場合
findUsers()
  .each( u -> { 
     try{
       imageDao.saveImage(u.getId(), u.getProfileImg());
     } catch (InvalidDataException e) {
       //例外後の処理
     }
  });

```

 もちろん、EclipseCollectionsでは、この問題に対しての解決策を用意しています。
Proceduresクラスのthrowingを利用すると簡潔に例外ハンドリングを実施できます。
ただしこれはRuntimeExceptionをラップするだけなので、プロジェクト固有の例外をハンドリングすることはできません。

```title:Procedures.throwing
findUsers()
  .each(Procedures.throwing(u -> {
    imageDao.saveImage(u.getId(), u.getProfileImg());
  }));
```

##4
　以上が導入した上でのメリット、デメリットでした。トータルで考えると導入してよかったと感じています。
まだまだアップデートされそうなので、今後を楽しみにしていきましょう。


## 参考文献

Eclipse Collections 最新アップデート (2016/1/26) 
http://www.slideshare.net/kanjava-jug/eclipse-collections
CentOS7+NVIDIA

<すこし修正：間違え＋もう少し詳細に記載>
CentOS7にNVIDIAのドライバをインストールしたので、そのメモを残しておこうと思います。
最初にNVIDIAのサイトからドライバを任意の所に保存します。
また、gcc、make、Kernel-devel、などをインストールしておいてください。

```ruby:1.アップデート
yum -y update
```

```ruby:2.gccやmakeなどのインストール
yum install kernel-devel kernel-headers gcc make
```

```ruby:3.nouveauの削除
yum uninstall *nouveau*
```


```ruby:4.再起動
reboot
```


```ruby:5.(rootになって?)レベル3にする
init 3
```

```ruby:6.rootになって、NVIDIAのドライバを保存したディレクトリに移動して
sh ドライバ名.run
```

あとはNVIDIAのドライバの指示に従ってインストールをする)

最後にランレベルを戻す

```ruby:7.(rootになって?)ランレベル5にする(root)
init 5
```

以上

追記
ついでにCUDAもインストールしました
(次はCUDAインストール方法でも書きます)
XCODE8 entitlements ファイル設定

#XCODE8での証明書記入方法

※APPNAMEは、アプリケーション名です。

XCODE8では、通知での証明書が義務付けされ entitlementsファイルが必要になります。(Capabilities > Push Notification = ON で自動作成される)
XCODE8にて、新規作成時に「APPNAME.entitlements」が自動作成される。
 
内容は以下となる。（Source codeでの表示）

```:APPNAME.entitlements
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>aps-environment</key>
	<string>development</string>
</dict>
</plist>
```

developmentのみの設定となるので、production用も作成が必要なので、新規plist作成する方法で、「APPNAME_production.entitlements」などで作成(中身をAPPNAME.entitlementsをコピーして下記のように、「development」を「production」に変更する)

```:APPNAME_production.entitlements
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>aps-environment</key>
	<string>production</string>
</dict>
</plist>
```

後、TARGETSのBuild Settings > Signing > Code Signing Entitlements に指定が必要です。

```:Code_Signing_Entitlements
Debug   APPNAME/APPNAME.entitlements
Release APPNAME/APPNAME_production.entitlements
```

以上での通知設定の証明書設定となります。
Railsで画面の一部をキャプチャして画像としてダウンロードできる機能をつけてみた。

絶賛運営中の「[THE TOURNAMENT](http://the-tournament.jp/about)」ではトーナメント表をjsで出力してて、これはこれでインタラクティブな感じにできたりといいんですが、やはり画像で保存したいというニーズも根強い。

そこで画面のこの部分だけを画像としてダウンロードできる機能をつけてみた。
よくある機能な気がしてたし余裕かと思ったけど意外とめんどくさかったです。。


## 基本方針
まずは今回の要件を完璧に満たしてくれる都合のいいgemでもないかなーと探してみたけど、たぶんない。
（もしあったら教えてください）

ただ部分部分をやってくれそうなパーツは見つけたので、それを組み合わせて今回の機能を実現します。

具体的には、

- html2canvas.jsでDOM要素を指定してcanvasに変換
- HTML5のtoDataURLでcanvasをDataURLに変換
- HTML5のdownload属性にDataURLを指定してダウンロードボタンを有効化

という感じでやりました。  

ちょっとめんどくさいけど順番に見ていきます。


## html2canvas.jsでDOM要素を指定してcanvasに変換
DOM要素をいきなり画像にしてくれるのはなかったので、canvasに変換してくれるのでがまん。
でも簡単につかえてかなり便利。

>[html2canvas](http://html2canvas.hertzen.com/)

まずは公式サイトからjsファイルをダウンロードして、railsのassets/javascriptsに配置。
application.jsから読み込んでおきます。これでとりあえず準備オッケー。

対象の要素をcanvasに変換するのは、

```coffeescript
html2canvas($(".hoge"), {
  onrendered: (canvas) ->
    // xxxxx
})
```

という感じ。$('.hoge')のとこはキャプチャしたい要素のに置き換えてくださいませ。
xxxxxのところがcanvasに変換したあとの処理になるので次にここを見てみます。

どうでもいいけど大体ドキュメントは素のjsなので、coffee script使ってるとどう書くのかいつも悩む。。


## toDataURLでcanvasからDataURLに変換
お次はこのcanvasをDataURLに変換します。

>プログラミングで飯を食え。腕をあげたきゃ備忘録！「[そもそもDataURLとは！？～canvasを画像に変換する方法（toDataURL()）！①](http://senoway.hatenablog.com/entry/2013/06/05/102833)」

そもそもDataURLって何やっけってところから復習しつつ変換。

さっきの処理に追加して、

```coffeescript
html2canvas($(".hoge"), {
  onrendered: (canvas) ->
    canvasImage = canvas.toDataURL("image/jpeg")
})
```

これだけ。
拡張子は"image/jpeg"と"image/png"が選べるみたいですな。

>HTML5.jp「[toDataURL()メソッド](http://www.html5.jp/canvas/ref/HTMLCanvasElement/toDataURL.html)」

さぁ最後はこのデータをダウンロードできるようにするだけです。


## HTML5のdownload属性つかってダウンロードリンクをつくる
そういうえばダウンロードリンクって作ったことがなくて、どうやるんかなーと調べたら
単純にリンク先がブラウザで解釈できん形式やとダウンロードするって感じなんですな。

そしてこれやと画像の場合ブラウザが解釈できちゃうので画面左上に画像だけ表示される、
みたいなよくあるかっこわるい感じになってしまう。別にいいんですけどね。

もうちょっと調べてみたらHTML5でdownload属性ってのができて、簡単にダウンロードリンクを実現できるみたいでした。
>WORKABROAD「[HTML5を使ってファイルを表示させずにダウンロードさせる方法](http://www.workabroad.jp/posts/856)」

いいですね。

というわけで、

```haml
/ views
%a.hoge(href="#" download="hogehgoe") ダウンロードリンクだよ
```

という感じの空リンクを用意しといて、DataURLが用意できたらhrefにセットします。

```coffeescript
# javascripts
html2canvas($(".hoge"), {
  onrendered: (canvas) ->
    canvasImage = canvas.toDataURL("image/jpeg")
    $(".hoge").attr('href', canvasImage)
})
```

これでリンククリックすると変換された画像がダウンロードされました！

しかし、せっかくdownload属性でファイル名指定してるのに全然効かず、download.jpegになってしまう。
hrefにDataURL指定せんかったらちゃんと反映されるから、これが悪さしてんのか。。

しばらくがんばったけど情報も少なくて解決せず。
ちょっと気持ち悪いけど我慢します。。


## Bootstrapでちょっといい感じに
最後にBootstrapのデフォルトComponentをつかってダウンロードリンクの表示をいい感じにしてみます。

やりたいことは、ダウンロードの準備ができるまではリンクボタンをLoading..表示にして、
準備ができたらクリック可能状態にするという感じ。至れり尽くせりですな。

ソースはこんなので。

```haml
    / views
    %a.hoge.btn.btn-sm.btn-default(href="#" download="hogehoge" data-loading-text="画像ダウンロードの準備をしています...")
      画像ダウンロード
```

```coffeescript
    # javascripts
    $(".hoge").button('loading')   #=> loading状態にしとく
    html2canvas($(".hoge"), {
      onrendered: (canvas) ->
        canvasImage = canvas.toDataURL("image/jpeg")
        $(".hoge").attr('href', canvasImage)
        $(".hoge").button('reset')    #=> 完了したらクリック可能状態に戻す
    })
```

なかなかいい感じに仕上がりました。
おしまい。
CircleCI + Fastlane => Deploy

## @yoneapp

- ２０１０年：学生iOS個人開発者
- ２０１２年：スタートアップの共同創業者
- ２０１５年：iOS & Railsフリーランス

## 最近のお仕事

- 個人制作のニュースアプリ
- スタートアップのお手伝い
- などなど

---

![スクリーンショット 2016-11-02 17.56.49.png](https://qiita-image-store.s3.amazonaws.com/0/6678/55ab4d71-8337-d8f7-9983-26a6a7ef1715.png)

---

## 僕の考えた最強のデプロイの話

---

```Fastfile.rb
fastlane_version "1.104.0"

default_platform :ios

platform :ios do
  lane :adhoc do
    sigh(force: true)
    gym(scheme: "Techinsight", configuration: "AdHoc")
    deploygate
  end

  lane :beta do
    sigh(force: true)
    gym(scheme: "Techinsight", configuration: "AdHoc")
    pilot(skip_waiting_for_build_processing: true)
  end

  lane :release do
    sigh(force: true)
    gym(scheme: "Techinsight", configuration: "Release")
    deliver(skip_screenshots: true, skip_metadata: true)
  end
end
```

---

```circle.yml
machine:
  timezone: Asia/Tokyo
  xcode:
    version: '8.0'
dependencies:
  cache_directories:
    - '/Users/distiller/.cocoapods/'
deployment:
  except_master:
    branch: /^((?!master).)*$/
    commands:
      - bundle exec fastlane adhoc --verbose
  master:
    branch: master
    commands:
      - bundle exec fastlane adhoc --verbose
      - bundle exec fastlane beta  --verbos
```

---

## CFBundleVersion❤Git

<img width="375" alt="IMG_3899.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/6678/41ccb664-4b6a-5e77-f0af-521112b4b480.png">

http://qiita.com/yoneapp/items/8f5a8788a4ebd82a10b4

---

## circle.ymlとFastfileなどの設定

http://qiita.com/yoneapp/items/8c3cb639b28d2d6502c1

---

## CircleCIの設定画面

![スクリーンショット 2016-11-02 18.16.04.png](https://qiita-image-store.s3.amazonaws.com/0/6678/a90e223c-6d19-6275-0b46-b3c8a262316a.png)

---


## CircleCIの設定画面

![スクリーンショット 2016-11-02 18.17.43.png](https://qiita-image-store.s3.amazonaws.com/0/6678/1f039ea0-001c-a290-82a0-d9fb8b045af7.png)

---

## 今後やりたいこと

- DeployGateの配布をbranch毎に分ける
- UDID追加の半自動化

---

## あなたの最強のデプロイ教えてください🙇
[Unity] iTweenでEaseを扱う

Easeっていうのはアニメーションの動き方？って感じです（よく分かってない）

ここを見た方が理解が早いかと
[Easeデモ](http://robertpenner.com/easing/easing_demo.html)

右で動き方を選んで、グラフ上をクリックすると、その動作の通りにボールが動くというものです。

「最初はゆっくり、中間は速く、最後はゆっくり」というアニメーションもEaseを使えば簡単に実装できます。

UnityのプラグインiTweenでこれを使ってみます。

#サンプル
```
private void easeSample(){
  iTween.ValueTo(gameObject, iTween.Hash("from", 0f, "to", 100f, "time", 1.0f, "onupdate", "setValue, "EaseType", iTween.EaseType.easeInOutQuart));
}

private void setValue(float n){ // iTween実行中に呼ばれる
  valueText.text = n.ToString(); // 数値nをuGUIのテキストに表示する
}
```

適当なサンプルです。
easeSample()で何をしているかというと、1秒間の間に数値nを0から100まで変化させるという処理をやっています。
iTweenの動作中にsetValue()が呼ばれ、数値nがuGUIのテキストに表示されます。

通常であれば（特に何も設定しなければ）nの値は時間に比例して上昇しますが、ここでは、ハッシュに"EaseType", iTween.EaseType.easeInOutQuartと登録しています。
このEasyの動きは「最初はゆっくり、中間は速く、最後はゆっくり」というものです。
つまり、nの値はこの動きに沿って上昇していきます。

他のEaseTypeを使いたければ、iTween.EaseType.easeInOutQuartの「easeInOutQuart」部分を他のタイプに変えればOKです。
[iTweenのドキュメント](http://itween.pixelplacement.com/documentation.php)を見ればどのようなタイプがあるのか把握できます。
まあ、[デモ](http://robertpenner.com/easing/easing_demo.html)を見るのが一番早いです。

2016.11.5
プログラムが間違っていたので修正

2016.11.18
EaseTypeがEasyTypeとなっていたのを修正
await-loader — CommonJS-like async modules for webpack

## TL;DR

Module loading nirvana for webpack: [await-loader](https://www.npmjs.com/package/await-loader).

````javascript
const myModule = await require('await!my-module');
````

## Rationale

Loading modules in CommonJS manner is graceful, but slows down application loading time due to all modules are built into single huge bundle. On the other side, when you use AMD, you can speed up load time, but you risk to get too complicated and terrible code.

## Existing solutions *(for webpack)*

### [promise-loader](https://github.com/gaearon/promise-loader)

Using this loader, you can asynchronously load modules like this:

````javascript
// TypeScript/ES7
const loadMyModule = require('promise?bluebird!my-module');
const myModule     = await loadMyModule();
// Do what you want.
````

or this:

````javascript
// ES6
var loadMyModule = require('promise?bluebird!my-module');
loadMyModule().then(function (myModule) {
    // Do what you want.
});
````

As you can see, this loader doesn't return loaded module immediately, instead you have to initiate loading manually, and then — do what you want with resolved promise. Also, it **requires** you to specify promise library of your choice; even if you are using native promises or already loaded promise library, you must specify promise library as `global`.

## My solution

Simple as this:

````javascript
// TypeScript/ES7
const myModule = await require('await!my-module');
// Do what you want!
````

Pros:

 *  Modules are loaded asynchronously,
 *  but without the pain and mess.
 *  Doesn't require any configuration in loader's query string.
Aerospike(3) データ構造

## データ構造について

内部向け資料で、採用しようとしているアプリケーションに対して使えそうかの感想なので、参考程度に。

Namespaceの説明あたりは[こちらの方](http://qiita.com/emonuh/items/fb502f6588c49a4ca7f6#aerospike%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E6%88%90)がちゃんとわかりやすい図付きでまとめていらっしゃいます

#### Namespace
いわゆるデータベース名みたいなもん
設定ファイルで追加し、再起動が必要となるので気軽に追加はできないのかな？

インメモリやDisk等のデータの保存先や、クラスタ内でのデータレプリケーション数、全体のデフォルトTTL等をネームスペースレベルで設定できる。

#### Sets
Key+Valueの集合
だいたいテーブルと同じイメージだけど、事前の定義は不要で自動で作られる
1023 Sets / namespace の制限

#### Record
Key + Binの集合

#### Key
説明不要
ハッシュ化されて扱われるため、ハッシュ元のKey自体は別のBinとして保存する必要がある

#### Bin
カラム 後述のデータ型を格納できる。スキーマレスで、一部のBinのみUpdateを行うことも可能

## Binとして扱えるデータ型

#### 基本データ型
- integer
  * (8Byte)
  * (SecondaryIndex)
- string
  * (128kByte)
  * (SecondaryIndex)
- bytes
- double
  * (8Byte)

#### 複雑なデータ型
- list

```
aql> select * from test.demo where PK='key'
+-----------+
| bin       |
+-----------+
| [1, 2, 3] |
+-----------+
```

- map

```
aql> select * from test.demo where PK='key'
+--------------------------+
| bin                      |
+--------------------------+
| ["str1", "str2", "str3"] |
+--------------------------+

aql> select * from test.demo where PK='key'
+-------------------------------------------------------------------------+
| bin                                                                     |
+-------------------------------------------------------------------------+
| ["string", 10, ["list", "of", "strings"], {"items":3, "of":2, "map":1}] |
+-------------------------------------------------------------------------+
```

- GeoJSON
地理空間データフォーマットらしい。知識不足でよくしらない。

- native-language serialized (blobs)
特に説明要らないと思うし、あんまり使わないと思う

### 超でかいデータを扱う
- Large Lists (LLIST)

無限にデータを格納でき、かつ高速に参照、Scanが可能
Listの各要素を別のレコードとして管理しているイメージ。
LListの各要素にTTLを設定することはできない。アプリケーションとしてScanUDFを使って実装する必要がある。
LListの各要素は特定のキーでソートされている

aerospike 3.5 くらいまで LargeMap, LargeStack, LargeSet があったけど、いつの間にかLarge List に統合されたらしい。

[Large List 詳細](http://www.aerospike.com/docs/guide/llist.html)

続く
[Swift]QiitaのAPIを叩いて記事を取得して表示するサンプルアプリを書いてみた その3


[[Swift]QiitaのAPIを叩いて記事を取得して表示するサンプルアプリを書いてみた](http://qiita.com/BlackCat/items/0f5313b5a60ca39d0b12)シリーズの続き。

##概要

[[Swift]QiitaのAPIを叩いて記事を取得して表示するサンプルアプリを書いてみた その2](http://qiita.com/BlackCat/items/81abb719313822ba5478#_reference-5eee7daab31c4b399223)を書いてからSwift3.0が公開されて、サンプルが動かなくなっていました。
いまでもストックされることがあるので、メンテナンスもふまえて、記事にしました。
ついでに、ソースコードもリポジトリを独立させました。

あ、記事は私が失敗した手順で書いていくので、同じ手順でやると失敗します。

正しい手順は

1. CocoaPodsのアップデート（--pre忘れずに）
2. Podsを更新
3. Xcodeのプロジェクトファイルを開いて、Swift3.0にコンバート
4. エラーを修正する

です。

##Podsを更新

CocoaPodsでインストールしたライブラリもSwift3.0対応されているので、まずはライブラリの更新から。

PodFileを更新。

```vim:PodFile
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
swift_version = '3.0'  
use_frameworks!

target 'QiitaAPISample' do
    pod 'Alamofire', '~> 4.0'
    pod 'ObjectMapper', '~> 2.2.0'
end

target 'QiitaAPISampleTests' do

end

target 'QiitaAPISampleUITests' do

end
```

##Xcodeのプロジェクトファイルを開いて、Swift3.0にコンバート

QiitaAPISample.xcworkspaceをXcode8.1で開くと、「コンバートするかい？」と聞かれるので、CocoaPodsで入れたライブラリのチェックを外してコンバートを実行する。
なんかこの時点でエラーになってるけど、そんなもんだと思って、気にしないことにする。
Swift3.0移行に伴って、Deployment TargetのバージョンもiOS9.0に変更。
サンプルなので好き放題。

##エラーを修正する

さて、ここまでくれば表示されているエラーを修正すれば、移行は完了！
と思ったのだが、おかしなことに気づく。

ライブラリのSwiftのバージョンが古いというエラーが出ている。

```エラー抜粋
Use Legacy Swift Language Version （略）
```

そんなことはないはずなんだけど…

##模索してみた

ひとまずおかしくなったことは確実なので、最初からやり直す。
下記のissueを参考に模索してみた。
https://github.com/Alamofire/Alamofire/issues/1526

###CocoaPodsのアップデート

```bash:コマンド
sudo gem install -n /usr/local/bin cocoapods --pre
```

インストールされたバージョンは、1.2.0.beta.1。

念のため、podのリポジトリを新しくしておく。

```bash:コマンド
pod setup
```

###PodFileを修正

Podsディレクトリを削除して、`pod install`したら、入れたいバージョンより前の物が入ってしまったので、バージョン指定した。
上に書いたものはバージョン指定済のものを記載。

###DerivedDataの中身を削除

/Users/(name)/Library/Developer/Xcode/DerivedDataの中身を削除

###Xcode8.1で開き直す

コンバートするかい？と聞かれるので、コンバート。
Deployment Targetのバージョンがおかしいよと言われるので、PodsのDeployment TargetもiOS9.0に変更。

###CocoaPods絡みのエラーが解消

一安心。
たくさん英語を読みました。

##Swift3.0に移行したことによるエラーを修正

コンバートしたことによるエラーもちらほらあったけど、Xcodeの言うとおり直せばOKでした。

一番悩んだことだけ紹介。

```swift:
import Alamofire
import ObjectMapper

class APIClient {

    func getAllItems(_ success: @escaping (([Item]) -> Void)) {
        let urlString: String = "https://qiita.com/api/v2/items"

        Alamofire.request(urlString).responseJSON { response in
            switch response.result {
            case .success(let value):
                if let items = value as? [[String : Any]] {
                    var resultItems: [Item] = []
                    for item in items {
                        // ここ！
                        resultItems.append(Mapper<Item>().map(JSON: item)!) 
                    }
                    success(resultItems)
                }
                
            case .failure(let error):
                print(error)
            }
        }
    }
}
```

```map(JSON: item)``` というように、ラベルをいれなければいけないことになかなか気づけなかった。

##ソースコード

Githubにあげました。
https://github.com/macneko-ayu/QiitaAPISample

##まとめ

簡単にできるだろうとたかをくくっていた結果、痛い目を見ました。
Swift詳しい人ならさくっとできるのだろうか。
非Rails環境で素クラスに#attributesメソッドを実装する

RailsのActiveRecord(実際はActiveModel)を使うと`attr_accessor`で定義したアクセサとアサインされた値のキーバリューを`#attributes`メソッドで取得できる。

RailsやActiveModelが無い環境の素のクラスでも`#attributes`メソッドを使いたいので、やってみた結果。黒魔術。

```rb
module Hoge
  module Concerns
    # Add feature of #attributes, #attributes=, and .attributes to super class by orverriding Module.attr_accessor.
    # ref. http://techblog.clara.jp/2014/09/ruby_attr_accessor/
    module Attributes

      def self.included(base)
        base.extend(ClassMethods)
      end

      def attributes
        self.class.attributes.map {|k| [k, self.instance_variable_get("@#{k}")] }.to_h
      end

      def to_h
        self.class.attributes.select{|k| self.instance_variable_defined?("@#{k}") }.map {|k| [k, self.instance_variable_get("@#{k}")] }.to_h
      end

      def attributes=(attrs)
        attrs.each do |k, v|
          assign_attribute(k, v)
        end
      end

      private

      def assign_attribute(k, v)
        if respond_to?("#{k}=")
          public_send("#{k}=", v)
        else
          raise UnknownAttributeError, "attribute `#{k}` can not be assinged to #{self}"
        end
      end

      public

      module ClassMethods
        def attributes
          @attributes ||=
            self.superclass.instance_variable_get("@attributes").try(:dup) || Set.new
        end

        private

        def attr_accessor(*args)
          self.attributes.merge args
          super
        end
      end
    end
  end
end
```

## 参考

[Ruby: attr_accessor を拡張する](http://techblog.clara.jp/2014/09/ruby_attr_accessor/)
Aerospike(1) EC2でクラスタを立てる

チーム内でDynamoDBをやめてAerospikeを使おうかどうしようかということで、調査依頼を受けたのでログをメモしておく。
1. サーバ構築
2. ベンチマーク
3. データ型
4. UDF

さらっと立ててみた作業ログをメモしておく。
公式に丁寧に書いてあるので、最新情報であるそっちを見たほうがいいです。


とりあえず公式に書いてあったイチオシインスタンスの r3.2xlarge を 3台構成でお試し

### サーバ構築
- ami があります。 つまり楽勝
https://aws.amazon.com/marketplace/pp/B00LW9382A/

- 公式ドキュメント的には インスタンスは r3.2xlarge がオススメらしい

- ネットワークは適当にいじる
port 3000 ~ 3004 と 8001 は 開けておく

### 各サーバのコンフィグを修正
Aerospikeの設定ファイルは `/etc/aerospike/aerospike.conf`にあります

- ネットワーク設定
ドキュメントを見ると、同じ設定でノードを立てると、勝手にクラスタに参加するよ的な書いてあるが、AWSはGCP等、マルチキャスト通信に対応していない環境では、設定ファイルをmeshネットワーク設定に修正し、再起動する必要があるらしいです。よくある話。


と、思っていたのですが、設定の変更自体は、公式を良く読んだら再起動しなくても設定によってはコマンド的なので変更できるみたいですね。
http://www.aerospike.jp/docs/reference/configuration/

設定例
```
network {
       	heartbeat {
       		mode mesh # ユニキャスト用の同期
       		port 3002 # Heartbeat port for this node.

       		mesh-seed-address-port xxx.xxx.xxx.xxx 3002 # 自分
       		mesh-seed-address-port xxx.xxx.xxx.xxx  3002 # 友達A
       		mesh-seed-address-port xxx.xxx.xxx.xxx  3002 # 友達B

       		interval 250
       		timeout 10
       	}
}
```

- ネームスペース設定
いわゆるスキーマ的なやつ。設定ファイルに追加する必要がある。

```
namespace benchmarks {
        replication-factor 2
        memory-size 8G
        default-ttl 90d

        storage-engine memory
}
```

他にも設定があるので、きちんと全項目をきちんと精査して設定値検討すること。
設定を適当にしてしまうと思わぬ重大な障害を発生させ、やらかしマン扱いされるのでかならず見てほしい。(遠い目)

### 起動

- サービス起動
ssh で 各サーバに入って起動する

```
# 起動
$ sudo service aerospike start
Starting and checking aerospike:                           [  OK  ]

# 確認
$ sudo service aerospike status
asd (pid 1138) is running...

```

- AMC(Aerospike Management Console)起動
ついでにモニタリングのサービスも起動

```
# 起動
$ sudo service amc start
Starting httpd:                                            [  OK  ]
AMC is started.

# 確認
$ sudo service amc status
AMC is running.
```

port `8081` で AMC につながります
`http://xxx.xxx.xxx.xxx:8081/#dashboard`

初期状態だと認証が必要なので、ユーザは`amc`、パスワードはEC2のインスタンスIDを入れます


全サーバでコンフィグ設定 ~ aerospike起動を行う。（AMCは一台だけ起動でおｋぽい）


AMIがあるので一瞬で終わりました。

続く
Laravel5.2のタスクスケジュールをPHPUnitで起動してみた

Laravel5.2のタスクスケジュールをPHPUnitでデバッグしてみたメモ。

# やりたいこと

タスクスケジュールに書いたロジックをデバッグしたーい


# やり方

1. いつものように、`$php artisan make:console MyTask`的なかんじで、タスクスケジュールで起動するクラスを作成。
2. ↑で作成したクラスの、$signatureを任意の値に書き換え（仮に、`$signature = 'mytask';`とでもします。
1. いつものように`$ php artisan make:test TaskTest`的なかんじでテストクラスをつくる。
2. できたテストクラスのテストメソッドで以下。肝は2で設定した$signatureの値を書いてやるだけ。

```TaskTest.php
public function testExample()
{
    $this->artisan('mytask');
}
```


あとは、いつものように↑のメソッドをデバッグ実行。あらかんたんでした。
複数オブジェクトの作成

for系の文を使わずに配列等のオブジェクトを作成する
短い記述量で作成したい
Enumerable.RepeatやEnumerable.Rangeを駆使する
ただのLINQでSelect使うだけとも言える。
LINQだな。

サンプルコード

```csharp
//ダメな奴
//同一参照のオブジェクトを返す。1つ変えると全部変わる
 var multiItems = Enumerable.Repeat(new Dummy(0,null),100 );

//OK
//最初は同じだけど別々のオブジェクト
 var multiItems = Enumerable.Repeat(0,100).Select(v=>new Dummy(v,null));

//OK
//Indexをつけたりして最初から別々にしたい場合はRangeにして↑同様に
var multiItems = Enumerable.Range(0, 100).Select(v =>new Dummy(v, null));

 //↑で使ったクラス
class Dummy
{
    public Dummy(int number,string name)
    {
        this.Number = number;
        this.Name = name;
    }

    public int Number { get; set; }
    public string Name { get; set; }

    public override string ToString()
    {
        return $"{this.Number}:{this.Name}";
    }
}
```

リストとか配列がほしい場合にぎりぎり1行で書けるから
forとかforeachを書くよりスッキリするような気もする。
ほかの人が見たことない奇怪なコードになりうる気もしなくはないが
個人的には気に入っている書き方。
iOSのApp Transport Security(ATS)に違反しているドメインを探す方法

# 方法1. nscurlを使う

- 参考: [接続先がATS (App Transport Security)に対応しているか、または例外の設定をnscurlコマンドで簡単に調べる](http://blog.kishikawakatsumi.com/entry/2015/10/19/121257)

# 方法2. CFNetworkのログを見る
- 参考: [Debugging App Transport Security](http://useyourloaf.com/blog/app-transport-security#debugging-app-transport-security)

# 方法3. SafariのWebインスペクタを使う

WKWebViewで表示したページ内の一部のcssや画像などがロード出来ない時は、SafariのWebインスペクタを使って、エラーが出ていないかを調べることができます。

- 参考: [iPhoneで表示しているページをMacでデバッグできるSafariのWebインスペクタ](http://m.designbits.jp/15011821/)
ど素人が C# で作られたサイトの dll を更新作業をした時のお話


## 状況
サイト内でとあるベンダのサービスを利用していたが、サービスの仕様変更に伴って連携するためのモジュールを変更する必要があった。
その更新モジュールのうち1つが、サイトの基盤部分でも使用している dll ファイルだった。
該当の dll を新しくするとサイト自体が死に、dll を前のままでやるとサービス連携部分が死ぬという状態。

### 正攻法と思われるもの
dll を新しくした上で、サイト自体をリビルドする。

### それを行えなかった理由
ビルド前のソースコードがなかった。
ビルドが行われたのが3年近く前で、担当が何人も入れ替わっていた上に全員退職済みだった。
(ソースは会社の財産だってことをもっと認識してほしい)

## 解決方法
`Web.config` に設定を追加し、古いバージョンが要求された場合は別のディレクトリに配置した dll を参照するようにした。

### 記述
```
<runtime>
	<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
		<dependentAssembly>
			<assemblyIdentity name="[dllの名前]" publicKeyToken="dllの署名" culture="neutral" />
			<codeBase version="[古いdllのバージョン]" href="[参照させたいdllの場所]" />
			<publisherPolicy apply="no" />
		</dependentAssembly>
	</assemblyBinding>
</runtime>
```

## どういうこと？
アセンブリバージョンのリダイレクトとかいう機能らしい。
厳密名を使わない場合は強制的に別バージョンの dll を参照させることができるらしいけど、今回は厳密名を利用していたため、別のディレクトリに配置した dll を利用するような設定を行った。
詳しくは [MSDN](https://msdn.microsoft.com/ja-jp/library/7wd6ex19(v=vs.110).aspx) 参照で。

## 注意
古い .NetFramework では動かないらしい。
ぬるぽ撲滅のために Checker Framework を入れる (with Lombok, Gradle)

[公式ガイドの通り][1] に Gradle タスクに NullnessChecker を導入したら Lombok アノテーション周りで失敗するようになったので頑張った。

Checker Framework や NullnessCheker については draftcode さんの記事を参照すると良いかも。

* [Checker FrameworkによるJavaのNullnessの静的解析 - Qiita](http://qiita.com/draftcode/items/c8d0ba6763afc7663489)

実際に動くサンプルプロジェクト:

* https://github.com/kui/lombok-checkframework

こうする:

~~~~~~~~~~~~~~~~~~~~~~~~~~~groovy:build.gradle
// ...

configurations {
    checkerFrameworkAnnotatedJDK
    annotationProcessors
}

dependencies {
    def checkerFrameworkVersion = '2.1.4'
    checkerFrameworkAnnotatedJDK "org.checkerframework:jdk8:${checkerFrameworkVersion}"
    annotationProcessors "org.checkerframework:checker:${checkerFrameworkVersion}"
    compileOnly "org.checkerframework:checker-qual:${checkerFrameworkVersion}"
    compile 'com.google.code.findbugs:jsr305:3.0.1'

    def lombok = 'org.projectlombok:lombok:1.16.10'
    annotationProcessors lombok
    compileOnly lombok
}

compileJava {
    def processors = [
            'org.checkerframework.checker.nullness.NullnessChecker',
            'lombok.launch.AnnotationProcessorHider\$AnnotationProcessor',
    ]
    options.compilerArgs = [
            '-processor', processors.join(','),
            '-processorpath', configurations.annotationProcessors.asPath,
            "-Xbootclasspath/p:${configurations.checkerFrameworkAnnotatedJDK.asPath}"
    ]
}

// ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~

補足
-----------

公式ガイドの通りに `-processor` で注釈プロセッサを明示的してしまうと、lombok の注釈プロセッサの自動起動が働く機能が無効になる。このため Lombok アノテーションを解釈するやつがいなくなりコンパイルできなくなる。javac ドキュメントにも書いてある:

> https://docs.oracle.com/javase/jp/6/technotes/tools/windows/javac.html
> __-processor__ class1[,class2,class3...]
> 実行する注釈プロセッサの名前。これを指定した場合、デフォルトの検索処理は省略されます。

なので、Lombok の注釈プロセッサも明示する必要がある。

`-processorpath` は指定しなくてもクラスパスを漁ってくれるんだけれど、こっちのほうが処理が早そうだからこうした。Checker Framework の公式ガイドもこう書いてるし。

公式ガイドでは `tasks.withType(JavaCompile).all { ...` とコンパイルタスクに片っ端から適用しているけれど、必要なのは実行時にヌルポが出るのが困るのをなんとかしたかっただけで予めすべて実行されるテストコードは対象にする必要がない。このため、`compileJava { ...` にしている。

[1]: http://types.cs.washington.edu/checker-framework/current/checker-framework-manual.html#gradle
初心者がGitを使った複数人での開発をする時の流れ

わたしが実際に行なっている、ターミナルを使った開発の流れをメモします。
リモートリポジトリをcloneした後の話になります。
一通りGit、GitHubについて調べてみたけど結局どうすればいいのかよくわからないひとはこれを見て参考にしていただければと思います。
途中、いろいろ省略の仕方があるので、慣れてきたら調べて試してみてください。

# master branchにいることを確認する
次のコマンドを打つと、branch一覧と自分が今どこにいるかが表示されるので確認します。
$マークはコマンドを打ったことを明示するためにつけているだけなので実際には打ちません。
```$ git branch```
表示例

```
* add-problem
  master
  update-css
```
master branchにいなかったら
```$ git checkout master```
でmaster branchに移動します。
不安だったらもう一度、自分のいるbranchを確認します。

# masterから新しいbranchを切ってくる
```$ git branch new-branch```
new-branchの部分は好きな名前にしましょう。
開発の内容に沿った名前にするとわかりやすいです。
これで新しいbranchを作ることができます。
# そのbranchに移動する
```$ git checkout new-branch```
new-branchのところに自分の作ったbranch名を入れます。
これで移動が完了します。
# 不安だったら移動先のbranchにいるか確認
```$ git branch```
このコマンドで不安は解消できます。
# その状態のままコードを書く
自分の担当のところの開発をしていきます！
一旦開発を中断して、しばらく経って途中からまた始める場合は、最初に自分が作ったbranchにいるか確認してから開発を始めるのが安全です。
```$ git branch```
# addしてcommitする
この作業は少し開発が進むごとに行なっていきます。
まず次のコマンドを打って自分が作ったbranchにいるか確認しましょう。
```$ git branch```
確認できたら、
```$ git add ファイル名```または```$ git add *```(全てのファイルをaddする)
をしたあと
```$ git commit -m "コメント"```
をします。

addをする前、commitをする前に
```$ git status```
と打って、現在の状況を確認すると失敗する確率が減るのでおすすめです。

途中からこの部分を[GitHub Desktop](http://qiita.com/yukiyan/items/2ea3dc5813fdba5d9cd2)を使ってやるようになりました。commitする前との差分が簡単に、綺麗に見えますし、add,commitがかなり楽なのでおすすめです。

# 自分の担当部分が終わったらpushする
全ての変更分をcommitしたらリモートリポジトリにpushして共有します。
```$ git push origin new-branch```
(new-branchは自分のbranch名に)
# Pull Requestを出す
これはブラウザ上で行います。
[GitHub Desktop](http://qiita.com/yukiyan/items/2ea3dc5813fdba5d9cd2)を使えばここがかなり楽にできます。
# mergeされたのを確認したらmaster branchに戻る
```$ git checkout master```
# localでいままで作業していたbranchを削除する
```$ git branch -d new-branch```
(new-branchは自分のbranch名に)
これで削除できます。これはしなくてもいいですが、開発が進んでいくとbranchが増えてbranch一覧がごちゃごちゃしてくるのでやったほうがいいです。
# 他の人の開発分を取り込む
```$ git pull origin master```
masterに他の人が追加した分を自分のところに取り込みます。
# 最初に戻る
1サイクルはこれで終わりです。また最初に戻りましょう。

この作業の繰り返しです。

#おまけ
add,commitをするのが怖いときは
```$ git status```
で今の状況がわかるので確認しましょう。
自分で作ったbranchで作業しているか不安、というときは
```$ git branch```
で確認しましょう。
わたしは[GitHub Desktop](http://qiita.com/yukiyan/items/2ea3dc5813fdba5d9cd2)を使っているのであまり使いませんが
```$ git diff```
コマンドを使うと差分が見られます。
くわしい使い方は[こちら](http://qiita.com/hide/items/17b970c485e803cbce08)
要件定義

###要件定義の書き方

####概要
・目的 表示されているテキストを可変にする
・課題 表示されているテキストが可変にしていない
・解決 表示されているテキストが可変になる

####仕様
・表示定義
各編集画面
　○　表示されているテキストはスクロールテキスト
各一覧画面
　○　表示されているテキストを可変にする
各詳細画面
　○　表示されているテキストを可変にする

デザイン
・とくになし

その他
・通知：
・アップデート：強制/任意
・リリース：７月案件
・その他：課題

## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/