OmniAICreator/Qiita-1.07M huggingface dataset:
【Java】後置インクリメントした変数を自己代入した場合の挙動

# 突然ですが問題です

以下のコードを実行した場合、出力される値はなんでしょうか？

```java
package sandbox;
 
/**
 * 後置インクリメントした変数を自己代入した場合の挙動確認
 *
 * @author seri
 */
public class SelfIncrement {
 
    public static void main(String[] args) {
        int foo = 10;
        foo = foo++;
        System.out.println(foo);
    }
 
}
```


「こんなアホなコード書かないよ。。」

というツッコミはさておき、このコードの挙動、わかりますか？
演算子の優先度からいうと、"="の方が"++"より弱いので「foo = foo++;」は「foo++;」と同じ結果になりそうで、 実際質問されたときには最初「11になるんじゃないですか？」と軽く答えたのですが……




出力される結果は「10」になります。

# 解説
これはコードとにらめっこしていてもらちが明かないので、javap -cでアセンブラコードを見ながら追っていきます。
※といいつつ、以下はEclipseのクラスファイルエディタの結果です

```java
// 次からコンパイル SelfIncrement.java (バージョン 1.7 : 51.0, スーパー・ビット)
public class sandbox.SelfIncrement {
   
  // メソッド記述子 #6 ()V
  // スタック: 1, ローカル: 1
  public SelfIncrement();
    0  aload_0 [this]
    1  invokespecial java.lang.Object() [8]
    4  return
      行数:
        [pc: 0, 行: 3]
      ローカル変数テーブル:
        [pc: 0, pc: 5] ローカル: this インデックス: 0 型: sandbox.SelfIncrement
   
  // メソッド記述子 #15 ([Ljava/lang/String;)V
  // スタック: 2, ローカル: 2
  public static void main(java.lang.String[] args);
     0  bipush 10           // １．オペランドスタックに10をプッシュ
     2  istore_1 [foo]      // ２．オペランドスタックの値を、
                            //     "カレントフレームのローカル変数型配列のインデックス1"（以下、配列1）に設定
     3  iload_1 [foo]       // ３．配列1の値をオペランドスタックにプッシュ（このとき入れてるのは10）
     4  iinc 1 1 [foo]      // ４．配列1の値に1を加算（この段階で配列1の値は11）
     7  istore_1 [foo]      // ５．オペランドスタックの値（10）を配列1に設定（★ここで配列1の値が11から10に代わる）
     8  getstatic java.lang.System.out : java.io.PrintStream [16]
    11  iload_1 [foo]       // ６．配列1の値をオペランドスタックにプッシュ
                            //     （次に読みだされるスタック値が10になる⇒これが出力される）
    12  invokevirtual java.io.PrintStream.println(int) : void [22]
    15  return
      行数:
        [pc: 0, 行: 9]
        [pc: 3, 行: 10]
        [pc: 8, 行: 11]
        [pc: 15, 行: 12]
      ローカル変数テーブル:
        [pc: 0, pc: 16] ローカル: args インデックス: 0 型: java.lang.String[]
        [pc: 3, pc: 16] ローカル: foo インデックス: 1 型: int
}
```

アセンブラコード上に１～６の解説コメントを入れました。
参考）http://msugai.fc2web.com/java/perform/byte.html

まとめると、「出力元であるカレントスタックにインクリメント後の値がプッシュされていないため、11は出力されない」ということのようです。

ちなみに「foo++;」にした場合は、以下のように出力されます。

```
 0  bipush 10
 2  istore_1 [foo]
 3  iinc 1 1 [foo]
 6  getstatic java.lang.System.out : java.io.PrintStream [16]
 9  iload_1 [foo]
10  invokevirtual java.io.PrintStream.println(int) : void [22]
13  return
```

これだとインクリメント後の値がカレントスタックにプッシュされているので、11が出力されることになるようです。


アセンブラコードを見る前、実行結果から推測していたときは、インクリメント後のポインタ参照がおかしくなってるのかと思いましたが、この結果だとメモリリーク的なことにはならなそうですね。
……なんにせよ、相当微妙ですが。

明らかにバグ原因になりそうなこのコードに対して、Javaのコンパイラはエラーも警告も出してくれません。
ですがFindBugsではこのコードに対して警告を出してくれます。やはりどこかのタイミングでFindBugsは実行した方がいいですね。
PhpStorm のよく使う機能まとめ


## ショートカット
* `command + shift + o` : 指定ファイルを開く
* `command + l` : 指定した行にジャンプ
* `alt + 矢印 ` : 文節を選択
* `command + 1` : プロジェクトファイル一覧を表示
* `command + 7` : ストラクチャ（クラスやメソッドの一覧）を表示

## 設定・ヘルプ
* `command + ,` : 設定を開く
* `command + shift + a` : ヘルプの検索窓を開く

## Git

### ショートカット
* `command + k` : 変更をコミット
* `command + shift + k' : 変更をプッシュ

### ウィンドウ
* `command + 9` : 変更したファイルを表示
JavaScriptでの文字列有無判定

※昔のメモからなので、今はもっと違うやり方があるかもしれない

```js
var checkstr = createSomeString();  // createSomeString()は何か文字列を返す関数
 
