OmniAICreator/Qiita-1.07M huggingface dataset:
【メモ】Dropwizardのmigrationでmigration.xmlファイルを指定する

# 概要
migrationファイル(changelogファイル)を指定して使いたい
(デフォルトだとsrc/main/resources/migrations.xmlを使う)

# コード

```java:jp.hoge.HogeApiConfiguration.java

package jp.hoge;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotEmpty;

import com.fasterxml.jackson.annotation.JsonProperty;

import io.dropwizard.Configuration;
import io.dropwizard.db.DataSourceFactory;

public class HogeConfiguration extends Configuration {
	
  @Valid
  @NotNull
  @JsonProperty
  private DataSourceFactory databaseHoge = new DataSourceFactory();
	
  public DataSourceFactory getHogeDataSourceFactory() {
    return databaseHoge;
  }	
}

```

```java
package jp.hoge;

import org.skife.jdbi.v2.DBI;

import io.dropwizard.Application;
import io.dropwizard.db.DataSourceFactory;
import io.dropwizard.jdbi.DBIFactory;
import io.dropwizard.migrations.MigrationsBundle;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;

public class HogeApplication extends Application<HogeConfiguration> {
	
  public static void main(String[] args) throws Exception {
    new HogeApplication().run(args);
  }
	
  @Override
  public String getName() {
    return "hoge";
  }
	
  @Override
  public void initialize(Bootstrap<HogeConfiguration> bootstrap) {
    bootstrap.addBundle(new MigrationsBundle<HogeConfiguration>() {
      @Override
      public DataSourceFactory getDataSourceFactory(HogeConfiguration configuration) {
        return configuration.getHogeDataSourceFactory();
      }
    });
  }

  @Override
  public void run(HogeConfiguration configuration,Environment environment) throws Exception {

  }
}

```

```yaml:/home/hoge/hoge_config.yml
databaseHoge:
  driverClass: com.mysql.jdbc.Driver
  user: hoge_user
  password: hogepassword
  url: jdbc:mysql://127.0.0.1:3306/hoge
  properties:
    charSet: UTF-8
```

```xml:/home/hoge/hoge_migration.yml
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd">

    <changeSet id="1" author="y.hogetaro">
        <createTable tableName="messages">
            <column name="id" type="int(11)" autoIncrement="true">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="varchar(64)">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>
```


# 実行コマンド

```bash
# dry-run
java -jar hoge-1.0.jar db migrate /home/hoge/hoge_config.yml --migrations /home/hoge/hoge_migration.yml --dry-run
```

# 注意点

## includeの使い方
--migrationsで指定しないでデフォルトのままsrc/main/resources/migrations.xmlを使っていれば相対パスでもincludeを認識してくれたけど、--migrationsでchangelogファイルを指定すると、includeのファイルもフルパスで指定してあげないとダメっぽい。
WordPressで指定したカスタムフィールドが存在しない場合の投稿一覧を取得する方法


## 逆の記事はあるけど・・・

指定したカスタムフィールドが「存在する」場合の一覧を取得する方法についてはいくつかの記事がある。

