OmniAICreator/Qiita-1.07M huggingface dataset:
MAMPのMySQLにターミナルで接続する方法


#手順
##１）MAMPを起動します。
##２）ターミナルを起動します。
##３）「cdコマンド」で作業ディレクトリを移動します。
##４）MySQLをコマンドラインで操作。
##５）MAMPのMySQLにあるデータベースを表示。
　
　
参考
http://qiita.com/kitakayu/items/65a130c9fca66712c604


http://webkaru.net/mysql/mamp-command-line/
![kobito.1422931049.845553.png](https://qiita-image-store.s3.amazonaws.com/0/59354/c80f5a00-e67e-7ad3-6cee-6ed83104b836.png "kobito.1422931049.845553.png")
　
###１・２)MAMPを起動し、ターミナルを起動してください。

###３）「cdコマンド」で作業ディレクトリを移動する。
MAMPのコマンド群は「/Applications/MAMP/Library/bin/」に格納されているので、「cdコマンド」で作業ディレクトリを移動します。

```
$ cd /Applications/MAMP/Library/bin/
```
###４）MySQLをコマンドラインで操作する。
```
$ ./mysql -u root -p
```

```
Enter password: ←パスワードを入力する。
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 227
Server version: 5.5.38 Source distribution

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```
MySQLのプロンプト(mysql>)が表示されれば、MySQLに接続成功です。
###５）MAMPのMySQLにあるデータベースを表示。

```
mysql> SHOW DATABASES;
```
MAMPのMySQLにあるデータベースが表示されれば、OKです。
dplyr、PostgreSQL、Windows の組み合わせで文字化けを防ぐ

DB エンコーディングが UTF-8 の PostgreSQL に dplyr でアクセスしたら、Windows では日本語が文字化けする。

対処法としては `postgresql.conf` を編集して、`client_encoding = sjis` とする方法がある。

```
$ sudo vi /var/lib/pgsql9/data/postgresql.conf
```

ただし、これでは今度は Linux からアクセスしたときに文字化けしてしまう。

そこで、両方のマシンからアクセスしたいような場合は、`client_encoding` はデフォルトのまま、以下を Windows の環境変数に追加する。(参考：[Windows 環境変数 Path の設定方法](http://next.matrix.jp/config-path-win7.html))

```:変数
PGCLIENTENCODING
```

```:値
sjis
```

これで大丈夫なはず。
クライアント(RStudioなど)を再起動してデータ取得してみてください。
LGTM 待ってます。

### 追記：DBエンコーディングの確認

```
$ psql -U postgres
```

```postgres
postgres=# \l
```

```:結果
                                         List of databases
       Name        |     Owner      | Encoding |   Collate   |    Ctype    |   Access privileges   
-------------------+----------------+----------+-------------+-------------+-----------------------
 **************-db | ************** | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres          | postgres       | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
```

### 参考

- [Why are you using SJIS ?](https://github.com/hadley/dplyr/issues/339)
- [[PDF] PostgreSQLの搭載機能 自動エンコーディング変換の使い方](http://www.unisys.co.jp/services/atlasbase/pdf/dbm_1001_postresql.pdf)
- [PostgreSQL: Documentation: 9.2: Environment Variables](http://www.postgresql.org/docs/9.2/static/libpq-envars.html)

### 関連

- [dplyr でデータベースを扱うときの情報をそろそろまとめておく](http://qiita.com/hoxo_m/items/341f499eb4117eec41df)
スタティックルート覚書

■ CentOSなど
※eth0を発信インターフェイスとする場合
route add -net 192.168.99.0/24 gw 192.168.0.254 eth0

※経路を削除する場合
route del -net 192.168.99.0/24 gw 192.168.0.254 eth0

※スタティックルートを再起動後も保存したいとき
vi /etc/sysconfig/network-scripts/route-eth0

192.168.99.0/24 via 192.168.0.254

/etc/rc.d/init.d/network restart

■ Windows
route add 192.168.99.0 mask 255.255.255.0 gw 192.168.0.254

■ 確認
netstat -nr
環境別Classpathの指定方法一覧

JavaのClasspathを、特に複数指定する場合の方法について。

環境によって少しずつクセがあります。

## Linuxの場合

```java -cp WEB-INF/classes:WEBINF/lib jp.hoge.Hoge```

複数指定する場合は、コロン(:)で連結します。

## Windows(コマンドプロンプト)の場合

```java -cp WEB-INF\classes;WEBINF\lib jp.hoge.Hoge```

複数指定する場合は、セミコロン(;)で連結します。
パスの指定はWindows形式、すなわちスラッシュ(/)ではなく円記号(\\)で！

## Cygwinの場合

```java -cp WEB-INF/classes\;WEBINF/lib jp.hoge.Hoge```

複数指定する場合は、セミコロン(;)で連結しますが、円記号でエスケープが必要です！
そして、パスの指定はLinux形式。
SSHトンネルでSFTP接続

自分用のメモ


* 色々確認したらトンネル開通の指定が逆だったので修正。修正したらsuでユーザ名合わせなくても開通した。

内部ネットワークから切り離されている場所への接続にターミナルSSHで接続していたのだけど、データをコピーするときとかSCPコマンドでは色々とGUI世代には苦痛でしかなかったので、FileZillaなどのFTPクライアントからアクセスできるように、トンネルを使ってみた。

* 接続先と踏み台のポート番号は22番を想定

* ~~Puttyとか言っちゃってるけど、Ubuntuで構築した。~~
Puttyでもできたから後ろの方に追記した。

##ターミナルでSSHトンネルを構築
```lang:トンネル構築
$ ssh -L ＜任意のポート番号＞:＜接続先のIPアドレス＞:22 ＜踏み台のユーザ名＞@＜踏み台のIPアドレス＞ -p 22
```
これで、踏み台先のパスワードを入力してログインできれば、localhostで指定したポートにトンネルが開通する。~~`su - ＜踏み台ユーザ＞`でユーザー変更しているのは、別名だとログイン失敗したから。~~

例えば、以下のような設定の場合はsshはこうなる

|名前|記述|
|:--:|:--:|
|踏み台のユーザ|erichika|
|任意のポート番号|10020|
|踏み台IP|aquablue|
|接続先のユーザ|nozomi|
|接続先IP|violet|

```lang:接続例
ssh -L 10020:violet:22 erichika@aquablue -p 22
```
###トンネル開通の確認
'netstat -na | grep 10020`で、値が「LISTEN」になっていればOK
##FTPクライアントで接続
FileZillaの場合
1. 左上にあるサイトマネージャーを開く
2. 開いた画面で、左下にある「新しいサイト」ボタンを押す
3. 追加したサイトで、以下の設定を行う

|名前|値|
|:---:|:---:|
|ホスト|localhost|
|ポート|10020|
|プロトコル|SFTP|
ログオンの種類は「通常」もしくは「パスワードを尋ねる」に設定して、接続を押す

接続が確立すれば、トンネル先のサーバーに接続するはず


PuttyでSSHトンネル
-----------------
トンネル接続用の情報はUbuntuと同様の設定を利用します。

* 接続先のホスト名に、踏み台側のホスト名（erichika）を入力。ポート番号は変更がなければデフォルトの22番でよいです。  
![2283ad7e-c587-6264-27fc-c70f09c17e1f.jpeg](https://qiita-image-store.s3.amazonaws.com/0/59288/53763176-0cdd-23f4-4963-7bdaead94ab9.jpeg)


* 接続→SSH→トンネルの項目で実際に接続したい先の情報を入力
![putty_tunnel.jpg](https://qiita-image-store.s3.amazonaws.com/0/59288/cf12818f-8071-b487-bb86-9b17792740bf.jpeg)

* トンネルのPuttyで通常通り踏み台のサーバーにログインします。

* もう一つPuttyを立ち上げて、先ほどのトンネルしたポート番号に対してlocalhostからSSH接続すれば、リモート先のサーバーに接続できるはずです。
![putty_remote.jpg](https://qiita-image-store.s3.amazonaws.com/0/59288/a33a61d6-a3bd-065b-773c-0db5893fcd89.jpeg)
AndroidStudio + JUnit4で試行錯誤したこと


Android Support LibraryにJUnit4が取り込まれたことを最近知り、その導入に向けて試行錯誤したことをここにメモしておきます。
同じ問題にハマっている人の参考になれば幸いです。

### 参考
導入方法：[続・AndroidでJUnit4を使う方法（Android SDKで正式サポートされました！）](http://qiita.com/AbeHaruhiko/items/91aa8fe0f2299969d0e7)

## ビルドタイプがdebugでしかテストされないが、releaseでテストしたい！

以下を追加すると、releaseでテストできるようになります。

```build.gradle
android {
    // ...
    testBuildType "release"
    // ...
}
```

## カバレッジ測定をしたい！

以下を追加すると、カバレッジ測定が有効になります。

```build.gradle
android {
    // ...
    buildTypes {
        debug {
            testCoverageEnabled true
        }
    }
    // ...
}
```

カバレッジ測定が有効になると、`create${Flavor}${BuildType}CoverageReport`というタスクがGradleに追加されるので、これを実行するとHTMLのレポートが`build/outputs/reports/coverage/${Flavor}/${BuildType}`以下に生成されます。

## カバレッジ測定でRから始まるクラスが除外されている！

Android Gradle Plugin 1.0.0のバグです。1.1より修正されており、2015/02/03時点でベータ版までこぎつけているのでもう暫く待ちましょう。
もしどうしてもすぐに直したい人は、Android StudioをBetaやDevチャネルなどに設定してベータ版にアップデートし、ルートにある`build.gradle`の`com.android.tools.build:gradle:1.0.0`をom.android.tools.build:gradle:1.1.0-+`に書き換えると直ります。

なお、1.1から従来のテスト`Android Instrumentation Tests`とは別に`Unit Tests`というテストアーティファクトが追加されています。ビルドバリアントの設定などが追加されていますが、詳しい使い方は不明です。
tttt

<iframe height='350' scrolling='no' src='//codepen.io/natewiley/embed/raGLBY/' frameborder='no' allowtransparency='true' allowfullscreen='true' style='width: 100%;'>See the Pen <a href='http://codepen.io/natewiley/pen/raGLBY/'>Perspective Shift</a> by Nate Wiley (<a href='http://codepen.io/natewiley'>@natewiley</a>) on <a href='http://codepen.io'>CodePen</a>.
</iframe>
【解決】windows 10からsambaの共有フォルダにアクセスが出来ない？？

解決方法 -> [windows 10で認証なしでファイル共有 - Qiita](http://qiita.com/tukiyo3/items/ce181bef68f8bfac7b2f)

----

ubuntu 13.10のsamba 3.6.18にアクセスしたかった。
![スクリーンショット 2015-02-03 11.01.37.png](https://qiita-image-store.s3.amazonaws.com/0/25728/22225379-92a5-1b0a-8510-3393a6789efa.png)


[Windowsサーバーあれこれ Windows 10 Technical PreviewのSMB/CIFSのバージョン](http://wintips.jp/blog-entry-8.html)によるとwindows10ではSMBのバージョンアップが上がっている様子。
後日調査予定。
Mobile Chrome AppsでiOSアプリをつくる

Chrome Extensionをつくるようにアプリをつくれるし、
既存のChrome Extensionをアプリへ移植できる。
https://github.com/MobileChromeApps/mobile-chrome-apps


##ccaインストール
Node.js, Xcodeが入っている前提で
`$ sudo npm install -g cca`


```
~$ sudo npm install -g cca
Password:
/usr/local/bin/cca -> /usr/local/lib/node_modules/cca/src/cca.js
cca@0.5.1 /usr/local/lib/node_modules/cca
├── cca-manifest-logic@0.0.6
├── underscore@1.7.0
├── node-uuid@1.4.2
├── xmldom@0.1.19
├── q@1.1.2
├── semver@4.2.0
├── shelljs@0.3.0
├── debounce@1.0.0 (date-now@1.0.1)
├── optimist@0.6.1 (wordwrap@0.0.2, minimist@0.0.10)
├── node.extend@1.1.3 (is@2.1.0)
├── crypto-js@3.1.2-5
├── gaze@0.5.1 (globule@0.1.0)
├── elementtree@0.1.6 (sax@0.3.5)
├── gulp-mocha@1.1.2 (through@2.3.6, gulp-util@3.0.2, mocha@1.21.5)
├── chrome-app-developer-tool-client@0.0.4 (q@0.9.7, agentkeepalive@0.2.3, temp@0.7.0, shelljs@0.1.4, adbkit@2.1.6, jszip@2.1.1)
└── cordova@4.2.0 (q@1.0.1, nopt@3.0.1, cordova-lib@4.2.0)
```
インストール完了

##必要ツールインストール
###ios-deplpy
実機でテストするのに必要
`$ sudo npm install -g ios-deploy`

###ios-sim
シミュレーターでテストするのに必要
`$ sudo npm install -g ios-sim`


##プロジェクト作成
`$ cca create TestChromeApp`

##ビルド
プロジェクトのルートディレクトリでコマンドからビルドできる

###シミュレーター
`TestChromeApp$ cca emulate ios`

###実機
`TestChromeApp$ cca run ios`

##プロジェクトをXcodeで起動
`TestChromeApp$ open platforms/ios/TestChromeApp.xcodeproj`
※Xcode上で変更してビルドしても反映されないので、必ず下のコマンドをうつ

##ファイル変更
ファイルを変更したらccaのコマンドで反映
`TestChromeApp$ cca prepare`

##感想
ChromeのAPIを使えるのでなかなか面白いかもしれない。
コンソールで実行中のプロセスを裏に回してコンソールを操作可能にする。


裏=バックグラウンド

###バックグラウンド実行

アクセスログとか大量のデータに対して何か操作をすると、
コンソールがそれの処理に取られてしまって他の作業が出来なくなってしまう。
そんな時に…。

```sh
#user_pageのログだけ欲しい。
cat access.log | grep "user_page" > user_page_access.log &
```

と後ろに`&`を付けて実行すると、
バックグラウンドで実行されコンソールは操作できるままになる。

###ジョブ確認

バックグラウンド実行しているものを確認したいときは`jobs`コマンド。

```sh
jobs
[1]-  Running cat access.log | grep "user_page" > user_page_access.log &
```

1個バックグラウンドで動いている。

###フォアグラウンド実行

処理をフォアグラウンド(表)に戻したいときは`fg`コマンド。

```sh
fg 1
```

1は、job`[1]`の番号。

###実行中のものを途中からバックグラウンド実行

```
cat access.log | grep "user_page" > user_page_access.log
```

`Ctrl+z`を押す、

```
[1]+  Stopped cat access.log | grep "user_page" > user_page_access.log
```

と一時停止になるので、

```
bg %1
```

1は、job`[1]`の番号。
CloudWatchにJenkinsのキューにたまっているジョブ数を登録してみる

サーバーとJenkinsが生きていてもジョブがうまく動いておらずキューにたまってしまう場合があったので、検知するためにキューにたまっているジョブ数を監視することにした。

監視はJenkinsのジョブ自体で行うこととした(ジョブがつまって自分自身が実行されない場合はINSUFFICIENT_DATAで検知)。
[Groovy Postbuild Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin)を用いて以下のようにカスタムメトリックスを登録してみた。

```groovy
queue_size = jenkins.model.Jenkins.instance.getQueue().getItems().size()
instance_id = "curl http://169.254.169.254/latest/meta-data/instance-id".execute().text.replaceAll(/(\r|\n)/,"")

cmd = "aws cloudwatch put-metric-data --region ap-northeast-1 --namespace System/Linux --metric-name QueueSize --dimensions Application=Jenkins,InstanceId=${instance_id} --unit Count --value ${queue_size}"
manager.listener.logger.println cmd
exitValue = cmd.execute().waitFor()
manager.listener.logger.println "exitValue=${exitValue}"
```

実際にやってみると登録はうまくいっているのでAlarmセットして検知できそう。
ImageMagickリサイズ

ImageMagickでリサイズの組み合わせ
-------------------------------

* 縦横比を維持せず、指定されたサイズに伸縮
`convert -scale WxH! inputfile outputfile`

* 縦横比を維持して、両側をクロップ
  `convert -resize WxH^ -gravity center -crop WxH+0+0 [+repage] inputfile outputfile`

* 縦横比を維持して、両側の余白部分は塗り潰す
  `convert -resize WxH -gravity center -background red -extent WxH inputfile outputfile`

WとHは、それぞれリサイズする幅と縦のサイズ。
塗りつぶしは、赤で指定。

参考
----

[ImageMagick: Command-line Options](http://www.imagemagick.org/script/command-line-options.php)
Drupalのマルチサイト設定

### 前提
マルチサイトにしたいサーバーでDrupalが既に構築されている事を前提にします。
(以降、メインサイトと呼び、新しく構築するサイトをサブサイトと呼びます。)

確認方法はPCのhostsに追加して、確認しています。
説明の中では、以下のようなドメインを利用した想定で進めます。

| | ドメイン名| 
|:-----------|-----------:|
| メインサイト | dev.hoge.jp |
|サブサイト|  dev.fuga.jp |


### Apacheの設定
Apacheでも他のWebサーバーでもやることは一緒です。
ドキュメントルートをメインサイトと同じにすること。それだけです。

#### ApacheのVirtual Host設定例

メインサイトの設定

```
<VirtualHost *:80>
  DocumentRoot /var/www/dev
  ServerName dev.hoge.jp
  ErrorLog logs/dev-hoge-error_log
  CustomLog logs/dev-hoge-access_log common
  <Directory "/var/www/dev">
    AllowOverride All
  </Directory>
</VirtualHost>
```

サブサイトの設定

```
<VirtualHost *:80>
  DocumentRoot /var/www/dev
  ServerName dev.fuga.jp
  ErrorLog logs/dev-fuga-error_log
  CustomLog logs/dev-fuga-access_log common
  <Directory "/var/www/dev">
    AllowOverride All
  </Directory>
</VirtualHost>
```

どちらもDocumentRootはメインサイトの「/var/www/dev」を指定してます。

### Drupalの設定
サブサイトの設定を保存するディレクトリを作ります。

```
cd /var/www/dev/sites 
mkdir dev.fuga.jp
```

ポイント
sites配下にサブサイトのドメインでディレクトリを作成します。
「dev.fuga.jp」ディレクトリの中は、sites/default と同じような構成にします。

```
cd /var/www/dev/sites/dev.fuga.jp
cp ../default/files .
cp ../default/default.settings.php ./settings.php
```

filesディレクトリをコピー、settings.phpもdefault.settings.phpからコピーします。

```
cd /var/www/dev/sites/dev.fuga.jp
chmod 755 ./settings.php
```

settings.phpは権限設定も変更してください。

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

ここで、http://dev.fuga.jp へアクセス、
Drupalのインストール画面が出てきたら・・・成功です。
メインサイトをインストールしたときと同じように、進めれば完了です。

ポイント

モジュールがインストールされているかのように進みますが、そんなことはないです。
メインサイトと同じモジュールが利用できます。
DBが別になるので、モジュールの利用設定は、サイトごとに設定可能です。

思ったよりあっさり出来るので、
実験でDrupalのモジュールを管理画面上でごちゃごちゃ触りたいときにおススメです。
Cloudfrontへの脆弱性テストと負荷テスト実施時のメモ



#脆弱性診断テスト時の注意

2015/01/19現在、`Cloudfrontへの脆弱性診断テストは禁止`されています。

ただ、サービス上の脆弱性はパスしないと行けないので、何らかの診断は実施しておく必要があります。
EC2に対する脆弱性診断であれば、[事前申請](https://portal.aws.amazon.com/gp/aws/html-forms-controller/contactus/AWSSecurityPenTestRequest)は必要ですが実施できるので、
どうしてもやらないとということであれば、`オリジンに対して実施する`ことになります。。。

なお、オリジン側で、Cloudfrontのエッジからしかアクセスを許可していないように設定している場合などは、
`一時的に設定を変更して実施する必要がある`ので要注意です。


また、S3への診断も禁止されているので、`オリジンがS3である場合はどうしようもない`ので、
事前に顧客への説明・説得が必須となります。。。


#負荷テスト時の注意

`CloudfrontのDefaultのリクエスト処理量の上限は、1000リクエスト/sec`となっています。
普段はこの量を想定していなくても、負荷テスト時にこれを超える負荷でテストした場合、
エラーになる可能性があるので要注意です。
1000/sec以上の負荷でテストを行う場合はサポートページから上限緩和申請をおこないましょう。
nmapでポート指定チェック

```bash:
nmap -p1-10000 192.168.100.100
```

上記だと1から10000ポートがチェックできる。

`man nmap`

なおプリンタで利用するポートはスキャンの対象外。(パケットが届いたらそのまま印字されるプリンタがあるそうな。)
[networking - Find Printers with Nmap - Server Fault](http://serverfault.com/questions/154650/find-printers-with-nmap)

```bash:どうしてもスキャンしたい場合
-p 515,631,9100 Scan for TCP Port 515, 631 and 9100.
```
【エラー対策】OSError: Command ・・・ "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip failed with error code 1

#はじめに
Djangoの勉強で[Python Django入門 (4)](http://qiita.com/kaki_k/items/6e17597804437ef170ae)をひとつずつ検証させていただいていた時に、pipで[django-bootstrap-form](https://github.com/tzangms/django-bootstrap-form)を入れる際に仮想環境env1で
`ImportError: cannot import name 'HTTPSHandler'`
というエラーが発生しました。これを解決するために今までの手順を見直していたら仮想環境の構築するために

`mkvirtualenv --no-site-package --python /usr/local/bin/python3 env1
`

を実行すると

`OSError: Command /Users/username/.virtualenvs/env1/bin/python3.4 -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip failed with error code 1`

username:任意の名が入ります

というエラーが発生しました。
これが今までの全ての原因かも？
ということで、これについて調べたら次の記事がヒットしました。

記事：[Cannot create virtualenv instance in python 2.7.5 because of pip installation error](http://stackoverflow.com/questions/20916712/cannot-create-virtualenv-instance-in-python-2-7-5-because-of-pip-installation-er)

この記事によると
`sudo easy_install virtualenv==1.10.1`
を行うと解決するらしく実行させてみると...

`$ mkvirtualenv --no-site-package --python /usr/local/bin/python3 env1
Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/usr/local/Cellar/python3/3.4.1/Frameworks/Python.framework/Versions/3.4'
Overwriting env1/lib/python3.4/site.py with new content
New python executable in env1/bin/python3.4
Not overwriting existing python script env1/bin/python (you must use env1/bin/python3.4)
Installing Setuptools............................................................................................................done.
Installing Pip...........................................................................................................................................................................................................................................................done.
Overwriting env1/bin/activate.fish with new content`

と無事に仮想環境の構築をすることがきました。

ただ、これでは最初のエラー`ImportError: cannot import name 'HTTPSHandler'`は解決していませんが...
まぁ、HTTPSHandlerという名前のインポートができないとのころなのでこちらはもう少し調べて他の記事で書いてみます。

とりあえず「OSError: Command ・・・ "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip failed with error code 1」のエラーは解決できたのでここまで。
PythonやBlenderでmrubyを動かす

# はじめに

mrubyをcloneしてビルドしておきます。
pythonはblenderが使っているのが、3.4.2なので、
これに近いやつだと以下のコードで動きます。

# この記事の応用例のご紹介

- [Blenderでtrusterd.py？(Pythonの中のmrubyの中でhttp2サーバーのtrusterdを動かした)](http://youtu.be/ftzZtB8sPvM)

# C

```c
#include <stdio.h>
#include <assert.h>
#include "mruby.h"
#include "mruby/proc.h"
#include "mruby/compile.h"

// "(1..10).each { |x| p x }"

int spam_hello(char *name)
{
  assert(name != NULL);
  mrb_state* mrb = mrb_open();
  mrb_load_string(mrb, name);
  mrb_close(mrb);

  return printf("hello %s\n", name);
}
```

```bash
gcc -I$HOME/local/src/mruby/include -shared -fPIC sapm.c -o sapm.dylib $HOME/local/src/mruby/build/host/lib/libmruby.a
```

# Python

```py3
from ctypes import *

class MrubyPyError(Exception):
    pass

class MrubyPy:
    c_spam_module = CDLL('./sapm.dylib')
    c_spam_hello_func_type = CFUNCTYPE(c_int, c_char_p)
    c_spam_hello_func = cast(c_spam_module.spam_hello, c_spam_hello_func_type)

    @classmethod
    def hello(cls, name):
        if name == None or not isinstance(name, str):
            raise MrubyPyError('invalid argument')
        ret = cls.c_spam_hello_func(create_string_buffer(name.encode('UTF-8')))
        #ret = cls.c_spam_hello_func(create_string_buffer(name))
        print ('c_spam_hello_func returned:', ret)

if __name__ == '__main__':
    #MrubyPy.hello('(1..10).each { |x| p x }')
    f = open("hoge.rb","r",encoding="UTF-8")
    ruby=f.read()
    print(ruby)
    MrubyPy.hello(ruby)
```

# OSXのblenderの場合

```
/Applications/blender.app/Contents/MacOS/blender --background --python hoge.py
```
PHPで書き出したファイル内でPHPを実行する方法

PHPでファイル生成をする方法、書きだしたファイル内でPHPを実行する方法について質問です。

↓こちらのページを参考にして、データベースにデータ登録があった時に、入力されたデータを元にPHPファイルを書き出すことはできました。
http://webtech.seesaa.net/article/94979061.html

```php
ob_start();
//書き込むHTMLソースここから
中略
//書き込むHTMLソースここまで
$output = ob_get_contents();
```
やりたいことのイメージは、
1.データベースにデータが登録される
2.INSERTすると同時に、その内容を元に出力したPHPファイルを生成
3.生成されたファイル内の一部でPHPを実行（リアルタイムでページビューをカウントしてDBへ格納し、ページビューを表示）

現在のやり方だと、書き込むソースHTML内のPHPコードが全て実行されて出力されるので、PHPを埋め込む方法が思いつきません。

javascriptでPHPを呼び出す方法で、ページビューは取得＆表示できましたが、根本的解決に至っていないので、ファイルを生成する別の方法など、アイデアかヒントを頂けると有難いです。
http://ysklog.net/javascript/1870.html

手探りで勉強しているもので、見当違いなことを書いているかも知れませんが、どうぞよろしくお願いします。
縮尺1:1はズームレベル30

http://wiki.openstreetmap.org/wiki/Zoom_levels の表の概略スケール表示は、かなり感覚的なものであると理解しているが、縮尺1:1のズームレベルが何であるか確認してみたくて、この表を敷衍してみた。

|ズームレベル|概略縮尺|
|:---------|------|
|20        |1:500|
|21        |1:250|
|22        |1:100|
|23        |1:50 |
|24        |1:25 |
|25        |1:10 |
|26        |1:5  |
|27        |1:2.5|
|28        |1:1  |

つまり、ズームレベル28あたりで縮尺1:1が実現する、かもしれない。検算してみよう。

# 検算と修正
http://blogs.bing.com/maps/2006/02/25/map-control-zoom-levels-gt-resolution/ の末尾にある公式で z=28 を代入してみると次のようになる。
```
map scale = 1:(100 * 39.37 * 156543.04 * 0.766 / (2 ** 28) = 1:1.759
```
まだすこしあるので、z=29 を代入してみる。
```
map scale = 1:(100 * 39.37 * 156543.04 * 0.766 / (2 ** 28) = 1:0.879
```
これは北緯40度での値なので、日本の低緯度でも1:1以上であるためには、とりあえず「z=30 であれば縮尺1:1くらい」みたいに言えるのではないか。

（※要検算）
Re:VIEWのコードハイライト改訂案

もっとコードハイライトしたい。

# 現状

config.ymlにて、

```yaml
pygments: true
```

と書けば、HTML・EPUBのみPygmentsを使ったコードハイライトが行われる。Pygments本体（Python）に加えてPygments gem(RubyGems)のインストールが必要。
LaTeXは未対応（以前試してみたらうまく動かなかった）。

なお、コード内にインライン記法が来た場合は残念なことになるのに注意。（とはいえこれは制限事項にしてしまってもいいかも）

# やりたいこと

* LaTeXでlistingsが使えるようにしたい
* LaTeXでPygmentsも使えるようにしたい（けど設定が大変そう？　ちゃんと動くかどうかは不明）
* HTMLでもrouge gemくらいは使いたい https://github.com/jneen/rouge
    * rougeはPygments互換だけどHTMLのみでLaTeXは対応してないらしい…
* その他HTML/EPUBだと他のhighlightingライブラリを使いたいという話はありそうなので対応できれば対応したい
    * JS使うやつとかはどこまで便利なんだろう…
        * KindleだとJS系は全部駄目そう

# 実現方法

* config.ymlに`highlight:`属性を持たせて、どれを使うかを指定できるようにするのはどうか
* ビルダごとに設定する必要があるので、階層化が必要なのでは？

```
highlight:
  html:
    pygments:
      style: bw   ## or `style: default` or nothing
  latex:
    listings
```

別の案：

```
highlight:
  html:
    engine: pygments
    style: bw   ## or `style: default` or nothing
  latex:
    engine: listings
```

すでにある`pygments`属性は互換性のため残しておいて、highlight:属性の値がない場合に`{highlight: {html: pygments}}` と同様の意味を持つように解釈すれば良さそう
Bootstrapで簡単につかえるWebフォント「FontAwesome」ソーシャルアイコンメモ


##CDN利用

```
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
```

##HTML
#####facebook、twitter、google+、github、tumblr、pinterest、linkedin

```
<i class="fa fa-facebook-square fa-lg fa-fw "></i>
<i class="fa fa-twitter-square fa-2x fa-fw fa-spin"></i>
<i class="fa fa-google-plus-square fa-3x fa-fw"></i>
<i class="fa fa-github fa-5x fa-fw fa-spin"></i>
<i class="fa fa-tumblr-square fa-4x fa-fw"></i>
<i class="fa fa-pinterest-square fa-3x fa-fw"></i>
<i class="fa fa-linkedin-square fa-2x fa-fw"></i>
```

######fa-lg fa-2x fa-3x fa-4x fa-5x を入れることでサイズが大きくなる
######fa-fw アイコン幅を揃える
######fa-spin アイコン回転

###CSS 
####マウスオーバーでコーポレートカラーに

```
.fa-facebook-square {
color: #d1d4d3;
}
.fa-twitter-square {
color: #d1d4d3;
}
.fa-google-plus-square {
color: #d1d4d3;
}
.fa-tumblr-square{
color: #d1d4d3;
}
.fa-github  {
color: #d1d4d3;
}
.fa-pinterest-square {
color: #d1d4d3;
}
.fa-linkedin-square{
color: #d1d4d3;
}
/**/
.fa-facebook-square:hover {
color: #3B5998;
}
.fa-twitter-square:hover {
color: #4099FF;
}
.fa-google-plus-square:hover {
color: #d34836;
}
.fa-tumblr-square:hover {
color: #35465c;
}
.fa-github:hover {
color: #666;
}
.fa-pinterest-square:hover {
color: #cc2127;
}
.fa-linkedin-square:hover {
color: #0976b4;
}
```

[実行サンプル](http://faceapglezon.info/tools/fa/index.php )
[C, C++] インクルードガード実装毎のベンチマーク

プログラミング言語C,C++では、CPPを用いたインクルードガードとして、#ifdefイディオムと#pragma once拡張が用いられる事が多い。規格に則った汎用性のためには#ifdefを使うべきだが、#pragma once拡張は多くのコンパイラで[サポートされている](http://en.wikipedia.org/wiki/Pragma_once)。

\#ifdefイディオムを用いた場合、メモ化無しではファイル全体をパースし直す必要があるので、依存関係が巨大な時は極めて時間がかかるように思われる。少なくとも#pragma once拡張が遅い理由は無い。

そこで、これらのベンチマークが無いか探した所[見つかった](http://tinodidriksen.com/2011/08/31/cpp-include-speed/)。この結果によると、MSVCでは#pragma onceがやや速いが、gccでは#ifdefの方がずっと速い(！)。Clangではほぼ変わらない。ただし、これらのベンチマークはVM上で取られており、IO帯域が狭くなっているため、絶対的な時間にはそれほど意味は無い。また、これらのベンチマークが取られたのは2011年である。

結論：そんな事を気にしている暇があったらコードを書くべきである。
プログラミングってなに？Groovyってなに？（プログラミング入門 with Groovy）

#はじめに
この記事は、[プログラミング入門 with Groovy](http://qiita.com/saba1024/items/2bce044e54f450f8b549)の1部です。

#プログラミング？Groovy？

##プログラミングって何？
この記事を見て頂いているということは、経験の有無は別として、少なからずプログラミングに興味を持たれている方だと思います。
しかし、巷にはプログラミングの入門書は山ほど有り、どれを選べばいいのか分からない方もいらっしゃると思います。
またプログラミング関連の書籍は2000円を超えるものがざらにあって、ちょっと2000円も払って勉強するのは。。。と思われる方も多いのではないでしょうか。

そこで、本当に基本的な部分のみでは有りますが、プログラミングの基礎を学べる記事を投稿してみようと思います。

さて、そもそもプログラミングって具体的に何なの？何ができるの？という疑問があります。
実はこれは非常に難しくて大切な問題です。
基本的にプログラミングで作成するのはソフトウェアです。ソフトウェアはコンピュータ上で動作するものです。
今皆さんがこのページを見ているということは、Inernet Explorer、Google ChromeやFirefoxといったブラウザをお使いだと思います。これらのブラウザもソフトウェアです。
ということは、ブラウザもプログラミング言語を用いてプログラミングされている（作成されている）ということですね。
スマートフォンやタブレットで使っているアプリも全てプログラミング言語を用いて作成されたものです。ということは、プログラミングを勉強すれば自分でスマフォアプリが作れるわけですね！

また、最近は[Raspberry pi](http://www.raspberrypi.org/)を始め、低価格かつ高性能、省電力で動作するコンピュータが続々登場して来ています。（Raspberry piは大体4000円くらいです）
IoTという言葉を聞いたことがある方もいらっしゃると思います。今後、プログラムを駆使してそのような低価格かつ、小さなコンピュータを利用して、物理的に生活を便利にしていくと流れが加速することは間違いありません。

今までプログラミングといえば、コンピュータ上で、コンピュータに向かってその結果を出力していましたが、今後はプログラムからコンピュータの外側の物を制御するという流れになってくると思われます。
コンピュータの中からコンピュータの外へ、その活躍の場は広がる一方ですが、プログラミングという基本は変わりません。
インターネットが爆発的に普及した時と同じように、今後さらにこの世界は変貌を遂げていきます。
今プログラミングを勉強することで、その中に自身を投じることが出来るチャンスを手に入れられます。


なお、プログラミングを勉強し始めるためのwebサイトは他に山ほど存在しています。
この連載が分かりづらいよ！と思われた場合、すぐに他の勉強方法を試されるのもひとつの手段です。
勉強するのに苦労をする必要はありません。自分にあった学習方法で楽しくプログラミングを学んでいきましょう。

[ドットインストール](http://dotinstall.com/)
[Codecademy](http://www.codecademy.com/ja)

##Groovyってなに？
さて、ちょっと風呂敷を広げすぎたので現実的な部分を。。。
プログラミングをするために、プログラミング言語というものを用います。
言語というくらいなので、英語や日本語などと同じように、様々なプログラミング言語が存在しています。
その中で今回、私達はGroovyというプログラミング言語を用いてプログラミングを勉強します。
Groovyはオープンソースという形態で開発されており、さらに無料で利用することが出来ます。
各プログラミング言語には、それぞれ得意とする分野や特徴などが有りますが、Groovyはそれらの様々なプログラミング言語の良い箇所を取り入れているプログラミング言語です。

有名なプログラミング言語には以下のようなものが有ります。

- [Java](https://java.com/ja/download/)
- [Ruby](https://www.ruby-lang.org/ja/)
- [PHP](http://php.net/)
- [Python](https://www.python.org/)
- [JavaScript](http://ja.wikipedia.org/wiki/JavaScript)
- [Scala](http://www.scala-lang.org/)

プログラミングで大切なのは、最終的には「コンピュータにどのように処理させるか」になります。
この部分はどんなプログラミング言語を使っても変わることのない普遍的なものです。
といっても当然プログラミング言語によって、書きやすさ、読みやすさ、速度、安全性など様々なファクターが存在します。
その中で、いろんな言語の良いところを参考にしているGroovyを使ってプログラミングを勉強することで、今後別のプログラミング言語を勉強しようと思った時にもスムーズに勉強が進められるような基礎知識をつけることが出来ます。
当然Groovy自体素晴らしいプログラミング言語です。が、プログラマたるもの毎年ひとつは新しいプログラミング言語を勉強するべき、という定説が有ります。
まずはそのための基礎体力をつけるためにも、Groovyは最適なプログラミング言語です。

##プログラミングが出来るようになってメリットはあるの？
当然色々有ります。
まず趣味として。プログラミングが好きになれば、当然趣味として成り立ちます。
そして仕事。言わずもがなプログラミングが出来るのであれば、それを武器にして仕事が出来ます。

プログラミングは本当に楽しいです。
私は決して優れたプログラマではありませんが、プライベートでも仕事でもプログラミングをしています。
プログラミングを行うプログラマは、ざっくり言えば職人に相当するので、誰でも簡単に良いプログラマになれるものではなく、企業としても良いプログラマはいつでも確保したいとうのが一般的な考え方です。
コレは世界中で共通しています。

手前味噌ですが、私は現在ドイツの現地企業に直接雇用してもらい、プログラマとして生活しています。
この記事もドイツから書いています。
プログラミングが出来るようになれば、ちょっと海外で仕事してみようかな？ということが現実的な選択肢になります。（当然絶え間ない努力が必要ですが）

何はともあれ、1度きりの人生なので、**プログラミングってどんなものかな？ちょっと遊んでみるか**という軽い気持ちでまずはプログラミングに挑戦してみてはいかがでしょうか。
Intel VT-dがうまく使えないときの対策

## 使った環境

- Core i7 4790K
- ASRock Fatal1ty H97 Performance
- Debian 7

## dmesgを見ると、VT-d関連で警告が…

x2apicがどうたらと書かれてるものであればBIOSがちょっとアレなだけで、以下のカーネルオプションで直ります。

```
intremap=no_x2apic_optout (outputではないので注意)
```

## あと

依然としてVT-dを有効にするためにはこのカーネルオプションは必須です。

```
intel_iommu=on
```

## 参考

[Advisory: Red Hat Enterprise Linux 6.2およびSUSE Linux Enterprise Server 11 SP2 - インテル(R) Xeon(R) E5-2600シリーズプロセッサーで構成されているHP ProLiantサーバーで、Linuxカーネルが感染することがある](http://h20628.www2.hp.com/km-ext/content-webapp/document?docId=emr_na-c03242186)

[アドバイザリ： Linux - Red Hat Enterprise Linux 6.2を実行しているHP ProLiant Gen8シリーズサーバーのSR-IOV機能を使用してNICで仮想機能を割り当てた後、仮想マシン (VM) の電源をオンにできない](http://h20628.www2.hp.com/km-ext/content-webapp/document?docId=emr_na-c03645796)
CSVファイルからノイズ行を除去したいときに役たつawkワンライナー


CSVと聞いて憂鬱になるのはぼくだけだろうか。
でもそんな憂鬱な事もやらなくてはいけない時がある。
そんな憂鬱な時にぼくはawkでゴニョゴニョしてしまう。
そんなときのワンライナーメモ

## CSVのヘッダー行を除外したい

CSVデータ例として

```csv:hoge.csv
COLUMN1,COLUMN2,COLUMN3
1,hoge,1
2,fuga,1
3,test,2
```

データ行だけ抽出したい時はこう書く

```shell:/path/to/hoge
cat hoge.csv | awk 'NR > 1 {print}'

#　ヘッダーを除外できる
1,hoge,1
2,fuga,1
3,test,2
```

## CSVのフッター行を除外したい

CSVデータ例として

```csv:hoge.csv
1,hoge,1
2,fuga,1
3,test,2
FOOTER1,FOOTER2.FOOTER3
```


```shell:/path/to/hoge
cat hoge.csv | sed -e '$d'

#　ヘッダーを除外できる
1,hoge,1
2,fuga,1
3,test,2
```

## CSVのヘッダー行とフッター行を除外する

ヘッダとフッタが存在するCSVを処理したい場合は上記2つの例をパイプで渡す

```csv:hoge.csv
COLUMN1,COLUMN2,COLUMN3
1,hoge,1
2,fuga,1
3,test,2
FOOTER1,FOOTER2.FOOTER3
```

```shell:/path/to/hoge
cat hoge.csv | sed -e '$d' | awk 'NR > 1 {print}'

#ヘッダとフッタを除外できる
1,hoge,1
2,fuga,1
3,test,2
```



## CSVのとあるカラムがtestという文字列が含まれている場合は除外する


```csv:hoge.csv
COLUMN1,COLUMN2,COLUMN3
1,hoge,1
2,fuga,1
3,test,2
FOOTER1,FOOTER2.FOOTER3
```

ここからCOLLUMN2がtestという文字列が含まれているデータが入っている行だけ除外したい場合

```shell:/path/to/hoge
cat hoge.csv | awk -F , '{if ($2 !~/test/) print}'
COLLUMN1,COLUMN2,COLLUMN3
1,hoge,1
2,fuga,1
FOOTER1,FOOTER2, FOOTER3
```

## CSVのとあるカラムの文字数が3桁以下の場合は除外する

```csv:hoge.csv
COLUMN1,COLUMN2,COLUMN3
1,123,1 #この行を除外したい
2,fuga,1
3,test,2
FOOTER1,FOOTER2.FOOTER3
```

length(列番号)でいける


```shell:/path/to/hoge
cat hoge.csv | awk -F , '{if (length($2) > 3) print}'
COLLUMN1,COLUMN2,COLLUMN3
2,fuga,1
3,test,2
FOOTER1,FOOTER2, FOOTER3
```

## 空白行を除外する

```hoge.csv
COLLUMN1,COLUMN2,COLLUMN3
1,123,1
2,fuga,1

3,test,2
FOOTER1,FOOTER2, FOOTER3
```

```shell:/path/to/hoge
cat hoge.csv | awk -F , '{if (length($0) > 0) print}'                                                                                                kurumomi-configuration-management/git/master
COLLUMN1,COLUMN2,COLLUMN3
1,123,1
2,fuga,1
3,test,2
FOOTER1,FOOTER2, FOOTER3
```

## 先頭が空白文字列で始まっているものを除外する

```hoge.csv
COLLUMN1,COLUMN2,COLLUMN3
1,123,1
 2,fuga,1 #先頭行が空白から始まっている
3,test,2
FOOTER1,FOOTER2, FOOTER3
```

```shell:/path/to/hoge
cat hoge.csv | awk -F , '{if ( $0 !~/^ / ) print }'
COLLUMN1,COLUMN2,COLLUMN3
1,123,1
3,test,2
FOOTER1,FOOTER2, FOOTER3
```

ココらへんを上手く組み合わせてワンライナー芸人目指します！！！
oracle メモ


確認系の sql は重要だと思うのだけど、
この辺り標準化して欲しい。

```sql
-- 日付フォーマットを確認する(RR-MM-DD みたいなやつ)
select value from v$nls_parameters where parameter = 'NLS_DATE_FORMAT';

-- スキーマのテーブル一覧を確認する
select * from tab;

```
gatlingの使い方

# <i class="fa fa-linux" style="font-size:1em;"></i> gatling
>Gatling is a highly capable load testing tool. It is designed for ease of use, maintainability and high performance.

ガトリングは優秀な負荷テストツールです。これは、使いやすさ、保守性の高いパフォーマンスを実現するように設計されている。(google翻訳)

# <i class="fa fa-bolt" style="font-size:1em;"></i> gatling-sbt
https://github.com/gatling/gatling-sbt

gatling-sbtは`sbt test`でgatlingを実行出来るようにするためのものです。(合ってる？)

# <i class="fa fa-bullhorn" style="font-size:1em;"></i> 使い方

まずはREADMEに記載の中で一番ラクな方法をとれる
`or for 0.13.6 and later :`のものを使用します。

```build.properties
sbt.version = 0.13.7
```

```scala:build.sbt
name := "GatlingerGirl"

version := "1.0"

scalaVersion := "2.11.5"

libraryDependencies ++= Seq(
  "io.gatling.highcharts" % "gatling-charts-highcharts" % "2.1.4",
  "io.gatling.highcharts" % "gatling-charts-highcharts" % "2.1.3" % "test",
  "io.gatling"            % "gatling-test-framework"    % "2.1.3" % "test"
)

enablePlugins(GatlingPlugin)
```

```scala:plugin.sbt
logLevel := Level.Warn

addSbtPlugin("io.gatling" % "gatling-sbt" % "2.1.0")
```

## <i class="fa fa-code" style="font-size:1em;"></i> コード
src/test/scala 配下に作ります。

超絶シンプルに書きました。

```scala:Main.scala
/**
 * Created by FScoward on 2015/02/02.
 */
import io.gatling.core.Predef._
import io.gatling.http.Predef._

class Main extends Simulation {
  val req = http("github").get("https://github.com/gatling/gatling").check(status.is(200))
  val scn = scenario("request").exec(req)

  setUp(scn.inject(atOnceUsers(1)))
}
```

# <i class="fa fa-fighter-jet" style="font-size:1em;"></i> 実行
`sbt test` で実行すればいい感じに結果が出力されます。

# github
https://github.com/FScoward/GatlingerGirl
sqlplus でカーソルキーを使ったりする

```
# yum -y install readline-devel
# curl -O http://utopia.knoware.nl/~hlub/rlwrap/rlwrap-0.37.tar.gz
# tar xfvz rlwrap-0.37.tar.gz
# cd rlwrap-0.37
# ./configure
# make
# make check
# make install
$ rlwrap sqlplus username/password
```

参考のままにダウンロードしたが、もしかしたらもっと新しいバージョンがあったのではないか？

# 参考
sqlplus で bash みたいにヒストリを呼び出したりできたらいいな - ablog
http://d.hatena.ne.jp/yohei-a/20101021/1287677679
プロビジョニングプロファイル用のQuick Lookプラグイン「ProvisionQL」



何ができるのか
--------------

* プロビジョニングプロファイルの情報を表示する
* アプリパッケージに含まれるプロビジョニングプロファイルの情報を表示する
* Finderに表示されるIPAファイルのアイコンを、アプリのアイコンで表示する

ざっくり言うと、こんな感じです。


どんなときに便利か
------------------

例えば、受託開発でクライアントからプロビジョニングを提供してもらっている場合などで、プロビジョニングがApp Store配布用なのかAd hoc配布用なのか、開発用なのか調べたい時があります。

こちら（ [iOS - アーカイブ済みバイナリのプロビジョニングを確認する - Qiita](http://qiita.com/yimajo/items/b2afd85513ea7c47b66a) ）の記事の通り、プロビジョニングプロファイルの中身を確認すれば判断できるのですが、この「ProvisionQL」を導入しておくことで、Quick Lookで手軽に確認できるようになります。

他にも、紐付いている端末のUUIDを確認できる点も便利ではないかと思います。

表示例
------

モザイク多めですが…こんな感じで表示してくれます。

### .mobileprovisionの場合

例えばプロビジョニングプロファイルの場合は、このような画面が表示されます。

![provisionql_7_8.png](https://qiita-image-store.s3.amazonaws.com/0/12951/bee23b76-2c51-500a-634d-318883565394.png "provisionql_7_8.png")


**UUID** や **Team ID** なども確認できますが、個人的に便利なポイントとしては、以下のあたりです。

* **Profile Type**
    * 開発用の場合は *iOS Development*
    * Ad hoc配布用の場合は *iOS Distribution (Ad hoc)*
    * App Store配布用の場合は *iOS Distribution (App Store)*
    * Enterprise配布用の場合は *iOS Enterprise*
* **Expiration Date**
    * プロファイルの有効期限と、そこまでの日数を表示してくれます
* **DEVICES**
    * 開発用やAd hoc用の場合、インストール可能な端末のUDIDが確認できます
    * 開発用のMacと接続したことがあるもの？は、端末名やOSも表示されるようです
* **ENTITLEMENTS**
    * PUSH通知用の設定が適切に行われていれば、 *aps-environment* という項目が表示されます（ [iOS - コード署名でAPNsが有効になっているか調べる - Qiita](http://qiita.com/STAR_ZERO/items/2f0d27cfe7aa97aa5a71) ）


### .ipa/.appの場合

.ipaや.appなどのアプリパッケージをQuick Lookした場合、このような画面が表示されます。

![provisionql_1_3.png](https://qiita-image-store.s3.amazonaws.com/0/12951/5b520762-80ef-b8b3-2191-5cf0b3546f16.png "provisionql_1_3.png")


上記のプロビジョニングプロファイルの情報に加えて、 **App info** というセクションが加わり、そこにはアプリのアイコンやバージョン/Bundle Id/対象デバイスファミリーなどの情報が表示されます。

上記のキャプチャのアプリではPUSH通知を使っているので、先に述べた *aps-environment* が設定されています。


### もっと色々


GitHubにもスクリーンショットがあるので、こちらも参考にしてみてください。

[ProvisionQL/screenshots.md](https://github.com/ealeksandrov/ProvisionQL/blob/master/screenshots.md)



インストール方法
----------------

Homebrewが導入されている環境であれば、Homebrew Caskでインストールするのが簡単です。

```
$ brew cask install provisionql
```

もしくはGitHubでバイナリが公開されているので、それを使って導入することもできます。

詳しくはREADME.mdを参照してください。

[ealeksandrov/ProvisionQL](https://github.com/ealeksandrov/ProvisionQL)



類似プラグイン「CocoaDeveloper Quicklook Plugin (ipaql)」
---------------------------------------------------------

Homebrew Caskには、もう一つ同じようにQuick Lookでプロビジョニングの中身を確認できるプラグインがありました。

[CocoaDeveloper Quicklook Plugin](http://ipaql.com/)

比較したところ、以下の点でProvisionQLよりも弱かったので、私はProvisionQLを導入することにしました。

* Profile Typeを表示してくれない
* Entitlementsの情報を表示してくれない
Powershellで試し打ちしたコマンドの結果を、改めて変数に代入するのが面倒だなー


とか、思っていたんですが、`... | sv hoge`で十分でした。

# 詳しく

試しにコマンドを打った後、
その結果を改めて変数に代入するの面倒だなーとか思ってたんですよ。

```ps1
> 1..4 | %{2 * $_}
2
4
6
8
> $x = 1..4 | %{2 * $_}
```

だから、良い感じのリダイレクトがないかなーとか妄想してたんですよ。

```ps1
> 1..4 | %{2 * $_} >= $x
> $x
2
4
6
8
```

色々調べてたら次のように書けるらしいんですよ。

```ps1
> 1..4 | %{2 * $_} | Set-Variable x
> $x 
2
4
6
8
```

しかも Alias があって、もっと短く書けるらしいんですよ。

```ps1
> 1..4 | %{2 * $_} | sv x
> $x 
2
4
6
8
```

便利なんですよ。


# おまけ

```ps1
function Out-Variable
{
  Param(
    [Parameter(Mandatory = $true)]
    [String] $Name, 

    [Parameter(ValueFromPipeline = $true)]
    $Value,
    
    [ValidateSet("+", "-", "*", "/", "%")]
    [String] $Operation
  )

  Begin {$array = @()}

  Process {$array += ,$Value}

  End
  {
    $x = (Get-Variable -Name $Name -Scope 1).Value

    Switch ($Operation)
    {
      "+"
      {
        if ($x -is $array.GetType())
        {
          Set-Variable -Name $Name -Value ($x + $array) -Scope 1
        }

        else
        {
          Set-Variable -Name $Name -Value ($array | %{$x + $_}) -Scope 1
        }
      }

      "-" {Set-Variable -Name $Name -Value ($array | %{$x - $_}) -Scope 1}

      "*" {Set-Variable -Name $Name -Value ($array | %{$x * $_}) -Scope 1}

      "/" {Set-Variable -Name $Name -Value ($array | %{$x / $_}) -Scope 1}

      "%" {Set-Variable -Name $Name -Value ($array | %{$x % $_}) -Scope 1}

      default {Set-Variable -Name $Name -Value $array -Scope 1}
    }
  }
}
```
capybara + Poltergeistでjavascriptをテストするには

前回、[capybara-webkitをbundle installしてコケた時の対処法](http://qiita.com/tatsuyard/items/dc14a38169419909ff3e)という記事を書いたのですが、[Capybaraを使う際に知っておきたいこと](http://qiita.com/take/items/779747e0981355e569ad)を読むと、QTというのはなかなか曲者のようです。そこで、同じheadless driverである[Poltergeist](https://github.com/teampoltergeist/poltergeist)を採用することにします。

## 環境
* mac OSX10.9.5
* rails3.2
* ruby2.1.4
* Homebrew

## 手順
Gemfileに`gem poltergeist`と記述してbundle installします。
データベースのトランザクションの扱いも変わるので、`gem database_cleaner`も入れておきます。
続いてphantomjsを`brew install phantomjs`でインストールしましょう。


今度はセットアップです。

```spec/rails_helper.rb
require 'spec_helper'
# ...略
require 'capybara/poltergeist'

RSpec.configure do |config|

  config.include FactoryGirl::Syntax::Methods
  Capybara.javascript_driver = :poltergeist

  config.use_transactional_fixtures = false

   # database_cleaner関連のセットアップ
   require 'database_cleaner'
   config.before(:suite) do
     DatabaseCleaner.strategy = :truncation
     DatabaseCleaner.clean_with(:truncation)
   end
 
   config.before(:each) do
     DatabaseCleaner.start
   end

   config.after(:each) do
     DatabaseCleaner.clean
   end
end
```

後はscenarioに`js :true`オプションを付けるとpoltergeistが動作して
javascriptのテストを行うことが出来ます。

参考
http://qiita.com/jnchito/items/bdd80c1085fa082e7d7a#1-3
http://qiita.com/katryo/items/e33197a4fa26de42a3c4
PHPコードを.htaccessに埋め込む

「[PHPとしても実行できるRubyの書きかた](http://qiita.com/supermomonga/items/79d599b4ed8b385870b0)」にあやからせて頂きました。

# こんな感じになりました

```php:index.php
<?php
echo 'world';
```
```php:.htaccess
#<?php /*
php_value output_buffering 2
php_value auto_prepend_file .htaccess

<IfModule dummy>
*/
echo substr(ob_get_clean(), 1); // 先頭の'#'を削除
ini_set('output_buffering', 0); // 戻す

echo 'hello ';

/*
</IfModule>
# */

```


この状態で `index.php` にアクセスすると `hello world` と出力されます。

# 先頭「#」の扱いについて

この1バイトが誤魔化せず `output_buffering` に頼って、後から消すことにしました。
`substr`していますがイレギュラーが無ければ`ob_end_clean()`で捨てるだけでも大丈夫なはずです。

# \<IfModule dummy\>について

存在しないモジュール名を`<IfModule>`などに与えることで複数行コメントのように扱っています。


# 使い所

あったらいいですね。

最初の例なら `php.d` にこんな2ファイル突っ込むだけで十分ですし。

```php.ini:/etc/php.d/myhook.ini
auto_prepend_file=/etc/php.d/myhook.php
```

```php:/etc/php.d/myhook.php
<?php
echo 'hello ';
```


ちなみに元々は[前の記事](http://qiita.com/fernet/items/6c250a19381ad01388da)の続きとしてこんな、1ファイル置くだけでデバッグ用のフックか何かができないか考えていたことが発端でした。

```php
#<?php /*
php_value output_buffering 2
php_value auto_prepend_file .htaccess

php_value error_log syslog

<IfModule dummy>
*/
echo substr(ob_get_clean(), 1); // 先頭の'#'を削除
ini_set('output_buffering', 0); // 戻す

function dump() {
	$args = func_get_args();
	foreach ($args as $arg) {
		error_log(var_export($arg, true));
	}
}

/*
</IfModule>
# */
```
プログラミング入門 with Groovy

#この記事について
この記事は、[プログラミング言語Groovy](http://groovy.codehaus.org/)を使って、プログラミングを勉強していくという趣旨の入門記事のインデックスです。

なお、プログラミング言語Groovy自体をもっと詳しく知りたいという方は、Groovyのチュートリアルを公開しておりますのでそちらも合わせてどうぞ。
[Apache Groovyチュートリアル](http://koji-k.github.io/groovy-tutorial/)

プログラミング入門 with Groovyでは、以下のコンテンツを執筆し、ここにリンクしていきます。
（執筆する順番は前後します）

- [プログラミングってなに？Groovyってなに？](http://qiita.com/saba1024/items/4d10aadca0a50965b71b)
- [インストールと実行](http://qiita.com/saba1024/items/66c7154608ed52363e8f)
- [プログラムの流れとデータについて（値と変数）](http://qiita.com/saba1024/items/082d18ee68560868604a)
- プログラムの流れを変える（if文）
- プログラムを繰り返す
- データを保存する（テキストファイル）
- プログラムを分けて整理する（関数の作成）
- （それ以外は都度考えて追加していきます。）


#対象読者

1. 普通にパソコンを使って普通にインターネットなどで遊べる人
2. プログラミングはしたことがないけど、プログラミングをしてみたい人。

基本的にプログラミング初心者の方を対象とした、プログラミングの入門記事になる予定です。
が、Groovyってどんな言語なんだろう？という疑問を持つプログラマの人にもGroovyの雰囲気を掴んでもらえるような構成にしていきたいと思っています。
さくらのレンタルサーバにs3cmdを導入する

バックアップに使いたいですよね。 root 権限がなく、他のサイトで書かれているやり方ではうまくいかなかったため簡単に手順を書いてみます（ぼくは Python 歴 30 分ぐらいなので理解の整理もかねて……）。

s3cmd を git からとってきます。

```csh
% git clone https://github.com/s3tools/s3cmd.git
```

実行したところ、エラーになりました。

```csh
% ./s3cmd

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ImportError trying to import dateutil.parser.
Please install the python dateutil module:
$ sudo apt-get install python-dateutil
  or
$ sudo yum install python-dateutil
  or
$ pip install python-dateutil
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
```

python-dateutil 入れろと言われました。 root 権限がなく、また、デフォルトで pip が使えないので easy_install を使って python-dateutil を入れてみます。

まず `~/.pydistutils.cfg` を作成し、下記のように指定します。すると、 easy_install でユーザディレクトリに保存されるようになるらしいです。

```~/.pydistutils.cfg
[install]
user=1
```

次に、 easy_install します。

```csh
% easy_install python-dateutil
```

再挑戦

```csh
% ./s3cmd
ERROR: /home/.s3cfg: Operation not permitted
ERROR: Configuration file not available.
ERROR: Consider using --configure parameter to create one.
```

通りました。あとはいつもの通り .s3cfg を作るなりして使えると思います。

python-magic があると MIME タイプを判断してくれ、これがないと WARNING が出てしまうのでこちらも入れておくといいでしょう。

```csh
% easy_install python-magic
```

（おまけ）Ansible Playbook の Task をこんなかんじでつくってみました。

```yaml:s3cmd.yml
---
- copy: src=files/pydistutils.cfg dest=~/.pydistutils.cfg
- easy_install: name={{ item }}
  with_items:
    - python-dateutil
    - python-magic
- git: repo=https://github.com/s3tools/s3cmd.git dest=~/bin/repos/s3cmd
    accept_hostkey=yes
- file: src=~/bin/repos/s3cmd/s3cmd dest=~/bin/s3cmd state=link
- template: src=templates/s3cfg.j2 dest=~/.s3cfg mode=0400
```

## 参考文献

- [さくらのレンタルサーバに Python モジュールをインストール](http://emptypage.jp/notes/sakura-python.html)
SSL証明書の有効期限を確認するスクリプト

`openssl` コマンドを使うと証明書の情報が取得できるので、証明書の有効期限のチェックを行うスクリプトを書きました。

```bash
#!/bin/bash

## validate_certs - Check SSL certificate expiration date

WARN_DAYS=30
TARGETS=(
    "secure.example.com"
)

function show_enddate()
{
    echo "" | openssl s_client -connect $1:443 2> /dev/null | openssl x509 -enddate -noout | sed 's/notAfter\=//'
}

echo "SSL Certificate Expiration Checking ($(date -R))"
echo

i_now=$(date "+%Y%m%d%H%M%S")
i_warn=$(date -d "$WARN_DAYS days" "+%Y%m%d%H%M%S")
for host in ${TARGETS[@]}; do
    enddate=$(LANG=C date -d"$(show_enddate $host)")
    i_enddate=$(date -d"$enddate" "+%Y%m%d%H%M%S")
    if [ $i_now -ge $i_enddate ]; then
        echo "[SEVERE]  \`$host' already expired on $enddate"
    elif [ $i_warn -ge $i_enddate ]; then
        echo "[WARN] \`$host' will expire on $enddate"
    fi
done

echo
echo "EOF"
```

変数 `TARGETS` に監視するドメイン名を列挙しておきます。
有効期限までの日数が変数 `WARN_DAYS` よりも小さい場合、画面にそのドメインを *[WARN]* というメッセージとともに出力します。ちなみに有効期限を過ぎてしまっているドメイン名は *[SEVERE]* というメッセージになります。

このスクリプトの出力をメールで送信するように cron に登録しておくと証明書の更新忘れがなくなる、かも。
Kinect v2の利点・欠点まとめ

# 利点
- 高解像度
- 窓を撮影できる（[KinectFusion](http://qiita.com/SatoshiRobatoFujimoto/items/68da949478dd86a99905)で構築してみた）
![snapshot02.png](https://qiita-image-store.s3.amazonaws.com/0/63863/17748fab-2cdb-c6fb-42ac-d5c468cbbf60.png)
　
- 太陽光に強い（KinectFusionのSurface画像：[v1](http://qiita.com/SatoshiRobatoFujimoto/items/bddefc89456c0716b00a)上、[v2](http://qiita.com/SatoshiRobatoFujimoto/items/68da949478dd86a99905)下）
![shoji.png](https://qiita-image-store.s3.amazonaws.com/0/63863/a841a733-4357-6628-fa22-e657f96f7c4b.png)
![shoji2.png](https://qiita-image-store.s3.amazonaws.com/0/63863/d533b50a-7d1d-c8b9-ad3a-13a14f793ee3.png)
　
- 屋外でも近い物体なら撮れる？（木を撮影した）
![10409395_1530907217140699_6807977682853933655_n.png](https://qiita-image-store.s3.amazonaws.com/0/63863/d250d455-22e8-9645-bb93-402749a13bd0.png)
　
- Kinect v1と同時に使える（KinectFusionを同時にやってみた）
- 複数のプログラムを同時に起動できる
![snap.png](https://qiita-image-store.s3.amazonaws.com/0/63863/f5d35a21-f90d-e39d-b690-fbc5d410ab81.png)
　
- マルチKinectでもDepth/IRは干渉しない？（たぶん複数のPCを使ってる）

　　http://brekel.com/multikinectv2/
　　https://www.youtube.com/watch?v=v1vKrJ9JNu0

# 欠点
- 重い
- コードが太い
- バスパワーで動作できない
- SDKでは、1台のPCから複数のKinect v2が使えない？[libfreenect2](https://github.com/christiankerl/libfreenect2/issues/7)
ではできるらしい

# まとめ
- v1でできなかったことをやってみたい(特に屋外やガラス張りの場所)
- v1とv2のステレオは使えそう
- 屋外用で安いやつを開発してほしい
CoffeeScriptでサンドボックスパターンを実装する（ファイル分割対応）

オライリーの「JavaScriptパターン」で紹介されている「サンドボックスパターン」をCoffeeScriptで実装しました。

サンドボックスコンストラクタの実装:

```coffee:intro.coffee

# この例では、JSAPPという名前のコンストラクタを作成している
JSAPP = ->
  # オライリーの本に書いてあったのをCoffeeScriptにベタ移植
  args = Array::slice.call arguments
  callback = args.pop()
  modules = (args[0] && typeof args[0] == 'string') ? args : args[0]

  if !(this instanceof JSAPP)
    return new JSAPP modules, callback

  if !modules || modules == '*'
    modules = []
    for i of JSAPP.modules
      if JSAPP.modules.hasOwnProperty i
        modules.push i

  for module, i in modules
    JSAPP.modules[modules[i]] this

  devel = true
  # 全モジュールから参照できるプロパティを実装できる
  # ここでは例としてデバッグ用コンソール出力を実装
  JSAPP::devConsole = (text, obj) ->
    if devel == true
      console.log "JSAPP: #{text}"
      if obj isnt undefined
        console.log obj

  callback this

# モジュールオブジェクトの初期化
JSAPP.modules = {}
```

モジュールの実装:

```coffeescript:hoge.coffee

# サンドボックスモジュールの宣言
JSAPP.modules.hoge = (app) ->

# ここには関数とか変数とかクラスを app にぶら下げて実装する (隠蔽したいものはぶら下げない)
# 折角モジュール化するので、このモジュール単体で成立するようにな処理だけをまとめる
  class app.Hoge
    constructor: (param1, @param2, @options) ->
      @prop = param1 + 1

      # JSAPPコンストラクタに実装した関数を呼び出せる
      app.constructor::devConsole 'app.Hoge.constructor', @
    
    _privateMethod = ->
      app.constructor::devConsole 'app.Hoge._privateMethod'
      return @prop

    getProp: ->
      app.constructor::devConsole 'app.Hoge.getProp'
      _privateMethod.call @

  class app.Hage extends app.Hoge
    constructor: ->
      super(1, 2, {hoge: 'hageHage'})
```

```coffeescript:fuge.coffee
JSAPP.modules.fuge = (app) ->
  class app.Fuge
    # hage.coffeeと同様に実装したとする
```

実装したモジュールの実行:

```coffeescript:outro.coffee
JSAPP ['hoge', 'fuge'], (app) ->
  # 第1引数に入れたモジュールが app にぶらさがった状態になる
  hoge = new app.Hoge 3, 4, {hoge: 'HAGEhage'}
  hage = new app.Hage()
  fuge = new app.Fuge()

  console.log hoge.getProp()

```

ファイルを分割して開発し、gulpとかで結合後にビルドするようにすると、モジュール単位で編集できて非常に管理しやすくなります。(結合順番は intro.coffee, hoge.coffee, fuge.coffee, outro.coffee)
redis-cliの使い方


redis-cliの使い方についてまとまった情報がなかったので、まとめてみました。

# redis-cliの使い方
- redis serverに接続して対話的に実行

```lang:
$ redis-cli
127.0.0.1:6379> SET hoge bar
OK
```

- 引数を指定して非対話的に実行

```lang:
$ redis-cli -h localhost SET hoge bar
OK
```

- ファイルから読み込んで実行

```lang:
$ echo "SET hoge bar" >> set.txt
$ redis-cli < set.txt
OK
```

- リダイレクトを使用して実行

```lang:
$ echo "SET hoge bar" | redis-cli
OK
```

- 1行で複数のコマンドを実行

```lang:
$ echo -e "SET hoge bar \r\n GET hoge" | redis-cli
OK
"bar"
```

# redis-cliのオプション

|オプション|説明|備考|
|:-------------|:---------|:--------|
|-h \<hostname>| ホスト名を指定|デフォルトは127.0.0.1|
|-p \<port>    | ポート番号を指定|デフォルトは6379|
|-s \<socket>  | サーバのソケットを指定|これが設定されると-hと-pの設定を無視します|
|-a \<password>|パスワードを指定|requireが設定されている時、毎回「AUTHコマンド」を実行する必要がなくなります|
|-r \<repeat>|繰り返し実行|指定したコマンドを\<repeat>回繰り返します|
|-i \<interval>|繰り返し間隔|-rオプションが指定されている時、\<interval>秒の間隔で実行します|
|-n \<db>|データベースの番号|SELECTコマンドで指定するやつです|
|-x|最後の引数を標準入力から読み込む|「SETコマンドのVAUEの部分だけを標準入力から指定する」みたいなことが可能|
|-d <delimiter>|--rawを指定した時の、区切り文字を指定|'\r\n'に代わる区切り文字を指定する|
|-c|クラスタモードで接続|-ASKや-MOVEDのリダイレクトを許可します|
|--raw|マルチバイト対応を許可|--rawを指定するとマルチバイト文字がちゃんと返ってきます|
|--no-raw|マルチバイト対応を許可しない|-|
|--csv|出力をCSV形式にする|-|
|--stat|redis serverの稼働情報を表示し続ける|総キー数、総メモリ数、クライアント数などを表示し続ける。稼働監視用オプション|
|--latency|レイテンシ計測モードを使用|レイテンシを計測できる(Ctl-Cで止めるまで計測し続ける)|
|--latency-history|レイテンシ計測結果を15秒間隔で表示|--latencyと似ているが、15秒ごとにレイテンシの経過を見れる点が異なる(Ctl-Cで止めるまで計測し続ける)|
|--slave|マスタサーバから来たコマンドを表示し続ける|スレーブサーバにはマスタサーバからどんなコマンドが来ているだろう？レプリケーションはちゃんと動いている？というときに使えます。|
|--rdb \<filename>|RDBファイルを取得|接続サーバのRDBファイルを取得。リモートサーバに対してのダンプコマンドと思っていいかも？|
|--pipe|pipeモードを使用|大量にデータを登録する時とかに便利です|
|--pipe-timeout \<n>|pipeモードのタイムアウトを指定|単位は秒|
|--bigkeys|格納しているデータの中で一番サイズの大きいVALUEを持つKEYをデータ型毎に出力|左記のほか、データ型毎のキー数とかも出ます、|
|--scan|カーソルを使って全部取得|scanで全件取得するときに便利。たぶん--partternとの併用が主な使い方|
|--pattern \<pat>|--scanで取得した結果を絞り込むことができる|SCAN … MATCH <pattern>の<pattern>の部分を指定石ていることと同じ。「KEY全件から正規表現で絞り込む」みたいなことが可能|
|--intrinsic-latency \<sec>|systemに備わっているレイテンシを計測|指定した秒数間起動する|
|--eval \<file>|Luaスクリプトを使ってEVALコマンドを送る|-|
|--help|ヘルプを表示|-|
|--version|バージョンを表示|-|

#使用例
使い方がパッとわかりづらいものの実行例

- データ準備
`key:0`から`key:1000`までのサンプルデータを生成
`$ redis-cli debug populate 1000`


- その１ : 区切り文字を「@」にして、mget

```lang:
$ redis-cli -d "@" --raw mget key:100 key:200
value:100@value:200
```

- その２ : 全キーからキーの下２文字が「00」であるものを検索

```lang:
$ redis-cli --scan --pattern "*00"
key:300
key:200
key:800
key:900
key:400
key:500
key:600
key:700
key:100
```

- その3 : その2リクエストを２秒間隔で３回実行する

```lang:
$ redis-cli -r 3 -i 2 get key:100
"value:100"
"value:100"
"value:100"
```
Qiita内で圏論に言及するエントリのまとめ (4)

[前回](http://qiita.com/sct/items/f64c57b544ed28036a4f)に続き、[qiita内の圏論に関するエントリ](http://qiita.com/search?q=%E5%9C%8F+%E8%AB%96&sort=created&utf8=%E2%9C%93)の真偽を検証します。

## [モナドを使って副作用のある関数を純粋な関数にする](http://qiita.com/SatoYu1ro/items/fed3d6d26cf0df612d59)

正しいことも書いてありますが、話の核の部分は完全に誤っているエントリです。

> ある圏の中の関数を合成した関数は、同じ圏の中にないといけないのです。

正しい主張です。

> 圏論で言うところの直和です。
> でも例外には直和を使えと書いてあります。

文章中の定義を直和と言っていいかは微妙ですが、通常、例外を数式で扱うには直和を用います。

> でも大丈夫、この大変な変換をしてくれるのがモナドなのです！

クライスリ圏における射の合成のことを言っているのであれば、正しい主張です。

> 自己関手Tと2つの自然変換η、μの組です。

正しい主張です。

> 関手というのは圏を別の圏に変換する変換で

正しい主張です。

> 自然変換は関手を別の関手に変換する変換です。
> 自己関手TはCをCへ変換するものです。
> ηは1CをTに変換する自然変換です。
> μはT2をTに変換する自然変換です。

「変換」を使うべきかは議論がありますが、正しいと言っても差し支えはないと考えます。

> 2つの自然変換はただの自然変換ではなく、以下の可換図式を満たさないといけません。

wikipediaの引用ですが、正しい記述です。

> T(i)=Right(i)
> T(s)=Left(s)

誤っています。自己関手Tの対象関数を定義している式と予想されますが、Right i、Left sはいずれも対象ではありません。Either、もしくはeが対象と考えられます。

> T(fis)(x)= ...
> T(fsi)(x)= ...

誤っています。自己関手Tの射関数を定義している式と予想されますが、この定義では関手になりません。$T(\rm{length} \circ \rm{em})(\rm{"XYZ"}) \ne (T(\rm{length}) \circ T(\rm{em}))(\rm{"XYZ"})$となり、結合則が満たされません。

> ηは1CをTに変換する自然変換で、μはT2をTに変換する自然変換です。
1Cというのは、自分を自分にそのまま対応させる関手で、int型をint型に、fiiをfiiに、というように、何もしない変換です。

正しい主張です。

> これが可換図式を満たすことを確認します。
> ...
> というわけで、このTとμとηの組は本当にモナドです。
> ...
> なんにせよ、モナドのおかげで不純な関数を消して、純粋な関数だけからなる世界を作ることができました。

誤っています。Tが関手ではないため、この議論は成立しません。

## 今回の訳注

例外をつけくわえるモナドは、 $T X = E + X$として知られています。 $+$ がいわゆるEither型構築子です。