OmniAICreator/Qiita-1.07M huggingface dataset:
組込み > C > math.h > "M_PI" is undefined

```txt:動作環境
某組込みRTOS環境
```

math.hからM_PIを使う例を教えていただいた。
http://qiita.com/7of9/items/dad7e8fdcda777a9fdd0#comment-ad649dd93838f3f6add4

自分が使う組込みでM_PIを使おうとしたら以下のエラーとなった。

```
Error[Pe020]: identifier "M_PI" is undefined
```

関連して以下を見つけた

- [Using M_PI with C89 standard](http://stackoverflow.com/questions/5007925/using-m-pi-with-c89-standard)

- [2015-05-22 C言語(標準)にM_PIは無い](http://qnighy.hatenablog.com/entry/2015/05/22/225558)

- [VC++でM_PIが使えなかった理由判明](http://www.atinfinity.info/blog/archives/14)
めざせNode.jsライブラリマスター （10）windows-cpu

#【ライブラリ説明】
　CPUやメモリの情報を取得できる

#【プログラム】
```js:windows-cpu.js
var cpu = require('windows-cpu');

// Get total load on server for each CPU
cpu.totalLoad(function(error, results) {
	if(error) {
	return console.log(error);
	}

  console.log(results);
  //[ 11 ]
});

cpu.totalMemoryUsage(function(error, results) {
      if(error) {
          return console.log(error);
      }

      console.log('Total Memory Usage: ', results);
      /*
      Total Memory Usage:  { usageInKb: 3544692,
      usageInMb: 3461.61328125,
      usageInGb: 3.380481719970703 }
      */
 });
```

#【参考サイト】
　[npm](https://www.npmjs.com/package/windows-cpu)
　[github](https://github.com/KyleRoss/windows-cpu)
Rails：REST APIのテンプレ作成

RailsでAPIを作る時に毎回テストの設定が面倒なのでUserモデルでベースを作成してみました。
https://github.com/kanadai/rails-api-starter
starterはuserを作成した状態です。
以下のgemでymlに記載したAPI仕様と実装の整合が取れるようになっています。
#gem
・prmd
・rack-json_schema
・active_model_serializers(JSON用)

#新規modelの作成(userの場合)
~~~ruby
bin/rails g scaffold user name:string email:string password:string
bin/rake db:migrate
bundle exec prmd init --yaml user > docs/schema/yml/user.yml
~~~

#user.ymlとrspecを更新
*rspecと合っていないとテストが落ちます
ymlとrspecの整合が取れていないと、request specが500エラーで落ちます。
その場合は`config/application.rb`の`config.middleware.use Rack::JsonSchema::ErrorHandler`をコメントアウトすると原因が探しやすいかもしれません。

~~~ruby:config/application.rb 
   if ENV['RAILS_ENV'] == 'test'
      system('bundle exec prmd combine doc/schema/yml/* > doc/schema/schema.json')
      schema = JSON.parse(File.read("#{Rails.root}/doc/schema/schema.json"))
これ→# config.middleware.use Rack::JsonSchema::ErrorHandler
      config.middleware.use Rack::JsonSchema::ResponseValidation, schema: schema
    end
~~~
仕様を書く必用がなければ、上記の`if ENV['RAILS_ENV'] == 'test'`のブロックを消せばrspecだけで動きます。

#テスト実行
```
guard
```
Rspecはかなり冗長ですm(__)m

参考： http://qiita.com/kata0hka/items/e5b0b6437fee045d6252
jsdoでshadertoy sandbox その1

#概要
jsdoでshadertoyのコードを実行したかった。
#成果物
http://jsdo.it/ohisama1/OGqa
#写真
![toy.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/017048c4-716f-ee16-557c-59c89de820fb.jpeg)

#サンプルコード
```
precision mediump float;
uniform vec2 iResolution;
uniform float iGlobalTime;
uniform sampler2D iChannel0;

void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
    vec4 solidRed = vec4(1.0, 0.0, 0.0, 1.0);
    fragColor = solidRed;
}

void main() 
{
    vec4 color;
    mainImage(color, gl_FragCoord.xy);
    color.w = 1.0;
    gl_FragColor = color;
}   
```
#説明
以下を実装した。
iResolution
iGlobalTime
iChannel0
main()
Zybo > Chronicles blog 43 > XADC > Alarm使用コード > GIC設定 / XADCの割込み設定 / ISRの実装

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-43-XADC-Alarms-and/ba-p/496468

> I have attached the code to this blog post. It is split into three functions:
 
> 1. The first part configures the generic interrupt controller on the Zynq SoC so that we can use the XADC interrupt as part of this the interrupt service routine. It is called when the XADC interrupt is issued.
 
> 2. The second part configures the XADC, sets the sequencer to a safe mode, and disables all alarms before reading the temperature. It then assigns an upper and lower temperature alarm based upon the value it has just read. Having set these values the function then sets the temperature alarm and enables the temperature interrupt.
 
> 3. The third part is the interrupt service routine that will be called when the temperature interrupt occurs.  This routine will clear the interrupt status register, disable more interrupts from occurring, and read the temperature at which the interrupt occurred. The temperature reading might not be above the interrupt temperature as it will fluctuate and we do not have the temperature averaging turned on. However, the value should be close.

- GICの設定
- XADCの割込み設定
- ISRの実装

blogにソースがある
技術英語 > That's more than a coincidence. / What a coincidence! / once in a life time opportunity

@ Star Trek Voyager > DEADLOCK

起きた事象を理解しようとするJaneway.
Kesの発言に対して

> That's more than a coincidence.

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

> What a coincidence!

http://qiita.com/7of9/items/fbb265beeec40b6d9678

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

> once in a life time opportunity

http://eow.alc.co.jp/search?q=once-in-a-lifetime
WWDC 2016の事前チェックイン

#はじめに#
WWDCに初参加するにあたり、事前チェックインの全体像がわからず、ちょっと不安がありました。
これからの人のために、一応、メモをシェアしますね。

#事前のチェックイン#
当日の入場をスムーズにするために、事前にcheck-inしましょう。
その場でパスを発行してもらいます。
特製ジャケットももらえます。私はMサイズでジャストでした。(日本では普段、Lサイズです。176cm細身)

![IMG_4418.JPG](https://qiita-image-store.s3.amazonaws.com/0/84185/7028d515-09b1-4e71-44fc-1728b98b163e.jpeg)

#どこで#
初日会場のBill Graham Civic Auditoriumの入り口前に受付があります。BARTのCivic Center駅から徒歩で3分程度です。

![IMG_4408.JPG](https://qiita-image-store.s3.amazonaws.com/0/84185/0c52f4ad-bdbf-04c1-2625-9b79eed2e512.jpeg)

#手続き#
受付ブースへ。"It’s almost time."というAppleからのメールに添付されているWWDC2016.pkpassを開きます。これがバーコードになっていて、専用スキャナで読み取ってもらいます。
**身分証**の提示を求められます。パスポートで良いそうですが、私はホテルに置いてきてしまい、日本語の分かる人に日本の免許証を提示して確認してもらいました。

#初日について#
ちなみに、初日の朝は未明から並ぶ人もいるそうで、朝方来ると行列の後ろのほうになるという話を経験者から伺いました。場所がCivic Auditoriumになってからはキャパが広いので、ディスプレイ越しに見る別部屋に通される心配はなくなったとも聞きますが、せっかくなので初日はなるべく早く行きたいですよね。

BARTの始発は4時からだというので、気合を入れて5時くらいに並びたい・・・(早起きできるか心配です)と考えています。

早朝に並ぶという人いらしたら、twitterもやっているのでぜひコンタクト取り合いましょう。よろしくお願いします。
@hsylife
Heroku Plugins の作成


Heroku 使用時の細かい処理などはHeroku Plugin を作成してまとめておくと便利。

link機能が付いているので、プライベートにローカルで運用していく事も可能

https://devcenter.heroku.com/articles/developing-cli-plug-ins

## ファイルの作成

まずは空のディレクトリに`index.js`を作成

````
'use strict'
exports.topic = {
  name: 'hello',
  // this is the help text that shows up under `heroku help`
  description: 'a topic for the hello world plugin'
}

exports.commands = [
	{
	  topic: 'hello',
	  command: 'world',
	  description: 'says hello',
	  help: 'help text for hello:world',
	  run: function (context) {
	    console.log('Hello, World!')
	  }
	}
]
```` 

さらに`package.json`を作成

````
{
  "name": "heroku-hello-world",
  "version": "1.0.0",
  "description": "basic example heroku plugin",
  "main": "index.js",
  "author": "Jeff Dickey @dickeyxxx",
  "repository": "heroku/heroku-hello-world",
  "bugs": {
    "url": "https://github.com/heroku/heroku-hello-world/issues"
  },
  "keywords": [
    "heroku-plugin"
  ],
  "license": "ISC"
}
````

最後にプラグインを登録して完了

````
$ heroku plugins:link .
````

## プラグインの実行・確認 

インストールされたプラグインは`plugins`サブコマンドで確認可能

````
$ heroku plugins
=== Installed Plugins
heroku-hello-world@1.0.0 (symlinked)
````

コマンドは作成したコマンドの topic:command で実行

````
$ heroku hello:world
````

コマンドの処理は run 関数で実装する他、パラメータを追記して処理を加える事が出来る。

パラメータの一覧はこちら

https://devcenter.heroku.com/articles/developing-cli-plug-ins#all-command-options

## Heroku APIの利用

Run関数の実行引数`context`にはアプリケーション名が入ってくる。

````
exports.commands = [
    {
      topic: 'hello',
      command: 'world',
      description: 'says hello',
      help: 'help text for hello:world',
      run: function (context) {
        console.log(context)
        console.log('Hello, World!')
      }
    }
]
````

コマンドのパラメータ`needsApp`を`true`にしておくと`context.app`をもれなく取得できる。

さらに`needsAuth`を`true`にセットする事で、Heroku APIを使用可能になる。

https://devcenter.heroku.com/articles/developing-cli-plug-ins#using-the-heroku-api


````
'use strict'
let cli = require('heroku-cli-util')

module.exports = {
  topic: 'hello',
  command: 'app',
  description: 'says hello',
  help: 'help text for hello:world',
  needsApp: true,
  needsAuth: true,
  run: cli.command(function (context, heroku) {
    // ensure you return this promise chain so errors will be properly displayed
    return heroku.get(`/apps/${context.app}`).then(app => {
      cli.debug(app)
    })
    .then(() => heroku.get(`/apps/${context.app}/config-vars`))
    .then(config => cli.debug(config))
  })
}
````

Heroku APIの一覧はこちら

https://devcenter.heroku.com/articles/platform-api-reference

また `cli.command`を利用してGenerator を活用する事が可能

````
'use strict'
let cli = require('heroku-cli-util')
let co  = require('co')

function* app (context, heroku) {
  let res = yield {
    app:    heroku.get(`/apps/${context.app}`),
    config: heroku.get(`/apps/${context.app}/config-vars`),
  }
  cli.debug(res.app)
  cli.debug(res.config)
}

module.exports = {
  topic: 'hello',
  command: 'app',
  description: 'says hello',
  help: 'help text for hello:world',
  needsApp: true,
  needsAuth: true,
  run: cli.command(co.wrap(app))
}
````
Firefox Mozilla Build インストール方法

[FirefoxNewVersion/MozillaBuilds - Community Help Wiki](https://help.ubuntu.com/community/FirefoxNewVersion/MozillaBuilds)
の日本語訳。

このページでは Ubuntu で Mozilla build の Firefox を動かす方法を説明する。
これは配信されているバージョンの Firefox や Mozilla の公式リリースが
バグを含んでいないかどうか確認したい場合に便利である。

**Note:**
特別な理由が無い限り Mozilla build を使用するよりも、
公式 Ubuntu リポジトリのパッケージを使用することをお勧めする。
Firefox の [推奨入手手順](https://help.ubuntu.com/community/FirefoxNewVersion) はこちらを参照。

#Ubuntuzilla repository
Mozilla build の簡単なインストール方法の一つは
[Ubuntuzilla](http://ubuntuzilla.sourceforge.net/) プロジェクトのリポジトリを使用することだ。
最新の Mozilla build を既定のブラウザとして使用したいユーザは
一般的に Ubuntuzilla を利用している。
Ubuntuzilla プロジェクトのリポジトリでは公式 Mozilla build の 
Firefox, Thunderbird, SeaMonkey を .deb パッケージに変換して配布している。
ユーザのソースへリポジトリを追加するだけでパッケージマネージャを通じて
最新の Mozilla リリースを入手することができる。
詳細と使い方の説明は [Ubuntuzilla website](http://ubuntuzilla.sourceforge.net/) を参照。

#手動インストール
Firefox をユーザのホームディレクトリへインストールし、
Mozilla build と Ubuntu build の双方で
異なるプロファイルを使い分ける方法を説明する。

1. [Firefox ダウンロードページ](http://www.mozilla.com/en-US/firefox/)を開く
2. Linux 版 Firefox をダウンロードする
3. ダウンロードしたファイルを ~/firefox へ解凍する
   (例: tar jxf firefox*.tar.bz2 -C $HOME)
4. ~/.mozilla ディレクトリのバックアップを作成する
   (例: tar zcPf ~/mozilla-backup-$(date +%s).tar.gz ~/.mozilla)

**初めて Mozilla build のインストールを行う場合** は下記を実行する:

1. 開いている Firefox のインスタンスを全て閉じる。
2. ~/firefox/firefox -ProfileManager を実行し、
   Firefox プロファイルマネージャを起動する
3. mozilla-build という名前のプロファイルを作成する
4. default プロファイルが選択されていることを確認する
5. 終了をクリックし、プロファイルマネージャを閉じる
   (Firefox を起動してはならない)
6. 下記の shell スクリプトを実行する:

```bash:~/bin/firefox
mkdir ~/bin
cat > ~/bin/firefox <<END
#!/bin/bash

exec "\$HOME/firefox/firefox" -P mozilla-build "\$@"
END
chmod 755 ~/bin/firefox
```

~/bin/firefox コマンドは mozilla-build プロファイルを使用して 
Firefox を起動する。

#アンインストール

1. ~/firefox ディレクトリと ~/bin/firefox ファイルを削除する。
2. firefox -ProfileManager を実行し、 mozilla-build プロファイルを削除する

Mozilla build Firefox のアンインストールは上記の手順で完了する。再度 Mozilla build をインストールする場合は先述の手順を再度実行する。

#プロファイルの復元
プロファイルのバックアップの復元は下記の手順を実行する:

1. 開いている Firefox ウィンドウを全て閉じる
2. ~/.mozilla の名前を変更する(例: mv ~/.mozilla ~/.mozilla-broken)
3. アーカイブを解凍する(例: tar zxPf ~/mozilla^backup-DATE.tar.gz)

バックアップを取った時点の Firefox プロファイルの復元は上記の手順で完了する。

#利点と欠点の検証
Ubuntu build と併存して Mozilla build を使用する方法は多く存在し、
ユーザのニーズによってさまざまである。
本章では先述の手順で得られる利点と欠点について検証する。

先述の手引きでは Mozilla プロファイルのバックアップを推奨する。
バックアップは常に取っておくことを推奨するが、
特にメジャーアップグレード前のバックアップは重要だ。
新バージョンの Firefox は後方互換の効かないプロファイルの変更を行うことがある。
例えば Firefox 3.51 で使用していたプロファイルは Firefox 3 では使用できない。

先述の手引きでは Firefox をユーザのホームディレクトリへ解凍することを推奨する。
他の場所(例えば /usr/local)では特権ユーザのパーミッションが
必要になることがあり、特権ユーザを除いて何の利益も無いからである。
複数のユーザで使用するシステムにおいて
新しいバージョンの Firefox を全ユーザへ提供したい場合は、
[推奨手順](https://help.ubuntu.com/community/FirefoxNewVersion) を採用するべきだ。
複数ユーザで使用するシステムへ Ubuntu に由来しない
ソフトウェアをインストールすることは、システム管理者の負担増加へ繋がる。
例えばプログラムの更新が発生した場合に毎回手動で更新しなければならなくなる。

先述の手引きではダウンロードしたバージョンの Firefox 用に
mozilla-build プロファイルを作成することを推奨する。
新バージョンのプロファイルは後方互換性を持たず、
新しいプロファイルを用意することで Firefox のデバッグは容易になる。
VagrantでCentOS7をインストール

## 環境
Mac OSX 10.11

## VagrantとVirtualBoxをインストール
どこかでインストールした

## 現在の環境
```bash
$ VBoxManage -v
5.0.20r106931
$ vagrant -v
Vagrant 1.7.4
```

## Vagrantを使うためのディレクトリを作成 & 移動
```bash
$ mkdir vagrant_centos7
$ cd vagrant_centos7
```

## CentOS7のboxを追加
Vagrantbox.es (http://www.vagrantbox.es/) からお目当てのCentOS7を探して、URLをコピー。そのURLを使って、boxを追加。

```bash
# vagrant box add [vagrantのbox名] [boxのURL]
# ↓はどこのディレクトリで実行してもOK
$ vagrant box add centos7.1 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.1/vagrant-centos-7.1.box
# ↓は仮想サーバーを起動させたいディレクトリで実行
$ vagrant init
```

## 追加したboxを利用して仮想サーバーを起動
```bash
# これから、↓は仮想サーバーを起動させたいディレクトリで実行
# vagrant init [↑で指定したvagrantのbox名]
$ vagrant init CentOS7.1 # 初期化する（Vagrantfileを生成する）
$ vagrant up # 起動する
$ vagrant ssh # 接続する
[vagrant@localhost ~]$ # 仮想サーバーに入った
```
iOS:SplitViewに触れてみる

今回触れるのはSplitViewという画面に２つアプリを表示できるview

とりあえずSingleviewapplicationでプロジェクトを作成する。

ViewControllerの画面が出たら右下のobjectlibraryからSplitViewControllerを選択する。

<img width="900" alt="スクリーンショット 2016-06-12 22.22.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/84002/b8dfa52c-4a63-2331-9afc-48754788f0e9.png">

そうするとNavigationControllerやTableviewがひっついた状態で生成される。

SplitViewを生成した時に注意しなければならないのは、ViewControllerを削除しているため

 ```Is Initial View Controller```というオプションが外れているのでチェックを入れることを忘れずに。

普通にプロジェクトを作成した初期の状態
<img width="935" alt="スクリーンショット 2016-06-12 22.31.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/84002/c65015e3-615a-334f-d362-ffca1ab86ed3.png">

SplitViewControllerを追加後

<img width="897" alt="スクリーンショット 2016-06-12 22.37.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/84002/86dacb42-a815-1203-50b5-68e70f625b5c.png">

オプションにチェックを入れた後、実行してみるとTableviewと何の変哲も無いViewが表示される

![IMG_0032.PNG](https://qiita-image-store.s3.amazonaws.com/0/84002/6fe7fa45-52ff-7e48-bd67-bd6ea56d2057.png)

この時この二つのViewの関係はMasterとDetailという関係にあるらしい。

DetailViewに反映させたいことを書いて
<img width="1094" alt="スクリーンショット 2016-06-13 1.36.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/84002/daff1250-2696-ceef-2349-21ffc65e546e.png">


storyboard上でセルとDetailViewを紐付けあげれば
<img width="781" alt="スクリーンショット 2016-06-13 1.20.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/84002/491f2099-b650-6f16-f7fc-bb4cd15933c4.png">

![IMG_0033.PNG](https://qiita-image-store.s3.amazonaws.com/0/84002/cf370802-7b8d-f9ec-817a-07e0a00830a1.png)

今回は”ⅡDXRED”というセルをタップしたらDetailViewのバックグラウンドカラーを変えるという
風にしたので上記の画像の通り赤くなりました！！

応用していけばアプリを作る時のバリエーションやらなんやらが増えますね！！
pi-topCEEDでBluetoothデバイスを使用する

# がいよう
- 先日indiegogoで出資した [pi-topCEED](https://www.pi-top.com/product/ceed) (Raspberry Pi 3付属モデル)が届いたのだけど、ラズパイ3なのにbluetoothが使えなかったので色々やった際のメモ
- ※あまり深く調べてないので根本から間違ってる可能性があるます

# けつろん
- pi-topCEEDのpi-topOS(raspbian-jessieベース)はラズパイ2でも動作するようにオンボードのbluetoothを潰してるふんいき
- 結局Bluetoothドングル買ってマウスとキーボードとスピーカーつないだ

# 調査
- bluetooth関連のパッケージが入ってるか確認

```sh
% dkgs -l|grep blue
% 
```
なにもインストールされてなかった

- 一応起動している`bluetoothd`とかないかみてみる

```sh
% ps aux|grep blue
% 
```
当然なし

- とりあえず自分で`bluez`入れて`hciconfig`叩いてみる

```sh
% sudo apt-get install bluez
(略)
% hciconfig
%
```
- あれ？なんで一つもデバイス表示されないの？？
	- 色々ググったりした結果、けつろんの通りpi-topOSではオンボードのbluetoothが潰されてると判断
	- そんなわけでBluetoothドングル買った([バッファロー BUFFALO BSBT4D09BK](http://www.yodobashi.com/ec/product/100000001001609557/))

# Bluetoothデバイス接続
## ドングル認識
- 買ってきたドングルを挿す

```sh
% hciconfig
```
無事hci0に認識されて問題無し(認識されなかったらlsusb等して確認)

## マウス＆スピーカーペアリング
- 先にスピーカー用に`pulseaudio-module-bluetooth`をインストールしておく

```sh
% bluetoothctl
[bluetooth]# scan on
// 接続したいデバイスをペアリングモードにする
[bluetooth]# scan off
[bluetooth]# pair XX:XX:XX:XX:XX:XX
[bluetooth]# connect XX:XX:XX:XX:XX:XX
[bluetooth]# trust XX:XX:XX:XX:XX:XX
```

## キーボードペアリング

```sh
% bluetoothctl
[bluetooth]# agent on
[bluetooth]# scan on
// キーボードをペアリングモードにする
[bluetooth]# scan off
[bluetooth]# pair XX:XX:XX:XX:XX:XX
[agent] PIN code: 953853
// キーボードでPINを入力してエンターキー
[bluetooth]# connect XX:XX:XX:XX:XX:XX
[bluetooth]# trust XX:XX:XX:XX:XX:XX
```

# raspberry piの日本語化
- 通常のraspberry piと変わらないと思いますが備忘用
	- raspi-configを起動してlocaleをja_JP.UTF-8にする(詳細は割愛)
	- 日本語フォント関連のパッケージをかたっぱしから入れる

```sh
sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname uim uim-anthy jfbterm
```

# 参考リンク
- [Raspberry PiでUSB/Bluetoothアダプタを使う](http://qiita.com/yuyakato/items/4ca410bd216a8aadd5ce)
- [Raspberry PiにBluetoothスピーカーをつなぐ。TaoTronics TT-SK03(B) | なみさ日記 ](http://dq310.com/nm/raspberry-pi%E3%81%ABbluetooth%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AB%E3%83%BC%E3%82%92%E3%81%A4%E3%81%AA%E3%81%90%E3%80%82taotronics-tt-sk03b/)
- [Raspberry piにBluetoothキーボードを接続する](http://qiita.com/da1fujimoto/items/c0d652049e8455894fd9)
- [Raspberry Pi • View topic - [solved] jessie: bluetooth can not connect to kbd MS Wegde](https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=122872)
- [» 解決!Raspberry Piの日本語が四角の文字化けになった時の初歩ミス。｜コワーキングスペース管理人のブログ](http://start-now.link/100/archives/1930)
Twitterに関する基本的なメモ


#「Impression」

Impressionとは「つぶやきがTwitterのタイムラインに表示された回数」
全員がつぶやきを「見ているわけではなく」タイムラインに表示されたことを意味している。
なので、Impressionの測定値は、自分のつぶやきのポテンシャルだと考えよう。

##例

他のユーザーがつぶやきを見るパターン

a 自分のタイムラインを誰かが見る
b フォロワーに自分のつぶやきが表示される。
c Twitter上で検索をして、つぶやきを見る。
d RTされたつぶやきを見る。


このつぶやきが「誰かに見られる」という事柄を、
Twitterでは単純に「タイムラインに表示された回数」を基準としている。
なので、Impressionとは「自分のつぶやきの""ポテンシャル値""」と捉えると良い。

##「いいね」

いいねとは、「ユーザーがつぶやきに対して興味を持ってくれた回数」
インプレッションとは違い、つぶやきを見たユーザーが
しっかりと反応してくれた結果なのでインプレッションよりも価値が高い指標となる。

##「リツイート」

リツイートとはだれかのつぶやきを「自分のTwitterのタイムライン」にもう一度つぶやくこと。
有益な情報や、だれかに伝えたいと強く感じなければリツイートはしないので、
「いいね」よりもより価値が高い指標となる。

##「エンゲージメント」

エンゲージメントとは、結びつくという意味で実際にユーザーが
つぶやきに反応してくれた合計回数を意味している。

では、つぶやきに対してどんなことをするとエンゲージメントとなるのか？

1 つぶやきをクリック
2 # ハッシュタグをクリック
3 リンク(URLなど)をクリック
4 プロフィール画像をクリック
5 ユーザー名をクリック
6 いいねをクリック
7 リツイートをクリック
8 返信をクリック
9 フォローをクリック
10 つぶやきの詳細表示をクリック

上記の「10の行動」を自分のつぶやきに対して他のユーザーに対して行わせることができるとエンゲージメント率が高まる。


なんとなく意味を言語化しました。
なんかこうやって考えるとTwitterって本当に広告向きなのかもな。。

#参照URL
What do you mean by Twitter reach, exposure, and impressions?
https://unionmetrics.zendesk.com/hc/en-us/articles/201201636-What-do-you-mean-by-Twitter-reach-exposure-and-impressions-

15 Ways To Grow a Twitter Following
http://blogpaws.com/executive-blog/blogging-social-media-info/twitter-2/15-ways-to-grow-a-twitter-following/

http://ai-future.hatenablog.jp/entry/GEEKJOB%E3%82%AD%E3%83%A3%E3%83%B3%E3%83%97%E7%84%A1%E6%96%99%E4%BD%93%E9%A8%93%E8%AA%AC%E6%98%8E%E4%BC%9A%E8%A9%95%E5%88%A4%E6%84%9F%E6%83%B3
Heroku Cli cheetsheet 


適宜追記していきます。

## アプリケーション管理

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

引数を空にすると適当な名前が与えられてしまう。remote も自動でセットされる(空の場合のみ)。

````
$ heroku apps:create {appname}
````

## 認証関係

### 認証中のユーザを確認

````
$ heroku auth:whoami 
````

### ログイン

`auth:login`でもログインできるが、heroku login がエイリアスとして用意されている。

````
$ heroku login 
````

## Config 関連

### 設定の一覧を取得

````
$ heroku config
````

`-s` オプションで `.env`のフォーマットで出力可能。

````
$ heroku config -s >> .env
````





## Buildpacks

### Buildpack の追加

````
heroku buildpacks:set heroku/nodejs
````

利用可能な公式buildpackの一覧は https://devcenter.heroku.com/articles/buildpacks より

### Buildpack の削除

全てのBuildpackを一括で削除する。

````
heroku buildpacks:clear 
````

## Addonの管理

### Addonの一覧

Addon の一覧を表示

````
heroku addons
````

### Addonの追加

Addon の追加

````
heroku addons:create newrelic
````

### Addonのダッシュボードを開く

````
heroku addons:open scheduler
````
自作ライブラリのpod updateの時間を短縮する

Objective-Cの自作ライブラリをBitbucket/Cocoapodsで管理していたのですが、
ライブラリ更新時のpod updateに5〜10分くらいかかるので、短縮方法を調べました。

# なぜ遅いか
途中ログを出力するように、pod update --verboseを実行したら、
どうもそれぞれのライブラリのダウンロードに時間がかかっているっぽい。
どうやら何でもかんでもgit addして不要なファイルまでコミットしてた様。

# 対応方法
 不要なファイルは**.gitignoreファイルで指定**してあげるといいらしい。
 （git初心者すぎて名前ぐらいしか聞いたことなかった。。。）
しかもXcode用など、IDEに応じてテンプレがいろいろあるみたい。
今回はたまたま見つけた**gemignore**を使います。

# .gitignoreをファインダー上で表示できるようにする
すでにファインダー上で表示できてる場合は不要。

```
defaults write com.apple.finder AppleShowAllFiles true
killall Finder
```
# gemignoreをインストール
gemignoreでObjective-C用のいい感じのテンプレートを作成するので、インストールする。
インストール先（/usr/local/bin/）を指定しないとパーミッションがないと怒られた。

```
sudo gem install gemignore -n /usr/local/bin/
```

# .gitignoreファイルをテンプレートから作成
Objective-C用のテンプレートを使います。

```
touch .gitignore
gemignore a Objective-C
```

# 無視したいファイルをリポジトリから削除
.gitignoreに該当するファイルをまとめて削除

```
git rm --cached `git ls-files --full-name -i --exclude-from=.gitignore`
```

Argument list too longと出る場合は、以下コマンドをたたく。

```
git ls-files --full-name -i --exclude-from=.gitignore | xargs git rm --cached
```

# 容量削除版をコミット

```
git add .
git commit -m "不要なファイルを削除"
git push origin master
```

#結果
**だいぶ早くなりました。**
1ライブラリにつき数秒〜数十秒でおわる。

# 参考
 - [XcodeでiOSアプリ開発をする時の.gitignore](http://qiita.com/ikuwow/items/4fae81a099bf82f44749)
 - [Finderで隠しファイル・フォルダを表示 - Mac](http://pc-karuma.net/mac-finder-show-all-files/)
 - [いい感じの.gitignoreファイルをらくらく作成する](http://qiita.com/yuuAn/items/b1d1df2e810fd6b92574)
 - [あとからまとめて.gitignoreする方法](http://qiita.com/yuuAn/items/b1d1df2e810fd6b92574)
 - [Git rm をしようとすると「Argument list too long」と出る時の対処法](http://qiita.com/SShayashi/items/1fef1bb11439891a5e2c)
netstat  ネットワーク関連の統計情報を表示する



http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230845/?rt=nocnt


|Proto|プロトコル|
|:--|:--|
|Recv-Q|ソケットに接続されたユーザーに送られなかったデータのバイト数|
|Send-Q|リモート・ホストが拒否したデータのバイト数|
|Local Address|ローカル側ソケットのアドレスとポート番号|
|Foreign Address|リモート側ソケットのアドレスとポート番号|
|State|ソケットの状態（Active Internet connectionに表示されるState）。「ESTABLISHED」は接続が確立したソケット，「SYN_SENT」は接続を試みているソケッ ト，「SYN_RECV」は接続要求を受信しているソケット，「FIN_WAIT1」は切断中のソケット，「FIN_WAIT2」はリモートからの切断を 待っているソケット，「TIME_WAIT」はリモートからの切断が再送されるのを待っているソケット，「CLOSED」は未使用なソケット， 「CLOSE_WAIT」はリモート側から切断され，ソケットがクローズされるのを待っているソケット，「LAST_ACK」はすでに切断されており，ソ ケットもクローズされているソケット，「LISTEN」は接続待ちのソケット，「CLOSING」はソケットが切断されているか，すべてのデータが転送さ れていないソケット，「UNKNOWN」は状態が不明なソケットを表す|
|User|ソケットのオーナー名。ユーザー名またはユーザーIDで表示される|
|I-Node|Iノード|
|RefCnt|このソケットに接続されているプロセス数|
|Flags|現在のフラグ。フラグは「ACC」はソケットが接続されておらず，プログラムが接続要求を待っていることを表す|
|Type|ソケットのアクセス・タイプ。 「SOCK_DCRAM」はデータグラムモードのソケット，「SOCK_STREAM」はストリーム・ソケット，「SOCK_RAW」はrawソケット， 「SOCK_SEQPACKET」は信頼性の高いメッセージを扱うソケット，「SOCK_PACKET」はシーケンシャル・パケットのソケット， 「UNKONOW」不明なソケットを表す|
|State|ソケットの状態（Active UNIX dimain socketsに表示されるState）。「Free」は割り当てがないソケット，「LISTENING」は接続要求待ちのソケット， 「CONNECTING」は接続中のソケット，「CONNECTED」は接続されているソケット，「DISCONNECTING」は切断中のソケット， 「UNKNOWN」は不明なソケット，なにも書かれていない場合は他のソケットに接続されていないソケット|
|Path|ソケットを利用しているプロセスのパス|
Dockerを利用してブログプラットフォームghostを試す

# Dockerを利用してブログプラットフォームGhostを試す
## Ghostとは？
![Ghost](https://cloud.githubusercontent.com/assets/120485/6626466/6dae46b2-c8ff-11e4-8c7c-8dd63b215f7b.jpg "Ghost")
シンプルでありがなら必要な機能が十分に揃っているブログプラットフォームです。
node.js製で、Ember.jsとhandlebars.jsを利用しています。WordPressほどのCMSとしての機能は揃っていないようだが、ブログ用途であればマークダウンやタグ管理などが付いているなど十分な印象。

## 手順
### Dockerのインストール
![Docker](https://docs.docker.com/dist/assets/images/logo.png)
CentOS6.xだとコンテナがうまく起動できなかったので(Docker1.8以上からCentOS7.x以上からサポートに変更)7.1の環境で実施

* 環境: CentOS 7.1 64bit

#### rootユーザでログインし、既存のyumパッケージをアップデートする

```sh
$ yum update
```

#### yumリポジトリの追加

```sh
$ tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

```

#### Dockerパッケージのインストール
```
$ yum install docker-engine
```


#### Dockerデーモンの起動と自動起動設定
```sh
$ service docker start
$ chkconfig docker on
```

#### テスト
以下で起動ができたら問題なし

```sh
$ docker run hello-world
```

### Ghostのインストール
![Ghost](https://cloud.githubusercontent.com/assets/120485/6622822/c4c639fe-c8e7-11e4-9e64-5bec06c8b4c3.png)
DockerHubでGhostと打てば出てくる[ghost](https://hub.docker.com/_/ghost/)を利用してコンテナを作成する
#### イメージの取得
```sh
$ docker pull ghost
```

#### コンテナを作成して起動する
例としてコンテナの名前をblog-ghostとし、80番でアクセスできるように2368ポート(ghostのデフォルト）とマッピング、コンテナで利用するデータボリュームを`/usr/local/ghost`とする

```sh
$ docker run -d -p 80:2368 --name blog-ghost -v /usr/local/ghost:/var/lib/ghost ghost
```

#### アクセスして確認
`http://<IP or domain>` にアクセスして確認。

#### アカウント作成
`http://<IP or domain>/ghost/signin/` にアクセスして案内に沿ってユーザを登録する
### ghostの設定
一部設定を修正しないとリンク先がlocalhostを向いてしまったりするので以下手順で設定する。起動後、指定したデータボリューム配下に以下のように展開されている。

```
- apps/
	|- README.md
- data/
	|- README.md
	|- ghost-dev.db
- images/
	|- README.md
- themes/
	|- casper/
		|- LICENSE
		|- README.md
		|- assets/
			|- css/
				|- screen.css
			|- fonts/
				|- casper-icons.eot
				|- asper-icons.svg
				|- asper-icons.ttf
				|- asper-icons.woff
			|- js/
				|- index.js
				|- jquery.fitvids.js
		|- author.hbs
		|- default.hbs
		|- index.hbs
		|- package.json
		|- page.hbs
		|- partials/
			|- loop.hbs
			|- navigation.hbs
		|- post.hbs
		|- tag.hbs
- config.js
```

#### urlを変更
とりあえずはconfig.jsに記載されているJSONの中にあるurlを書き換えるだけでOK。メンバーの追加とかを行いたい場合はSMTPの設定などを追加する必要があります。

```sh
$ vim /usr/local/ghost
        url: 'http://<your ip or domain>',
```

#### 設定を反映させる
コンテナを再起動して完了


## 参考
* [TryGhost/Ghost](https://github.com/TryGhost/Ghost)
* [Ghostの公式日本語](http://docs.ghost.org/ja/)
* [Docker](https://docs.docker.com/engine/installation/linux/centos/)
Rails.cache.clearとRails.cache.deleteの違い

## はじめに
初めてのQiita投稿です!

Railsのアプリを作成して一段落すると、キャッシュなどを利用した高速化を行うとおもいます。
その際に、不必要なキャッシュを削除しようと思った時に、いろいろと思うところがあったので忘備録がてら記事をアップしてみます。

## 動作環境
Ruby 2.2.0
Rails 4.2.0

## Rails.cache.clear
```rb
Rails.cache.clear
```
上述のコードは、アプリでキャッシュしていたすべてのオブジェクトを削除します。
便利である一方、意図しない動作、例えば他の機能で用いていたcacheまで削除してしまい一時的に低速化する、といったことを引き起こしかねないので、使用時には注意が必要です。

## Rails.cache.delete
```rb
Rails.cache.delete('foo')
```
こちらのコードは、キャッシュしていたもののうち、引数の名前を持つものを削除してくれます。
特定のオブジェクトを削除したい時に便利です。

## 教訓
キャッシュしていたオブジェクトを削除したい時に、「削除」を意味する英語としてパッと思いついたのが'clear'でした。
そのまま確認せずにclearでテストコードを実行した結果、キャッシュがすべて消えてしまい、大変困りました...
Railsでは便利なメソッドが多数存在し、大抵は行いたい動作の「英訳した動詞」で実現することができますが、その英単語の細かいニュアンスを理解していないがために起こったミスでした...
今後はきちんとリファレンスを見て動作を確認するべきだ、ということも同時に学べた一件でした。

記事にすると知識が定着する感じがするなぁ...
Ubuntu on Windows で zshをデフォルトシェルにする

# はじめに
この方法は現在(2016/06/12)のPreviewであるWindows10 build 14361.0の仕様に基づいています。
また、いかなる事態が発生しようと当方は責任を負いかねますので了承ください。

# 準備
1. Bash on Ubuntu on Windowsをセットアップする
2. `#apt-get update && apt-get upgrade`で最新の状態にする
3. `#apt-get install -y zsh`でzshをインストール

# ラッパースクリプトを作成
1. `#mv /bin/bash /bin/.bash`でbashのバイナリを退避させる
2. 以下のシェルスクリプトを/bin/bashとして保存
3. `#chmod 755 /bin/bash`で実行可能な状態にする

```shell-session:/bin/bash
#!/bin/sh
export SHELL=/bin/zsh
exec $SHELL
exit
```

# 結果
これでBash on Ubuntu が起動するとラッパースクリプトがzshを起動させる
実際に`#pstree`とすると

```shell-session:
#pstree
init───zsh───pstree
```
となっていてzshがシェルとして動いてるのがわかる
NSImage に Tint Color を適用する機能を拡張する

OS X の Assets にもレンダリングモードがあり、iOS のように画像そのものの色を使うか Tint Color をマスクするかを指定できますが、仮に Template としたところで Tint Color を指定する方法が見つかりませんでした。Cocoa Touch には `UIImageRenderingMode` がありますが Cocoa の NSImage には `template` というプロパティがあるのみなのでこの辺りが異なるようです。

- 基本的に自由に設定できる Tint Color の仕組みがない
- UIImageRenderingMode に相当する enum ではなく、`template` プロパティで判定する
- Template 描画される色はセルによって決められる模様

![](https://qiita-image-store.s3.amazonaws.com/0/3603/45078326-2a55-7d82-d4e1-cc242eaf7ad2.png)
_Assets では Template Image にできる_

セルが決めた色ではなく iOS の Tint Color 的に好きな色で描画したいので、そのように NSImage を拡張してみます。

```swift:NSImage
import Cocoa

extension NSImage {
	func imageWithTintColor(tintColor: NSColor) -> NSImage {
		if self.template == false {
			return self
		}
		
		let image = self.copy() as! NSImage
		image.lockFocus()
		
		tintColor.set()
		NSRectFillUsingOperation(NSMakeRect(0, 0, image.size.width, image.size.height), NSCompositingOperation.CompositeSourceAtop)
		
		image.unlockFocus()
		image.template = false
		
		return image
	}
}
```

```swift:Sample
let tintColor = NSColor(red: 1.0, green: 0.08, blue: 0.50, alpha: 1.0)
let image = NSImage(named: "NAME").imageWithTintColor(tintColor)
imageView.image = image
```

元々青い色のアイコンに Tint Color を適用した結果がこれになります。
<img width="26" src="https://qiita-image-store.s3.amazonaws.com/0/3603/3f20ee5f-3952-3afc-7c7d-15fe3408c148.png">

https://gist.github.com/usagimaru/c0a03ef86b5829fb9976b650ec2f1bf4
例によって stack と ghc-mod

例によって stack と ghc-mod がうまくいかなかった顛末とこの場合の直し方．

tl;dr:

* `stack ghc` のバージョンと `ghc-mod` をビルドした ghc が食い違ってたのが原因
* 自分で `git clone` したやつからビルドするなら，`stack.yaml` をちょっと書き換えるのが楽かなあ
* はなから clone とかせずに `stack install ghc-mod` を試しておくべきだった

環境: ghc-mod の 5.5.0.0 を自分で git clone -> cabal でインストールして使っていた．今回扱っているプロジェクトは stack で管理してみようと考えている．システムの ghc （エイリアスなしの `which ghc`) は `/usr/local/ghc-7.10/bin/ghc` にある `ghc-7.10.2` で，これは [複数のGHCを共存させる - あどけない話](http://d.hatena.ne.jp/kazu-yamamoto/20140415/1397528405) を参考にして入れたものだ．


# どう動いていないか

普段 [`ghcmod-vim`](https://github.com/eagletmt/ghcmod-vim) を使ってて，これが黙って動かない（補完候補を出してくれないことによって知られる）ことがたまにある．今回もこれで気付いて，stack 慣れてないこともあって色々時間を無駄にした後

```terminal
$ ghc-mod check app/Main.hs
ghc-mod: <command line>: cannot satisfy -package-id network-2.6.2.1-25f4f3b167c1b84622324351cf72302e: 
    network-2.6.2.1-25f4f3b167c1b84622324351cf72302e is unusable due to missing or recursive dependencies:
      base-4.8.2.0-0d6d1084fbc041e1cded9228e80e264d bytestring-0.10.6.0-9a873bcf33d6ce2fd2698ce69e2c1c66 unix-2.7.1.0-bb54ee8f9f6b2600aae7a748eb88a610
```

なんだ……これは……と思って調べるとどうやら wiki に[そのまま載っている](https://github.com/DanielG/ghc-mod/wiki#cannot-satisfy--package-id--is-unusable-due-to-missing-or-recursive-dependencies):

 > Same root cause as above: [readPackageDb: inappropriate type](https://github.com/DanielG/ghc-mod/wiki#readpackagedb-inappropriate-type).

これを見に行くとつまり

```bash
$ ghc-mod --version
ghc-mod version 5.5.0.0 compiled by GHC 7.10.2
$ stack ghc -- --version
The Glorious Glasgow Haskell Compilation System, version 7.10.3
```
この2つが食い違ってるのが死の原因で，ghc-mod をそれに合わせてビルドしてね，ということらしい．

# git clone した ghc-mod を stack をつかって ghc-7.10.3 でビルド

ghc-mod は現時点での最新リリースである[v5.5.0.0](https://github.com/DanielG/ghc-mod/tree/v5.5.0.0) の段階では resolver として[lts-3.2](https://www.stackage.org/lts-3.2) を[使っていて](https://github.com/DanielG/ghc-mod/blob/v5.5.0.0/stack.yaml#L6), これはつまり ghc-7.10.2 だ．この辺を揃えるにはいろんな手があろうがもういい加減疲れていたので，まあ行けるやろってことで stack.yaml を書きかえた:

こう

```diff
--- a/stack.yaml
+++ b/stack.yaml
@@ -2,5 +2,5 @@ flags: {}
 packages:
 - '.'
 extra-deps:
-- cabal-helper-0.6.2.0
-resolver: lts-3.20
+- cabal-helper-0.6.3.0
+resolver: lts-6.2
```

cabal-helper も書き換えたのは，

```
cabal-helper: needed (<0.7 && >=0.6.3.0), 0.6.2.0 found (latest applicable is 0.6.3.1)
```
こういう感じの怒られ方をした（needed のほうが resolver の要求するバージョン，というのが直観と逆向きでここでも時間を無駄にした）ので．これは [issue も立っている](https://github.com/DanielG/ghc-mod/issues/756)．が[いい加減いちいち更新するのダルい](https://github.com/DanielG/ghc-mod/issues/756#issuecomment-185286649)し[どうせ stackage にあるんだからそっちでインストールできるし，開発者は自分で適当にできるしそもそも stack.yaml 要らん気がする](https://github.com/DanielG/ghc-mod/issues/756#issuecomment-185339692)というような話になりかけてるっぽい．

閑話休題．これでソースのあるディレクトリで `stack build` すると

```bash
$ which ghc-mod
/home/lesguillemets/.local/bin/ghc-mod
$ ghc-mod --version
ghc-mod version 5.5.0.0 compiled by GHC 7.10.3
```

でめでたしと相成る．が，とりあえず cabal の頃のアレを忘れて clone せずに stack install が一番賢い気がします．
Unityを使って0から玉転がしゲームを作りAndroid実機で動かすまで

# 個人メモレベルのリンク

・環境
MacOS 10.11.4

・総作業時間
10時間ぐらい

1. Unityのダウンロードとインストール
http://dev.classmethod.jp/client-side/unity1/
・特に障害なくインストールできるはず。

2. 玉転がしゲーム作成
https://github.com/unity3d-jp/FirstTutorial/wiki
・この項目も特になし。
　後半になると説明が足りない箇所があるけれども前半の経験でカバーできる。

3. Android用ビルド設定とビルド
https://unity3d.sakura.ne.jp/unity/android-build.html
・ビルド用のAndroid Studioのインストールにかなりかった。
・手順通りにビルドしたら、
`Exception: Error building Player: Exception: iPhoneBundleIdentifier has not been set up.`
と表示されてビルドできない。
対処法は
http://d.hatena.ne.jp/shu223/20110702/1310314681
> Bundle Identifierという項目がるので、こちらを
> com.Company.ProductName
> から、
> com.unity3d.{プロジェクト名}
> に修正すると、無事ビルドできるようになりました。
でOK
centOSにPhalconをインストールする

PhalconはPHPのフレームワークの一つ。
前々から存在は知っていたけど、触れた事はなかったのであれこれいじってみようとまずはインストールしてみた。


#インストール先
手持ちの仮想OSにcentOSがあったのでこれに入れてみる事にする。
バージョンは5.2。ちょっと古いかもしれないけど気にしない。。。


#必要要件を満たしているかの確認
Phalconの必要要件は以下。

+ php5.3以上
+ GCC compiler
+ Git

`php -v
PHP 5.5.10 (cli) (built: Apr 24 2014 10:06:18) `
＞php5.3以上はOK

`gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55)`
＞GCC compilerも入っている

`git --version
git version 1.8.2.1`
＞gitも大丈夫

#インストール手順
Phalconは他のフレームワークと違って少し特殊で
フレームワーク自体はC言語で開発されており、PHPの拡張モジュールとして
取り入れる事になる。
それ故に省メモリかつ処理速度も格段に速い。

では、まず拡張モジュールをgithubから落としてくる
`git clone git://github.com/phalcon/cphalcon.gitgit clone git://github.com/phalcon/cphalcon.git`
ダウンロード先は任意の場所でOK。

では次にカレントディレクトリを移動させてインストールを行う。
`cd cphalcon/build
./install`

`Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20121212/
Installing header files:          /usr/local/include/php/

Thanks for compiling Phalcon!
Build succeed: Please restart your web server to complete the installation`

ここまできたら一度サーバーを再起動します。

#Phalconを有効にする
php.iniの任意の場所に以下の記述を追加して拡張モジュールを有効にします。
`extension=phalcon.so`

書いたらapacheを再起動。
これで終わりです。
phpinfoの情報を見てPhalconに記述が出ていればOKです。
ES2015 で Python の @classmethod のように static なメソッド内で自クラスを参照するには this を使えば良い？

Python なら、クラスメソッド内から自分のクラスを第一引数で参照することができる。
クラスメソッドを通じて自分自身のインスタンスを提供する手段はプログラミングではよくある。
たとえば `datetime.date.today()` は `datetime.date` のインスタンスを生成する。
`date(year, month, day)` と初期化する作業を、肩代わりしてクラスメソッドが行って返却している。

Python ではデフォルトで第一引数が呼び出し元になっており、
メソッドでは `self` 、クラスメソッドでは `cls` という変数名をつける慣習になっている。

**ES2015 には `static` という Python の `@staticmethod` デコレータに相当するキーワードは存在するが、 `@classmethod` に相当するキーワードがない。**
**ではどうやるか** という話。 (自分でもこのやり方で合っているか自信がない)

試した環境は NodeJS v6.1.0 。既に V8 でサポートされているので特に babel を経由していない。

まず Python のコード例を書く。

## Python での例

```python
class X(object):

    @classmethod
    def create(cls):
        return cls()


class Y(X):
    pass


x = X.create()
y = Y.create()

print(isinstance(x, X))
print(isinstance(y, X))
print(isinstance(y, Y))
```

```console:実行結果
True
True
True
```

# JavaScript (ES2015) での失敗例

```js
class X {
  static create() {
    return new X();
  }
}

class Y extends X {};

const x = X.create();
const y = Y.create();

console.log(x instanceof X);
console.log(y instanceof X);
console.log(y instanceof Y);
```

```console:実行結果
true
true
false
```

`X` 内で `new X();` がハードコードされてしまっているため、
継承した `Y` の `create()` により生成されるインスタンスである `y` までもが、
実際には `Y` ではなく単なる `X` になってしまっている。

これは全く望み通りではない。

# JavaScript (ES2015) での成功例 (冗長 ver)

冗長だがシンプルに、新しく static メソッドを再定義する戦略をやってみる。

```js
class X {
  static create() {
    return new this();
  }
}

class Y extends X {
  static create() {
    return new Y();
  }
}

const x = X.create();
const y = Y.create();

console.log(x instanceof X);
console.log(y instanceof X);
console.log(y instanceof Y);
```

```console:実行結果
true
true
true
```

ちゃんと望み通りの結果になっている。
`y` は `Y` のインスタンスであるし、`Y` は `X` を継承している。
しかし、これでは継承するたびに全てのクラスメソッドを再定義する必要がある。
そのために、元のクラスでの定義を常に把握しておかなくてはならなくなってしまう。
不便だ。

# JavaScript (ES2015) での成功例

そこで、いろいろやっているうちに `this` を思い出した。
Python での `self` が `this` に相当するなら、同じ関係がクラスメソッドでも成り立つのではないか？
なるほど、クラスから生えている static なメソッドをドット演算子で呼んだら、 `this` はそのクラスになる……。

というわけでやってみた。

```js
class X {
  static create() {
    return new this();
  }
}

class Y extends X {};

const x = X.create();
const y = Y.create();

console.log(x instanceof X);
console.log(y instanceof X);
console.log(y instanceof Y);
```

```console:実行結果
true
true
true
```

目論見通り。
`y` は `Y` のインスタンスであるし、`Y` は `X` を継承している。
ハードコードされていないので `Y` の `create()` を再定義する必要がない。
オフラインでもChatOpsしたい！Dockerで解決しよう！

## 経緯
ざっくり言うと、ChatOpsしたい！けどネットワークに制約がある！なのでDockerで必要なものを用意してイメージを持ち込もう！という経緯です。


## 入れるもの
### Restyaboard
<IMG SRC="http://restya.com/images/view-banner.png" WIDTH="500PX">

* [Restyaboard](http://restya.com/board/)

Trelloのクローンです。<br>
プロジェクト管理でRedmineを使ってましたが、カンバンを使いたく、かといってRedmineのカンバンがあるけどもRedmineは個人的に[今後の展望](https://www.farend.co.jp/blog/2016/03/rxtstudy/)にwktkしなかったので流行ってるTrello！・・・を使えないからそのクローンのRestyaboardを使ってみようという経緯です。

### Rocket Chat
<IMG SRC="https://raw.githubusercontent.com/Sing-Li/bbug/master/images/dronechatops.png" WIDTH="500PX">

* [Rocket Chat](https://rocket.chat/)

Slackのクローンです。<br>
最初は[Let's Chat](http://sdelements.github.io/lets-chat/)を使ってました。<br>すごくシンプルで、かつオシャンティなので浸透も早かったです。ただ問題点が、アバター画像がgravatarで外部接続が必要で、[こちらの記事](http://qiita.com/kounoike/items/86a2ab82f69e7d7a5550)を参考に手を加える必要がありました。アップデートする度に手を加えるのも辛いし、もっといいのないかと探してたら見つけたのが[Rocket Chat](https://rocket.chat/)です。

高機能なのですが、浸透するのに逆に足かせになりそうだなと思いつつ、WebRTCでのビデオ通話ができるという点が大きくメリットで切り替えるようにしました。



#### Hubot
<IMG SRC="https://hubot.github.com/assets/images/screenshots/dangerroom-full.png" WIDTH="500PX">


* [Hubot](https://hubot.github.com/)

Gitlabなどと連携させるためにBOTとしてHubotもいれます。


### Jenkins2
<IMG SRC="https://jenkins.io/images/pipeline-stage-view.png" WIDTH="500PX">

* [Jenkins2.0](https://jenkins.io/2.0/)

Jenkinsがメジャーバージョンアップしました！（パチパチー！）  
よく使われるプラグインがデフォルトで同梱されるようになったらしいので、せっかくだし２でいこう！という経緯です。



### その他
コード解析用にSonarQubeと、ナレッジベース用にLodgeかなにか・・・を入れようと思ってます。

## Docker Compose
Docker Composeで入れることができます。  
<IMG SRC="https://www.docker.com/sites/default/files/Compose.png" WIDTH="200PX">


各OSSがオフィシャルで公開しているものを組み合わせて１つのComposeファイルにします。
※```docker-compose.yml```ファイルは[ブログ](http://kakushika.hatenablog.com/)に記載しておきます。

Docker Composeを利用するうえで、よく利用するコマンドをメモとして残しておきます。

```cmd
// Composeで起動中のイメージを確認
# docker-compose ps

// Dockerfileをビルドします
# docker-compose build

// デーモン状態で起動します
# docker-compose up -d
```
プロフェッショナリズムと独学 | エンジニアとして日々心がけていること

背景
フリーのWebエンジニアやってます。３０で大学入って１年、アカデミックな部分やドキュメント化の重要性を理解しつつあるので、独学に関する心構えをちょっと整理してみようと思う。
"敵を知り、己を知れば、百戦危うからず"とは言うけれど実は己を知る方が難しくて敵を知るより大事なんじゃないかと思っている今日このごろ。
新人プログラマには結構役に立つかもしれない。ぬる～い精神論とゆる～い方法論の２部構成で出来てるよ。

関連記事としては

* [ロシアの天才ハッカーによる【新人エンジニアサバイバルガイド】](http://qiita.com/jacksuzuki/items/b2fa6b44962e73a53d08)
* [エンジニアで稼ぐために大切な１３のコト](http://qiita.com/kazukichi/items/7379b75fba2f90d3cf45)
* [WEBサービスで起業したい人に読んで欲しい１８のコト](http://qiita.com/kazukichi/items/aeba286c2a750081e5c0)
* [[翻訳] 技術向上ガイド](http://qiita.com/side/items/6df059bdbc3c1db0a334)
* [”誰でも簡単に作れちゃう”が引き起こす、想像力と覚悟の欠如](https://note.mu/loveandsheep/n/nfaf20be055da) - 外部リンク

# 心技体 | 精神論
ここがプロフェッショナリズムの部分になるんだけど、この定義が意外と難しい。
個人的には"安定したクオリティのサービス（商品）を安定して供給できる"事がプロの条件なんじゃないかと思う。ポイントはクオリティの良し悪しは関係なく安定していれば良い所にある。
後は自分の職業がどういう役割を持っているかを自分なりに理解していると更にいい。これは、自分の会社や環境、時代によっても変わるから、時間とともに見えてくる部分でちょっと哲学だけど例えば、
エンジニアは"作ったことがないものを作れる能力が必要だ"とか
デザイナは"問題の本質を理解し解決へ導く能力を求められている"とか
他人には余り理解できなくても大丈夫。というか個人的見解なので他人には押し付けないように。。

## 心
マインドセットというのがいかに大事かは最近特に感じる。
将来どうなりたいのかって具体的に自分のゴールを分かっている方がいい。
"楽して適度に金が入る仕事がしたい"でも"その道のすごい人になる"でもいいんだけど、
現実的な物を考える。今の激化していく競争社会だと"楽して適度に金が入る仕事がしたい"って言うもわりと競合がいっぱいいるのでそれなりにちゃんと取り組まないといけなくなってくる。
そこで心構えとしては、

* 謙虚さ
* 諦めないずに考えぬく精神
* １を聞いて１０を知る精神
* 素直さ
* 問題の80%は自分の中にあると考える

と言うのはいろんな意味で大事。面白い事にマインドセットが出来てるとやることが見えてくるので、必要な技術と体力は自然に身についてくる。

## 技
エンジニアでいうとこの辺りは"知識"とか"テクニック"になると思うんだけど。この辺りもわりと心の持ちようだと思う。時間は無限には無いので自分のゴールに照らし合わせて取捨選択して必要なものに関しては徹底的に磨き上げる。

* 知ったら試す
* 出来るまでやる
* 出来たら質を上げる

技は一種のツールとしても捉える事ができる。仕事を楽に効率よく進めるためにはその技術のマスタリティを上げるのが一番の近道だと思う。

## 体
マインドセットと技の鍛錬が出来てると割りと、体は出来てくると思うんだけど、逆に体を鍛えると技とマインドセットは安定してくる。体力があれば遊びにもいけるしいい事が多い。

* 健康が全ての基本
* 適度な運動をすると体も軽くなって疲れにくくなる
* ちゃんと休憩をする

# 守破離 | 方法論
最近は何かと学びやすい環境が整っていているし面白いものも沢山あって、それはすごくいいんだけど、結局目的がないとただ知っただけで何にも繋がらない。
この辺りが最初に出た"マインドセットが大事"って所や"[エンジニアで稼ぐために大切な１３のコト](http://qiita.com/kazukichi/items/7379b75fba2f90d3cf45)"や"[”誰でも簡単に作れちゃう”が引き起こす、想像力と覚悟の欠如](https://note.mu/loveandsheep/n/nfaf20be055da)"に繋がってくる。
最近、問題解決手法としてのデザインが重要視される要因じゃないかとも思う。

## 守 (基礎)
守は基礎を作る段階、型を学んで会得する。
型と言うのは昔から受け継がれているモノって言う解釈だけど、
Web系じゃ余り昔からって物がないので、定番のものとかパターン、雛形なんかがそれに当たる
とにかく真似する。真似することで自分の中にモデルが出来上がってくる。
これが簡単なようで難しい。
なぜなら完全に真似できるには同じレベルのスキルが必要になるから。
具体的には自分の師になるサイトや本を一つ決めて
**マスター（何も見ずに型を再現)**できるまで繰り返し練習する。
この段階は最初のうちは新しいことが沢山でドンドン身について面白いけど
後半はあまり伸びなくなってあまり面白くなくなる。その辺りで脱落しないように気をつける。
この段階では常にセオリーやレシピみたいなものがあればそれに従う=守。

## 破 (変化 / 応用)
基本を**マスター**したら型の改善や型から派生しうる
アイディアのテストなんかをして型やセオリーの真意、本質を理解する。
他の業種の知恵なんかを取り入れることは出来ないか見聞を広める。
この段階にではいろんなサイトやブログで記事学ぶよりも
自分の学んだものや考察を公開するポジションになる。
公開するのは人の為でもあるけど
自分の考えをまとめるきっかけになったり
そのアイディアが受け入れられるかのフィードバックを貰えるという点の方が重要
ブログを持ったりQiitaに記事を投稿すると良い。
レシピなんかがあればそれの改善を試みる=破。

## 離 (達人 | 独自性)
経営や独立、型を離れて独自の型やセオリーを作る段階。
オレオレCMSを作って公開したりウェブサービスを作たり
オリジナルのレシピを作る=離。

# まとめ
基本的には目的ありき。
例えば"何かWebサービスを作ってお金を稼ぐ"事が目的の場合
それの最短方法を考えると、利益の出ているWebサービスの
デザインやビジネスモデル、マーケティングのパターン分析し徹底的に真似る
次に改善を考える、そして独自性のあるサービスへ移行するという流れになる。
技術ありきで考えたい場合にしても先に
どんな会社に入りたいか、もしくはどんな仕事をしたいか考える。
出来れば給料の相場も調べておくといい。
まとまったかな？

半分独り言みたいですが、意見やコメントがもらえると嬉しいです。
VBAでサロゲートペア対応Len

#サロゲートペアに対応したLEN

テストしてみたらLENがサロゲートペアに対応していなかったので作成。

```vb.net:サロゲートペア対応Len
'--------------------------------------------------------------
'  サロゲートペア対応Len
'--------------------------------------------------------------
Function LenEx(ByVal strBuf As String) As Long

    Dim bytBuf() As Byte
    Dim lngBuf As Long
    Dim i As Long
    Dim lngLen As Long
    
    lngLen = 0
    
    If Len(strBuf) = 0 Then
        LenEx = 0
        Exit Function
    End If
    
    bytBuf = strBuf
    
    For i = LBound(bytBuf) To UBound(bytBuf) Step 2
    
        lngBuf = LShift(bytBuf(i + 1), 8) + bytBuf(i)
    
        Select Case lngBuf
            '上位サロゲート
            Case &HD800& To &HDBFF&
                lngLen = lngLen + 1
            '下位サロゲート
            Case &HDC00& To &HDFFF&
                'カウントしない
            Case Else
                lngLen = lngLen + 1
        End Select
    
    Next
    
    LenEx = lngLen

End Function
'------------------------------------------------------------------------------------------------------------------------
' 左シフト
'------------------------------------------------------------------------------------------------------------------------
Function LShift(ByVal lngValue As Long, ByVal lngKeta As Long) As Long
    LShift = lngValue * (2 ^ lngKeta)
End Function
```

他のソースをごらんになりたい方はこちらへ
Excelを便利にする250以上の機能を体系化したアドインはこちらです。
「RelaxTools Addin」窓の杜大賞受賞ソフト
http://software.opensquare.net/relaxtools/
cygwinでmatplotlibがimportできない

cygwinでインストールできるデフォルトのpythonのバージョンは2.7！
numpy，scipyはインストール、インポートできたがmatplotlibだけはなぜかimportできなかった。
もうほんとこういう時macが欲しくなる...
やっぱ仮想でCentかUbuntuでもいれようかな...
気を取り直してcygwinnで頑張ってみる！

### まずは```easy_install```を使えるようにする
今回はsetuptools-23.0.0.zipをインストール。
https://pypi.python.org/pypi/setuptools このあたりからダウンロードして解凍。
解凍したディレクトリはpythonをインストールしたディレクトリに放りこんだ！

```
$ easy_install-2.7 pip
```
でpipをインストール。

### ```numpy``` ```scipy``` ```matplotlib```もインストール。

```
$ pip install numpy
$ pip install scipy
$ pip install matplotlib
```
ここで```matplotlib```エラーが出る。
私は```pip install -U matplotlib```とかやりまくってたらいつの間にかインストールできてた笑
ごめんなさい、理由はわからないです。

### さぁ、importだ！

```
$ python
$ import numpy
$ import scipy
$ import matplotlib
   ここでエラー！
```

### matplotlibとの闘い
ざっと5時間は闘っただろう...
結論から言うとmatplotlibのVerの問題らしい。
私の場合はmatplotlib Ver1.1.1でうまくいった。

```
$ $ easy_install-2.7 matplotlib==1.1.1
```

長い闘いだった...

### ```import matplotlib.pyplot``` エラー...

matplotlibがインポートできたと思ったらまた躓いた...
解決法は.bashrcに以下を記入して、```$ runx```を実行することでインポートできる。

```ruby:.bashrc
  export DISPLAY=:0.0
  alias runx='run xwin -multiwindow -noclipboard'
```
jquery click

```text
刚刚在 chrome console 下玩 jquery ，发现一点：

对于有 onclick 事件的元素，那么 $("xxx").click() 就全部点完他们了。比如一堆方格子，都有 onclick 事件，点了就改CSS变色，那么 $("xxx").click() 就一下子全部变色了。

而对于 <a> ，却不能如此。比如 <a class="hentai" href="xxx">shenshi</a> ，那么 $(".hentai").click() 却无效，即使 $(".hentai") 只返回一个 <a> 元素对象的数组。 $(".hentai")[0].click() 就行。在网上看到别人是绑定了超链接的click()里面用修改window.location.href来实现。

ps 然后我发现我对 each() 的用法也不太熟悉，对于操作页面中很多的 <a> 我都不太懂，比如我是期望 $("a").attr("href") 就能得到一个数组，里面的元素就是页面全部超链接的URL，结果只是第一个。后来想想就来个 $("a").each(function(){thislinkhref.push($(this).attr("href"))}) ，然后 thislinkhref 里面才是我想要的，不知道这样做是不是好方法。还得继续学jquery啊。﻿
```

https://plus.google.com/+iCaoMu/posts/bbfR9XgCrgt

http://stackoverflow.com/questions/2445599/jquery-object-as-a-array-id0


http://www.growingwiththeweb.com/2012/10/jquery-attrid-vs-0id-performance.html

https://jsfiddle.net/1mmL8jd6/1/

http://stackoverflow.com/questions/7999806/jquery-how-to-trigger-click-event-on-href-element

http://makandracards.com/makandra/17267-trigger-a-link-s-click-action-with-javascript
AngularJS ボタン式 全選択チェックボックス


# 目的
**AngularJS**で**ボタン**で**全選択**ができる**チェックボックス**がなかった。
チェックボックスによる全選択はあったのだけど。。
なので作ってみた。

# 参考サイト

ngChecked
[http://js.studio-kingdom.com/angularjs/ng_directive/ng_checked#1](http://js.studio-kingdom.com/angularjs/ng_directive/ng_checked#1)

チェックボックスによる全チェック
[http://curtaincall.weblike.jp/prog/javascript/angularjs/form-checkbox](http://curtaincall.weblike.jp/prog/javascript/angularjs/form-checkbox)

# ソース
```html:toggleselect.html
<!DOCTYPE html>
<html lang="ja" ng-app="myApp">
<head>
    <meta charset="UTF-8" />
    <title>AngularJS toggle select</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"></script>
    <script>
        angular.module('myApp', []);
        angular.module('myApp').controller('loopCtrl', function() {
            this.files = [
                {"name":"今日のぽぴー"},
                {"name":"飛鳥文化アタック"},
                {"name":"変態という名の紳士"},
                {"name":"ぴーちくぱーちくほほいほいほい"}
            ];
            // 繰り返し選択
            this.toggleSelect = function () {
                var chkCnt = 0;

                for (var i = 0; i < this.files.length; i++) {
                    if (this.files[i].checked) {
                        chkCnt++;
                    }
                    else {
                        this.files[i].checked = true;
                    }
                }

                // 全チェック時は全false
                if (this.files.length == chkCnt) {
                    for (var i = 0; i < this.files.length; i++) {
                        this.files[i].checked = false;
                    }
                }
            };
        });
    </script>
</head>
<body>
<div ng-controller="loopCtrl as lCtrl">
    <section>
        <ul class="imglist">
            <li ng-repeat="file in lCtrl.files">
                <input type="checkbox" ng-model="file.checked" id="files_{{$index}}">
                <label for="files_{{$index}}">{{file.name}}</label>
            </li>
        </ul>
        <!-- 全選択ボタン -->
        <input type="button" ng-click="lCtrl.toggleSelect()" value="selectAll">
    </section>
</div>
</body>
</html>
```
kobitoについて


## サンドボックス

~/Library/Containerの下にDocumentsとかいろいろなシンボリックリンクがあって不安になった。他のアプリもじゃんってなたたアル。サンドボックス化が数年前にあって、アクセス制限はあるらしいのでクラックとかじゃなさそう。でも若干不安になる構造だな。

http://news.mynavi.jp/articles/2012/08/10/deepmlion/003.html
http://eyeballonly.com/blog/2014/02/20/macosx-sandbox/
http://cptawagoto.jugem.jp/?eid=16

## バックアップ

有料の同期はあるけどバックアップはとりたかったのでとるようにした。それもダメになったら考えないとだな。。あとは、非公開記事はqiitaに保存されないみたいだから。

## kobitoのキャッシュを消す

Library/Containers/com.qiita.Kobito/Dataを削除したら消えたっぽい。qiitaから取得だと上書き保存してくれないっぽいアラートが出るから。
mackup でdotfilesを管理


## 手軽に、、時間かかったしミスった

いろいろ調べたけど複雑なのは心配だったのでこれにした。
結果、、良かったのだけれど、途中ミスっていろいろファイルが消失。
mackup backupをしたら、容易に削除しないようにしませう。
消すならバックップは必要かと。
理解していなかったのはbackup時点でシンボリックリンクに差し代わることでした。。orz
storageの設定によるとは思うけど。

Mac 環境構築の自動化 2015年末版 ( homebrew + homebrew-cask + homebrew-brewdle + mackup + crontab + mas-cli ) - Qiita
http://qiita.com/ctokoro/items/d564248eeaebbf003edc

mackup/README.md at master · lra/mackup
https://github.com/lra/mackup/blob/master/doc/README.md#add-support-for-an-application-or-any-file-or-directory

mackup/.mackup.cfg at master · lra/mackup
https://github.com/lra/mackup/blob/master/doc/.mackup.cfg

File Finder
https://github.com/lra/mackup/find/master

dotfiles, Atomの設定をMackupで管理する - Qiita
http://qiita.com/saboyutaka/items/b4aaa1f5fcd0ea148b2a

## 復旧の際のログの一部

```
find . -type l -ls|grep dotfile
rm -rf "$HOME/Library/Preferences/PhpStorm2016.1"
rm -rf "$HOME/Library/Caches/PhpStorm2016.1"
rm -rf "$HOME/Library/Application Support/PhpStorm2016.1"
rm -rf "$HOME/Library/Logs/PhpStorm2016.1"
```

## 運用

command

```
mackup backup -f # yes|hoge がいいのかしら？
mackup uninstall -f
git commmit
```

tree

```
.mackup
├── alfread.cfg #シンボリックリンクにしたらダメだったので無効
├── kobito.cfg #シンボリックリンクにしたらダメだったので無効
└── mackup_script.cfg #同期用のスニペットなど
.mackup.cfg [error opening dir]
.mackup_script #同期用のスニペットなど
├── mackup_backup_commit.sh
└── mackup_unison.sh # unisonコマンドはel-capitanでダメだったのでrsyncに差し替え
```

## 課題

OSの違いとかを踏まえて必要な分だけ同期させるようなこと。。
いまのところはほぼバックアップ的な用途。

## なんかエラーが出てうまく動かない。。

https://github.com/lra/mackup/issues/734

pipインストールしてコードを書き換えて対応
pip3でやった

> 
In /usr/local/lib/python2.7/dist-packages/backports/configparser/__init__.py, I changed this line optname = self.optionxform(optname.rstrip()) to optname = self.optionxform(optname.encode('utf-8').rstrip()) and the problem is solved.
  fmartingr referenced this issue on 4 Nov 2016
 Open
Fix string conversion error on python 3 #909
 @ooystein

> 
I solved this by removing the utf-8 decoding of the path in mackup/config.py
<delete>
224: else:
225:     path = path.decode("utf-8")
</delete>