// checkstrがstringであり、かつ空文字でなければ処理を行う判定
if (typeof checkstr === "string" && checkstr !== "") {
    // 何らかの処理
}
```

## 解説
typeof演算子は引数である変数の型を返します。
またtypeof演算子は、引数がnullならばobjectを、undefinedであればundefinedを返すため、
上のサンプルコードでは、最初のチェックでstring以外のパターンを排除し、
次のチェックで空文字列をはじくことができるようになっています。
Slidebars.jsを使った時にスクロールイベントが発生しなくなる問題への対処


以下のように修正することで、スクロールイベントが発生するようになります。（Slidebars.js ver2.0.2 で動作確認済み）

```slidebars.css(修正前)
html,body {
  width: 100%;
  height: 100%;
  overflow: hidden;
}
```

```slidebars.css(修正後)
html,body {
  width: 100%;
  overflow-x: hidden;
}
```
【メモ】AWSクラウドロードショウ大阪 # パネルセッション関西企業によるAWSで実現した「IoTビジネス」

# 事例紹介

1. グッディ本部
  * ビーコンを使ってお客様や従業員の動線を可視化、バックヤード作業を効率化
2. ダイドードリンコ
  * スマホを介してユーザーと自販機を繋ぐ新サービスを開発中
  
# パネリスト各社のIoTビジネス

## オプテックスのセンシングによるIoTビジネス

目的：センサの付加価値を高める -> 新たなビジネス価値やソリューションの創造

1. 膨大なデータからセンサ側でデータを選別
2. クラウドにデータをアップロード
3. データを元に挙動を制御

### オプテックスのセンサ

温度など特定の値を取得するのではなく、「侵入者検知」など、ある目的のためのセンサ

### ビジネスモデル

1. 端末機器販売型(従来)
2. アライアンス型ソリューション(クラウドの発達によって可能)
3. 完結型ソリューション(自らサービスを提供)

クラウド連携でサービス提供者と協業することがメイン

### セーフメーターデータサービス

運転データの取得(加速度から運転の安全度を算出する独自アルゴリズム)
ドライブレコーダでは事故は減らない

## ラトックシステム　WiFi学習リモコン

PC・スマホの周辺機器メーカー

### WiFi学習リモコンとは

スマホからWiFi経由で接続し、家電操作する機器
AWSを使うことで外出先からも家電の操作が可能

### システム構成

1. スマホアプリからCognitoの認証や、エンドポイントの作成、AWS IoTの証明書の作成など、IoTの下準備を行う
2. 学習リモコンとAWSがMQTTで接続確立

スマホからの通信

3. スマホアプリからコマンド発行DynamoDBに書き込み
4. DynamoDBの書き込みイベントでLambdaをキック
5. LambdaかたIoT MQTTをコール、学習リモコンへ指令を送る
6. 学習リモコンからの応答をでLambdaをキック
7. DynamoDBに応答を書き込むとともに、SNSでスマホにプッシュ通知

### 今後の展望

* Alexaを使って音声認識で操作
* ものづくりからサービスへ

## ピクセラ 家庭向けIoT事業

ハードウェアからソフトウェアまで自社開発
IoT、翻訳、AR/VRにも参入

### Conteホームサービス

スマートホームサービス
一人暮らし向け、高齢者見守り用など用途に向けたプランを選択可能

「ドアが開いたらLEDライトを点灯する」といったシナリオを組み立てることで、簡単に機器同士での連携ができる

### AWS活用のメリット

求められる要素

* セキュリティ
  * ユーザー認証
  * 秘匿性
* 双方向通信
  * Websocket
* スケーリング
  * 2016-08からELBもWebsocket対応
* メンテナンス性

REST APIならAPIゲートウェイとLambdaを使える
双方向通信はAWS IoTのMQTT通信で実現

メリット

* スモールスタートが可能
* フルマネージド(保守運用の手間がへる)
* カスタマイズ性

### サーバレスアーキテクチャの開発フローの確立

Swaggerの活用

* REST APIのモデリング
* API　ゲートウェイにインポート可能

Lambdaコードのテスト

* DynamoDB localやdockerを利用した単体テスト環境

デプロイ

* Cloud Formation, CLIを使って自動化
  * APIゲートウェイのステージ、Lambdaのaliasを使った環境切り替え、バージョン管理

### 今後の展開

* 対応家電の追加
* 対応ゲートウェイの追加

# 個人的所感

サーバレスアーキテクチャの開発フローが一番面白かったのにサクッと終わってしまった...
Lambdaはテストがデプロイ前のテストがやりづらいことに定評があるのでノウハウをしっかりと聞きたかったところ。
~~M-1グランプリの事例よりもピクセラの方がサーバーレス度高いやん!~~
/systemをremountする方法

root化した端末で「/system」をremountする方法ですが、以前は

```
$ adb shell
$ su
# mount -o rw,remount /system
```

みたいな感じでやる必要がありましたが、うまくいかない場合はこうやるみたいです。

```
$ adb disable-verity
$ adb reboot
$ adb root
$ adb remount
```

ただし、最新のplatform-toolsが必要です。
【メモ】AWSクラウドロードショウ大阪 #事例紹介 サーバレスアーキテクチャで実現した「M-1グランプリ」敗者復活戦投票システム

# 「M-1グランプリ」敗者復活戦投票システムの概要

視聴者投票の実施と集計

* AWSのサーバレスアーキテクチャの作成
* 自社社員2名だけでシステム構築から運用まで対応
* 生放送や番組連動でも確実に運用できる高可用性

Webページから投票 -> 集計処理 -> 結果表示 

## Webコンテンツの提供

* Cloud front
* ELB
* EC2

## 投票データの処理

ここがサーバレス

* Kinesis
* Kinesis App
* DynamoDB

## 集計結果の表示とエクスポート

投票データはリアルタイムで集計
* 番組関係者は専用webページから閲覧
* JSON形式でエクスポート(DynamoDBのスキャン)

# AWS/サーバレスを選択した理由

ABC放送通信連携システム(2012年〜)が構築済みだけど

1. アクセスを捌き切れるか不安
  * 5年ぶりのM-1ということで注目度高
  * 敗者復活戦は重要イベント
2. スケジュール的問題
  * 専用の作り込みが必要なのに放送開始1ヶ月ほど前に使用決定・開発開始
  
## なぜAWSのサーバレスか?

* マネージドなのでアクセス集中を捌きやすい
* ドキュメントやツールが豊富

->短期間で高信頼性のシステム構築が可能

## サーバレスアーキテクチャの採用

負荷対策やバックアップをサービスに任せることで、プログラムの開発にリソースを集中できる。

### Kinesisはバースト対策に良い

* 番組連動: バーストトラフィックの発生
  * 告知によって莫大なトラフィックが発生
  * 全投票数のうち2~6割が告知後一分間
* 指定したシャード数のトラフィックはちゃんと受けてくれる
* Kinesis Enable Appで処理するトラフィックをコントロールできる

### DynamoDBで簡単集計

Atomic Counterで得票数を更新

# 番組との連動に耐えうるシステムの設計

## 安定した集計処理

Apache JMeterを使った負荷試験
-> 負荷試験に基づいてシステム構成や設定値を決定

### 集計処理プログラム

* 並列処理、パラメータチューニング
* 不正データ排除
* 強力なエラーハンドリング
* 高い汎用性

## システムの多重化

1秒たりとも止められない!

### 北バージニアリージョンにバックアップ

東京で何かあっても北バージニアで処理続行


バージニアはAWS創業の地なのでリソースが豊富

|通常時 |障害発生時  |
|:-----|:---------|
|投票データを共有し、並行して処理を行う|バックアップシステムで処理を行う|

設定などは共通化(同一のAMIから作成)

### データストレージへのバックアップ

投票データ、DynamoDB、結果データをS3に保存
-> 事後の検証・分析にも活用可能

## 運用負荷低減の試み

システム設定用のスクリプト作成
システム初期化・設定を行う対話式スクリプトを独自開発

# 個人的所感

実は一番楽しみにしてたセッション。~~Webコンテンツ配信で普通にEC2が出てきてビビったけど~~
Kinesis からLambda、DynamoDBの連携はよくやっているが、Kinesis Appは名前ぐらいしか知らないので、一度使ってみるべきだろうか。
開発に集中できるというのはサーバレスアーキテクチャの素晴らしいところ。「サーバレスアーキテクチャを採用した開発」そのものの学習コストはあるだろうし、それを面倒臭がって「EC2立てればええやん」という人もまだまだいるだろうけど、長期的な幸せを考えたら運用とかのことを考えなくて済むサーバレスはやっぱり素晴らしいと思う。
【メモ】AWSクラウドロードショウ大阪 #事例紹介 家庭用燃料電池エネファームのIoT活用事例

# 大阪ガスの紹介

関西一円のガス供給

ガス機器の商品開発から販売・施工・メンテナンスも手がける

# 家庭用燃料電池エネファームのIoT化

## エネファームとは

都市ガスの中にある水素と酸素を化学反応により発電する燃料電池
-> 化学反応時の熱を利用して給湯もできる

## IoT対応のきっかけ

エネファームのフルメンテナンスを謳っていたが、メンテ業務の負担がでかい
IoT活用による自動化で、業務を効率化したい

## システム概要

1. 機器から運転情報を送信
2. 故障などはコールセンターへ通知
3. 係員の配置
4. 運転情報の一元管理・監視

コストの柔軟性からプラットフォームにAWS使用

# 重要課題：エネファームをインターネットに接続するために

いかにガス機器をインターネットに繋げるか

## いつ、誰が接続するか?

販売・施工・使用説明までサービスショップで対応済み

インターネットへの接続は誰がする?
-> 一般的な家電とかではお客さんが自分でやる
-> でも接続率100%にするならお客さんには任せられない
-> サービスショップで対応

## 体制構築

サービスショップのスタッフはインターネットの知識がない

* スタッフ向けのマニュアル作成
* 専門業者によるサポート体制を構築(NTTフィールドテクノに依頼)

これでいけると思ってたけど...

## 課題への取り組み

* 提案の実態が掴めてなくてフォローができてない
* 施工員からの不満

解決策

* 詳細な報告書
  * 通信環境の有無（営業マンが確認）
  * 接続の結果
  * 未接続ならその理由

## ステップアップ

サービスショップからの要望

* 通信の基礎知識が欲しい <- 勉強会開催
* お客様からの質問に自分で答えたい <- QA集の整備
* 無線LAN環境のないお客様にも提案したい <- 関係会社の商社を通じて無線LANルータ販売


## まとめ

* 良いシステムも使ってもらわないと意味がない
* システムを使ってもらうには現場のことも考えながら環境を整備する必要がある
  
# IoT活用の効果

## メンテナンスの効率化

前提: 特殊な機器のためメンテナンスにも高いスキルが必要

従来は  
1. 故障の連絡
2. 毎回現場まで出動
3. 現場で故障原因の特定
4. 可能ならその場で対応(手持ちに部品がなかったりするとサイド訪問)

IoT活用で
1. エラー情報が自動で関係者にエラーで通知
2. 現場に行かなくても故障の原因を特定可能
3. 必要な部品をあらかじめ用意できる
4. 手持ちのタブレットから遠隔で発電状況を確認

その結果
* 出動件数8%削減
* 初回訪問での解決25%アップ
* 現場滞在時間1/3

## 品質管理での活用

データの蓄積・分析によって、実際にエラーが起きる前に予測が可能に


# 今後の展開

* エネファームを販売している他の事業者にもシステムを提供できるよう調整中
  * ノウハウも含めて提供するつもり
* 他の機器もIoT対応させたい
  * APIを使って他社のクラウドとの連携も進めていきたい

# 個人的所感

AWSを使ったIoTの活用例として参考になる話であったと思う。
IoT対応にあたってのハードルや導入の効果などのリアルな話を聞けたのは貴重。
APIを活用することでAWS以外のクラウドと連携するという話は他社との協業といったことを考えると、とても夢が広がリングな感じがする。
【メモ】AWSクラウドロードショウ大阪 #事例紹介 まだリプレースで消耗してるの? 近畿大学全システムのクラウド完全移行化計画

# 基本情報

* 関西最大級の総合大学
* 最近国際学部を開設
  * (余談)KinkiがKinkyと間違われるので英語名Kindai Universityに改名
* クラウドファウンディングやネット出願、人工知能型ERPなどITの導入には積極的
* 40箇所ほどの拠点をWANで接続

# リプレースへの嫌悪感

2007〜2013年でリプレースを39件
(アプリの改修などを除いた純粋なハードウェアリプレース)

* 時間がかかる
* 金がかかる
* つまらない(ハードウェア買ってデータ移すなんて誰でもできるやん)
* 喜ばれない(それどころかシステム止まったりしたら怒られる)
* 経営陣からの無理解(そんなことに金と時間をかけてんじゃねぇとか言われる)

# クラウド導入への背景

リプレースを楽にしたい
オンプレミスの仮装基盤によって集約化・可用性の向上は達成

しかし、結局オンプレなので6〜7年ほどでリプレースが必要
-> 2013年ごろからIaaSの事例が増える
-> ちょうどその頃にWeb,DNSの機関システムのリプレース計画
-> 2014年にSINETがAWSへの対応を発表

## 学内への説得

* 可用性、構築スピード、スケールアウト .etc

そんなことより**コストとセキュリティ**が求められた。

当時の責任者がITに明るかったため、パフォーマンス面での心配はなかった模様

# 全業務システム その他の移行

* 人事給与
* 財務会計
* 勤怠
* 教務
* ポータル
* .etc....

すでに仮想化基盤には移行済み
教育系のシステムの移行は困難だったので業務系のシステムの移行を実施

# 情報を外部に出すための説得材料

* コスト削減(HW, 運用, 残業代)
* セキュリティ
* パフォーマンス向上
* ディザスターリカバリ

## コスト削減

* 業務委託
  * HW  障害対応
  * HW障害対応
  * Hyper Visorのメンテ
* 職員の工数

イニシャルコストは大幅な削減
24時間365日動きっぱなしのシステムのため、ランニングは思ったほど下がらなかった

## ID管理基盤

旧システムは2004年に導入、2008年に更改

* キャンパスごとに管理が分散
* バッチ処理が遅い

バッチ処理時間が最大3日 -> 1日
パスワード変更時間 20分 -> 即時

## 図書館システム

* SIerとの交渉(図書館システムをクラウド化した実績がほぼない)
  * 図書館に限らず昔からあるシステム全般に言えること
* 運用負荷削減(ハードウェアメンテからの解放)
* 各キャンパスの図書館システムの統合
* ネットワークの統合・最適化

あるキャンパスのシステムをAWSに移行しようとしたところ、他のキャンパスからも相乗りしたいという要望が出たため、まとめてAWSへ移行。
結果的にシステムの統合やネットワークの最適化も叶った。


# 展望(要望?)

* AWSへ
  * 国内に別リージョンが欲しい
  * スナップショットを簡単にオンプレミスに残せたらさらに安心
  * 教育機関向けの料金体系があればなぁ...(24時間365日動かしているとあまり運用コストが減らない)
* アプリ
  * クラウドネイティブなアプリケーション設計
    * マネージドサービスの活用(自前で作るより可用性高い)
  * 教育系システムのクラウド完全移行(DaaS:workspaceに期待)
* XaaS(SaaS, PaaS, IaaS .etc...)の積極利用
  * いつでも新しい(より良い)サービスに柔軟な変更
* リプレースから解放され、空いた時間で考えてること
  * Active Learning Room
  * BYOD(学生・教員が私物PCを授業に活用)
  * IoT, 機械学習, その他

# 個人的所感

序盤のリプレースへの嫌悪感のあたりの話は怨嗟に満ちていたが、話が進むにつれてだんだんと講演者の顔が生き生きしてきていたのが印象的であった。最後に語ってた展望のあたりとか本当に楽しそうだった。

基調講演にもあった「運用とかそういったことから解放されて、より本質的で面白いことをやろう」という話に説得力が感じられた次第である。
【メモ】AWSクラウドロードショウ大阪 #スペシャルセッション2 シスメックスにおけるクラウド活用戦略

# 会社概要

臨床検査機器やソフトウェアの開発・製造・販売
ここ数年増収増益続きの優良企業
海外売上比率が80%以上（クラウド利用の伏線）


## インフラ環境への期待

* グローバル24/7サポート
* 迅速な対応
* セキュリティ

## クラウドへの取り組み

* セキュリティガイドラインの動向把握
* セキュリティポリシー作成
* クラウドサービス評価表の作成

結構慎重派

## AWSへの評価

* マーケットリーダー
* コミュニティの存在
* ユーザーの声を反映

特にコミュニティが活発なことが高評価

# ケーススタディ

品質苦情情報管理システムプロジェクト
重篤なインシデントなら行政に報告する必要があるなど、ややこしいワークフロー

## インフラ選択への考察

* システムアーキテクチャ
* 要求される稼働率
* 長期的な記録保存(最低15年)

## 医療業界でのシステム構築上の注意点

* 薬機法を遵守(バリデーション)
 * 意図する用途への適用 
 * 開発・運用の適切な管理
 * 計画・活動の文書記録
* コンピュータ化システム適正管理ガイドライン

## クラウド導入支援パートナー

* NTT docomo ドコモ・クラウド パッケージ
* Class Method 日本に5社だけのプラチナパートナー
* Hitachi,Feeler System バリデーション文書作成の支援

## 活動の振り返り

* インスタンスの調達 めっさ早い
* 運用管理 第三者認証の理解と活用
* 検証作業の労力 まだクラウドフォーメーションをログとするのはハードルが高い

# 今後に向けて提言・展望

* 要件を踏まえてオンプレかクラウドかは慎重に考察
* コミュニティへの参加　知見の共有
* 引き続きAWSには頑張って欲しい

# 個人的所感

めっちゃ早口やった...

医療機器というこれまたセキュリティに厳しそうな業界の事例が聞けたのは嬉しいところ。
環境構築を自動化して、コードをドキュメントとしたいところは完全に同意(クラウドフォーメーション上手く使えないけど)。AnsibleとかPuppetとかの思想がより広い範囲に広がってきた感じでしょうか。
コードをそのまま環境構築のドキュメントとみなすというのは他業界にはまだまだハードルが高そうだけど、まずはIT界隈の中で推進していきたいところ。「自動化してコードを残せばそれがドキュメントになる」っていうのは良い文化だと思う。
【メモ】AWSクラウドロードショウ大阪 #スペシャルセッション1 AWSとインテルが取り組むクラウド・イノベーション

# インテルの成長モデル

* 新しいサービス -> デバイスを増やす
* 新しいデバイス -> サービスの進化

サービスとデバイスの相互作用でビジネスを進化させる。

## クラウドサービスプロバイダーの成長率

インテル製のCPUのクラウド事業者への出荷数は年々増加  
インテルとしてもクラウド事業者との関係は重要視している

# AWSとインテルの協業

CPU&メモリ消費量、I/O消費量に応じて多様なインスタンスタイプを用意  
->それらに応じたCPUなどの部品を使用

## AWSを支えるテクノロジー

共同でインテルXeonプロセッサをカスタマイズ

* AES-NI 暗号化と復号
* ターボブーストテクノロジー ピーク時にプロセッサを高速化
* AVX2.0 浮動小数点の計算を高速化

最適化されたプロセッサをEC2に採用

## 最適化されたインスタンスの活用事例

* Novaltis ハイパフォーマンスのインスタンスでコストを65%削減
* Flipboard C1、M1などのインスタンスにSSDを使ってパフォーマンス向上

# クラウドの波

* IoT - IoTレファレンスアーキテクチャ
* ディープラーニング 

# 事例

## MICHAEL J.FOX Foundation

パーキンソン病の治療機関
ウェアラブルデバイスからデータを送り、患者の容体の把握や有効な薬の予測などに活用

## スマートシティ

センサーから大気汚染のデータを収集
人口集中や交通渋滞などをデータから把握

# 個人的所感

なんかひたすら製品を紹介された印象  
すごいということはわかるけど、ソフトウェア開発側の立場としては普段意識することのない分野なので「お、おう...」って感じ。
今後機械学習とかに手を出すならそれなりにパフォーマンスの出せるインスタンスが必要になるかと思うので、紹介されていたようなハイパフォーマンスインスタンスの活用も念頭に置くべきか。
【メモ】AWSクラウドロードショウ大阪 #基調講演

# カスタマーファーストへのこだわり

1. 顧客体験の向上
2. 顧客数増加
3. 出店社の増加
4. 品揃えの改善

ここに加えて徹底した低コスト

## 新たな顧客体験

* Amazon dash
* Amazon echo

テクノロジーで今までできなかったことを実現する  
-> 膨大なデータ処理が発生するためオンプレでは困難

# クラウドリソースの活用

クラウドは**必要な時に、必要なだけ低価格**で利用可能  
もはやクラウドへ移行するかどうかではなく、クラウドをどう利用するかが問題となっている。

* 俊敏性
* コスト
* 運用負荷の低減

## 俊敏性　IoT あらゆるものが「賢くなる」世界

製造、交通、エネルギー、家電、ヘルスケアなど幅広い用途に利用可能

IoTブームの要因
* センサー技術の発達、低コスト化
* クラウドの発展

IoTを成功させるにはスモールスタートして、実証・改善のサイクルを回すことが重要  
クラウドを使えばそのサイクルを非常に早くすることができる  
(クラウドならインフラの用意が非常に容易かつ早くできるため)  

## コスト

クラウドなら必要な時に必要な分だけのリソースを用意できるので、コストの無駄がない。

|      |オンプレ|クラウド|
|-----:|------:|-----:|
|リソース|あらかじめ余裕を持って準備|必要最低限な分だけ準備|
|ピーク後の対応|トラフィックのピークを過ぎても余剰リソースが動き続ける|ピークを過ぎたら不要なリソースを破棄|

## 運用負荷の低減

従来型のオンプレミスシステムだと運用に手を取られて  
本当にやりたいことをなかなかできない

||オンプレ|クラウド|
|-----:|------:|-----:|
|付帯的な作業(保守運用など)|70%|30%|
|本質的な機能(新機能開発など)|30%|70%|

今まで運用などの守りのITに携わっていた人たちが、より本質的な業務に参加できる。  
-> 人材の有効活用にも繋がるし、そっちの方が楽しい

### VMWare on AWS

VMWareのコンソールからシームレスにAWSシームレスに移行する機能を開発中  
各企業がAWSへの移行を加速される見込み

# クラウド時代のセキュリティ

ほとんどの人がクラウドのセキュリティを不安視する。

以下三社からお墨付き

* NTT docomo 
* Sony Bank
* freee

NTT、金融、会計とセキュリティに非常に厳しい分野の会社からも認められている模様。  

その他認証、ガイドラインなどの審査を受けている。  


# 個人的所感

これまでは「クラウドを使うかどうか」を問題視していた人が多かったけど、もはやクラウドを使うのは前提で、それをどう上手く使うかが重要になっている模様。
個人的にはクラウドを勧めた時に「セキュリティがー」みたいに言われることが減ってきているのは嬉しい限り。
~~ぶっちゃけ、どう考えてもその辺の企業が自前でサーバ構築するよりセキュアだと思う~~
とはいえ、まだまだクラウドへの移行に躊躇している人もいる模様。

今後クラウドを活用するにあたってはIoTは避けて通れないという印象。
各企業が「IoTやりたいけど、具体的にどうしたらいいかわからん」と思っていた状況が続いていたけど、ポツポツと事例が出てきたことで、それに続こうというところが増えてくるのではないか。
【Unity拡張】Sceneビューのカメラの移動速度を変更する.

#はじめに
UnityのSceneビューのカメラの移動速度を変更する方法を調べてみました。

Unityのバージョンは**5.5.0b7**です。

#Unity内部のソースコードを読んでみる
UnityにはSceneビューのカメラ速度にアクセスする機能が用意されていないみたいです。

そこで、下記URLのUnityエンジンのソースコードからSceneカメラに関するコードがどこにあるのかを探してみます。
https://github.com/MattRix/UnityDecompiled

#Sceneカメラの移動速度はSceneViewMotion.csにある
ソースコードを読みすすめてみたところ、それらしきクラスを見つけました。

SceneViewMotion.cs
https://github.com/MattRix/UnityDecompiled/blob/master/UnityEditor/UnityEditor/SceneViewMotion.cs

この中の、```s_FlySpeed```がSceneカメラの移動速度に該当するようです。

#移動速度を無理やり書き換える。
```SceneViewMotion``` は非公開のクラスなので、C#のリフレクションを使って無理やり書き換えてやります。

```Test.cs
using System.Reflection;
using UnityEngine;
using UnityEditor;

