OmniAICreator/Qiita-1.07M huggingface dataset:
1つのTomcatでROOT.warを複数動かす

# はじめに
1つのTomcatで複数のROOT.warを動かしたかったのでその時の設定メモ
アプリA、B、Cをそれぞれ8080、8081、8082ポートで動かす

# URLのイメージ
- アプリA
 - http://localhost:8080
- アプリB
 - http://localhost:8081
- アプリC
 - http://localhost:8082

# server.xml

```server.xml
<?xml version='1.0' encoding='utf-8'?>
<Server post="8005" shutdown="SHUTDOWN">

  <!-- アプリAの設定 -->
  <Service name="A">
    <!-- 8080ポートで実行 -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="A" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <!-- ${TOMCAT_HOME}/webapps_Aディレクトリにwarファイルを配置 -->
      <Host name="localhost" appBase="webapps_A"
            unpackWARs="true" autoDeploy="true">
      </Host>
    </Engine>
  <Service>

  <!-- アプリBの設定 -->
  <Service name="B">
    <!-- 8081ポートで実行 -->
    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8444" />
    <Engine name="B" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <!-- ${TOMCAT_HOME}/webapps_Bディレクトリにwarファイルを配置 -->
      <Host name="localhost" appBase="webapps_B"
            unpackWARs="true" autoDeploy="true">
      </Host>
    </Engine>
  </Service>

  <!-- アプリCの設定 -->
  <Service name="C">
    <!-- 8082ポートで実行 -->
    <Connector port="8082" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8445" />
    <Engine name="C" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <!-- ${TOMCAT_HOME}/webapps_Cディレクトリにwarファイルを配置 -->
      <Host name="localhost" appBase="webapps_C"
            unpackWARs="true" autoDeploy="true">
      </Host>
    </Engine>
  </Service>

</Server>
```
Swift 列挙型について（Associated Value、Raw Value）

列挙型について記載します

まとめて宣言するケース

```swift
enum Planet {
    case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
```

enumに関数をもたせたケース

```swift
enum Animals:String{
    case Rion = "rion"
    case Cat = "cat"
    case Dog = "dog"
    case Panda = "panda"
    
    func description() -> String {
        switch self {
            case .Rion:
                return "description rion"
            case .Cat:
                return "description cat"
            case .Dog:
                return "description dog"
            case .Panda:
                return "description panda"
        }
    }
}
Animals.Rion.description()  //description rion
```


Associated Values
特定の型を指定したいが、別の型で置き換えたい時もある場合に使用

```swift
enum Barcode {
    case UPCA(Int, Int, Int, Int)
    case QRCode(String)

    func traceValue() ->Void {
        switch self {
        case .UPCA(let numberSystem, let manufacturer, let product, let check):
            print("UPC-A: \(numberSystem), \(manufacturer), \(product), \(check).")
        case .QRCode(let productCode):
            print("QR code: \(productCode).")
        }
    }
}

var productBarcode = Barcode.UPCA(8, 85909, 51226, 3)
productBarcode.traceValue()   //UPCA(8, 85909, 51226, 3)

productBarcode = .QRCode("ABCDEF")
productBarcode.traceValue()  //QRCode("ABCDEF")
```


全てのassociated valuesを変数や、定数で指定する場合は以下のように記載

```
switch productBarcode {
case let .UPCA(numberSystem, manufacturer, product, check):
    print("UPC-A: \(numberSystem), \(manufacturer), \(product), \(check).")
case let .QRCode(productCode):
    print("QR code: \(productCode).")
}
```


Raw Values
全て同じ型を持った列挙型がRaw Valuesになります
Raw Valueの取り出しはrawValueプロパティでアクセスします

```swift
enum ColorsImage:String {
    case red = "hot"
    case blue = "cool"
    case yellow = "pretty"
}
let colorImage = ColorsImage.red.rawValue
print(colorImage) //hot
```

同じRaw Value を指定するとエラーになります

```swift
enum ColorsImage:String {
    case red = "hot"
    case blue = "cool"
    case yellow = "pretty"
    case grey = "cool"  //error
}
```

自動でRaw Valueがセットされる例

```
enum Planet: Int {
    case Mercury = 3, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
Planet.Mercury.rawValue //3
Planet.Venus.rawValue //4
```


以上



参考：
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Enumerations.html
ズンドコ with 日本語Java

流行ってるみたいなので作ってみた．
日本語使えるよ，っていうのをメインに．
てか，ルール合ってるのかな．

```java:Kiyoshi.java
public class Kiyoshi {
    enum ズンドコ {
        ズン,
        ドコ
    }

    public static final String キヨシ = "キ・ヨ・シ！";

    public static void main(String[] args) {
        Random rand = new Random();
        int z = 0;
        while(true){
            ズンドコ zd = ズンドコ.values()[rand.nextInt(2)];
            System.out.print(zd.name());
            switch (zd){
                case ズン:
                    z++;
                    break;
                case ドコ:
                    if(z>4){
                        System.out.println(キヨシ);
                        return;
                    }
                    z = 0;
            }
        }
    }
}
```

変更
最後のキヨシメッセージが違っていたので訂正．
ちなみにキヨシだけStringにしているのは，！を変数に使うのがちょっと気持ち悪かったからです．
Laravel 5.2 からの DBクエリログ


若干変わった。こういうのは困る 

````
DB::listen(function($query) {
            // $query->sql
            // $query->bindings
            // $query->time
        });
````

イベントから落ちてくるのは`\Illuminate\Database\Events\QueryExecuted`のクラス。

以下で中身を確認できる。単純なオブジェクトです。

https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Events/QueryExecuted.php


クエリログを書くとしたらきっとこんな感じになる。

````
        app("db")->listen(function(\Illuminate\Database\Events\QueryExecuted $e) {
            /** @var LoggerInterface $log */
            $log = app(LoggerInterface::class);
            $log->debug($e->sql);
            $log->debug("bindings",$e->bindings);
        });
````
logwatch で実行されるスクリプトを１つづつ動作確認する

次のように幾つかの環境変数を指定しつつ、ログファイルをスクリプトにパイプでつなげていくと `logwatch --range today --service kernel` みたいにしたのと同じ出力が得られます。

```sh
export LANG=C PERL5LIB=/usr/share/logwatch/lib/ LOGWATCH_DEBUG=9 LOGWATCH_DATE_RANGE=today
cat /var/log/messages |
  perl /usr/share/logwatch/scripts/shared/applystddate |
  perl /usr/share/logwatch/scripts/shared/onlyservice kernel |
  perl /usr/share/logwatch/scripts/shared/removeheaders |
  perl /usr/share/logwatch/scripts/shared/expandrepeats |
  perl /usr/share/logwatch/scripts/services/kernel
```

なので、適当に切り貼りすれば特定のスクリプトだけの動きを確認できます。

```sh
export LANG=C PERL5LIB=/usr/share/logwatch/lib/ LOGWATCH_DEBUG=9 LOGWATCH_DATE_RANGE=today
cat /var/log/messages |
  perl /usr/share/logwatch/scripts/shared/applystddate |
  perl /usr/share/logwatch/scripts/shared/onlyservice kernel
  # 途中までの結果を表示
```
WordPressのオリジナルテーマ作成の準備(windows)

※自分のためのメモとして書き残しています。

