OmniAICreator/Qiita-1.07M huggingface dataset:
bluemixにpython＋Flask＋watson api環境を構築してみた。

IBMのBluemixを触ることになったので、
ちょい下調べ。

まずは、ざっと触って気づいた点
・Bluemixの動作は全体的にもったりしてる
・ほぼ英語。日本語は意訳あり
・Python、Rubyなどもカバー
・仮想マシンも使える？近日公開とのこと
・無料枠があり、無料サーバーとしても使えそう。


最初にPythonを指定してアプリを作成します。
bluemix上でクリッククリックで簡単に作成できました。

開発方法は２つ

１）bluemixの開発キッドをダウンロードしてローカル作業
or
２）Git連携
→ 使い方がいまいち分かりにくい。

とりあえず、IDEダウンロードとかだるいので、
後者のGit連携でやってみます。

まずは、ダッシュボードからadd gitをクリックして、
ibm上にgithubリポジトリを作成。

で、ローカルでcloneして、
いじってpushすれば自動でデプロイされる。


次にpython2をpython3にする。

デフォルトでバージョン 2.7.10
runtime.txtで変更可能

(参考)
https://console.ng.bluemix.net/docs/runtimes/python/index.html#python_runtime

```
# pyenvインストール
$ brew install pyenv

# 設定
$ export PYENV_ROOT="$HOME/.pyenv"
$ export PATH="$PYENV_ROOT/bin:$PATH"
$ eval "$(pyenv init -)"

# python3.4.3をインストール
$ pyenv install --list
$ pyenv install 3.4.3
$ pyenv global 3.4.3
$ pyenv versions
$ pyenv rehash
$ python --version # → 3.4.3になってること確認

bluemix側のruntime.txtに以下に変更
$ python-3.4.3 # → deployするとpython3.4.3になっている。
```

フレームワークのインストール

DjangoなどTornado、色々ありましたが、
軽量ということで、Flaskを選択。
ほぼ、python3対応されてきてますね。

```
$ pip install Flask
```

ここを参考にbluemix環境構築
> https://github.com/IBM-Bluemix/bluemix-python-flask-sample/blob/master/static/index.html

・server.py修正

```
import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def Welcome():
    return app.send_static_file('index.html')

@app.route('/myapp')
def WelcomeToMyapp():
    return 'Welcome again to my app running on Bluemix!'

port = os.getenv('PORT', '5000')
if __name__ == "__main__":
	app.run(host='0.0.0.0', port=int(port))
```

・requirements.txt修正

```
Flask==0.11.1
```
・静的ファイルのパス変更
"static/"を追加


これで、bluemix上でPython3とFlaskが動くようになりました。


deploy中は「404 Not Found」出る（汗



で、次は
Watson APIとの連携です。

今回は、Personality Insightsを利用します。

これ一言で言うと、Watsonによる「性格診断」。

SNSなどのテキストデータをインプットに、
情緒不安定性とか、外向性、知的好奇心、誠実性、協調性など、
１５種類の百分率で診断してくれます。

http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/personality-insights.html


連携は簡単で、
まずはBluemixのダッシュボードの左メニュー「サービス」で、対象のサービスを選択。
リージョンの概念があるので注意。（違うリージョンがデフォルト選択されていて、消えてる！って焦りました）

連携できると、対象アプリの環境変数で、
VCAP_SERVICESに値が格納されます。

アプリ開発ではここから環境変数を参照して、APIなどにアクセスします。

具体的なコーディングは下記を参照

(参考)
https://github.com/watson-developer-cloud/personality-insights-python

ポイントだけ書くと、

・VCAP_SERVICESから値を参照
・Personality Insights serviceにアクセス
・json形式で診断結果が返ってくるので、これを適宜表示

注）Flaskだと以下でjsonを返す。
return app.response_class(response.content, content_type='application/json')

以上、
まずは簡単なAPI連携でした。

次は
Natural Language Classifier（NLC）などを使って、
会話を楽しむWatsonを作ってみたいと思います。
IE11 CSS で page-break が効かない → sup (上付き)タグが原因

##備忘録
時間のあるときにコードなど書きますが、とりいそぎ備忘録

CSSで以下のように入力していたが、Chrome は機能するのに、IE11 だけ機能しなくなった。

```css
.hoge{
  page-break-inside:avoid;
}
```

原因きりわけたところ、\<sup\> タグを使っていることだった。
CSSで `vertical-align: super; ` を指定しても同様だった。
タブレット端末のGoogleChromeで一部テキストが大きく表示されてしまう場合の対処

タブレット端末のGoogleChromeでページを閲覧していたら、
**一部テキストが勝手にフォントサイズを上げられしまっていた。**

#単刀直入、対処法。
該当要素に以下のCSSを追加。
フォントサイズが指定した通りの大きさに戻った。
```max-height:999999px;```

#残った疑問
上記の方法で現象自体は直るけど、
そもそも**ブラウザ側で文字サイズを指定外のサイズまで大きくする意図**は・・・？

全体的に一律でテキストのフォントサイズが上がるならまだしも、
なぜ**「一部」**なのだろう。
Singletonのアロケータを後から指定 (shared_ptrを使用したSingletonの実装の続き)