[InitializeOnLoad]
public class Test
{
    static Test()
    {
        var asm = Assembly.Load("UnityEditor.dll");
        var typeSceneViewMotion = asm.GetType("UnityEditor.SceneViewMotion");

        Event e = null;
        SceneView.onSceneGUIDelegate += (sceneView) =>
        {
            e = Event.current;
        };

        var s_FlySpeed = (FieldInfo)typeSceneViewMotion.GetMember("s_FlySpeed", BindingFlags.Static | BindingFlags.NonPublic)[0];
        EditorApplication.update += () =>
        {
            float speed = 0.5f;
            if (e != null && e.shift)
            {
                // Shiftキーが押されていたら5倍速
                s_FlySpeed.SetValue(null, speed * 5f);
            }
            else
            {
                s_FlySpeed.SetValue(null, speed);
            }
        };
    }
}
```

上記のスクリプトをプロジェクトに入れてやると、Sceneカメラの移動速度がゆっくりになります。

#実行してみる
通常のカメラ移動と上記スクリプト適用した場合のカメラ移動を比較してみました。

##通常のSceneカメラ移動
![NormalSceneCamera.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/b54728da-7966-2150-e8b4-4a396d92f106.gif)
Sceneビューを右クリックしながらWとSで前後移動させています。

##上記スクリプトを適用した場合のSceneカメラ移動
![SlowSceneCamera.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/b7adcf03-29ae-a50b-cac7-f96104c10365.gif)
カメラがゆっくり移動するようになりました。　
カメラの移動速度が変更できていることが確認できます(完)
(Macで) Google Chrome を別のユーザデータで動かす

## tl;dr

例:

`open -n -b com.google.chrome --args --user-data-dir=/Users/username/AnotherUserData`

### どういうときに使うの？

- シークレットモードを使いたくない(そこで行う作業はウィンドウを閉じてもクッキーなどが持続して欲しい)
- プロフィールで分けたくない(他にプロフィールを作りたくない、存在を知られたくない)
- Google Chrome のデータを特定のストレージに保存したい
    - Google Chrome のデータを、たとえばブートドライブの SSD に入れたくない(容量を消費させたくない)
    - この場合、ストレージの I/O 分だけパフォーマンスが低下する可能性はあります

### コマンドラインからの指定オプションについて

`--user-data-dir=<ディレクトリ>` を付けて起動させることで、そのディレクトリにユーザデータが作られます。ちなみにプロファイルはユーザデータの中の概念みたいです。

### open とは

あんまり詳しくないので雑に説明すると

- `-n` すでに起動していても新しくアプリを開く
- `-b` 指定されたパッケージ名でアプリを開く
- `--args` 指定された引数を開くアプリに渡す

という感じです。

ここら辺が分かれば Windows でもそれ以外の OS でもできるはず。
WordPress の esc_html_e() と esc_html() が紛らわしかったのでメモ

## 海外製のテーマによく出てくる esc_html_e()

WordPressで海外製のテーマをいじっていると `esc_html_e()` という関数がいっぱい出てくる。

`esc_html` ということはHTMLの何かしらのエスケープだろうし、`_e` ということは何かしらの翻訳なんだろうけど…と思いつつほったらかしていたので、改めて Codex をチェック。

[Function Reference/esc html e « WordPress Codex](https://codex.wordpress.org/Function_Reference/esc_html_e)

うん、まあそのままか。

```php
esc_html_e($text, $domain);
```

のように、引数にエスケープしたいテキストとドメイン名（翻訳ファイルのありかを指す…らしい）を指定すればよいとのこと。


## 日本人なら esc_html() やろが！

…いや日本人に限らず、ですが。通常のクライアントワークではテーマファイルを多言語化することなどまず無いので、`esc_html()` で十分ですよね。

```php
esc_html($text);
```

引数にテキストを指定するだけ。わかりやすい。


## esc_html() と esc_html_e() の決定的な違い

というわけで、テーマファイル内の `esc_html_e()` を `esc_html()` に書き換えていたところ、「あれ？テキストが表示されない…」という事態に。

それもそのはず、 `esc_html_e()` は関数内に `echo` を含んでいるので「記述するだけでテキストを出力する」のですが、 `esc_html()` はただ値を取って来るだけなので、 `echo` で出力してあげねばなりません。



```html+php
■ esc_html_e() を用いた出力
<?php esc_html_e('Pen-pineapple-apple-pen', 'picotaro'); ?>