- [get_postsで、複数のカスタムフィールドをキーにして検索・取得する方法 | sand a lot Web & Music Create [札幌]](http://www.sandalot.com/get_posts%e3%81%a7%e3%80%81%e8%a4%87%e6%95%b0%e3%81%ae%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%82%92%e3%82%ad%e3%83%bc%e3%81%ab%e3%81%97%e3%81%a6%e6%a4%9c/)

```php
$posts = get_posts(array(
  'post_type' => 'post',
  'meta_key' => 'key_name',
  'meta_value' => 'null',
  'meta_compare' => '!='
));
```

また、指定したカスタムフィールドの値が空の場合の記事もある。

- [[WordPress]query_postsでカスタムフィールドの値が空のポストのみ取得する | モノグサにお灸 | 明日なまけるために、今日はがんばってみる。](http://monoxa.net/2013/09/query_posts%e3%81%a7%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%81%ae%e5%80%a4%e3%81%8c%e7%a9%ba%e3%81%ae%e3%83%9d%e3%82%b9%e3%83%88%e3%81%ae%e3%81%bf%e5%8f%96/)

```php
$posts = query_posts(array(
  'post_type' => 'post',
  'meta_key' => 'key_name',
  'meta_value' => ' ',
  'meta_compare' => '='
));
```

でも指定したカスタムフィールドが「存在しない」場合について書かれてる記事が見つからない。。

## 答えは海外のサイトにあり

日本語での記事はないかーと諦めて「wordpress get_posts meta_key empty」でググったら出てきました。

- [Querying posts with a false or NULL meta value — The Theme Foundry](https://thethemefoundry.com/blog/query-posts-wordpress-false-null-meta-value/)

```php
$posts = get_posts(array(
  'post_type' => 'post',
  'meta_key' => 'key_name',
  'meta_compare' => 'NOT EXISTS'
));
```

上記のコードで無事に「指定したカスタムフィールドが存在しない記事の一覧」を取得することに成功しました。

めでたしめでたし。

## その他

`get_posts` と `query_posts` について

- [get_postsとquery_postsを使い分け:WordPress私的マニュアル](http://elearn.jp/wpman/?p=654)

`get_posts` や `query_posts` で使えるパラメーターの一覧

- [関数リファレンス/WP Query - WordPress Codex 日本語版](http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query)
【STEP5】デバッグ(eclipse) : Scalaでコードを書く

デバッグ(eclipse) : Scalaでコードを書く
=======

この記事はScalaでコードを書く時の、セットアップや動かし方、テストなどをまとめた研修用資料です。

## デバッグ

eclipseからデバッグします。

### eclipseのビルドバスの設定

- デフォルトでeclipseでデバッグしようとすると、下記に記載あるようにエラーとなってしまいます。

[ScalaTest in Eclipse: Running it gives NullPointer Exception](http://stackoverflow.com/questions/19432509/scalatest-in-eclipse-running-it-gives-nullpointer-exception)

- 下記の手順でscala-libraryの設定を変更します。

1. 対象プロジェクトを右クリックし、「Properties」を選択します。
1. 「Java Build Path」を選択し、「Libraries」から**scala-library-2.x.x.jar**を選択し、「Remove」をクリックします。
1. 「Add Library...」をクリックします。
1. 「Scala Library」を選択し、「Next」をクリックします。
1. 「Latest 2.11 bundle (dynamic)」を選択し、「Finish」をクリックします。

設定はこれで完了です。実際にデバッグしてみましょう。


- メイン実行コードはこんな感じです。

```scala:Main.scala
object Main {
  def main(args: Array[String]) {
    var a = 1
    println(a)
  }
}
```

- 「var a = 1」の行にブレイクポイントを設定します。
- 対象のMainクラスのファイルを右クリックし、「Debug As」から「Scala Application」をクリックします。
- 「Use configuration specific settings」をチェックし、「Scala Application (new debugger) Launcher」を選択し、「OK」をクリックします。
- 「var a = 1」の行にでブレイクポイントが止まれば成功です。

次にテストコードでも試してみましょう。

- テストコードはこんな感じです。

```scala:HelloSpec.scala
import org.scalatest._
import org.scalatest.matchers.ShouldMatchers

class HelloSpec extends FlatSpec with ShouldMatchers {
  "Hello" should "have tests" in {
    var result = 1 + 1
    println(result)
    result should be === 2
  }
}
```

- 「var result = 1 + 1」の行にブレイクポイントを設定します。
- 対象のテストクラスのファイルを右クリックし、「Debug As」から「Scala Test - File」をクリックします。
- 「var result = 1 + 1」の行にでブレイクポイントが止まれば成功です。
Password生成する1行JavaScript

おい！世の中の登録フォームのパスワード項目この野郎！やれ何文字以内だ大文字小文字数字記号は1つ以上入れなきゃいけないだややこしいんじゃ。

長さと「文字セットの配列」を渡すと、各文字セットの中から最低1文字ずつ含む文字列を生成するブックマークレットを作った。

```js
javascript:open().document.body.innerText=(function(){var c=function(xs){return xs[Math.floor(Math.random()*xs.length)];};var f=function(n,ws){var i,l=ws.length,w,r=[];for(i=0;i<l;i++){r.push(c(ws[i]));}w=String.prototype.concat.apply("",ws);for(;i<n;i++){r.push(c(w));}for(;i>=0;i--){var j = Math.floor(Math.random()*n),t = r[i];r[i]=r[j];r[j]=t;}return r.join("");};return f(16,["abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ","0123456789",".+/@_-"]);})()
```

- アルファベットのみ16文字
    - `f(16,["abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"])`
- 記号は"-_"のみ、数字アルファベット記号必須
    - `f(16,["abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ","0123456789","-_"])`


最後の部分を毎回書き換えないと行けないのがあまり美しくないので後でリファクタリングしたい。



なお余談ですがこれ作ってる間に登録フォームのセッション切れました。
windowsで管理者として実行のショートカットコマンドで起動する方法

# 概要
**管理者として実行**が右クリックからだと面倒なので調べました。

とりあえず、コマンドプロンプトを起動させる方法を書きました。

# 方法1
1. `win* > cmd > Ctrl-Shift-Enter`
1. するとユーザーアカウント制御(UAC)が表示されます。


*win-rでは、できませんでした。

# 方法2
1. `win-r > cmd > Enter`
   で一度コマンドプロンプトを表示させます。
1. タスクバーのコマンドプロンプトを`Ctrl-Shift`を押しながら、クリック
1. するとユーザーアカウント制御(UAC)が表示されます。

# 参考
http://grabacr.net/archives/313
http://troushoo.blog.fc2.com/blog-entry-84.html
windows7で、シャットダウン時間のログを調べる方法

# 概要
前日何時に帰ったか、忘れたのでパソコンのシャットダウンを元に調べます。

# 方法
1. `win-R` > `eventvwr.msc /s `を実行します。
2. イベントビューアーが起動します。
3. `windowsログ > システム`からわかります。

イベントIDが`13`にシャットダウンです。

でも、シャットダウン時間は前日の最後の時間なので、適当に見てもわかります。

# 参考
http://piyopiyocs.blog115.fc2.com/blog-entry-632.html
http://pcmemorin.blog.fc2.com/blog-entry-97.html

# 備考
交通マネーの明細、見たほうが早いことに気が付きました。
【Swift】SDWebimageのcompletionバグ対応

## ■ 概要
Objective-cのimageCacheライブラリである [SDWebImage](https://github.com/rs/SDWebImage) をSwiftで利用した際のバグ対応をメモ。

### ◆環境
Xcode: v6.1.1
Swift: v1.1
CocoaPods: 0.36.0.beta.2
SDWebImage: 3.7.1

Bridge-headerからライブラリを利用しています。

### ◆バグ内容
下記メソッドを利用した際のcompletionブロックが実行されない。
というか、この定義をしているスコープに差し掛かった時点で、エラーがでます。
※エラー内容はまだSwift君が未熟なので詳細に追いづらく、見ていません！
 下記でもろもろ討論されている様です。
[https://github.com/rs/SDWebImage/issues/833](https://github.com/rs/SDWebImage/issues/833)

## ■ 対応内容

下記コードでcompletionからimageを取得使用とした結果エラーが発生。

```lang:Swift

var uiimageview = UIImageView()
uiimageview!.sd_setImageWithURL(url, completed: { (image: UIImage!, error: NSError!, cacheType: SDImageCacheType!, imageURL: NSURL!) in
　if error != nil {
　　　Log("http get failure: \(error)")
　　　return
　}
　handler(image)
})

※handlerは引数がUIImageの何かしらのメソッド
```

代わりに下記でimageを取得すればcompletedブロックからimageを取得可能だったので、変更。

```lang:Swift

SDWebImageDownloader.sharedDownloader().downloadImageWithURL(NSURL(string: url), options: nil, progress: nil, completed: {[weak self] (image, data, error, finished) in
　if let wSelf = self {
　　　handler(image)
　}
})

※handlerは引数がUIImageの何かしらのメソッド
```

## ■ 所感
ググると結構上記のバグが目立っていたので、そのうちバグフィックスする事を期待。。
くわえて、上記のダウンロード手法の場合、そもそもキャッシュが効いているのか疑問ですww
その辺調査中です、何か分かったら追記させていただきます。
[WIP] Feb 2015時点でのh2o の実装を理解する

## フィルタ・ハンドラの初期化

* まず「このモジュールが存在するよ」という宣言をmainに追加する。例：`h2o_proxy_register_configurator(&conf.globalconf)` [main.c#L1181](https://github.com/h2o/h2o/blob/c7d20c0bffa9d3207a61be75b3549f3dae1caa68/src/main.c#L1181)
* configurator は設定ファイルからプログラム側に何かを伝えるために使う
* フックはhandlerかfilterかによって微妙に違う。
* `on_context_init`フックは各モジュールごと、スレッドごとによばれる。スレッドコンテキストの初期化に使われる [main.c#L1070](https://github.com/h2o/h2o/blob/c7d20c0bffa9d3207a61be75b3549f3dae1caa68/src/main.c#L1070)
* super、なんかわかるけどわかってない。

## お得情報

* `h2o_iovec_t`がすごく便利。Cの世界にいることを一瞬忘れる。

## あとでわかったら整理する：

* `h2o_context_get_filter_context`をfilterの`on_setup_ostream`内で`req->conn->ctx`に対して実行するとSEGVする。登録の仕方が悪いのか、取り方がわるいのか？
* http1clientのコールバックが呼ばれるシーケンスが読んでるだけだとわかりにくい。SEGVが取れたらようやく呼び出しながら確認できるのであとでまとめる
こういう共通ライブラリは要らない

#はじめに

プロジェクトでアプリを開発する場合、よほど小規模でない限り「共通ライブラリ」とか「フレームワーク」とか呼ばれるものを使います。ここで言うライブラリとは、汎用的なものをそのまま使うのではなく、そのアプリケーションに合わせて作られたものです。

例えば、.NET のプロジェクトで画面は Form クラスから派生させますが、とあるプロジェクトではカスタマイズされた 「CustForm から派生させて作りなさい」みたいな感じです。

#問題になるケース

こういう共通ライブラリのできが悪いと、しばしば問題が大きくなります。例えば、

* 共通ライブラリにバグが見つかり、デグレード確認のため再テストが必要になった。
* まともなドキュメントがないため、アプリの開発に時間がかかり支障が出ている。
* サンプルがない(少ない)ため、使い方がわからない。
* 設計思想が統一されていないため、モジュールにより使い方が変わる。
* 細々とした処理までアプリ側で書く必要がある。
* 予定ではアプリ開発までに完成するはずであったが、まだデバッグをしている。
* ライブラリとアプリの開発元が異なるため、得意先経由でしか問い合わせができない。
* ライブラリ(フレームワーク)の動作要件が多すぎて、テスト環境が作れない(作りづらい)。
* 起動に時間がかかりテストに支障が出ている。
* 動作不良の原因がアプリ側なのか、フレームワーク側なのか判別が難しい。


#結局・・・

上の例のような共通ライブラリやフレームワークによりプロジェクトの足が引っ張られることってよくあります。結局、どうすればいいかなんてここまでくればわかるでしょうが、あえて書くなら

* リリースまでに十分なテストを行って、高い信頼性を確保する。
* ドキュメントやサンプルはわかりやすく、しっかり作る。
* シンプルでコンパクトであることに心がける。
* アプリ側のテストがしやすいように。
* 不具合が発生したときの切り分けをどうするのか考える。

[原文 .. ](http://bonk.red/show.php?id=19)
たまに著作権を気にする人がいるのでひと言。「この投稿と著作者は同じです。」
Folder Reference または bundle resource のなかにある画像をimageNamedでとってくる方法


答え:
ふつうにフルパスを書けば良い

```objc
[UIImage imageNamed:@"path/to/file"];
[UIImage imageNamed:@"bundleName.bundle/Contents/Resources/file"];
```

もちろん 

```objc
NSBundle *bundle = [[NSBundle alloc] initWithPath:[[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"]];
NSString * path = [bundle pathForResource:@"file" ofType:@"type"];
[[UIImage alloc] initWithContentsOfFile:path];
```
でもok
vim-gistaを使い始めた


はっきり言って、使いやすすぎた。

https://github.com/lambdalisue/vim-gista

##インストール

```vim:~/.vimrc
NeoBundle 'lambdalisue/vim-gista', {
    \ 'depends': [
    \    'Shougo/unite.vim',
    \    'tyru/open-browser.vim',
    \]}
let g:gista#github_user = 'your GitHub user name'
```

##設定

```vim:
" 初期設定
:Gista --login
```

##使い方

```vim:
" 現在開いているファイルをポスト
:Gista

" 今までポストしたファイルを閲覧、編集
:Gista -l
```
[Unity]タッチしたときにInput.GetMouseDown(0)がtrueにならないようにする

Unityではタッチしたときにマウスのイベントが発生してしまう。
これを回避するためには`Input.simulateMouseWithTouches`に`false`を代入すればよい。

```csharp
Input.simulateMouseWithTouches = false;
```
JXAを一定時間ごとに実行させる (アプレット)


cronを使うのもいいけど、アプレットを作っても出来る。

```js:3秒ごとに通知センターに時刻を通知するやつ
DELAY_SECONDS = 3;

app = Application.currentApplication();
app.includeStandardAdditions = true;

function idle(){
  app.displayNotification(new Date().toString());
  return DELAY_SECONDS;
}
```

Script Editorに上記のソースを入力する。
保存時の設定を以下のようにする。

- ファイルフォーマットを「アプリケーション」にする
- 「ハンドラの実行後に終了しない」にチェック

![スクリーンショット 2015-02-25 3.48.30.jpg](https://qiita-image-store.s3.amazonaws.com/0/18902/322d9776-ed3a-aa99-e17e-606c2d6b29d7.jpeg "スクリーンショット 2015-02-25 3.48.30.jpg")

実行する。

![スクリーンショット 2015-02-25 3.52.13.jpg](https://qiita-image-store.s3.amazonaws.com/0/18902/ecf07c08-6c4f-e390-392e-d7fa64a80d1c.jpeg "スクリーンショット 2015-02-25 3.52.13.jpg")

3秒ごとに通知される。うっとおしい。
Dockのアイコンから右クリックで終了。

# 説明

`idle`関数は`return`で返した秒数待ってから再度実行される。
ただしアプリケーションにして、実行後に終了しない設定にしないと何も実行されない。

↓AppleScriptの説明だけどこちらが分かりやすい。

- [鳶嶋工房 / AppleScript / 入門 / ハンドラで受け止める](http://tonbi.jp/AppleScript/Introduction/09/) 

説明短いけど公式はこっち。

- [JavaScript for Automation Release Notes](https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/#//apple_ref/doc/uid/TP40014508-CH109-SW15)

# 分からなかったこと

## osacompileでテキストファイルの.jsから作成

```
$ osacompile -l JavaScript -s -o your_app.app ~/your_source.js
```

ってやれば`.js`から`.app`にコンパイルされる。
それでScript Editor使わなくても出来るはずだけど、起動はするけど通知されなかった。
動いてないっぽい。
作成後にScript Editorにドラっグ&ドロップして保存し直したら動いた。

`-o`で名称を指定する際に`.app`にすればアプレットになる。デフォルトは.`scpt`。
`-s`オプションはstay-openで、上のほうで「ハンドラの実行後に終了しない」にチェックしたのと同じ。はず。
第一回 オフラインリアルタイムどう書くの参考問題の解答をPythonで書いてみた

http://qiita.com/Nabetani/items/cbc3af152ee3f50a822f

```py
import re
import itertools

SPEC = {
  "suit": ["S","H","D","C"],
  "rank": ["2","3","4","5","6","7","8","9","10","J","Q","K","A"],
  "hand": (
    ("4K", lambda x: max(snds(uniq_cnt(snds(x)))) == 4),
    ("FH", lambda x: sorted(snds(uniq_cnt(snds(x)))) == sorted((2,3))),
    ("3K", lambda x: max(snds(uniq_cnt(snds(x)))) == 3),
    ("2P", lambda x: sorted(snds(uniq_cnt(snds(x)))) == sorted((2,2,1))),
    ("1P", lambda x: sorted(snds(uniq_cnt(snds(x)))) == sorted((2,1,1,1))),
    ("--", lambda x: True),
  )
}

def snds(l):
    return [v for (k,v) in l]

def uniq_cnt(l):
    return [(x[0],len(list(x[1]))) for x in itertools.groupby(sorted(l))]

def parser(suit,rank,**kwargs):
    return re.compile("([{suits}]+)([{ranks}]+)".format(suits=''.join(suit),ranks=''.join(rank)))

def main(arg):
    ls = parser(**arg['spec']).findall(arg['input'])
    print list( (k for (k,f) in arg['spec']['hand'] if f(ls)) )[0]

if __name__ == "__main__":
    import sys
    arg={
      "spec": SPEC,
      "input": sys.argv[1],
    }
    main(arg)

```
KVMのゲストVMと外部ネットワークを、OpenvSwitchでVLANを使って接続するメモ

## 目的
[この記事](http://qiita.com/kure/items/8645c28cba67aae49519) の続き。
仮想ネットワーク周りの学習のため、KVM環境で、OpenvSwitchでVLAN経由でゲストVMを外部ネットワークと接続する（下図）環境を構築したので、その手順メモ。
スイッチはVLAN対応のが必要。自分は [NETGEARの安いスイッチ](http://www.amazon.co.jp/exec/obidos/ASIN/B00KEXR0GA/kuredev-22/ref=nosim/) を最近手に入れたので、それを使ってみた。

## 最終イメージ

![ScreenClip.png](https://qiita-image-store.s3.amazonaws.com/0/50690/eb89043f-43f6-5710-1709-2ef295748c42.png)

## 前提条件

[この記事](http://qiita.com/kure/items/8645c28cba67aae49519) の状態が出来ていること。

## 手順
### スイッチの設定

図のようにVLANを設定する。手順はスイッチ次第なので割愛。ちなみに使用したスイッチはこちら↓。

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00KEXR0GA/kuredev-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41jHGrS%2BbGL._SL160_.jpg" alt="NETGEAR Inc. GS105E ギガビット5ポート アンマネージプラス・スイッチ GS105E-200JPS" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00KEXR0GA/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">NETGEAR Inc. GS105E ギガビット5ポート アンマネージプラス・スイッチ GS105E-200JPS</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 15.02.24</div></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00KEXR0GA/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>


### OVSの設定

eth0側をトランクポートでVLAN5を設定、ブリッジ側をアクセスポートでVLAN5を設定する。

```
[root@localhost ~]# ovs-vsctl set port vnet1 tag=5
[root@localhost ~]# ovs-vsctl set port ovsbr0 tag=5
[root@localhost ~]# ovs-vsctl set port eth0 trunk=5
[root@localhost ~]# ovs-vsctl show
fba905c9-89dd-4ca5-8ba6-c873771c3fed
    Bridge "ovsbr0"
        Port "ovsbr0"
            tag: 5
            Interface "ovsbr0"
                type: internal
        Port "vnet1"
            tag: 5
            Interface "vnet1"
        Port "eth0"
            trunks: [5]
            Interface "eth0"
```

## 疎通の確認

PCからゲストVMにPingを打つときちんと返って来た。
試しにeth0でキャプチャを取ったのがこちら。
ちゃんとタグVLAN5で受信しているのが分かる。

![ScreenClip.png](https://qiita-image-store.s3.amazonaws.com/0/50690/ee033344-328e-167c-28e2-2bbd1fe66204.png)

## 参考
設定 OpenvSwitch « roan's Blog http://roan.logdown.com/posts/191801-set-openvswitch
Rubyの命名規約

主だったところをメモ代わりに。

# クラス、モジュール

クラス名、モジュール名は原則CamelCase。各単語の最初の文字は大文字、それ以外は小文字にする。`_`は使わない。

OK:

* `Groups`
* `ColorBar`
* `CoinServer`

NG

* `GROUPS`
* `COLORBar`
* `Coin_Server`

ただし、略字は大文字のままにする（場合もある）。

OK:

* `HTMLBuilder`
* `SMTPServer`

クラスやモジュールはネストできる。ネストした場合も命名規則は同様。

OK:

* `MenuWindow::Color`
* `HogeService::Item`


# メソッド

メソッド名は小文字で`_`区切り(いわゆるsnake_case)。

OK:

* `find_items`
* `all_children`

NG:

* `findItems`
* `find_Items`
* `FindItems`
* `Find`

いわゆるアクセサには`get`や`set`はつけない。値を読む時にはその単語名を、
値を書く時にはその単語名＋`=`にする。

OK:

* `name`
* `name=(other)` ## これは実際のコード中では `foo.name = other` という形で使われる
* `family_name`
* `family_name=(other)`

NG:

* `get_name`
* `set_name(other)`
* `getName`
* `setFamilyName(other)`

真偽値を返すメソッドには`?`をつける。`is`や`has`を頭につけたり、`p`を最後につけたりはしない。

OK:

* `user?`
* `permitted?`
* `clicked?`

NG:

* `is_user`
* `is_user?`
* `user_p`
* `is_clicked`

# 変数

命名ルール自体は基本的にメソッド名と同じ。ぱっと見ではメソッドと区別がつかない場合もある。

OK:

* `names`
* `cart_item`
* `order_id`
    * `order_id`を`oid`のように省略しすぎるのは非推奨。とはいえ例えばPostgreSQLのOIDは`oid`としても構わない。

NG:

* `cartItem`
* `order_Id`

例外的に短い名前が使われるものもあるが、あくまで例外で、どちらかと言うと長めの命名の方が多い。

OK:

* `i`, `j`
    *  ループカウンタやインデックス用。 `books.each_with_index{|item, i| ... }` などのように使う。
* `x`, `y`, `z`
    * 座標用。

# 定数

定数は全部大文字で`_`区切り。

OK:

* `FIGURE_X_SIZE`
* `MAX_WIDTH`

NG:

* `Figure_X_Size`
* `MaxWidth`


# 参考

* http://www.ruby.or.jp/ja/tech/development/ruby/050_coding_rule.html
* http://shugo.net/ruby-codeconv/codeconv.html
UniRxでマウスドラッグに閾値を設定する

UniRxを使用するとドラッグ処理などはすごく簡単に書くことができます。
しかし、ある一定以上マウスが動いていないと値を流さないような処理は簡単には書くことができません。
試行錯誤した結果、最終的に以下のような形に落ち着きました。

### 追記(2015/02/25)
少しうまくいっていない部分があったので変更しました。
毎回`dragStream`を作成するようにしました。

### 追記(2015/03/04)
`Scan`の部分を修正

```csharp
public override void Awake()
{
        var threshold = .5f;
        var mouseDownStream = this.UpdateAsObservable()
            .Where(_ => Input.GetMouseButtonDown(0));

        var mouseUpStream = this.UpdateAsObservable()
            .Where(_ => Input.GetMouseButtonUp(0));

        var mouseStream = this.UpdateAsObservable()
            .Where(_ => Input.GetMouseButton(0));

        Func<IObservable<Vector3>> createDragStream = () =>
        {
            return mouseStream
		    .TakeUntil(mouseUpStream)
		    .Select(_ => Camera.main.ScreenToWorldPoint(Input.mousePosition))
		    .Scan((prev, current) =>
		    {
		        return Vector3.Distance(prev, current) < threshold ? prev : current;
		    })
		    .DistinctUntilChanged();
        };

        mouseDownStream.Subscribe(_ =>
        {
            createDragStream().Subscribe(position =>
            {
                Debug.Log(position);
            });
        });

    base.Awake();
}
```
AWS CLIで複数のProfileを使い分ける



やり方はいくつかあるようですが、これが一番好きかな。

まずは名前をつけてProfile情報をセット。

```
$ aws configure --profile %PROFILE_NAME%
```

で、コマンド利用時に設定したプロファイルを指定。

```
$ aws --profile %PROFILE_NAME% s3 sync ...
```
Xcode6  モジュールの明示的インポートのすゝめ

Xcode6からはデフォルトではClangのモジュール機能が有効になっている。
これによって、フレームワークのリンクを追加する必要がなくなった。
またpchファイルがデフォルトでは非有効になった。

デフォルトではモジュールが有効
![スクリーンショット 2015-02-25 1.10.47.png](https://qiita-image-store.s3.amazonaws.com/0/70065/2e6ea5ae-7b4d-e097-ed70-5ba1b2e55e2c.png)

pchファイルは非有効
![スクリーンショット 2015-02-25 1.11.38.png](https://qiita-image-store.s3.amazonaws.com/0/70065/74af356f-743f-df63-9529-74beea89ae37.png)


上記モジュールが有効になっていれば、現在フレームワークにてモジュールマップが定義されているため、Xcodeは裏では自動的にモジュールのインポートに差し替えられている。
![スクリーンショット 2015-02-25 1.19.04.png](https://qiita-image-store.s3.amazonaws.com/0/70065/2ffd7415-f39b-3723-7fbd-179b3b5bf17b.png)

つまり

```
#import <UiKit/UiKit.h>
```

は自動的にモジュールのインポートに差し替えられている。

```
@import UiKit;
````

またモジュールを使えば、フレームワークのリンクをわざわざ追加する必要がなくなる。
Ractive.jsのテンプレートの使い方まとめ

# 汎用テンプレート規格Mustacheとほぼ完全互換
_http://docs.ractivejs.org/latest/mustaches_

公式サイト曰く、Ractive.jsのテンプレートエンジンはMustachesと99%互換。
Mustache.js本家はこちら : _https://github.com/janl/mustache.js_

## 1. 変数表示
```html:
<script id="template" type="text/ractive">
  <div>{{ value }}<div>
</script>
```

## 2. 配列展開
```js
var test = new Ractive({
  el: ***,
  template: ***,
  data: {
    array: [
      'aaaaa',
      'bbbbb',
      'ccccc',
    ]
  }
});
```

```html
<script id="template" type="text/ractive">
  {{ #array }}
    <p>{{.}}</p>
  {{ /array }}
</script>
```

もしくは

```html
<script id="template" type="text/ractive">
  {{ #array }}
    <p>{{this}}</p>
  {{ /array }}
</script>
```

## 3. 配列内オブジェクト展開
```js
var test = new Ractive({
  el: ***,
  template: ***,
  data: {
    object: [
      {id: 'aaa', name: 111},
      {id: 'bbb', name: 222},
      {id: 'ccc', name: 333}
    ]
  }
});
```

```html
<script id="template" type="text/ractive">
  {{ #object }}
    <p>{{ id }}</p><p>{{ name }}</p>
  {{ /object }}
</script>
```

## 4.条件分岐
```html:
<script id="template" type="text/ractive">
  {{ #if value }}
    <div><img src="***.jpg" alt="image"></div>
  {{ /if }}
</script>
```

# Ractive.js拡張記法
_http://docs.ractivejs.org/latest/mustaches#extensions_

Extension以下はRactive.jsの独自拡張。
オブジェクトの展開や複雑な条件分岐がサポートされている。
またテンプレート内でjavascriptネイティブの関数の使用が可能。

## 1. オブジェクトの展開
以下の例ではiにpriceとamountが順に展開される。

```js
var test = new Ractive({
  el: ***,
  template: ***,
  data: {
    object: {price: 100, amount: 500}
  }
});
```

```html
<script id="template" type="text/ractive">
  {{#object:i}}
    <div>{{ i }} : {{ value * 1.08 }} yen</div>
  {{/bars}}
</script>
```

## 2. 複雑な条件分岐
Mustacheではbooleanによる分岐しかサポートしていないが、Ractive.jsでは比較演算子を用いた条件分岐を行える。
拡張によって否定に!を用いることも出来る。

```html
<script id="template" type="text/ractive">
  {{#if (love === 'makichan')}}
     <p>My heart pyonpyon.</p>  
  {{/if}}
</script>
```

より複雑な分岐はテンプレート関数を作成して埋め込む方法で綺麗に記述できる
http://qiita.com/NewGyu/items/52025ae0c77de9260c48

## 3. テンプレート内での関数使用
```html
<script id="template" type="text/ractive">
  {{ parseInt(value) + parseInt(value2) }}
</script>
```

代表的なものは以上。
今後も継続して編集していきます。
超初心者向け　コンストラクタJava

コンストラクタ（construtor）とは


```
Hero () {

}
```


このように()を見ると思います。この()が付いたメソッドがコンストラクタです。
コンストラクタをする事により、オブジェクトが扱うデータの初期化を行います。
Atom基本操作メモ

#Atom基本操作メモ.md

工事中

#公式
[Atom.io](https://atom.io/)

#目次
設定
基本操作
移動操作
編集操作
リンク


##設定
Preferenceを開く
Tabサイズを変更する
ピンチイン、アウトで、文字を拡大縮小するには

##基本操作
コマンドパレットを開く



##移動操作
###Atom内の移動
選択中タブの移動

###ジャンプでの移動
シンボルにジャンプ
検索
ブックマークを付ける、外す
ブックマークに飛ぶ

##編集
行を持って移動




#Preferenceを開く

Atom→Preference でSettingsが開く
Settingsを開くには
`command + ,`もありや。

###Tabサイズはここ
![150226-0003.jpg](https://qiita-image-store.s3.amazonaws.com/0/26030/7db6614d-82b0-a205-18d4-93cccf9cd844.jpeg)

###ピンチイン、アウトで、文字を拡大縮小するには
ここをチェック。
Zoom Font When Ctrl Scrolling
![150226-0002.jpg](https://qiita-image-store.s3.amazonaws.com/0/26030/09464b5f-5f0e-df60-b7c2-739c979b9bff.jpeg)














#移動

##Atomのタブ操作
下へ
`ctrl + Tab`

上へ
`ctrl + shift + tab`

##シンボルにジャンプ
`command + R`

##検索と置換
`command + `

Tabで移動、
`Enter`で1つReplace
`Shift + Enter`で全てReplace( Replace All )
Escで抜ける。

##ブックマークを付ける、外す
`commnand + F2`

##ブックマークに飛ぶ
`F2`
`Shift + F2`(上方向)

##行を持って移動
`Ctrl + Command + ↑`
`Ctrl + Command + ↓`





#コマンドパレット
`command + shift + p`
↓これ
![150226-0001.jpg](https://qiita-image-store.s3.amazonaws.com/0/26030/bd4ba78d-c7ea-ae18-1915-a24b64a8e03a.jpeg)

##Timecop
コマンドパレットを開いて time → timecop で
起動にかかる時間を観測出来るので、重くて使ってないやつは消す方向で。





#パネル分割
`command + k  からの ← or ↑ or → or ↓`

#マークダウンプレビュー
`ctrl + shift + m`




##Ricty

Ricty導入のワンライナー

こちら。
[Mac OSXに超カッコイイプログラミング用フォント「Ricty」をセットアップする](http://blog.sotm.jp/2014/01/10/Installing-SublimeText3-iTerm2-Ricty-on-MacOSX-109/)


```
% curl -L 'https://gist.github.com/ysaotome/7286145/raw/installing_ricty_on_MacOSX.sh' | bash
```

[Homebrew](http://brew.sh/index_ja.html)
fontforge

```
$ brew install fontforge --use-gcc --without-python
```


[RictyDiminished](https://github.com/yascentur/RictyDiminished)


#リンク

[パッケージのモストダウンローズ](https://atom.io/packages/list?direction=desc&sort=downloads)
##パネルのリサイズ
[ATOMエディタで分割したパネル（タブ）をリサイズする方法](http://xov.jp/e/141/)
[Resize Panes package](https://github.com/santip/resize-panes)

#右側にある線を消す
package→wrap-guide をdisableする

##パッケージの作り方
[Atomパッケージの作り方](http://news.mynavi.jp/column/ide/171/)

##パッケージ関連
[remember-session](https://atom.io/packages/remember-session)
[Atomで開いてるタブを縦に並べるCSS](http://qiita.com/mizchi/items/d5c5c52b67d4c8814ba2)



##リンク等
[GitHub 製エディタ Atom入門](http://qiita.com/k2works/items/1d25888fb3a05058e48f)
[GitHub 製エディタ Atom リファレンス](http://qiita.com/spesnova/items/d3096d062d70e7385e9d)

[Atomで開いてるタブを縦に並べるCSS](http://qiita.com/mizchi/items/d5c5c52b67d4c8814ba2)

[ショートカットメモ](http://blog.cheekpouch.com/373/)
[Atom入門 (全13回)](http://dotinstall.com/lessons/basic_atom)
scala.sys.processでリターンコードだけ受け取る

　外部のプロセスを呼び出すとき、「標準出力・エラーには何も出さず、ただリターンコードだけ取りたい」という場合があります。しかし、scalaでこれを実現するスマートな方法がよく分かりません。`#>`は標準出力しか変えられないようですし (仮に変えられるとしても、どこに変えればいいんでしょう… /dev/null?)、ちょっと困りました。

　そこでとりあえず、出力先のロガーをでっち上げる力技で解決しています。

```scala
import scala.sys.process.{ProcessLogger, Process}

def exitCode(target: String) =
  Process(target) ! new ProcessLogger {
    def out(s: => String) {}
    def err(s: => String) {}
    def buffer[T](f: => T): T = f
  }
```

「詳しい話はよく分からないが、これでとりあえず動く」という理想的状態ですね！
　もっとマシな方法が見つかったならば追記します。

#追記
　コメント欄で教えて頂きましたが、標準エラーを捨てるためにロガーを渡すアイデアはドキュメントにもあります。だとすると、方向性としてはこれが最適なのかもしれません。
　ただし具体的な方法としてはapplyを使うべきです。

```scala
def exitCode(target: String) = Process(target) ! ProcessLogger(str => ())
```

　このくらい短く書けるなら、面倒はなさそうです。

※ scalaのドキュメント、上部のタイトルをクリックすることでオブジェクト ⇔ トレイトの情報が交互に表示されるんですね… いま初めて気が付きました
Macのスクリーンショット使いやすくする

***
**【目的】**
ブログとかに投稿する際に、画面のキャプチャーを効率よくする方法
（Macの場合）
***
####**1.ショートカット**
　画面を全体：「command」＋「shift」＋「３」
　範囲を指定：「command」＋「shift」＋「４」
　ウィンドウ指定：「command」＋「shift」＋「４」＋「space」
　
###**2.保存先の変更**
　「ターミナルから」以下のコマンドを実行する。
　（保存先をダウンロードフォルダに指定する場合）

```text
defaults write com.apple.screencapture location ~/Downloads
```


SystemUIServerを再起動

```text
killall SystemUIServer
```
デフォルトに戻す場合

```text
defaults delete com.apple.screencapture location
killall SystemUIServer
```

###**3.キャプチャーした画像ファイル名を変更する**
　キャプチャーした画像のファイル名は、このままだと管理しづらいので、管理しやすい
　ように連番のファイル名に変更する。

　保存先のフォルダーをファインダーで開いて、ファイルを選択する。（複数選択）
![キャプチャー手順2.png](https://qiita-image-store.s3.amazonaws.com/0/70430/7f16f270-c9e0-476b-02ba-63893c91c064.png)

メニューから、「⚪︎⚪︎項目の名前を変更」を選択して「Finder項目の名前を変更」ダイアログを表示する。

![キャプチャー手順1.png](https://qiita-image-store.s3.amazonaws.com/0/70430/55ce5fc1-7756-7d28-aad6-c57622adf8f4.png)
フォーマットを選択すると、連番でファイル名を変更することができます。
***
**【結果】**
これで、投稿する際のキャプチャー作業が楽になります。
頑張って、これからは投稿しますね。
***
Knockback.jsを使う


# Knockbackって何？

KnockoutとBackboneを組み合わせて使うライブラリ。ググっても日本語の情報がほとんど無いので簡単にまとめてみる。

# Demo

動いてるところが見たい人はデモをどうぞ。

* http://jsfiddle.net/key3/rukr9thn/

## インストール

```bash
bower install knockback
```

## モデル定義

```coffeescript
class HogeModel extends Backbone.Model
    attributes:
        name: null
```

## ビューモデル定義

```coffeescript
class HogeViewModel extends kb.ViewModel
    onClick: ->
        console.log(@model())
        console.log(@model().toJSON())
```

## HTML

```html
<div id="target">
    Name: <input type="text" class="input" data-bind="value: name, valueUpdate: 'afterkeydown'"><br>
    Input data: <span data-bind="text: name"></span><br>
    <button type="button" class="btn btn-primary" data-bind="click: onClick">Log model object</buton>
</div>
```

## モデルの初期化とバインディング

```coffeescript
model = new HogeModel(name: 'foobar')
viewModel = new HogeViewModel(model)

kb.applyBindings(viewModel, $('#target')[0])
```


# 内部的な動き

Knockbackの役割はBackbone.ModelとKnockout.ViewModelをバインディングすることにある（薄いラッパーみたいなもん？）。KnockoutのViewModelは内部的にBackbone.Modelを抱えつつ、ビュー周りの処理をこなす、という感じ。
超初心者向け　super.onCreate(savedInstanceState);

Android開発をしていると良く見る
super.onCreate(savedInstanceState);

このsuperとは、スーパークラスの事で、ここでは、Activityを継承している。
onCreateとは、アクティビティサイクルの内の１つで、onCreateはアクティビティの開始を表す。
ASP.NET Web Optimization Framework でMinifyできなかった時

ASP.NET MVCでJavaScriptをoptimizationしてたら、解析できないよって怒られた。

構文見たらそんなのやらこんなのやら。

+function() { alert("こんな即時関数があることを知らなかった・・・"); }
-function() { alert("こんな即時関数があることを知らなかった・・・"); }
etc...

[WebEssentials](http://vswebessentials.com/download)でMinify作りました。
そうすることで、たとえ解析に失敗したとしても、minifyされたものが返されるので、ひとまずminifyできないという問題は回避しました。。。。


追記１
ASP.NET Web Optimization Frameworkにこだわったのは、ファイルをまとめてくれる＝リクエストの回数を減らせるところを狙いました・・・が、ファイル数が多くない限り、そこまで違いないかもしれません。
コーディング規約まとめ用メモ

#JavaScript

###Google JavaScript Style Guide
[Google JavaScript Style Guide 和訳](http://cou929.nu/data/google_javascript_style_guide/)
[Google JavaScript Style Guide 和訳　抜粋](http://www.hp-stylelink.com/news/2013/10/20131008.php)
[Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)

###Airbnb JavaScript style guide
[Airbnb JavaScript スタイルガイド 和訳 / GitHub](https://github.com/mitsuruog/javacript-style-guide)

[Airbnb JavaScript スタイルガイド 和訳](http://mitsuruog.github.io/javacript-style-guide/)
[Airbnb JavaScript style guide](https://github.com/airbnb/javascript)


#PHP

###PSR
[PSR-2 コーディングガイド（日本語）](http://www.infiniteloop.co.jp/docs/psr/psr-2-coding-style-guide.html)
[PSR-1 基本コーディング規約（日本語）](http://www.infiniteloop.co.jp/docs/psr/psr-1-basic-coding-standard.html)
[PSR-0（日本語）](http://www.infiniteloop.co.jp/docs/psr/psr-0.html)
クッキーとセッションの違い


## セッション
セッションというのは、「リクエストとその"主"を結びつける」ための概念、仕組みのこと。
HTTPはステートレスなプロトコルであるため、これをステートフルに変えるものがセッション。

セッションという概念を実装するには「キーの受け渡し」をする必要ある。「キー」というのは「Session ID」と呼ばれ、一連のセッションに対しての識別子（ID）を指す。

この「Session ID」をキーとして、サーバー側に様々な情報を保存させる。

そしてその「キーの受け渡し」を実現するための実装がクッキー。

## クッキー
Cookieは、RFCでも明示的に定められている一つの「仕様」であり「実装」のこと。
サーバサイドからクライアントに対して書き込める小さなテキスト。

クライアントベースの情報維持の仕組み。クッキーはクライアント側に全ての値を保存させますからユーザーが改変可能。

そのため、クライアント側には「Session ID」だけを渡し、クライアントはサーバにアクセスする際に、この「Session ID」をヘッダ情報として送信することで、クライアントはサーバに保管された自身のセッション情報を参照する。
イテレータを返す関数を書きたいんですけど？ → やめとけ。 死ぬぞ。

**！！この記事の内容はもう古いです。 詳しくはコメント参照！！**

こんにちは。 Rust記事です。

Rust、比較的新しい言語じゃないですか。 頑張ってチュートリアル読んで、じゃあなんかちょっとしたアルゴリズムでも書いてみるか、ってなるじゃないですか。 で、大体のちょっとしたアルゴリズムって、まぁ普通は配列とかマップとか、そういうデータ集合のデータ構造が出てきますよね。 もちろんそんなデータ構造を関数間で受け渡ししたくなるじゃないですか。 で、『`Vec`作って返すよりもイテレータの状態で返したほうがパフォーマンスいいんじゃない？』って場面はまぁあると思うんですよ。

**やめとけ、死ぬぞ。**

っていうのが今回の主旨です。

イテレータを返す関数って、どんな定義になると思いますか？
ここでは適当に、`Vec<i32>`を2つ受け取って、それらを連結した上で3の倍数の要素のみを返したい、とか考えましょう。
たぶんRust初心者は、こんなのを想像すると思うんです。 私も今朝しました。

```rust
fn the_function(v1: &Vec<i32>, v2: &Vec<i32>) -> Iterator<i32> {
    v1.iter().chain(v2.iter()).filter(|x| x % 3 == 0)
}
```

本当はこうなります。

```rust
fn the_function<'a>(v1: &'a Vec<i32>, v2: &'a Vec<i32>) -> std::iter::Filter<std::iter::Chain<std::slice::Iter<'a, i32>, std::slice::Iter<'a, i32>>, fn(&&i32) -> bool> {
    fn only_multiples_3(x: &&i32) -> bool { *x % 3 == 0 };
    v1.iter().chain(v2.iter()).filter(only_multiples_3)
}
```

ちなみに今私はこの関数をコンパイル通すために1時間かけました。
まさかの関数本体より長い戻り値型。 どうしてこうなった。 

なぜなら、関数の戻り型の所には「型」を書かなければいけないのです。 `Iterator<i32>`はあくまでも trait であって、型ではありません。 `Iterator<i32>`を impl した何かの型をここには書いてやる必要があるのです。

Rust言語のイテレータはちゃんとできていて、例えば`filter(...)`メソッドは、イテレータが実際に使われるまではフィルタリングや、フィルタリング元のイテレータの呼び出しを実際に行うことはありません。 つまり、イテレータは使われるまで呼び出し元の型だとかフィルタリングに使う関数オブジェクトの型だとか、そういうのを全部記憶しておく必要があるのです。 「この関数の戻り値はなんか`Iterator`っぽい挙動をする型を返すよ」ではだめなのです。「この関数は、`Iterator`を impl して、`Vec<i32>`のイテレータを2つ連結した後に`fn(&&i32) -> bool`型の関数オブジェクトを使ってフィルタリングしたものをイテレータとした型を返すよ」と言ってやらないとだめなのです。 Rust言語では、これらの情報をぜんぶ型名として記憶するのです。

「でも、Javaの`Iterator<E>`だとそんな面倒なこと必要ないじゃん」と思うでしょう。 その通りです。 Java言語では、これらの情報の記憶・解決を仮想関数テーブルを用いて実行時に行なっています。 このためイテレータは全部ヒープ上に確保されます。 でも、Rust言語の開発者たちはこう思ったようです。
「イテレータをヒープ上に確保したり、仮想関数テーブル使ったりするのって無駄じゃね？ 十分な型推論があれば、全部コンパイル時に解決できるっしょ？」
十分な型推論があればってところがミソです。 実際、このイテレータのくっそ複雑な型は、イテレータを戻り値の型(ここだけは必ず型を書かなければならない)にしない限りほぼお目にかかりません。 Rustでは変数の宣言時に型は不要ですし、引数はジェネリック関数を使えば型の代わりに trait で記述することができます。 たとえばこんな感じに。

```rust
fn print_iter<'a, I: Iterator<Item=&'a i32>>(iter: I) {  // ここでは引数の"型"は明示せず、traitだけでいい
    for v in iter {
        println!("The iterator's value is {}", v);
    }
}

fn main() {
    let v1 = vec![1, 3, 5];
    let v2 = vec![2, 4, 6];
    // ここではiterの型は勝手に推論される
    let iter = v1.iter().chain(v2.iter()).filter(|x: &&i32| *x % 3 == 0);
    print_iter(iter);
}
```

まだ前の関数よりはなんぼか読みやすくなったのではないでしょうか。 これでもまだ`'a`とか`&&`とか出てきてようわからんという皆さん、**これがRustだ**。 この辺は普通に出るので頑張ってコンパイラと対話を試みてください。

一応、Java的な解決策、つまり型に複雑な情報を持たせるのを放棄して、全部仮想関数テーブルにやらせて表記を簡潔化するという手段がとれる場合もあります。 `Box<T>`型のパラメータ`T`は trait でもいいことを利用して、`Box<Iterator<Item=T>>`型を返すような関数が書ける*場合もあります*。
あるいは、そもそも`Iterator`を返すんじゃなくて`Vec<T>`とかを返すようにするとプログラムを書くのが非常に楽になります。 もちろんこれはイテレータの遅延実行のメリットを捨ててたりとか`Vec<T>`を確保する手間とかが余計にかかっているのですが、大抵の状況ではそんなもんどうでもいい誤差レベルのデメリットです。
まぁ、そういう誤差レベルのデメリットが気にならないならJavaとかで書けよって話ですが……。

一応これは言語開発者の皆さんもわりと喫緊の課題と認識しているようなので、近いうちにいい感じの解決策が提示されるかもしれません。 **ただし1.0には間に合わない。** 解決策を後で実装しても現バージョンのコードはそのまま動く(後方互換性を保てる)ので、やや後回しになったようです。

[参考: RFC: Add unboxed, abstract return types #105](https://github.com/rust-lang/rfcs/pull/105)
[swift]前回の呼び出しからの経過時間を調べる

**編集**
何かコードがおかしかったので修正。

---

前回のフレームからの経過時間を求めたい時ってありますよね。速度の計算とか。そんなときに使えるやつです。たぶんこんな感じで書けば良い。

``` ElapsedTimeCounter.swift
import Foundation

class ElapsedTimeCounter {
    class var instance: ElapsedTimeCounter {
        struct Static {
            static let instance = ElapsedTimeCounter()
        }
        
        return Static.instance
    }
    
    private var lastDate: NSDate?
    
    func getMillisec() -> Int? {
        let now = NSDate()
        if let date = lastDate {
            let elapsed = now.timeIntervalSinceDate(date)
            lastDate = now

            return Int(elapsed * 100.0)
        }
        
        lastDate = now
        return nil
    }
}
```

UIScrollViewでこんな感じに使ってます。

``` MyScrollView.swift
    func scrollViewDidScroll(scrollView: UIScrollView) {
        if let millisec = ElapsedTimeCounter.instance.getMillisec() {
            println("sec \(millisec)")
        }
    }
````

Millisecを返すようにしてるんですけどほとんど1[ms]になっちゃいますね。もっと細かい単位で取ったとして、意味のある数字とも思えないし、どうしましょ。

swift1.2からSingletonが簡単に書けるようになったらしいですね。早くアップデートしたいです(今開発中なので人柱怖い)
perldocで `No documentation found`

# 問題

普通にperldocコマンドだけだとシステムのperlに入ってるモジュールしか見つからない
プロジェクト内で使用してるものとか、その他のモジュールについてひこうとすると`No documentation found`となる

```bash
$ perldoc List::UtilsBy::XS
No documentation found for "List::UtilsBy::XS".
```

# 解決法

プロジェクトでのみ使用しているライブラリのperldocを引くときはライブラリへのパスを`@INC`に含めてからperldocする必要がある。
`-I`オプションなど諸々の方法で`@INC`に諸々入れてから`perldoc`するようにすると怒られない

```bash
$ perl -Ilib `which perldoc` List::UtilsBy::XS 
```

# 所感

`PERL5OPT` みたいなあれで、もっと良いやり方がある気がしている
独習 C++ 目次

#### 第一章 C++の概要
1.1 オブジェクト指向プログラミングとは
1.2 C++標準化の歩み
1.3 C++のコンソール入出力
1.4 C++のコメント
1.5 クラス
1.6 CとC++の相違点
1.7 関数のオーバーロード
1.8 C++のキーワード

#### 第二章 クラスの概要
2.1 コンストラクタ関数とデストラクタ関数
2.2 仮引数を受け取るコンストラクタ
2.3 継承
2.4 オブジェクトポインタ
2.5 クラス、構造体、共用体の関連
2.6 インライン関数
2.7 自動インライン化

#### 第三章 クラスの詳細
3.1 オブジェクトの代入
3.2 関数へのオブジェクトの引渡し
3.3 関数からのオブジェクトの返し
3.4 フレンド関数の概要

#### 第四章 配列、ポインタ、参照
4.1 オブジェクトの配列
4.2 オブジェクトのポインタ
4.3 this ポインタ
4.4 new と delete の使用
4.5 new と delete の詳細
4.6 参照
4.7 参照の返し
4.8 独立参照と制限

#### 第五章 関数オーバーロード
5.1 コンストラクタ関数のオーバーロード
5.2 コピーコンストラクタの作成と使用
5.3 デフォルト引数の使用
5.4 オーバーロードのあいまいさ
5.5 オーバーロード関数のアドレスの探し方

#### 第六章 演算子オーバーロード
6.1 演算子オーバーロードの基本
6.2 ２項演算子のオーバーロード
6.3 関係演算子と論理演算しのオーバーロード
6.4 単項演算子のオーバーロード
6.5 フレンド演算子関数の使用
6.6 代入演算子の詳細
6.7 [] 添え字演算子のオーバーロード

#### 第七章 継承
7.1 基本クラスのアクセス制御
7.2 非保護メンバの使用
7.3 コンストラクタ、デストラクタ、継承
7.4 多重継承
7.5 仮想基本クラス

#### 第八章 C++ の入出力システム
8.1 C++の入出力の基礎
8.2 書式設定された入出力
8.3 width()、precision()、fill() の使用
8.4 入出力マニピュレータの使用
8.5 独自挿入子の作成
8.6 抽出子の作成

#### 第九章 C++ の高度な入出力システム
9.1 独自マニピュレータの作成
9.2 ファイル入出力の基本
9.3 書式不定のバイナリ入出力
9.4 その他の書式不定入出力関数
9.5 ランダムアクセス
9.6 入出力状態のチェック
9.7 カスタマイズされた入出力とファイル

#### 第十章 仮想関数
10.1 派生クラスへのポインタ
10.2 仮想関数の概要
10.3 仮想関数の詳細
10.4 ポリモーフィズムの応用

#### 第十一章 テンプレートと例外処理
11.1 汎用関数
11.2 汎用クラス
11.3 例外処理
11.4 例外処理の詳細
11.5 new 演算子の例外処理

#### 第十二章 実行時型情報とキャスト演算子
12.1 実行時情報（RTTI）
12.2 dynamic_castの使用方法
12.3 const_cast、reinterpret_cast、static_cast の使用方法

#### 第十三章 名前空間、変換関数、その他の機能
13.1 名前空間
13.2 変換関数の作成方法
13.3 static クラスメンバ
13.4 const メンバ関数と mutable
13.5 コンストラクタについてのその他の事項
13.6 リンケージ指定子と asm キーワードの使用方法
13.7 配列ベースの入出力

#### 第十四章 標準テンプレートライブラリ
14.1 標準テンプレートライブラリの概要
14.2 コンテナクラス
14.3 ベクトル
14.4 リスト
14.5 マップ
14.6 アルゴリズム
14.7 string クラス
Android Studioでローカルのaarファイルの取り込む


Mavenリポジトリ上ではなくローカルでビルドしたaarを取り込みたい場合はFile → "New Module"でWizardを表示して、"Import .JAR/.AAR"でaarファイルを指定するとaarを取り込んだ新しいModuleが出来ます。

アプリに取り込む際には通常のモジュールを取り込むのと同じ方法で設定します

```build.gradle
dependencies {
    compile project(':LocalAARModule')
}
```

http://stackoverflow.com/a/24894387/1001338
[WIP]機動開発



機動開発は以下の環境で使える

# 機動開発を取るべき開発の状況
- スピードが求められる場合
- 短い間隔でリリースを行いたい場合
- ドメインで勝ちパターンなどが確立されていない状況

# 機動開発の優位性
- 従来のアジャイルで1チーム単位が基本だったが複数開発が可能になる
- 小型プロダクト複数で連携して開発が行われる状況に適している

# 機動開発が適した環境
- 変化しやすい環境
- 環境が変化しやすいため、事前に立てた計画が陳腐化しやすい
- 環境やユーザーの情報など、現状を表す不確実な情報しか手に入らない

# 指示の特徴
- 上級者から下級者に目的のみが伝えられる。手段においては、裁量で許される限り下級者が自由に選べる。
- 必要がない限りメンバーの手段を制限されることはない。
- 下級者は上級者の意図(最低でも2階層上の上級者の意図)を意識した上で行動することを要求される

# 構成の特徴
- 5人以下のチームが構成され、複数のチームでプロジェクトが構成される
- メンバーは高い士気と裁量権を持つ

# 進行上の特徴
- 初期フェーズのチーム立上時および計画立案に、世界観や戦略を共有するために大量の時間を使う
- かわりに計画立案が完成すると、意思共有がなされた状態でプロジェクトが進むため、打ち合わせは少ない回数ですむ。
- 想定外の事態が発生しない限りは、簡単な打ち合わせのみですむ。
- 作業スピードは従来のものよりも早い。
- メンバー構成で、素人が半数以上を占めない限り、序盤の打ち合わせに費やした時間を中盤以降の作業速度の速さで取り返すのに8週間程度しかかからない。
練度が低い場合、序盤の打ち合わせが収束しない。また作業速度がトップスピードに乗るまでに時間が掛かる。
- 想定外の事態が発生した場合はメンバーを招集し、再度計画立案に戻る

# 制約
- 上級者が下級者に示す意図については完全に明確なものでなければならない
- 下級者が上級者の示す意図を明確に理解する必要があり、不明な点は必ず尋ねなければならない
- 上級者は下級者の行動についてみだりに口出ししてはならない(裁量に委ねられるため)
- 上級者は2階層以上下の下級者の行動に口出ししてはならない
BER MetaOCaml について

## はじめに

http://okmij.org/ftp/ML/MetaOCaml.html

## 概要

BER MetaOCaml は OCaml でマルチステージ・プログラミングをするための OCaml 4.02.1 へのパッチである．

## Installation

opam を使っていればインストールはとても簡単である．

```sh
opam update
opam switch 4.02.1+BER
eval `opam config env`
```

## REPL

opam でインストールした MetaOCaml の REPL は次のようにして起動する．

```sh
metaocaml
```

## 特徴

最大の特徴はなんと言っても quote, unquote, eval であろう．例．

```
# let a = .<1 + 2>.;;
val a : int code = .<1 + 2>.
# let b = .<.~a * .~a>.;;
val b : int code = .<(1 + 2) * (1 + 2)>.
# open Runcode;;
# let c = !. b;;
val c : int = 9
```

``.<x>.`` で quote, ``.~x`` で unquote, ``!.`` で eval ができる．
なお， ``!.`` は ``open Runcode`` しないと使えない．

グローバルで open するのが気持ち悪いという人は多いと思うが， OCaml なので let open がある．

```
let c = let open Runcode in !. b;;
```

## 完全にレキシカル

``.<x>.`` は Lisp の `` `x `` に似ているが，大きく異なる特徴がある．
それはシンボルのスコープである．

たとえば，次のようなコードはエラーになる．

```
# let c = .<x>.;;
Error: Unbound value x
```

要するに，シンボルは完全にレキシカルに扱われる．
変数は，定義した場所から見えるものだけが参照できる．
このことは，次のようなコードを実行してみれば確かめることができる．

```
# open Runcode;;
# let x = 1;;
val x : int = 1
# let a = .<x>.;;
val a : int code = .<1>.
# let x = 2 in !. a;;
Warning 26: unused variable x.
- : int = 1
```

これは，たとえば， let や aif のような，新しく変数を導入するマクロはつくれないことを意味する．例．

```
# let aif x y z = .<match .~x with Some it -> .~y | None -> .~z>.;;
val aif : 'a option code -> 'b code -> 'b code -> 'b code = <fun>
# let it = 1 in aif .<Some 2>. .<it>. .<3>.;;
- : int code = .<match Some 2 with | Some it_2 -> 1 | None  -> 3>.
```

アナフォリック・マクロの禁止は，ポピュラーな機能である．
たとえば， Scheme の衛生的マクロ や Clojure のマクロも，マクロで新しい変数を導入することは基本的に禁止している．

## 扱えるのは式のみ

また， quote できるのは式のみという制限もある．
たとえば，次のようなコードは quote できない．

```
# let c = .<let hoge = 1>.;;
Error: Syntax error
```

これは，たとえば， Lens の makeLenses のように名前のついた関数の生成などはできないことを意味する．

## 型安全

型の合わないコードはつくれない．たとえば，

```
# let c = .<"a" - "b">.;;
Error: This expression has type string but an expression was expected of type
         int
```

アナフォリック・マクロがつくれないなどの制限も多いものの，基本的に型安全である．

## 参考文献

* [BER MetaOCaml](http://okmij.org/ftp/ML/MetaOCaml.html#install) 2015年2月24日アクセス．
ฅ(・ω・ฅ){ EA (Emoji Art) でサザンイマジネーション 第4回 お題「 Ruby 22 歳の誕生日（ 2015/02/24 ） 」 }

## <i class="fa fa-image" style="font-size:1em;"></i> 概要
Ascii Art ならぬ EA (Emoji Art) で 3 x 3 の絵を作る。

## <i class="fa fa-history" style="font-size:1em;"></i> 経緯
CodeIQ で <i class="fa fa-external-link" style="font-size:1em;"></i> [Emoji-サザンイマジネーション](https://codeiq.jp/ace/tbpgr_badge/q1323)
という問題の出題を始めました。

Emoji で 3 x 3 の絵を作るプログラムを作成する問題です。

この問題のフィードバック時に、解答者の 3 x 3 の Emoji に対して、
3 x 3 の Emoji でフィードバックする、という試みをしています。
これが結構楽しかったので、 Qiita 上でも出題期間中 ( ～ 2015年3月6日) は
1日1お題くらいやってみたいな、と思いました。

最近の チャットツール とか GitHub とか、多くのツールが Emoji をサポートしてるので
面白いものを作っておくと、開発メンバー間のコミュニケーションツールとして使えそうですよね。

Emoji のリストと対応サービスはこちらで確認。
<i class="fa fa-external-link" style="font-size:1em;"></i> [EMOJI CHEAT SHEET](http://www.emoji-cheat-sheet.com/)

## :flower_playing_cards: 作品 「 Ruby 22 歳の誕生日（ 2015/02/24 ） 」

:man::sparkles::gem:
:smile::books::smile_cat:
:ghost::scroll::skull:

* Matz さんと宝石
* 可読性
* 黒魔術

うーん、まとまりがない感じに。

## :books: 関連情報
* <i class="fa fa-external-link-square" style="font-size:1em;"></i> [emoji 関連記事](http://qiita.com/tbpgr/items/b32c83e2f3f348a4ce0a)
* <i class="fa fa-external-link" style="font-size:1em;"></i> [Happy 22th Birthday, Ruby!](http://tbpgr.hatenablog.com/entry/2015/02/24/220403)
ufwをcentosにインストール

iptablesを直接いじりたくないのでufwを導入します。

    sudo yum install wget make
    mkdir -p ~/src
    cd ~/src
    wget https://launchpad.net/ufw/0.33/0.33/+download/ufw-0.33.tar.gz
    tar xzf ufw-0.33.tar.gz
    cd ufw-0.33
    sudo python ./setup.py install
    cd ../
    sudo rm -rf ufw-0.33
    sudo chmod -R g-w /etc/ufw /lib/ufw /etc/default/ufw /usr/sbin/ufw

    sudo service iptables stop
    sudo service ip6tables stop
    sudo chkconfig --del iptables
    sudo chkconfig --del ip6tables

    $ sudo ufw status
    Status: inactive

    $ sudo ufw reset
    $ sudo ufw default deny
    $ sudo ufw allow 22
    $ sudo ufw allow 80
    $ sudo ufw allow 443
    $ sudo ufw enable
    $ sudo ufw status
    Status: active

    To                         Action      From
    --                         ------      ----
    22                         ALLOW       Anywhere
    80                         ALLOW       Anywhere
    443                        ALLOW       Anywhere
    22                         ALLOW       Anywhere (v6)
    80                         ALLOW       Anywhere (v6)
    443                        ALLOW       Anywhere (v6)

念のため別コンソール開いてssh繋がるか確認してください(ssh繋げたまま)

次は常時起動設定

    sudo sh -c "echo '/usr/sbin/ufw enable' >> /etc/rc.local"
    $ sudo cat /etc/rc.local | tail -3 # 念のため確認

    touch /var/lock/subsys/local
    /usr/sbin/ufw enable
    $ sudo reboot

立ち上がったらちゃんと起動できてるか確認

    $ sudo ufw status
    Status: active

    To                         Action      From
    --                         ------      ----
    22                         ALLOW       Anywhere
    80                         ALLOW       Anywhere
    443                        ALLOW       Anywhere
    22                         ALLOW       Anywhere (v6)
    80                         ALLOW       Anywhere (v6)
    443                        ALLOW       Anywhere (v6)


お疲れ様でした

参考: http://mitsuakikawamorita.com/blog/?p=1375
参考: http://g6g6g6g6g6.tumblr.com/post/64294729570/centos-utf
RailsでER図を生成するGem（rails-erd）

RailsでのER図の自動生成について。

rails-erdというGemをCentOS6に入れる方法です。

「graphviz」というRPMを追加して、Gemで「rails-erd」をインストールする流れとなります。

```bash
# yum -y install graphviz
$ vi Gemfile
以下の行を追加
---------------------------
gem 'rails-erd', group: [:development, :test]
---------------------------
$ bundle install
```

ER図の生成は以下のコマンドから行えます。

```bash
$ rake erd
Loading application environment...
Loading code in search of Active Record models...
Generating Entity-Relationship Diagram for 3 models...
Done! Saved diagram to erd.pdf.
```

プロジェクト配下に「erd.pdf」というPDFファイルが出来ています。

内容は以下のような感じです。

![スクリーンショット 2015-02-24 21.48.08.png](https://qiita-image-store.s3.amazonaws.com/0/62592/86c0052b-8c60-4fd0-070f-4b70c9ac6f6d.png)

とても手軽なので、DBの依存関係の確認などさっと作れるので助かりますね。

他にもER図を作るものなど「railroady」というものがあるようです。

もう少し定義をしっかり書いた上で出力してくれるのもあると良いんですが。
Mezzanineをはじめよう


## Mezzanineとは

Python・Django製のCMSです。WordpressやMovable Typeのようなものです。サードパーティや自作のDjangoアプリとの連携が容易で、柔軟なサイト運営が可能です。
http://mezzanine.jupo.org/

日本での情報があまり無いのでひとまず導入部分を書いていきたいと思います。

## はじめかた

### 準備
今回はPythonの開発環境があることを前提としますので、virtualenvやpyenvなどで環境を用意しておきます。

具体的には``pyenv local mypython``や``workon mypython``をした状態ですが、MacなどのデフォルトのPython環境を使ってかまわないのであればこれらのコマンドは気にする必要はありません。

### インストール

公式サイトに従って

```
$ pip install mezzanine
```

MezzanineをインストールするとDjangoなどの依存モジュールもインストールされます。自分の環境はDjango1.6.10がインストールされました。

### プロジェクト作成

```
$ mezzanine-project myproject
```

自分の環境ではpyenvを使っていたのですが``mezzanine-project``が
Not Foundと言われたので``source ~/.pyenv/versions/mypython/bin/activate``のようにactivateしたら実行できました。いくつか対話的に質問がされるので都度入力します。

### 開発用のDB作成

```
$ cd myproject
$ python manage.py createdb
```

ローカルのデフォルトの設定(local_settings.py)ではsqliteを使うようになっているのでもしかしたらsqliteがないと失敗するかもしれないです。自分の環境には入っていたのでよく確かめていませんが場合によっては``brew install sqlite3``などで対応すると良いでしょう。 MySQLなどが使いたい場合はlocal_settings.pyを編集してください。

### 画面の確認

```
$ python manage.py runserver
```

これでデフォルトだと http://localhost:8000 にアクセスすれば画面の確認が出来ます。

![49bb45d4-ff72-4d10-860c-99e2397b3478.png](https://qiita-image-store.s3.amazonaws.com/0/14918/fb2c1570-e09a-9630-61fb-b77e2152a0a7.png "49bb45d4-ff72-4d10-860c-99e2397b3478.png")


### テンプレートの編集

テンプレートを編集する際は一旦デフォルトのテンプレートをコピーして、それを編集するようにすると便利です。次のコマンドはMezzanineが用意しているテンプレートを自動で複製してくれます。

```
$ python manage.py collecttemplates
```

プロジェクトディレクトリにtemplatesディレクトリが追加されるのでその中を編集していくことになります。オプション等については``python manage.py collecttemplates --help``で確認できます。

### 外部テーマの導入

サードパーティ製のMezzanineテーマを導入する場合は、例えば http://thecodinghouse.in/themes/moderna/ 等からダウンロードしてきてプロジェクトディレクトリの下にDjangoアプリ（モジュール）として配置します。そしてsettings.pyのINSTALLED_APPSの先頭にモジュール名を追加します。先ほどのURLの場合だと下のようになります。

```
INSTALLED_APPS = (
	"moderna",  # 追加
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    # ...
)
```

![6d4e8149-7de8-4811-b8c2-0573f6306db2.png](https://qiita-image-store.s3.amazonaws.com/0/14918/347c6898-d8f6-a2cd-870f-6c899d4366a2.png "6d4e8149-7de8-4811-b8c2-0573f6306db2.png")


なお、先ほどtemplatesディレクトリを作成していた場合はデフォルトではそちらが優先されます。

### 拡張
基本的には以上の手順で簡単に導入できるはずです。サイト運営自体は他のCMSと特に変わりはないと思いますし、機能の拡張も通常のDjangoプロジェクト同様にモジュール等を作ってINSTALLED_APPSに追加するといったような流れになります。

## 所感

ここまでで導入の説明は終わりですが、余談としてMezzanineを使ってみた感想を少し書かせてもらいます。

### 柔軟性

正直WordpressやMovable Typeなど有名どころのCMSをあまり使ったことが無くて比較はできないのですが、Djangoアプリを追加することでとても柔軟にサイトを制作できます。なのでただのブログ用途だけでなく色々使えそうです。

### デフォルトの設定が豊富

インストールしたときに一番感動したのはインストールした段階で既に多くの設定ファイルが用意されていたことでした。たとえばrequirements.txtや.gitignoreなどプロジェクトの開発時に必ず用意するであろうものや、crontabやsupervisor.confなど運用時に必要になるものがはじめから入っています。とくにfabfile.pyは一通りのコマンドが用意されていてFabricを導入するだけでデプロイスクリプトなどを一から考える必要もありません。

### シェア

（データを持っていないのであまり勝手なことは言えないですが）
日本での情報はまだまだ少なく圧倒的にWordpressがシェアを持っていると思いますが、最近ではPythonを使う人も以前よりは多くなった印象もあるので、柔軟性のあるCMSということで少しずつ導入されるのではないかと個人的には思います。
The C++ Lands

The C++17 Lands
http://fearlesscoder.blogspot.jp/2017/02/the-c17-lands.html

The C++11 Lands
http://fearlesscoder.blogspot.jp/2012/01/c11-lands.html

The C++ Lands. With sources. 
http://fearlesscoder.blogspot.jp/2010/05/c-lands-with-sources.html