新しいの書きました
[アロケータを指定できて参照がなくなった時点で破棄されるSingleton](http://qiita.com/block/items/a076c9b57c11faa1facc)



# アロケータを後から指定

一応[shared_ptrを使用したSingletonの実装](http://qiita.com/block/items/5604104ab2b0392590aa)の続きです。

allocate_sharedが使えないこともありかなり微妙な実装になります。

**2016/06/29**
[shared_ptrを使用したSingletonの実装](http://qiita.com/block/items/5604104ab2b0392590aa)の方のコードを変更したのでこちらも変更しました。
deleterの中でデストラクタ呼び出しも指定なかったので修正ついでにallocator_traitsを使用したコードに書き換え。
でも派生クラスのコンストラクタがprivateだと結局construct使えずにplacement newするしかない。
どうにかならないものか。

## 実装
先にこんな感じのものを定義します

```cpp
template <typename T>
struct singleton_allocator
{
  using type = std::allocator<T>;
};
```

singleton本体の実装はこんな感じ

```cpp
template <typename T> class singleton
{
private:
  using allocator = typename singleton_allocator<T>::type;

protected:
  singleton() = default;

public:
  virtual ~singleton() = default;

  singleton( singleton const& ) = delete;
  singleton& operator=( singleton const& ) = delete;

public:
  static std::shared_ptr<T> get_instance()
  {
    auto ret_ptr = instance_.lock();
    if( ret_ptr )
    {
      return ret_ptr;
    }

    using traits = std::allocator_traits<allocator>;

    auto pointer = traits::allocate( allocator_, 1 );
    //traits::construct( allocator_, pointer );
    ::new( pointer ) T{};

    auto deleter = []( T* ptr ) {
      //traits::destroy( allocator_, ptr );
      ptr->~T();
      traits::deallocate( allocator_, ptr, 1 );
    };

    ret_ptr   = std::shared_ptr<T>( pointer, deleter );
    instance_ = std::weak_ptr<T>( ret_ptr );
    return ret_ptr;
  }

private:
  static std::weak_ptr<T> instance_;
  static allocator        allocator_;
}; // class singleton

template <typename T> std::weak_ptr<T>                 singleton<T>::instance_;
template <typename T> typename singleton<T>::allocator singleton<T>::allocator_;

```

内部でallocatorを持っているのとget_instance()の中身が前回と違うところです。

my_allocatorという名前のアロケータとAという名前のSingletonがあるとすと

```cpp
class A; // 前方宣言

// 特殊化
template <> struct
singleton_allocator<A>
{
  using type = my_allocator<A>;
};
```

こうすることでAの時のアロケータを指定できる。
これは必ずAの定義前に書かなければならない。

## まとめ
正直かなり面倒だけどアロケータの指定ができる。

他のことにも使えそう。

指定できないよりもできたほうが良いかなって思って書いてみたけどなかなか面倒。

ちなみに

```cpp
template <typename T, typename Allocator> class singleton{ ... };
```

みたいなのはAllocatorの型が変わるとsingletonの型も変わってしまうので使わない。

## 追記
一応これでできる…

```cpp
    auto pointer = traits::allocate( allocator_, 1 );
    struct impl : public<T> {};
    traits::construct( allocator_, reinterpret_cast<impl*>(pointer) );
```

これどうなんですかね。
MySQL の Json array型変数から要素を分解しテーブル作成

こんにちは。
MySQL の Json の array型変数から要素を分解しテーブルを作ってみました（縦に並べ替え）[^1] [^2]。ただし実行効率が悪く実用性は疑問です。

[^1]: 「[MySQL の検索結果を Json array型にする方法](http://qiita.com/kkdd/items/f9c0b064439d450501b3)」の逆に当たります。
[^2]: なお、Postgresql は、これを行うための ```unnest（）```関数を持っているそうです（[PostgreSQLのあまり知られていない型3種](http://qiita.com/choplin/items/9d5e2ff8721fb9509bf8)）。

```mysql
set @jarr = json_array(json_array(0), json_array(1,2), json_array(3,4,5));
set @jarr_len = json_length(@jarr);
select @jarr as json_array;
+--------------------------+
| json_array               |
|--------------------------|
| [[0], [1, 2], [3, 4, 5]] |
+--------------------------+

set @i = -1;
PREPARE SET_STMT FROM 'SELECT JSON_EXTRACT(@jarr, concat("$[", (@i:=@i+1), "]")) as json_array_unnested from my_tall_table limit ?';
EXECUTE SET_STMT USING @jarr_len;
+-----------------------+
| json_array_unnested   |
|-----------------------|
| [0]                   |
| [1, 2]                |
| [3, 4, 5]             |
+-----------------------+
```

上記では、既存のテーブル ```my_tall_table``` が事前に存在していると仮定しています。このようなテーブルを作る方法例は、

```mysql
CREATE TABLE my_tall_table (id int) ENGINE=MyISAM;
INSERT INTO my_tall_table (id) VALUES (0);
INSERT INTO my_tall_table (id) SELECT 0 FROM my_tall_table; // これを複数繰り返してレコード数を増やす

SELECT CASE WHEN COUNT(*) >= @jarr_len THEN 'true' ELSE 'false' END as 'height(my_tall_table) >= @jarr_len' FROM my_tall_table
+------------------------------------+
| height(my_tall_table) >= @jarr_len |
|------------------------------------|
| true                               |
+------------------------------------+

```

-------------
CrystalでParameterizedテストをする際のイディオム

![title.png](https://qiita-image-store.s3.amazonaws.com/0/43480/2256d0c5-9c5b-6cc1-4e14-52cd5a013fcc.png)

CrystalでParameterizedテストをする際のイディオムについてまとめます。

## <i class='fa fa-flask'></i> サンプル
※以下のコードは Crystal の作者である Ary Borenszweig さんにコメントにて指摘していただき、
修正していただいたバージョンです。Ary Borenszweig さんありがとうございます

```crystal
require "spec"

module FizzBuzz
  extend self

  def fizzbuzz(limit)
    (1..limit).each_with_object([] of String) do |e, memo|
      memo << case
      when e % 15 == 0 then "FizzBuzz"
      when e % 5 == 0  then "Buzz"
      when e % 3 == 0  then "Fizz"
      else                  e.to_s
      end
    end
  end
end

def assert_fizzbuzz(kace, limit, expected)
  it kace do
    actual = FizzBuzz.fizzbuzz(limit)
    actual.should eq(expected)
  end
end

module FizzBuzz::Test
  describe "fizzbuzz" do
    assert_fizzbuzz "Fizz only", 3, ["1", "2", "Fizz"]
    assert_fizzbuzz "Fizz, Buzz", 5, ["1", "2", "Fizz", "4", "Buzz"]
    assert_fizzbuzz "Fizz, Buzz, FizzBuzz", 15, ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"]
  end
end
```

### <i class='fa fa-play'></i> 実行
```bash
$ crystal spec
...

Finished in 0.63 milliseconds
3 examples, 0 failures, 0 errors, 0 pending
```

## <i class='fa fa-files-o'></i> Snippet
atom_crystal_snippet という Atom の Snippet を公開しています。  
この Snippet に Parameterized テストをする際のイディオムを追加しました。

[atom_crystal_snippet_tb - atom.io][atom_crystal_snippet_tb - atom.io]

[atom_crystal_snippet_tb - atom.io]: https://atom.io/packages/atom_crystal_snippet_tb
Visual C++でソースコードの文字コードをUTF-8にする

# 方法
プロジェクトのプロパティを開く => 構成プロパティ => C/C++ => コマンドライン
追加のオプションの欄に"/utf-8"と記述

![image](https://qiita-image-store.s3.amazonaws.com/0/66029/2c44f107-4601-3eb1-ec9f-7f34898365a3.png)


# 結果
![image](https://qiita-image-store.s3.amazonaws.com/0/66029/754bac29-0a31-9dff-fb20-138cf8bd0baa.png)

※ウォッチ式中で , s8 と記述するとutf8として変数を扱います

# 参考
https://msdn.microsoft.com/en-us/library/mt708819.aspx
DraggableViewsに関するTips

#仕様
- Viewsでコンテンツの一覧を表示する
- 上記の一覧では、DraggableViewsを使い、表示順を変更できる
- 表示順の変更後、「順番の保存」ボタン押下時に、Rulesで並び替えられたことを検知する

#課題
DraggableViewsはRulesのイベントを定義しているので、
順番の変更が行われたことをRulesで検知することは容易。
ただし、何のコンテンツの順番が変更されたかを知る手段がない。
（複数画面でDraggableViewsを使い、コンテンツを並び替える機能がある場合、
どの画面で並び替えられたか検知できない）

#機能実現
そこで、以下の実現手段を考えた。

```php:MYMODULE.draggableviews.inc.php
/**
 * Implements hook_draggableviews_handler_native_arguments_alter().
 */
function MYMODULE_draggableviews_handler_native_arguments_alter(&$arguments, $view, &$form_values) {
  $node = node_load($view->nid);
  rules_invoke_event_by_args('MYMODULE_rules_event_contact_list_sorted', $node);

}
```

```php:MYMODULE.rules.inc.php
/**
 * Implements hook_rules_event_info().
 */
function MYMODULE_rules_event_info() {
  $items = array(
    'MYMODULE_rules_event_contact_list_sorted' => array(
      'label' => t('A contact list has been sorted'),
      'group' => t('MYMODULE'), 
      'variables' => array(
        'node' => array(
          'type' => 'node',
          'label' => t('node'),
        ),
      ),
    ), 
  );
  return $items;
}
```

DraggableViewsのAPIで順番の変更をハンドリングし、
自前で作ったRulesのイベントを呼んであげる。
すると、Rulesの Condition と Action で ノード情報 が使えるため、
コンテンツタイプを判定することが可能となる。

#おわりに
DraggableViewsとRulesとで機能実現を行った。
もっとスマートな実現方法があればご教示いただきたく。

#後日談
[views_get_page_view()](https://api.drupal.org/api/views/views.module/function/views_get_page_view/7.x-3.x)が便利。

フックのパラメータに$viewが無い場合、
views_get_page_view()を使えば、
$viewを取得し、利用できる。
ruby アップデートの仕方


#rbenvの確認
`$ rbenv --version`

#ruby-buildのインストール
`$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build`

これをやると、
`$ rbenv install --list`これを実行した時に、

rubyのインストールできるバージョンの最新版が表示されるようになる。


#自分が入れたいバージョンのrubyをインストールする

`$ rbenv install --list`　　これで自分が入れたいrubyのバージョンを確認

`$ rbenv install -v 2.3.1`　　これで、2.3.1がインストールされる。

#インストールされているrubyのバージョンの確認
```
$ rbenv versions

* system (set by /Users/m.k/.rbenv/version)
  2.1.3
  2.3.1
```
この状態は、2.3.1をinstallしただけになっていて、まだ前のrubyのバージョンのままになっている。


#バージョンを上げる

`$ rbenv global 2.3.1`

これをやれば、おk。

```
$ rbenv versions

* system (set by /Users/m.k/.rbenv/version)
  2.1.3
  2.3.1
```
・・・。
そう、pathを通さなければいけない。

#環境設定
```
# PATH に追加
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

# .bash_profile に追加
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

# 上記設定の再読み込み
$ exec $SHELL -l
```

これで、

```
$ rbenv versions

  system
  2.1.3
* 2.3.1 (set by /Users/m.k/.rbenv/version)
```

無事、バージョンアップ完了。
DockerとAPI BlueprintでAPI仕様書とモックを同時に作成する



仕事でAPI仕様書を書く時にWiki以外の方法で管理したいと思ったので、[API Blueprint](https://apiblueprint.org "API Blueprint")というのを使ってみることにしました。


# API仕様ページとMockAPIの作成

## 手順

最初に仕様ページ、次にMockの順で作成していきます

1. API Blueprint用のDocker container立ち上げ
2. npmでaglioのインストール
3. api.apib、api.md、api-test.jsonの作成
4. aglio起動
5. ブラウザでページを見てみる
6. npmでapi-mockインストール
7. api-mock起動
8. ブラウザでページを見てみる

5の時点で仕様ページが確認出来、8まで終わればMockAPIを確認することが出来ます


## API Blueprint用のDocker container立ち上げ

```
docker run --rm -it -p 3000:3000 --name api-blueprint takashioshikawa/npm
```


## npmでaglioのインストール

```
npm install -g aglio
```

## api.apib、api.md、api-test.jsonの作成

現在のディレクトリは

```
/home
```

[ここ](https://github.com/danielgtaylor/aglio/blob/master/example.apib "ここ")の.apibと
[ここ](https://github.com/danielgtaylor/aglio/blob/master/example-schema.json "ここ")のJSON
をそれぞれ
`api.apib`と`api-test.json`という名前で保存してください

api.mdは自作します

```
touch api.md
```

編集していきます

```api.md:api.md
# GET /message
+ Response 200 (text/plain)

        Hello World!
```

messageというリソースにGETメソッドでアクセスします
レスポンスはテキストで`Hello World!`

APIの書き方は[API Blueprint公式](https://apiblueprint.org/documentation/specification.html#def-body-section "")か[このGitHub](https://github.com/apiaryio/api-blueprint/tree/master/examples "")を見てみてください



## aglio起動

```
aglio -i api.apib -s -h 0.0.0.0
```

オプションの`-h 0.0.0.0`はhost指定です
ポートは初期で3000番なので今回のコンテナの場合指定しなくても問題無いです
ポート指定オプションは`-p 3000`

aglio起動のオプション一覧(ソース)
[https://github.com/danielgtaylor/aglio/blob/master/src/bin.coffee](https://github.com/danielgtaylor/aglio/blob/master/src/bin.coffee "")


## ブラウザでページを見てみる

まずはdocker-machineのIPを調べる
`docker-machine ip VM名`

```
http://192.168.99.100:3000
```


![スクリーンショット 2016-06-28 22.18.16.png](https://qiita-image-store.s3.amazonaws.com/0/36871/c63d4ec3-e39c-8d62-6294-85067f1974fb.png "スクリーンショット 2016-06-28 22.18.16.png")

ちゃんと表示されていますね


次は実際にMockAPIとして機能させてみます


# Mockサーバーの作成


## npmでapi-mockインストール

```
npm install -g api-mock
```


## api-mock起動

```
pwd> /home

api-mock ./api.md --port 3000
```


## ブラウザでページを見てみる

まずはdocker-machineのIPを調べる
`docker-machine ip VM名`

```
http://192.168.99.100:3000/message
```

にブラウザからアクセス

"Hello World!"と出力されていればOKです




## 所感
簡単ではありましたがこれでMockにもなるAPI仕様ページを作成出来るようになりました

記述方法はもっと調べていきたいと思います

今回は以上ですー
Swift2でナビゲーションバーの背景・文字色・区切り線をカスタマイズ


Swift2でナビゲーションバーの特に下線の色変更を行う際に調べるのに手間取ったため、記事にしました。

**実行イメージ**
![sample.png](https://qiita-image-store.s3.amazonaws.com/0/57579/93299740-b3f3-029b-ee41-fee4f597efef.png)

[ソースコードはこちらからもダウンロードできます](https://github.com/Synashida/NavigationControllerCustomSwift2/tree/master)

```
// MARK: - NavigationBarの下部に線を引くのと背景色の設定
extension UINavigationController {

    /**
     ナビゲーションバーの色を共通色に設定し、下線を引く

     - parameter animated: <#animated description#>
     */
    override public func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        // ナビゲーションバーに下線を加える
        let bottomLine = CALayer()
        bottomLine.frame = CGRectMake(0, self.navigationBar.frame.size.height - 1, self.view.frame.width, 1)
        bottomLine.backgroundColor = UIColor.orangeColor().CGColor
        self.navigationBar.layer.addSublayer(bottomLine)

        // ナビゲーションバーの背景色設定
        self.navigationBar.barTintColor = UIColor(red: 255/255, green: 242/255, blue: 228/255, alpha: 1.0)
        // ナビゲーションバーの文字色設定
        self.navigationBar.tintColor = UIColor.orangeColor()
        self.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName : UIColor.orangeColor()]
    }
  }
```
特定のS3バケットにのみアクセスできるユーザーの作成

AWSで、S3の特定のバケットにのみアクセスできるユーザーの作成方法です。

例えば、upload-testというS3バケットにのみアクセス可能なユーザーを作成したい場合は、IAMのインラインポリシーで、以下のように記述します。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::upload-test"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:DeleteBucketWebsite",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload"
            ],
            "Resource": "arn:aws:s3:::upload-test/*"
        }
    ]
}
```

このユーザーのAWS ACCESS KEYを渡しておけば、AWS CLIやS3 Browser等のGUIツールで、upload-testというS3バケットにのみアクセス可能となります。

※他バケットはアクセスは不可能ですが、バケット一覧は取得できますので、バケット名は確認できてしまいます。
shared_ptrを使用したSingletonの実装

新しいの書きました
[アロケータを指定できて参照がなくなった時点で破棄されるSingleton](http://qiita.com/block/items/a076c9b57c11faa1facc)


# 参照が0になった時点で破棄されるsingleton
普段私が使っているsingletonを他で見ることがないので書き残しておく

## 実装

~~コピー禁止の処理とか書くの忘れてました。
適当に補完しておいてください。~~
コード書き換えたついでに書きました。


```cpp
#include <memory>

template <typename T> class singleton
{
protected:
  singleton() {}
public:
  virtual ~singleton() {}

  singleton( singleton const& ) = delete;
  singleton& operator=( singleton const& ) = delete;

public:
  static std::shared_ptr<T> get_instance()
  {
    auto ret_ptr = instance_.lock();
    if( !ret_ptr )
    {
      ret_ptr   = std::shared_ptr<T>( new T{} );
      instance_ = std::weak_ptr<T>( ret_ptr );
      return ret_ptr;
    }

    return instance_.lock();
  }

private:
  using allocator = typename singleton_allocator<T>::type;
  static std::weak_ptr<T> instance_;
}; // class singleton


template <typename T> std::weak_ptr<T>  singleton<T>::instance_;
```

## 使い方
```cpp
class A : public singleton<A>
{
private:
  frinend class singleton<A>;
  A() {} // コンストラクタをprivateに
};

int main()
{
  std::shared_ptr<A> a1 = A::get_instance(); // ここでインスタンスが生成される
} // スコープを抜けて参照が0になった時点で破棄される
```

## 注意点など
createやdestroyを呼ぶ必要が無いのは良いですが他と比べるとわかりづらい気もします。  

インスタンスが生成されてないタイミングで

```cpp
A::get_instance();
```

だけを書くと生成した瞬間に破棄されます。

```cpp
auto a = A::get_instance();
```

このように、必ず参照する変数を保持してください。
Rubyで定数モジュールを作った時に二重で定数を書かずに済む方法

Rubyでconstantクラスを作った時にちょっとした気づきがあったのでメモです

「定数がいろいろと定義されている中で一部違うんだけど、他の定数はほぼ同じ」みたいな状況の中でただダラダラと書いていくとこんな感じになります
DRYじゃないですね

```rb
module HogePolicy
  module Limited
    NAME = '規制'
    MAX_SUM = 30
  end

  module Unlimited
    NAME = '有料'
    MAX_SUM = Float::Infinity
  end

  module Trial
    NAME = '試用'
    MAX_SUM = Float::Infinity
  end
end
```

で、こういうの何かできないかなーって思ってたんですけど、よくよく考えてみると `include` 使えば良いんじゃ無いってなってやってみたらできてしまいました
定数の数が増えると効果が目に見えて出てきます

```rb
module HogePolicy
  module Limited
    NAME = '規制'
    MAX_SUM = 30
  end

  module Unlimited
    NAME = '有料'
    MAX_SUM = Float::Infinity
  end

  module Trial
    include HogePolicy::Unlimited

    NAME = '試用'
    # MAX_SUMは定義されている
  end
end
```

ちなみにこういうのを呼び出すときも `Limited` にするか `Unlimited` にするか `Trial` にするかみたいなロジックを書こうとした時にModelクラスにenum作って、更に判定メソッド作っておくとview側でスッキリ書けます

```rb
class User < ActiveRecord::Base
  enum limiter: {
    limited: 'limited',
    unlimited: 'unlimited',
    trial: 'trial'
  }

  def limitation
    if limited?
      HogePolicy::Limited
    elsif unlimited?
      HogePolicy::Unlimited
    elsif trial?
      HogePolicy::Trial
    end
  end
end
```

こういう感じで書いておけば `user.limitation` を呼び出せば自然とそのユーザのステータス定数を持ってくることが可能なので便利です
特にerrorハンドリングなどのところとかに `HogePolicy::ステータス` とか書かなくて済むので、スッキリした感じになります
地味に好きな書き方です
【Docker】プライベートレジストリ`--insecure-registry`OSごと設定まとめ

# --insecure-registryOSごと設定まとめ
+ dockerでprivate registryにpushするときに、OSごとに違うのでまとめてみた

![c7e09bb7-7e4a-8df9-29c7-f6fcb48aa6f2.png](https://qiita-image-store.s3.amazonaws.com/0/62822/cd7e714c-55a3-c473-faa3-ec81b7b67664.png)



## CentOS

```
# /etc/sysconfig/docker
export other_args="--insecure-registry ooooo.oooo.com:5000"
```

## Docker for Mac
+ GUIで設定するらしい[Docker for Mac --insecure-registry の設定方法](http://qiita.com/gimupop/items/593a2cf63fb708cb556b)

## docker-machine
```
docker-machine ssh default \
"echo 'EXTRA_ARGS=\"--insecure-registry host.sever.name:port\"' \
| sudo tee -a /var/lib/boot2docker/profile \
&& sudo /etc/init.d/docker restart"
```

## boot2docker
```
$ sudo vi /var/lib/boot2docker/profile

 　EXTRA_ARGS="--insecure-registry ooo.oooo.com:5000"
```

## CoreOS
```
#cloud-config

coreos:
  units:
    - name: "docker.service"
      drop-ins:
        - name: "50-insecure-registry.conf"
          content: |
            [Service]
            Environment='DOCKER_OPTS=--insecure-registry="host:port"'
```

## RancherOS
```
$ sudo ros config set rancher.docker.args "['daemon','--insecure-registry','docker.ooo.com:5000']"
```

## その他
+ あれば追加いたします！

## 参考にした記事
+ [CentOSでDockerの`--insecure-registry`を指定する](http://qiita.com/ikuo/items/27aa815d8f6bbdd42b7c)
+ [Docker for Mac --insecure-registry の設定方法](http://qiita.com/gimupop/items/593a2cf63fb708cb556b)

+ ありがとうございました！
Cloud9のMySQLで日本語を使う時のポイント

Cloud9のMySQLで日本語を使うときのポイントをまとめておく。

# (1) MySQLの設定

以下のサイトを参考にさせていただきました。
*「[Cloud9でMySQLの文字化けを治す](http://qiita.com/mjunya1030/items/02f2d77e814f8494cf38)」
### my.cnfをviで編集。(my.cnfは/etc/mysqlにある。)

(以下の行をそれぞれのセクションに追加)
```
[mysqld]
character-set-server=utf8
[client]  
default-character-set=utf8
```
# (2) 「？？？」と表示されてしまう場合の対処

データベース作成時に文字コードを指定。 
```
CREATE DATABASE sample DEFAULT CHARACTER SET utf8;
```

以上。
Linux | $ gunzip -c [file_name] | 圧縮ファイルを解凍せずに中身を見る ( zcat が使えない環境で )

正確にいうと、解凍先のファイルを作らずに中身だけ見る方法。

# 例

```
$ gunzip -c the_heart_of_pretty_woman.gz
```

普通に中身が表示される。

```
I HATE YOU!
BECAUSE
YOU ARE PEEPING TOM
```

# 応用

圧縮ファイルの行数を数えたり。
色々と使えそう。

```
$ gunzip -c heart_of_pretty_woman.gz | wc -l

```

```
       3
```

# 参考

- http://superuser.com/questions/135329/count-lines-in-a-compressed-file








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Rails Tutorial のhello appをIBM Bluemixにデプロイしようとしてはまった件

## 経緯
Rails Tutorialをやっていて、ローカルやHerokuではちゃんと動作するのにIBM Bluemixではそのままデプロイできませんでした。
manifest.ymlやコマンドの実行などで上手くいっていないと思いきや、ログをちゃんと見てみるとデータベースの問題でした。hello appではデータベースを使っていなかったため、かなり盲点となってはまりました。

結果的には、Gemfileで以下の設定がされていました。（抜粋）

```
group :development, :test do
  gem 'sqlite3', '1.3.9'
end

group :production do
  gem 'pg', '0.17.1'
end
```

Herokuではsqliteが使用できないようなので、hello appではデータベースを使わないのに、データベースをpostgresに変更しています。しかしdatabase.ymlにデフォルトのデータベースとしてsqliteを設定しているため、sqliteをロードしようとして、エラーになっていたようです。
Herokuではtoy appでもdatabase.ymlは変更していないので、そこは見ていないということなのでしょうか。
とりあえずIBM Bluemixでデプロイするときは、sqliteをインストールするようにGemfileを変えたら動きました。

```
group :development, :test do
#  gem 'sqlite3', '1.3.9'
end

group :production do
#  gem 'pg', '0.17.1'
end

gem 'sqlite3', '1.3.9'
```

* 2016/6/29追記

cf pushでローカルのコードを直接アップロードしていたため、何度か試して上手くいかないことがあったので追記します。
.bundle/config
に、
BUNDLE_WITHOUT: production
が設定されていたため、Bluemixにアップロードされる時に、configもアップロードされ、productionグループの部分がインストールされませんでした。私の場合は、そこにsqliteを記載されていなかっためインストールされずデータベースの部分でエラーとなっていました。
gitリポジトリを作成して、.gitignoreに.bundle/configを設定して、gitのリポジトリ経由でアップロードすれば回避できたと思います。
R-3.3.1インストレーションの設定

R-3.3.1　のソースを使い、インストールした時に使用した環境設定。
/N/soft/rhel6/　のディレクトリーは、システム上でnfsマウントされたソフトをインストールする場所である。

```export LDFLAGS=" -L/N/soft/rhel6/zlib/1.2.8/lib \
-L/N/soft/rhel6/bzip2/1.0.6/lib \
-L/N/soft/rhel6/xz/5.2.2/lib \
-L/N/soft/rhel6/pcre/8.39/lib \
-L/N/soft/rhel6/curl/gnu/7.28.1/lib"
```
```export CFLAGS="-I/N/soft/rhel6/zlib/1.2.8/include \
-I/N/soft/rhel6/bzip2/1.0.6/include \
-I/N/soft/rhel6/xz/5.2.2/include \
-I/N/soft/rhel6/pcre/8.39/include \
-I/N/soft/rhel6/curl/gnu/7.28.1/include"
```
Railsでモデルクラスを名前空間にした結果

Railsで`モデル::サブクラス`のようなクラスを立てていたところ、ひどいことになりました。

# TL;DR
* Railsで、クラスを名前空間として使うのは（1ファイルに書くもの以外では）やめたほうがいい
* どうしても必要な場合には、事前に`require_dependency`しておく

# 失敗例

まず、ActiveRecordのモデルとして`Card`がありました。

```rb:app/models/card.rb
class Card < ActiveRecord::Base
  # 略
end
```

そして、ジョーカーだけ特別扱いしたくなったので、[ActiveType](http://qiita.com/jkr_2255/items/271ed85e03c0ae27d5e5)を使って、`Card::Joker`というサブクラスを作りました。

```rb:app/models/card/joker.rb
class Card
  class Joker < ActiveType::Record[Card]
    # 略
  end
end
```

これだけでも、状況によってはサーバが死にます。エラーメッセージを和訳してみると、「基底クラスが一致しません」ということでした。

## 何が起きたの？
本番環境では、Railsは全クラスを事前にロードしようとします。そして、先に`app/models/card/joker.rb`を呼んでしまうと、外側の`class Card`行で、`Object`を基底クラスとした`Card`クラスが作成されてしまいます。そうなればもはや手遅れで、あとから正しい`app/models/card.rb`をロードしようとしても、基底クラスが合わないのでエラーとなります（なお、すでにクラスが定義されている場合には、再オープンする方に基底クラスを書かなくても大丈夫です）。

# 解決策
## モジュールにしておく
クラスでなくてモジュールの場合、「基底モジュール」なんてものは存在しないので、すべてが`module SomeModule`の表記になります。どれから先にロードされても、全く問題ありません。

## 外側のクラスを確実にロードさせる
そうもいかない場合、上の例では`app/models/card/joker.rb`で、`class Card`と再オープンを行う前に、`require_dependency 'card'`としておくことで、正しい`Card`のロードを先に行わせれば、`Object`クラス由来のクラスを作ってしまうことなく処理できます。
RailsのTimeWithZoneクラスのto_s(:db)はUTCを返す

# 概要

タイトルまんまですが、Railsの`TimeWithZone`クラスの`to_s`メソッド（`to_formatted_s`メソッドのエイリアス）でフォーマットを指定する際、`:db`だけはなぜかUTCに変換された文字列を返します。

# 解決策

`time_with_zone.to_time.to_s(:db)`みたいに、`to_time`を呼んで`Time`クラスに変換すればUTCにはならないです。

# 参考資料

http://d.hatena.ne.jp/libkazz/20120403/1333478347
[Raspberry Pi]音声でゴミ出し日をお知らせ

## はじめに

タイトルの通りのことをやったわけだけどいろいろ大変で、
ちゃちゃっとできるつもりだったが結局休日一日持っていかれてしまった。

## 背景

ゴミ出し日を把握するのが苦手で、というよりも把握するつもりがなくて、
ベランダのペットボトルとビン・缶がどんどん溜まっていく。
そろそろどうにかしないわけにはいかなくなった。
そこで区のホームページでゴミ出し日を確認してみると

>燃やせるゴミ: 水曜日・土曜日
>燃やせないゴミ: 第二火曜日・第四火曜日
>資源: 金曜日

とあった。
「出せるもんなら出してみな」という台◯区からのメッセージが見え隠れしている。
燃やせないゴミのスケジュールは特にエグい。

というわけでラズベリーパイにゴミ出し日の前日に音声で知らせてもらうことにした。

打倒台◯区。
ゴミというゴミを出してやるぜ。

## 用意したもの

Raspberry Pi 2 Model B
USBスピーカー*

*USBスピーカーは消費電力が高いものを選ぶとラズパイが死ぬ可能性あるっぽい

![IMG_5760.JPG](https://qiita-image-store.s3.amazonaws.com/0/74529/53228ddb-2ad8-8073-3b6d-a0c80f3d1f69.jpeg)

## Open JTalkをインストール

まずは日本語音声がないと始まらない。
調べてみるとOpen JTalkを使うのが一般的らしい。

以下を参考にインストール
http://raspi.seesaa.net/article/415482141.html

インストールの手順は書いてある通りで何も問題なかったので詳細は割愛。
サンプルファイル（jsay）のアップまでしてくれていて圧倒的感謝。
こういう素晴らしい大人になりたいと思うものだ。

無事インストールが完了したので確認のため「こんにちは」と喋らせようとしたときに気づく。

「日本語の入力方法がわからないッ！！」

## 日本語入力設定

ググると様々な設定方法が出てきて混乱した上、
そのうちいくつかはなんか上手くいかなくて泣きたくなった。

「日本語を入力できない...」
何度もそうつぶやくうちに、パソコン教室にでも通う必要があるんじゃないかと思い始めるほど辛くなった。

ハマること一時間、以下を参考にしたらなんとか無事入力できた
http://marupeke296.com/IKDADV_PI_Japanese.html
青いアイコンのやつ。

がしかし設定完了直後、別のマシンからSSH接続して作業すれば日本語入力設定なんかしなくてもよかったことに気づいて、
それ以来Macから操作している。
あの一時間は一体なんだったのか

## USBスピーカーから音を出す

単に`sudo raspi-config`でaudio設定しただけでは音が出なかったのでググってみると、いろんな人が苦戦していてやばさを感じた

HDMIだと音が出るし、
ヘッドホン端子を使っても音が出る。
なのに、USBだと音が出ない！

スピーカーのパッケージに「簡単」ってでっかく書いてあったのに全然簡単じゃない

やはりパソコン教室に通うしかないのか。

さんざんガチャガチャやっても手応えがなくて絶望ムードが漂いはじめていたが、
以下のページを参考に`/usr/share/alsa/alsa.conf`を修正したらどうにか音が出た
http://www.tapun.net/raspi/raspberry-pi-usb-speaker

このページがなかったら諦めていたかもしれない。感謝。

書かれている通り、ヘッドホン端子が優先されていたようで優先度を変更する必要があったらしい。
スピーカーから「こんにちは」が聞こえたときは感動だった。


## cronの設定

あまり特別なことはないけど唯一頭をひねったのは「燃えないゴミの日は第二火曜日と第四火曜日」という縛り。

ドクターイエロー*かお前は

*大体二週間に一度走っている黄色の新幹線。見ることができるとラッキーらしい。

![IMG_5764.PNG](https://qiita-image-store.s3.amazonaws.com/0/74529/b2a0b9ef-d20f-82c6-5018-2c7cf7c34e29.png)

「第何週目」を指定してタスクを実行する方法については以下が参考になった
http://shinsuke789.hatenablog.jp/entry/2015/08/07/123000

なるほど。
日にちが8-14であれば第二週なのでその間毎日cron実行。
かつdate '+%w'で曜日を判断して、一致すればjsayコマンドを実行すれば良いということか。

こんな感じで設定してみた

```
1 21     * * * [ "$(date '+\%w')" -eq 4 ] && jsay "こんばんわ 明日は資源ごみの日です ダンボールやペットボトルもこまめに捨ててしまいましょう"
2 21     * * * [ "$(date '+\%w')" -eq 2 ] && jsay "こんばんわ 明日は燃やせるゴミの日です 生ごみは早めに捨てないと匂いが大変ですよ"
3 21  8-14 * * [ "$(date '+\%w')" -eq 1 ] && jsay "こんばんわ 明日は燃やせないゴミの日です 二週間に一度のチャンスですよ"
4 21 22-28 * * [ "$(date '+\%w')" -eq 1 ] && jsay "こんばんわ 明日は燃やせないゴミの日です ご主人様 大好きです"

```
実行時間が被るとなんとなく嫌な感じがしたので分をずらしてみた。
意味はないかもしれないが。

## 結果

設定後初めて迎えた火曜日21時2分。
「こんばんわ 明日は燃やせるゴミの日です 生ごみは早めに捨てないと匂いが大変ですよ」
とスピーカーから流れた。

嬉しい。
これでまたひとつ暮らしが便利になった。

![IMG_5765.JPG](https://qiita-image-store.s3.amazonaws.com/0/74529/fe0d4674-f805-f222-68d6-6aadd3fbdd7d.jpeg)

以上
jsdoでshadertoy sandbox その6

#概要
jsdoでshadertoyのコードを実行したい。
samplerCubeを使いたい。
#成果物
http://jsdo.it/ohisama1/Iemv
#写真
![ttt.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/6c1a9793-7802-81b8-fa8f-32e73fa2bcf9.jpeg)

#サンプルコード
```
precision mediump float;
uniform vec2 iResolution;
uniform float iGlobalTime;
uniform samplerCube iChannel0;
    
void mainImage(out vec4 f, vec2 w) 
{
    vec4 p = vec4(w, 0, 0) / iResolution.x - .55, d = p, t, c;
    float T = iGlobalTime, C = cos(T), S = sin(T);
    p.z -= T + T;
    for (float i = 2.; i > 0.; i -= .01)
    {
        t = mod(p, 8.) - 4.;
        t.zy *= mat2(C, S, -S, C);
		c = textureCube(iChannel0, t.xyz);
        t = c + length(t.xyz) - 2.7;
        if (t.x < .01) break;
        p -= d * t.x * .2;
        f = c * i;
    }
}
void main() 
{
    vec4 color = vec4(0.0, 0.0, 0.0, 1.0);
    mainImage(color, gl_FragCoord.xy);
    color.w = 1.0;
    gl_FragColor = color;
}   
```
#説明
TEXTURE_CUBE_MAPを実装した。
jsonを標準入力で受け取って見やすいように整形して表示するワンライナー

curlなどで返ってきたjsonを見やすいように整形し、標準入力に出力する
### php
```
$ echo '{"some":"json"}' | php -r 'var_dump(json_decode(fgets(STDIN)));'
object(stdClass)#1 (1) {
  ["some"]=>
  string(4) "json"
}
```
### perl
```
echo '{"some":"json"}' | perl -MJSON -E 'say to_json decode_json(<>), { pretty => 1 }'
{
   "some" : "json"
}
```
OSXではデフォルトでJSONライブラリは入っていない

```
# install
$ cpan JSON
```
[Linux] Count the total size of special files

If you want to count the total size of special files. For example if you want to calculate the total size of files which name includes "daily". Then you can use this command to get the result.

```
find . -name "*daily*" | xargs du -ch
```

This will list all the files which name includes "daily" and count the total size of these files.

The output will like this:

```
4.0K	./2016_06_28_daily.log
4.0K	./2016_06_29_daily.log
4.0K	./2016_06_30_daily.log
4.0K	./2016_07_01_daily.log
4.0K	./2016_07_02_daily.log
4.0K	./2016_07_03_daily.log
 24K	total
```

*If you have some better methods, please tell me :)*
mackerelでLOG UNKNOWN: strconv.ParseInt: parsing "": invalid syntax

たまに出くわして、その度に忘れているのでメモ。

![9e58fce57761cc16b47aead2155a8e32.png](https://qiita-image-store.s3.amazonaws.com/0/35415/98dbb293-9a9f-23d4-8aa6-99e154c19ebc.png)


/var/mackerel-cache/check-log/（中略）/（中略）.log
が、なぜか空ファイルになり、記載されている整数値がないのでParseでコケている模様。

このファイルを削除して、再起動。
SQS+BeanstalkでSpringBootのworkerアプリを構築する

キューを使ったシステムというのを自分で実装したことがなかったので、社内AWS勉強会のネタもかねて、SQSに挑戦してみました。

## 全体構成

AWSが提供するメッセージキューサービスである「SQS」にデータを登録すると、AWS ElasticBeanstalkで構築したworkerアプリ(SpringBoot製)がキューを処理していくという作りです。


workerについてはこちらを参考に。
http://dev.classmethod.jp/cloud/aws/aws-job-worker-beanstalk/

> このWorker tierが実によくできているんです。この環境で提供されるEC2の中ではaws-sqsdというデーモンが動いており、指定したキューのメッセージをポーリングしてくれます。メッセージが配信されてくると、aws-sqsdは、そのメッセージをlocalhostに対して、HTTP POSTしてくれる、という仕組みです。

バッチを作ってキューのメッセージを取得しているのが通常だと思うのですが、そこの作りこみがしなくてもいいのが素晴らしいですね。既存アプリにキューを挟みたい場合の手間も軽減されます。


## 実際動かしてみる

キューを取得して、Chatworkに通知するworkerアプリを動かしてみます

### workerアプリのビルド

サンプルアプリをGitHubから取ってきて、ビルドします。

```
git clone https://github.com/nyasba/awssqs-sample.git
cd ./awssqs-sample/aws-sqs-consumer
./gradlew clean build
```

```./build/libs/aws-sqs-consumer-1.0.jar``` が作られたと思います。
これはメッセージ情報を受け取り、Chatworkへ通知するだけの簡単なアプリです。


### Dockerfileのカスタマイズ

今回、ElasticBeanstalkのプラットフォームとしてDockerを利用しますので、Dockerfileを用意します。 先ほどcloneした```eb``` 配下にaws-sqs-consumer-1.0.jarをコピーし、Dockerfileの設定値を書き換えます。

```Dockerfile
# Java8のDockerイメージを利用
FROM java:8

# workerアプリケーションをローカルからコンテナ側に追加する
ADD aws-sqs-consumer-1.0.jar aws-sqs-consumer-1.0.jar

# コンテナ側の8080ポートを外部に公開する
EXPOSE 8080

# SpringBootの起動コマンド
CMD ["java", "-Droomid=<ROOM_ID>", "-Dapitoken=<API_TOKEN>", "-jar", "./aws-sqs-consumer-1.0.jar"]
```

以下の2点は書き換える必要があります

* ROOM_ID : 通知対象のChatworkのROOM_ID
* API_TOKEN: ChatworkのAPI_TOKEN

Dockerfileとaws-sqs-consumer-1.0.jarをzipで固めてソースバンドルを作成します。このとき、**上位ディレクトリごとzip化するのではない**ことに注意です。

詳細はこちら。
http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.deployment.source.html


### ElasticBeanstalkのアプリケーション作成

先ほど作成したソースバンドルをElasticBeanstalkのアプリケーションとして作成します。

AWSのマネジメントコンソールからElasticBeanstalkを選択し、「新しいアプリケーションの作成」を選択します。

1. アプリケーション名を入力
![eb1.JPG](https://qiita-image-store.s3.amazonaws.com/0/47589/e6af6cad-217f-af95-7845-7acdf64a1548.jpeg)

2. ワーカー環境を選択
![eb2.JPG](https://qiita-image-store.s3.amazonaws.com/0/47589/d8c3c1b6-ce7a-531b-0bcd-503dac25569d.jpeg)

3. 環境タイプはDockerで、単一にする
![eb3.JPG](https://qiita-image-store.s3.amazonaws.com/0/47589/bfd57e5a-e652-4a64-b4bd-a10a068ba9bb.jpeg)

4. ソースバンドルをアップロード
![eb4.JPG](https://qiita-image-store.s3.amazonaws.com/0/47589/db10922b-5a70-bd13-9963-44083b76f892.jpeg)

5. 環境タグまではデフォルトのまま「次へ」

6. ワーカーアプリケーションのエンドポイントを設定
![eb7.JPG](https://qiita-image-store.s3.amazonaws.com/0/47589/7f01611d-582b-b9b9-0b97-cde9253f75b6.jpeg)

7. 自分のIAMロールの権限を選択する
8. 起動！

数分待つと立ち上がります。

### SQSにメッセージを送信してみる

1. SQSのメニューを選択
2. 自動生成されたキュー※をチェックして、「キュー操作」から「メッセージの送信」  
　 ※AWSEBWorkerQueueと含まれているもの
3. メッセージ本文に ```{ "message" : "きゅー！"}```と入力し、送信

しばらくすると、Chatwork側にメッセージが投稿されるのがわかると思います。


## よくわからなかったこと

DockerfileでEXPOSEしたポートはWorkerのセットアップ時に指定しなかったが、どこで指定しているのか。
【WordPress】子テーマとしてオリジナルテーマを作成する方法

#【WordPress】子テーマとしてオリジナルテーマを作成する方法

***オリジナルテーマを作成する際、配布されている既存のテーマをカスタマイズして作ると便利ですが、うっかりテーマのバージョンアップなどをしてしまい全て上書きされ、カスタマイズ部分が消えて無くなったりと色々と不便なことがあるので、子テーマを作成してオリジナルテーマを作成すると便利かと思います。***

・子テーマを作成する方法は実は簡単で、まず親となるテーマを同じディレクトリ（〜/wp-content/theme）にコピーし、コピーした側のテーマの中のstyle.cssに以下のような記述をします。

```lang:style.css
/*
Theme Name:my-kodomo //ここに子テーマ名
〜省略〜
Template: my-oya //ここに親となるテーマのディレクトリ名
*/

@import url('../my-oya/style.css'); //親のCSSを読み込みたい場合は記述

```

こんな感じで、あとは子テーマ側を好きなようにカスタマイズすればOK！
【Docker for Mac】プライベートレジストリ --insecure-registry の設定方法（https通信→http通信への切り替え）

#前置き
Docker for Macで他サーバのregistryにHTTP通信したい方必見。

Docker for Mac で、他サーバのregistryにデフォルトのHTTPS通信でなく、HTTP通信をするための設定を記載すべきファイルが特定できずハマったため記載します。
 
作成したdockerのimageを保存する場合、一般的には以下の公開レジストリに保存します。
###docker hub
https://hub.docker.com/

セキュリティの都合などで、サーバの構成等の情報を公にしたくない場合は、以下のツールを使用して簡単プライベートリポジトリを作成することができます。
####registry
https://docs.docker.com/docker-trusted-registry/overview/
 
ただここで一つ落とし穴が。
他のサーバに立てたregistryに対しての通信はデフォルトでHTTPS通信になっています。
この場合クライアント側で何かしら設定してあげないと、通信できません。
考えられる設定としては以下のとおり。
①証明書を買う
②HTTP通信の設定にする
③オレオレ証明書
 
今回は社内サーバに対しての通信なので、HTTP通信を使用するパターンで問題ないと判断。
②の方法を採用しました。
 
#手順 
以下を参照すると、--insecure-registryという値を設定すれば良いよう。
ただ記載してある変更ファイルは。centos用のようだ。
https://docs.docker.com/registry/insecure/


ここで詰まりました。が、なんとか設定箇所を判定しました。
なんとGUIから設定できます！
Prefarencesを選択


![スクリーンショット 2016-06-27 19.36.04.png](https://qiita-image-store.s3.amazonaws.com/0/72169/7c6cfcae-be5d-3ec3-ae26-c640ad81958d.png)

Insecure registries に<ホスト名:port>の形式で記入

![スクリーンショット 2016-06-27 19.44.17.png](https://qiita-image-store.s3.amazonaws.com/0/72169/2ad91814-45c9-f5dd-3ca2-0d27cdb9de9a.png)


 
GUIは盲点でした・・・。
Docker for MacはDockerToolと比べて、GUIで操作できる部分が増えていて、親しみやす印象を覚えました。
 

#おまけ
Docker for Mac以外の書き換え方

###docker-machine

```shell-session
$docker-machine ssh default \
"echo 'EXTRA_ARGS=\"--insecure-registry <host.sever.name:port>\"' \
| sudo tee -a /var/lib/boot2docker/profile \
&& sudo /etc/init.d/docker restart"
```
 
###centos7

```shell-session
$echo 'DOCKER_OPTS=\"--insecure-registry <host.sever.name:port>\"' \
| sudo tee -a /etc/sysconfig/docker \
&& sudo service docker  restart
```



---


自分のブログからの転載です
http://gimpop.hatenablog.com/entry/2016/06/28/195725
DIGITSを使いたい

NVIDIAの提供している、DeepLearningによる画像分類ツール「DIGITS」を使いたいと思い立ち……思い直し？
デスクトップPCにUbuntuをインストールするところから、ツールとして使えるようになるまでの
一連の作業を覚え書きとして残しておく。

※2016/6/28時点の情報
ドライバとかインストールするのにやたら苦労したので……

#Ubuntuインストール
Ubuntuは適当にインストールする。今回使用するのは [Ubuntu Desktop 14.04 日本語 Remix](https://www.ubuntulinux.jp/download/ja-remix)
先に結論を書くと、ドライバをインストールするより先に各種更新処理をしないと駄目なように感じた。
なので、まず以下のコマンドを打ち込む。

```bash
sudo apt-get update
sudo apt-get upgrade
```

ついでに、よく使うらしいツール群をインストールしておく

```bash
sudo apt-get install git build-essential openssh-server
```

OSの更新？は、「ソフトウェア更新」のポップアップが出てくるのでハイハイしておく。
消してしまった場合は、タスクバー（って言うのか？）の検索窓に「update」と打ち込めば出てくる。

適度に`sudo reboot`をぶち込みながら作業を進める。

ところで、グラフィックボードは最初から「GEFORCE GTX 970」を刺していますが
その影響なのかどうか、`Ctrl+Alt+F1`で仮想コンソールに入れないという現象が発生します。
（何も表示されない真っ暗画面になる）
`/etc/default/grub`を編集すると動くらしいので、ポチポチと編集します。
viエディターとかで適当に開いて、`GRUB_TERMINAL=console`の行をコメントインします。
あとは`update-grab`を叩いたら、仮想コンソールに入れるようになります。

あと、コンソールからの作業が増えるので以下のコマンドを打っておくと幸せになれるかも。

```bash
LANG=C xdg-user-dirs-gtk-update
````

#NVIDIAドライバのインストール
さて、グラボのドライバをインストールして参ります。
[Install / Uninstall NVIDIA Driver 340.32 On Ubuntu / LinuxMint](http://www.askmetutorials.com/2014/08/install-uninstall-nvidia-driver-34032.html)
手順は上記サイトに書いてありますが、GUI上からだと処理できないようなのでコンソールから操作する必要があります。
あと、今回インストールしたドライバのバージョンは「367.27」でございます。
1. [NVIDIAのHP](http://www.nvidia.co.jp/Download/index.aspx)からインストーラ（.run）をダウンロードする。（Linux 64bit）
2. 以下、コンソールから作業。
3. `chmod +x hoge.run` インストーラに実行権限を与える。
4. `sudo apt-get purge nvidia*` 念のため既存ドライバのアンインストール？
5. `sudo service lightdm stop` GUI用のサービス？を殺す
6. `sudo service gdm stop` というのは、gdmというサービスが見つからないので無視して良い？
7. `sudo hoge.run` インストーラを叩く。あとはハイハイ選んで、インストール完了したらリブート。

これでドライバのインストールが完了する、はず。

#DIGITSのインストール
[公式Gitのインストールガイド](https://github.com/NVIDIA/DIGITS/blob/master/docs/UbuntuInstall.md)の通りに進める。
（自分でbuildする方法も書かれてるけど、今回そっちはやらない）
ドライバは先の作業でインストールしたので、CUDAとMachineLearningPackageとかいうのをインストールする。
以下コピペ

```bash
# Access to CUDA packages
CUDA_REPO_PKG=cuda-repo-ubuntu1404_7.5-18_amd64.deb
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/${CUDA_REPO_PKG} -O /tmp/${CUDA_REPO_PKG}
sudo dpkg -i /tmp/${CUDA_REPO_PKG}
rm -f /tmp/${CUDA_REPO_PKG}

# Access to Machine Learning packages
ML_REPO_PKG=nvidia-machine-learning-repo_4.0-2_amd64.deb
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1404/x86_64/${ML_REPO_PKG} -O /tmp/${ML_REPO_PKG}
sudo dpkg -i /tmp/${ML_REPO_PKG}
rm -f /tmp/${ML_REPO_PKG}

# Download new list of packages
sudo apt-get update
```

最後に以下のコマンドを打ち込めばインストール完了、お疲れ様でした。

```bash
sudo dpkg-reconfigure digits
```

#言い訳
何もしてないのに壊れた！！
というのは冗談だけど、そもそも１ヶ月くらい前は何の苦労もなくインストールできたDIGITSちゃん
そこにJetson TX1の開発環境とかいろいろインストールしてたらいつの間にかDIGITSが動かなく……それどころか、GUIでログインすら出来なくなって、イライラしたのでクリーンインストールに至るというのが事のあらまし。

あと、以前ちゃんと動いてた時に「ソフトウェア更新」をしたら急にエラー吐きまくるようになって
これは駄目だなと思い、今回は更新せず強引にインストールを進めようとしてたのも長引いた要因だと思う。

上手くインストールできずに再クリーンというのを２度３度と経験して、何とか動くところまで辿り着いたので作業手順を書き留めた次第。
インストールに失敗すると、DIGITSで学習させるとエラー吐いて死んでしまう状態になり
判断基準として、ブラウザからDIGITSを開くとGPUの認識状態が確認できる。
HOME画面の右上（バージョンの下）に`1/1 GPU availabe`と表示されていれば正常に認識された状態。
ドライバ周りのインストールに失敗した時は何も表示されません。


#追記
学習データのDB作成、学習処理までは上手く動作するものの
分類処理を実行しようとするとエラー吐いて止まってしまう
何なんだよもう……
Nginx を使って内部IP のときのみ表示するコンテンツの設定

# やりたいこと

クックパッドの開発者ブログを見ていて、
自社でのみ見えるコンテンツで改善・バグの指摘ができる機能をWEBサービスに作ろうと思った。

http://techlife.cookpad.com/entry/2015/10/15/100000#kotsuru_01

# 実際にやること

Nginx で内部IPかどうかを判別して、アプリケーションに渡す時にヘッダーを付与する。
アプリケーション側ではそのヘッダーの値によって、内部コンテンツの表示を切り替える。

## 環境
* WEB,プロキシサーバ： nginx
* アプリケーション: 何でもOK！

## Nginx の設定
Nginx 側では `geo` を使用して、内部IPの時のフラグを作成する。
そのフラグがあれば、内部IPであることを表すヘッダーを付加して、
WEBアプリケーションへ `proxy_pass` する。

```
http {
  geo $geo {
    default        0;
    // 内部IP を一覧で記載
    127.0.0.1      1;
  }

    location / {
     # set header
     proxy_set_header X-INTERNAL-ACCESS $geo;

     // 他設定。。。
     ...
     proxy_pass http://127.0.0.1:3010;
  }
}
```

geo 部分については別ファイルに外出しして、`include`で読み込む方が良い。

## アプリケーション側の設定
ヘッダーの内容を判別して、内部コンテンツの表示・非表示を切り替える。
以下はnode の例。

``` 
 if(req.headers['x-internal-access'] === '1' ) {
   // 内部コンテンツを追加する処理
 }
```
djangoでDBを使ったテストを書く時、 `setUpTestData()` を使うと早く出来る場合がある

# djangoでDBを使ったテストを書く時、 `setUpTestData()` を使うと早く出来る場合がある

 djangoでDBを使ったテストを書く時、 `setUpTestData()` を使うと早く出来る場合がある。
 
## `setUpTestData()`？
 
[`setUpTestData()`](https://docs.djangoproject.com/ja/1.9/topics/testing/tools/#django.test.TestCase.setUpTestData) は、通常、`setUp()` で各メソッド毎に行われるモデルの初期化などをクラス単位で行おうというものです。(内部の実装を覗いてみると少しおもしろいかもしれません。)
 
もちろん、クラス単位で初期化されるということは、一度しか呼ばれないということなので、状態の更新などが行われるものについては注意が必要です。
 
## 例

例えば、テキトウに、`django.contrib.auth.models.User` の検索のテストを書くとします。
(特に `User` を選んだ理由は無いです。単にモデルの定義がめんどうだっただけです。)

### 毎回 `setUp()` を呼び出しているもの

以下のようなテストケースでは、Userのモデルの生成がテストメソッドの数だけ行われます。遅い。

```python
class Tests(TestCase):
    def setUp(self):
        from django.contrib.auth.models import User
        for i in range(110):
            User.objects.create_superuser("admin{}".format(i), "myemail{}@example.com".format(i), '')

    def test_query(self):
        from django.contrib.auth.models import User
        with self.assertNumQueries(1):
            actual = User.objects.filter(username__startswith="admin1").count()
            self.assertEqual(actual, 11)

    def test_query1(self):
        from django.contrib.auth.models import User
        with self.assertNumQueries(1):
            actual = User.objects.filter(username__startswith="admin1").count()
            self.assertEqual(actual, 11)

    def test_query2(self):
        from django.contrib.auth.models import User
        with self.assertNumQueries(1):
            actual = User.objects.filter(username__startswith="admin1").count()
            self.assertEqual(actual, 11)
```

### `setUpTestData()` を使ったもの

```python
class Tests(TestCase):
    @classmethod
    def setUpTestData(cls):
        from django.contrib.auth.models import User
        for i in range(100):
            User.objects.create_superuser("admin{}".format(i), "myemail{}@example.com".format(i), '')

    def test_query(self):
        from django.contrib.auth.models import User
        with self.assertNumQueries(1):
            actual = User.objects.filter(username__startswith="admin1").count()
            self.assertEqual(actual, 11)

    def test_query1(self):
        from django.contrib.auth.models import User
        with self.assertNumQueries(1):
            actual = User.objects.filter(username__startswith="admin1").count()
            self.assertEqual(actual, 11)

    def test_query2(self):
        from django.contrib.auth.models import User
        with self.assertNumQueries(1):
            actual = User.objects.filter(username__startswith="admin1").count()
            self.assertEqual(actual, 11)
```

## 実行時間の比較

実行時間の比較をしてみます。テストメソッドの数だけ `setUp()` が呼ばれれば呼ばれる程遅くなるというだけで結果の比率などにあまり意味は無いです。3つテストメソッドがあるので、`setUp()` でデータを生成している方がおよそ3倍時間がかかります。

| | setUp | setUpTestData |
|:-:|:-:|:-:|
|Userの数   | 100  | 100  |
|テストメソッドの数  | 3  | 3  |
|経過時間   | 11.7s  | 3.6s  |

実際に試して見たければ以下のgistで確認できます。

https://gist.github.com/podhmo/ffc6f96e4688dfb53810f4e4d6ba4d92
Zabbix3.0でchronyの時刻同期を監視しよう、という話

# この記事は？
- chronyサービスの自動起動設定を忘れており、仮想マシン(CentOS7)の時刻が大きくずれてしまって痛い目にあった。
- ちゃんと時刻同期が行われているか、時刻のずれはどの程度発生しているのか、ということを測定しておいたほうが良かったな、と感じた。
- そこでZabbixですよ！

:::note info
ZabbixShareはGitHubのリポジトリに移行されましたので、
TemplateはGitHubをご確認ください
  👇
https://github.com/zabbix/community-templates/tree/main/Applications/NTP/template_chrony_accuracy
:::

# 監視の設定方法
## 環境情報
| 項目 | 情報 |
|:-:|:-:|
|CentOS|CentOS Linux release 7.2.1511|
|Zabbix|3.0.2rc1 rev59391|
|chrony|chronyd (chrony) version 2.1.1|

## 何を監視する？
これまでのNTPではntpqコマンドであれこれ時刻同期の情報が確認できた。
CentOS7から標準となったchronyではchronycコマンドで色々と情報を確認できる。

```
[hiroki.lzh@StarPlatinum ~]$ chronyc tracking
Reference ID    : 157.7.203.102 (balthasar.gimasystem.jp)
Stratum         : 4
Ref time (UTC)  : Fri Jun 17 03:28:59 2016
System time     : 0.000265517 seconds slow of NTP time
Last offset     : -0.000042582 seconds
RMS offset      : 0.000115312 seconds
Frequency       : 34.696 ppm slow
Residual freq   : -0.001 ppm
Skew            : 0.041 ppm
Root delay      : 0.007043 seconds
Root dispersion : 0.000319 seconds
Update interval : 521.5 seconds
Leap status     : Normal
```
それぞれの項目の意味についてはRHELのドキュメントを参照してください。
[RHELドキュメント:13.3. chronyの使用](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Using_chrony.html)

## 監視設定として導入する
Zabbixにはbashのコマンドや各種オリジナルのスクリプトを実行するための監視項目として
「system.run」という便利なアイテムが用意されている。
前述のchronyc コマンドの結果をawkで分けて監視結果とするような内容を「system.run」で発行する。
`system.run[chronyc tracking|grep "Last offset"|awk '{print $4}']`

##取得結果はこんな感じ
適度に微調整が入っている模様。
どの程度までを許容してアラートとするかは要件等かな。
![LastOffset.png](https://qiita-image-store.s3.amazonaws.com/0/129674/b773d675-5250-d7e9-b1c6-d622abc2a6a6.png)


## テンプレートにしておきました
Zabbixの監視テンプレートを共有できる[Zabbix Share](https://share.zabbix.com/)に
今回の監視テンプレートを投稿しました。
[Chrony accuracy Template](https://share.zabbix.com/cat-app/ntp/chrony-accuracy-template)
前述のLast offsetだけでなく、Stratumの監視を入れてみたり、
簡単なトリガー条件を設定してあります。あ、トリガーはデフォルト無効になってます。
カテゴリ作ってもらったほうがいい気もしたけど、NTPの区切りでいいよね…？ということで。
内容は簡単なものではありますが、時刻同期はログ監視などに大きな影響を与えてしまうので
入れておくといい事あるかもしれません。

## NTP監視については先人がいる
NTPの監視については先人がいます。
[Zabbix NTP監視テンプレートのご紹介　～Zabbix Share への登録の仕方～](http://qiita.com/qryuu/items/518a7167b728f2662ddd)
qryuuさんの作成したNTP監視テンプレートも[Zabbix Share](https://share.zabbix.com/)に公開されていますので、
環境に応じてご利用ください。
また、この記事はqryuuさんの作成したテンプレートの完全互換を目指したものではないので、
取得できるアイテムに差があることはご了承ください。

* * *
以上
WordPress Jetpackのパプリサイズ共有で常にハッシュタグなどを付けたい

# Jetpackの仕様

- 投稿編集画面にある「カスタムメッセージ」に入るのは基本的にタイトル
- 配信時にURLが追加される

# 改変したい部分の仕様

- タイトル前に特定の文言（e.g. [更新しました]）
- ハッシュタグもつける（e.g. #mynews）

要は毎回の手入力が面倒。

# ソース

元ネタはこちら
https://wordpress.org/support/topic/wpas_default_message-filter-not-working

実行順の問題で「プラグイン」にしないといけません。
テーマの `functions.php` に記述する方法は不可。
プラグインのヘッダー情報とかは以下参照。
https://developer.wordpress.org/plugins/the-basics/header-requirements/


```PHP:my-jetpack-publicize-message.php
<?php
/*
Plugin Name: My Jetpack Publicize Message
Plugin URI: 
Description: 
Version:     0.1.0
Author:      Your Name
Author URI:  
License:     GPL2
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Domain Path: /languages
Text Domain: my-jpm
*/

/**
 * The message prepended to the Publicize custom message.
 *
 * @module publicize
 *
 * @since 2.0.0
 *
 * @param string $prefix String appended to the Publicize custom message.
 */
function my_wpas_default_prefix( $prefix ) {
	$default_prefix = '[update] ';
	return $prefix;
}
add_filter( 'wpas_default_prefix', 'my_wpas_default_prefix' );

/**
 * The message appended to the Publicize custom message.
 *
 * @module publicize
 *
 * @since 2.0.0
 *
 * @param string $suffix String appended to the Publicize custom message.
 */
function my_wpas_default_suffix( $suffix ) {
	return ' #mynews';
}
add_filter( 'wpas_default_suffix', 'my_wpas_default_suffix' );
```
DjangoとAmazon SESを使ってメールを送信する

# Amazon SESとは
簡単に言うと、受信可能なメールアドレスがあれば、アプリケーションを通してメール送信を可能にするサービスです
メールサーバの構築や運用が必要ではなくなるという事ですね
価格も1,000 通あたり 0.10 USD、という事で、プロトタイプにもぴったりだと思います(多分)
東京リージョンでは使えないので、別リージョンを選ぶ必要がありますが、バージニア北部とかで問題ありません

今回はこのAWS SESとDjangoを組み合わせてメールを送信するサービスを作成する手順を紹介します
実装はとても簡単なので、ぜひ試してみてください

# メールアドレス認証・テスト
## メールアドレス登録
SESコンソールの`Identity Management`の`Email Addresses`からメールアドレスを登録します。
`Veify a New Email Address`でメールアドレスを記入します

<img src="https://qiita-image-store.s3.amazonaws.com/0/88553/db630cd4-4ca8-c709-bb2d-dc16e510df3c.png" width=480px>

認証用メールが届くので、許可してください
今回はGmailアドレスを使用しました。テスト用にもう一つ個人的なアカウントを認証しておきました

## テストメール送信
メールアドレスを選択すると、テストメールを送信する事ができます
ここでは認証したメールアドレスしか使用できません

# SESのトークン発行
Djangoでメールを送信するためにトークンを発行します
トークンについては[AWSのSESを利用してメール送信](http://www.infoscoop.org/blogjp/2014/07/04/aws%E3%81%AEses%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1/)で詳しく説明されているので、こちらを参考にしてみてください

# Django-sesの導入

## インストール
今回は[Django-ses](https://github.com/django-ses/django-ses)を使用します
[boto](https://github.com/boto/boto)というかの有名なAWS APIラッパーを使って、メールバックエンドを提供してくれるライブラリです

`pip install boto django-ses`

django-sesを使うとDjangoの通常のメール機能と同じようにメールを送信することができます
なのでバックエンドなどの設定を行う必要があります
`settings.py`で設定します(以下のものは最低限の設定です)

```settings.py
AWS_SES_ACCESS_KEY_ID = 'your access key'
AWS_SES_SECRET_ACCESS_KEY = 'your secret key'
EMAIL_BACKEND = 'django_ses.SESBackend'
```

`AWS_SES_ACCESS_KEY_ID`と設定していますが、`AWS_ACCESS_KEY_ID`でも大丈夫です
S3などの使用とアクセスキーを使い分けたい時に使えるようです

```settings.py
INSTALLED_APPS = [
	...
    'django_ses',
]
```

`INSTALLED_APPS`も書き加えました

## テストメール
以下のようにテストしてみました(API開発していたのでDjango restframework使っています)
アクセスしてみましょう

```views.py
from rest_framework.response import Response
from rest_framework.views import APIView
from django.core.mail import send_mail, EmailMessage

class MailTestView(APIView):
	def get(self, request, format=None):
        try:
            subject = 'タイトル'
            message = '本文'
            from_email = '送信元アドレス'
            recipient_list = ['送信先アドレス']
            email = EmailMessage(
                subject, 
                message, 
                from_email, 
                recipient_list
            )
            email.send()
        except KeyError:
            return Response("Error", status=400)
        return Response("Success", status=400)
```

**※このとき、まだSandbox環境なので送信元アドレスも送信先アドレスも事前に認証したものだけしか使えません**

# 送信制限引き上げ申請
まだSandboxです
コンソールの`Email Sending`, `Sending Statistics`を選び、`Request a Sending Limit Increase`から申請します
[Amazon SESサンドボックスの外への移動](https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/request-production-access.html)を参考にフォームを入力します

1~2日かかるようなので、他の機能を実装しながらのんびり待ちましょう
この申請が許可されたら認証されていないメールアドレスにもメールを送信できるようになるので、本格的に機能利用が始まります

# まとめ
すごく簡単でした！
申請項目に少し悩んだくらいで実装面はまったく問題なく進める事ができました
Gmailを使おうと思っていたのでセキュリティ的にも助かりました…


# 参考
- [AWSのSESを利用してメール送信](http://www.infoscoop.org/blogjp/2014/07/04/aws%E3%81%AEses%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1/)
- [Django で Amazon SES を使う](https://www.ianlewis.org/jp/django-amazon-ses)