■ esc_html() を用いた出力
<?php echo esc_html('Pen-pineapple-apple-pen'); ?>
```

こういうことですね。

## あとがき

どっちかにあわせてちょうよ。
[Javaの小枝] 末尾再帰を(少しだけ)見易く書く

# 末尾再帰最適化とは

後で書く

# Java で末尾再帰最適化

なんかそんなお題があるらしい。といっても当然、VMのサポートがないので所詮なんちゃってなんだけど、再帰的に書いたように見えるコードをループっぽく実行していく簡素なフレームワークを書く、というお題なのかしらん？

# 準備

```TailRecurr.java
	protected static class TailRecurrFunc<I, O> {
		private Function<I, Tuple3<I, Boolean, O>> body;
		public void bind(Function<I, Tuple3<I, Boolean, O>> body_) {body = body_;}
		public O call(I i) {
			Tuple3<I, Boolean, O> cursor = new Tuple3<>(i, true, null);
			while (cursor.cdr.car) cursor = body.apply(cursor.car);
			return cursor.cdr.cdr.car;
		}
	}
	
	public static class TailRecurrFunc3<I1, I2, I3, O> extends TailRecurrFunc<Tuple3<I1, I2, I3>, O> {
		public O call(I1 i1, I2 i2, I3 i3) {return super.call(new Tuple3<>(i1, i2, i3));}
		public TailRecurrFunc3(_TailRecurrFunc3<I1, I2, I3, O> body) {bind(tpl3 -> body.calculate(tpl3.car, tpl3.cdr.car, tpl3.cdr.cdr.car));}
	}
	public static <I1, I2, I3, O> Tuple3<Tuple3<I1, I2, I3>, Boolean, O> complete(O o) {return new Tuple3<>(null, false, o);}
	public static <I1, I2, I3, O> Tuple3<Tuple3<I1, I2, I3>, Boolean, O> tail(I1 i1, I2 i2, I3 i3) {return new Tuple3<>(new Tuple3<>(i1, i2, i3), true, null);}
	public static interface _TailRecurrFunc3<I1, I2, I3, O> {public Tuple3<Tuple3<I1, I2, I3>,Boolean,O> calculate(I1 i1, I2 i2, I3 i3);}
```

こんなの用意。

# 末尾再帰でフィボナッチ

一つ前の自分の記事をそっくり真似して。

```Fibonacci.java
	public static TailRecurrFunc3<Long, Long, Long, Long> fibonacciTailCall = new TailRecurrFunc3<Long, Long, Long, Long>(
				(n1, n2, n3) -> {
					if (n1 == 0) return complete(0L);
					if (n1 == 1) return complete(n2);
					return tail(n1 - 1, n2 + n3, n2);
				}
	);
	
	public static void main(String[] args) {
		System.out.println(fibonacciTailCall.call(50L, 1L, 0L));
	}
```

こんな感じ。少し見易い？あんまり変わらない？ (ちなみに complete と tail は static import する想定)
Dexie.jsでIndexedDBを使ってみる

Dexie.jsでIndexedDBを使ってみる


IndexedDBに興味を持ったので使ってみようと思いましたが、素で使うのは大変そうなのでDexie.jsというライブラリを利用して、IndexedDBに少し触れてみたいと思います。
[公式ドキュメント](https://github.com/dfahlander/Dexie.js/wiki/API%20Reference)もあります。

今回はChomeの最新版で試してみます。

IndexedDBはqiita製のメモアプリ「Kobito」にも使用されているようです(多分)


### DB定義

AppDatabaseがDB名になります

```js
var db = new Dexie('AppDatabase');
```

### ストア定義

ストアとは、平たく言えばテーブルみたいです。

```js
db.version(1).stores({
  notes: "++id, title, body, *tags, updated_at"
});
```

今回は以下のようなストアとなります

|  |  |
| -------- | --------|
| ストア名 | notes |
| 主キー | id |
| その他のキー | title, body, tags, updated_at | 

キーには主キーやユニークキーを設定できます。

|  |  |
| -------- | --------|
| ++ | オートインクリメントな主キー |
| & | ユニークキー |
| * | 複数可(array) | 
| [A+B] | 複合index |

### DBの更新

ストアを更新したりストアの削除・追加をするには、古い定義を残したまま、新しい定義を追加していきます。その際にバージョンを1ずつ上げていくようです。

```js
// バージョン1
db.version(1).stores({
  notes: "++id, title, body, *tags, updated_at"
});

// バージョン2 usersストアを追加
db.version(2).stores({
  notes: "++id, title, body, *tags, updated_at",
  users: "++id, name"
});

// バージョン3 notesストアにgoodを追加
// 更新時にtagsにgoodがあったら、新しく追加したキー「good」にtrueを入れるようにします。
db.version(3).stores({
  notes: "++id, title, body, *tags, good, updated_at",
  users: "++id, name"
}).upgrade(function() {
  return db.notes.modify(function(note) {
    if (note.tags.indexOf('good')) {
      note.good = true;
    }
  });
});
```

### データ追加(add/bulkAdd)

```js
db.notes.add({
  title: "タイトル",
  body: '本文',
  tags: ["IndexedDB", "Dexie.js"],
  updated_at: new Date()
});
```

### データ更新(update)

```js
var id = 1;
// id="1"では更新できませんでした。

