OmniAICreator/Qiita-1.07M huggingface dataset:
WindowsのVirtualBoxのVagrantのDockerでWordPress

環境
--

- Windows 10.0.14393

準備
--

1. [VirtualBox-5.0.28-111378-Win.exe](http://download.virtualbox.org/virtualbox/5.0.28/VirtualBox-5.0.28-111378-Win.exe)
2. [vagrant_1.8.6.msi](https://releases.hashicorp.com/vagrant/1.8.6/vagrant_1.8.6.msi)

ファイルを配置
--

```bat:tree
C:\users\%USERNAME%\vagrant
└─wordpress
    │  Vagrantfile
    │
    └─provision
            wordpress.sh
```

```ruby:Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = 1024
  end
  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.network :forwarded_port, host: 8080, guest: 8080
  config.vm.provision :shell, :path => "./provision/wordpress.sh", :privileged => true
  # config.vm.network "private_network", ip: "192.168.0.100"
end
```

```sh:provision/wordpress.sh
#!/bin/sh

yum -y update
yum -y install docker
systemctl start docker
docker pull wordpress
docker pull mysql
docker run --name wp-mysql -e MYSQL_ROOT_PASSWORD=password -d mysql
docker run --name wordpress --link wp-mysql:mysql -p 8080:80 -d wordpress
```

仮想マシンの起動
--

```bat:CommandPrompt
cd C:\users\%USERNAME%\vagrant\wordpress
vagrant up
```

アクセスしてみる
--

- http://localhost:8080

以上
jupyter notebook 内でのグラフ表示

#matplotlibのグラフをインラインで表示

- グラフ固定の場合

```
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y  = np.sin(x)
plt.plot(x, y)
```

![inline.PNG](https://qiita-image-store.s3.amazonaws.com/0/109458/63b3ccbc-83d4-1582-06c2-a44879291ee0.png)


- グラフを移動・拡大縮小したい場合

```
%matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y  = np.sin(x)
plt.plot(x, y)
```
![notebook.PNG](https://qiita-image-store.s3.amazonaws.com/0/109458/10878d6d-6fc8-83bb-e43a-fa7eea55f039.png)

下のアイコンで移動や拡大縮小・保存ができます。
人工知能用チップ技術

## 人工知能用ハード

facebookの議論から、人工知能用ハードについて、思ったことを少し書いてみます。

ポイントは、PEZYの齊藤さんの[発想](http://wired.jp/2015/08/25/motoaki-saito/)です。
**目指しているのは、CPUコアよりもインターコネクトを遥かに重視した構造です。**

**インターコネクトをどうしたらいいかですね。**
**[このニューロンの説明](http://kazoo04.hatenablog.com/entry/agi-ac-3)を参考に考えてみました。**
**２重のインターコネクト（２重のパケット）はどうだろうが結論です。**

神経細胞は、軸索を伸ばして、樹状突起でつながります。この部分をハード的に、柔軟につくれるかが重要です。

||神経細胞|ハード||
|---|---|---|---|
|1|細胞体|CPU+メモリ|分散メモリ型MIMD|
|2|軸索|ネットワーク|対象１００億個？もっとすくなくてもいいかも、|
|3|シナプス<br>（樹状突起結合）|CPUとの接続|対象１万個？|

軸索、シナプス結合部分は、[ルーティング](http://swest.toppers.jp/SWEST15/data/s4a_public.pdf)で対応するのが妥当だと思います。
[スケールする場合はIBMのようにクロスバー](http://www.i-programmer.info/news/105-artificial-intelligence/9027-ibms-truenorth-rat-brain.html)で押し切るのはちょっとむずかしい気がします。

軸索、シナプスは、２重のパケットになっていればいいでしょう。技術的にも問題はあまりない気がします。

おそらく、神経細胞にとって、２重化は意味あることですが、CPU的に意味あるかは別問題なんでしょう。１００コアで十分な計算でも、１００万コア必要な計算でも、動的に対応できるのが、重要ならこのような仕組みが役立つかなと思います。
XCode8 Swift3 で iOS 9.3 用加速度センサー値取得のサンプルアプリ



- iOSで加速度センサーの値を取得するには、CoreMotionを使う


1. XCodeでSingle View Applicationを作成

## CoreMotionでaccelerationを取得
2. ViewController.swift で CoreMotionをImportしてaccelerationを取得する


```ViewController.swift
import UIKit
import CoreMotion

class ViewController: UIViewController {
    
    // MotionManager
    let motionManager = CMMotionManager()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        if motionManager.isAccelerometerAvailable {
            // 加速度センサーの値取得間隔
            motionManager.accelerometerUpdateInterval = 0.1
            
            // motionの取得を開始
            motionManager.startAccelerometerUpdates(to: OperationQueue.current!, withHandler: { (data, error) in
                // 取得した値をコンソールに表示
                print("x: \(data?.acceleration.x) y: \(data?.acceleration.y) z: \(data?.acceleration.z)")
            })
        }
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}
```

XCode8で iOS10.0 が対象になったこともあり..
実機に入れようとして、deployment target を iOS9.3 にすると以下のようなエラーが出る

```
AppDelegate.swift:49:35: 'NSPersistentContainer' is only available on iOS 10.0 or newer
```

http://stackoverflow.com/questions/38140188/is-it-possible-to-use-core-data-xcode-8-and-swift-3-0-with-both-ios-9-and-10

プロジェクトをXcode7 で作って Xcode8 へマイグレーションすればいける！ってかいてある。...が、ここは 今回 CoreData を使う予定はないので(Project作成時に入れなければ関係ないが, 入れてしまった.) 以下のように回避した。

全く本質を解決していない(iOS10.0以外ではCoreData使えなくしてる)ので...どうななんだろうか..


```
@available(iOS 10.0, *)
lazy var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "MotionBLESample")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()

    // MARK: - Core Data Saving support

    func saveContext () {
        if #available(iOS 10.0, *) {
            let context = persistentContainer.viewContext
            
            if context.hasChanges {
                do {
                    try context.save()
                } catch {
                    let nserror = error as NSError
                    fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
                }
            }
        } else {
            // Fallback on earlier versions
        }
    }
```

こうやった上で、実機で動かす。
![スクリーンショット 2016-09-14 23.59.36.png](https://qiita-image-store.s3.amazonaws.com/0/92491/7b039531-eb52-9b3a-7c09-5787cad1f5e0.png "スクリーンショット 2016-09-14 23.59.36.png")

動きました。
SVGの塗りに斜線パターンをあてたらIEでおかしくなった

斜線テクスチャを塗りに適用したSVGを外部ファイルとして使用したところIEで汚く見えるという現象に遭遇したので、今後のためのメモ。

結論から言うと、**viewBoxに小数点が入らないようにする**ことで解決。

## サンプル

こんなやつ。
今なら塗り（テクスチャ）も含めてSVGでいけるので便利になったものです。

![sample.png](https://qiita-image-store.s3.amazonaws.com/0/145414/2164a6ab-c595-0833-fd78-50f8f420ccef.png)

### ソースコード

[http://codepen.io/esnetk6/pen/QKzOPa](http://codepen.io/esnetk6/pen/QKzOPa?editors=1000)

上記URLのSVGはHTMLに直接書いていて、これだとIE、Edgeで確認しても特に問題なく綺麗に表示された。
どうやら**外部ファイルとして読み込ませたときに汚くなる**みたい・・・。


## ChromeやFirefoxでの見え方

`img` 要素でそのまま表示させた場合も、CSSの `background-image` で表示させた場合も問題なし。

![screenshot-chrome.png](https://qiita-image-store.s3.amazonaws.com/0/145414/0039d14f-901d-1663-f837-61cac65672f7.png)


## IE11での見え方

`img` の方は意図したとおりに表示されていない。

![ie.png](https://qiita-image-store.s3.amazonaws.com/0/145414/8018de68-db7c-64c6-53d5-74bd1c2000d7.png)


## Edgeでの見え方

Edgeに至っては、どちらもおかしい。

![edge.png](https://qiita-image-store.s3.amazonaws.com/0/145414/4bb0fefb-014f-718c-9928-7740f64a92dd.png)


## まとめ

冒頭に書いた通りで、viewBoxに小数点を入れないように縦を163.4 → 164 にしてみたら正しく表示された。

このような斜線パターンはデザイナーもよく使うので、個人的にviewBoxの小数点は常に消すクセをつけておきたい。
GANのめも

#GANについて
NIPS2014で発表された論文[1]．
偽物のデータを生成するGeneratorと，データが本物か識別するDiscriminatorから構成される．

GANのイメージ
![GAN.png](https://qiita-image-store.s3.amazonaws.com/0/145533/9ae700ae-1cef-07f3-ec70-72aae5b145f7.png)



#Generator
目的はデータ$\boldsymbol{x}$の分布$p_g$を推定する（=Discriminatorに見破れないデータを生成する）こと．
入力：Prior $p_z(\boldsymbol{z})$から出力されるノイズ$\boldsymbol{z}$．
出力：$\boldsymbol{x}$と同次元のベクトル，この記事中では$G(\boldsymbol{z})$と表す．
Generatorは多層のパーセプトロンであり，ネットワークの重みを$\theta_g$と表現したとき，$G(\boldsymbol{z};\theta_d)$と表現される．
以降Gと表現する．

#Discriminator
目的は入力されたデータが本物か偽物か見分けること．
入力：$\boldsymbol{x}$，または$G(\boldsymbol{z})$．
出力：$\boldsymbol{x}$である確率．
以降Dと表現する．

#Objective function
GANの目的式は以下である．

```math
\min_G\max_D V(D,G)=\mathbb{E}_{\boldsymbol{x}\sim p_{data}(\boldsymbol{x})}[\log D(\boldsymbol{x})]+\mathbb{E}_{\boldsymbol{z}\sim p_g(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))]
```
$\boldsymbol{x}\sim p_{data}(\boldsymbol{x})$はデータの分布$p_{data}(\boldsymbol{x})$から生成された$\boldsymbol{x}$データ（本物のデータ）を意味し，
$\boldsymbol{z}\sim p_g(\boldsymbol{z})$はPriorから出力されるノイズ（偽物のデータを生成するシード）を意味すると考えられる．

1項目は，本物のデータをDに入力したとき，Dが入力データを本物であると推定する確率の期待値．
2項目は，Gが生成する偽物のデータをDに入力したとき，Dが入力データを偽物であると推定する確率の期待値．

##Training
最適なGの重み$\theta_g$とDの重み$\theta_d$を以下の手順で求める．

###Step1
$p_g(\boldsymbol{z})$からサンプル$\boldsymbol{z}^{1},\ldots,\boldsymbol{z}^{m}$を得る．
$p_{data}(\boldsymbol{x})$からサンプル$\boldsymbol{x}^{1},\ldots,\boldsymbol{x}^{m}$を得る，

```math
\nabla_{\theta_d}\frac{1}{m}\sum_{i=1}^m[\log D(\boldsymbol{x}^{i})+\log (1-D(G(\boldsymbol{z}^{i})))]
```
でSGDを行い，$\theta_d$を更新する．．
これをk回繰り返す．

###Step2
$p_g(\boldsymbol{z})$からサンプル$\boldsymbol{z}^{1},\ldots,\boldsymbol{z}^{m}$を得る．

```math
\nabla_{\theta_d}\frac{1}{m}\sum_{i=1}^m\log (1-D(G(\boldsymbol{z}^{i})))
```
でSGDを行い，$\theta_g$を更新する．

###Step3
Step1，Step2をn回繰り返す．

#GANのAdvantage
Backpropagationのみで学習できる．
他の機能を取り入れることができる．
Gはデータから直接学習せず，Dを経由する．

#GANのDisadvantage
$p_g(\boldsymbol{x})$が明示的でない．
DとGは同期してTrainingしなければならない．

#Reference
[1] Goodfellow, Ian, et al. "Generative adversarial nets." Advances in Neural Information Processing Systems. 2014.
wercker(deployer)を使った、bitbucketからxserverへの自動デプロイ

# サクラサーバではなくxserverを選んだ理由

* php7が利用出来る
* https（let's Encrypt） が無料
 * ServiceWorkerを使いたい（ここデカイ）

などの理由よりサクラではなくXSERVERを選んだ

# つまずいたところ

## ログインシェルと対話的シェル

xserverのデフォルトでは
`php -v`
をしてもPHP5.4.16と言われる

XSERVERの設定画面でphpのバージョンを変更しても変わらない。
（リクエストが飛んできた時に指定されたphpのバージョンで動くらしい）

なので、以下の設定をした
まず、~/bin/配下に利用したいphpへのシンボリックリンクを貼る

```
ln -s /usr/bin/php7.0 php
```

```code:.bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions

PATH=$HOME/bin:$PATH
export PATH
```

初めのうちは.bush_profileに書いていたがDeployerを使った場合
なぜかデフォルトのphpバージョンで動いていたので.bashrcにも書いた。
ログインシェルとインタラクティブシェルで読み込まれる設定ファイルが異なるようだ。

## suPHP_ConfigPathでエラー
htaccessの設定をしようとして失敗
わからなかったので、サポートに聞いてみたら

> 当サービスの[sv2001]以降のサーバーにつきましては、
> 【suPHP_ConfigPath】の記述が行えません。

と言われた。
ドメインごとのPHP設定値は、サーバーパネル内「php.ini設定」機能を利用するようにとのこと

# 感想
一度同じような条件でサクラサーバにでデプロイしたこともあってか、
導入時の苦労が少なかった。(xserverはわりかし利用しやすいのかな？)

#関連
[wercker(deployer)を使ったbitbucketからさくらレンタルサーバへの自動デプロイ](http://qiita.com/sakoken/items/779ef75e6ac7ff5c2a5c)
Hubotで外部から取得した画像を添付してツイートする

# やりたいこと
画像URLを使って画像を取得。その画像を添付してツイート

# 環境
Mac OSX El Capitan
Hubot 2.19.0
hubot-twitter 2.1.1

# コード

```
request({method: 'GET', url: image_url,  encoding: null}, (err, res, body) ->
      if err
        console.log err
        return
      @client = new twit(keys)
      @client.post('media/upload', {media_data: btoa(body)}, (err, data, response) ->
        if err
          console.log err
          return

        @client.post('statuses/update', { status: "ツイート内容！", media_ids: [data.media_id_string] }, (err, data, response) ->
          if err
            console.log err
            return
        )
```

# ポイント
* 画像添付には画像のアップロードとツイートの2ステップ必要
* robot.httpモジュールじゃなくて、requestモジュールを使う
    * ``encoding: null``が重要で、これによってレスポンスのbodyがbufferのまま返される。 
* 　画像データをbase64でエンコード
    * [twitter API Document](https://dev.twitter.com/rest/reference/post/media/upload)によると以下の形式のみ許可してるようなのでbase64に変換した
     * raw binary (media parameter) 
     * base64-encoded contents (media_data parameter)

* ツイート時に画像をアップロードしたときのレスポンスにあるmedia_id_stringを一緒に記述


画像を添付してツイートができました。
Xcodeのプロジェクト名を変更するスクリプト（複製してプロジェクト名を変更）

# 概要
Xcodeのプロジェクト名を変更するスクリプトです。
複製後にプロジェクト名を変更するので元のプロジェクトは残ります。

# 経緯
[Xcode上でプロジェクト名の変更](http://qiita.com/kimi_dropc/items/fa860b0193fa4589a7e0)は可能ですが、
ディレクトリやファイル名が旧プロジェクト名で残ってしまうので
プロジェクト配下の全ファイルを探索して、
一発ですべて新プロジェクト名に変更するツールが欲しい。

# 使い方
```
$ cd <旧プロジェクトフォルダの1つ上>
$ ./renameXcodeProject.sh <旧プロジェクト名> <新プロジェクト名>
```

# 注意事項
* 新プロジェクト名に旧プロジェクト名が部分一致するケースは未対応です。
 * NG例： project  -> project2
 * OK例： project1 -> project2
* 必ずスクリプトで何をしているか確認のうえ、実行するディレクトリに注意しましょう。


# スクリプト
```
#!/bin/bash

renameDirectories () {
	for i in `find . -name \*$oldProject\* -type dir`
	do
		oldFile=$i
		newFile=`echo $i | sed -e s/$oldProject/$newProject/g`
		echo "mv $oldFile $newFile"
		mv $oldFile $newFile
	done
}

renameFiles () {
	for i in `find . -name \*$oldProject\* -type file`
	do
		oldFile=$i
		newFile=`echo $i | sed -e s/$oldProject/$newProject/g`
		echo "mv $oldFile $newFile"
		mv $oldFile $newFile
	done
}

renameWords () {
	for i in `grep -slr $oldProject *`
	do
		echo $i
		sed -i '' "s/$oldProject/$newProject/g" $i
	done
}

main () {
	oldProject=$1
	newProject=$2

	cp -pr $oldProject $newProject
	cd $newProject

	renameDirectories
	renameFiles
	renameWords

	cd ..
}

main $1 $2
exit
```

# github
https://github.com/menomoto/Tools/blob/master/renameXcodeProject.sh
SwiftでUIImageViewにURLから非同期で画像を取得してセットする（キャッシュ付き,URLSession）

タイトル通り、URLから非同期で画像を取ってきて、完了後に自動で画像表示してくれるUIImageViewです。

[AlamofireImage](https://github.com/Alamofire/AlamofireImage)のサンプルやiOS10で非推奨のURLConnectionを使ったサンプルしか見つからなかったので、URLSessionを使って自作しました。

## 使い方
先に使い方から載せておきます。UIImageViewの代わりに使います。


```swift
let imageView = AsyncImageView(frame: CGRect(x: 0, y: 0, width: 40, height: 40));
imageView.loadImage("https://~~~/image.png");
self.view.addSubview(imageView);
```
`loadImage`メソッドはいつ呼んでもOKです。

## Swift3.0用
```swift:AsyncImageView.swift
import UIKit
class SimpleAsyncImageView: UIImageView {
    let CACHE_SEC : TimeInterval = 5 * 60; //5分キャッシュ

    //画像を非同期で読み込む
    func loadImage(urlString: String){
        let req = URLRequest(url: NSURL(string:urlString)! as URL,
                               cachePolicy: .returnCacheDataElseLoad,
                               timeoutInterval: CACHE_SEC);
        let conf =  URLSessionConfiguration.default;
        let session = URLSession(configuration: conf, delegate: nil, delegateQueue: OperationQueue.main);
        
        session.dataTask(with: req, completionHandler:
            { (data, resp, err) in
                if((err) == nil){ //Success
                    let image = UIImage(data:data!)
                    self.image = image;
                    
                }else{ //Error
                    print("AsyncImageView:Error \(err?.localizedDescription)");
                }
        }).resume();
    }
}
```

## Swift2.3用
```swift:AsyncImageView.swift
import UIKit

class AsyncImageView: UIImageView {
    let CACHE_SEC : NSTimeInterval = 5 * 60;
  
    //画像を非同期で読み込む
    func loadImage(urlString: String){
        let req = NSURLRequest(URL: NSURL(string:urlString)!,
                               cachePolicy: .ReturnCacheDataElseLoad,
                               timeoutInterval: CACHE_SEC);
        let conf =  NSURLSessionConfiguration.defaultSessionConfiguration();
        let session = NSURLSession(configuration: conf, delegate: nil, delegateQueue: NSOperationQueue.mainQueue());
        
        session.dataTaskWithRequest(req, completionHandler:
            { (data, resp, err) in
                if((err) == nil){ //Success
                    let image = UIImage(data:data!)
                    self.image = image;
                    
                }else{ //Error
                    print("AsyncImageView:Error \(err?.localizedDescription)");
                }
        }).resume();
    }
}
```

ちょっとしたデモ用なので、最低限画像を取得して表示する機能のみです。
失敗した時のNoImageや読み込み完了までのPlaceHolder画像などはカスタマイズしてお使いください〜
PHPで自分自身をrequire_onceするとどうなるか

タイトルの通りです。次のようなPHPプログラムを実行してみましょう。

```php:require_once.php
<?php

echo "<h1>1</h1>\n";

require_once("./require_once.php");

echo "<hr />\n";
```

自分自身を`require_once`するものです。実行結果は以下の通りです。

```
<h1>1</h1>
<hr />
```

`require_once`の部分で何も表示されていません。Webサーバから直接呼び出されたPHPプログラムは`require`も`include`もされていないので関数名からすると再度呼び出されると予想していたのですが、実際には`require`されているのと同じ扱いというわけです。

PHPマニュアルにも下記のように書いてありました。意図を考えると自然な挙動ではありますね。

> include_once は、スクリプトの実行時に同じファイルが複数回読み込まれ、評価される可能性がある場合に、関数の再定義や変数値の再代入といった問題を回避するために一回だけ読み込ませるために使用します。
>
> http://php.net/manual/ja/function.include-once.php
Oracleで実行されたSQLの履歴を確認する

```sql
select last_active_time,parsing_schema_name,sql_text from v$sqlarea
where parsing_schema_name <> 'SYS'
  and parsing_schema_name <> 'SYSMAN'
  and parsing_schema_name <> 'DBSNMP'
  and parsing_schema_name <> 'MDSYS'
  and parsing_schema_name <> 'EXFSYS'
order by last_active_time desc;
```

これで確認できる範囲は、REDOログの範囲だったかと思います。
PHP と MySql　自分用メモ

###2次元連想配列の特定の値だけ変更
[【PHP】【Tips】foreachで配列の値を変更するときに参照渡しを利用すると便利！](http://www.fwoabw.info/entry/2014/10/03/135546)

###データーベースの結合
[データーベースの結合〜３つ以上のテーブル結合〜](https://blog.codecamp.jp/php_DB_combination03)

**例: order_tとbento_tをbento_idでくっつけ、さらにbento_tとstore_tをstore_idでくっつける。**
`SELECT * FROM order_t
JOIN bento_t ON order_t.bento_id = bento_t.bento_id
JOIN store_t ON bento_t.store_id = store_t.store_id;`
Material Design Liteのfloating label textをJavaScriptから更新するときの注意

# Floating label textとは

初期状態ではラベル名がプレースホルダとして表示され、テキスト入力するとプレースホルダの文字が上に浮き上がりラベルになるテキスト入力フィールドです。

```html:コード：
<!-- Textfield with Floating Label -->
<form action="#">
  <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
    <input class="mdl-textfield__input" type="text" id="sample3">
    <label class="mdl-textfield__label" for="sample3">Text...</label>
  </div>
</form>
```

表示:
<img width="328" alt="スクリーンショット 2016-10-22 11.19.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/136183/0597bb02-12ce-5185-90b7-d7a6d558c0d6.png">

公式ページのリファレンス
https://getmdl.io/components/index.html#textfields-section

# JavaScriptから値を変更した場合の注意
テキスト欄を単純に

```js: 
document.querySelector('#sample3').value = 'hello';
```

のように変更しただけだと
<img width="321" alt="スクリーンショット 2016-10-22 11.34.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/136183/4da2b7d4-83f3-a716-f84d-f45f15cb2f8d.png">
のようにプレースホルダと入力文字が重なってしまいます。

# 対応


```js: 
// MaterialTextfieldのchangeメソッドでテキストを変更
document.querySelector('#sample3').parentNode.MaterialTextfield.change('hello');
```

または

```js: 
// テキストを変更した後でMaterialTextfieldのcheckDirtyメソッドを呼び出す。
document.querySelector('#sample3').value = 'hello';
document.querySelector('#sample3').parentNode.MaterialTextfield.checkDirty();
```

のように記述すると期待通りの動きとなります。

以下、サンプルコード。
https://jsfiddle.net/rhikos/t1eb0tp4/

# 参考にしたサイト

Floating label does not activate if a value is inserted to textarea/textbox
https://github.com/google/material-design-lite/issues/1287

Textfield placeholder label isn't updated when programmatically setting value
https://github.com/google/material-design-lite/issues/1319
プラグインマネージャもパッケージマネージャも使わないという選択肢

Vim8から標準でパッケージマネージャが提供されたり、
Vimの紹介記事などで
まずプラグインマネージャを入れて、それを使って各種プラグインを入れましょう
といったことを目にします。

しかし、Vimと現実世界の境界が分からなくなる程の重篤Vimmerなら別ですが
僕のようなライトユーザーの場合、
起動時間が100msが200msになっても大して気にならないし、
依存関係が複雑で管理できないといことも(今のところ)ないので
その手の管理機能は不要です。
`git clone`してきて`runtimepath`に追加するだけで充分です。

とは言え、

```vim
set runtimepath+=hoge/fuga
source hoge/fuga/vimrc " プラグイン個別の設定など
```

と、同じパスを2回書くのは面倒だし
最初は個別の設定を書いてなくて後から設定追加した場合に手間なので
以下のようなスクリプトを書いて使っています。

```vim:_vimplugins
let s:VimPluginsPath = $HOME . '/vimplugins'

let s:VimPlugins = [
            \ 'yankring',
            \ 'renamer',
            \ 'EnhancedCommentify',
            \ 'migemo',
            \ 'neocomplete',
            \ 'lightline',
            \ 'vim-mark',
            \ 'ExpandSerialNumber.vim',
            \ 'undotree',
            \ 'vim-quickrun',
            \ 'vim-table-mode',
            \ 'vim-go-extra',
            \ 'vim-lawrencium',
            \ ]

let s:Trash = [
            \ ]

function! s:LoadVimPlugin(plugin)
    let l:path = s:VimPluginsPath . '/' . a:plugin
    exec 'set runtimepath+=' . l:path
    if filereadable(l:path . '/vimrc')
        source `=l:path . '/vimrc'`
    endif
endfunction

for plugin in s:VimPlugins
    call s:LoadVimPlugin(plugin)
endfor
```

```vim:_vimrc
source ~/_vimplugins
```

まぁ、パッケージマネージャの使い方覚えて標準の機能使う方が良いんだろうけど
このやり方に慣れてしまったので…
Packetbeat で indexを生成する際にはTime-field name で@timestampを指定すること

# Time-field name でstart_timeやlast_timeを選んだ場合の弊害

start\_timeやlast\_timeは_type:flowのみ存在する。(\_type:flowはIPアドレスやポート番号などのヘッダ情報を持ち、アプリケーションに関する情報は持たない。)
\_type:dnsや\_type:httpなどのパケットの中身を解析するものについては@timestampのみ存在し、start\_timeやlast\_timeが存在しない。
dnsやhttpなどの情報を取得できないため、デフォルトのダッシュボードが動作しない。
jquery.cookie.jsをWordPressのauthorページで使ったとき、どのページにもキャッシュが反映されてしまう問題


やりたかったこと：
WPのauthorページ（ユーザーページ）に、authorの長い紹介を入れていて、その下にauthorが書いた記事を入れているが、２回目以降は紹介を読む必要はないので、Cookieを利用して「続きを読む」ボタンでアコーディオンが閉じた状態にする。

問題：
jquery.cookie.js の pathを "" にしても、現在のauthorのページだけでなく、他のauthorのページを開いたときにも反映されてしまう

解決策：
the_author_meta('ID') で、現在のauthorのIDを取得し、Cookieに入れる
ubuntu 設定メモ（随時更新）

## 設定メモを備忘録のように書いていきます。

* resolv.conf に 127.0.1.1 となって、名前解決ができない件

```
　sudo vi /etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq <- コメントアウト

[ifupdown]
managed=false
~             
  
```
ffmpeg + QSV エンコード（h264_qsv）でのエラー回避


# ffmpeg + Intel QSV

ffmpeg では、ビデオコーデックに h264_qsv を指定することで QSV が利用できます。
例えば、以下のようにします。

```bash
ffmpeg -i INPUT -c:v h264_qsv -b:v 2000k -r 30 -s 1280x720 qsv.mp4

```

# でもエラーが出ることがあります

おそらく古めのPCなど環境要因かと思いますが、以下のようなエラーが出ることがあります。

"Selected ratecontrol mode is not supported by the QSV runtime. ...."

![h264_qsv_error.png](https://qiita-image-store.s3.amazonaws.com/0/30578/7487a4d3-8c3c-9c6f-d4f1-c4f5a6aec8d6.png)

# エラーの回避方法

前述のエラーを回避するために、-look_ahead 0 を付けるようにします。

```bash
ffmpeg -i INPUT -c:v h264_qsv -b:v 2000k -r 30 -s 1280x720 -look_ahead 0 qsv.mp4

```

# 変換速度

上述の設定で、Ivy Bridge のノートPCで、H.264 -> H.264 で再エンコードしたところ、変換速度は以下のようになりました。
ちなみにソース解像度はフルHD、2分15秒の音声付動画です。

|  エンコーダー |変換速度   |
|:-:|:-:|
| libx264  |  x1.17 | 
| h264_qsv  | x4.04  |


# 参考リンク

[Intel QSV Codecs](https://ffmpeg.zeranoe.com/forum/viewtopic.php?t=2562&start=20#p9389)
Python / numpy > QMC(Halton_sequence)に基づく要素の取り出しの実装

```txt:動作環境
Ubuntu 14.04 LTS desktop amd64
GeForce GTX 750 Ti
ASRock Z170M Pro4S [Intel Z170chipset]
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v7.5
Python 2.7.6
IPython 5.1.0 -- An enhanced Interactive Python.
```

TensorFlowにおいてmnist.next_batch()の代わりに使う予定のQMCコード。
小さなコードで動作確認をしてみた。

imglistからHalton Sequenceを用いて要素を取り出す。
関連 http://qiita.com/7of9/items/7a8920531fd715d0b75a
関連 http://qiita.com/7of9/items/9db1251e714952794023

## v0.1

```sample.py
import numpy as np

imglist = np.array([10,20,30,40,50,60,70,80,90])

def Halton_sequence(i0):
    xbase = 2
    ybase = 3

    invxbase = 1.0 / xbase
    facx = 1.0 / xbase

    invybase = 1.0 / ybase
    facy = 1.0 / ybase

    inp = i0
    x0 = 0.0
    while inp > 0:
        x0 = x0 + (inp % xbase) * invxbase
        inp = inp / xbase
        invxbase = invxbase * facx

    inp = i0
    y0 = 0.0
    while inp > 0:
        y0 = y0 + (inp % ybase) * invybase
        inp = inp / ybase
        invybase = invybase * facy

    return x0, y0

length = len(imglist)

idx = np.array([])
for i0 in range(10):
	# discard 2nd
	res, _ = Halton_sequence(i0)
	# print res * length
	idx = np.append(idx, res * length)

print idx
print imglist[idx.astype(int)]
```

```txt:結果
$ python sample.py 
[ 0.      4.5     2.25    6.75    1.125   5.625   3.375   7.875   0.5625
  5.0625]
[10 50 30 70 20 60 40 80 10 60]
```

## v0.2 QMC_getIndex()追加

```sample.py
'''
v0.2 2016 Oct. 22
	- add QMC_getIndex()
v0.1 2016 Oct. 22
	- use Halton_sequence() together with unorganized code
'''

import numpy as np

imglist = np.array([10,20,30,40,50,60,70,80,90])

def Halton_sequence(i0):
    xbase = 2
    ybase = 3

    invxbase = 1.0 / xbase
    facx = 1.0 / xbase

    invybase = 1.0 / ybase
    facy = 1.0 / ybase

    inp = i0
    x0 = 0.0
    while inp > 0:
        x0 = x0 + (inp % xbase) * invxbase
        inp = inp / xbase
        invxbase = invxbase * facx

    inp = i0
    y0 = 0.0
    while inp > 0:
        y0 = y0 + (inp % ybase) * invybase
        inp = inp / ybase
        invybase = invybase * facy

    return x0, y0

def QMC_getIndex(listSize, start, getsize):
	idx = np.array([])
	for i0 in range(start, start + getsize):
		res, _ = Halton_sequence(i0) # discard 2nd dim
		idx = np.append(idx, res * listSize)
	return idx

length = len(imglist)
idx = QMC_getIndex(length, 0, 10)
print "idx:",idx
print "img:",imglist[idx.astype(int)]

idx = QMC_getIndex(length, 10, 10)
print "idx:",idx
print "img:",imglist[idx.astype(int)]
```

```txt:結果
$ python sample.py 
idx: [ 0.      4.5     2.25    6.75    1.125   5.625   3.375   7.875   0.5625
  5.0625]
img: [10 50 30 70 20 60 40 80 10 60]
idx: [ 2.8125   7.3125   1.6875   6.1875   3.9375   8.4375   0.28125  4.78125
  2.53125  7.03125]
img: [30 80 20 70 40 90 10 50 30 80]
```
DataSpiderを使った連携処理開発の進め方

#はじめに
DataSpiderを使うときこんな感じに作業を進めると割と簡単に処理を組み込むことができるんじゃないかと思うことをまとめてみました。

#実現したいことを考える
最初はDataSpiderがどうとかそういったことは考える必要はありません。
まずは何を実現したいのか、まずはここからはじめます。
できれば実現したいことの

 - コンセプトをひとつ、
 - コンセプトを実現するための具体的な機能レベルを構成要素として箇条書きで。
 - それとこの機能を使ったユーザの利用シーン（ユーザシナリオというのかな？）
 - と、利用シーンがイメージしやすいイラストを、

という順序というか、こうした作業を行ったり来たりで要件を落とし込んでいく。
![image](https://qiita-image-store.s3.amazonaws.com/0/35843/8a6b6f4c-42c3-268a-6dcb-77af093e8d1d.png)

#利用できそうなAPIを選定する
APIには色々な種類があるので上記コンセプト、構成要素の機能になりそうなAPIを探します。
ここはMashupAwardsのサイトから探すとまとまっているので便利です。

 - [MashupAwards API Library](http://hacklog.jp/apis?order=category&category=&award_id=12&q=)

そして足りないところはもちろん自分で実装する。

#起動タイミングと方向を考える
構成要素（API群）が決まったら、

- その処理がどのタイミングで（ファイルが配置されたタイミング、定期実行、他のアプリケーションからのCall、etc...）
- どのような形式でどのようなパラメータを渡して（JSON、XML、SOAP、csvなど）
- どちらの方向で連携が行われるのか

を確認していきます。
![image](https://qiita-image-store.s3.amazonaws.com/0/35843/cefd3852-6eef-30de-5012-15776b5dbdcb.png)
ここでDataSpiderとしては`トリガーの種類（HTTP、スケジュール、etc...）`と`I/F形式（JSON、XML、ファイル、etc...）`の定義をしていきます。

#疎通確認をする
起動タイミングとI/F形式が決まったら疎通確認に入ります。
1.個々のAPI毎にアダプタを使って接続検証
　- Studioのツールパレットからデータリソースに合わせたコンポーネントを選択します。
　 ![image](https://qiita-image-store.s3.amazonaws.com/0/35843/bd9d63e9-e928-c198-acd3-28b1f93197b6.png)

2.連携元、先におけるデータ構造の違いはマッパーで解消
　- ツールパレットの`変換`カテゴリから`基本`→`マッピング`を使います。
　　![image](https://qiita-image-store.s3.amazonaws.com/0/35843/83e02c6f-ed92-5f0d-839f-99eb1b8a0c27.png)

2.各API群を単純データでつなぎ合わせ、シナリオの通りの動作をさせる。
　- まずは固定値で全体の流れを確認することが目的なので、変数ではなく固定値で。
　![image](https://qiita-image-store.s3.amazonaws.com/0/35843/d451918f-a180-5499-eb7b-d7ca724069b2.png)

一連の流れが確認できたら完了です。

#変化を与える
インプットパラメータによって処理に変化を与えるため、変数を利用して先程の処理を改良していきます。
例えばファイル名が都度異なる場合や、画面上で入力した値を利用したい場合などです。

1.スクリプト変数の作成
　-　`プロジェクトエクスプローラ`の対象スクリプトを右クリックして`新規作成`→`スクリプト変数`へと進みます。
　![image](https://qiita-image-store.s3.amazonaws.com/0/35843/a987f69b-929a-9d02-06e4-e130e0645dd1.png)

　- `名前`→変数名、`変数型`→複数の型から選択、`入力、出力変数の種類を選択`して、必要に応じて初期値を利用します。
　![image](https://qiita-image-store.s3.amazonaws.com/0/35843/c082d70a-b3f3-acfb-63e4-4d0d92d80c41.png)


2.スクリプト変数の組み込み
　例えばファイル名称を変数として定義したい場合
　1. 固定のファイル名を削除し、![image](https://qiita-image-store.s3.amazonaws.com/0/35843/6942a8b7-7b11-25c4-c766-ef219a4407e6.png)をクリックします。
　![image](https://qiita-image-store.s3.amazonaws.com/0/35843/86a4dcf4-311f-f67e-5bb4-d63aec636728.png)

　2. 先程作成した`スクリプト変数`を選択します。
　![image](https://qiita-image-store.s3.amazonaws.com/0/35843/5ba55368-b6a3-2743-e23f-622c3439b7df.png)
　※その他`環境変数`、`コンポーネント変数`も利用可能ですので必要に応じて利用します。

　3. `${}`で囲まれている部分が変数となります。
　![image](https://qiita-image-store.s3.amazonaws.com/0/35843/c08dd444-c25d-6bd8-ab43-84b391b4d35d.png)

　4. テスト実行時の値を設定しますので、`プロジェクトエクスプローラ`のスクリプトを右クリックして`プロパティ`を選択します。
　![image](https://qiita-image-store.s3.amazonaws.com/0/35843/14f9cf56-2fdf-9361-f161-db57427499bd.png)

　5.`テスト実行時の引数値を設定する`にチェックを入れて、`テスト実行時の値`を入力して設定は完了です。
　![image](https://qiita-image-store.s3.amazonaws.com/0/35843/dc012d5f-7f11-b525-6679-2633467b057f.png)

#さいごに
以上が大まかな流れになります。（一部細かい話もありましたが・・・）
numpy > 特定のインデックスをnp.array()に逐次足す / そのリストをインデックスとして使って要素を取り出す

```txt:動作環境
Ubuntu 14.04 LTS desktop amd64
GeForce GTX 750 Ti
ASRock Z170M Pro4S [Intel Z170chipset]
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v7.5
Python 2.7.6
IPython 5.1.0 -- An enhanced Interactive Python.
```

TensorFlowのmnist.pyにあるnext_batchをQMC改造しようとしている。QMC(Halton Sequence)は順次計算され、そのリストを持ってtrainデータの要素を取得しようと考えている。

インデックスが得られた場合の要素の取り出しは以下で理解した。
http://qiita.com/7of9/items/6851c743de9faee4ab00


次はインデックスに数値を順次足す処理を理解する。
色々試したところ、以下で実行できた。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/1fa31a75-4ac8-b407-8fd2-414d4714a02a.png)
【Haskell】do糖衣構文の制約と変換

do構文は、全ての式が同じモナドを返さなければなりません。

```hs
action = do
    print 1           -- 戻り値の型は IO ()
    getLine           -- 戻り値の型は IO String
    putStrLn "Hello"  -- 戻り値の型は IO ()
```

do構文は糖衣構文です。上記アクションは、以下のように変換されます。

```hs
action = print 1 >>= (\_ -> getLine >>= (\_ -> putStrLn "Hello"))
```

do構文では、`var <- action`という式を記述することができますが、これは上記ラムダ式の引数に名前を与えることと同義です。例えば以下のようなアクションは、

```hs
action = do
    xxxxx <- getLine
    putStrLn xxxxx
```

以下のように変換されます。

```hs
action = getLine >>= (\xxxxx -> putStrLn xxxxx)
```

do構文にはletを記述できます。

```hs
action = do
    let var = "hello"
    print var
    putStrLn "end"
```

上記アクションは、以下のように変換されます。

```hs
action = let var = 123 in (print var >>= \_ -> putStrLn "end")
```

## まとめ

```hs
-- do糖衣構文
action = print 1 >>= (\_ -> getLine >>= (\_ -> putStrLn "Hello"))

-- xxxxx <- getLine
action = getLine >>= (\xxxxx -> putStrLn xxxxx)

-- let var = 123
action = let var = 123 in (print var >>= \_ -> putStrLn "end")
```
numpy > 特定のインデックスのリストを取得する > idx = np.array([0,2,4]) / print xlist[idx] / print ylist[idx]

```txt:動作環境
Ubuntu 14.04 LTS desktop amd64
GeForce GTX 750 Ti
ASRock Z170M Pro4S [Intel Z170chipset]
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v7.5
Python 2.7.6
IPython 5.1.0 -- An enhanced Interactive Python.
```

TensorFlowのmnist.pyにあるnext_batch()の代わりにQMCのHalton Sequenceを使う場合、Halton Sequenceで得られるインデックスに位置する要素リストを返す必要がある。

numpyやリストの扱いはまだよくわからないのでやってみた。

参考 http://www.kamishima.net/mlmpyja/nbayes1/ndarray.html
参考 https://docs.scipy.org/doc/numpy-1.10.1/user/basics.indexing.html

ついでにJupyter使ってみた。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/be926294-b132-a1d4-462c-b771ec04ee05.png)

idxを一旦np.array()で確保して、それを使えば良いようだ。
AMPでGoogleマップを表示する方法（エンジニア向け）

Accelerated Mobile Pages（AMP）でGoogleマップを表示する方法です。

※[AMPページでGoogleマップを表示する方法 – ストリートビューもOK！](https://www.craneto.co.jp/archives/882/)をエンジニア向けに簡潔に書き直したものです。丁寧な説明が必要なら原文をお読みください。


##　概要
1. APIキーの取得とアクティベートをしておく
2. `<amp-iframe`>を使用する（`<amp-map`>というタグはない）
3. amp-iframe のsrc属性にGoogleMapsを表示したURLを指定
4. src属性値の指定方法は2パターンある（後述）


## APIキーの取得とアクティベートをしておく
下準備として、APIキーを取得して Google Maps Embed API と Google Maps JavaScript API をアクティベート。

※エンジニア向けのため手順省略。不明なら下記を参照。
https://developers.google.com/maps/documentation/javascript/?hl=ja

## 直接埋め込み法 と 間接埋め込み法
`<amp-iframe`>のsrc属性URLの指定方法は２パターン。

1. Google Maps Embed API　により Google Maps サーバ上のURLを指定
2. 自前のHTML5ページを指定

（Google Maps サーバから地図データを直接読み込むため）前者を直接埋め込み法と呼び、後者を間接埋め込み法と呼ぶ。なお、正式なものではなく、便宜上、そう呼んでいるだけです。


## 直接埋め込み法
Google Maps Embed API　のURLを指定するだけ。
https://developers.google.com/maps/documentation/embed/?hl=ja

```
<amp-iframe height="250"
            sandbox="allow-scripts allow-same-origin allow-popups"
            layout="fixed-height"
            frameborder="0"
            src="https://www.google.com/maps/embed/v1/place?key=[あなたのAPIキー]&q=place_id:ChIJnxAAO1aLGGARJqvi8d4oczM">
</amp-iframe>
```

サンプル：　[AMPでGoogleマップを実装するサンプル](https://www.craneto.co.jp/examples/amp/google_map/) に実例あり


## 間接埋め込み法
### 1. amp-iframe の src属性に指定するページを作成
Google Maps JavaScript APIで地図を表示したページを作成。src属性に指定するのは、（AMP HTMLではなく）通常のHTML5ページのため、もちろんJavaScriptを使えます。

サンプル: [Iframe用Googleマップ](https://www.craneto.co.jp/examples/amp/google_map_iframe/)
※ただ地図を表示しているだけのHTML5ページです。


### 2. amp-iframeで読み込み
src属性に上記1で作成したページのURLを指定すると、AMPページでGoogleマップが表示されます。

```
<amp-iframe height="250"
            sandbox="allow-scripts allow-popups"
            layout="fixed-height"
            frameborder="0"
            src="https://www.craneto.co.jp/examples/amp/google_map_iframe/">
</amp-iframe>
```

サンプル：　[AMPでGoogleマップを実装するサンプル](https://www.craneto.co.jp/examples/amp/google_map/) に実例あり


## amp-iframe の罠に注意
`<amp-ifarme`>をページ上部で使用するとAMPバリデーション・エラーになるので、600pxまたはビューポートの75%（height）より下に表示する必要がある点に注意。ページ上部に表示したい場合には`<amp-ifarme`>のplaceholderを使用のこと。


以上となります。
【Haskell】case式

Haskellの`case of`は式であるため、値と同じように扱うことができます。

```hs
let var = 100
    str = case var of
        100 -> "Hundred"
        _   -> "Otherwise"
```

ifと同じく、式の生成する値の型は一致させなければなりません。例えば、以下のコードはエラーとなります。

```hs
let var = 100
    str = case var of
        100 -> 100          -- 戻り値の型は Num a => a
        _   -> "Otherwise"  -- 戻り値の型は String
```
TensorFlow @ Ubuntu 14.04 LTS > インストール場所を表示 > pip show tensorflow

```txt:動作環境
Ubuntu 14.04 LTS desktop amd64
GeForce GTX 750 Ti
ASRock Z170M Pro4S [Intel Z170chipset]
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v7.5
Python 2.7.6
```

http://qiita.com/7of9/items/ccba0e0945b475cf1f3a
に記載方法でTensorFlowをインストール済。

Virtualenvで使用。

mnist.train.next_batch()の定義しているmnist.pyファイルを探そうとしている。
関連　http://qiita.com/7of9/items/7333b20829fddb23e467

TensorFlowのインストールディレクトリは以下のpipコマンドで見つけられる。
参考 http://stackoverflow.com/questions/33616732/where-is-the-folder-for-installing-tensorflow-with-pip-mac-osx

```
$ pip show tensorflow
---
Name: tensorflow
Version: 0.11.0rc0
Location: /home/yasokada/tensorflow-GPU/lib/python2.7/site-packages
Requires: protobuf, wheel, mock, numpy, six
```

上記の情報をもとにminst.pyをfindしてみた。

```
$ find . -name mnist.py
./tensorflow/examples/tutorials/mnist/mnist.py
./tensorflow/contrib/learn/python/learn/datasets/mnist.py
```
TensorFlow > link > mnist.train.next_batch()の定義 @ github

mnist_with_summaries.py
にある以下の定義。

```
xs, ys = mnist.train.next_batch(100, fake_data=FLAGS.fake_data)
```

QMCを組込むにはこのあたりを改変する必要がある。
関連 http://qiita.com/7of9/items/f9e243d23240c3316f28

githubでは以下でnext_batch()のdefを見つけた。
tensorflow/tensorflow/contrib/learn/python/learn/datasets/mnist.py
https://github.com/tensorflow/tensorflow/blob/754048a0453a04a761e112ae5d99c149eb9910dd/tensorflow/contrib/learn/python/learn/datasets/mnist.py

```py
def next_batch(self, batch_size, fake_data=False):
    """Return the next `batch_size` examples from this data set."""
    if fake_data:
      fake_image = [1] * 784
      if self.one_hot:
        fake_label = [1] + [0] * 9
      else:
        fake_label = 0
      return [fake_image for _ in xrange(batch_size)], [
          fake_label for _ in xrange(batch_size)
      ]
    start = self._index_in_epoch
    self._index_in_epoch += batch_size
    if self._index_in_epoch > self._num_examples:
      # Finished epoch
      self._epochs_completed += 1
      # Shuffle the data
      perm = numpy.arange(self._num_examples)
      numpy.random.shuffle(perm)
      self._images = self._images[perm]
      self._labels = self._labels[perm]
      # Start next epoch
      start = 0
      self._index_in_epoch = batch_size
      assert batch_size <= self._num_examples
    end = self._index_in_epoch
    return self._images[start:end], self._labels[start:end]
```

fake_dataでない時はstartとendを計算して、tupleで返している。
Ubuntu 14.04 LTS > tmuxのバージョン確認 > dpkg -l | grep tmux

```txt:動作環境
Ubuntu 14.04 LTS desktop amd64
GeForce GTX 750 Ti
ASRock Z170M Pro4S [Intel Z170chipset]
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v7.5
Python 2.7.6
```

CentOSをメインで使っているがTensorFlowの関係でUbuntuも使い始めた。

tmuxなどのバージョンを知りたい。

参考 http://qiita.com/white_aspara25/items/723ae4ebf0bfefe2115c

```
$ dpkg -l | grep tmux
ii  tmux                                                  1.8-5                                               amd64        terminal multiplexer
```
技術英語 > 悪のエンジニアのreturnの使い方 > Return fire! / ceasefire / The line must be drawn here! This far, no further! 

http://qiita.com/7of9/items/a8e526111ec8ec34114a
で紹介した「良いエンジニアのreturnの使い方」

これと対照的なのは

### 悪のエンジニアのreturnの使い方

例としてphoton topede(光子魚雷)を打ってきた相手に対してJaneway艦長（やPicard艦長)が

> <font color=red>Return fire!</font>
(光子魚雷を)打ち返せ

http://ejje.weblio.jp/content/return+fire
> 射返す、〈砲撃で〉・応戦する

同様に、仕事上でけんか腰の相手に対してreturn fireするかどうか。

ある程度経験を積んだエンジニアの場合、return fireすると話がややこしくなることを知っている。その場合は、こっそり心の中で"return fire"とするにとどめる。

ある程度すっきりしたら

> <font color=red>ceasefire</font>
http://ejje.weblio.jp/content/ceasefire
> 停戦、休戦、「撃ちかたやめ」の号令

どうしても切れたくなった時にPicard艦長が映画First contactで切れた場面のように

> <font color=red>The line must be drawn here! This far, no further!</font> 

上記は侵略するボーグに対して、これ以上領地を取られないように(かつ犠牲を増やさないように)という意味を含んでいる。
やりとりをする中で、これ以上相手の要求に振り回されないときなどに穏やかに(calmly)使うのはいいかと思われる。

さて、今日もたくさんのreturn文の入力作業(コーディングとも言う)に入るとしよう。

Return fire!
or
Return a favor of you.

Which path will you choose?

@ 生きるのが楽しくなる15の習慣 by 日野原重明さん
> そして、どんなときでも良い習慣を選択することを、真剣に考える必要があります。
フロントエンドの開発環境 2016年まとめ

前回の記事から一年なんたらとかいうコメントを見かけるたびにまとめないとなぁと正体不明の危機感を抱いていました、お元気でしょうか。

で、表題通り……開発環境のtodoが古くなってたので2016年のまとめとしてメモしておきます。
同じフロント界隈で社会の理不尽と戦ってる方のヒントとかに慣れたら幸いです。

## 楽して仕事するのがモットー

自動化出来るところは自動化したい、というのが基本方針です。インストールするリストはこちら。

- xcode（cltと許諾をagreeするまでがワンセット）
- Homebrew
    - vim（最新版）
    - git（最新版）
    - rbenv（最新版）
    - ruby-bulid
    - ruby-default-gem
    - Ruby（rbenvでinstall）
    - Bundler
- nodebrew
    - node.js（最新版）
- gulp（最新版）

この辺、ぶっちゃけshellスクリプトとか書いて自動化したいくらいなんですけど、まずまだそこまで私のスキルがないというのとxcode周りがどうしても手動になっちゃうなぁって思って、仕方ないですが全部手動で一個一個やっていく所存です。

### vim

つい先日、10年ぶり？くらいにメジャーアップデートがあって8になりましたね。  
プラグイン管理にdeinを使っていたので、「まあ、そんなことなならないだろう」とは思ってたんですが、ちょっと様子見てました。
で、先日ものは試しだと思って8にアップデートしてみたもののdeinも問題なく動いています。

### git

前はシステムに入ってるデフォルトを使ってましたが、なんとなく最新版にしておきたいなぁと思ってbrewでgitの最新版をインストールして、今はこっちを使ってます。
……特に書くことないな……。

### rbenv

Rubyのバージョン管理ツールです。
こいつがないと仕事にならない時があります。
Rubyバージョンの安定版はRuby公式のサイトで紹介されてるので、そちらを参照してください。

### ruby-build

rbenvとセットで入れます。これがないとRubyをコンパイルしてくれないので動きません。

### ruby-default-gem

BundlerとかRubyのバージョンにつき一個入れたいgemとかのリストファイルを作って、rbenvでRubyをインストールする際に一緒にgem installしてくれます。
なくても`rbenv exec install`とか使えばRubyに入るんですけど……いちいちめんどくさいので、こっち使ったほうがいいです。
特にプロジェクト毎にRubyバージョンを`rbenv local`とかで指定してる人は絶対必要だと思います。

追記：https://twitter.com/ksmz4o/status/911228775567736850 っていう噂を聞いたので、もしBundler入れるだけのためだったらこれいらなくなるかもですね。

### Ruby
`rbenv install [version]`でRubyをインストールします。
Railsとかプロジェクトで触ってたりすると、複数バージョンインストールしておかないといけないケースがあったりするのでrbenvでいろいろインストールすると思います。
バージョンもrbenvで切り替えます。

### Bundler

gemのパッケージ管理ツールです。
Gemfileに書かれたgemリストを`bundle install`コマンドで一気にインストールしてくれるやつです。
基本的にRuby１バージョンにつき、ひとつ入る感じ。なのでrbenvで複数バージョン入れてると、「2.1.xには入ってるけど、2.3にしたらコマンドがねぇって言われる」とかあると思います。
こういう事があるので、上記でruby-default-gemをセットで入れとくと便利と紹介しました。
大体、そのまま`bundle install`ってしてもいいんですが、そのままだとディレクトリが散らかってちょっと管理的によろしくないので、`bundle install --path vendor/bundle`ってしてインストール場所を指定するとプロジェクトのルートディレクトリが整理されて管理しやすくなります。


### nodebrew

以前はnvm使ってたんですが、PATH通すのが結構めんどくさいなって思ってたのと、こっちのほうが使いやすそうというだけの理由でnodebrew使うようにしました。
使い方めちゃくちゃ簡単です。公開されてるgithubのREADME.md見れば大体すんなり行きます。初心者でも失敗すること少ないと思うので、おすすめです。（この先のメンテが気になりますけど）


### Gulp

Gruntとの宗教戦争になりがちですが、こっちのほうが使い慣れているので、使ってる感じです。
nodeもそうですけど、結構頻繁にアップデートされてるんで、使うときは定期的にメンテしないとダメだなって思いました。

## 模索してきた楽な開発環境構築

### vimと.bashrcはクラウドドライブとかで一元管理。

新しい環境を作るときに地味にめんどくせぇなぁって感じるのが、vimとかbashの設定だったりします。
この辺の設定ファイルはDropboxみたいなクラウドドライブに突っ込んでおいて、
`ln -s`コマンド使って、シンボリックリンクを作って一元管理したほうが楽です。
bashrcにgitのブランチ名が表示される設定とか、更にコンソールのユーザー名の部分にいい感じのところに改行を入れて見やすくしたりとかいろいろしてるので、これをイチから書こうと思うと結構しんどかったりします。

### Rubyのバージョンはプロジェクトディレクトリ毎に設定
プロジェクトを複数動かしてると、このプロジェクトはバージョン2.1系で、こっちは2.3系とか……よくあるので、rbenvのlocalオプション使って、プロジェクト毎に固定することにしました。

色々書いてきましたが、正直ここまで出来るようになったのってここ1年位とかの話なので（vimなんて使い始めてまだ半年も経ってないけど、もうvimから離れられない）……まだまだ勉強中なので「ここはこうした方が楽になるよ！」とかがあればぜひコメントいただけるとうれしいです。

ホントはインストールの仕方とかも書こうと思ったけど、参考にした記事のURLメモってなくて、心が折れました。
ggれば出てくる記事が大半だと思うので、大目に見てください。
余裕が出来たらインストール手順とか追記するかも。
TiddlyWiki5 良い

## メモ

* [公式HP](http://tiddlywiki.com/)

## おすすめplugin

* markdown書式対応

![スクリーンショット_2016-10-22_06-31-58.png](https://qiita-image-store.s3.amazonaws.com/0/25728/4597de8c-c983-610e-1a1d-1ca433a7ad37.png)

* 中央揃え

![スクリーンショット_2016-10-22_06-32-20.png](https://qiita-image-store.s3.amazonaws.com/0/25728/3d27df26-8e19-5a3e-0bcc-eac929b14a0b.png)


## Firefoxで保存対応

* [TiddlyFox extension for Firefox :: Add-ons for Firefox](https://addons.mozilla.org/en-US/firefox/addon/tiddlyfox/)

## リンク切れのファイル検索

* Advanced Search -> Orphan tiddles

![スクリーンショット_2016-10-22_06-29-16.png](https://qiita-image-store.s3.amazonaws.com/0/25728/61c1052f-2884-2d40-eec2-b8be865f886e.png)

## バージョンアップ

* `export all`で `.tid`を選択。
* 新しいTiddlyWiki5で import

![スクリーンショット_2016-10-22_06-34-01.png](https://qiita-image-store.s3.amazonaws.com/0/25728/1d2893ea-e117-b8fd-8a11-afc1a99504d5.png)
has_manyの子要素が最低一つある親要素全てを選択する

いつもやり方を忘れるので、忘れた時にぐぐったらこのページが出てくるように書いてます。

### やり方

```.rb
Post.joins(:comments).uniq
```

ちなみに生成されるSQLは

```.sql
SELECT DISTINCT "posts".* FROM "posts" INNER JOIN "comments" ON "comments"."post_id" = "posts"."id"
```

### 参考

http://stackoverflow.com/questions/9922833/rails-how-to-get-objects-with-at-least-one-child
Node.jsで複数行のコンソール出力を定期的に更新する

# 動機

動的に変わる値を確認のためにとりあえずconsole.log()なんかで出していると、コンソール出力がずっと下に流れて行って目で追えなかったり。
topコマンドみたいにコンソール上で値が更新され続けるのやってみたい、ということでやってみた。

# やりたいこと

定期的に変化する値をずっと同じ行で更新し続けて眺めたい。
でもエラーとか不定期に発生するログも見たいのでそういうのも確認できるようにしたい。

# やったこと

単にreadlineのmoveCursor(), clearLine()を駆使しただけです。
MultiLineConsoleUpdaterクラスをインスタンス化すると、1秒間隔でprocess.memoryUsage()の値をコンソール上で更新し続けます。
log()メソッドに文字列を渡せば、それは普通にconsole.log()した時のように出力されます。

```javascript:MultiLineConsoleUpdater.js
const readline = require('readline');

class MultiLineConsoleUpdater {
  constructor() {
    /** @private */
    this.regularLines = 4;
    /** @private */
    this.logQueue = [];

    process.stdout.write(Array(this.regularLines + 1).join('\n'));
    setInterval(this.writePeriodically.bind(this), 1000);
  }

  /** @private */
  clearAndWrite(text) {
    readline.clearLine(process.stdout);
    process.stdout.write(text);
  }

  /** @private */
  writePeriodically() {
    readline.moveCursor(process.stdout, 0, -this.regularLines);
    readline.cursorTo(process.stdout, 0);

    // write irregular logs
    while (this.logQueue.length > 0) {
      this.clearAndWrite(this.logQueue.shift());
    }

    // write regular logs
    // e.g. memory usage
    const { rss, heapTotal, heapUsed } = process.memoryUsage();
    this.clearAndWrite('##### Memory Usage #####\n');
    this.clearAndWrite(`rss: ${rss}\n`);
    this.clearAndWrite(`heapTotal: ${heapTotal}\n`);
    this.clearAndWrite(`third line: ${heapUsed}\n`);
  }

  log(text) {
    this.logQueue.push(`${text}\n`);
  }
}

// ##### usage sample #####
let debugCounter = 0;
const w = new MultiLineConsoleUpdater();

setInterval(() => {
  w.log(`This is an irregular log: ${debugCounter}`);
  debugCounter += 1;
}, 3000);
```

上を実行すると以下のように出力されます。

```
This is an irregular log: 0
This is an irregular log: 1
This is an irregular log: 3
This is an irregular log: 4
This is an irregular log: 5
##### Memory Usage #####
rss: 26599424
heapTotal: 10522624
third line: 4620904
```

メモリ使用量は常に最下部で更新され続けており、その上にlog()で出力した"This is irregular log: n"は3秒間隔で追加されていきます。
mysql5.7 slow query解析の注意点

mysql5.7で，なぜかmysqldumpslowがうまく動いてくれなかった．
具体的には，中身が同じクエリを，別々にカウントしていた．

原因はmysql5.7から追加された`log_timestamps`というオプション（だと思う）

デフォルトでこのオプションの値が`UTC`となっており，mysqldumpslowがそれに対応しておらず別々にカウントしていたらしい

なので
my.cnfで
```
log_timestamps = SYSTEM
```
として再起動するか
consoleで
```
set global log_timestamps = SYSTEM;
```

として
```
mysqldumpslow -s t /tmp/mysql-slow.log
```

などとしてやればよい．
Android 學習筆記 - Custom ListView UI

繼這篇： [Android 學習筆記 - 建立簡單的 ListView](http://qiita.com/vc7/items/3fe9edded4b8306646f5)
今天抽空找一下資料，試著實作自定義 ListView 的 row UI

只記實作內容，詳細原理後查後補～

## 項目

主要分成以下三個部分

- 建立 UI 的 XML
- 建立 Adapter 連結 UI 的 xml
- 建立 View Holder 讓 UI instance 可以重用

## 建立 UI 的 XML

這時候在專案的 `layout` 區塊下面新增一個 `row.xml` ，名稱可自定義。

經過編輯之後，裡面長這樣：

``` xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Header"
        android:textSize="20dp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView"/>

</LinearLayout>
```

## 建立 Adapter 和 View Holder

這個 Adapter 是要加給 ListView instance 使用的，
在左側專案的 java 目錄下的專案區塊新增一個 `MyAdapter.java` ，檔名一樣可自定義。

而使用 View Holder 的原因在此 → [參照](https://developer.android.com/training/improving-layouts/smooth-scrolling.html)
詳細的運作原理和 `LayoutInflater` 是什麼東西等等的還要再研究研究。

完成後長這樣：

``` java
public class MyAdapter extends BaseAdapter {
    Context context;
    String[] data;
    private static LayoutInflater inflater = null;

    public MyAdapter(Context context, String[] data) {
        this.context = context;
        this.data = data;
        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return  data.length;
    }

    @Override
    public Object getItem(int position) {
        return data[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
        viewHolder = new ViewHolder();

        if (convertView == null) {
            convertView =  inflater.inflate(R.layout.row, parent, false);
            // 把拿到的 textView 設定進 view holder
            viewHolder.textView = (TextView)convertView.findViewById(R.id.textView);
        } else {
            convertView.setTag(viewHolder);
        }

        viewHolder.textView.setText(data[position]);

        return convertView;
    }

    static class ViewHolder {
        TextView textView;
    }
}
```

## 整合使用

這時候在 ListView 的所在地就可以這樣用：

先宣告：

``` java
ListView listView;
ListAdapter listAdapter;
```

接著把剛剛新建的 `MyAdapter` 設定給 `listView`

``` java
listView = (ListView)findViewById(R.id.listView);
listAdapter = new MyAdapter(this, new String[]{"a", "b", "c"});
listView.setAdapter(listAdapter);
```

成果長這樣：

<img width="240" alt="Custom ListView UI" src="https://qiita-image-store.s3.amazonaws.com/0/41979/b36ad493-1124-8167-45f9-f68c28d8e890.png">
【Swift】SwiftyJSON サンプルコード

# 概要
SwiftyJSONのサンプルコードです。
Yahooオークションの[商品詳細API](http://developer.yahoo.co.jp/webapi/auctions/auction/v2/auctionitem.html)のレスポンスの一部をparseしてViewControllerに表示しています。

# github
https://github.com/menomoto/Template_Parser/tree/master/SampleSwiftyJSON

# 結果
![サンプル](http://i.imgur.com/13cTbBM.png)
初めてのFPGA

HFTやBingなど、FPGAを使って超高速処理を実現していると聞いて、自称フルスタックエンジニアだったらやっておかないと！と思っていたのだけれど、PCとUSBで接続するのにも専用アダプタが必要だったり、導入コストが高いなーと思って二の足を踏んでいた。

2016年10月中旬。ふと、MAX 10 を積んだ Odyssey MAX 10 FPGA Eval Kit が、9600円のところ [販売開始キャンペーン](https://store.macnica.co.jp/products/mpression_odyssey-max10-kit)とやらで5480円になっているのを見つけた。しかも初回2000台のうち、残りが28台というではないか。くらくらと目眩がして、しばらく気を失ってたら手元にあった。

(追記)　2016-11-08、キャンペーンは「在庫なし」になりました。11-15 在庫復活してます。

[Odyssey MAX 10 FPGA Eval Kit](https://store.macnica.co.jp/library/107833) とは
> [アルテラのMAX 10 FPGA](https://www.altera.co.jp/products/fpga/max-series/max-10/overview.html)とブロードコムのWiced SMART BLEモジュール、シリコンラボラトリ―のEFM32マイコン、加速度、温湿度、照度・近接・ジェスチャーセンサ、マイクを組み合わせた、スマートフォンで制御できるIoT機器開発キットです。

# [FPGA ではじめてのLチカ！](https://store.macnica.co.jp/library/113049) をやってみる

## [開発ツールをダウンロード](https://store.macnica.co.jp/library/118877)

開発環境 Quartus Prime(無償のライトエディション), Nios II, ModelSim をダウンロードする。それぞれが何者だかはまだわかってない。でかい。ダウンロードするのに3時間弱かかる。今日はここまでやった。

しかもパッチあてないといけないらしい。それも同じくらいサイズがでかい。なんだこれ……

## 不明点

### USB Bluster 要るの要らないの

記事「[FPGA ではじめてのLチカ！](https://store.macnica.co.jp/library/113049)」」では 「用意するもの」の中に USB Blaster があるんだけど、「[[概要編] MAX 10 評価キット Odyssey の FPGA に microUSB ポート経由でコンフィギュレーション・データを転送してLチカ！](https://store.macnica.co.jp/library/115105)」だと、「でも実はこの Odyssey、USB-Blaster II ダウンロード・ケーブルを使用しなくても、一般的な USB-microUSB ケーブルを使って MAX 10 FPGA の開発ができちゃうんです」って書いてある。どっちだ。

### USBじゃなくてBLEでもいけるんじゃ?

[Odyssey MAX®10 FPGA Eval Kit 詳細ページ](http://www.m-pression.com/ja/solutions/boards/odyssey-fpga) からみられる
[BLE Sensorボード回路図](http://www.m-pression.com/documents/10157/8bfdfd16-b0cf-406f-b88d-15067b2041fc) を見ると、USBがつながっているかどうかでEFM32GG395F512がBLEとUSBをよろしく切り替えてくれるらしい。

[MAX10のデュアルコンフィグ機能を使って内蔵フラッシュを書き換えるツール](http://j-7system.blog.so-net.ne.jp/2016-01-23)を使えばUART経由で書き込めそうな気がする。でも一番最初


# 上のが終わったら、そのつぎには
これを写経する予定
[$30で始めるFPGA](http://www.slideshare.net/yukitakatakemura/30fpga)