OmniAICreator/Qiita-1.07M huggingface dataset:
【AWS】【AmazonLinux】AmazonLinuxのバージョンをアップデート

#【AWS】【AmazonLinux】AmazonLinuxのバージョンをアップデート
***とあるEC2インスタンスのAmazonLinuxのバージョンが古すぎるということでバージョンアップ作業を行った。以下はそのメモ。***

・まずは現バージョンの確認
```cat /etc/system-release
```
Amazon Linux AMI release 2014.03
古い。。 :sob: 
セキュリティ的にも問題ありなのでOS自体をアップデートします。

・yumのキャッシュをクリアします
```sudo yum clean all```
以下が出力された。
Loaded plugins: priorities, update-motd, upgrade-helper
Cleaning repos: amzn-main amzn-updates
Cleaning up everything
キャッシュクリア完了。

・yumでアップデート実行
```sudo yum update```
以下が出力された
〜〜諸々出力される〜〜
Complete!

・アップデート後のバージョンの確認
```cat /etc/system-release
```
Amazon Linux AMI release 2016.03

できました！ :relaxed:
ruby zlib compress

http://idiosyncratic-ruby.com/34-utility-gems.html

http://stackoverflow.com/questions/1361892/how-to-decompress-gzip-string-in-ruby

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/gzip.rb

```rb

        def compress(value)
          Zlib::Deflate.deflate(Marshal.dump(value))
        end

        def uncompress(value)
          Marshal.load(Zlib::Inflate.inflate(value))
        end
```

https://github.com/rails/rails/blob/b24d44edbb4726d06df782dc5b4b0e52db467d97/activesupport/lib/active_support/cache.rb#L688-L698

http://www.blue.sky.or.jp/atelier/ruby/zlib-0.3.en.html
WordPressの記事ページで、その記事に属するカテゴリのランキングを表示する（WordPress Popular Postsプラグインを使用）

##1. まずはプラグインをインストール。

https://wordpress.org/plugins/wordpress-popular-posts/

##2. テンプレートに”特定のカテゴリのランキングを出す”タグを書く
wpp_get_mostpopular()でウィジェットが呼び出せるようになっている。
https://github.com/cabrerahector/wordpress-popular-posts/wiki/2.-Template-tags

以下はカテゴリID=1のランキングを表示

  ```single.php
<?php
if (function_exists('wpp_get_mostpopular')){
	wpp_get_mostpopular('cat="1"');
}
?>
  ```

ただし、これだけだと、カテゴリ名、リンク、view数しか出ない。

##3.タグに出したいものを追加する

何を書けば出したいものが出せるかは、
WordPress管理画面＞設定＞WordPress Popular Posts
の「Parameters」タブを見ればよい