db.notes.update(id, {
  body: '本文を更新',
  updated_at: new Date()
});
```

### データ追加/更新(put/bulkPut)
データなければ追加、既にあれば更新となります

```js
db.notes.put({
  id: 2,
  title: "タイトル",
  body: '本文',
  updated_at: new Date()
});
```

### データ全件取得

```js
db.notes
    .toArray()
    .then(function (notes) {
      console.log(notes);
    });
```

### データ削除(delete/bulkDelete)

```js
var id = 1;
db.notes.delete(id);
```

### 確認

「F12」でコンソールを開き、Applicationタブへ移動すると「Storage」一覧にIndexedDBという項目があるので、そこで中身が見れます。

![Screenshot from 2016-11-22 17-48-48.png](https://qiita-image-store.s3.amazonaws.com/0/128173/2963fb83-e64f-915c-801c-51ae636902d9.png)

### まとめ
上記に載せた以外にも、トランザクションや条件検索などがあります。

シンプルで使いやすいです。
google-api-ruby-client | GoogleCloud.client.bigquery.query でデフォルト制限を越えて結果を得る

# 問題

普通にクエリを発行すると、全レコードが得られなかったりする。

大きなレコード数のあるテーブル。

```rb
GoogleCloud.client.bigquery.query('SELECT * FROM bq_dataset.table_name')
# => [{"rows"=>10601344}]
```

だがクエリを発行すると、すべての結果が得られない。

```rb
records = GoogleCloud.client.bigquery.query('SELECT * FROM bq_dataset.table_name LIMIT 100000')
records.size # => 35000
```

何故か中途半端な数字で返ってくる。
元のテーブルによって得られるレコード数が違う。バイト数制限とか？

# 解決

`.all` を付ける。
配列ではなくオブジェクトで返ってくるようになるので注意。

```rb
records = GoogleCloud.client.bigquery.query('SELECT * FROM bq_dataset.table_name LIMIT 100000').all
records.to_a.size # => 100000
```


# 環境

- ruby 2.3.1
- google-api-client (0.9.13)

# 参考

- https://github.com/GoogleCloudPlatform/google-cloud-ruby/blob/f017e3798072ba1b284b0e812bcb79a0f90feb48/google-cloud-bigquery/lib/google/cloud/bigquery/service.rb








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
StaticPressS3で静的なファイル以外取り込めない事象にはまったら

http://qiita.com/Ichiro_Tsuji/items/c6a52ec0ee95ead42f68

こちらを参考にAWS上に構築したんですが、なぜか同期が上手くいかない事象に遭遇。なんで？日本語のせい？バグ？

# ググったらBASIC認証でてきた
https://github.com/megumiteam/staticpress/issues/30

ところがどっこい、そもそも認証かけてません。
でも現象としてはそっくりなので、URLにアクセスできてないんだろうな、、

# ふと気づいた
そういえば構築時、「S3に置くんだから、WordPressは自社からのみのIP制限かけとこうかな」と欲を出したんでした。
セキュリティグループ設定をいじったらあっさり直りまして。

プラグインデバッグするとか、大分時間使ってしまったorz
[改定]お名前で購入したドメインをAWSのALBにhttpsの設定して使う方法。

# 11/30 改定
　ALBの設定が素晴らしく改善されていました。
　Route53を使わずにALBに証明書を突っ込めます。
　Route53を使っていればALB証明書の画面からワンクリックで追記できます。

##あらすじ

あやうくシステムダウンするところだったので、まとめておきます。

まず、ALBで証明書を新規に作って使う方法はこのようになります。

- 前提条件はEC2のインスタンスを起動していることとします。
- ドメインはRoute53以外（今回はお名前.com）で取得済み

### DNSの設定その１

1. Route53を起動し、お名前.comで契約したドメインを追加します。
2. このときにMXレコードを登録していなければ、SESとS3の組み合わせで登録するか、GoogleApps等で受信できるようにしておいて下さい。今回は説明を省きます。 参考: http://qiita.com/stso/items/e8641281580d09a89540
3. この時、メアドはACMが受信できるようにadmin@example.com 等を設定して下さい。受信できなくなります。

### ロードバランサーと証明書の設定

1. EC2の画面を開く
2. ロードバランサーを開く
3. ロードバランサーの作成を押す
4. Application Load Balancerを選択して次へ
5. ロードバランサーの設定で名前設定し、リスナーの追加でHTTPSを追加。
6. その後、アベイラビリティゾーンを表示されている2つをアクションのところにある＋ボタンを押して追加する。
7. 任意でタグにキー: Name, 値: ロードバランサー名と同名を設定し次の手順：セキュリティ設定の構成をクリックする
8. セキュリティ設定の構成画面でAWS 証明書マネージャ（ACM）から、既存の証明書を選択するをチェックし、証明書が無いと思うので、【ACMから新しい証明書をリクエスト】をクリックする。
9. http://blog.serverworks.co.jp/tech/2016/04/07/acm_beginner/ を参考にACMを作成する。
10. 作成したら証明書の名前から該当の証明書を選択して、【次の手順：セキュリティグループの設定】
11. セキュリティグループの設定に来たら、新しいセキュリティグループを作成するを選択し、次の手順：ルーティングの設定をクリックする
12. ルーティングの設定に来たら、ターゲットグループが新しいターゲットグループになっていることを確認し、名前に任意の名前を設定、プロトコルをHTTP（またはHTTPS）とします。ヘルスチェックは今回は説明を省きますので、そのまま、次の手順：ターゲットの登録に進みます。
13. ターゲットの登録に来たら、該当するインスタンスを選択し登録済みに追加を押します。最後に次の手順：確認を押します。この際、EC2に証明書を入れていない場合は、ポートは80にしておいて下さい。そうしないとロードバランサーから先に行きません。
14. 確認画面に来たら、作成を押します。

### DNSの設定

1. Route53を起動し、追加したドメインのネームサーバ（NS）を調べます。
2. お名前.comに行って、ログイン後、ドメイン設定のネームサーバーの変更をクリックします。
3. ご登録情報に変更・相違はありませんか？とでますが、登録情報は正しいので、手続きを進める。
4. 他のネームサーバーを利用をクリックしたあと、該当のドメインにチェックを入れ、ドメイン名をクリックして、下のフォームに現在設定されているネームサーバー名を反映させる。
5. 設定されているネームサーバー名をすべて消し、route53のNSを設定する。
6. route53に戻り、ロードバランサーのDNS名と書かれたとこに記載のレコード名を、Create Record Setを押して、ドメインのAレコードにaliasにチェックを入れて入力しSave Record Setをクリックする。
7. 伝播するまで1800秒（30分）かかるがその後httpsでアクセスすると見られる。
Vagrant 1.8.7(Mac)の"vagrant box add ~~" でエラーとなる場合の対処法

タイトルの通りです。
原因究明に苦労したので共有します。

## エラー内容
- MacにてVagrantの最新バージョン(1.8.7)をインストール後、```vagrant box add ~~```を実行  
  →以下のエラーが発生

```
% vagrant box add debian81 https://dl.dropboxusercontent.com/u/3523744/boxes/debian-8.1-amd64-lxc-puppet/debian-8.1-lxc-puppet.box

