OmniAICreator/Qiita-1.07M huggingface dataset:
EntityFramework 6でDecimalの値が小数点第3位で四捨五入されてしまう場合の対処法

ASP.NET MVC + Entity Framework 6 + OracleのDB FirstでWebアプリを作っていて、画面から入力した数値が、更新時に小数点第3位で四捨五入されてしまう問題に遭遇したので、対処法を記録しておきます。

「entity framework decimal mapping」の検索ワードで出てきた [Entity Framework Data Type Mapping](https://www.devart.com/dotconnect/oracle/docs/DataTypeMapping.html#n2_) を見てみると、Decimal型のプロパティはDecimalPropertyConventionクラスによってNumber(18,2)にマッピングされているようです。

DbContextを継承したクラスでDecimalPropertyConventionを無効化することによって解決しました。

```vbnet
Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
    ' disable decimal property conversion
    modelBuilder.Conventions.Remove(Of DecimalPropertyConvention)()
End Sub
```

プロパティ個別に設定したい場合は、こちらが参考になりそうです。
[stackoverflow - Decimal precision and scale in EF Code First](http://stackoverflow.com/questions/3504660/decimal-precision-and-scale-in-ef-code-first)
PHP: 5行でテンプレートエンジンを作る

## 欲しいもの


```php
$template = '<a href="{url}" class="{class}">{text}</a>';
```

というテンプレートと

```php
$variables = [
	'url'   => 'http://example.com',
	'class' => 'btn btn-default',
	'text'  => 'テスト',
];
```

という変数を渡すと

```html
<a href="http://example.com" class="btn btn-default">テスト</a>
```

という文字列を返してくれる関数が欲しい。RubyやPythonなら、sprintfや%でかけちゃいますが、PHPはそういう関数がないんですよね・・・。Output Buffer Filterと`<?=`を組み合わせたり、文字列の変数展開と`extract`を組み合わせたりすればPHPでも近いことはできますが、ハック感があるので今回は文字列操作の関数だけで実装してみました。

## 関数の実装

```php
function render($template, array $vars) {
	return preg_replace_callback('/{(\w+)}/', function($m) use ($vars) {
		return $vars[$m[1]];
	}, $template);
}
```

使い方

```php
$result = render('<a href="{url}" class="{class}">{text}</a>', [
	'url'   => 'http://example.com',
	'class' => 'btn btn-default',
	'text'  => 'テスト',
]);
assert($result === '<a href="http://example.com" class="btn btn-default">テスト</a>');
```
ansible で SNIエラー(SSL Certificate does not belong to *)が出た時の対処法

# 概要

centos7 に ansible を epel から rpm でインストールした場合、get_url で github からファイルを取得しようとすると証明書のエラーになります。その対処法についてです。

# エラーになるケース

yum update をします。

```
yum -y update
```

ansible を epel からインストールします。

```bash
$ yum install -y epel-release
$ yum install -y ansible
```
ansible 1.9.4 がインストールされました。

playbook では get_url で github の TOP ページを取得します。
（ファイル名を playbook.yml とします）

```yaml
- hosts: all
  connection: local
  environment:
    https_proxy: "{{ lookup('env', 'https_proxy') }}"
  tasks:
    - name: Get github
      get_url:
        url: "https://github.com/"
        dest: /tmp/github.top

```

hosts は localhost を定義します。
（ファイル名を hosts とします）

```
localhost
```

playbook を実行します。

```bash
ansible-playbook -i hosts playbook.yml
```

証明書が github.com のものじゃないよ、というエラーになります。

```
TASK: [Get github] ************************************************************ 
failed: [localhost] => {"failed": true}
msg: SSL Certificate does not belong to github.com.  Make sure the url has a certificate that belongs to it or use validate_certs=False (insecure)

FATAL: all hosts have already failed -- aborting
```

# エラーの原因

こちらに記載がありました。
https://github.com/ansible/ansible/issues/11579

github では SNI が使用されています。
ansible を SNI 対応版（2系）に更新する必要があります。
~~※上記リンクでは python 2.7.9 以降が必要とありますが、2.7.5(centos7 のプリインストールバージョン) でも問題ありませんでした。~~ ⇒怪しいので python 2.7.11 をインストールします。

# 対応

## ansible v2.0.0.1-1 のインストール

まず、ansible のソースから rpm パッケージを作成したり、ansible をインストールするのに必要なツールをインストールします。

```bash
$ yum install -y epel-release
$ yum install -y rpm-build python2-devel python-setuptools  PyYAML python-jinja2 python-paramiko  python-six python-httplib2 python-keyczar sshpass
```

rpm パッケージを作成してインストールします。

```bash
$ cd /usr/src
$ wget https://github.com/ansible/ansible/releases/download/v2.0.0.1-1/ansible-2.0.0.1.tar.gz
$ tar xvf ansible-2.0.0.1.tar.gz
$ cd ansible-2.0.0.1
$ make rpm OFFICIAL=yes
$ rpm -Uvh ./rpm-build/ansible-*.noarch.rpm
```

## python 2.7.11 のインストール

個人的に python のバージョン管理ツールを使ったことがないので、単純にソースからインストールします。

/opt/python にインストールします。

```bash
$ mkdir /opt/python
$ cd /usr/src
$ wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
$ tar xvf Python-2.7.11.tgz
$ cd Python-2.7.11
$ ./configure --prefix=/opt/python
$ make
$ make install
$ python -V
Python 2.7.5
$ /opt/python/bin/python -V
Python 2.7.11
```

## playbook 内で使用する python を指定

playbook.yml の tasks の先頭に以下を追記します。

```
    - name: set ansible_python_interpreter
      set_fact: ansible_python_interpreter="/opt/python/bin/python"
```

## playbook を再度実行

github から取得することができました！

```bash
TASK [Get github] **************************************************************
changed: [localhost]
```

# Vagrantfile

上の環境（centos7 ansible 2.0）を構築する Vagranfile を[こちら](http://qiita.com/sugiyasu-qr/items/cd9690d937be1a3bfaf9) に記載しました。
管理者権限でファイルを編集するbat

# 概要
tnsnames.oraをちょくちょくいじることがあるんですが、深い場所にあるし管理者権限で開かなきゃいけなかったりとけっこう手間になる。

# コード
下記のような内容を書いたbatをつくり、任意の場所に置いてダブルクリックで実行する。

```lang:.bat
powershell -command "Start-Process -Verb runas \"エディタのパス\" \"編集したいファイルのパス\""
```

やってることは.batの中からPowerShellを呼び出し、runasで管理者権限でエディタにファイルを渡して実行しています。

# 例
tnsnames.oraをサクラエディタで編集したいときは下記のようにしてデスクトップなんかに置く。usernameのところは置き換えてください。

```lang:edit_tnsnames.bat
powershell -command "Start-Process -Verb runas \"C:\Program Files (x86)\sakura\sakura.exe\" \"C:\app\username\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora\""
```
nginxにjenkinsを入れるよ

## 前提
ec2を立てておく

* 何はともあれSELinuxを停止だ！

``` /etc/selinux/config
# SELINUX=enforcing 
SELINUX=disabled ←変更(起動時に無効にする)
```

### 必要なものをyumで落とす(適宜必要なものを入れる。すべてが必要ではない)
``` 
$ sudo yum install -y git make gcc gcc-c++ zlib-devel openssl-devel httpd-devel curl curl-devel readline-devel tk-devel libxslt-devel texinfo bzip2 openssl-devel wget java-1.7.0-openjdk-devel 
``` 


## 80,8080を開けておく、EC2でも開けておく

``` /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
``` 

``` 
$ sudo systemctl restart iptables
``` 


## Jenkins インストール

```
$ wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
$ rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
$ yum install -y jenkins
``` 

``` /etc/sysconfig/jenkins
# 修正前
# JENKINS_ARGS=""
# 修正後
JENKINS_ARGS="--prefix=/jenkins --httpPort=${JENKINS_PORT} --ajp13Port=${JENKINS_AJP_PORT}"
```

```
$ sudo chkconfig jenkins on
$ sudo /etc/init.d/jenkins start
```



## nginx インストール
### OS確認

```
$ cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.2 (Maipo)
```

### 対応rpmを更新、後インストール
```
$ rpm -ivh http://nginx.org/packages/rhel/7/noarch/RPMS/nginx-release-rhel-7-0.el7.ngx.noarch.rpm
$ yum install nginx
```


``` 
$ echo PATH=$PATH:$HOME/sbin >>.bash_profile 
source ~/.bash_profile
```


### directoryを堀る

```
$ mkdir -p /var/www/html/
```

### nginx設定変更
``` /etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;
    location / {
        #root   /usr/share/nginx/html;
        root   /var/www/html/;
        index  index.html index.htm;
    }
    location ~ /jenkins {
      proxy_redirect     off;
      proxy_set_header   X-Forwarded-Proto $scheme;
      proxy_set_header   Host              $http_host;
      proxy_set_header   X-Real-IP         $remote_addr;
      proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
      proxy_set_header   Host $host;
      proxy_pass         http://jenkins_server;
  }
}
```

``` /etc/nginx/conf.d/jenkins.conf 
upstream jenkins_server {
  server 127.0.0.1:8080 fail_timeout=0;
}
```


### nginx 起動

```
$ sudo chkconfig nginx on
$ sudo systemctl start nginx.service
```

### ブラウザ確認
終了


## TimeZone 設定
設定変更

$ vi /etc/sysconfig/jenkins
```
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Tokyo"
``` 

### 再起動
```
$ systemctl restart nginx.service
```
実験用サーバでのChrony（NTP）設定（Ubuntu）

# まえがき
ネットワークを使った時刻合わせといえばNTPが有名だったが，最近ではCentOSが採用したこともあってChronyが普及してきています．
特徴としては以下の通り．
1.NTPより高精度（らしい）
2.クライアントにもサーバにもなれる
3.従来のNTPサーバを使える
4.いちいちデーモンを止めなくてもntpdateができる

この記事では特に実験や測定試験などで各サーバの時計を積極的に同期させる場合の設定について説明します．

# インストール
aptからすんなりインストールできます．

```
$ sudo aptitude install chrony
```

# 設定
ファイルの場所は/etc/chrony/chrony.confになります．

## サーバの設定

```
allow 192.168.0.0/24
```

実験用のサーバであれば外部のNTPサーバを利用して正確に時刻を同期する必要がないので，実験用ネットワーク内（この例では192.168.0.0/24のネットワーク）に標準となるサーバを設置し，上記のように同一ネットワーク内からのアクセスを許可しておきます．
とはいえ，時刻があまりにも現実世界と異なっていると後々面倒なことになるので，定期的に手動で時刻を合わせるか，外部ネットワークに接続してntp.nict.jp等と時刻同期を行っておくことをお勧めします．


## NTPサーバの指定

```
server 192.168.0.101 iburst minpoll 5 maxpoll 6
```

ntp.confと同様にNTPサーバを指定し，その後にオプションを追記します．
iburstで起動時に4回ぐらいサーバと時刻同期をし，精度を高めます．
minpoll,maxpollがポーリング間隔の最小値と最大値で2のべき乗秒を表しています．
この設定だと最小で2の5乗=32秒，最大で2の6乗=64秒という割と短い間隔で時計を合わせる設定となっています．

## ハードウェアクロックの設定

```
rtcsync
```

上記の記述でハードウェアのクロックの補正を自動的に行ってくれます．
ハードウェアクロックの値を確認する場合はhwclock -r, 手動で合わせるならhwclock -wをコマンドから叩いてください．
特に再起動したときに盛大に時間がずれる場合，この1行を追加しておくときっちり合わせてくれるようになります．

## ステップ調整の指定

```
makestep 0.1 10
```

起動時にDrift（徐々に同期させていく）ではなく，Step（強制的に同期させる）で合わせる場合の条件の指定方法です．
0.1秒以上ずれていたらStepで同期し，0.1秒以下になるまで最大10回まで同期を試みます．
基本的に時計がいきなり大きく変化すると，プログラムによっては予期しない挙動を起こすことがあるので，実際の運用ではDriftさせた方が安全ですが，実験や測定の場合はDriftによってなかなか時間が合わないことの方が問題になる場合があります．

ちなみに手動でStepによる同期を行うには

```
$ chronyc -a makestep
```

と叩けば合わせてくれます．

# まとめ
以上で実験用のChrony設定は終わりです．
設定が反映されているかどうかはchronyc sourcesコマンドを叩いて確認してください．ヘッダに^*が表示されていれば問題ありません．
こうした設定で有線環境下であればだいたい1msec以下の誤差で時刻同期ができます．

# 書くかも
もっと精度を上げる方法としてUDPパケットを使った独自プロトコルによる時刻補正プログラムを作成したりしましたが，また後で書くかもしれません．
golangでcrontabからドキュメントを作成するコマンドラインツール　crondocを作った

# きっかけ

いくつかのサーバーの設定、ミドルウェア変更することになり、
影響範囲を確認していたのですが、サーバーごとにcronの運用が統一されていなかったのでcronまわり影響範囲を確認するのに時間がかかってしまいました

そこでcronの運用フローを統一する過程でcronの簡単なドキュメントを作成したくなりました

その際、javadoc,phpdocのcron版みたいのがないか探してみたのですが、ないようなのでせっかくなので自作してみました


# crondocの機能

ざっくり下記のような機能で作ってみました

- 標準入力、ファイル指定でcrontabからドキュメントを出力
- 改行までをひとグループとしてドキュメント出力
- ドキュメントを出力はmarkdowm形式
- @authorなどのタグ付ができる

# 出力例

現状下記のようなcrontabの場合はこんな感じです

- crontab

```
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# @title monday.sh
# @author hoge
# @param env[dev|stg|prod]
# start every monday
0 10 * * 1 sh /home/hoge/happy_monday.sh prod
```

↓↓↓

### Environment variable
 - SHELL=/bin/bash
 - PATH=/sbin:/bin:/usr/sbin:/usr/bin
 - MAILTO=root,hoge@mail.co.jp
 - HOME=/

## monday.sh

- Author : hoge
- param : env[dev|stg|prod]
- start every monday

| min|hour|day|month|day week|command |
|:---|:---|:---|:---|:---|:---|
| 0| 10| *| *| Mon| `sh /home/hoge/happy_monday.sh prod`|

***

# 使い方

ソースはこちら
[crondoc](https://github.com/ogataka50/crondoc)


バイナリを落としてきて、下記のようにすればドキュメントが出力されるはずです

```bash
$ crodoc /etc/crontab
$ crontab -l | crodoc -s
```

# TODO
- markdown以外の出力形式にも対応
- タグの種類増やす

# まとめ

cron周りはあまり触る回数、人も多くなく属人化しやすい箇所なのでフロー、ドキュメント共有して見える化していければ


せっかく作るならコマンドっぽくしたいってだけでgolangで作ってみたのですが、
わからないこと多く時間かかったし、全然golang的な書き方できてないがいい経験になった。今後も継続！
Google Tag Manager の命名規則に沿って実装してみた [トリガーの実装編]

[Google Tag Manager の命名規則を考えてみた [設計編]](http://qiita.com/tokuda109/items/18ff36097ec6eee0460e) の記事で策定した命名規則の実践編として、今回は実際に実装したトリガーをいくつか紹介します。

### Trigger - Custom Event - Match - All

全てのイベントに一致するので、一時的に無効にしたいトリガーの配信するタイミングの例外で設定すると発火を止めることができます。

###### イベントを選択

カスタムイベント

###### 配信するタイミング

イベント名:
.* (正規表現一致を使用にチェック)

### Trigger - Custom Event - Match - Social - Facebook - Like

###### イベントを選択

カスタムイベント

###### 配信するタイミング

イベント名:
Social - Facebook - Like

条件:
`Event` が `Social - Facebook - Like` に等しい

### Trigger - Pageview - Contains - Twitter Campaign

###### イベントを選択

ページビュー

###### トリガーを設定

ページビュー

###### 配信するタイミング

条件:
`Variable - Utm Source` が `twitter` に等しい
CS-Cart: ボタンコンポーネントを使う

CS-Cartでは、`buttons/button.tpl`テンプレートを使うと、テーマのボタンコンポーネントを描画することができます。

## 例1

```smarty
{include
  file="buttons/button.tpl"
  but_name="dispatch[profiles.update]"
  but_text=__("register")}
```

出力結果

<img width="584" alt="ページタイトル.png" src="https://qiita-image-store.s3.amazonaws.com/0/889/c4e3314a-d306-588d-c6b5-e1dea6c6b658.png">

## 例2

```smarty
{include
  file="buttons/button.tpl"
  but_name="dispatch[profiles.update]"
  but_text=__("register")
  but_meta="ty-btn__secondary"}
```

出力結果

<img width="704" alt="ページタイトル.png" src="https://qiita-image-store.s3.amazonaws.com/0/889/552cef4e-d8d1-85cb-bc1a-50f9c0947e98.png">
MacBookで外部モニターだけONにしたい(Yosemite以降)

## 前準備

下記コマンドを叩いて**再起動**。

```bash
sudo nvram boot-args=niog=1
```

## それ以降

1. **macを閉じた状態で** 外部ディスプレイを繋ぐ
1. 外部ディスプレイに画面が写ってから、macを開く
1. macのディスプレイはONにならない！

ディスプレイつなぎっぱで起動する時は、電源を入れてすぐmacを閉じればOKです。

## オフにするには？

完全に戻す場合は、下記コマンドを叩いて**再起動**。

```bash
sudo nvram -d boot-args
```

ただ、macを開いたままで外部ディスプレイ挿せば、普通の動作と変わらないので、私は特に困ってません。

## QA

- Q. うまくいかないよ
  - Yosemite で試してます。また、ミラーリング状態以外は未検証。あと自己責任でよろしくお願いします。
- Q. なんでこんなことしたいの
  - A. キーボードとモニタがくっついてるとどうしても背中が丸くなるので……。
- Q. Windows なら普通にできるのになんでこんな
  - A. そうですね（ってか最初すげー設定探したよ……）

## 謝辞

- ドラえもんのキャラみたいなニックネームの方から nvram コマンドでどうにかするというのを教えていただきました。
- そのヒントを元に "turn off macbook pro monitor using external monitor" でググったら[こちらの記事](http://apple.stackexchange.com/questions/152203/turn-off-macbook-pros-display-while-connected-to-external-monitor-on-yosemite)が見つかりどうにかなりました。
CS-Cart:frontendのページタイトルを設定する

CS-Cartでfrontendの`<title>`タグに任意の文字列を設定する方法です。

## `<title>`タグの内容だけを設定する

```php
Tygh::$app['view']->assign('page_title', __('page_title'));
```

## パンくずと`<title>`タグの同時に設定する

```php
fn_add_breadcrumb(__('page_title'));
```
Keynote: サポートライブラリのススメ

* *@yuichi_araki さんのスライドが上がるまでの参考にどうぞ*

## 発表者
* @yuichi_araki
* Developer Program Engineer

## はじめに：バグを見つけたら...
* b.android.com へご報告を！
* できるだけスクリーンショットを1枚でいいので送ってください

## Support Library

#### Support Library？
* 古いバージョンの端末もサポートし続けるためのライブラリが必要
* 互換性
* 最近のだと互換性だけでなく、Design Support Libraryみたいなものも
* 現在20個程度存在
* 後ろについている -v7 とははなに？
  - そのライブラリがサポートする最小のAPIレベル
  - Not ライブラリ自体のバージョン
  - 複数使う場合は、全部同じバージョンで使って欲しい

#### support-v4
* プラットフォーム基本機能のバックポート(後方互換性)
* 置き換え
  - Fragment, Loaderなど
* なんとか Compat 系
  - ViewCompat, NotificationCompat など
  - static methodで互換性を保つ
* Resource を使う機能は入っていない
* 今のほとんどのライブラリの始祖になっているライブラリ(ほぼ必須のライブラリといえる)
* どっちのFragmentを使えばいい？
  - android.app.Fragment
  - android.support.v4.app.Fragment
      - こっちのほうを使ったほうがよい
      - bug fix されてる

#### appcompat-v7
* バックポート専門
* Lolipop 以前の端末でもMaterial Designを使うためのライブラリ
* プラットフォームの進化とともにアップデートされていく
* 最初から使い続けると互換性的においしい
* App Compat なんとか、な View を使うべき？
  - AppCompatTextView
  - AppCompatButton
  - ...
  - 使わなくていい
  - ただし、カスタム View を使うときの継承元としては使う

#### recyclerview-v7
* ListView や GridViewの置き換えとして有名
* ListView vs RecyclerView?
  - いま動いてるなら別にListViewを使い続けていいのでは

#### CardView
* CardView のマージンがAPIレベルによって違う?
  - Lolipop は elevetion だけど
  - KitKat 以前では 地道な影を付ける努力が...!
  - value と value-v21 で margin/padding を分ける
  - app:cardUseCompatPadding="true" を使う

#### percent
* パーセント指定で View をレイアウトできる
* PercentFrameLayout, PercentRelativeLayout

#### preference-v7/v14
* 設定画面を作るためのバックポート
* PreferenceFragmentComprt
* たいていは -v7 を使えばいい

#### palette-v7
* この色はこの色と使うといいよ、みたいな配色を決めるやつ

#### customtabs
* アプリ内ブラウザ→WebView？
* not WebView
* Chrome がアプリ内で動く
* Chrome のメニューカスタマイズなどが可能で、そのアプリのブラウザとして使うことができる

#### その他
* サポートライブラリをバージョンアップしたら動かなくなった
  - compileSdkVersion とサポートライブラリのバージョンが揃っているか確認

## Design Support Library

#### Design Support Library?
* マテリアルデザインで使われるコンポーネント群
* こちらは追加機能
* -v7対応

#### NavigationView
* DrawerLayout の中で使う
* ListView や RecyclerView でもいいけど、マテリアルデザインの細かいパディングなどを実装するのが結構面倒
* NavigationViewがその辺を補完してくれる

#### TabLayout
* ViewPager(support-v4) と連携することを想定して作られている

#### FloatingActionButton
* 小話：FABの背景の影を付けるのに1週間くらいかかりました...

#### Snackbar
* Toast の進化版
* 最後の show() つけ忘れに注意してね！笑
* snackbar が出ると自動的にFABが上に逃げる

#### コーディネーターレイアウト
* すごい FragmeLayout みたいな
* あとで詳しく

#### AppbarLayout, CollapsingToolbarLayout
* スクロールに合わせてヘッダーを可変させる

#### ButtomSheetBehavior
* 新しい！まだリリースされてない！
* マテリアルデザインのボトムシート コンポーネントの実装
* Google サンタトラッカー 2015 で実用化されている
* スライド参照。(すみません、このあたりから駆け足だったのでメモが追いつきませんでした...)

## Support Library Internals

#### サポートライブラリを作る
* 導入はあとでスライドを参照.(すみません)
* 開発は IntelliJ で
* ディレクトリ構造がAndroid Stuioと違うので

#### CoordinatorLayoutの話
* あとでスライドを(ry
* カスタム View で共通の挙動などは Behavior として切り出すといいかも
[Playframework]windowsでactivator startがエラーになる

windowsでactivator startができない。
環境は下記の通り
windows7 Professional
activator 1.3.7
play 2.3.10
scala 2.10.2
java 1.8.0_45

## 入力行が長すぎます。コマンドの構文が誤っています。
activator startコマンドを実行すると下記のエラーが発生。
<pre>
入力行が長すぎます。
コマンドの構文が誤っています。
</pre>
対処法
クラスパス・環境変数が長すぎるのが原因のようなので、build.sbtに下記を追記した。
<pre>
import com.typesafe.sbt.packager.Keys.scriptClasspath

scriptClasspath := {
  val originalClasspath = scriptClasspath.value
  val manifest = new java.util.jar.Manifest()
  manifest.getMainAttributes().putValue("Class-Path", originalClasspath.mkString(" "))
  val classpathJar = (target in Universal).value / "lib" / "classpath.jar"
  IO.jar(Seq.empty, classpathJar, manifest)
  Seq(classpathJar.getName)
}
mappings in Universal += (((target in Universal).value / "lib" / "classpath.jar") -> "lib/classpath.jar")
</pre>

[play アプリケーションのクラスパス指定を短くする](http://d.hatena.ne.jp/nazoking/20141209/1418052707)
結果別のエラー。
<pre>
Bad application path: -Dhttp.port=9000
</pre>

## Bad application path: -Dhttp.port=9000
[activator start errror - Bad application path: -Dhttp.port=9000](https://github.com/playframework/playframework/issues/3081)
activatorのバグ？
playの設定を変える形での対処法は今のところ無さそう。

## とりあえず動かす
Assets.versionedの動作を確認したかったのでプロダクションモードでどうにか起動してみる。

activator stage実行後、
target\universal\stage\bin以下にあるプロジェクト名.batを実行するとplayが起動した。
[Why does “activator start” fail with “Bad application path”?](http://stackoverflow.com/questions/27781328/why-does-activator-start-fail-with-bad-application-path)
Swift-SlideMenuで詳細画面への遷移をさせる

swiftでslidemenuを利用しようとして探していたのですが、
https://github.com/hailq/Swift-SlideMenu
がシンプルで使いやすいかなと思い、利用させていただきました。


しかし、メニューを選択した画面から次の画面への遷移がなかったため
追加しました。

UIStoryboardSegueを継承したクラスを作成してそのクラスに以下のコードを貼り付けます。

    override func perform() {
        let mainViewController: MainViewController = self.sourceViewController.parentViewController as! MainViewController
        let rootController: RootSideMenuViewController = mainViewController.parentViewController as! RootSideMenuViewController
        
		rootController.changeContentController(self.destinationViewController)
    }

そして、storyboard上でsegueにカスタムを選択して、上記で作成したクラスを利用すれば遷移させることができました。

プロジェクトはgithubへあげています。
https://github.com/rfway/Swift-SlideMenu/tree/detail
APDでPHP5.4のスクリプトをプロファイルする

最近PHPスクリプトから時間のボトルネックを特定するようなことをやってましたので、その経過をメモしておきます。

## 関係なソフトのバージョン

- Ubuntu 14.04
- Apache 2.2
- PHP 5.4
- APD 1.0.1 (プロファイルのためのphp extension)

## ビルド手順

1. ビルドに必要なパッケージ

    sudo apt-get install build-essential
    sudo apt-get build-dep apache2 php5

2. ビルド用スクリプト 

- [gist](https://gist.github.com/jokester/031ba3d67ecbcfc86c88)からスクリプトを保存して、1回実行する
- 各プログラムはスクリプトがあるフォルダにインストールされるため、特別な権限はいりません

## APDをPHPインタプリタにロードさせる

`php.ini`の最後に、こんな行を1つ追加する (apd.soの正確なパスはスクリプトパスに依存するので、`find -name "apd.so"で探せます)

```
zend_extension=/home/xxx/yyy/local/zzz/apd.so
```

## プロフィールデータの出力、分析

1. トレースデータの出力を有効する: 下記コードをPHPスクリプトの最初に入れる。

    ```
    apd_set_pprof_trace('.');
    ```

    (トレースデータは `pprof.22141.0`のようなファイルに出力されます)

2. PHPスクリプトを実行する

    ```
    $ xxx/local/bin/php code-to-profile.php
    ```

    注意点:
    - トレースデータを出力する時、実行が遅くなります (時間が2~3倍程度)
    - トレースデータファイルがかなり大きい：1時間実行すると数GB程度になります。

3.  トレースデータから、各関数の実行時間を分析する

    ```
    $pprofp -R /tmp/pprof.22141.0
    ```

----------------------

参照:

[apd examples](http://php.net/manual/en/apd.examples.usage.php)
コマンドラインで、Jade => HTML変換するワンライナー


CLIでクリップボード上のJadeをHTMLに変換する。

毎度Web上( http://jade-lang.com/ )に変換しに行くのが少々だるいので、CLIで変換できるワンライナーを仕込んでみた。更に楽したいからクリップボードの内容を置き換える様にしておきました。`jade2html`とかにしてalias貼っておくとなお良。
Jadeで作ったAngular DirectiveのtemplateをJSXとかに変換していくときとかに使ってください。

## 必要な道具

- js-beatify | https://github.com/beautify-web/js-beautify

```zsh
$ pip install jsbeautifier
```

## コマンド

```zsh
$ pbpaste | jade | js-beautify -f - --html | pbcopy
```

## Example


**入力**

```jade
doctype html
html(lang="en")
  head
    title= pageTitle
    script(type='text/javascript').
      if (foo) {
         bar(1 + 5)
      }
  body
    h1 Jade - node template engine
    #container.col
      if youAreUsingJade
        p You are amazing
      else
        p Get on it!
      p.
        Jade is a terse and simple
        templating language with a
        strong focus on performance
        and powerful features.
```

**出力**

```html
<!DOCTYPE html>
<html lang="en">

<head>
    <title></title>
    <script type="text/javascript">
        if (foo) {
            bar(1 + 5)
        }
    </script>
</head>

<body>
    <h1>Jade - node template engine</h1>
    <div id="container" class="col">
        <p>Get on it!</p>
        <p>Jade is a terse and simple templating language with a strong focus on performance and powerful features.</p>
    </div>
</body>

</html>


```

## メモ

http://tylermurphyphysics.blogspot.jp/2015/06/beautify-javascript-on-your-clipboard.html

ここの記事で`--stdin` オプション使えるよって書いてたんだけど、なくなってた。代わりに`-f -`としてファイルオプションに`-`ハイフンを渡すとstdinから出力を使える様に変わってた。
POSTMANでheaderにUser-Agentを指定してもChromeのUser-Agentになっちゃう問題

curlコマンドでAPIを叩いたら成功するのに、POSTMANでやるとレスポンスで
`許可されていない操作です`
って言われちゃうのでなんでやねんって思ってたんだけど、User-Agentをheaderで指定してもChromeのUser-Agentに書き換わっっちゃってるみたい。

[Chrome拡張機能Advanced Rest ClientでUser-Agentを変更したリクエストを送信する方法](http://did2memo.net/2013/07/09/chrome-advanced-rest-client-user-agent/)
ここに解決策があった。

developer toolでUser-AgentをotherにしてUser-Agentを指定してあげればいける。

めでたしめでたし。
Roundcubeの文字化け対策

## Roundcubeが文字化ける

仕事でWebメーラーとして、Roundcubeを使うこととなりました。
しかし、Roundcubeはデフォルトだと、機種依存文字が表示されません。
機種依存文字使うんじゃねーよというところもありますが、
そんなのあんまり気にせず表示したい……
なので、対応してみました。

## 使用しているバージョン

Roundcube v1.0.5
(バージョンによって、コードが移動したりすることがある模様)

## ファイルのダウンロード

### mime.types

<pre>
http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
</pre>

上記のファイルを"roundcube/config/"に保存する

## ファイルの修正

### roundcube/program/lib/Roundcube/rcube_charset.php
<pre>
// convert charset using mbstring module
if ($mbstring_list !== false) {
    $aliases['WINDOWS-1257'] = 'ISO-8859-13';
    // it happens that mbstring supports ASCII but not US-ASCII
    if (($from == 'US-ASCII' || $to == 'US-ASCII') && !in_array('US-ASCII', $mbstring_list)) {
        $aliases['US-ASCII'] = 'ASCII';
    }
</pre>
↓
<pre>
// convert charset using mbstring module
if ($mbstring_list !== false) {
    $aliases['WINDOWS-1257'] = 'ISO-8859-13';
    // Customize from here
    $aliases['JIS'] = 'ISO-2022-JP-MS';
    $aliases['ISO-2022-JP'] = 'ISO-2022-JP-MS';
    $aliases['EUC-JP'] = 'EUCJP-WIN';
    $aliases['SJIS'] = 'SJIS-WIN';
    $aliases['SHIFT_JIS'] = 'SJIS-WIN';
    // Customize to here

    // it happens that mbstring supports ASCII but not US-ASCII
    if (($from == 'US-ASCII' || $to == 'US-ASCII') && !in_array('US-ASCII', $mbstring_list)) {
        $aliases['US-ASCII'] = 'ASCII';
    }
</pre>

rcube_charset.phpでは加えて、
mbstring関連の処理コードをiconv関連コードより上に移動させておきます。
そうするとmbstringが優先的に使用されるようになるそうです。重要！

### roundcube/config/defaults.inc.php
<pre>
// Absolute path to a local mime.types mapping table file.
// This is used to derive mime-types from the filename extension or vice versa.
// Such a file is usually part of the apache webserver. If you don't find a file named mime.types on your system,
// download it from http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
$config['mime_types'] = null;
</pre>
↓
<pre>
// Absolute path to a local mime.types mapping table file.
// This is used to derive mime-types from the filename extension or vice versa.
// Such a file is usually part of the apache webserver. If you don't find a file named mime.types on your system,
// download it from http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
$config['mime_types'] = '/virtual/htdocs/ikou_ssl/roundcube/config/mime.types';
</pre>

以上で、文字化け対策できたはず。

## 参考サイト
- http://netlog.jpn.org/r271-635/2013/03/roundcube_webmail_085.html
再帰的にディレクトリのパーミッションを確認したい

初歩的な部分ですが、いざという時にアレって思ったので。
コンテンツをゴリッと移動する際等に、とある配下の全ディレクトリのパーミッションを確認したい場合って、卵を割ったらキミが２つ入ってたっていうくらい、たまにあると思うのです。


```lang:bash
$ find ./ -type d | xargs ls -lad
drwxrwxr-x  8 hayatomo hayatomo 4096  1月 22 07:05 2013 ./
drwxrwxr-x  4 hayatomo hayatomo 4096 12月 11 16:56 2013 ./BUILD
drwxr-xr-x 10 hayatomo hayatomo 4096  1月 22 07:24 2013 ./BUILD/nginx-1.2.6
drwxr-xr-x  6 hayatomo hayatomo 4096  1月 22 07:24 2013 ./BUILD/nginx-1.2.6/auto
drwxr-xr-x  2 hayatomo hayatomo 4096  1月 22 07:24 2013 ./BUILD/nginx-1.2.6/auto/cc
drwxr-xr-x 13 hayatomo hayatomo 4096  1月 22 07:24 2013 ./BUILD/nginx-1.2.6/auto/lib
drwxr-xr-x  2 hayatomo hayatomo 4096  1月 22 07:24 2013 ./BUILD/nginx-1.2.6/auto/lib/geoip

```

ポイントはlsコマンドのオプションd

```
$ man ls
・・・
  -d     ディレクトリの中身を表示せず、他のファイルと同じようにディレクトリ名をリ
スト表示する。
・・・
```

知っている人は知っていると思いますが、自分みたいに知らない人もたぶんいらっしゃって、そういう人のためにパッと検索してサッと解決できればと思ってここに残します。
pythonでよく使う括弧とイコールをShiftなしで入力できるようにする

最近macでpythonを使い始めたのですが、
基本的にシンプルで覚えやすくていい言語だなと思います。
ただ、**多用する括弧とイコールがshiftを押しながらでないと入力できない**のが多少ストレスになります。
そこでkarabinerを入れてJIS配列のキーボードで括弧とイコールをShiftなしで入力できるようにしてみました。

**※karabinerはmac用のキーボードの割り当てを変更するソフトウェアです。**

## 1.karabinerをインストール

まずここからインストール
https://pqrs.org/osx/karabiner/index.html.ja

## 2.数字と記号を入れ替える
Preferenceを開き、
change Num Key(1...0)をチェック

<img width="760" alt="スクリーンショット 2016-02-19 10.41.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/107119/fea3ee55-e4e9-8422-dca2-4325f25e0020.png">

これで数字と記号が入れ替わります。

## 3. 0に=を割り当てる

Misc&Uninstallタブを開き、Open private.xmlをクリック
<img width="776" alt="スクリーンショット 2016-02-19 10.54.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/107119/874c0659-278d-f6d7-8cec-1449945d45e9.png">

以下のように編集し、保存する。

``` private.xml
<?xml version="1.0"?>
<root>
    <item>
        <name>Swap minus(-) and equal(=)</name>
        <identifier>private.swap_minus_and_equal</identifier>
        <modifier_not>
        ModifierFlag::COMMAND_L,
        ModifierFlag::COMMAND_R,
        ModifierFlag::CONTROL_L,
        ModifierFlag::CONTROL_R,
        ModifierFlag::FN,
        ModifierFlag::OPTION_L,
        ModifierFlag::OPTION_R,
        </modifier_not>
        <autogen>__KeyToKey__ KeyCode::KEY_0, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_SHIFT, KeyCode::KEY_0</autogen>
        <autogen>__KeyToKey__ KeyCode::KEY_0, KeyCode::MINUS, ModifierFlag::SHIFT_L</autogen>
    </item>
</root>
```

Change Keyタブに戻り、Reload XMLをクリックすると
private.xmlが反映される。

swap minusで検索すると項目が出てくるのでチェックをつける。

<img width="754" alt="スクリーンショット 2016-02-19 10.46.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/107119/f8c535eb-6b93-96c7-5297-2c4e01cb4455.png">

数字が反転されるのは慣れですが、
基本的にこれで快適にpythonのコーディングができます。
[CakePHP3]エラー対処方法Tips：「エラーメッセージ: SQLSTATE[HY000]: General error: 11 database disk image is malformed.」と出たら...

##「エラーメッセージ: SQLSTATE[HY000]: General error: 11 database disk image is malformed.」と出たら...

- エラー発生箇所がSQLiteのドライバーで発生している場合、**debugkit**での問題である可能性が高いです。

- とりあえずエラーメッセージ「database disk image is malformed.」から察するにファイルが壊れているっぽいので「/tmp/debug_kit.sqlite」をいったん削除。

- その後、アプリを動かしたらエラーは解消され、debug_kit.sqliteも自動で生成されました。

<img width="1343" alt="スクリーンショット 2016-02-19 10.17.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/26173/53509357-eff2-5eb4-3099-ac3a78b78e59.png">
【Arduino IDE使いやすくしよう】起動時のウィンドウサイズを大きくはじめる

Arduino IDEを起動するとウィンドウが表示されるのですが、小さくて毎回手動で引き伸ばしていました。`preferences.txt`ファイルを編集すると起動時のウィンドウサイズが変更できるのでぜひお試しください。

初期状態では500x600pxに設定されています。
![img_01.png](https://qiita-image-store.s3.amazonaws.com/0/55103/37431ee4-5e55-294e-ad6c-126a75891a8b.png)

# Arduino IDEの設定ファイルを開く
Arduino IDEのメニューから[ファイル]→[環境設定]で環境設定画面を開きます。画面下に[`preferences.txt`]の記述があるのでクリックします。すると`preferences.txt`ファイルが格納されているフォルダが開くのでファイルを開きます。
※Arduino IDEは閉じた状態で編集してください。
![img_02.png](https://qiita-image-store.s3.amazonaws.com/0/55103/304c9ce7-508e-405e-0033-539ef61cd8a7.png)

# preferences.txtファイルの初期ウィンドウサイズ指定部分を編集
`preferences.txt`ファイルの26・28行目に下記の記述があるので編集します。pxを抜いた整数を入力します。

```
26行目
editor.window.height.default=600
28行目
editor.window.width.default=500
```

# 大きくなった！
1000x750pxで設定してみました。これならある程度ソースをかいても大丈夫でしょう。
![img_03.png](https://qiita-image-store.s3.amazonaws.com/0/55103/7f1ffe18-8920-a504-5949-6844d0009b58.png)

# Arduino IDE使いやすくしようシリーズ
- [プログラミングに適したフォントに変更](http://qiita.com/umi_kappa/items/e053f66ffd9238d30b37)
- [行番号を表示してエラーを追いやすく](http://qiita.com/umi_kappa/items/30c01220680f1db4014e)
RabbitMQ Management WebAPIを使ってキューの内容を見る

# 概要
サービス上で現在のキューの状況を表示するために、キューの内容を「のぞき見」したいなーと思ったのが動機です。

AMQPブローカーであるRabbitMQのキューの内容を確認するためにWebAPI経由で取得します。それだけならpika.basic_consume()やpika.consume()で取得できるのですが、他のConsumerに影響しないようにするためにManagement APIを使用します。

## 注意
RabbitMQの[HTTP APIのドキュメント](https://cdn.rawgit.com/rabbitmq/rabbitmq-management/rabbitmq_v3_6_0/priv/www/api/index.html)を見てみると、getの項目に、

> Please note that the get path in the HTTP API is intended for diagnostics etc - it does not implement reliable delivery and so should be treated as a sysadmin's tool rather than a general API for messaging. 

と書いてあるのでちょっと微妙かも

# 動作確認
動作確認は以下で行いました。

- CentOS 6.7
- Python 2.6.6 (CentOS標準)
- RabbitMQ 3.6.0 (RabbitMQサイトのRPMおよびErlang solutionsのリポジトリ)

# 準備
## Management Pluginを有効にする
RabbitMQ Management Pluginを有効にしておく必要があります。

```shell-session
sudo rabbitmq-plugins enable rabbitmq_management
```
## キューにメッセージをためておく
確認のため、キューにメッセージを送ります。

```py:publish.py
#!/usr/bin/env python
import pika
conn = pika.BlockingConnection(pika.ConnectionParameters())
ch = conn.channel()
ch.queue_declare(queue="hello")
ch.basic_publish(exchange="", routing_key="hello", body="Message 1")
ch.basic_publish(exchange="", routing_key="hello", body="Message 2")
conn.close()
```

# WebAPIで取得
httplibを使って取得するだけです。

```py:view_messages.py
from base64 import b64encode
import httplib, json

API_HOST = "localhost"  # 接続先ホスト名
API_PORT = 15672        # 接続ポート

def view_messages(vhost, queue, count=1):
    # URI等の組み立て
    uri = "/queues/%(vhost)s/%(queue)s/get" % {"vhost": vhost, "queue": queue}
    auth = "guest:guest"
    headers = {
        "Authorization" : "Basic %s" % b64encode(auth),
        "Content-Type"  : "application/json",
    }
    opt = {"count": count, "requeue": "true", "payload_file": None, "encoding": "auto"}

    # RabbitMQ Managementに接続してメッセージを取得
    conn = httplib.HTTPConnection(API_HOST, API_PORT)
    body = json.dumps(opt)
    conn.request("POST", "/api%s" % uri, body, headers)
    response = conn.getresponse()
    return json.loads(response.read())

if __name__ == "__main__":
    msgs = view_messages("%2F", "hello", count=100)
    for msg in msgs:
        print msg["payload"]
```

## ためしてみる
試してみます。

```shell-session
./publish.py
./view_messages.py
Message 1
Message 2
```

## リファレンス

- Is it possible to view RabbitMQ message contents directly from the command line?
    - http://stackoverflow.com/questions/10709533/is-it-possible-to-view-rabbitmq-message-contents-directly-from-the-command-line
- RabbitMQ Management Plugin
    - https://www.rabbitmq.com/management.html
NetCommons3 権限判定


# View内

基本はWorkflowHelper使う

https://github.com/NetCommons3/Workflow/wiki#ヘルパー

個別の権限有無を判定したいなら```Current::permission()```

```
if (Current::permission('content_editable')) {
	// 編集権限あり
}
```

# Controller内

アクションの実行ガードならPermissionComponent

```
	public $components = array(
		'NetCommons.Permission' => array(
			//アクセスの権限
			'allow' => array(
				'add,edit,delete' => 'content_creatable',
				'add_folder,edit_folder' => 'content_editable', // フォルダの作成・編集は編集権限以上
			),
		),
	);
```
cucumberのカバレッジをjenkinsで確認する




## 前提
Jenkinsが動く事、rubyでcucumberが使える事

#### simplecovとsimplecov-rcovをgemにインストールします。

```
gem install simplecov simplecov-rcov
```


#### cucumberのenvに設定を追加

``` features/support/env.rb 

require 'simplecov'
require 'simplecov-rcov'

SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
SimpleCov.start
```


## Jenkins側の設定

* Jenkins->Jenkinsの管理-プラグインの管理->利用可能->Rubymetrics plugin for jenkins をインストール

* プロジェクト->設定->ビルド後の処理に出力したrcovのpathを記述
(例) Rcov report directory /var/lib/jenkins/work/script/test/coverage/rcov


* cucumberを実行するとcoverage reportが出力されている
CentOS6／CentOS7にPHP5.6／PHP7をyumでインストール

# **はじめに**

CentOS6系の標準リポジトリのPHPバージョンは5.3、
CentOS7系の標準リポジトリのPHPバージョンは5.4です。

それ以外のバージョンを使用したい場合は、リポジトリを追加してのインストール作業が必要になります。

今回、PHP5.6, PHP7.0, PHP7.1のインストール手順について記載します。
(※2017-07-23時点の情報です)


# **Yumリポジトリ追加**

EPELとRemiリポジトリを追加します。

## EPELリポジトリ

[CentOS6系]
`yum install epel-release`
または
`rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm`

[CentOS7系]
`yum install epel-release`
または
`rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm`

※EPELは既に入っているかも

## Remiリポジトリ

[CentOS6系]
`rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm`

[CentOS7系]
`rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm`


## リポジトリがrpmコマンドで直接追加できない場合

wgetコマンドで一旦ローカルに落としてから、rpmコマンドを実行する。

``` dummy:例
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm
```

## 参考
https://fedoraproject.org/wiki/EPEL/ja
http://rpms.famillecollet.com/


# **現在のPHPバージョンを確認**

`rpm -qa | grep php`

既に古いバージョンがインストール済みの場合、削除しなくてもアップデートされるが、一応消しておく。
`yum remove php-*`


# **PHP5.6をインストール**

`yum install --enablerepo=remi,remi-php56 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt`


# **PHP7.0をインストール**

`yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt`


# **PHP7.1をインストール**

`yum install --enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt`


**※インストールするパッケージは例なので、要件に応じて追加／削除してください。**



# **インストール結果確認**

`rpm -qa | grep php`
`php --version`


# **php.iniを編集**

`vi /etc/php.ini`

以下に変更する (環境に応じて)

```php.ini
date.timezone = "Asia/Tokyo"

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_charset = none
```


# **Composerをインストール**

ダウンロード
`curl -sS https://getcomposer.org/installer | php`

パスが通っている場所にリネームする
`mv composer.phar /usr/local/bin/composer`
py2exe

## 参考

* [[Python] pyInstallerの遅さにがっかりしてpy2exeにしたら爆速で驚いた件 | Nobwak's Lair](http://april.fool.jp/blogs/2014/10/python-pyinstaller%E3%81%AE%E9%81%85%E3%81%95%E3%81%AB%E3%81%8C%E3%81%A3%E3%81%8B%E3%82%8A%E3%81%97%E3%81%A6py2exe%E3%81%AB%E3%81%97%E3%81%9F%E3%82%89%E7%88%86%E9%80%9F%E3%81%A7%E9%A9%9A%E3%81%84/)

## ダウンロード

* [py2exe - Browse /py2exe/0.6.9 at SourceForge.net](http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/)
  * py2exe-0.6.9.win32-py2.7.exe をインストール


## ビルド

```py:setup.py
# -*- coding: utf-8 -*- 

from distutils.core import setup
import py2exe

option = {
    "compressed"    :    1,
    "optimize"      :    2,
    "bundle_files"  :    2
}

setup(
    options = {
        "py2exe"    :    option
    },

    console = [
        {"script"   :    "main.py"}
    ],

    zipfile = None
)
```

```bash:
python setup.py py2exe
```
メモ:npm

## 参考

* [install | npm Documentation](https://docs.npmjs.com/cli/install)
* [npmでnode.jsのpackageを管理する - Qiita](http://qiita.com/sinmetal/items/395edf1d195382cfd8bc)

## 必須パッケージインストール

```bash:
sudo npm install -g node-cli
sudo npm install -g grunt-cli
```

## .gitignore

* `npm install`で`./node_modules/`が生成されるため除外。

```bash:.gitignore
node_modules/
```

----

# 動かしてみた

## JSNES

* [JSNES: A JavaScript NES emulator – Ben Firshman](https://github.com/GusCaplan/jsnes)

```bash:ビルド
git clone https://github.com/GusCaplan/jsnes.git
cd jsnes
npm install
grunt
```

```bash:webサーバ起動
python -m SimpleHTTPServer
```

* http://localhost:8000 にアクセス
    * フォルダ全体を別のwebサーバに移しても動作する。
* firefoxだと遅い(chromeの半分程度)。音出る。
* chrominium: 早い。音出ない
* [google-chrome](https://www.google.com/chrome/browser/desktop/index.html): 早い。音出る 

## OS.js-v2

* [OS.js - JavaScript Cloud/Web Desktop Platform](http://os.js.org/)

```bash:ビルド
git clone https://github.com/andersevenrud/OS.js-v2.git
cd OS.js-v2
npm install
grunt
```

```bash:起動
./bin/start-dist.sh
```


* http://localhost:8000 にアクセス
* メモを作成すると以下に保存される。
    * ./vfs/home/demo/メモ1.odoc

----

# c -> js

## snes

* [tjwei/xnes · GitHub](https://github.com/tjwei/xnes)

```bash:
sudo apt-get install -y emscripten
git clone https://github.com/tjwei/xnes.git
cd xnes
./buildall
```
LMDE2 cinnamonにProxmox4.1をインストールしようとしたが無理だった

* sysvinitからsystemdに変更した後proxmoxをセットアップしたが起動に失敗した。

* LMDE2 cinnamon
* [Proxmox VE4 dpkg error on install | Proxmox Support Forum](https://forum.proxmox.com/threads/proxmox-ve4-dpkg-error-on-install.23054/)

## systemd

* [Deni Bertovic](https://denibertovic.com/posts/setting-up-systemd-on-debian-in-10-minutes/)

```bash:
sudo apt-get install -y systemd-sysv
```

```diff:/etc/default/grub
- GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
+ GRUB_CMDLINE_LINUX_DEFAULT="quiet splash init=/bin/systemd"
```

```bash:
sudo update-grub2
sudo reboot
```

```bash:
[[ `systemctl` =~ -\.mount ]] && echo yes || echo no
````

## install docker

* [Installation on Debian](https://docs.docker.com/engine/installation/debian/#debian-jessie-80-64-bit)

```bash:
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 \
  --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
echo "deb https://apt.dockerproject.org/repo debian-jessie main" > \
  /etc/apt/sources.list.d/docker.list

apt-get update
apt-get install docker-engine
```

* [Set the ip of the Docker bridge with Systemd - Container Solutions](http://container-solutions.com/set-the-ip-of-the-docker-bridge-with-systemd/)

```bash:
mkdir /etc/systemd/system/docker.service.d/
```

```bash:/etc/systemd/system/docker.service.d/docker.conf
[Service]
ExecStart=
ExecStart=/usr/bin/docker -d -H fd:// --bip=172.17.0.1/24
```

```bash:
systemctl daemon-reload
systemctl restart docker
```

## other

```bash:
dpkg --purge w64codecs
dpkg --remove-architecture i386
```

```diff:/etc/hosts
- 127.0.1.1 proxmox4.local
+ 192.168.100.70    proxmox4.local
```

## install packages

```bash:rootで実施
echo "deb http://download.proxmox.com/debian jessie pve-no-subscription" > \
  /etc/apt/sources.list.d/pve-enterprise.list
wget -O- "http://download.proxmox.com/debian/key.asc" | apt-key add -
apt-get update
apt-get dist-upgrade
reboot
```

```bash:
apt-get install \
  proxmox-ve ntp ssh postfix ksm-control-daemon open-iscsi
```

## nat

```bash:/etc/network/interfaces
auto eth0
iface eth0 inet static
        address 192.168.100.70
        netmask 255.255.255.0
        gateway 192.168.100.1
        dns-nameservers 8.8.8.8 8.8.4.4
        post-up echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp

auto vmbr0
iface vmbr0 inet static
        address  10.10.10.1
        netmask  255.255.255.0
        bridge_ports none
        bridge_stp off
        bridge_fd 0
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eth0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eth0 -j MASQUERADE
```
追加のドライバーをインストール

* debianには無い

## インストール

この画面

![driver.png](https://qiita-image-store.s3.amazonaws.com/0/25728/e3e2352a-15de-e2b0-b4b7-171651462faa.png)


```bash:
sudo apt-get install -y software-properties-gtk
/usr/bin/software-properties-gtk --open-tab=4
```
ハードウェアの性能評価にWINSATは便利

 C:\Windows\system32> **winsat cpu -encryption**

    Windows システム評価ツール
    > 実行中: 機能の列挙 ''
    > 実行時間 00:00:00.00
    > 実行中: CPU の評価結果 '-encryption'
    > 実行時間 00:00:10.20
    > CPU AES256 暗号化                               240.42 MB/s
    > 合計実行時時間 00:00:13.60
jQueryでカスタムイベントを利用する（.on() と .trigger()）

# .on() メソッドと .trigger() メソッド

jQuery の .on() メソッドは、指定した要素に対して任意のイベントをバインドします。
また、.trigger() メソッドを利用することで、その要素にバインドされたイベントを**任意のタイミングで発生させる**ことができます。

~~~javascript:JavaScript

$('body').on('click', function() {
	console.log('<body>がクリックされました');
});

$('body').trigger('click'); // '<body>がクリックされました'

~~~

# カスタムイベントの利用

これらのメソッドでは、`'click'`、`'scroll'`、`'mouseenter'` といった標準的なイベントタイプだけではなく、**独自のイベントタイプを定義して利用する**ことも可能です。

「Webページ上で起こる何らかの状態変化を**独自のイベント**として定義し、そのイベントを引き金（trigger）として複数の処理を実行する」といった利用方法が考えられます。

~~~javascript:JavaScript

$(window).on('myEvent', function() {
	// 'myEvent' が発生した時に実行したい処理

	// ...
	// funcA();
	// funcB();
});

function exampleFunction() {
	// ...

	// 任意のタイミングで 'myEvent' を発生させる
	$(window).trigger('myEvent');
}

~~~
配色を考えるのが面倒ならhsl()を使おう


hsl()では**hue：色相**、**saturation：彩度**、**lightness：輝度**の3要素で色を指定します。
RGBより直感的な色指定方法としてCSS3で追加されました。
キーとなるhueさえ最初に決めておけば、あとは彩度と輝度の割合を変えるだけでそれなりにまとまったサイト配色になります。
モックや社内用管理画面をゴリゴリ作る際に覚えておくとべんり:blush:！

##指定方法
```css
hsl(色相, 彩度, 輝度)
```

###hue：色相
![hue.jpg](https://qiita-image-store.s3.amazonaws.com/0/112405/0357edb9-ad29-e738-647b-42a1b21caf23.jpeg)
0～360°の角度の値で指定。
角度のため、例えば400と指定すると40に変換されます。
0=360=red

###saturation：彩度
0～100%の割合で指定。
100％＝純色、0%＝灰色

###lightness：輝度
0～100%の割合で指定。
100%=白、50％=純色、0%=黒
（**明度とは異なる**ので注意。明度は100%=純色、0%=黒。）

##例）`hue=0` の場合の変化
<p data-height="380" data-theme-id="0" data-slug-hash="MKdJVW" data-default-tab="html,result" data-user="anchoor" data-embed-version="2" data-pen-title="hsl() による色の変化" class="codepen">See the Pen <a href="https://codepen.io/anchoor/pen/MKdJVW/">hsl() による色の変化</a> by anchoor (<a href="https://codepen.io/anchoor">@anchoor</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://production-assets.codepen.io/assets/embed/ei.js"></script>

表を見てわかる通り、`hsl(任意,100%,50%)` が純色になります。これを基準に

 * 落ち着いた感じにしたいわ～…と思ったら彩度を下げればいいし
 * ちょっと弱めにしたいわ～…なら輝度を上げ
 * 重厚感出すんやで…なら輝度を下げればOK

何も考えたくない場合は**彩度を固定して、輝度の割合を変えていくのが一番かんたん**かなと思います。
RGBの数値いじるより、感覚的にどんな色になるか分かりやすいのがGOOD:blush:

##hsla()もあるよ
透明度もあわせて指定する場合はhsla()を使います。
`hsla(0,100%,50%,.5)`のようにalpha：透明度[^*]を0～1の間で指定してください。

[^*]: 正確には不透明度。0=透明、1=不透明

##参考サイト
* https://www.w3.org/TR/css3-color/#hsl-color
* https://developer.mozilla.org/ja/docs/Web/CSS/color_value#hsl
virtualboxのIPアドレスを変更する

#CentOSのIPアドレスを変更したい!
centOSだとデフォルトのIPアドレスは`http://192.168.33.10`でアクセスできるけどHPらしいアドレスにしたいとか、複数の仮想環境を実行するなど、vagrantでIPアドレスを変更したいときにどうやって変更すればいいのか。

#そもそもURLはどうやって管理されているのか
PC内の/etc/hostsでURLは管理されています

```emacs:/etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost 
```

この9行目は`http://localhost`というURLを書くと、`http://127.0.0.1`にアクセスせよという指示になります。

じゃあ、`http://192.168.33.10`がcentOS6.7のデフォルトのIPアドレスなのでこのコードの下に`192.168.33.10 stevejobs`と書けば`http://stevejobs`で仮想環境が動かせる?????

たしかにこれは動くかもしれませんが、vagrantを立ち上げてないときも仮想環境にアクセスすることになってしまうのでよくありません。

#正しいIPアドレス設定
vagrantfileをエディターで開くと


```emacs:Vagrantfile
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip:"192.168.33.10"
```

というコードがあると思います。
ここのIPアドレスを変更すれば仮想環境にアクセスするIPアドレスを変更できます。

また、config.vm.networkの前の行に
オプションとして追加してやるとサイトアドレスのようにアクセスできるようになるのです!

```
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.hostname = "local.stevejobs"
config.vm.network "private_network", ip: "192.168.33.10"
```

とすると
`http://local.stevejobs`で`http://192.168.33.10`を見ることになるのです!

さあ、実行してみよう!

、、、おそらくうまくいかないでしょう。
僕はうまくいきませんでした。

#モジュールのインストール
このままではPC内の/etc/hostsに仮想環境のvagrantfileの情報を読み込ませることができていないのです。
そこでその情報を読み込ませてくれるvagrant-hostupdaterというモジュールをインストールします。
vagrantfileがあるファイルにいって下のコマンドを叩きます。

```
$vagrant plugin install vagrant-hostsupdater
```

あとは`$vagrant reload`で一回再起動してからsshでログインすればうまくいくはず！

暇なときに自分のやる気がでるようなドメイン名にしてみてください!



#参考URL
[vagrant使うときのipアドレスをドメインにしたい！](http://blog.fukamin.me/2015/08/06/vagrant%E4%BD%BF%E3%81%86%E3%81%A8%E3%81%8D%E3%81%AEip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%82%92%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%AB%E3%81%97%E3%81%9F%E3%81%84%EF%BC%81/)

[Vagrantで仮想マシンに接続＆Webサーバを立ち上げてみよう](http://vdeep.net/vagrant-start-web-server)
【メモ書き】Djangoのmodelクラスを定義する時に、__unicode__が必要な意義

#背景

Djangoの練習でブログを作ってるんですが、以下のようなモデルを教科書に従って定義した。その時unicodeのところの意義がいまいち分からなかったのでまとめ

```
class Blog(models.Model):
	title = models.CharField(max_length=100, unique=True)
	slug = models.SlugField(max_length=100, unique =True)
	body = models.TextField()
	posted = models.DateField(db_index=True,auto_now_add=True)
	category = models.ForeignKey('blog.Category')

	def __unicode__(self):
		return '%s' % self.title
```

#unicodeとは？

多くの人が知っている（らしい）のですが、もちろん初心者の僕は知りません。僕は自称「ググるカス」なので、カスはカスらしくググりました。

unicodeは何百万種類もある言語をコンピューターで統一的に扱うための手段の１つ。

コンピューターが自然言語を理解するための方法はたくさんあって、例を出すと、

- utf8
- ASCII

とからしい。

で、これらの方法ではencodeっていうコンピューターが理解できるための１工夫みたいなのをしているんだけど、どうもそれがそれぞれの方法によって違うらしい。

で、もちろん普通のpythonで文字列を扱えばencodeされるんだけど、webで読む人のバックグラウンドがたくさんあって、しかもそれぞれ異なる方法を使ってコンピューターと自然言語でやりとりが行われているので、読む人の環境によってめちゃくちゃなことになるらしい。

#もう少し詳しく

例えば、文字AをASCIIによってencodeしてコンピューターで保管しておくとする。そんで、呼び出す人の環境がutf-8の場合どうなるのかを考えてみる。

```
文字A →　ASCII → 文字コード = 123456
```
といったコードで保存されているとする。

で、呼び出す人の環境がutf-8だとすると、、、

```
文字コード = 123456 → utf-8 → 文字B
```

といった感じで異なる文字列が帰ってくる。もじくは同一の文字列が存在しなくって、webページ全体が??????????????ってなったりする。

#unicodeの問題点とは？

ここまで来て「全ての文字コードをunicodeで扱えばいいじゃん？」と思ったんだけど、そこまで世の中都合よくいかないらしい。天は２物を与えるときもあるだろうけど、どうやら人間の世界はいつもトレードオフっぽい。

unicodeはコンピューターにとっての統一規格である能力を得たかわりに、**人間に見せる**ための機能を放棄した

っぽい。というか、そうじゃなければ辻褄が合わないので、暫定そうやって理解しておくことにした。（なのでタイトルがメモ書きなのです。）


#Djangoでは文字コードはどのように扱われている？

Djangoに話を戻す。

Djangoでは、framework内では全ての情報がunicodeでやりとりされているようだ。で、unicodeは人間に見せる際に少しサボるので、そこを修正してあげるために、modelのところに __unicode__と書く必要があるんだとか。


とりあえず、突っ込みどころ満載な状況で記事が終わっているんだけど、そこはとりあえず１段落して前に進むことにする。

知るべき必要のあることはいずれわかる（はず）
ピュアCSSでグループ化した項目を表示切り替え

![screenshot.gif](https://qiita-image-store.s3.amazonaws.com/0/102667/11097e11-d479-1d8f-e500-2522d3b4f69f.gif)

ラジオボタンやチェックボックスで有効化されたときだけ、グループ化された設定項目が表示されます。

[デモ](http://codepen.io/ueokande/pen/MKRLEP)

<i class='fa fa-html5'></i> HTML
--------------------------------

`.group_trigger` クラスを持つ `<input>` タグがグループ化された項目を切り替えます。そしてグループ化した項目は、`.group` クラスを持つ要素で囲みます。

```html
<input id='by_token' class='group_trigger' type='radio' name='auth_type'>
<label for='by_token'>By token</label>
<div class='group'>
  <label>Token: <input type='text'></label>
</div>
```

<i class='fa fa-css3'></i> CSS
------------------------------

`.group_trigger` クラスの要素の、2つ次の兄弟（sibling）ノードの `.group` クラスを `.group_trigger + * + .group` で選択します。`+` で次の兄弟ノードなので、`.group_trigger` の次(`+`)の任意の要素(`*`)の次(`+`)の`.group`、つまり2つ次の兄弟ノードになります。この `.group` に対して、デフォルトは`display:none`で非表示に、 `group_trigger:checked` 時は`display:block` で表示します。これで `.group_trigger` のチェック状態により、`.group` の表示/非表示が切り替えることができます。

```css
.group_trigger + * + .group {
  display: none;
}

.group_trigger:checked + * + .group {
  display: block;
}
```

おわりに
----
CSSでトリッキーなことするとき、はやくCSS4のセレクタ来ないかなーと思います。`<label><input>...</label>` としてセレクタに`label:has(:checked) + .group` と書ければ、`<input>`タグ の `id`属性 と `<label>`タグの `for`属性を削除できます。[Browser CSS-Selector-Test](http://css4-selectors.com/browser-selector-test/)でテストすると、素敵なCSS4のセレクタの完全サポートはまだ遠い未来です。
VirtualBoxにインストールしたUbuntuがもっさりする件

ゲストubuntu15.10日本語版にて確認。

## 参考

* [3D Acceleration with Ubuntu guests (The Fat Bloke Sings)](https://blogs.oracle.com/fatbloke/entry/3d_acceleration_with_ubuntu_guests)
* [VirtualBox 上の Ubuntu がもっさりする件を解消するメモ - Qiita](http://qiita.com/komiya_atsushi/items/da9dfa99febc75a97eec)

## インストール

![3d.png](https://qiita-image-store.s3.amazonaws.com/0/25728/043eb032-1ac1-486b-2a74-ab34b5089dbb.png)

* Guest Additionsをインストール (open-vm-toolsではダメだった)

## 確認

```bash:すべてOKであること
/usr/lib/nux/unity_support_test -p
```

### メモリ使用量

```
$ free -m
             total       used       free     shared    buffers     cached
Mem:          1724        941        783         12         30        363
-/+ buffers/cache:        547       1177
Swap:         1765          0       1765
```