![スクリーンショット 2016-06-14 11.14.36.png](https://qiita-image-store.s3.amazonaws.com/0/40940/70cf44f5-71c5-d5bc-00cf-4dca52db256f.png "スクリーンショット 2016-06-14 11.14.36.png")

今回は

* アイキャッチ画像
* （画像に）リンク設定
* タイトル

を出したいので、


  ```single.php
<?php
if (function_exists('wpp_get_mostpopular')){
	wpp_get_mostpopular('cat="1"&post_html="<li>{thumb} <a href=\'{url}\'>{text_title}</a></li>"&thumbnail_width=250&thumbnail_height=120');
}
?>
  ```

複数設定するときは「&」でつなぐ。
となる。アイキャッチ（{thumb}のところ）をだすには、
「thumbnail_width」と「thumbnail_height」が必須のようす。

##4.カテゴリIDを動的にする


  ```single.php
<?php
if (function_exists('wpp_get_mostpopular')){
	$category = get_the_category();
	wpp_get_mostpopular('cat="' . $category[0]->cat_ID . '"&post_html="<li>{thumb} <a href=\'{url}\'>{text_title}</a></li>"&thumbnail_width=250&thumbnail_height=120');
}
?>
  ```

get_the_category()でカテゴリ情報を取得し、
固定だった1の数字を$category[0]->cat_IDに変更。

###完成図

![完成図](https://qiita-image-store.s3.amazonaws.com/0/40940/723e0a97-fa37-14a9-7631-96157d65f77e.png "完成図")


##おまけ

###記事がない時の「Sorry. No data so far.」の文言を変更したい時
下記URLをfunctions.phpに書けばできた！
https://github.com/cabrerahector/wordpress-popular-posts/wiki/3.-Filters#wpp_no_data

###記事詳細ページや、トップページの記事一覧に閲覧数を表示したい時

WordPressループ内で以下を書けば、どこでも(?)閲覧数を表示可能！素晴らしい！

  ```
<?php
    if (function_exists('wpp_get_views')) 
        echo wpp_get_views( get_the_ID() ); // This will only work when used inside the loop!
?>
  ```

https://github.com/cabrerahector/wordpress-popular-posts/wiki/2.-Template-tags#wpp_get_views
bashメモ

適当に追加していく感じで。

# ファイル名を置換してコピー
```bash
for file in `find . ! -name '.'`;do　\
cp $file `echo $file | sed -e "s/置換対象の正規表現/置換する文字列/g"`; \
done
```
メモ：カレントディレクトリのみ対象
Unity5でVR開発 シューティングゲームが作りたくて2 レーザービーム発射

<img width="557" alt="レーザービーム光線.png" src="https://qiita-image-store.s3.amazonaws.com/0/76843/c330762f-1dac-6865-4025-61a5dee7d786.png">


#0. プロローグ

今回はレーザービーム光線を出します！
写真はGoogle Cardboard SDKのものです。

注視点のポインターとGameObjectが重なった時ごにょごにょする方法はこちら！

□ハコスコ編 (Google Cardboard SDK for Unity)
http://qiita.com/39_isao/items/6a9ffa1c6df3ebb197c2

□Gear VR編
http://qiita.com/39_isao/items/438bd4aa38fc46c09914

#1.まずはレーザービームを作る

こちらの記事を参考に、Line Rendererでレーザーを作ります。
レーザー光線を作る【Unity】
http://aki-tk.hateblo.jp/entry/2016/01/02/193747
私はBeamというGameObject名にしました。
アクセスしやすいよう、「Beam」というタグを設定しておきます。
<img width="219" alt="スクリーンショット 2016-06-14 10.59.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/76843/bce4fab8-286c-a2ce-5f88-b8fa9290e578.png">


#2.レーザービームの設定
1.BeamのLine Rendererコンポーネントを非アクティブにしておきます。
(敵にヒットした時にアクティブにします。)

2.Beam.csというビーム発射と停止の
制御スクリプトを書いて、アタッチします。


<img width="281" alt="スクリーンショット 2016-06-14 11.02.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/76843/bd2cd4af-a8af-da5f-60e4-c1ba7e8eb04c.png">


```csharp:Beam.cs
using UnityEngine;
using System.Collections;

public class Beam : MonoBehaviour {

	// Use this for initialization
	void Start () {

	
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	/* ビーム発射 */
	public void FiringBeam(GameObject[] objs){
		var lineRenderer = GetComponent<LineRenderer>();
		lineRenderer.enabled = true;
		lineRenderer.SetPosition(0, objs[0].transform.position);
		lineRenderer.SetPosition(1, objs[1].transform.position);
	}

	/* ビーム終了 */
	public void Exit(){
		var lineRenderer = GetComponent<LineRenderer>();
		lineRenderer.enabled = false;

	}
}
```

#3. 銃口の設定
ビームが発射される銃口にしたいGameObjectに「Muzzle」というタグを設定します。
今回私は潜水艦オブジェクトの先端にしました。

#4. 撃たれるオブジェクトの設定
ビームで撃たれるGameObject(以後、敵と表記)に下記Scriptをアタッチします。

```csharp:Enemy.cs

using UnityEngine;
using System.Collections;

public class Enemy : MonoBehaviour {

	private GameObject Beam;
	private GameObject Muzzle;

	void Start () {
        // BeamとMuzzleオブジェクトの取得
		Beam = GameObject.FindWithTag("Beam");
		Muzzle = GameObject.FindWithTag("Muzzle");
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	// ビームの始点と終点を引数で持たせ、BeamオブジェクトにSendMessageする関数
	public void SendBeam(){
		GameObject[] objs = new GameObject[2];
		objs[0] = this.gameObject;
		objs[1] = Muzzle;
		Beam.SendMessage("FiringBeam",objs);
	}

    // ビームが消える処理を呼ぶ関数
	public void ExitBeam(){
		Beam.SendMessage("Exit");
	}
}

```

#5.ビームで撃たれるGameObjectにイベントトリガー設定
![スクリーンショット 2016-06-14 11.30.36.png](https://qiita-image-store.s3.amazonaws.com/0/76843/bc580dd9-6361-afa6-3999-ccb68be5fbd9.png)

マーカーが重なった時、ビームが表示され、外れると消えるようにします。


Pointer Enter.... 注視点マーカーと敵が重なった時のイベント
Enemy.SendBeam()を設定
Pointer Exit... 注視点マーカーが敵から外れた時のイベント
Enemy.ExitBeam()を設定

この辺はこちらの記事で
http://qiita.com/39_isao/items/6a9ffa1c6df3ebb197c2

Gear VRの場合はイベントトリガーは使わず、コードで書きました。


#6.完成！
![hoge.png](https://qiita-image-store.s3.amazonaws.com/0/76843/e6ba1439-ca5a-ae62-a3b4-037f6a99bbe5.png)
Developer have to make a description in project "info.plist" if developer wanna to access user's photo library.


**open `info.plist`, add a new item "Privacy - Photo Library Usage Description", it is a String. the value blank fill "Your usage description".**

![pic url](https://github.com/Asahi-Kuang/picture/blob/master/F3604B0C-E1D2-4329-88DF-D9072B81D943.png?raw=true)


ps. If you want to use Xcode7 and iOS 10, You have to download Xcode8 beta. Then, find file `Xcode8 -> Contents -> Developer -> Platforms -> iPhoneOS.platform -> DeviceSupport -> 10.0 (14A5261u)`, copy the `10.0 (14A5261u)` to Xcode7 document directory with the same path.finally, Xcode7 is going to complete the symbol file, just wait.

###Download the iOS10 developer disk image:

[developer disk image iOS10 for Xcode7](https://github.com/Asahi-Kuang/Xcode8-Device-Support-disk-image)
Swift 3.0 和 Xcode 8.0 beta

今天凌晨看完 WWDC ，很多人關心的應該是 Swift 3.0 吧 :satisfied: 
一到公司同事也跑來問我

於是就跑去 Apple 的開發者網站看了 Xcode 8.0 beta 的 release note 。看了之後，發現這個版本包含了 Swift **3** 和 **2.3** 兩個的 prerelease 版本。想要嘗試的人，可以試試看！

關於 Swift 3.0 的更新內容，可以前往這個文件看看

> https://github.com/apple/swift-evolution

和我之前觀察的相去不遠。如果有慢慢的從 Swift 2.2 的大改版修改的話， 3.0 應該是不需要太恐懼 :musical_note: 

## Swift Migration Workflow - 官方建議的修改方式

官方這樣說：

> a great way to update your code between beta releases of Xcode 8

可以從 Xcode 的最上面的選單依據以下流程

> Edit → Convert → To Last Swift Syntax

開始根據指示來更新到新的 Swift 寫法

====== 結尾分隔線 ======

目前還沒下載完 Xcode 8.0 beta ，等開始試用再來貼其他細節和心得 😏
Compress Responses Using Rack::Deflater On Rails

https://solidfoundationwebdev.com/blog/posts/compress-responses-using-rack-deflater-on-rails

https://github.com/rack/rack/blob/master/lib/rack/deflater.rb

```rb
vagrant@precise64:~/data$ pry
[1] pry(main)> def lala(a,b,c)
[1] pry(main)*   puts a
[1] pry(main)*   puts b
[1] pry(main)*   puts c
[1] pry(main)* end  
=> nil
[2] pry(main)> args = [1,2,3]
=> [1, 2, 3]
[3] pry(main)> lala(*args)
1
2
3
=> nil
[4] pry(main)> lala(args)
ArgumentError: wrong number of arguments (1 for 3)
from (pry):1:in `lala'
[5] pry(main)> 
```
[CentOS]atd と rsyslogdのCPU使用率が高い

# [CentOS]atd と rsyslogdのCPU使用率が高い
メーラーの受信がいつまでもグルグル回っていたので何かがおかしい・・・。
確認するとCPUが100%近くまで行っていた。
>CentOS release 6.3 64bit
>CPU : 2vcpu
>MEM : 16GB

## topコマンドで確認
topコマンドで確認すると
atd が 40%、rsyslogd 20% ほどにになっている。
ps -auxで見ても何があれなのか詳しく分からない。

## atコマンドと atqコマンド
Google先生に聞いてみると過去のジョブが未実行で貯まってatdが困った状態になるような事が書いてあったので、atコマンドと atqコマンドで確認してみる。

>[root@cloud ~]#atq
>4360    2016-05-07 00:29 a root
>4344    2016-05-07 00:24 a root
>4377    2016-05-11 05:03 a root
>4381    2016-05-11 05:04 a root
>4367    2016-05-11 05:03 a root

と３０行ほど出てくる
未実行のジョブ内容を確認してみる
>[root@cloud ~]#at -c 4367
何も出てこない・・・。

とりあえずatd , rsyslogdを停止させて、貯まった未実行ジョブを削除
> [root@cloud ~]#at -d 4367
全部削除してからatd , rsyslogをスタートさせて少し様子を見るとCPU使用率が正常値に戻った。

さて次はこの未実行ジョブがなんだったかを調査しないと
00:24～00:30
05:03～05:04
と時間に規則性がある事をヒントに探すしかない。
アニメーションの連番画像から動いている部分のみをPhotoshopで切り抜く

# なかなかニッチなネタだと思いますが、
アニメーションの連番画像(コマ画像)を書き出したいシーンがあります。こちらの記事「[LINEのアニメーションスタンプはこう作る！ APNGファイルの作り方を徹底解説](https://ics.media/entry/12268)」のように、APNGファイルに書き出したい連番画像を用意しなければならないときなどなど。

ファイルの容量的にもアニメーションで使っていない部分はトリミングしたいものです。今回は「ら」という文字が中央から「ぽよん」と拡大するアニメーションで試してみます。

![青い部分いらない](https://qiita-image-store.s3.amazonaws.com/0/55103/c7e52d43-ee98-5bfb-7928-a75bf25b21e9.png)

次のようにアニメーションの連番画像があったとします。
![img2.png](https://qiita-image-store.s3.amazonaws.com/0/55103/d44b3a15-9f9d-958d-63ad-f528a69928c3.png)

それぞれでそのまま余白をトリミングすると次のようになり

![img3.png](https://qiita-image-store.s3.amazonaws.com/0/55103/a4f18786-8e7c-f36d-c140-010abbead44d.png)


一気に読み込んでアニメーションGIFにすると、基準が中央ではなく左上となるアニメーションになってしまいます。。

![anime1.gif](https://qiita-image-store.s3.amazonaws.com/0/55103/8e5494ca-84f6-c812-94ba-72657627a098.gif)

なぜこんなことが起こるのか？ それは「ら」が小さいときと大きいときの画像サイズが異なっているからです。**各コマで余白を削除するのではなく、全コマを重ねての余白を削除する必要があります。**

![img4.png](https://qiita-image-store.s3.amazonaws.com/0/55103/145fe4a3-1971-e689-be9a-f170cc804ddf.png)

# Photoshopでやってみる

Photoshopに連番画像を全て読み込みます。青い部分をトリミングしたい。

![img5.png](https://qiita-image-store.s3.amazonaws.com/0/55103/a09a4bc6-10f8-9eb3-38ea-2f4bd325be95.png)

Photoshopのメニュー[イメージ]→[トリミング]をクリックし、次のように設定して実行。

![スクリーンショット 2016-06-14 11.17.40.png](https://qiita-image-store.s3.amazonaws.com/0/55103/271992be-2d13-afc9-e372-b9f697e56ee2.png)

すると青い部分のみトリミングされます。

![img6.png](https://qiita-image-store.s3.amazonaws.com/0/55103/8f6b26d3-e822-deab-82f8-b8feb6a2e239.png)

あとは書き出すのみ！　なのですが、Photoshopで用意されている機能では期待通りの書き出しがぺぺっとできなかったので、記事「[[Photoshop]「レイヤーをファイルに書き出し」を速くしてみた。](http://qiita.com/kyubuns/items/d2831e4b0e0eff1892c7)」の便利なスクリプトを使わせていただきます :laughing:

`ExportLayersToFile.jsx`ファイルの3行目を

```js
enableTrim = false // トリミングするかどうか
```

に変更し、111行目の次に

```js
options.PNG8 = false;
```

を追加します。この状態で実行！ 次のような感じに書き出されます。

![img7.png](https://qiita-image-store.s3.amazonaws.com/0/55103/62db6f67-4bc1-b115-7e1e-40dcee7bc55d.png)

アニメーションGIFにするとーうまくいきました。

![anime2.gif](https://qiita-image-store.s3.amazonaws.com/0/55103/992fe33c-7970-2705-413c-3aba47637c2c.gif)
【Qiita要望】外部リンクを設定できる項目を本文とは別に設けてほしい

## 詳細

Qiitaから自分のブログに流入させたり、
記事のネタ元が外部サイトの場合に本文とは別に載せたりしたいので、
「引用」や「参考」という感じで項目を作っていただけるとありがたいです。


## 経緯

自分でもあったら便利だと思ってたのですが、
多分他の人は使わないだろうと思ってアクションしてませんでした。
先日他の人と話していたら同様な意見があったので、結構需要あるんじゃないかと思って要望を上げてみました。
【ionic】画面のタップ・ドラッグなどのジェスチャーイベントを取得する

###はじめに
ionicで画面のタップやドラッグなどのイベントを取得するには$ionicGestureを利用します。適当なサンプルが見つからなかったので、以下の簡単なサンプルを記述します。

###テンプレートの準備
イベントを取得するテンプレートのion-viewタグにidを追記して名前を付けます。

```html
<ion-view view-title="XXXXXX" id="screen_id"> ← idに適当な名称を付加 
  <ion-content>
     ・
     ・
     ・
  </ion-content>
</ion-view>
```

###コントローラ側でイベントを取得するコードを記述
続いて、コントローラで画面イベントを取得するコードを記述します。ここではタップとダブルタップのイベントを取得しています。

```js
  .controller('TestCtrl', function ($ionicGesture) {
    // 取得するイベント
    var events = [{
      event: 'tap',
      text: '--- タップを取得しました ---'
    }, {
      event: 'doubletap',
      text: '--- ダブルタップを取得しました ---'
    }];
    // イベントを取得するビューオブジェクトを取得
    // querySelectorで指定するidの先頭に#を必ず付加すること
    var element = angular.element(document.querySelector("#screen_id"));
    // eventsで定義したジェスジャーイベント発生時のコード
    angular.forEach(events, function (obj) {
      // この例ではeventsで定義したtextをコンソール出力します
      $ionicGesture.on(obj.event, function (event) {
        console.log(event.text);
      }, element);
    });
```

上記コードでタップとダブルタップが発生した際、コンソールに「・・・を取得しました」とのログが出力されます。
個々のジェスチャーごとに異なる処理を行いたい場合は、$ionicGesture.on("tap",・・・)を複数定義することで対応可能です。

###利用可能イベント
$ionicGestureで取得可能なイベントは次のとおりです。

```
hold, tap, doubletap, drag, dragstart, dragend, dragup, dragdown, 
dragleft, dragright, swipe, swipeup, swipedown, swipeleft, swiperight, 
transform, transformstart, transformend, rotate, pinch, pinchin, pinchout, 
touch, release
```

###参考
- [$ionicGesture - Service in module ionic -  Ionic Framework](http://ionicframework.com/docs/api/service/$ionicGesture/)
- [ionic.EventController - Utility in module ionic -  Ionic Framework](http://ionicframework.com/docs/api/utility/ionic.EventController/#onGesture)

###検証環境
ionic 1.7.15
cordova 6.2.0
【Ubuntu】Debianパッケージをつくる

# なにこれ
サービス・ツール類をパッケージ化してプライベートリポジトリで
ホスティングして配布したいみたいな事ありますよね。
そういう時、debianパッケージが便利なんです。
(DebianやUbuntuの場合)

# 必要なもの
* packagecloud.ioのアカウント https://packagecloud.io/
* 配布したいバイナリ、ライブラリ、データ等


# 手順
## ファイル準備
DEBIANフォルダはdebパッケージ生成に必要なmetadataを格納するところです。
DEBIANフォルダ以外のディレクトリ構造が、インストール先マシンのファイルシステムと
対応します。この例だと、インストール先マシンに

* /usr/local/bin/uhouhoapp
* /usr/local/lib/libuho.so

が導入されます

uhouho_project/
　├ DEBIAN/
　│　└ postinst
　│　└ compat
　│　└ prerm
　│　└ control
　├ usr/
　│　└ local/
　│　　　└ bin/
　│　　　  └ uhouhoapp
　│　　　└ lib/
　│　　　  └ libuho.so

### DEBIAN/postinst
インストール後に実行されるシェルスクリプト

```
#!/bin/bash
```

### DEBIAN/prerm
インストール前に実行されるシェルスクリプト

```
#!/bin/bash
```

### DEBIAN/compat
debhelper の互換性レベルを規定するものらしいです。

```
2.0
```

### DEBIAN/control

```
Package: uhouho_project
Version: 1.0.0
Section: interpreters
Priority: optional
Architecture: amd64
Essential: no
Suggests:
Maintainer: Debian Kozou <xxxx@xxx.net>
Conflicts:
Replaces:
Provides:
Description: Hogehoge Package.
```


## debパッケージ作成

```bash
$ dpkg-deb -b uhouho_project
dpkg-deb: building package `uhouho_project' in `uhouho_project.deb'.
```

## packagecloud.ioへのアップロード
手順に従ってください

##　実際に使う
```bash
curl -s https://<TOKEN>:@packagecloud.io/install/repositories/<USER>/uhouho_project.deb.sh | sudo bash
> sudo apt-get install uhouho_project=1.0.0
```
gradleのcompileOnlyで指定したライブラリはtestCompileに引き継がれない


gradle 2.12で追加された compileOnly を使って lombok の依存を記載。
コンパイルはこれでOKなんだけど、
テストクラスでも lombok を使いたいとき、このままだと test タスク実行時にコンパイルエラーになってしまう。

```build.gradle
dependencies {
	compileOnly 'org.projectlombok:lombok:1.16.8'
}
```

これは、compileOnly タスクは compile の拡張タスクで、testCompile は compile を拡張しているため、
compileOnly で指定した依存ライブラリは testCompile に受け継がれない。

よって、こんな風に2つ書かないといけないぽい。

```build.gradle
dependencies {
	compileOnly 'org.projectlombok:lombok:1.16.8'
	testCompileOnly 'org.projectlombok:lombok:1.16.8'
}
```

まぁテストなら testCompile で書いてもいいか。


## 参考

+ https://docs.gradle.org/2.12/userguide/java_plugin.html#sec:java_plugin_and_dependency_management
pythonでファイルを読み込んで改行を消す【ファイル読み込みの注意点】

pythonを使ってファイル中の改行を取り除こうとしたらファイルの読み込みの仕様を理解していなかったため引っかかりました．
この記事は「改行を消す」ということより「ファイルの読み込み」についての注意点です．
なおpython初心者が書いているので，この方法が良いかは分かりません．
参考程度にお読みください．

#間違った例
初めに私が間違った例を示します．

```python:test1.py
#!/usr/bin/env python                                                           
#coding:utf-8                                                                   

f = open('test1.txt','r')

for line in f:
    text = line.replace('\n','')
    text = text.replace('\r','')
    print text,

f.close()
```
これを実行するとどうなるか？

実行結果
`test てすと テスト`

改行コードを空文字列に置き換えているはずが空白が入ってしまいました．
これは~~**一行ずつ処理を行っているため**で~~以下のコードと同じようなことをしています．
（コメントより行毎で処理を行っても空白を消す方法があるようなので一行ずつ処理を行う方法もあるようです。（6/15修正））

```python:space.py
#!/usr/bin/env python                                                           
#coding:utf-8
                                                                   
print 'test',
print 'てすと',
print 'テスト'
```

文末の`,`によって改行を取り除くことが可能ですがこの場合も空白が入ります．

pythonの場合は行ごとの処理を行うと文章中に無くても処理毎に空白が入ってしまうようです．


#解決方法

これを解決するために行ごとでは無くファイルを全て読み込んで処理してみましょう．
ファイルを全て読み込む場合は`read()`を使います．

```python:test2.py
#!/usr/bin/env python                                                           
#coding:utf-8                                                                   

f = open('test1.txt','r')
Allf = f.read()

text = Allf.replace('\n','')
text = text.replace('\r','')
print text,

f.close()
```

実行結果
`testてすとテスト`

無事改行もスペースも取ることが出来ました．

###コード以外の注意点
行頭の`#coding:utf-8`を入れないと改行コードをコード中に書いた時にSyntaxErrorが出る場合があります．
Non-ASCⅡなどのエラーが出ている場合は宣言を確認しましょう．

また，改行コードは以下の通りです．

| システム | 改行コード |
|:-:|:-:|
| Linux  |  \n |
| Mac  |  \r |
| Windows  | \r\n  |

多くの場合は\nだけでも行けてしまうかもしれませんが，Windowsなどの場合は\rも取り除く必要があるので気をつけましょう．
WordPress JetpackのMarkdownとパブリサイズ共有をカスタム投稿タイプで使う

- https://jetpack.com/support/markdown/
- https://jetpack.com/support/publicize/

下記2パターンのうち、いずれかで。

#カスタム投稿タイプ作成時に対応するパターン
`wpcom-markdown` がマークダウンで `publicize` がパブリサイズ共有。

```php
<?php
// Register Custom Post Type
function my_custom_post_type() {
    $labels = array(
        'name'                => _x( 'Products', 'Post Type General Name', 'text_domain' ),
    );
    $args = array(
        'label'               => __( 'product', 'text_domain' ),
        'supports'            => array( 'title', 'editor', 'publicize', 'wpcom-markdown' ),
    );
    register_post_type( 'product', $args );

}
add_action( 'init', 'my_custom_post_type', 0 );
```

# 「公開」になっているカスタム投稿タイプ全てに対応するパターン
`wpcom-markdown` がマークダウンで `publicize` がパブリサイズ共有。


```php
<?php
add_action( 'init', 'my_custom_init' );
function my_custom_init() {

	$args = array(
		'public'   => true,
		'_builtin' => false
	);
	$output = 'names'; // names or objects, note names is the default
	$operator = 'and'; // 'and' or 'or'

	$post_types = get_post_types( $args, $output, $operator ); 

	foreach ( $post_types  as $post_type ) {
		add_post_type_support( $post_type, array( 'publicize', 'wpcom-markdown' ) );
	}
}
```
[ビルドメモ] cantools - Raspberry Pi


## 概要

- [cantools](https://sourceforge.net/projects/cantools/)をラズパイでビルドのメモ
    *cantools is a set of command line tools for dealing with DBC, ASC, and MDF files. The tools can be used to analyze and convert the data to other formats. Shared libraries for parsing and accessing these files are also provided.*

    > cantoolsはDBC、ASC、およびMDFファイルを扱うためのコマンドラインツールのセットです。ツールは、分析し、他の形式にデータを変換するために使用することができます。これらのファイルを解析し、アクセスするための共有ライブラリも提供されます。 (グーグル翻訳)

- 関連: [\[メモ\] オープンソースのcantools の libcandbcで、.dbcファイルの読み込み](http://qiita.com/mt08/items/fbe61c7caf2c4e5b3b17)

- `cantools-0.15.tar.gz`では、ファイルが足りない？ (`fileFormat.h`とか)
=> svnから取得
- `libmatio`とか、`hdf5`がないとかでエラー
=> `sudo apt-get install libmatio-dev`
- `compile`とか `test-driver`がないとかでエラー
=> `cantools-0.15.tar.gz`に含まれているのをコピー
- リンクエラー
=> ヘッダファイルの、`inline void*` を`inline static void*`へ 
- \# `can-utils`は socketcanとかにつかうやつ。



## 環境
- 2016-05-27-raspbian-jessie-lite.img

## 手順

```bash
sudo apt-get install -y libmatio-dev check automake libtool bison flex
sudo apt-get install -y subversion

svn checkout svn://svn.code.sf.net/p/cantools/code/trunk cantools-code -r 57
wget  -O cantools-0.15.tar.gz https://sourceforge.net/projects/cantools/files/cantools-src/0.15/cantools-0.15.tar.gz/download
tar xf cantools-0.15.tar.gz
cp ./cantools-0.15/{compile,test-driver} cantools-code/.
cd cantools-code

#パッチ 
sed -i 's/inline/inline\ static/g' src/hashtable/hashtable_itr.h
#
libtoolize --force
autoconf -i -f
./configure LDFLAGS="-L/usr/lib/arm-linux-gnueabihf/hdf5/serial"
make
make check
```

## その他
 テスト用に、`j1939_utf8.dbc`とかぐぐるといいかも。

## `dbcls`
```
pi@raspberrypi:~/cantools-code $ ./dbcls --help
Usage: dbcls [OPTION] -d dbcfile
List information about dbcfile.

Options:
  -N, --networks             list networks
  -n, --nodes                list nodes
  -e, --envvars              list environment variables
  -m, --messages             list messages
  -s, --signals              list signals
      --verbose              verbose output
      --brief                brief output (default)
      --help     display this help and exit
pi@raspberrypi:~/cantools-code $ ./dbcls -m -d ./j1939_utf8.dbc 
$C0000000;VECTOR__INDEPENDENT_SIG_MSG;0;Vector__XXX;"This is a message for not used signals, created by Vector CANdb++ DBC OLE DB Provider.";;
$88F02DFE;AccelerationSensor;7;Vector__XXX;"The acceleration sensor message shall provide a measurement of the vehicle's acceleration in the lateral, longitudinal,
and vertical axes.";  GenMsgCycleTime = 10 (INT)  GenMsgSendType = 0 (INT)  VFrameFormat = 3 (INT);
$98FCEAFE;VEP4;8;Vector__XXX;"Vehicle Electrical Power #4";  VFrameFormat = 3 (INT);
...
...
...
$9CFDA7FE;VROM;8;Vector__XXX;"Voltage Regulator Operating Mode";  GenMsgCycleTime = 1000 (INT)  GenMsgSendType = 0 (INT)  VFrameFormat = 3 (INT);
$8CFDA6FE;VREP;8;Vector__XXX;"Voltage regulator excitation status";  GenMsgCycleTime = 100 (INT)  GenMsgSendType = 0 (INT)  VFrameFormat = 3 (INT);
pi@raspberrypi:~/cantools-code $ 
```
[iOS 10] UITabBarのバッジを少しカスタマイズできるようになった

# iOS 9までのバッジ

iOS 9までは赤丸に白文字のバッジしかつけることができませんでした。
<img width="125" alt="スクリーンショット 2016-06-14 10.30.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/12896/d0573c19-f456-6412-8482-361f9ea8639e.png">

# iOS 10からのバッジ

iOS 10からは `UITabBarItem` に `badgeColor` プロパティや、
`setBadgeTextAttributes(_:for:)` メソッドが追加され、
バッジの色やバッジ内の文字を装飾できるようになるみたいです。

今までアプリの雰囲気に合わない等の理由で、
`UITabBarItem` 標準のバッジを敬遠していた人にはありがたい変更ですね。

# 参考

- [badgeColor - Apple Developer Documentation]( https://developer.apple.com/reference/uikit/uitabbaritem/1648567-badgecolor "badgeColor - Apple Developer Documentation")
- [setBadgeTextAttributes(_:for:) - Apple Developer Documentation](https://developer.apple.com/reference/uikit/uitabbaritem/1648566-setbadgetextattributes "setBadgeTextAttributes(_:for:) - Apple Developer Documentation")
Swift3の移行へ向けて予習するために（日本語話者向け）

WWDC2016ついに始まりましたね！
夜中のキーノートではMacbookについての発表がなかったとか少し残念がられている点もあるようですが、Developerにとっては今まで一般人の触れなかったSiriとかマップとかiMessageのSDKだったりXcode8だったり期待されるような情報も結構公開されたようです（と書きつつ僕はリアルタイムで見てないわけなんですが汗）

さっそくβ版がいろいろと公開されたのでDeveloperサイトにいっていろいろ試している人はお気づきだと思いますが、今回のアップデートで本格的にSwiftがver.3へと移行していく模様です。また正式リリースの段階でドタバタするのもあれだと思うのでいち早くSwift3を学んでいこうということで現時点で集められる限りの日本語情報を集めてみました。

## リンク
はじめにリンクを貼っておいてその後で日本語情報がまだ足りてない部分の補足を書いていこうと思います。

- [公式の英語情報（最新）](https://github.com/apple/swift-evolution)...ここが最新なのはブレないと思うので英語が得意な人はここを見ましょう
- [5/18時点での詳細な日本語情報 by Developers.IOさん](http://dev.classmethod.jp/smartphone/iphone/implemented_proposals_for_swift3/)

今のところはここが一番詳しい模様です...

## 日本語訳されていない情報
とりあえず見つけ次第どんどんやっていこうと思います。なお記事の更新時点で実装されているものかつ上の記事になかったもののみで、実装されていないけど認可されたとなっている項目に関しては触れていません。
### SE-0085 SwiftPackageManagerのコマンドラインでの呼び出し方がかわります
SwiftPackageManagerをコマンドラインで扱う際これからは`swift package`で扱えるようになります。これにともない`swift build --init`は`swift package init`などと書けるようになりました。また新しいコマンドとして`swift package update`が追加されました。

既存の`swift build`や`swift test`に関しては`swift package build`や`swift package test`に統合されましたが既存のコマンドもこれらのエイリアスとして使えます。
### SE-0093 スライスに新しくpublicな`base`プロパティが追加されました
`MutableCollection`　のプロトコルを扱う際、今までのスライスAPIだとbase collectionにアクセスする方法がなかったため（つまるところスライスする前のCollectionにスライス後のものからアクセスできるということでしょうか？）baseプロパティが追加されました。公式のサンプルコードとして以下のような例があげられています。

`swift
public struct MutableRandomAccessSlice<
  Base : protocol<RandomAccessIndexable, MutableIndexable>
> : RandomAccessCollection, MutableCollection {

  /// The underlying collection of the slice
  public var base: Base { get }
}
`
### SE-0094 stdlibにsequence(first:next:)とsequence(state:next:)が追加されます
Haskellの`iterate`および`unfoldr`と同じ機能との説明がなされていますがサンプル見るのがはやいです。以下のように使えます。

`swift
for x in sequence(first: 0.1, next: { $0 * 2 }).prefix(while: { $0 < 4 }) {
    // 0.1, 0.2, 0.4, 0.8, ...
}
for view in sequence(first: someView, next: { $0.superview }) {
    // someView, someView.superview, someView.superview.superview, ...
}
`
要するにコメントに書かれているような配列を生成できる関数ということですね、これでfor文がより便利になる模様
Mac/Fink で R 3.3

Fink 版の R 3.3 がリリースされました。

現在、Fink では R 3.3, 3,2, 3.1 が同時にインストール可能です。当面、3つのバージョンを維持していきたいと考えています。3.4がリリースされたら、3.1を落とします。

というのも、研究等で R を使う場合、最新バージョンを試したいときと旧バージョンで確実に作業をしたいときがあるかと思われます。これを可能にするためには、3つほどのバージョンがあれば可能と考えたからです。

CRAN や BioConductor などのパッケージ類は、基本的には最新となっています。しかし、最新版が R 3.1 に対応していない場合、R3.1に対応した最後のバージョンもインストールができるようになっています。R3.3 と R3.1 で異なるバージョンとなるのは、以下のパッケージです。

* bioconductor-protgenerics-r31
* bioconductor-s4vectors-r31
* cran-arules-r31
* cran-arulesviz-r31
* cran-car-r31
* cran-clustvarsel-r31
* cran-doby-r31
* cran-effects-r31
* cran-metafor-r31
* cran-pbkrtest-r31
* cran-rcmdr-r31
* cran-resemble-r31

などです。なお、R3.2 と R3.3 で異なるパッケージは、まだありません。

RPy2 も、まもなく R3.3にリンクします。

Fink で R をインストールする方法は、[こちら](http://qiita.com/babayoshihiko/items/9f4c29b8570dd408e96a)をお読みくださいs。
ASP.NET MVC(C#) EF6+MySqlの環境構築とハマった事

# 環境構築
## インストールしたもの
- mysql-connector-net-6.9.8
- mysql-for-visualstudio-1.2.6

## Nuget経由でインストールしたパッケージ
 - EntityFramework v6.0.0
 - MySql.Data.Entity
 - MySql.Data ・・・MySql.Data.Entityを入れたら入ります

## Web.Configの設定

```xml:web.config
<add name="testEntities" connectionString="metadata=res://*/test.csdl|res://*/test.ssdl|res://*/test.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=ここにサーバー;user id=ここにID;password=ここにパスワード;persistsecurityinfo=True;database=ここにデータベース名;AllowZeroDateTime=True;ConvertZeroDateTime=True;CharacterSet=utf8&quot;" providerName="System.Data.EntityClient" />
```

### 追加したオプション(今回追加したもの)
- AllowZeroDateTime
- ConvertZeroDateTime
 - MySqlのDateTime型の初期値は「0000-00-00 00:00:00」
 - .NetのDateTime型の初期値は「0001/01/01 00:00:00」<br>上記の変換の際にエラーが起きるのを防ぐ。<br>
このオプションをTrueにすることで、取得の際に「0001-01-01 00:00:00」この値にコンバートして値を返してくれる。
- CharacterSet
 - utf8を設定。<br>これはクライアント側とDB側で合わせないと文字化けが発生するため設定した。

[その他のオプションはこちら](https://dev.mysql.com/doc/connector-net/en/connector-net-connection-options.html)

# ハマったこと
- オプションの追加部分を忘れていた為、エラー解消に時間を要した。
- Mysqlで定義した型が、意図しない型でEF側で生成された。<br>
例えば、MySql側： TINYINT(1) →　.Net側：bool<br>
この辺りは、マニュアルを熟読して勉強が必要。
selenium: AND/OR で要素を待つ


これでいいのかな？

## CSS ウェイター

~~~py
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


class ByCss(object):
    def __init__(self, *args, **kwargs):
        self.meet_all = kwargs.get('meet_all', False)
        self.ecs = [
            EC.presence_of_element_located((By.CSS_SELECTOR, i)) for i in args]

    def __call__(self, driver):
        if self.meet_all:
            return all([fn(driver) for fn in self.ecs])
        else:
            for fn in self.ecs:
                try:
                    if fn(driver): return True
                except:
                    pass

    @classmethod
    def wait(cls, driver, *args, **kwargs):
        seconds = kwargs.get('seconds', 10)
        WebDriverWait(driver, seconds).until(cls(*args, **kwargs))
        return [driver.find_elements_by_css_selector(i) for i in args]
~~~


## サンプル

~~~py
from selenium import webdriver
br = webdriver.Safari()
login_portal(br)
~~~

~~~py
def login_portal(br):
    usr_name_css = 'form[name="auth"] input[name="usr_name"]'
    usr_password_css = 'form[name="auth"] input[name="usr_password"]'

    usr_name, usr_password = ByCss.wait(
        br, usr_name_css, usr_password_css, meet_all=True)

    usr_name[0].send_keys(USER)
    usr_password[0].send_keys(PASSWORD)

    submit_css = 'form[name=auth] input[type=submit]'
    br.find_elements_by_css_selector(submit_css)[0].click()
~~~
めざせpythonライブラリマスター （57）browsergui

#【ライブラリ説明】
　ブラウザで表示できるGUIを作成

#【プログラム】
```py:browsergui.py
# -*- coding: utf-8 -*-

from browsergui import GUI, Text, Button

button = Button('0')
@button.def_callback
def increment():
  button.text = str(int(button.text)+1)

GUI(button).run()
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/browsergui/0.4)
　[github](https://github.com/speezepearson/browsergui)
webdriver-seleniumを使った時に、webdriverのpathが見つからないと言われる。



windows7で、webdriver-seleniumのgemを2.53.1にバージョンアップすると
Selenium::WebDriver::Error::WebDriverError: Unable to find the chromedriver executable
とのエラーが出るように。

## PATHの確認
今まで動いていたので問題なし

## ソースの確認

```lib/selenium/webdriver/common/platform.rb
def find_binary(*binary_names)
  paths = ENV['PATH'].split(File::PATH_SEPARATOR)
  binary_names.map! { |n| "#{n}.exe" } if windows?

  binary_names.each do |binary_name|
  paths.each do |path|
    exe = Dir.glob(File.join(path, binary_name)).first
    next unless exe
      return exe if File.executable?(exe)
    end
  end
  nil
end
```

以前は、環境変数のPATHをたどったとこに、ちゃんとファイルがあるかどうかを確認してなかったのですが、
今回のバージョンでは、ちゃんと確認している。

```
exe = Dir.glob(File.join(path, binary_name)).first
next unless exe
```

これが原因で、私のケースでは、PATHをC:¥webdriver_pathのようにしてたため、C:¥webdriver_path/chromedriver.exeのように、¥とスラッシュが混在していたためか、globで取得してくれませんでした。

## 解決法
環境変数にて、webdriverのPATHを¥からスラッシュ（/）に変更しました。
ディスプレイの複製・拡張をコマンドで切り替える

DisplaySwitch.exe /internal
⇒プライマリディスプレイのみ

DisplaySwitch.exe /clone
⇒複製モード

DisplaySwitch.exe /extend
⇒拡張モード

DisplaySwitch.exe /external
⇒プロジェクターのみ(セカンダリディスプレイのみに表示)
chefでnpmパッケージをグローバルにインストールする時の工夫

## よくやりがちな事

```ruby
%w{package_name1 package_name2}.each do |p|
  bash p do
    code <<-EOC
      npm install -g #{p}
    EOC
  end
end
```

このままだとchefを実行する度にnpm installが実行されます。
かかった時間は、

```shell-session
vagrant@precise32:~$ time sudo npm install -g grunt-cli
/usr/local/nvm/versions/node/v4.4.1/bin/grunt -> /usr/local/nvm/versions/node/v4.4.1/lib/node_modules/grunt-cli/bin/grunt
grunt-cli@1.2.0 /usr/local/nvm/versions/node/v4.4.1/lib/node_modules/grunt-cli
├── grunt-known-options@1.1.0
├── nopt@3.0.6 (abbrev@1.0.7)
├── resolve@1.1.7
└── findup-sync@0.3.0 (glob@5.0.15)

real	0m5.161s
user	0m3.940s
sys	0m1.000s
```

この例だと5秒かかっています。
パッケージが多いと、この積み重ねが結構辛くなります。

## 改善版
すでにインストール済みであればスキップするようにする。

```rb
%w{package_name1 package_name2}.each do |p|
  bash p do
    code <<-EOC
      npm install -g #{p}
    EOC
    not_if "npm list --depth=0 -g | grep ' #{p}@'"
  end
end
```

これで、スキップするのにかかった時間は、

```shell-session
vagrant@precise32:~$ time npm -g list --depth=0 | grep ' grunt-cli@'
├── grunt-cli@1.2.0

real	0m0.631s
user	0m0.528s
sys	0m0.096s
```

0.6秒で実際にインストールした場合と比べ約10分の1になります。
Office365 > ファイル使用中の解除 > 「読み取り専用設定/解除」ボタン

ネットワーク上のOffice365ファイルを開こうとすると「ドキュメントを開く」ダイアログが表示され「読み取り専用」か「編集」の選択しかできない時がある。

通常、ここで出るべき選択肢はオンライン編集かローカルアプリでの編集かであるが、ファイルが使用中になってしまっているようだ。

以下を見つけた。

参考 http://oblsk.sakura.ne.jp/help/?p=1510

> ネットワーク上に置いてあるExcelファイルを開こうとすると
誰も使用していないはずなのに使用中となっていて
読み取り専用としてExcelファイルを開くことになる時があります。

上記のリンクによると「読み取り専用設定/解除」ボタンがあり、それによりおかしくなった状態の解除ができるようだ。

こういう不具合がない状態で使いたいものだ。

> 読み取り専用時に押すと読み取り専用が解除され、
読み取り専用ではない時に押すと読み取り専用になります。

解除と設定が同じボタンのようで誤操作を誘発しそうなUIだ。

<hr>
(2016/06/14 追記)

ブラウザで接続時のOffice365ではそもそも上記の設定はなかった。

Office365のメニューでWord, Excelなど7つに関して「セットアップしています...」のままなのが関係あるのかどうか。

<hr>
(2016/06/15 追記)

「セットアップしています...」の状態から通常状態に戻ったのは本日になってからだった。
結局1日不具合のままとなっていたが、有償サービスでこのダウンタイムは致命的ではないかと思う。
active_adminで編集されたことをChatWorkのグループチャットにポストする

createの時にIDが取れなかったので、showで対応してみた。

```ruby:admin/some_model.rb

ActiveAdmin.register SomeModel do

menu label: "ほげ", priority: 1

# See permitted parameters documentation:
# https://github.com/activeadmin/activeadmin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters
#
permit_params :list, :of, :attributes, :on, :model
#
# or
#
# permit_params do
#   permitted = [:permitted, :attributes]
#   permitted << :other if params[:action] == 'create' && current_user.admin?
#   permitted
# end

controller do

  def show
    show! do |format|
      AdminHelper.postChatWork("ほげ", request.referer, SomeModel.find_by(:id => params["id"]))
    end
  end

end

end
```

```ruby:helper/admin_helper.rb

require 'net/https'

module AdminHelper
  def self.postChatWork(title, referer, model)
  
    sp = referer.split("/")
    action = sp[sp.size-1]
    if action != "edit" and action != "new" then
      return
    end

    uri = URI.parse("https://api.chatwork.com/v1/rooms/■グループチャットID■/messages")
    http = Net::HTTP.new(uri.host, uri.port)
    
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    
    req = Net::HTTP::Post.new(uri.path)
    
    req.set_form_data({'body' => "【active_adminから】" + title + "(" + action + ") データ：" + model.to_json})
    req["X-ChatWorkToken"] = "■あなたのトークン■"
    res = http.request(req)

  end
end


```
docker 1.12 key features (swarmkit, overlay2, plugin repo, health check..)

Docker Engine v1.12に入りそうな機能の紹介．
1.12リリース時期はwiki参照: https://github.com/docker/docker/wiki

## Swarmkit (aka swarm-v2)
https://github.com/docker/docker/pull/23361
https://github.com/docker/docker/pull/23364

Swarmkitをベースとして，Swarmが書きなおされた．
Docker EngineのCLIに統合される．

こういうアーキテクチャになる (画像出典 http://dockone.io/article/1373)
![image](https://qiita-image-store.s3.amazonaws.com/0/90542/6bc1d067-a62f-5479-79ab-43389965cb87.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/90542/5590338a-2b13-72e6-a809-949c16571b08.png)

ちなみにswarmdはswarmkitのテスト用についてくるが，通常のdockerの運用では用いられない．docker engineはswarmkitをライブラリとして用いる．

libkvを介してetcd/consul/zookeeperを使うのではなく，etcdのraftライブラリを直接使うようになる．

CLIはこういう雰囲気 (PR 23364より引用)
    
```bash
    $ docker service create --scale 3 --name redis --update-delay 10s --update-parallelism 1 redis:3.0.6

    69uh57k8o03jtqj9uvmteodbb
```

```
    $ docker service tasks redis
    ID                         NAME     SERVICE  IMAGE        LAST STATE          DESIRED STATE  NODE
    3wfqsgxecktpwoyj2zjcrcn4r  redis.1  redis    redis:3.0.6  RUNNING 13 minutes  RUNNING        worker2
    8lcm041z3v80w0gdkczbot0gg  redis.2  redis    redis:3.0.6  RUNNING 13 minutes  RUNNING        worker1
    d48skceeph9lkz4nbttig1z4a  redis.3  redis    redis:3.0.6  RUNNING 12 minutes  RUNNING        manager1
```


## Overlay2
`overlay`とは別個に`overlay2`ドライバが出来た．
inodeを食い潰す問題が解消される．kernel 4.0以上が必要．
https://github.com/docker/docker/pull/22126

## Plugin repository
https://github.com/docker/docker/pull/23446

こんな感じ (PR 23446より引用)

```bash
$ docker plugin install aragunathan/no-remove
Plugin "aragunathan/no-remove:latest" requested the following privileges:
 - Networking: host
 - Mounting host path: /data
Do you grant the above permissions? [y/N] y
```
 
```bash
$ docker plugin ls
NAME                	VERSION             ACTIVE
aragunathan/no-remove   latest              true
```

## Healthcheck
https://github.com/docker/docker/pull/23218

`Dockerfile`中にこんな行を書ける

```
HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f http://localhost/ || exit 1
```

## Live restore
https://github.com/docker/docker/pull/23213

dockerdが落ちてもコンテナは生き続ける

## その他

 * `dockerd` (daemonバイナリ)と`docker` (クライアントバイナリ)が分離された
 * CLIがリファクタされた (https://github.com/spf13/cobra を利用)
 * Windows 10 build 14361がDockerをサポート https://msdn.microsoft.com/en-us/virtualization/windowscontainers/docker/configure_docker_daemon
Mac OS Xアプリで、Swiftで、ダイアログボックス中にエディットボックスを表示してそこに値を入力して取り出す方法


```
        func dialogOKCancel(question: String, text: String) -> String {
            let myPopup: NSAlert = NSAlert()
            myPopup.messageText = question
            myPopup.informativeText = text
            myPopup.alertStyle = NSAlertStyle.InformationalAlertStyle
            let textField = NSTextField(frame: NSRect(x:0,y: 0,width:  200,height:  24))
            
            myPopup.accessoryView = textField
            myPopup.addButtonWithTitle("OK")
            myPopup.addButtonWithTitle("Cancel")
            let res = myPopup.runModal()
            if res == NSAlertFirstButtonReturn {
                print((myPopup.accessoryView as! NSTextField).stringValue)
                print("FirstButton")
                return (myPopup.accessoryView as! NSTextField).stringValue
            }else if res == NSAlertSecondButtonReturn{
                print("SecondButton")
                
                return ""
            }
            return ""
        }
        
        let answer = dialogOKCancel("Ok?", text: "何か単語を入力してください")
```

画像は貼りません。ツッコミなどがあれば遠慮なく。
Web開発におけるスマートフォンからの動作確認・検証の環境

## はじめに
スマートフォン対応しているWebサイトがもはや当たり前な世の中ですが、Web開発をしているとスマートフォンから閲覧したときの動作を確認をする機会が多いと思います。
そこで、どのような確認の方法があるのか、簡単にまとめたいと思います。

## ブラウザからの動作確認

* Chrome
    * ブラウザ上で右クリック→「検証」→表示されたエリアの左上にあるスマートフォンアイコンをクリックするとスマートフォンから閲覧したときのような画面になります
    * スマートフォンから閲覧したときみたいに、クリックしながら上下にスライドすると画面がスクロールされます

![スクリーンショット 2016-06-13 22.27.30.png](https://qiita-image-store.s3.amazonaws.com/0/42852/637f840f-1e46-5a4c-7933-53398a88fa19.png)

* Safari
    * ブラウザの設定から開発者メニューが表示されるように設定します
    * メニューの「開発」→「レスポンシブ・デザイン・モードにする」をクリックすると、スマートフォンから閲覧したときのような画面になります
    * しかも表示されている機種を選択することで解像度を変更できます。とても便利 :muscle: 
![スクリーンショット 2016-06-13 22.30.06.png](https://qiita-image-store.s3.amazonaws.com/0/42852/b7c30b36-6079-33f2-5a5b-55d8255b9407.png)


## iOSシミュレーター（Macのみ）からの動作確認
MacでXcodeをインストールしていれば、iOSシミュレーターを起動できるので、そこからiOSシミュレーター内のブラウザを起動すれば動作確認することができます。

<img width="487" alt="スクリーンショット 2016-06-08 22.07.38.png" src="https://allabout.qiita.com/files/9f5051fc-c51b-cf73-a63d-61b036d00882.png">

## 実機からの動作確認
実機から動作確認する場合は、外部から接続可能な環境を用意し、そこへアクセスすることで動作確認することができます。
また、MacとiPhoneをケーブルで繋ぎ、以下の設定をすることでSafariからWebインスペクタを表示できるため、実機のデバッグが容易になります。

1.iPhoneの設定画面からSafari→詳細を選択する

<img width="320" alt="IMG_3297.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/42852/c8eb5e1a-4da5-5e38-8ae1-3f07ec974abe.png">

2.Webインスペクタのスイッチをオンにする

<img width="320" alt="IMG_3296.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/42852/71afa159-e260-0e86-a6ab-ce505b1df4f3.png">

3.PCのSafariを起動し、タブメニューの「開発」をクリックするとに接続したiPhoneの名前が表示される
4.iPhoneでSafariを起動し、適当なWebサイトにアクセスすると、PCの開発メニューにそのサイト名が表示されるので選択する

![スクリーンショット 2016-06-13 22.36.35.png](https://qiita-image-store.s3.amazonaws.com/0/42852/ab23513d-f528-6062-f7dd-4ae7d916e4be.png)

5.選択後、以下のようなWebインスペクタが起動する
![スクリーンショット 2016-06-13 22.37.04.png](https://qiita-image-store.s3.amazonaws.com/0/42852/d9cace02-fb0d-709b-3644-a9a503017dac.png)

これで、実機で操作したときの実行ログをコンソールから確認できたり、HTMLの要素やネットワークなどを調査したりすることができます。



※Androidの実機確認方法についても後ほど追記する予定
startup-scriptでディスクをマウントするときは使い方によってはタイミングが遅いよ、という話


クッソ細かい話で当たり前の話かもしれませんが、他に困ってる人がいるかもしれないので一応共有。
実際自分も困ったので。

## 前提

Google Compute Engineの追加ディスクはインスタンスを停止して起動した場合、何もしないと追加ディスクのマウントは解除されてます。

## Dockerを使っているという話

GCEでDockerを使ってるんですが、通常だとブートディスクにdockerのデータが全部置かれます。
イメージもログも全て。
デフォルトだと10GBなので、すぐいっぱいになっちゃいます。
と言うわけで、`-g`でディレクトリをアタッチしたディスクにします。

## Dockerが動かなくなった

これまでは`startup-script`で追加ディスクをマウントしてましたが、これだとdockerのサービスの方が先に立ち上がってしまい、その後ディスクをマウントしてしまうので、この状態だとdockerがまともに動かなくなります。
`startup-script`でディスクマウントして、docker起動して、ってやってたので、起動時にプロセス動いてなくて焦って調べた,と言うのが事の発端でした。

## 解決篇

じゃあどうするかと言えば、`/etc/fstab`を編集します。

これで解決です。

インスタンスで実行するサービスが追加ディスクを参照している場合は`startup-script`でディスクをマウントしてると遅い可能性があるので、OS側で設定するようにするといいね、という話でした。

詳しくは[コチラ(公式ドキュメント)](https://cloud.google.com/compute/docs/disks/add-persistent-disk#formatting)に書いてます。
css メモ 

overflow
=> ボックスの範囲内に内容が入らない場合、どうするか？

値
visible
ボックスからはみ出して表示されます。これが初期値です。尚、Internet Explorerでは、内容がはみ出すのではなく、ボックスの方が内容に合わせて拡張されます。
scroll
入りきらない内容はスクロールして見られるようになります。
hidden
はみ出た部分は表示されません。
auto
ブラウザに依存します（一般的にはスクロールして見られるようになります）。
ruby メッセージ 開発 メモ

■フォームヘルパ
特定のモデルオブジェクトを作成、編集するためのフォームを自動で生成するヤツ
モデルとビューを結びつける

■レンダリング
出力

 (<%= link_to "edit" , edit_message_path(message) %>
         <%= link_to "destroy" , message , method: :delete, data: { confirm: '削除してもよろしいですか？' } %>
        )
書き方がめちゃくちゃ

bootstrap-sprockets
便利な奴
BluezをD-busから使う adapterを表示する

BlueZをD-Busから使う方法について

システムに接続されているBluetoothアダプタを表示する方法を調べました。

linuxではhciconfigを使うとBluetoothアダプタの情報が表示されます。

```
pi@raspberrypi: $ hciconfig 
hci0:	Type: BR/EDR  Bus: USB
	BD Address: 00:09:DD:42:7A:EB  ACL MTU: 310:10  SCO MTU: 64:8
	UP RUNNING PSCAN 
	RX bytes:10484 acl:149 sco:0 events:470 errors:0
	TX bytes:5074 acl:139 sco:0 commands:88 errors:0
```

# get-adapter.py
* dbus-python を使いました。　
* 参考にしたbluezのコードがdbus-pythonを使っていたので。

```py:get_adapter.py
#!/usr/bin/python

import dbus

SERVICE_NAME = "org.bluez"
ADAPTER_INTERFACE = SERVICE_NAME + ".Adapter1"

bus = dbus.SystemBus()

manager = dbus.Interface(bus.get_object(SERVICE_NAME, "/"),
                    "org.freedesktop.DBus.ObjectManager")

objects = manager.GetManagedObjects()

for path, ifaces in objects.iteritems():
    adapter = ifaces.get(ADAPTER_INTERFACE)
    if adapter is None:
        continue
    print path

    bdaddress = adapter.get("Address")
    if bdaddress is None:
        continue
    print bdaddress
```
* システムのdbusを取得して、bluezのmanagerを取得して、bluezのobjectsを取得
* bluezのobjectsからAdapter1を含むadapterを取得して、pathを表示
* adapterからAddressのプロパティを取得して、アドレスを表示

# 実行結果

```
pi@raspberrypi: $ ./get-adapter.py 
/org/bluez/hci0
00:09:DD:42:7A:EB
```



# 参考
* bluezのtest/bluezutils.py https://git.kernel.org/cgit/bluetooth/bluez.git/tree/test/bluezutils.py
* bluezのdoc/adapter-api.txt https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/adapter-api.txt
* https://dbus.freedesktop.org/doc/dbus-python/
今週末に観たい WWDC2016 Session What's New 一覧


WWDC2016 What's Newセッションビデオのリンクをまとめました。
※[公式](https://developer.apple.com/videos/wwdc2016/)で"What's New"で検索した結果です。

[What's New in Accessibility](https://developer.apple.com/videos/play/wwdc2016/202/)
[What's New in Auto Layout](https://developer.apple.com/videos/play/wwdc2016/236/)
[What's New in Cocoa](https://developer.apple.com/videos/play/wwdc2016/203/)
[What's New in Cocoa Touch](https://developer.apple.com/videos/play/wwdc2016/205/)
[What's New in Core Data](https://developer.apple.com/videos/play/wwdc2016/242/)
[What's New in Foundation for Swift](https://developer.apple.com/videos/play/wwdc2016/207/)
[What's New in International User Interfaces](https://developer.apple.com/videos/play/wwdc2016/232/)
[What's New in ResearchKit](https://developer.apple.com/videos/play/wwdc2016/234/)
[What's New in UICollectionView in iOS 10](https://developer.apple.com/videos/play/wwdc2016/219/)
[What's New in tvOS](https://developer.apple.com/videos/play/wwdc2016/206/)
[What's New in watchOS 3](https://developer.apple.com/videos/play/wwdc2016/208/)
[What's New in LLVM](https://developer.apple.com/videos/play/wwdc2016/405/)
[What's New in Swift](https://developer.apple.com/videos/play/wwdc2016/402/)
[What's New in Xcode App Signing](https://developer.apple.com/videos/play/wwdc2016/401/)
[What's New in Apple Device Management](https://developer.apple.com/videos/play/wwdc2016/303/)
[What's New in iTunes Connect](https://developer.apple.com/videos/play/wwdc2016/305/)
[What's New in Game Center](https://developer.apple.com/videos/play/wwdc2016/611/)
[What's New in GameplayKit](https://developer.apple.com/videos/play/wwdc2016/608/)
[What's New in Metal, Part 1](https://developer.apple.com/videos/play/wwdc2016/604/)
[What's New in Metal, Part 2](https://developer.apple.com/videos/play/wwdc2016/605/)
[What's New in SpriteKit](https://developer.apple.com/videos/play/wwdc2016/610/)
[What's New in HTTP Live Streaming](https://developer.apple.com/videos/play/wwdc2016/504/)
[What's New in HomeKit](https://developer.apple.com/videos/play/wwdc2016/710/)
[What's New in Security](https://developer.apple.com/videos/play/wwdc2016/706/)
[What's New in the Apple Push Notification Service](https://developer.apple.com/videos/play/wwdc2016/724/)
cli53のインストール手順

Route 53はブラウザ上で操作可能ですが、cli53というpythonツールを使えばコマンドラインからも操作できます。大量のDNSを取り扱う際便利だと思います。
以下、CentOSでのインストール手順になります。
※当然ですが設定にはAWSのアクセスキーが必要です。

# 手順
1.Python, git, dnspythonをインストール

```
# yum install python, python-setuptools, git
```

2.pipのインストール (Pythonで書かれたパッケージソフトウェアをインストール・管理するためのパッケージ管理システム)

```
# easy_install pip
```

3.botoのインストール (AWSを操作するためのライブラリ)

```
# git clone http://github.com/boto/boto
# cd boto
# python setup.py install
```

4.cli53のインストール

```
# git clone https://github.com/barnybug/cli53
# pip install cli53
```

Successfullyと表示されれば無事インストール完了。

5.環境変数設定

```
# vi /root/.bashrc
----------------------------------------------
export AWS_ACCESS_KEY_ID=アクセスキー
export AWS_SECRET_ACCESS_KEY=シークレットキー
export PATH=$PATH:cli53/scripts/

※3行追記
----------------------------------------------

# source /root/.bashrc
```

以上で使えるようになるはずです。

```
# cli53 --help

list list hosted zones
info get details of a hosted zone
export export dns in bind format
import import dns in bind format
instances dynamically update your dns with instance names
create create a hosted zone
delete delete a hosted zone
rrcreate create a resource record
rrdelete delete a resource record
rrpurge purge all resource records
rrlist list all resource records
```

# 参考URL
- [cli53を使ってDNSをRoute53へ移行する](http://rikuga.me/tag/cli53/)
- [Route53のためのpythonスクリプト](http://gyori.hatenablog.com/entry/2013/01/25/010919)
- [コマンドラインからRoute53を操作する](http://kenichiro22.hatenablog.com/entry/20110412/1302606666)
ESP8266 > Link > 電源電圧のスパイク対策 > 1000uFタンタルコンデンサ

[#58 ESP8266 Sensor runs 17 days on a coin cell/transmits data to sparkfun.com and ubidots.com](https://www.youtube.com/watch?v=IYuYTfO6iOs&list=PL_MJualihC5AQhSO0uwShM_pq5nCt_pNR&index=83)

Andreas Spiessさんの動画

電源電圧のスパイク対策として1000uFタンタルコンデンサ?を使っている (動画5:00あたり)。

これが正しい対策なのかは不明。実施する前に問題がないか要調査。
ESP8266 > Link > RTC Memoryの使用 > Deep Sleepでも消えないデータ領域

[#60 How to use the RTC Memory in ESP8266 and reduce power consumption by factor of 10 (Tutorial)](
https://www.youtube.com/watch?v=r-hEOL007nw&list=PL_MJualihC5AQhSO0uwShM_pq5nCt_pNR&index=84)

あらたに見つけたAndreas Spiessさんの動画。
この人はESP8266で色々おもしろいことを調査している。

以下、動画の概要 (間違っているかもしれない)

- Deep sleepモードではメモリ内容がクリアされる
- EEPROMでデータを保持しようとすると10,000 Write cycle を消費してしまう
- RTC MemoryはDeep sleepモードでも消えない
- RTC Memoryでは512バイトのUser Dataが使用可能
- Deep sleepモード + RTC Memoryの動作で10倍消費電力を減らせる

別途、前々から謎であったRTCの存在だが、RTCはDeep sleepモードで使われているようだということを知った。

RTC Memoryの使い方は動画内で紹介されているので省略。

なお、Deep sleepの表記はデータシート内でも「Deep sleep」と「Deep-Sleep」の２種類がある。どちらの記載が正確かは不明。


以下、検索用キーワード

- DeepSleep
- RTCMemory

### link
(追記 2017/06/05)

ESP8266 RTCMemory
http://qiita.com/YumeYakata/items/c8db045c48dc3ebd0b24
技術英語 > if they don’t [give us permission], we don’t do any work. / Permission granted / give the green light

@ LOE > May 30, 2003

http://loe.org/shows/shows.html?programID=03-P13-00022
> First, we ask them permission, and if they don’t <font color=red>give us permission</font>, we don’t do any work.

<hr>
VoyagerではJaneway艦長が部下に許可を与えるときに使うのが

> Permission granted.

上記で検索したら"The Voyager Conspiracy"のスクリプトが出てきた。
http://www.chakoteya.net/Voyager/608.htm

このエピソードは何度見てもよい。The Next GenerationのFamily(戦士の休息)なみに時々鑑賞している。
「あなたのことをしっかり見ているよ」ということを伝えるのにこれ以上のやり方はないかと思う。

<hr>
関連して思い出したのは

> give the green light

http://idioms.thefreedictionary.com/give+the+green+light

印象的なフレーズではあるが、このフレーズを見たのは１回のみだ。
non-native同士では使わないだろうか。