An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try
again.
```

## エラー原因
色々と調べ回ったところ、GitHubのissuesに同事象のエラーが記述されていました。
MacでVagrant 1.8.7を使用した場合、```vagrant box add ~~```でエラーが発生しているようです。
https://github.com/mitchellh/vagrant/issues/6725

## 対処方法
~~現時点ではVagrantのバージョンを下げるしかないようです。1.8.6に下げたところ、正しく動作しました。~~

https://github.com/mitchellh/vagrant/issues/7969
https://github.com/mitchellh/vagrant/issues/7970

によるとvagrantに内包されているcurlが問題とのこと。
```sudo rm -rf /opt/vagrant/embedded/bin/curl ```
を実行することで解決できました。

※@d6rkaizさんより情報提供して頂きました。ありがとうございます！
Spring Day 2016参加メモ

各セッションの資料については良いまとめがありました。
[JSUG Spring Day 2016資料まとめ](http://qiita.com/c-cho/items/8682dc725d334a09635b)

公式サイト上でも資料が公開されてきています。
http://springday2016.springframework.jp/session.html

以下は私が参加したセッションのメモと感想などを書き残しておこうかと。

## Spring Framework 5.0
まずは基調講演としてステファン・ニコル氏からSpring5.0の方向性など。
新しい技術スタックの導入をしてパフォーマンスの改善がされたことと、ブロッキングコードを使わないリアクティブプログラミングのサポートが大きなトピック。

### Spring 4.x
Support life until 2019

### 5.0のマイルストーン
* 5.0 M3 : Nov 2016
* 5.0 GA : March 2017

### Performance improvement
* JDK9
* HTTP/2
* Reactive Programming

## Application Re-Architecture Technology
Struts1.x系を使ったSSHなシステムからStrutsを外してSpring MVCに移行する際に起きてしまった問題などが生なましい感じで良かった。
特に業務系のシステムでは同じような話がとても多そうな気がした。
移行するのにまずは目的をはっきりさせて計画を作ることが大事ですねという話。

なぜ移行？
Struts1.x EOL
-> その後2014年に脆弱性発覚

使い続けると、
セキュリティ対応が困難
機会損失を生んでしまう
レガシー化、ガラパゴス化
-> そこで移行先はSpring?
Spring MVC, Spring Boot で７０％ほどのシェアがありそう。デファクトと言えそう。
-> 決定

とはいえすぐに全て追従はできない。似てはいるけど違うもの。
初期に採用したフレームワークは長期間利用される傾向がある

## Spring Security で作る Web API アクセス制御の最適解
http://www.slideshare.net/daisuke_m/spring-day-2016-web-api

HTTPSを使う（もう２０１６年っすよ）
APIの認証に何を使うべき？ -> ケースバイケースw

### 認証の方法
* Inherence factor
* Passession factor
* Knowledge factor

Basic認証 over HTTPS

* 決定的な否定理由は見つからない。適切に運用すれば安全に影響は及ぼさない。

-> けれども、リスク要素

* リクエストごとに静的・無期限なクレデンシャルが流れる
* SSL/TSLも万能ではない

Digest認証
チャレンジ＆レスポンスなのでリクエストが２往復する : ダメ

APIキー署名
AWSが採用。
V1-V4がある。V４を推奨。
オレオレで使用を作るのは脆弱性を出しやすいから既存のものを流用、または参考にするのが吉。

OpenID Connect
APIの認証には使わない（スコープ外）

OAuth2
オーバースペックの可能性

## Spring5に備えるリアクティブプログラミング入門
http://www.slideshare.net/TakuyaIwatsuka/spring-5
Spring-web-reactive の話
Observer pattern でできる

Reactive Stream
ノンブロッキングなバックプレッシャーを備えた
非同期ストリーム処理の標準を提供するための提案
バックプレッシャー：受信側による送信制御を行う（Pull型)
基本Pullベース。Push型にも対応。

Servlet3.1 Non-blocking I/O
非同期処理サポート
ReadListener / WriteListener

Thyme leaf
Reactを意識した改善
Data driven mode : Publiserからデータが流れてくる


## 楽天トラベルとSpring(Spring Day 2016)
http://www.slideshare.net/rakutentech/springspring-day-2016
こちらも長くシステムを運用しているとアルアルな感じのお話。

APIのドキュメントをWikiに人力で更新し続けるのは厳しい。サンプルが少ない。
-> Spring REST Docs
アプリの冗長性とスケールアップのためにセッション管理にSpring Sessionを使った話
ログの追跡にSpring Cloud Sleuthが良さげだよ
プロパティファイルの管理にSpring Cloud Configを使ってみたよ

## アメブロの大規模システム刷新とそれを支える Spring
http://www.slideshare.net/nin2hanzo/spring-69237035

２００４年から１２年ほど続いているサービスというだけあって、手を入れるのが困難になっていたのを改善した話。
これ、やりたくてもなかなかできないことだと思うのですがやり遂げたのがすごい！

### ２０１５年の状況
* 古いバージョン、複数のプロダクトに似たような処理
* フレームワークの混在
* 失われた思想

wikiへの手動ドキュメントから、Springfox + swagger
複雑なドキュメントはswagger専用のアノテーションが必要

ローカル開発環境がない状況だった
個人用の開発サーバにGit push -> Jenkins -> deploy
手元で確認したい
-> Spring Bootを利用することで念願のローカル環境を手に入れた

以上メモ書き。
lsyncd でエラーが出て起動後すぐにエラー停止していた


## 症状
* `service lsyncd start` を実行すると `[OK]` と出る。
* しかし転送先を確認したところファイル同期が行われていない。
* `service lsyncd status` を実行すると、`lsyncd が停止していますがPIDファイルが残っています ` と出る。
* プロセスファイル (`rm -f /var/run/lsyncd.pid`) を削除してみて再度起動してみるけど、やっぱり同じ状態になる。
* `/var/log/messages` でも lsyncd でエラーが出てる。

## 今回の原因
**転送ファイル数が多かった**
ただそれだけ。
基礎だろそんなもん、ってところだけど、備忘のために。

## 対処
1. `/etc/sysctl.conf` の `fs.inotify.max_user_watches` の値を増やす(該当する行がない場合は追記する)。
1. `/sbin/sysctl -p` を実行し、設定を反映させる。
1. `service lsyncd start` で再度起動する(PIDエラーが表示される場合はプロセスファイルを削除する)。

以下設定例

```/etc/sysctl.conf
fs.inotify.max_user_watches = 819200
```
CentOS 6.6 に Python 2.7 を導入

```
# wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz
# tar xzvf Python-2.7.12.tgz
# cd Python-2.7.12
# ./configure
# make
# make install
$ python --version
Python 2.7.12
```
CentOS 6.6 に gcc 4.7 を導入

```
# cd /etc/yum.repos.d
# wget http://people.centos.org/tru/devtools-1.1/devtools-1.1.repo
# yum -y --enablerepo=testing-1.1-devtools-6 install devtoolset-1.1-gcc devtoolset-1.1-gcc-c++
# /opt/centos/devtoolset-1.1/root/usr/bin/g++ --version
g++ (GCC) 4.7.2 20121015 (Red Hat 4.7.2-5)

# vi /etc/profile
export CC=/opt/centos/devtoolset-1.1/root/usr/bin/gcc
export CXX=/opt/centos/devtoolset-1.1/root/usr/bin/g++
export PATH=/opt/centos/devtoolset-1.1/root/usr/bin:$PATH

$ g++ --version
g++ (GCC) 4.7.2 20121015 (Red Hat 4.7.2-5)
```
Swift - pushViewControllerで左へ画面遷移

# 参考

[Swift3 - PresentsViewControllerで左右に画面遷移する方法](http://qiita.com/Ryosuke-Hujisawa/items/e2b45742bd0cc41daffb)

#push遷移で左に行きたい

Swiftで画面遷移をしたい時 、私は ``` pushViewController ``` を頻繁に使うのですが``` pushViewController ``` で画面遷移させようとするとデフォルト状態だと必ず``` 右遷移 ``` になってしまいます



どうしても、どうしても、左に遷移させたかった。。。 でも ``` popViewControllerAnimated ``` を使うと、結局それは前の画面に戻るだけで、行きたい画面に行けないのです。



私が行きたかった画面は、二つ前の画面で、一回のタップ処理で、二つ前の画面に``` 左遷移 ``` させたいのです。下記のqiitaを読んでみれば``` present modally 2個前の画面に戻る ```というのがあるのですが、



私はあくまでも ``` pushViewController ``` で左遷移したいんだよお、ということで色々考えなんとか下記のような記述で``` pushViewController ``` による ``` 左遷移 ``` を実現させることができたのですメモしておきます




```swift:HowToLeftPushViewController.swift


@IBAction func backButtn(sender: AnyObject) {

//IBActionでボタンを定義
        


        
        let transition = CATransition()
//CATransitionというメソッドを使う
        
        transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)

//なんか色々書いてあるけどよくわからない
        
        transition.type = kCATransitionPush

//push遷移するよという定義
        
        transition.subtype = kCATransitionFromLeft

//kCATransitionFromLeftのLeftをRightにすれば右遷移に変わる
        
        self.navigationController!.view.layer.addAnimation(transition, forKey: nil)
        





        let storyboard = UIStoryboard(name: "AuthSupporterCode", bundle: nil)

//ストーリーボードのインスタンス化
        
        let HowToLeftPush = storyboard.instantiateViewControllerWithIdentifier("AuthSupporterCode") as! AuthSupporterCodeViewController

//遷移先のViewControllerインスタンス化
        
        self.navigationController?.pushViewController(HowToLeftPush, animated: true )

//push遷移実行処理

    }