#オリジナルテーマ作成のために必要なもの
※windows7環境での構築です。
wordpress本体 [https://ja.wordpress.org/]
xampp [https://www.apachefriends.org/jp/index.html]

##インストール
ダウンロードしたwordpressを解凍して、以下のように配置する。
C:\xampp\htdocs\wordpress

配置した場所にブラウザでアクセスする。
http://localhost/wordpress

1.「設定ファイルを作成する」をクリック
2.「さあ、始めましょう！」をクリック
3. 任意のデータベース情報を入力し、「送信」をクリック
4.「インストール実行」をクリック」
5. 任意のサイト情報を入力し、「wordpessをインストール」をクリック
6. http://localhost/wordpress/wp-login.phpにアクセスし、ログインする

##underscoresテーマの設定
_sテーマをダウンロードする(cssでいうところのreset.cssのようなもの)
http://underscores.me/

Theme Nameに任意の名前を入力し、「GENERATE」をクリックしダウンロードする。
※既存テーマと同じ名前のテーマにしないでください。(更新された場合に消えます)
ダウンロードしたテーマを以下の場所に配置する。
C:\xampp\htdocs\wordpress\wp-content\themes\設定したテーマ名

**WordPressメニュー**
「外観」->「テーマ」->「設定したテーマ名」を選択する

##プラグインインストール
テーマ作成時に便利なツールをインストールする
「Show Currnet Template」
表示テンプレートの確認が出来る。

##エラーコードを表示するようにする
index.phpに以下を追加する。
define('WP_DEBUG', true);
※リリースする際は消してください。エラーコードは見えてしまうため。

##テーマユニットテストをダウンロード
様々な状態を視覚的に確認できるテストデータです。
[https://wpdocs.osdn.jp/テーマユニットテスト](https://wpdocs.osdn.jp/%E3%83%86%E3%83%BC%E3%83%9E%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88)

日本語版テストデータ（2013年作成。リンク先の説明を参照）の[XML](https://raw.githubusercontent.com/jawordpressorg/theme-test-data-ja/master/wordpress-theme-test-date-ja.xml)データをダウンロードする。

**WordPressメニュー**
「ツール」->「インポート」->「wordpress」-> xmlファイルを選択してアップロード
※インポートがインストールされていない場合は、インストールしてください。

以上でオリジナルテーマ作成の準備が完了しました。
参考になれば幸いです。
例のキヨシチェックを java で

java 勉強中なので、例のズンドコキヨシチェッカーを書きました

[元ネタ](https://twitter.com/kumiromilk/status/707437861881180160)

```java
import java.util.Arrays;
import java.util.List;
import java.util.Random;

public class ZunDoko {
	public static void main(String... args) {
		final String success = "ズンズンズンズンドコ";
		final List<String> zundoko = Arrays.asList("ズン", "ドコ");
		StringBuilder sb = new StringBuilder();
		Random rand = new Random();
		while (true) {
			String zd = zundoko.get(rand.nextInt(2));
			sb.append(zd);
			System.out.print(zd);
			if (zd.equals("ドコ")) {
				String check = sb.toString();
				if (check.endsWith(success)) {
					System.out.println("キヨシ！");
					break;
				}
				sb.setLength(0);
				System.out.println("");
			}
		}
	}
}
```

普通ですかねー。これで。
Rails4でDBに保存済みのデータを複製する

## データベースに登録済みのデータを複製したい時
```
model            = Model.find(n)
duplicated_model = model.dup

duplicated_model.save
```
でOK。
プライマリキーは重複せずに新しく割り当てられる。


## アソシエーション
```
model            = Model.find(n)
duplicated_model = model.dup

duplicated_model.associations = model.associations

duplicated_model.save
```
で関連付けられたモデルも複製できる。


## CarrierWaveでアップロードした画像も一緒に複製したい時
```
model            = Model.find(n)
duplicated_model = model.dup

duplicated_model.image = model.image.file

duplicated_model.save
```
簡単。
例のキヨシチェックを Ruby のワンライナーで書いてみる

こんな感じですかね。

```
ruby -e 's = ""; until s[/(ズン){5}ド/] do print c = %w(ズン ドコ).sample; s += c end; puts "キ・ヨ・シ！"'
```

```lang:実行結果
ズンズンドコドコズンドコドコドコズンドコドコドコドコドコズンズンズンズンズンドコキ・ヨ・シ！
```

元ネタ

>Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ！」って出力した後終了って関数作ったら満点で単位貰ってた
>
>*https://mobile.twitter.com/kumiromilk/status/707437861881180160*

参考

- http://qiita.com/beinteractive/items/a2264048a601ee998aca
- http://qiita.com/fum1h1ro/items/98fae35ef475cba7462c
mb_send_mailでReturn-Pathを設定してメール送信

文字化けを防ぐことと、Return-Pathを設定することだけを意識した簡単な関数。
汎用性は高いのではないか、と。

`mb_send_mail`の第５引数に`fオプション`を付けることで`Return-Path`が設定できます。

```php:sendmail.php
function Send_Mail($mailto, $from, $title, $body){

    // 文字コード変換
    $to    = mb_convert_encoding($mailto, "ISO-2022-JP", "utf-8");
    $from  = mb_convert_encoding($from, "ISO-2022-JP", "utf-8");
    $title = mb_convert_encoding($title, "ISO-2022-JP", "utf-8");
    $body  = mb_convert_encoding($body, "ISO-2022-JP", "utf-8");

    // メール送信
    mb_language('ja');
    mb_internal_encoding("ISO-2022-JP");
    $toaddr  = mb_encode_mimeheader($to,"ISO-2022-JP")."<$to>";
    $headers = "From: ".$from;
    $pfrom   = "-f$from";
    $rslt    = mb_send_mail($toaddr, $title, $body, $headers, $pfrom);

    return true;

}
```
Mediumの『/@{username}』みたいにURLの中で『@』を使っているのは大丈夫なのか調べてみた

MediumのURLでユーザー名の前に『@（アットマーク）』が入っているのを見かけます。

```
https://medium.com/@narikei
```

`/users/narikei`とかなっているよりもタイプ数も少ないし、直感的で良い思った
でも、他にやっているところを見ないし『@』をURLに含んでいるサービスもない

これはインターネットの仕様的に大丈夫なのか疑問だったので調べてみました。


## URLおさらい

例えば、こんなURLがあった場合

```
https://username:password@www.example.com:8080/news/index.html?page=2&flg=true#popular
```

このような要素に分類される

| scheme | https |
|:-----------|:------------|
| host       | www.example.com |
| port       | 8080 |
| user       | username |
| pass       | password |
| path       | /news/index.html |
| query      | page=2&flg=true |
| fragment   | popular |

普通URLで『@』っていうとBasic認証で使うイメージです。


## 『@』を使っても良いか

`URL`の親玉`URI`の仕様は`Internet Engineering Task Force`が策定している

その仕様書がこれ
[http://www.ietf.org/rfc/rfc3986.txt](http://www.ietf.org/rfc/rfc3986.txt)
（読みにくいのでダウンロードして固定ピッチのフォントで読むのがおすすめ）

```
3.3.  Path

   The path component contains data, usually organized in hierarchical
   form, that, along with data in the non-hierarchical query component
   (Section 3.4), serves to identify a resource within the scope of the
   URI's scheme and naming authority (if any).  The path is terminated
   by the first question mark ("?") or number sign ("#") character, or
   by the end of the URI.
   
   ＝＝＝＝＝

      segment       = *pchar
      segment-nz    = 1*pchar
      segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
                    ; non-zero-length segment without any colon ":"

      pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

```

私のてきとう翻訳によると、*Path*には使っても大丈夫って書いてあった
さらに、「:（コロン）」も使ってもよいらしい

ちゃんとパーセントでエスケープする場合は`%40`を使う


## そういえば

むかし、`Hashbang`ってものもあったけど`/#!`は使っちゃだめ
というか`#`以降がfragmentとして分類される。


## おわり

MediumはきちんとURIの仕様にそっていて正しかった
`/@narikei`だと既存のルーティングと競合しないし、`/@login`とかやられても辛さが軽減されるのでオススメかも

Railsだったら こんな感じでルーティングさせることができる

```rb:routes.rb
  get "/@:username" => "users#show"
```

JavaでSpringならこんな感じ

```java:UserController.java
@Controller
@RequestMapping(value = "/@{userName}")
public class UserController {...}
```

ただ、すべてのブラウザやクローラーがきちんと読んでくれるかは微妙な気がします。

はじめてIETFの仕様書とか読んだ
ワンライナーズンドコキヨシ with Ruby


[ズンドコキヨシ with Ruby](http://qiita.com/yancya/items/1167e9764719151d0c80)を見てワンライナーで書いてみた。
ついでにコードゴルフに挑戦してみたが、私にはこれが限界であった。
もう少し短く出来そうな気がするのだが...。

```ruby
z,d=a=%W|ズン ドコ|;0 until (0..4).map{puts w=a.sample;w}.join==z*4+d;puts "キ・ヨ・シ！"
```

他のズンドコ実装を見るといつの間にやら5個区切りの判定をしているのは私ぐらいになってしまったので、他の実装と合わせたものを急遽考えてみた。
...が、長くなってしまったのでもうちょっと実装を考え直したい。

```ruby
z,d=a=%W|ズン ドコ|;s=[];puts (s=(s<<a.sample).last(5))[-1] until s.join==z*4+d;puts "キ・ヨ・シ！"
```

配列から文字列に変えたらもっと短く出来た。

```ruby
z,d=a=%W|ズン ドコ|;puts (s+=w=a.sample)[w] until (s||="")[z*4+d];puts "キ・ヨ・シ！"
```

改行を諦めれば`puts`よりも`STDOUT`に文字列を流すほうが短く済む。

```ruby
z,d=a=%W|ズン ドコ|;$><<(s+=w=a.sample)[w] until (s||="")[z*4+d];$><<"キ・ヨ・シ！"
```

最後に結果だけ出せばいいのであれば途中で`STDOUT`に流す必要がなくなるので更に色々削れる。

```ruby
s="";z,d=a=%W|ズン ドコ|;0until(s<<a.sample)[z*4+d];$><<s+"キ・ヨ・シ！"
```
EventEmitterバケツリレースタイル/フレームワークなしで小さくFluxする


## 想定しているシチュエーション

非SPA環境で個別にマウントされるコンポーネントがそれぞれで小さくFluxするような環境。

SPAガッツリ組むのでないなら、Fluxフレームワークは不要だと思っていて、とは言えオレオレ構成も行き過ぎると害になる。
その辺のバランスをとって、次のような構成がいいのではないか、と考えてみた。

## 考え方

- コンテナがEventEmitterを1つ保持する
- コンテナはEventEmitterの各種イベントをListenする
- コンテナはpropsとstateを区別して扱い、stateを更新する
- コンテナはコンポーネントを一つだけ描画する
- コンポーネントはpropsとして渡されたEventEmitterを発火させる
- コンポーネントはEventEmitterをListenしない
- コンポーネントはpropsのみ扱う

## コード

```js
// src/components/header.js
export default ({title, emitter}) => (
  <header>
    <h1 onClick={e => emitter.emit("changeTitleToBar")}>{title}</h1>
  </header>
);

// src/containers/header-container.js
import Header from "../components/header";
import {Component} from "react";
import {EventEmitter} from "events";

export default class HeaderContainer extends Component {
  constructor(props) {
    super(props);
    this.state = {title: "foo"};
    this.emitter = new EventEmitter;

    // EventEmitter の PubSub
    // 親の責務は setState/replaceState で State 更新
    // ここを Atomic にしないと完全に見失う
    this.emitter.on("changeTitleToBar", () => {
      this.replaceState({title: "bar"});
    });
  }
  render(){
    // 適当にマッピングして子に渡す
    return <Header ...{Object.assign({}, this.props, this.state, {emitter: this.emitter})}/>
  }
}
// src/main.js
import HeaderContainer from "./containers/header-container";
import ReactDOM from "react-dom";
ReactDOM.render(<HeaderContainer />, document.querySelector(".headerContainer"));
```

## 利点

- 導入が簡単
- フレームワークで隠蔽する箇所が無いので、読みやすい

## 欠点

- emitterを全ての子Componentにバケツリレーする必要がある
- なんでもできて割れ窓っぽい

改善案としては

```
    return <Header ...{Object.assign({}, this.props, this.state, {dispatch: this.emitter.emit.bind(this.emitter)})}/>
```

などとすると 発火の関数だけ渡すと 子がlisten できなくなる

## 運用してみたか

いいえ。

とはいえ https://github.com/mizchi/flumpt は、この発想を Reactのcontextという機能を使ってemitterバケツリレーを隠蔽し、それにアクセスするDSLを足しただけ。

ただflumptは色んな物を隠蔽しすぎてサーバーサイドレンダリングに対応できてないので、これぐらいが適当な気がする。
mruby/c 16bit命令案

# はじめに
mruby/cは少々効率を犠牲にしても省メモリに振ったユニークな処理系だと思いました。そんな処理系の命令セットがmrubyと同じなんて一貫性が無いので省メモリに振った命令セットを考えました。方針は以下の通りである。

- mrubyのバイトコード列の意味を変えない

- メソッドはあまり複雑なものはない。つまり、ローカル変数なんかは少ないプログラムを想定する

- よく使う命令の組み合わせで命令融合させる。この際、32bitにはこだわらない

- 16bitの命令を用意して出来る限りそれを使うことでプログラムを小さくする。使える16bit命令が無い場合は32bit命令を使うわけだが、この場合はnop命令などを使って32bitにアライメントを合わせる。

- ジャンプ命令は32bit命令列を前提にしているのでジャンプの飛び先は32bitにアライメントする

# 命令融合

## OP_MOVE2
  OP_MOVE Rn, Ra
  OP_MOVE Rn+1, Rb
を1命令にする。ただし、n >= a, b。a,bの部分に0を入れることで、LOADSELFも融合できる。

  ビットパターン
```
   　　　　　 Rb       　　　Ra　　　　n　　　      オペコード(0x50)
オフセット   FEDCBA98    76543210 FEDCBA987 6543210
内容　　　   bbbbbbbb    aaaaaaaa nnnnnnnnn 1010000
```

# 16bit命令
16bit命令にはすべて最後に16が付く

## OP_NOP16
  ビットパターン

```
   　　　　　 常に0       オペコード(0x0)
オフセット   FEDCBA987   6543210
内容　　　   000000000   0000000
```

OP_NOPは32bitでall 0なのでOP_NOP16が2つ並んでいるものとして解釈できる。従来の命令コードの意味を変えた唯一の例である。

## OP_LOADLOCAL16
```
   　　　dst(parameter)　src(local) オペコード(0x50)
オフセット   FEDC　　　  BA987   6543210
内容　　　   0000　　　  00000   1010000
```
OP_MOV命令と同じ意味だが、local変数領域のレジスタからパラメータ領域のmoveに特化している。

レジスタフィールドを節約するため、local変数領域とパラメータ領域に分ける。local変数領域はR1～R(irep->nlocals - 1)までのローカル変数が割り当てられた領域。パラメータ領域はそのあとのメソッド呼び出しの引数やワーキングで使ういわばスタックとしての領域である。
そして、local変数領域同士、パラメータ領域同士の代入のmove命令は生成されない。そこで、このようなレジスタ指定を行う命令フォーマットは無駄であるため、このように命令を分けた。
また、local変数領域はR1から始まることに注意されたい。R0はselfだが、loadselfという命令があるので、これを割り当てるのは無駄である。

## OP_LOADPARM16
```
   　　　dst(local)　src(parameter) オペコード(0x5)
オフセット   FEDC　　　  BA987       6543210
内容　　　   0000　　　  00000       1010001
```
OP_MOV命令と同じ意味だが、パラメータ変数領域のレジスタからlocal領域のmoveに特化している。
ズンドコキヨシ with Perl

http://qiita.com/y__sama/items/7c451dfd706f9b36729d

Perlでやってみた
※Use of uninitialized valueを出すという初歩的なミスをしていたのでついでに諸々修正しました…
 
# Perl版

```perl:kiyoshi.pl
use strict;
use warnings;

sub kiyoshi {
  my @zd  = my ($z, $d) = ('ズン', 'ドコ');
  my $str = join('', (my @kys = ($z, $z, $z, $z, $d)));
  my $cnt = 0;
  my @word;

  while ( join('', @word) ne $str ) {
    shift @word if $#word >= $#kys;
    push @word, $zd[rand(@zd)];
    print $word[$#word];
    $cnt++;
  }
  print "キ・ヨ・シ！\n($cnt回ズンドコしました)\n";
  return;
}

kiyoshi();
```

もうちょっと上手くできないものか…
個人的 Android 関連資料リンク集

備忘録です。
他にもちょっとマイナーなページを見つけた時とかに更新します。


# API Level

いつもAPI level 16〜19あたりがどのバージョンと対応してるのかわからなくなる。
あとディレクターさんと最低サポートバージョンについて話し合うときはシェアの情報も必要。

* シェア
	* http://developer.android.com/intl/ja/about/dashboards/index.html
* OSバージョンとの対応
	* https://en.wikipedia.org/wiki/Android_version_history


# Android Gradle Plugin

Alpha版やBeta版の情報は developer.android.com に上がってこないので、こちらの情報が頼り。

* リリースノート
	* http://tools.android.com/tech-docs/new-build-system
* DSLのリファレンス
	*  http://google.github.io/android-gradle-dsl/

# Android Studio

うっかりPreview版やBeta版をアップデートしちゃって、前のバージョンが必要になったときに。

* Canary Channel
	* http://tools.android.com/download/studio/canary


# Support Library

マイナーアップデートだと変更内容が大々的に告知されないので、こういうところで確認するしかない。

* リリースノート
    * http://developer.android.com/intl/ja/tools/support-library/index.html



# Google Developers

Google Play Service関係はみんなこっち。しかしなぜか InAppBilling 関係は developer.android.com にマニュアルが置かれている。

* トップ
	* https://developers.google.com/products/?hl=ja
* よく見るところ
	* Analytics
		* https://developers.google.com/analytics/devguides/collection/android/v4/?hl=ja
	* GCM (Push通知)
		* https://developers.google.com/cloud-messaging/?hl=ja
	* Smart Lock for Password on Android
		* https://developers.google.com/identity/smartlock-passwords/android/?hl=ja
* なぜかこれは別枠
	* in-app Billing （アプリ内課金）
		* https://developer.android.com/intl/ja/google/play/billing/index.html
		* 2016年3月初旬現在、このページには Version 3 APIについて書かれているけれど、下記のGoogle Samplesに上がっているものは Version 5のサンプルなので要注意
			* http://developer.android.com/intl/ja/google/play/billing/versions.html


# トラブルシュート

やつら（バグ）と戦うためにも、リソースは一元化して欲しい。

* Google Samples
	* https://github.com/googlesamples
	* InAppBillingのサンプルとか
	* 本当に、 **本当に** 「サンプル」というレベルのコードであって、このコードをそのまま真似したものをプロダクションに乗せてはいけないだろ、って気がする
	* Android SDKの extras の中に入ってるサンプルは、ここのもののスナップショットらしい？
* AOSPのIssue
	* https://code.google.com/p/android/issues/list
	* 謎のバグに突き当たったときとかに見ると、同じ境遇の人がいてホッとする（必ずしも問題が解決する訳ではない）
* Twitterに投げて詳しい人が教えてくれるのを待つ
	* http://qiita.com/kaelaela/items/85e0bcc26584141fda1d
* StackOverflow
* Google先生


# ニュース

どこからどんなブログ名だったか忘れて検索できなくなることが多々あるので。

* Android Developers Blog
	* http://android-developers.blogspot.jp/
	* 新しいツールとか出たら大抵ここで紹介される

# ソースコード

やっぱり最後は自分の目が頼りになる場面が結構ある。

* OpenGrokによる全文検索サービス
    * https://sites.google.com/site/devcollaboration/codesearch
    * ありがたく使わせていただく :pray: 
* 公式のリポジトリ
    * root
        * https://android.googlesource.com/
    * よく使うやつらあたり
        * https://android.googlesource.com/platform/frameworks/base/
    * Support Library
        * https://android.googlesource.com/platform/frameworks/support.git/
    * 検索性は皆無なので、大抵 `git android (クラス名).java (メソッド名)` でググってファイルを探すことが多い。
* IntelliJ (Android Studio)でゴリゴリ読んでく
    * SDK Managerでインストールしてれば `$ANDROID_HOME/sources` あたりに入ってるはず
    * Support Libraryは `$ANDROID_HOME/extras/android/support/` あたりにソースが入ってる
【iOSアプリ】外から見えて困るものを.plistファイルに書くのはやめる

最近plistにデータを記載して、[ObjectMapper](https://github.com/Hearst-DD/ObjectMapper)でモデルクラスを作成するのがマイブームです:tada: 

ビギナーなのでいろいろな方のコードを参考に見せていただくのですが、
__APIの接続先__をplistにまとめているケースが気になりました
でも・・・

#.plistって外から見えるんですね
plistは結局XMLファイルなので、jsonファイルや画像リソース同様、__見ようと思えば見えちゃう__のですね

:tada: TIPS: `.swift`ファイルはコンパイルされているので外部からは見えない

## アプリリソースをipaから取得する ３ステップ
1. ipaファイルの拡張子を__.zip__にリネームして変換する
2. 変換してできたzipファイルを解凍
3. __アプリ名フォルダ > Payloadフォルダ > アプリ名ファイル__を右クリックして「__パッケージの内容を表示__」を選択

以上

:tada: TIPS: Storeからインストールしたipaファイルは、iPhoneのバックアップをすると`/Users/***/Music/iTunes/iTunes Media/Mobile Applications`に格納されています

:tada: TIPS: __iTunes > マイApp > アプリを右クリックして「Finderで表示」__でも簡単にアクセスできました

# おまけ
## 目に留まったので某通販サイトのアプリを上の手順で見てみました

### 結果です
![Group.png](https://qiita-image-store.s3.amazonaws.com/0/98613/13bc3cf9-0295-269c-dac4-c155bf2b33ad.png)

* `.plist`ありました
    * このアプリのplistには、基本的なアプリの設定値以外の情報はありませんでした
* `Acknowledgements.html`を見ると以下のようなPodライブラリを使用していることがわかりました
    * MARKRangeSlider
    * TTTAttributedLabel
    * Bolts
    * FBSDKCoreKit
    * MobileAppTracker
* `brand.json`にはものすごい数のアパレルブランドのデータが記載されていました
    * （ブランドが増えたらjsonを更新してアップデートするのでしょうか・・気になりました）
* 使用しているプッシュ通知サービスはPopInfoみたい？

# まとめ

おまけに記載した通り、plistを含むリソース部分は見ようと思えば外部から丸見えでした
plistは便利ですが、他リソース同様、重要情報の記載は気をつけようと思いました

以上です
ありがとうございました :tada:
jQuery-easyUIのcomboboxを使う

jQueryは幅広く使われているJavaScriptライブラリで、プラグインも豊富です。
UIを作る上でeasyUIが便利だな～と感じております。
ajaxでフォームの値を書き換える事はよくありますが、easyUIのサンプルがなかったためメモします。

## JSP
入力フォームは以下のように作ります。
・ 「data」      ：コンボボックスに並べるデータをjsonで設定します
・「valueField」：フォームのバリューとするjson項目を指定します
・ 「textField」 ：フォームの表示とするjson項目を指定します

	<input id="id" name="name" class="easyui-combobox" data-options="
					valueField: 'id',
					textField: 'name',
					data: ${jsonData}" style="required:false	"/>

## JavaScript
Ajaxでサーバーに非同期通信し、受信結果をcomboboxに反映します。

・「$("#id").combobox("clear");」：コンボボックスをクリアする
・「$("#id").combobox("loadData",jsonData);」：サーバから受信したJSONデータをcomboboxに反映する

	$("#id").combobox({
				onChange: function (n,o){
					$.ajax({
						type:"post",
						url: 'sampleURL',
						dataType: "json",
						data: {
							id: $("#id").combobox("getValue")
						},
						success:function(data){
							var jsonData = data[0].data;
							$("#id").combobox("clear");
							$("#id").combobox("load	Data",jsonData);
						},
						error:function(data){
							return false;
						}
					});
				}
			});
GitHub Importerで、RedmineのSubversionリポジトリをGitHubへ移行

今年（2016年）の2月に、[Migrate your code with the GitHub Importer](https://github.com/blog/2110-migrate-your-code-with-the-github-importer) ということで、既存のコードをGitHubに移行するための機能がリリースされたようです。

検証しきれてないですが、少し使ってみた結果をまとめました。

# 事前準備

* 移行元のリポジトリのコミッターに対して、GitHubアカウントを作成
* 移行元へのコミット時のメールアドレスを上記アカウントに登録

GitHubはメールアドレスを複数登録できます。（公開アドレスはひとつのようですが）
メールアドレスで一致するのがあれば、コミットのauthorが判定できるはず。

# 手順

公式サイトにも手順があります。
https://help.github.com/articles/importing-from-subversion/

## 移行元のURL、移行先のリポジトリの設定

Importer機能は次のURLになります。

https://import.github.com/new


subversionのURLと、それをどのアカウントの下のリポジトリでつくるのかと、公開設定を決めます。
Redmineであれば`https://[redmine_server]/svn/[project_identifier]`みたいなURLになると思います。 

## subversionリポジトリへの認証

begin importを押すと、移行元のリポジトリにアクセスするための認証情報が要求されます。
Redmineであれば、プロジェクトメンバーのものを入力すればOKです。認証に成功すれば、インポートが開始されます。

## authorの対応付け

インポートが完了すると、移行元のauthorが一覧表示されます。このタイミングでも、GitHubアカウントに紐付けられるようです。

## Redmineとの関連づけ

移行後のリポジトリを、Redmineと連携させる手順の詳細は[こちら](http://qiita.com/n_slender/items/54cd282c140fadbbb322)にあります。

# まとめ

移行元のリポジトリの容量が大きいと時間がかかりそうですが、数人規模のプロジェクトであれば特に問題なさそうな気がします。

subversionの場合、[svn2git](https://github.com/nirvdrum/svn2git)を使ってGitに変換しているようです。これの中身がgit-svnなので、もとのリポジトリのリビジョンが多かったり、容量が大きいと時間がかかるかもしれないですね。

## 参考サイト

http://dqn.sakusakutto.jp/2012/10/svn-git-github-migration.html
webpackでsassかくときにbootstrapをベースに使う

以下などbootstrap用loaderもあるっぽいけど、
bootstrapで組んでいくというよりはベースにしてextendしたりしながら使いたいのでちょっと違和感がある。
https://github.com/shakacode/bootstrap-loader

なのでsass-loaderでbootstrap使えるように設定したのだけど若干手順がめんどかったのでメモ

# 手順

## 1. package.json

```bash
$ npm install --save-dev node-sass bootstrap-sass
$ npm install --save-dev webpack
$ npm install --save-dev css-loader style-loader sass-loader file-loader 
```

## 2. webpack.config.js

```js:webpack.config.js
module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: 'built'
  },
  module: {
    loaders: [
      //bootstrapのフォントまわりのため
      {
        test: /\.woff2?$|\.ttf$|\.eot$|\.svg$/,
        loader: 'file'
      },
      {
        test: /\.scss$/,
        loaders: ['style', 'css', 'sass']
      }
    ]
  }
}
```

## 3. アプリかく

```js:src/index.js
require('./stylesheets/main.scss');

//...
```

```sass:src/stylesheets/main.scss
$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/";
@import "~bootstrap-sass/assets/stylesheets/_bootstrap.scss";
```
railsで旧ドメインから新ドメインに引っ越す

`.htaccess`使ったり`dns`で変更したりするのかな…ちゃんとパスとかも引き継いでくれる書き方あるのかな…あんまり詳しくないから調べるのめんどくせぇな…、と思ったんですがrailsでやれるんですね。

```rb:application.rb
class ApplicationController
  before_filter :ensure_domain
  #...
  protected
  def ensure_domain
    default_host = Rails.application.routes.default_url_options[:host]
    if request.env['HTTP_HOST'] != default_host && Rails.env.production?
     redirect_to "#{request.protocol}#{default_host}#{request.fullpath}", status: 301
    end
  end
end

```

```rb:config/environments/production.rb
Rails.application.configure do

  Rails.application.routes.default_url_options[:host] = 'example.com'

#...

end
```

この手のproduction環境でのみ有効になる条件ってテスト書いてても不安になるのでリリース前にはstagingとかで目で見て挙動を確認するんですが、安心できるいい方法が知りたい所です。

```rb:spec/controller/application_controller_spec.rb
  describe "production javascripts" do
    before(:each) do
      allow(Rails.env).to receive(:production?).and_return(true)
      @request.env['HTTP_HOST'] = 'old-domain.com'
      Rails.application.routes.default_url_options[:host] = 'example.com'
    end
    it "redirects user to new host if accessed old host" do
      get :index
      expect(response.status).to eq 301
      expect(response.header["Location"]).to include 'example.com'
    end
    end
```

そもそもこれだとダメだよー、とかもっと良い書き方あるよー、とかあったら教えて下さい！

参考
[ruby on rails - Redirect from old domain to new one (SEO friendly) - Stack Overflow](http://stackoverflow.com/questions/7578853/redirect-from-old-domain-to-new-one-seo-friendly)
[Goodbye .htaccess, Hello Rails](https://sethvargo.com/goodbye-htaccess-hello-rails/)
Podfileのこれだけは書いておきたい2つの設定

# 確認Cocoapodsバージョン
0.39.0

# CocoaPods配下のライブラリのWarning非表示
以下の1行を書いておくだけ。

諸事情で、少し古いライブラリを使う必要がある時などにすごい量のWarningで
自分が書いたコードのWarningのノイズになってしまう問題が解決されます！

```rb:Podfile
inhibit_all_warnings!
```

# Pods配下のプロジェクトの```Build Active Architecture Only```を```NO```にする
これは開発環境に左右されるかもしれませんが、iPhone5Cなどを繋いだ状態でビルドしたりすると
iPhone5S以降の端末で起動出来ないなどの問題が起こるため私の環境ではすべてNOにしています。
その場合、Pods配下のプロジェクトはデフォルトがYesになってしまうため以下のコードで対応しています。

※もちろん繋いでいるArchitectureのみビルドすればいい場合だと無駄にビルドするので遅くなるかもしれません。

```rb:Podfile
post_install do |installer|
    # PodのBuildActiveArchitectureOnlyをNoに変更
    installer.pods_project.build_configurations.each do |config|
    	config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end 
    # PodのBuildActiveArchitectureOnlyをすべてNoに変更
	installer.pods_project.targets.each do |target|
		target.build_configurations.each do |config|
			config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
		end
	end
end
```

# 最後に
- 他にも何かあれば随時追加してきます！
- 何か間違ってたり、補足などあればコメントで知らせてくれると喜びます！
Pandasメモ


# リサンプル時に補間する

時系列データを伸ばす方向にリサンプルすると補間が行われずにNaNが入る（デフォルト）。
`fill_method`オプションで埋めるようにする。

```python
df = pandas.read_csv(f, fill_method='pad')
```


# NaNの行を削除する

```python
df.dropna(how='all', inplace=True)  # inplace=Trueで自己破壊的な処理をする
```
FreeBSD 10.0R => 10.2Rアップグレードに失敗してから回復するまでの話

長らく放置していたFreeBSD機をアップグレードすることにしました。

# 失敗編

## いつものように……

```
freebsd-update -r 10.2-RELEASE upgrade
```

しばらく待つ……

終わったので再起動

```
reboot
```

再起動したらインストール

```
freebsd-update install
```

## ここでまさかの展開

順調に進んできたかと思いきや、実際にファイルをインストールする段でSegmentation Fault！ :weary: 

なにかlibcあたりでも腐ったのか、あらゆるコマンドが動かなくなりました。

## そしてシングルユーザモードも動かない

Ctrl-Alt-Delは効いたので再起動

ここでシングルユーザモードを選択しても、shが動かない :fearful: 

# 回復編

10.2-RELEASEのインストーラで起動、Live DVDとして動かします。

`gpart`コマンドで、既存ルートファイルシステムの位置を確認。
ディレクトリを作ってマウント。

```
mkdir /var/tmproot
mount /dev/da0p2 /var/tmproot
```

`/usr/freebsd-dist/base.txz`ファイルから、
`/bin/*`
`/sbin/*`
`/lib/*`
`/libexec/*`
`/usr/lib/*`
`/usr/libexec/*`
`/usr/share/*`
`/usr/bin/*`
`/usr/sbin/*`
を展開

```
cd /var/tmproot
tar jxvf /usr/freebsd-dist/base.txz '/bin/*' '/sbin/*' '/lib/*' '/libexec/*' '/usr/lib/*' '/usr/libexec/*' '/usr/share/*' '/usr/bin/*' '/usr/sbin/*'
```

マウントを外して再起動

```
cd /
umount /var/tmproot
reboot
```

これでとりあえず動くようになりました。 :kissing: 

念のためもう一回`freebsd-update`動かしました。

```
freebsd-update install
reboot
```

今度は大丈夫でした。

おしまい。

次回「portmaster編」をお楽しみに！
Cumulus Linux 手習い

#cl-license
バージョンアップの度に消えるのが面倒

```
cumulus@cumulus$ sudo cl-license
No license installed!
```

#ethtool

```
cumulus@cumulus~$ ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: Symmetric
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: Unknown
Cannot get wake-on-lan settings: Operation not permitted
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes
```

#ip
##ip link
一覧表示

```
cumulus@cumulus~$ sudo ip -o link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT \    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000\    link/ether 14:18:77:05:1a:00 brd ff:ff:ff:ff:ff:ff
4: swp1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 500\    link/ether 14:18:77:05:1a:01 brd ff:ff:ff:ff:ff:ff
5: swp2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 500\    link/ether 14:18:77:05:1a:02 brd ff:ff:ff:ff:ff:ff
```

インターフェイス有効化

```
cumulus@cumulus~$ sudo ip link set swp1 up
```

#brctl
ブリッジインターフェイスを設定するためのコマンド

```
cumulus@cumulus~$ sudo brctl addbr temp
cumulus@cumulus~$ sudo brctl addif temp swp1
cumulus@cumulus~$ sudo brctl show
bridge name     bridge id               STP enabled     interfaces
temp            8000.141877051a01       no              swp1
```

#version up
##cl-img-install

```
cumulus@cumulus$ sudo cl-img-install CumulusLinux-2.5.0-amd64.bin
```

##cl-img-select

```
cumulus@cumulus$ sudo cl-img-select
          slot 1 (alt    ): 2.5.0-199c587-201501081931-build
active => slot 2 (primary): 2.5.7-753304d-201603071654-build
cumulus@cumulus$ sudo cl-img-select 1
Success: Primary image slot set to 1.
          slot 1 (primary): 2.5.0-199c587-201501081931-build
active => slot 2 (alt    ): 2.5.7-753304d-201603071654-build
Reboot required to take effect.
```
AMPについて

#AMPとは？
Accelerated Mobile Pages
（アクセラレイティッド・モバイル・ページ）

GoogleとTwitterが協同して策定したモバイルウェブ高速化を目的としたプロジェクト/イニシアチブです。

実際のページで確認したほうがわかりやすいので、以下参照してください。

##AMP検索結果
スマホで確認できます。
https://goo.gl/1S5oBH
![Screenshot_2016-03-11-13-15-42.jpg](https://qiita-image-store.s3.amazonaws.com/0/61550/b8f267aa-320e-7e4b-c068-1a8dcae511e4.jpeg)

こちらがAMP対応ページの検索結果です。
「fashion」に関する記事（静的ページ）が横に並んで出てきます。
AMPという記述があり、時間が新しい順に並んでいます（2016.03.11時点）
facebookのタイムラインが横に並んでいる感じです。

![Screenshot_2016-03-11-15-30-13.jpg](https://qiita-image-store.s3.amazonaws.com/0/61550/02e93767-0a6e-97bf-ca96-938fc6c43dce.jpeg)

AMPの静的ページを選択すると横にスワイプで検索結果じ合致した静的ページをどんどん見られます。
これが超速い！！！！


##従来の検索結果との違い
https://goo.gl/AtNwem
![Screenshot_2016-03-11-13-21-55.jpg](https://qiita-image-store.s3.amazonaws.com/0/61550/89db7d5f-d6b9-28d3-b1fe-5a344d2585c8.jpeg)

従来の検索結果です。
サイトごとに記事が表示され、選択するとそのサイトに遷移してページを読み込みます。


##対応状況
（2016.03.11時点）
新聞社やニュースサイトなどが対応しています。
・朝日新聞
・毎日新聞
・産経新聞（関連コンテンツ）
・日刊大衆
・マイナビニュース
・ZAKZAK
・zassi.net

日本語検索結果例：
https://goo.gl/1mFZ8S
https://goo.gl/42w3Bu

##AMPの利点
とにかく爆速で静的コンテンツが表示される
SEO順位が優遇されるかも（現段階ではなんとも言えません・・）


##できること
画像の追加→OK　<amp-img>
SNSボタン→OK aタグによる追加
関連記事→OK（静的リンク）
GoogleAnalytics→OK
広告の追加→OK　<amp-ad>


◆SNSリンクが設置されているAMPページ：
http://www.asahi.com/amp/articles/ASJ3B340HJ3BULFA006.html

◆関連記事が設置されているAMPページ：
http://zakzak-amphtml.googleusercontent.com/amphtml/pages/CAIiEKNUrssjoHG05NpntzfTZqsqGQgEKhAIACoHCAowyJ_yCjD6gtACMNiEngM#

実際の書き方はこちら
http://qiita.com/quuuteee/private/55c0d6ed735917127281

参考：
http://qiita.com/daikiueno/items/e239bb0723bd97c55071
http://masup.net/2015/10/fits-amp-html.shtml
ズンドコキヨシ with PHP

http://qiita.com/y__sama/items/7c451dfd706f9b36729d

### 5個ずつキヨシる

```php
<?php
$z = 'ズン';
$d = 'ドコ';
$zd = [$z, $d];
while (true) {
    $zundoko = array_map(function() use ($zd) {
        return $zd[array_rand($zd)];
    }, range(0, 4));

    if ([$z, $z, $z, $z, $d] === $zundoko) {
        break;
    }
}
echo 'キ・ヨ・シ！';
```

### 1個ずつキヨシる

```php
<?php
list($z, $d) = $zd = ['ズン', 'ドコ'];
$zundoko = range(0, 4);
start:
    array_shift($zundoko);
    $zundoko[] = $zd[array_rand($zd)];

    if ([$z, $z, $z, $z, $d] === $zundoko) {
        echo 'キ・ヨ・シ！';
        exit(0);
    }
goto start;
```

### 組み合わせてかつarray_fillとか使ってみた

```php
<?php
list($z, $d) = $zd = ['ズン', 'ドコ'];
$f = function() use ($zd) {
    return $zd[array_rand($zd)];
};
$zundoko = array_map($f, range(0, 4));
while (true) {
    if (array_fill(0, 4, $z) + [4 => $d] === $zundoko) {
        break;
    }
    $zundoko[] = $f();
    array_shift($zundoko);
}
echo 'キ・ヨ・シ！';
```

### 再起+クロージャの即時呼び出し ~~（クロージャの即時呼び出ししたかったけど即時呼び出し内で再起できなかった）~~
- http://qiita.com/tadsan/items/6b8cc35ff9ccb3c27678 を参考に見直したら動きました :bow: 

```php
<?php
$zd = ['ズン', 'ドコ'];
$expire = array_map(function($i) use ($zd) {
    return $i !== 4 ? $zd[0] : $zd[1];
}, range(0, 4));
($f = function ($zundoko = array()) use ($expire, $zd, &$f) {
    if ($expire === $zundoko) {
        return;
    }
    $zundoko[] = $zd[array_rand($zd)];
    $f(array_slice($zundoko, -5, 5));
})();
echo 'キ・ヨ・シ！';
```
Postgresで全テーブルの件数を表示する

* Postgresで全テーブルの件数を表示する

```
select relname, n_live_tup from pg_stat_user_tables where schemaname='public';
```

[参考 PostgreSQLでテーブルの行数を速く取得する方法](http://d.hatena.ne.jp/sorayukinoyume/20101202/1291304017)
バッシュ　ワンライナー　テンプレート

bash one liner template

#if文　条件判定

```shell-session 
[hnishi@hn home]$ ls
hnishi
[hnishi@hn home]$ if ! test ls; then echo yes; fi
[hnishi@hn home]$ if test ls; then echo yes; fi
yes
[hnishi@hn home]$ if ! ls; then echo yes; fi
hnishi
[hnishi@hn home]$ if ls; then echo yes; fi
hnishi
yes
```

「test」でコマンドが成功（True）したか失敗（False）したか判定

```shell-session
[hnishi@hn oneliner]$ if [ -f file.txt ];then echo true;else echo false;fi
true
[hnishi@hn oneliner]$ if [ -f .txt ];then echo true;else echo false;fi
false
```

条件中の「-f」はファイルがあるときにTrue、ないときにFalse

##コマンドの返り値
なお、コマンドの返り値（終了コード）を知りたいときは「**$?**」を見る

```shell-session
[hnishi@hn oneliner]$ ls
file.txt
[hnishi@hn oneliner]$ echo $?
0
[hnishi@hn oneliner]$ lslsls
lslsls: command not found
[hnishi@hn oneliner]$ echo $?
127
```

0が成功したときに返される値、それ以外は失敗

#for文　ループ

```shell-session
[hnishi@hn home]$ for i in {1..3};do echo $i ;done
1
2
3
```
Swift オープンソースプロジェクトの Pull Request から Swift 3.0 の命名規約を見てみる

今年秋？公開予定で現在まだ絶賛開発中の Swift 3.0 ですが、GitHub のレポジトリには昨日 [Swift 3.0 API Guidelines に沿ってソースコードを修正したコミットの Pull Request](https://github.com/apple/swift/pull/1607/files) が承認されました。これで 3.0 が正式に公開されたら間違い無く大半のプロジェクトはまた地獄のようなソースコード改修が余儀無く必要になってくるが、せっかくなのでその前にこの修正コミットの内容を見てみて、これからのソースコードはどういう風に修正されることになりそうなのか、心の準備も進めてみたいと思います。

まあ Standard Library 全体の修正だから修正箇所があまりにも多すぎるので全部見るのに時間がかかるからとりあえずスクロールして気になったところをピックアップしてみたいと思います。

まず第一の感想として、命名規約の冗長性がある程度改善されるようですね。まあこれ一番最初の修正ですからね。`string.uppercaseString` が、`string.uppercased` になります。同様に `string.lowercaseString` も `string.lowercased` になります。`String` 型のインスタンスプロパティなのでプロパティ名に `string` をわざわざ入れる必要もないんじゃね？という感じで今まで冗長しすぎた名前をある程度簡略化した感じになります。

次に思ったのは、メソッド名の構成の脱 Obj-C 化をを感じましたね。何が言いたいかというと、今までの Swift の関数名は、ずっと Obj-C の時の名残で、1 つ目の引数の説明はラベルではなく関数名に入れたまま作られています。例えば今回は `dictionary.removeValueForKey(:)` のメソッドが、`dictionary.removeValue(forKey:)` に変わりました。つまり 1 個目の引数の説明である `forKey` が、今まで関数名の中に入って `removeValueForKey` 全体が関数名でしたが、3.0 では関数名は動きを表す `removeValue` のみとなり、1 個目の引数の説明である `forKey` がラベルになったのです。これが引数一つしかない時だと割と「だから？」って感じがしないでもないかもしれませんが、でも引数が増えていくと、関数名とラベルの混在が初心者にとって混乱を引き起こしかねないという問題があるのではないかと思います。例えば SpriteKit ですと、`SKAction` というクラスに「移動する」というクラスメソッドがあります。これは Obj-C で書くと `[SKAction moveToX: y: duration:];` という結構見やすい文法になりますが、Swift ではメッセージ式構文をやめて C と同じような構文にしたので、`SKAction.moveToX(:, y:, duration:)` という構文になってしまいました。これで `moveToX` までが関数名で、`y` と `duration` だけがラベルとなってしまいます。なんか気持ち悪いですよね、`x` と `y` は同列のはずなのになんで `x` は関数名に、 `y` はラベルに入るんですか？まあ慣れの問題でしょうけど Obj-C 触ったことのない Swift 初心者にとってはあまりフレンドリーではないのは事実です。今回の Pull Request はあくまでオープンソースの Swift に対してのもので SpriteKit に対しての修正がまだ見当たりませんが、この流れで行くとおそらく Swift 3.0 では `SKAction.move(toX:, y:, duration:)` に変わるんじゃないかと思われます。これでスッキリしますね、メソッド名はメソッド動作の `move` のみ、引数の扱い方 `to` も、引数 `x` も `y` も `duration` も全てラベルとなり初心者にとってわかり易いのではないかと思います。

そしてもう一つ大きな変化は、`enum` の `case` が UCC（UpperCamelCase。Pascal 記法とも呼ばれる？）もしくは大文字から LCC（lowerCamelCase） に変わるっぽいですね。例えば `public enum ProcessTerminationStatus` という `enum` がありますが、中身は今まで `case Exit(Int)` と `case Signal(Int)` でしたが、`case exit(Int)` と `case signal(Int)` に修正されました。Pull Request の修正内容見ると全部が変わったわけではありませんが、それは単に修正し忘れなのかそれとも仕様として残しているのか何なのかは正式リリース出るまでわかりませんが、おそらく多分 LCC に変わるでしょう、と個人的に思います。なぜなら Swift の命名規約としては、包括的な定義？、例えば `class` とか `struct` とか `enum` とかひいてはライブラリ名の `Foundation` とかは全て UCC 命名で、逆にそれらの具体的な部品？例えば `class` や `struct` のインスタンスとかメソッドとかプロパティとか変数とか（まあぶっちゃけ変数だって、例えば `Int` 型変数も Swift では `Int` という `struct` のインスタンスだけどね）は LCC 命名になります。このルールで見ると、確かに本来なら変数と同じような動きをする `enum` の `case` だけが UCC 命名になっていたのがおかしかったとも言えます。（ちなみに余談ですが現在筆者を一番悩ましてるのが C# の命名規則です。変数以外、プロパティ含めてほとんど何でもかんでも UCC 命名だから見てるとそれが何なのかすぐにはわかりづらい orz）

あとはまあ細かい英文法に則った修正ですかね、自分をソートした配列を返す `array.sort()` メソッドが `array.sorted()` に変わったとか（`sort()` だと自分自身に対して sort する `mutating func sort() -> Void` のような動きを感じさせるからな）`split.maxSplit` が `split.maxSplits` に変わったとか（まあ普通は複数形使うよなここ）みたいな細かい英文法的な修正です。細かいところですが、「ソースコード自体がドキュメント」（正確な名前忘れたけどどこかで見た気がします…）精神を Objective-C から引き継いだ Swift だからこそ、大体なものはドキュメントなんて用意しなくてもソースコード見れば何をどうしたいのかがすぐわかるように自然言語に近い文法でコーディングすることは非常に大切だと思います。そしてそれを実現するための第一歩がまさにこの変数名やメソッド名の吟味にありますね。
AWS EC2インスタンス起動時のElasticIP自動付与

# 環境
 * AWS ClassicEC2
 * python 2.6
<br/>
※ 2.7もしくは3系を推奨

# モジュールインストール
インストール pip

- python 2.6系であれば
http://tdoc.info/blog/2014/01/15/pip.html
<pre>
yum install python-pip
</pre>

- python 2.7系であれば
<pre>
curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
sudo python get-pip.py
</pre>

インストール awscli
http://docs.aws.amazon.com/ja_jp/kinesis/latest/dev/kinesis-tutorial-cli-installation.html
<pre>
pip install awscli
</pre>

※ awsコマンドのパスが通ってなかった場合は通す
<pre>
vi ~/.bash_profile

下記を追記
export PATH=$PATH:/usr/local/bin

設定を読み込み
source .bash_profile
</pre>


# 環境設定

## awsコマンド実行前のIAM値設定
<pre>
aws configure
</pre>

## スクリプト作成とインスタンス起動時設定

/etc/init.d に登録する方針
<pre>
vi /etc/init.d/set-eip
</pre>

<pre>
#!/bin/sh
# chkconfig: 2345 99 10
# description: SET EIP

INSTANCE_ID=`/usr/bin/curl -s http://169.254.169.254/latest/meta-data/instance-id`
EIP=54.248.xxx.xxx

case "$1" in
 start)
       echo "start!" > /var/log/set-eip.log
       /usr/local/bin/aws ec2 associate-address --instance-id ${INSTANCE_ID} --public-ip ${EIP}
       ;;
 stop)
       echo "stop!" > /var/log/set-eip.log
       ;;
  *) break ;;
esac
</pre>

登録
<pre>
chkconfig --add /etc/init.d/set-eip
chkconfig set-eip on
</pre>

# 動作確認

インスタンス再起動。
再起動後、設定が反映されていることを確認。

## 参照
インスタンス再起動後のEIP自動割当て
http://dev.classmethod.jp/cloud/ec2shell/
https://dogmap.jp/2012/12/20/aws-advent-calendar-2012-day-20/
ubuntu / centosにrbenv & nodebrewを入れるDockerfile

dockerの勉強でubuntu/centosそれぞれにrbenv/nodebrewを入れてみましたのでメモ。
最初は、docker使ってるんだから本来バージョン管理なんて必要ないからrubyやnodeを直接入れようとも思っていました。
が、バージョンによってインストール方法が違ったりするので、一手間ありますがこちらの方が一定の手順で入れれそう。

# ubuntu
## ubuntu / rbenv

```dockerfile
FROM ubuntu

MAINTAINER kenshiroh

# update
RUN apt-get update

# util
RUN apt-get install -y curl wget git

# rbenv depend and install
RUN apt-get install -y autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
RUN git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv
RUN echo 'export RBENV_ROOT="/usr/local/rbenv"' >> $HOME/.bashrc
RUN echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> $HOME/.bashrc
RUN echo 'eval "$(rbenv init -)"' >> $HOME/.bashrc
RUN git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build

# ruby
ENV RUBY_VERSION 2.2.3
RUN . $HOME/.bashrc && CONFIGURE_OPTS="--disable-install-rdoc" rbenv install -v $RUBY_VERSION
RUN . $HOME/.bashrc && rbenv rehash
RUN . $HOME/.bashrc && rbenv global $RUBY_VERSION
RUN . $HOME/.bashrc && gem install bundler
```

## ubuntu / nodebrew

```dockerfile
FROM ubuntu

MAINTAINER kenshiroh 

# update
RUN apt-get update

# nodebrew + nodejs
ENV NODE_VERSION 5.7.1
RUN wget git.io/nodebrew
RUN perl nodebrew setup
ENV PATH $HOME/.nodebrew/current/bin:$PATH
RUN echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> $HOME/.bashrc
RUN . $HOME/.bashrc && nodebrew install-binary $NODE_VERSION
RUN . $HOME/.bashrc && nodebrew use $NODE_VERSION
```

# centos
officialのcentosイメージは2016/3/11時点で入っているパッケージが非常に少ないようで、makeやwhichも入れる必要がありました。

## centos /rbenv

```dockerfile
FROM centos:7

# epel
RUN yum -y install epel-release

# utilities
RUN yum -y install wget curl make which

# git
RUN yum -y install git

# rbenv + ruby
ENV RUBY_VERSION 2.2.3
RUN yum -y install gcc-c++ glibc-headers openssl-devel \\
readline libyaml-devel readline-devel zlib zlib-devel \\
libffi-devel libxml2 libxslt libxml2-devel libxslt-devel \\
sqlite-devel bzip2
RUN git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv
RUN echo 'export RBENV_ROOT="/usr/local/rbenv"' >> $HOME/.bashrc
RUN echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> $HOME/.bashrc
RUN echo 'eval "$(rbenv init -)"' >> $HOME/.bashrc
RUN git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build
RUN source $HOME/.bashrc && CONFIGURE_OPTS="--disable-install-rdoc" rbenv install -v $RUBY_VERSION
RUN source $HOME/.bashrc && rbenv rehash
RUN source $HOME/.bashrc && rbenv global $RUBY_VERSION
RUN source $HOME/.bashrc && gem install bundler
```

## centos / nodebrew

```dockerfile
FROM centos:7

# epel
RUN yum -y install epel-release

# utilities
RUN yum -y install wget which

# git
RUN yum -y install git

# nodebrew + nodejs
ENV NODE_VERSION 5.7.1
RUN wget git.io/nodebrew
RUN perl nodebrew setup
ENV PATH $HOME/.nodebrew/current/bin:$PATH
RUN echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> $HOME/.bashrc
RUN source $HOME/.bashrc && nodebrew install-binary $NODE_VERSION
RUN source $HOME/.bashrc && nodebrew use $NODE_VERSION
```
f.selectにclassを設定するやり方、セレクトボックス　※自分用メモ

参考サイト
http://umatomakun.hatenablog.com/entry/2014/06/24/233938<br>

<%= form_for @user do |f| %>
< div class="form-group">
    <%= f.label :質問のカテゴリー %>< br>
    <%= f.select :category, { クライアントサイド: "クライアントサイド", サーバーサイド: "サーバーサイド" }, { prompt: "選択してください" }, { class:'form-control' } %>
  < /div>
<% end %>
data属性を使ったjQueryスムーズスクロール


jQueryでスムーズスクロールを実装した際、タブ切り替えやらアコーディオンやらとバッティングすることがあって困ったことが何度かあリました。
Google先生に聞くと「特定文字列を除外」とか「classを追加」で対応していることが多かったのですが、無関係な部分に余計な記述をしたくない。

だったらdata属性使えばいいじゃない。


## デモ

http://yuking11.github.io/jq-smooth-scroll/


## 実装

一般的なアンカーリンクにdata-scroll属性を追加（\<a href="#hoge" data-scroll>hoge\</a>）することでスムーズスクロール付きアンカーリンクになります。

ページトップへスクロールさせる場合は href="#page_top" に設定します。
bodyなどに#page_topを入れる必要はありません。


### javascript

``` javascript
// スムーズスクロール
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
$(function(){
  $('[data-scroll]').on('click', function() {
    var speed   = 500,
        $self   = $(this),
        $href   = $self.attr('href'),
        $margin = $self.attr('data-scroll') ? parseInt($self.attr('data-scroll')) : 0,
        $target = $($href);
    var pos = ( $target[0] && $target !== '#page_top' ) ? $target.offset().top - $margin : 0;
    $('html,body').animate({scrollTop: pos}, speed, 'swing');
    $self.blur();
    return false;
  });// end function.onClick
});// end function
```


### html

``` html
<!-- #mainにスムーズスクロール -->
<a href="#main" data-scroll>メインコンテンツ</a>

<!-- ここにスクロール -->
<div id="main">メインコンテンツ</div>


<!-- ページトップにスムーズスクロール -->
<a href="#page_top" data-scroll>ページトップへ</a>


<!-- 通常アンカー、スムーズスクロールなし -->
<a href="#anchor">アンカーリンク</a>
```


## オプション

data-scrollに数値を入れることで、スクロール位置の調整ができます。


``` html
<!-- #subから15px手前にスムーズスクロール -->
<a href="#sub" data-scroll="15">サブコンテンツ</a>

<!-- ここから15px手前にスクロール -->
<div id="sub">サブコンテンツ</div>
```


## まとめ

まとめもクソもないけど、位置調整できるのは自分的になかなかナイスでした。
あとQiita初投稿です。
これからぼちぼちやっていけたらいいなぁと思います。
Windows Update 進まない遅い問題の覚書

Windowsをクリーンインストールした後、Windows Updateが進まない遅い問題の対処法が色々あるので、ここに覚書として書いて行こう。

##Windows Update Agent 7.6 関連
[KB3050265](https://support.microsoft.com/ja-jp/kb/3112343)
[KB3112343](https://support.microsoft.com/ja-jp/kb/3112343)

- 2016-03-11 Letsnote CF-W7(Cire2Duo U7500/3GB/SATA120GB)にWin7Pro32bitをクリーンインストールした後のWindowsUpdateが「更新プログラムの確認」が全然終わらない問題に効果あった。
- 2016-03-11 Fujitsu Celsius N450(Core2-6700/4GB/SATA???GB)にWin7Pro32bitをクリーンインストールした後のWindowsUpdateがerror 8007000e でエラーになる現象に効果あった。

##参考ページ
http://freesoft.tvbok.com/tips/windows_update/not_proceed_update.html
CircleCIでSeleniumを実行する方法[Python編]


# 環境
以下サービスのアカウント作成は済んでいるものとします。

- GitHub
- CircleCI

# テスト対象のリポジトリを作成
Github上でソースコードを管理するリポジトリを作成します。
今回は全て無料で実施するため、公開状態のリポジトリを作成します。
非公開リポジトリの作成にはお金がかかります。また、非公開リポジトリに対するCircleCIの実行にもお金がかかります。

今回はPythonのSeleniumテスト用にhttps://github.com/sssinsi/selenium-ci-python を作りました。

# リポジトリをローカルにクローン
以下のコマンドを実行します。

```bash
git clone git@github.com:sssinsi/selenium-ci-python.git
```

# CircleCIの設定
CircleCIにログイン後、[ダッシュボード](https://circleci.com/dashboard)から[プロジェクト追加](https://circleci.com/add-projects)に移動して、テストしたいアカウントをクリックして、対象のリポジトリの[Build project]をクリックします。
※まだリポジトリに`circle.yml`ファイルが存在しないのでエラーになるはず


# CircleCIの設定ファイルを作成
リポジトリをクローンしてきたら、プロジェクトトップ（今回は`selenium-ci-python`ディレクトリ直下）に`circle.yml`というCircleCI専用の設定ファイルを作成します。
今回は`Selenium`を実行するために`pip`でインストールを実施し、テストでは作成したテストファイルを実行しています。

```yaml:circle.yml
machine:
  timezone: Asia/Tokyo

dependencies:
  pre:
    - sudo pip install --upgrade pip
    - sudo pip install selenium

test:
  pre:
    - echo "-----start test-----"
  override:
    - python scripts/webdriver_sample.py
  post:
    - echo "-----end test-----"
```

# Seleniumのテストファイルを作成
今回はGoogleの検索ページを表示して、フォームとタイトルを検証するテストを作成しました。
[サンプル](https://github.com/sssinsi/selenium-ci-python/blob/master/scripts/webdriver_sample.py)

# CircleCIでテストを実行
適当なブランチで`git push`した後、CircleCIが自動的に実行されます。
テストの実行状況はCircleCI以外にも、GitHub上のPull Requestの下方でも確認できます。

# CircleCIのバッジを表示する
CircleCIのテスト結果をGitHubのリポジトリを表示することで、コードが正常に動作するかが素早く確認できます。
基本的にはReadme.mdファイルへ、テスト結果のステータスバッジを記述することでこれは可能になります。

- ステータスバッジの設定方法 [CircleCI](https://circleci.com/docs/status-badges)

CircleCIのテスト対象リポジトリから、[Project Settings]-[API Premissions]と移動してstatus用のtokenを新規作成してください。

作成したtokenを使って、以下のようなイメージ表示をReadme.mdへ追記してください。

```markdown
![](https://circleci.com/gh/sssinsi/selenium-ci-python.svg?style=shield&circle-token=ここにトークンを設定)
```
こんな風に表示されるはずです。
<img src="https://circleci.com/gh/sssinsi/selenium-ci-python.svg?style=shield&circle-token=5139b037b9e54d1b675ebd343880978893153be6">

# 参考

- [GitHub](https://github.com/)
- [CircleCI](http://circleci.com)
- [circle.ymlの書き方 - 冷やしブログはじめました](http://pokrkami.hatenablog.com/entry/2015/12/08/000000)