```






#参考記事

http://qiita.com/omatty198/items/cb037b8aa8b9b410be03
doc > 例 > 「状態」と「トリガ(イベント)」の関係図

「状態」と「トリガ(イベント)」の関係図を頭に入りやすいよう作図する能力はまだない。

いくつか調べてみた。

### SPARX SYSTEMSさん

http://www.sparxsystems.jp/products/EA/tech/StateMachine.htm

S3が閉鎖、かつONであるなど分かりやすいかもしれない

### どよよん無線技士さん

http://doyoyon.com/blog-entry-547.html

細かな情報が表に記載されている。

### Taka袋さん

http://www.geocities.jp/ejiri_takahiro/S_5215_2.html

> プロポ（送信機）のＤＭＤ操作指示エリア構成です。
...
> ＤＭＤ動作アクションの出力ポート（ＰＯＲＴＢ）構成です。

ともに考える糧として良いと思った。

## Gantt Chart

自分が作図したいもののイベントは「タイマーイベント」である。

そうなると、Gantt Chartを使うというのも手かもしれない。

### vertex42.com

https://www.vertex42.com/ExcelTemplates/excel-gantt-chart.html

複数の機器の各状態を色で見分ける。

行方向の項目を以下のいずれにするか。

- 動作主体
   - 例: 起動処理, 通常処理, 終了処理
- 機器主体
   - 例: Device A, Device B, ... Device N

RTOSのタスク状態の図も参考になるかもしれない。

### 作ってみた

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/5b4958ce-d8f9-94c9-06b3-56fa0176ad15.png)

GanttChartとしての練習用。実際にESP8266やRasPi2などを使って何かする、というわけではない。

- 定義
  - Shutdown: 「Shutdownのための終了処理を行っている」状態
  - Powerdown:「Shutdownが終了して電源が切れる状態ではあるがPowerが供給されている」状態
  - PowerOFF: 「Powerが供給されていない」状態
【Xcode】Tips: デバッグ時にビュー階層を3D表示する

##【概要】
Xcodeにはシミュレータでビルド時に、ビューコントローラが管理しているビュー階層をグラフィカルに確認する機能があります。

##【サンプルアプリについて】
スクロールビューにイメージを表示するだけの単純な画像表示アプリ。
左右スワイプで、3枚の画像がスクロール表示されます。
画像表示アプリの作り方が知りたい方は、[iBooksのテキスト](https://geo.itunes.apple.com/jp/book/iphone-watchapuriwotsukurou/id1174748409?mt=11)を参考にしてください。

##【手順】
1. シミュレータでビルドする
2. ストーリーボードを表示する
3. `Debug View Hierarchy`をクリックする
<img width="1597" alt="スクリーンショット 2016-11-22 16.17.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/70476/f046cf7f-7dcc-cd1d-39f5-db195d714635.png">

4. `Orient to 3D`をクリックすると、立体的になる
<img width="1597" alt="スクリーンショット 2016-11-22 16.18.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/70476/18ee09b5-6539-930d-a93c-5ca61ab721af.png">


5. スライダー・エディタエリアをドラッグで操作できる
   ちなみに、ピンチイン・ピンチアウトでズームをコントロール
<img width="1597" alt="スクリーンショット 2016-11-22 16.18.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/70476/158415a9-8664-8fdf-d27d-c42a392ad63e.png">


6. `Show Clipped Views`をクリックすると、画面外のビューも表示される
<img width="1597" alt="スクリーンショット 2016-11-22 16.20.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/70476/b9a0cdac-8ced-9456-6d63-33088dfe70a3.png">



##【感想】
「これは役立つ！」といったことは特にありませんが、なんとなくテンションが上がったので記事にあげました。
便利な使い道があるぞ、という方がいましたら、教えてください。
C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（７）　識別編

ついに評価のお話です。
これがないと、学習の意味がありません。

※今回は入出力のお話だけにして、次回に処理の中身のお話をしたいと思います。

# 実行モジュール
基本的に評価モジュールは自分で作成するのですが、Caffeにはちゃんとサンプルが付いています。
「classification.exe」がそうです。
ここではこれを説明していきます。

なお、ソースは「caffe\examples\cpp_classification」にあります。

# 引数
「classification.exe」のシンタックスは以下のようになっています。

classification deploy.prototxt network.caffemodel mean.binaryproto labels.txt img.jpg

では一つづつ説明していきます。

## deploy.prototxt
評価用のモデル設定になります。
トレーニング用モデルとほぼ同じ設定を使用しますが、入力ファイルの設定の部分がちょっと違います。

```
layer {
  name: "data"
  type: "Input"
  top: "data"
  input_param { shape: { dim: 10 dim: 3 dim: 227 dim: 227 } }
}
```

「input_param」内の最初のdimはバッチサイズ、2番目が画像のチェンネル数（ここではRGB）、3番目4番目が評価を行う画像サイズ（実際の画像の一部）になります。
※このサンプルは1画像しか評価しないため、バッチサイズを1より大きくしても意味がありません
※画像サイズは「高さ」「幅」の順番です

## network.cafffemodel
学習済みのモデルデータとなります。
「caffe_alexnet_train_iter_48000.caffemodel」みたいな感じの名前になっているかと思います。
ここに苦労して学習した結果（調整に調整を重ねたパラメータ値）が入っており、評価では順方向に処理するだけで答えが出てくるため、非常に早く処理が終わります。
ただし、読み込みに時間がかかります。
何度も評価を行う場合は、先に1回だけ読み込んでおくのがよいです。

## mean.binaryproto
学習で使用した平均画像を評価でも使用します。
（このサンプルでは平均画像を使わないというのは無しのようですので、学習時にも平均画像を使うようにしてください）

## labels.txt
画像データベースを作成する際に「LISTFILE」というものを指定したかと思います。
その際、全ての画像ファイルに「分類番号」を設定したはずです。
この分類番号を行番号として、分類名を記述したテキストファイルを用意します。

```
accordion
airplanes
anchor
ant
barrel
bass
beaver
binocular
bonsai
brain
...
```

Caffeで評価した結果は分類番号で帰ってくるのですが、それだと人間は理解できませんので、"このサンプルプログラムでは"、分類名に変換して表示するようになっています。

## img.jpg
評価したい画像ファイル（JPEG以外でも大丈夫です）になります。
なお、学習したときと同じ画像サイズにしてください。

# 出力結果
今はデフォルトで、上位5つの候補（確率の高い順）が表示されます。

```
0.9917 - "airplanes"
0.0067 - "ferry"
0.0004 - "car_side"
0.0004 - "grand_piano"
0.0003 - "chair"
```

いくつ以上であれば確実とは言えませんが、2番目以降との差が大きいときはほぼ確実といってよいかと思います。

# 関連記事
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（１）](http://qiita.com/mine820/items/37862e45aa66c2ad8b80)
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（２）](http://qiita.com/mine820/items/9ea5812fc25a70419f31)
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（３）](http://qiita.com/mine820/items/f4395a3ac734085e5ed1)
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（４）](http://qiita.com/mine820/items/41347cd99278d0dc6715)
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（５）](http://qiita.com/mine820/items/e8857fee3fa0b4ada170)
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（６）](http://qiita.com/mine820/items/01a275d1065d299702fc)
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（８）](http://qiita.com/mine820/items/30fcc4e5f794c42b4bd7)
[Resolved] Qiita > 検索結果 > 新着順が新着順でなくなっている

自分の記事を検索している中で気づいたことです。

検索結果の並び順に「新着順」があります。これを選択時に前のUIでは記事の作成順(最終編集日時順？）で並んでいました。現在のUIではその並びがおかしくなっているようです。

以下の例では「新着順」にしていますが、「xxxに投稿」の順番は新着順にはなっていません。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/bf3fc459-d578-23bf-5c9a-b50528f70257.png)

自分の記事を検索して「新着順」にして最近投稿した記事からその時々で使いたいリンクへ飛ぶ、ということをよくしています。

今日、それをしようとして検索したところ、数日前にすぐに見つかっていた記事が見つかりにくくなり、この現象に気づきました。


他の優先作業があると思われますので、お手すきの時にご検討いただければと思います。

<hr>
(追記 2016/11/26)
検索結果が日付降順になるようになっていました。
対処していただいたようです。

ありがとうございました。
RubyでtabのCSVファイルを読み込む


- hoge.csv

```
user\tpassword
foo\t1234
bar\t1111
```

```rb
#!/usr/bin/env ruby

require "csv"
require 'pp'

c = CSV.table('./hoge.csv',:col_sep => "\t")

c.each do |_c|
  p _c[:user]
  # "foo"
  # "bar"
end
```
Firewallを入れ替えたらfreebsd-updateが失敗する件

# はじめに
最近、職場のネットワークのリプレイスがあり、その影響からなのか freebsd-update が失敗する現象が発生した。この記事はその現象を確認し、解決するまでのメモである。

#結論
長くなりそうなので、先に結論を書いておく。

今回の原因は、`freebsd-update`がダウンロードで使用しているコマンド`phttpget`のタイムアウト時間が短いことである。

※ [phttpget.c]  (https://github.com/freebsd/freebsd/blob/master/usr.sbin/portsnap/phttpget/phttpget.c) のソースを見ると15秒になっている。

このタイムアウト時間を変更するには、環境変数`HTTP_TIMEOUT`で設定する。例えば180秒に指定するには、(Cシェル系の場合)コマンドラインで以下を実行する。
```
＃ setenv HTTP_TIMEOUT 180
```

これで解決。必要であれば、シェルの設定ファイルに書いておきましょう。

#作業メモ
以下は、余談というか、調べた過程をメモしておきます。


色々調べた結果、以下がわかった。

- freebsd-update fetch は成功するが、upgrade は失敗する。
-  freebsd-update -v debug upgrade で、進行状況が確認ができる。
- 全てのホストで失敗するわけではない。
- 一番外側のセグメントのホストは失敗しない。

`freebsd-update -v debug upgrade -r 11.0-RELEASE` を実行すると、最後に以下のエラーメッセージが表示された。

```
Fetching 1 metadata files...
/usr/libexec/phttpget update.FreeBSD.org 11.0-RELEASE/amd64/m/4298320cd2fcb7fdeb4d83a040f05290d2d01b920cf06b6d760bc36779e6f18d.gz
phttpget: Connection failure
failed.
```

コマンドラインから `/usr/libexec/phttpget update.FreeBSD.org 11.0-RELEASE/amd64/m/4298320cd2fcb7fdeb4d83a040f05290d2d01b920cf06b6d760bc36779e6f18d.gz` を実行しても同じエラーが発生した、つまりここで問題が発生していることがわかった。

試しに、curlコマンドを使うと、問題は発生せずダウンロードできた。謎。

ここで状況を整理した。

- 特定のネットワークセグメントで問題が発生している。
- おそらくFirewallのポリシーの違いによる影響と仮定した。実際、スルーするようなポリシーを追加すると問題が発生しなくなることは確認できた。
- `curl` では問題なく、`phttpget` で問題が発生する。個別の設定なのか、バグなのか...。

Firewallが通信を遮断していると仮定して、ログを探したのだが発見できなかった。そこで tcpdump & Wireshark にてパケットを確認すると、正常にコネクションが切断しているのが確認できた。ということは、Firewallで強制遮断しているのではなく、phttpget でなんらかの原因があって途中で通信を止めていることになる。

やっと、ここで気づくのである。Firewallではなくて、`phttpget`でのタイムアウトの問題であることを。そう``HTTP_TIMEOUT`の存在を。気づいてしまえば、簡単なことでした。今回の一番の敗因は新しいFirewallの設定やログの検証に時間が掛かってしまったことかも。
bq load コマンドの基本

# フォーマット

次の形式でコマンドを叩く。三つとも必須。

```
bq load [BQのテーブル名] [リソースファイルのパス] [スキーマ指定]
```

## 例

たとえばこういうファイルがある場合。

```example.txt
Alice,20
Bob,21
Carol,22
```

次のコマンドでBQにテーブルを作れる。

```bash
bq load bq_dataset.table example.txt name:string,age:integer
```

# 追記 / 置換

ちなみにデフォルトの動作は「追記」なので、二回実行すると同じデータが作られる。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/f29d0b8d-23dd-f061-f0c6-d8ae3a7f02e9.png)

置換する場合は `--replace` を指定すること。

```bash
bq load --replace bq_dataset.table example.txt name:string,age:integer
```

```bash
bq load bq_dataset.table example.txt name:string,age:integer
```

# フォーマットの指定

区切り文字がカンマ以外の場合は、`--field_delimiter` を指定する必要がある。

## 例: スペース区切りの場合

```example.txt
Alice 20
Bob 21
Carol 22
```

```bash
bq load --field_delimiter=' ' bq_dataset.table example.txt name:string,age:integer
```

## 例

「リソースファイルのパス」は GCS（GoogleCloudStorage） 上のパスでも良い。（こちらの方が高速）
ただし「スキーマファイルのパス」はローカルのものでなければいけない。

```bash
bq load bq_dataset.table gs://bucket/log.gz /tmp/schema.json
```

# --nosync オプション

非同期で実行する。

# 環境

- Google Cloud SDK 134.0.0
- bq 2.0.24








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Matlab::横軸を計測時間でplotする際の便利関数

##### 課題
* Matlabで計測データを"Import Data"することは良くあるが，time stampを記載した列を文字列で読み込んでいる．
* このままでは時間を横軸にplotしたりということはできない．
* 日時の文字列を上手く分割して使いたい．

##### 解決方法
* Matlabの関数を使ってstring型の時間表記からdouble（int含む)型に変換

##### 使用Matlab関数
* [datevec(String)](https://jp.mathworks.com/help/matlab/ref/datevec.html)

---

#### 使用例
以下のようにcell配列 "Time" に時間データ格納されている場合

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/108112/208cec67-f618-32cc-f59a-59684bf6f52a.png" alt=""　width="500" height="300"></a></p>

```Matlab
t=datevec(Time);
```
をすることによって年・月・日・時・分・秒に分割できる．

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/108112/13052b43-6a6c-ba44-8491-c6b8bbddc1b8.png" alt=""　width="300" height="200"></a></p>
FlashAirの内容をWebDAVとrsyncでMac上に取得する

# 概要

flashairの内容を写真を撮る側からなるべく自動で取得したい

# 結論

webdavでマウントして、rsyncする

# スクリプト

```
#!/bin/bash
NOW=$(date '+%Y%m%d%H%M%S')
MOUNTDIR="mount-${NOW}"

HOST=$1
if [ "x${HOST}" = "x" ]; then
  echo "Usage: host"
  exit 1
fi

ping -c 1 ${HOST}
if [ $? -ne 0 ]; then
  echo "not connect"
  exit 1
fi

mkdir ${MOUNTDIR}
mount_webdav http://${HOST}/ ${MOUNTDIR}
time rsync -rt ${MOUNTDIR}/DCIM .
umount ${MOUNTDIR}
rmdir ${MOUNTDIR}
```

# 試したこと

* スクリプトを書いたが不安定すぎた(試したカードの個体問題かもしれない)
* Macで使えるGUIのツールがあったが、フォルダを再帰的に取得してくれない感じだった。

## 試したけど動かなかった

Javaベースで、実行しやすそうだったが、
エラーが出て動かなかったが、これが良さそうだとは思った。
何かの時に、もう少し詳しく見てみたい。

* [WebDAV-Sync](http://www.re.be/webdav_sync/index.xhtml)

# 疑問点

これだと、mkdirができなかった。

```
MOUNTDIR="~/mount-${NOW}"
mkdir ${MOUNTDIR}
```
Matlab::任意のpathにある複数のcsvを構造体に格納し，逐次処理する方法

###### 実験を行った際に結構大量にcsvファイルが生成されるが，それらをさっとMatlabでグラフ化するために便利だった方法を記録

####### 参考:[複数ファイルを逐次処理する](http://marui.hatenablog.com/entry/20111128/1322483213)

まずは，計測データ（csvファイル）を保管しているフォルダにパスを通して，その次にcsvファイルを検索する．

```Matlab
% add folder path if needed
addpath('/Users/***/****/folderA')

% Search csv files in folder-A. Type of "files" is structure.
files = dir('/Users/***/****/folder-A/*.csv');
```

これで"files"に以下のようにname, folder(path), date, bytes, isdir, datenumが格納される．
<p><img src="https://qiita-image-store.s3.amazonaws.com/0/108112/cd5d2aff-0ee1-a7ed-de05-064a8bc39475.png" alt=""　width="300" height="200"></a></p>

以下は，例えばというケースです．
前提：Dataをimportするm-file（function）は既に用意している．
目的：csvファイルの特定の項目をplotしていく．
ポイント：csvファイルを「files.(n).name」で指定し逐次処理できる．

```Matlab
%  Display searched csv files on Commnad Window
for n=1:length(files)
   %Split filename in folder path, file name, and extention. 
   [path, name, ext] = fileparts(files(n).name); 

  %Display filename
   disp(name);
end

% Plot sensor data.
for i=1:1:length(files)
 
  [A,B,C,D,E]=import(files(i).name); 

  subplot(4,5,i)
  plot(A, B)
    
  ---省略---
  
end
```
macOS Sierra + Keyhacでキーバインドをカスタマイズ

うっかりmacOS Sierraにアップデートしてしまった後にKarabinerが対応していないことを知って困った。せっかくなのでデフォルトのキーバインドに慣れようかと思ってしばらくがんばっていたけど、生産性が下がりすぎて無理。そこで、[Keyhac](https://sites.google.com/site/craftware/keyhac-ja)でできるとこまでがんばってみることに。

## 要求

### 必須

1. SandS
2. `Ctrl-m`で`Return`
3. `Ctrl-[PNBF]`で`↑``↓``←``→`
4. `Ctrl-[`で`Esc`
5. iTerm上のVimで、インサートモードから抜ける時にIMEを英数に戻す

### できれば

1. Slackで`Ctrl-Tab`, `Ctrl-Shift-Tab`で未読チャンネルを移動
2. `Ctrl-Cmd-Space`でスポットライトの検索バーを出す

## コード

```python
from keyhac import *

def configure(keymap):
    keymap_global = keymap.defineWindowKeymap()

    # 必須1: SandS
    keymap.replaceKey("Space", "Shift")
    keymap_global["D-Shift"] = "Shift"
    keymap_global["O-Shift"] = "Space"
    keymap_global["O-Space"] = "Space"

    # IMEのトグル
    # ↑の設定のせいで既存の設定が食われてしまうぽいので、
    # 環境設定→キーボード→ショートカットであらかじめ設定したキーにあてる
    keymap_global[ "Cmd-Shift" ] = "F12"

    # 必須2と3: Emacs Keybindings
    keymap_global[ "Ctrl-M" ] = "Return"
    keymap_global[ "Ctrl-P" ] = "Up"
    keymap_global[ "Ctrl-N" ] = "Down"
    keymap_global[ "Ctrl-F" ] = "Right"
    keymap_global[ "Ctrl-B" ] = "Left"

    # 必須4: C-[ to Esc
    keymap_global[ "Ctrl-OpenBracket" ] = "Esc"

    # 必須5: iTerm2
    # インサートモードから戻る時はIMEを英数にしてほしい
    def escWithIMEOff():
        esc = keymap.InputKeyCommand("Esc")
        esc()
        ime_off = keymap.InputKeyCommand("Ctrl-Shift-Semicolon") # GoogleIMEのショートカット
        ime_off()

    keymap_terminal = keymap.defineWindowKeymap( app_name="com.googlecode.iterm2" )
    keymap_terminal[ "Ctrl-OpenBracket" ] = escWithIMEOff

    # できれば1: Slack
    # いまのところなんかだめ
    keymap_slack = keymap.defineWindowKeymap( app_name="com.tinyspeck.slackmacgap" )
    keymap_slack[ "Ctrl-Tab" ]       = "Option-Shift-Down"
    keymap_slack[ "Ctrl-Shift-Tab" ] = "Option-Shift-Up"

    # できれば2: Spotlight
    # いまのところなんかだめ
    keymap_global[ "Cmd-Ctrl-Space" ] = "F11"
```

## 補遺

* どうもスペースの動きが変。スペースとして効いてほしい時に、状況によって一発で効いたり効かなかったりする。ので、変換する時にスペースを一度押したら変換できたりできなかったりするし、スペースを二回押さないとスペース自体が入力できなかったりする
* 上記の要求の「できれば」は、1も2もちゃんと動いてない
MacBookの起動音の調整

## 導入
新しいMacBook Proでは起動音がしないらしい。しかしどうやら起動音がなくなったのではなく、デフォルトで音が出ないようになっているだけのようだ。
ぼくはむしろ起動音がでかすぎて授業中に鳴ると心臓麻痺を起こしかねないので、逆に音を無くしたい（小さくしたい）派なので、この機会に調べてみた。

## 本題
起動音を調整するのに必要なコマンドは次の1行だけ。これをターミナルからうつ。
`sudo nvram BootAudio=%01`
これだけでおしまい。

なおnvramがどういう意味か気になったので調べてみた。
参考は[こちら](https://support.apple.com/ja-jp/HT204063)
どうやらNVRAMというのは一種のメモリであるようだ。そのためnvramはこのメモリに命令するためのコマンドだと思われる。


参考：
[https://discussions.apple.com/thread/3208783?start=120&]
[http://news.line.me/issue/digital/d3c1e59fecfe?utm_source=Twitter&utm_medium=share&utm_content=app&utm_campaign=none]
JIRAのすべての課題タイプでストーリーポイントを設定できるようにする

ストーリーポイントが設定できるデフォルトの課題タイプを設定する方法を説明します。
プロジェクトごとに設定する方法は[こちら](http://qiita.com/pikanji/items/737b488f3aba85511696)。

右上の歯車からIssuesメニューを選択
<img width="381" alt="Screen Shot 2016-11-22 at 11.56.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/138322/e6c8718f-7731-3077-8bc0-0b351a2509d6.png">

FIELDSのCustom fieldsを開く
<img width="306" alt="Screen_Shot_2016-11-22_at_14_20_15.png" src="https://qiita-image-store.s3.amazonaws.com/0/138322/970ebc7b-a3ed-e09f-20cd-0fc6657ab9e1.png">

Story PointsのConfigureを開く
<img width="1175" alt="Screen Shot 2016-11-22 at 14.20.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/138322/2011da0c-6b20-4c11-bb92-16c00dc70c4f.png">

Edit Configurationを開く
<img width="588" alt="Screen_Shot_2016-11-22_at_14_21_40.png" src="https://qiita-image-store.s3.amazonaws.com/0/138322/ec3f854d-0272-3989-3a07-2baee1e0bb1e.png">

複数のタイプを選択するか、Any issue typeですべてにStory Pointを設定できるようにする。
<img width="501" alt="Screen Shot 2016-11-22 at 14.25.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/138322/d7be026b-42eb-27a1-8b0c-09ffd688b47b.png">

Modifyボタンを押して完了。