OmniAICreator/Qiita-1.07M huggingface dataset:
Chocolatey packages.config をリポジトリ管理下に置いてみた

**Chocolatey** ネタです。

# 役立つ場面
Windowsのクリーンインストール発生時

# まずはGitHubでリポジトリを作成
[GitHub](https://github.com/) でリポジトリを作成します。

# packages.configを生成
XMLで以下のようなpackages.configを作り、コミットします。

```xml
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="apackage" />
  <package id="anotherPackage" version="1.1" />
  <package id="chocolateytestpackage" version="0.1" source="somelocation" />
</packages>
```

# インストール用のバッチファイルを生成
いちいちコマンドを叩くのが面倒なのでバッチファイルを作ります。
以下の3つのバッチファイルを作りました。

参考URL: https://gist.github.com/ko2ic/dba4ddd35a653080c913
ko2nicさんに＼敬礼／

- chocolatey-install-all.bat  
-> Chocolateyインストールからパッケージインストールまで全てを行える
- chocolatey-install-only.bat  
-> Chocolateyインストールのみ
- chocolatey-install-packages-only.bat  
-> パッケージインストールのみ

```bat:chocolatey-install-all.bat
powershell Set-ExecutionPolicy RemoteSigned
powershell iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
powershell Set-ExecutionPolicy Restricted
 
set PATH=%PATH%;C:\Chocolatey\bin;
 
call cinst .\packages.config
 
pause
```

```bat:chocolatey-install-only.bat
powershell Set-ExecutionPolicy RemoteSigned
powershell iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
powershell Set-ExecutionPolicy Restricted
 
pause
```

```bat:chocolatey-install-packages-only.bat
cd /d %~dp0
 
set PATH=%PATH%;C:\Chocolatey\bin;
 
call cinst .\packages.config
 
pause
```

あとは用途に応じてバッチファイルを実行するだけです。
但し、バッチファイルの実行には**管理者権限**が必要なため、**ショートカット経由で実行**します。

# パッケージを追加する場合
packages.config に追記して、コミットします。

追加のための実行の際はコマンドで実行ではなく、packages.config を編集した後に chocolatey-install-packages-only.bat を実行すれば、編集漏れがなく Good だと思われます。

# 今回作ったリポジトリを見てみたい方
そんな物好きな方は以下へアクセスしてみてください。
https://github.com/OHAS00/chocolatey

# Chocolatey について興味が湧いた方へ
何はともあれ、以下のページにアクセスしてみてください。
https://chocolatey.org/

また、詳しい仕様を確認したい場合は本家 chocolatey リポジトリの Wiki を見てみると良いと思います。
https://github.com/chocolatey/chocolatey/wiki
CircleCIで別リポジトリのmigrationを実行する

Railsアプリケーションで、アプリ本体と管理画面を別リポジトリで管理しつつmigrationは共通（同じDBを参照する）という形で開発しているのだけど、管理画面側にmigrationが存在しないため、[CircleCI](https://circleci.com/)のテストが実行できなくて困っていた。
migrationだけをsubmodule化する手もあるが、それもめんどくさいので、CircleCIの設定で何とかしたい。

CircleCIはcircle.ymlというファイルに記述することでビルド時に任意のコマンドを実行でき、migrationもこのファイルから実行している。
そこで、アプリ側のリポジトリをtmp以下にcloneしてmigrationだけコピーするという原始的な手段をとってみた。
(Thanks to [Kakakakakku](http://qiita.com/Kakakakakku))

まず、github上で[トークンを生成](https://github.com/settings/applications)する。
上記のページからGenerate new tokenを選べばOK。名前は適当に。

そしてCircleCIのProject Settings -> Environment variablesで環境変数を追加する。
NameはGITHUB_TOKENとして、Valueに生成されたトークンを入れる。

これでテスト内部からトークンが参照できるようになるので、circle.ymlを以下のように設定すれば完了。

```yaml:circle.yml
database:
  override:
    - mv config/circle/database.yml config/database.yml
    - git clone "https://${GITHUB_TOKEN}:x-oauth-basic@github.com/nysalor/hoge.git" tmp/hoge
    - cp tmp/hoge/db/migrate/*.rb db/migrate
    - bundle exec rake db:create db:migrate db:seed --trace
```

もちろんcircle.ymlに直接トークンを書いてしまっても良いのだけれど、うっかり公開すると死ぬので環境変数経由が良いと思う。
JSFのSelectItemを使って選択肢ラベルを変更する。

http://stackoverflow.com/tags/selectonemenu/info
http://stackoverflow.com/questions/10655349/jsf-2-fselectitems-with-map-does-not-display-itemlabel

上記を参考にjavax.faces.model.SelectItemを使って、
ラベルを「ラベル:値」とした選択肢を実装しようとしたがうまくいかなった。
itemLabel属性に設定したのが有効にならず、単純にcountry.labelが表示されるだけとなってしまう。
なんでやーー

実装した内容

```html:country.xhtml
<h:selectOneMenu value="#{bean.countryCode}">
     <f:selectItems value="#{bean.countries}" var="country" 
            itemValue="#{country.value}" itemLabel="#{country.label + ':' + country.value}" />
 </h:selectOneMenu>
```

```java:Country.java
import javax.faces.model.SelectItem;

private String countryCode;
private List<SelectItem> countries;


@PostConstruct
public void init() {
    countries = service.getCountries();
}
```

結論としては、SelectItemではなく自分で定義したBeanを使えばitemLabelが有効になった。

ソースは確認していないが、SelectItemを使うとその情報だけで表示しようとするみたい。
SelectItem使ってもitemLabelでカスタマイズしたらそれが有効になってほしいのに。。。


```java:Country.java

import javax.faces.model.SelectItem;

private String countryCode;
private List<Country> countries;


@PostConstruct
public void init() {
    countries = service.getCountries();
}
```
SAS University edition設定方法

(この記事は[自分のblog記事](http://puppet-life.com/post-246/)とクロスポストです)

#SAS University edition設定方法
##1.準備
SAS University Editionを動かすためには「VMware」もしくは「VirtualBox」が必要です。
今回は「VirtualBox」環境で行います。
SAS社とは関係ないツールなので、googleで検索をかけて別途インストールするのが普通ですが、SAS University Editionの公式ページにリンクがはってあるのでそこからダウンロードしましょう。
[SAS University Editionのダウンロードサイトへ](http://sas.com/en_us/software/university-edition/download-software.html)
![](http://puppet-life.com/wp-content/uploads/2015/04/WS000002.jpg)

Windows版のVirtualBoxのリンクをクリックしてVirtualBox公式ダウンロードサイトからVirsualBoxをダウンロードします。
![](http://puppet-life.com/wp-content/uploads/2015/04/WS000001.jpg)

  
VirtualBoxのインストールが終わったら、再びSAS University Ediotion公式ダウンロードサイトへ戻ります。ページを下げていくとSAS University Editionのイメージディスクのダウンロードのリンクがあります。「VMware」版、「VirsualBox」版とあるのでVirtualBox版のイメージディスクをダウンロードします。
![](http://puppet-life.com/wp-content/uploads/2015/04/WS000004.jpg)
  
このときにSASのユーザーアカウントが必要となります。すでに取得済みの場合はID(mailアドレス)、パスワードを入力してイメージディスクをダウンロードしてください。まだアカウントを習得してない場合は習得して
ください。(ここではすでにアカウント作成済みとしてすすめていきます)
![](http://puppet-life.com/wp-content/uploads/2015/04/WS000005.jpg)
  

##1-1 SAS University Edition 設定
SAS University Edition ではSASファイルの保存場所が指定されてるので指定ファイルを作成します。
SASファイル保存したい場所に「SASUniversityEdition」という名前のフォルダを作ります。さらにそのフォルダの中に「myfolders」フォルダを作ります。 
![](http://puppet-life.com/wp-content/uploads/2015/04/WS000007.jpg)
  
  
VirtualBoxを起動します。「ファイル」から「仮想アプライアンスのインポート」を選択して、
![](http://puppet-life.com/wp-content/uploads/2015/04/WS000008.jpg)
  

先ほどダウンロードしたイメージディスクを選択します。
![](http://puppet-life.com/wp-content/uploads/2015/04/WS000009.jpg)
  
  
「起動」を押したいのをこらえて隣の「設定」をクリックします。
![](http://puppet-life.com/wp-content/uploads/2015/04/WS000010.jpg)
  
設定画面の一番下の共有フォルダータブをクリックして共有フォルダの設定をクリックします。
![](http://puppet-life.com/wp-content/uploads/2015/04/WS000011.jpg)
  
  
フォルダーのパスで、先ほど設定した「myfolders」を選択します。さらに「自動マウント」にチェックを入れます。
![](http://puppet-life.com/wp-content/uploads/2015/04/WS000012.jpg)
  
では、いよいよ「起動」をクリックします。  
アドレスが出るので覚えておきます(画像では　http://localhost:10080 の部分です)
![](http://puppet-life.com/wp-content/uploads/2015/04/WS000013.jpg)
  
  
ブラウザを開き(IE,forefox,google chromeなど)上記のアドレスをアドレスバーにを入力して移動します。
「SAS Studioを始める」をクリックして開始！(たまに左したのお知らせでバージョンアップのお知らせがくる場合があるので要確認)
![](http://puppet-life.com/wp-content/uploads/2015/04/WS0000014.png)
  
  
##1-2 おまけ
今までUnix版のSASを使用していたユーザーはinfileの指定が変わってますので注意！
まず読み込むための外部ファイルを右クリックをしてプロパティを選択します。
![](http://puppet-life.com/wp-content/uploads/2015/04/WS0000015.png)
  
  
プロパティに出てきた「場所」のパスがinfileで指定するパスになります。(つまり、今までみたいにinfile'./hoge.dat'はだめ)
![](http://puppet-life.com/wp-content/uploads/2015/04/WS0000016.png)
Swiftで編集モードのセルを選択可能にする

SwiftでもObjective-cでもテーブルのセルが編集モードになっているとセルを選択することが出来ません。

なので、それを可能にするために以下のコードを加えます。

```
        //編集中のセル選択を許可
        myTableView.allowsSelectionDuringEditing = true
```

ちなみに、選択状態かどうかの判別は以下で出来ます。

```
        if self.editing{
             println("編集モードです")
        }
```
【PHP】FuelPHPに関するメモ

## 特徴
#### <b>規約より設定</b>
#### <b>PHP5.3以上</b>
#### <b>オートローダー</b>
クラスに命名規則があり、命名規則は必ず守る必要がある。
require文／include文が不要。クラスの命名規約に従い、使われるときに必要なクラスだけ読み込む。

~~~php:hoge.php
test/model/hoge.php
/* Class フォルダ名_フォルダ名_実クラス名 */
$test = new Test_Model_Hoge;
~~~

#### <b>ORM（オブジェクトリレーショナルマッパー）</b>
オブジェクトの各データを、リレーショナルデータベースのレコードを構成する個々の項目に関連付ける。

#### <b>HMVC+ViewModel</b>
MVCモデルを採用したフレームワークでは、Model／Viewに対する複雑な処理をControllerやModelの
ソースコードに記述してしまうことがある。1ファイルごとのソースコードが肥大化しがち。
Controllerからロジックを分離するViewModelがある。

#### <b>パッケージ管理 Comporser</b>
Comporserとは
Ruby の Bundler、Node の rpm
に強く影響を受けたPHP用の依存管理ツール。
依存管理ツールで管理することで、環境の複製が用意にできる。

#### <b>DBマイグレーション</b>
DBに保存されているデータを保持したまま、テーブルの作成やカラムの変更などを行うための機能。
oil コマンド実行で生成。

#### <b>Fieldset クラス<b>
オブジェクト指向風に、フォームを作ったりそのバリデーションを扱ったりするのに利用される。
Fieldset クラスは、Form クラスと Validation クラスを利用する。
Fieldset クラスそのものは、フィールドセットとそれぞれのフィールドを組み合わせるだけで、
実際には、Form と Validation の 2 つのクラスが仕事をすることになる。
Form を HTML を書かずに validation なども含め、生成することができる。

#### <b>Restコントローラ</b>
API を簡単に構築をすることが出来る。
RESTfuelなAPIを簡単に作成するためのコントローラ。

#### <b>PHPUnit完全準拠</b>
FuelPHP は自動ユニットテストを念頭に置いて作られていて、
PHPUnit テストフレームワークを基にしたテストクラスとテストそのものが含まれている。

#### <b>CSRF対策</b>
SecurityクラスにCSRF対策に便利な関数が用意されている。

#### <b>プロファイラ</b>
プロファイラは、タブ化されたインターフェイスを提供し、
これにより以下の情報を見つけられる。

・Console.
　　デフォルトのタブ。エラー、ログ、メモリ使用量や実行タイミングに関する情報を提供する。
・Load time.
　　リクエストのロード時間。タブ内で詳細を表示する。
・Database.
　　実行されたクエリ数や実行時間および、もしサポートされていればクエリの解析。
・Memory.
　　リクエストの処理に要したメモリ使用量。
・Files.
　　読み込まれた PHP ファイルのフルパス名と、それらの容量。
・Config.
　　処理の終了時点における、設定値の内容。
・Session.
　　処理の終了時点における、セッション値の内容。
・GET.
　　$_GET 配列の内容。
・POST.
　　$_POST 配列の内容。

## 導入事例
[Fuelphp活用事例 - slideshare](http://www.slideshare.net/tsyk70725/fuel-php-18100345)
[まとめWiki : FuelPHP の利用実績](http://wiki.fuelphp1st.com/wiki/index/FuelPHP%20%E3%81%AE%E5%88%A9%E7%94%A8%E5%AE%9F%E7%B8%BE)
[FuelPHPの実績 - NAVER](http://matome.naver.jp/odai/2137934464908465701)
[FuelPHPの利用実績 - Googleグループ](https://groups.google.com/forum/#!topic/fuelphp_jp/mE9ZlWa0wWs)

## 参考(引用元)
[今、最も勢いのあるWebフレームワーク](http://www.slideshare.net/SoudaiSone/webfuel-php)
[高速で軽量なフレームワークFuelPHPを使う](http://www.buildinsider.net/web/bookphplib100/096)
RaspberryPi2用のANDROIDをBUILDしてみた（build by Mac & Vmware Fustion + ubuntu-12.04)


　Raspberry Pi2用のアンドロイドのOSイメージが見つからない。海外の方でBUILD方法を公開していたので、それを使ってビルドしてみた（ビルドに１日以上かかります）。起動することは可能だった。画面はON−LAP 1002を使用したらタッチパネルを使用することができた。正直、使用には絶えない。たぶん、RAMDISKが必要でメモリが少なくなっているのかな？？GPUがちゃんと使われてなかったりするんじゃないかなと推測中・・・。もしかして、16GBのsdhcメモリーカード遅いだけだったりして・・・。

##1. ホストOSの用意
※前提としてMacにVmwareなどの仮想化環境が入っていることとする。

###① [ubuntu 12.04](http://releases.ubuntu.com/12.04.5/ubuntu-12.04.5-desktop-amd64.iso)をダウンロードして仮想環境にセットアップする（memory:4GB HDD:128GB: Swap:2GB）。
###② karnelビルド環境を整える(ここの[サイト](http://forum.xda-developers.com/chef-central/android/tutorial-compile-lollipop-ubuntu-t2929410)に従って行う)。要約すると以下の通り。

```bash:console
$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk
$ sudo update-alternatives --config java  <--- １個しか入ってないと言われるが(ﾟεﾟ)ｷﾆｼﾅｲ!!で実行
$ sudo update-alternatives --config javac <--- １個しか入ってないと言われるが(ﾟεﾟ)ｷﾆｼﾅｲ!!で実行
$ sudo apt-get install python
$ sudo apt-get install git-core

```
・[android sdk](http://dl.google.com/android/android-sdk_r24.1.2-linux.tgz)をダウンロードしてホームディレクトリ直下にandroid-sdkというディレクトリ名で展開する（展開後SDKはアップデートする）。

・環境変数追加

```bash:~/.bashrcに追加
# Android tools
export PATH=${PATH}:~/android-sdk/tools
export PATH=${PATH}:~/android-sdk/platform-tools
export PATH=${PATH}:~/bin
```

```bash:~/.profileに追加
PATH="$HOME/android-sdk/tools:$HOME/android-sdk/platform-tools:$PATH"
```
・ツール類のインストール
libgl1-mesa-glx:i386のインストールでエラーになるが、エラー内容に従って代替え策でいれる。

```bash:console
$ sudo apt-get install git gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 \
  libgl1-mesa-dev g++-multilib mingw32 tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386  
$ sudo apt-get install libgl1-mesa-glx:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
$ sudo apt-get install g++-arm-linux-gnueabihf

```
##2. android-OSのビルド
[マニフェスト提供サイト](https://github.com/peyo-hd/local_manifests)に従って、ビルドしていく。要約すると以下の通り。

```bash:console
$ mkdir aosp
$ cd aosp
$ repo init -u https://android.googlesource.com/platform/manifest -b android-5.1.0_r3
$ cd .repo
$ git clone https://github.com/peyo-hd/local_manifests
$ repo sync
$ cd ..
$ mkdir ~/.ccache
$ export USE_CCACHE=1
$ export CCACHE_DIR=~/.ccache
$ cd kernel/rpi
$ ARCH=arm scripts/kconfig/merge_config.sh arch/arm/configs/bcm2709_defconfig android/configs/android-base.cfg android/configs/android-recommended.cfg
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make zImage
$ cd ../..
$ source build/envsetup.sh
$ lunch rpi2-eng
$ make
```

##3. SDカードへのコピー
新し目のMACBOOK PROだとVMWARE上でカードスロットを認識してくれない。なので、仮想DISKを割り当ててイメージを作成する。
Zabbixサーバ、プロキシを入れたら動かなかったときのメモ


動作環境

* MySQL 5.6.19
* Zabbixサーバ or プロキシ 2.0.12
* Postfix 2.6.6

EC2インスタンスにZabbixプロキシをソースからインストールし起動したらなぜかプロセスが立ち上がらなくてログを見たところ、次のようなエラーログが出てました。

````/var/log/zabbix/zabbix_proxy.log
 26489:20140716:165749.623 Starting Zabbix Proxy (active) [platform-zabbix_proxy]. Zabbix 2.0.12 (revision 45390).
 26489:20140716:165749.623 **** Enabled features ****
 26489:20140716:165749.623 SNMP monitoring:        NO
 26489:20140716:165749.623 IPMI monitoring:        NO
 26489:20140716:165749.623 WEB monitoring:        YES
 26489:20140716:165749.623 ODBC:                   NO
 26489:20140716:165749.623 SSH2 support:           NO
 26489:20140716:165749.623 IPv6 support:           NO
 26489:20140716:165749.623 **************************
/usr/local/sbin/zabbix_proxy: relocation error: /usr/local/sbin/zabbix_proxy: symbol mysql_init, version libmysqlclient_18 not defined in file libmysqlclient.so.18 with link time reference
````

`libmysqlclinet.so`の読み込みができていないっぽい。

読み込んでいる共有ライブラリを調べたらMySQLをインストールしたパスと異なっていました。
インストールしたMySQLの共有ライブラリは`/var/lib64`直下にありました。

````bash
$ ldd /usr/local/sbin/zabbix_proxy | grep libmysqlclient
        libmysqlclient.so.18 => /usr/lib64/mysql/libmysqlclient.so.18 (0x00007f8dffec7000)
````

インストールされているパッケージを調べると`mysql55-lib.x86_64`という入れた覚えがないものが入っていました。

````bash
$ yum list installed | grep -i mysql
MySQL-client.x86_64            5.6.19-1.el6                 @/MySQL-client-5.6.19-1.el6.x86_64
MySQL-devel.x86_64             5.6.19-1.el6                 @/MySQL-devel-5.6.19-1.el6.x86_64
MySQL-embedded.x86_64          5.6.19-1.el6                 @/MySQL-embedded-5.6.19-1.el6.x86_64
MySQL-server.x86_64            5.6.19-1.el6                 @/MySQL-server-5.6.19-1.el6.x86_64
MySQL-shared.x86_64            5.6.19-1.el6                 @/MySQL-shared-5.6.19-1.el6.x86_64
MySQL-shared-compat.x86_64     5.6.19-1.el6                 @/MySQL-shared-compat-5.6.19-1.el6.x86_64
MySQL-test.x86_64              5.6.19-1.el6                 @/MySQL-test-5.6.19-1.el6.x86_64
mysql55-libs.x86_64            5.5.38-1.0.amzn1             @amzn-updates
````

どうやらPostfixをyumでインストールしたときに一緒に入ってきたみたいで、このままでは削除できません。

````bash
$ sudo rpm -e mysql55-libs.x86_64
エラー: 依存性の欠如:
        libmysqlclient.so.18(libmysqlclient_16)(64bit) は (インストール済み)postfix-2:2.6.6-2.14.amzn1.x86_64 に必要とされています

$ ldd /usr/sbin/postfix | grep libmysqlclient
        libmysqlclient.so.18 => /usr/lib64/mysql/libmysqlclient.so.18 (0x00007fe9f4641000)
````

`/etc/ld.so.conf.d/mysql55-x86_64.conf`のパスを`/usr/lib64`に変更しようとしましたが、今度はPostfixが動かなくなってしまうため、とても困りました。  
苦し紛れの対応として、Zabbixプロキシの起動スクリプト(`/etc/init.d/zabbix_proxy`)で共有ライブラリのパスを変更することで対処しました。

````/etc/init.d/zabbix_proxy
ZABBIX_BIN="/usr/local/sbin/zabbix_proxy"
# 追加
LD_LIBRARY_PATH=/usr/lib64
export LD_LIBRARY_PATH
````

これでZabbixプロキシを再起動するとちゃんと動きました。
今回はZabbixプロキシでしたが、Zabbixサーバも同じだと思います。
PCP（Performance Co-Pilot）クライアンとのVectorをインストール。

#概要
Netflixという会社がなんかサーバのパフォーマンスを確認するツール（PCP）のクライアントであるVectorというツールをオープンソース化したらしい。
PCPというツールがサーバ上の情報を集めて、Vectorがその情報を綺麗に可視化する、というイメージのよう。

[Introducing Vector: Netflix's On-Host Performance Monitoring Tool](http://techblog.netflix.com/2015/04/introducing-vector-netflixs-on-host.html)

インストール方法などは英語だけどそこまで大変なことは書いていないので、素直にインストールできた。

#インストール
##サーバサイド
###PCPのインストール

まず、パフォーマンスを収集したいサーバ上でPCP（Performance Co-Pilot）をインストールする。
ただし、Vector3.10以降は、各Linuxディストリビューションで利用されている標準的なリポジトリからインストールするPCPだとちょっとダメよ、とのことで、ソースからインストールする必要がある。

インストール作業はrootユーザで行う。

[Performance Co-Pilot](http://pcp.io/index.html)
[Building from source](http://pcp.io/docs/installation.html#src)

なお、私の環境では、以下のパッケージ3つを追加でインストールしないとコンパイルできなかった。

```console
yum install flex
yum install bison
yum install gcc-c++

-- web apiのために必要
yum install libmicrohttpd
yum install libmicrohttpd-devel
```

また、`make install`でディレクトリのユーザ名とグループ名に`pcp`を付与しているっぽいので、コレを事前に作成しておく。
（多分ログインさせる必要はないだろうからnologinでホームディレクトリ無しとして作成。）

```console
groupadd pcp
adduser -s /sbin/nologin -g pcp -M pcp

```


適当なディレクトリ（例えば/usr/local/src）に移動して以下のコマンドを入力し、インストールする。

```console
$ git clone git://git.pcp.io/pcp
$ cd pcp
$ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-webapi
$ make
# make install 
```

上記のインストールが完了したら、以下のコマンドを実行してPCPを起動する。
pmwebdがconfigureで指定した`--withwe-api`でインストールされる部分。

```
/etc/init.d/pcp start
/etc/init.d/pmwebd start
```


##クライアントサイド
### node.jsのインストール
node.jsは実は触ったことがないけど、nvmというツールで簡単にnode.jsの各バージョンをインストール、切り替えることが出来るらしい。Groovyで言うところのgvmっぽい。

nvmのインストールはコチラを参考にした。
[いまアツいJavaScript！ゼロから始めるNode.js入門〜5分で環境構築編〜](http://liginc.co.jp/web/programming/node-js/85318)

```
kkuwana% git clone git://github.com/creationix/nvm.git ~/.nvm
kkuwana% source ~/.nvm/nvm.sh 

```

これで`nvm ls-remote`と実行すれば、インストール可能なnode.jsの一覧が表示される。
今回は最新版っぽいv0.12.2をインストール

```
kkuwana% nvm install 0.12.2 
```

何もエラーが出ていなければインストールされているはず。
以下のコマンドでバージョンを確認してみる。

```
kkuwana% node -v
v0.12.2
```

ちゃんとインストールされているっぽい。
このインストールしたバージョンをデフォルトに設定する。

```
kkuwana% nvm alias default v0.12.2
default -> v0.12.2
```

私はzshを使っているので、以下の行を$HOME/.zshrcの末尾に追記する。

```
[[ -s "/home/k-kuwana/.nvm/nvm.sh" ]] && source "/home/k-kuwana/.nvm/nvm.sh"
```

###bowerのインストール
凄く簡単。
以下のコマンドを実行するだけ。

```
npm install -g bower
```

###gulpのインストール
例のごとく簡単。
以下のコマンドを実行するだけ。

```
npm install -g gulp
```

###Vectorのインストール
やっと本題。
適当なディレクトリにVectorのソースをcloneして、先ほどインストールしたbowerを使って必要なライブラリをダウンロードさせる。

```
git clone https://github.com/Netflix/vector.git
cd vector
bower install
```

続いていよいよ実行。

```
npm install
gulp
```
これで、デフォルトだとlocalhost:8080にアクセスすればOK.
後は、最初にPCPをインストールしたサーバのドメインを入力すれば完了。

#問題点
現時点で、どこからでもPCPにアクセスできる。
何とかしてアクセス元を制御する必要がある。

#参考
https://github.com/Netflix/vector
http://pcp.io/index.html
http://www.pcp.io/man/man1/pmwebd.1.html
[いまアツいJavaScript！ゼロから始めるNode.js入門〜5分で環境構築編〜](http://liginc.co.jp/web/programming/node-js/85318)
Google Chromeでユーザープロフィールデータが壊れたとき

# 症状
以下のウィンドウがchrome起動時にポップアップする
![chrome_error.png](https://qiita-image-store.s3.amazonaws.com/0/68673/63a642a9-9dae-fb54-20bf-d74ed08043f0.png)

毎回ポップアップが３つほど出てきて、毎回ログインが必要になる状況

# 対策と確認
OS別に以下に記載されている
[Google Chrome Profile Could Not Be Opened Correctly Error](http://www.fourleaftechnology.com/index.php/General/google-chrome-profile-could-not-be-opened-correctly-error.html)

Linuxでは

> 1.Quit Google Chrome.
2.Open a shell.
3.Change directory (cd) to ~/.config/google-chrome/Default
4.Delete the file named “Web Data”:  rm -rf Web\ Data;
5.Start Google Chrome and the error should be gone.
  

> 1.Chromeを閉じる
2.シェルを開く
3.作業ディレクトリを次のように変える ~/.config/google-chrome/Default
4."Web Data"というファイルを削除する （コマンド例）rm -rf Web\ Data;
5.Chromeを起動してエラーがなくなっているのを確認する

とある。実際に試してみたところChromeが起動しなくなってしまった。

Chromiumに乗り換えることで今のところは問題解決（？）
実行中の関数・メソッド名を取得したい

[inspect]:https://docs.python.org/ja/3/library/inspect.html
[PEP8]:https://peps.python.org/pep-0008/


:::note
この記事は 2015 年 (古いッ！) に書いたのですが、定期的に見られている方が多いようなので、正しいやり方 ([inspect] module) を追記しました。
:::

# 2024年 修正版

素直に [inspect] module を使いましょう〜笑

https://docs.python.org/ja/3/library/inspect.html

次のコードで、呼び出し元のフレームコードの定義名 (※関数中で呼べば「関数名」) を取得できます。

```python
import inspect
inspect.currentframe().f_code.co_name
```

実際に関数 `example()` の中で呼んでみた例。 (python console)

```python
>>> import inspect

>>> def example():
...     print(inspect.currentframe().f_code.co_name)

>>> example()

example
```

# 元の記事 (2015, Python2)

:::note
* 2015年に書いてるので、Python2想定です
* [PEP8] で定義されてるのですが、アンダーバー `_` から始まる関数は、内部向け (他言語で言うところの private or system internal) です。本来直接呼び出すのは NG なので **黒魔術** と称しています...笑
:::

毎回忘れるので、メモ。

```python
sys._getframe().f_code.co_name
```

簡単な関数を書いて試してみる。

```python
>>> def printFuncName():
...     print sys._getframe().f_code.co_name
... 
>>> printFuncName()

printFuncName
```

自分はこういう場面でよく使います。

```python
from abc import abstractmethod

class SuperClass(object):

    @abstractmethod
    def implementMe():
        raise NotImplementedError( sys._getframe().f_code.co_name )
```
Inno Setup で EXE の起動を確認する


# 必要なプログラム
* [processviewer](https://github.com/lextm/processviewer)

# スクリプト
```
[Files]
Source: "processviewer.exe"; Flags: dontcopy

[Code]
function IsProcessRunning(ProceeeName: String): Boolean;
var
  ResultCode: Integer;
begin  
  ExtractTemporaryFile('processviewer.exe');
  if Exec(ExpandConstant('{tmp}\processviewer.exe'), ProceeeName, '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then
  begin
    Result := ResultCode > 0;
    Exit;    
  end;  
  MsgBox('Failed to check process', mbError, MB_OK);
end;
```
railsの日本語化 deviseの日本語化

#Railsの日本語対応


以下を参考に日本語化する。
Railsで日本語化対応にする方法
http://qiita.com/kusu_tweet/items/b534c808ac1ee0382f05

#deviseの日本語化　
github
https://gist.github.com/yhara/606476
から
devise.ja.ymlをダウンロードし、/config/localesに入れる。

追記:
以下のURL内のdevise.ja.ymlのほうが良かった。
http://qiita.com/MasatoYoshioka@github/items/8d910e793e7c485403bb

#deviseのエラーメッセージのカスタマイズ

railsでdeviseプラグイン使用時、エラーメッセージを日本語化する
http://gaku3601.hatenablog.com/entry/2014/10/04/185947
を参考にして

```rb
taken: "は既に使用されています。"
blank: "が入力されていません。"
too_short: "は%{count}文字以上に設定して下さい。"
too_long: "は%{count}文字以下に設定して下さい。"
invalid: "は有効でありません。"
confirmation: "が内容とあっていません。"
```

をdevise.ja.ymlの下部に加える

#fields_for周りの日本語化

ここは必要に応じて。

下記のような記述をja.ymlの下部に入れる。
userの部分はテーブル、name以下の部分はフィールドに該当する。
activerecordのつけ忘れに注意。

```rb
ja:
  activerecord:
    attributes:
      user:
        name: 名前
        password: パスワード
        password_confirmation: パスワード確認
        email: メールアドレス
```

#日本語化を反映させる

下記を追記。
（これ忘れると日本語されないので念のため）

```rb:config/application.rb
# config.i18n.default_locale = :de のコメントアウトがあるのでこれを利用すればよい
config.i18n.default_locale = :ja
```
[play2]routesにcontrollerを利用する際の話


https://www.playframework.com/documentation/2.1.0/Highlights
に書かれていることを掻い摘んで記述すると

#####routesファイルに`@`から始まる記述がある場合、それは`Global::getControllerInstance`で処理される

例えば、

```
GET     /                  @controllers.Application.index()
```

とある場合、playは`getControllerInstance ` を呼び出し、`controllers.Application`のインスタンスを返す。何も設定していなければデフォルトコンストラクタが呼び出される。

Google Guice等を使うときには、getControllerInstanceを上書きするということですな。
古いAipoをインストールする時に注意すること

当方で遭遇した問題について記載。古いと言っても7.0.1ですのでこれより前の場合は他の原因の場合もあるかもしれません。
今回はgccとpostgresqlが特定のバージョンだとうまくビルドされていなかったのでgccのバージョンを下げてビルドしました。

#原因
gcc 4.8でpostgresqlの8.4系以前を-O2とかでビルドしようとすると問題が起きる。
[参考](http://stackoverflow.com/questions/25583549/initdb-initializing-pg-authid-fatal-wrong-number-of-index-expressions)
以下では、参考URLには-O1にすればいいと書いてあるが書き換え範囲が不明だったので古いgccをインストールする方向で対処している。

#対処法
1. 下記等で古めのgccをインストール
`yum install gcc44`

2. /usr/local/aipo/bin/utf8/installer.sh中の
`CC='gcc -m64'` → `CC='gcc44 -m64'`

3. 後は普通にインストール
`cd /usr/local/aipo/bin; sh installer.sh`


#最後に
以上で完了ですが、若干7.0.1のinstaller.shにはバグっぽいものがあるので
(localtime置き換えの辺り）気になる方はそこらへんを手動で直してみてください。
FuelPHPのプロジェクトをgitで管理する

FuelPHPのプロジェクトをgitで管理する方法。

※ 2015/04/09 現在、https://github.com/fuel/fuel で設定されているFuelPHPのバージョンは1.7.2です。このバージョンでしか確認していません。


管理するポリシーは以下のとおり。

- プロジェクトに関するファイルはgitで
- FuelPHPの本体は composer で

# 設定

| 項目 | 設定値 | 
| --- | --- |
| プロジェクトを管理するgitリモートレポジトリ | http://example.com/repo.git |
| プロジェクト名 | hoge |
| デプロイ先のpath | /path/to/deploy |

# プロジェクト開始時

```
# FuelPHPのディレクトリ構造などのテンプレートをダウンロードする
$ git clone --recursive git://github.com/fuel/fuel.git hoge 

# git情報を削除する
$ rm -rf hoge/.git

# FuelPHP本体設定のupdate
$ cd hoge
$ php composer.phar self-update

# 新しくgitレポジトリとして管理を始める
$ git init
$ git add -A
$ git cm -m "init"

# リモートリポジトリの追加
$ git remote add origin http://example.com/repo.git

# FuelPHP本体のダウンロード
$ php composer.phar update

```

※ composerが github-oauthのアクセストークンを聞いてくるので、あらかじめ保存しておくと便利。
 ```  php composer.phar config -g github-oauth.github.com TOKEN ``` で、~/.composer/auth.json に保存される。

# デプロイ時 (別環境での開発時)

```
# プロジェクトファイルのダウンロード
$ git clone http://example.com/repo.git /path/to/deploy

# FuelPHP本体のダウンロード
$ cd /path/to/deploy
$ php composer.phar install

# (DBの設定)

# データベースのマイグレーション
$ cd /path/to/deplay
$ oil r migrate:current
```


# Appendix

上記の手順のテスト方法と確認項目

## 手順
1. /path/to/hoge に、上記の「プロジェクト開始時」でプロジェクトを作成
2. oil コマンドで controller test を追加
3. コミット
4. origin にpush
5. /path/to/foo に、上記の「デプロイ時」の手順を実行
6. /path/to/foo/public_html/ を DocumentRoot に設定

## 確認項目
1. トップページ(Fuelのwelcomeページ)が表示されること
2. testコントローラーのindexページが表示されること
Xcode6.3で、iOS8.3の端末がIneligible Devicesとなる現象を解決する

以下の環境で実行しようとすると、端末が”Ineligible Devices”となり、実行できなかった。

【環境】
Yosemite 10.10.1、Xcode6.3、 iPhone6、iOS8.3

以下の方法で実行しました。

メニューのProduct->Destination->"端末"から選択。

取り急ぎ。

4/10 追記
ipod(5th)をios8.3 にアップグレードしてから同様の現象発生
OS X v10.9 Mavericks, Xcode 6.2 ipod(5th) ios8.3 問題発生
OS X v10.9 Mavericks, Xcode 6.2 ipod(5th) ios8.2 問題なし(アップグレード前)
OS X v10.9 Mavericks, Xcode 6.2 ipod(4th) ios6.1.6 問題なし
OS X v10.9 Mavericks, Xcode 6.2 iphone5s ios7.1.2 問題なし

今のところの結論

★★★iOS8.3で発生する★★★


P.S uto様ありがとうございました。
ささっとSlackのアイコンを大きく表示したい


最近人気のSlackですが、絵文字が小さくて寂しい思いをしています。
Chrome若しくはFirefoxでSlackを利用する場合のみですが、
Stylishという拡張機能(アドオン)を利用することによりSlackのアイコンを大きくすることができます。
(Chromeでの手順となりますが多分Firefoxでも大体同じ手順だと思います。)

#Stylishのインストール
* Chromeの場合
https://chrome.google.com/webstore/detail/stylish/fjnbnpbmkenffdnngjfgmeleoegfcffe?hl=ja 


* FireFoxの場合
https://addons.mozilla.org/ja/firefox/addon/stylish/


#ブラウザでSlackのlogin画面を表示する

表示した状態でChromeの場合はSlylishのプラグインアイコンを押して「インストール済みのスタイルを管理 」のリンクを押す。

![スクリーンショット 2015-04-09 16.41.26.png](https://qiita-image-store.s3.amazonaws.com/2020/16777/95c25e58-927a-0b75-66e1-685c5a1dc1ea.png "スクリーンショット 2015-04-09 16.41.26.png")

<br><br>
「新しいスタイルを作成」を選択します。
![スクリーンショット 2015-04-09 16.48.35.png](https://qiita-image-store.s3.amazonaws.com/2020/16777/86a2a603-1f55-99f9-fe3a-b208353d07b1.png "スクリーンショット 2015-04-09 16.48.35.png")

<br><br>
適当に名前を入力してコードに以下を入力し、保存します。font-sizeに関してはお好みでどうぞ。


		.message span.emoji-sizer {
    		font-size: 100px;
		}
![スクリーンショット 2015-04-09 16.51.17.png](https://qiita-image-store.s3.amazonaws.com/2020/16777/6d504a7a-cfcd-e0c0-4143-05c307b6bdc5.png "スクリーンショット 2015-04-09 16.51.17.png")


#Slackにloginして絵文字が大きくなっていることを確認

絵文字が大きくなっていれば無事完了です。

![スクリーンショット 2015-04-09 16.49.38.png](https://qiita-image-store.s3.amazonaws.com/2020/16777/e8809c66-fd9c-a8ef-7e15-3b74240a0f12.png "スクリーンショット 2015-04-09 16.49.38.png")
Xcode6.3アップデートすると必ずやってくるSwift1.2のエラー対処のいくつか

本日Xcode6.3がリリースされ、Swiftが1.2になりました。
Xcode6.2で動作していたものが、大量のエラーが吐かれたので焦りましたが、何とかエラーを回復させることができました。
自分が行ったことの大まかなまとめです。
（ただし、全員が以下のようにやれば上手くいくというものではありませんので）

#1 Convert to Lastest Swift Syntax

まずはXcode6.3が用意してくれているコンバーターでいくつかのエラーを修正しましょう。

```
Edit -> Convert -> Convert to Lastest Swift Syntax
```

でひらけます。
これでas!などの細かい文法エラーなどを解消できました。

ただ、これだけでは私のダメコードは解消しなかったので、下記を進めます。

#2 override init

UIViewを継承したカスタマイズUIViewのinitでエラーが発生していました。

```swift
    override init() { // <- error!!
        super.init()
        //something to do
    }
```

> Initializer does not override a designated initializer from its superclass

以下のように変更

```swift
    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    
    convenience init(){
        self.init(frame: CGRectMake(0, 0, 100, 100))
        //something to do
    }
```

#3 宣言だけしたlet

```swift
    let btn : UIButton!
    override init() { // <- error!!
        super.init()
        self.btn = UIButton(frame: CGRectMake(0,0,100,30))
    }
```

ここでは省略していますが、CGRectMakeを計算して出したかったので、
宣言だけして、initで初期化していたものは以下のように変更しました。

```swift
    let btn = UIButton()

    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    
    convenience init(){
        self.init(frame: CGRectMake(0, 0, 100, 100))
        self.btn.frame = CGRectMake(0,0,100,30)
    }
```

初期化して、frameはあとで変更することに。

またはvarで宣言することでも可能です。



#4 touchesBegan

```
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
```

> Overriding method with selector 'touchesBegan:withEvent:' has incompatible type '(NSSet, UIEvent) -> ()'

↓以下のように変更

```
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
```

#5 AlamoFire 

以下のエラー発生
> Ambiguous use of 'responseJSON'

~~Xcode6.3ブランチを使いましょう。ただし今はBetaかと思いますので、自己責任で。
https://github.com/Alamofire/Alamofire/tree/xcode-6.3~~

もうmasterにマージされたっぽいので、アップデートしましょう。
https://github.com/Alamofire/Alamofire

# 最後に
ざっとですが、以上です。
Swift1.2からコンパイルが早くなったようなので、（体感ではまだ若干おそ・・）
これから開発の遅延を巻き返すぞ！（笑）
Docker ComposeでLocustの負荷試験環境を作成する


負荷試験の環境を手軽に作りたいという思い、Dockerで使って作ってみた。

基本的には下記のものとほとんど下記を参照しています。+αとしてDocker Compose使うとよりいいかんじにmaster slave構成ができるというもの。

* [Python 製負荷テストツール Locust を Docker コンテナで試す](http://qiita.com/inokappa/items/984b932f22de986417ad)


Docker + Locustのことは上記に詳しく書いているので省略します。

[source](https://github.com/hirokazumiyaji/docker-locust-sample)

Docker ComposeのConfigは下記のようになっていて、テスト用にnginxを立てていて、nginxに対して負荷をかけていく構成にしています。

```docker-compose.yaml
web:
  image: nginx
  ports:
    - "80:80"
master:
  build: .
  command: locust -f /locust/scenarios.py -H http://web --master
  ports:
    - "8089:8089"
    - 5557
    - 5558
  links:
    - web
slave:
  build: .
  command: locust -f /locust/scenarios.py -H http://web --slave --master-host=master
  links:
    - web
    - master
  ports:
    - 5557
    - 5558
```

シナリオはただ単にGETするだけのもの

```/locust/scenarios.py
from locust import HttpLocust, TaskSet, task

class MyTaskSet(TaskSet):

    @task(1)
    def index(self):
        self.client.get("/")


class MyLocust(HttpLocust):
    task_set = MyTaskSet
```

これで

```
$ docker-compose up
```

すればnginxとLocustのmaster + slave * 1が立ち上がります。
LocustのWeb UIで見ればSalveが1になっていると思います。

Slave増やしたいなって思った時は下記のコマンド一発で増やせます。

```
$ docker-compose scale slave=2
```

これだけで台数増やせて負荷をかけられるのはいいと思うので負荷試験のときは使ってもいいと思います。これだとSalveを増やしてもシングルホスト上で増えるだけなのでいずれはクライアント側は限界くると思います。
なので下記の記事を参考にすればシングルホストの限界は超えられるかなと思ったりしています。

* [Swarm と組み合わせて Compose(Fig) をマルチホスト環境で使う](http://qiita.com/spesnova/items/bd64b84368370391eb0c)
XCode 6.3にしたら、NSFetchedResultsControllerDelegateが動かなくなった

大体のケースでは動くと思うけど、ちょっとした事で動かなかったのでメモ。

もともと、`NSFetchedResultsControllerDelegate`を`ViewController`から引きはがしたくて

```swift
class FetchedResultsControllerDelegate: NSFetchedResultsControllerDelegate {
…
}
```

という感じのクラスを作って、

```swift
class ViewController: UIViewController {
    private var fetchedResultsControllerDelegate: FetchedResultsControllerDelegate!

    override func viewDidLoad() {
      fetchedResultsControllerDelegate = FetchedResultsControllerDelegate(tableView)
      …
    }
}
```

みたいにやっていた。

これが、`XCode 6.3`にしたら動かなくなってしまった。

基本に立ち返って、ViewControllerに`NSFetchedResultsControllerDelegate`を書くと動く。

なので、

```swift
class FetchedResultsControllerDelegate: NSObject, NSFetchedResultsControllerDelegate {
…
}
```

としてみたら、ちゃんと動くようになった。

今まで動いていたのが奇跡だったようだ…。
Macを可視化！メンテナンスに最適なアプリを紹介

macは常にベストパフォーマンスが出せる状態かどうかによって
仕事の効率が全然変わってきます。なんだか重いし、ファンがフル回転している
という状況で仕事も進みません。そんときのために、macの状態を簡単に可視化しておきたいですね。

ということで、macの状態を簡単に可視化できて、メンテナンスにも使える便利アプリ**Magican**を紹介します。

オフィシャルHPはこちらです。
http://www.magicansoft.com/

では、その便利な機能をみてみましょう。

## OSとハードウェアの状態を表示
Magicanを立ち上げた状態で、左メニューの『状態』をクリックします。
![スクリーンショット 2015-04-09 16.23.31.jpg](https://qiita-image-store.s3.amazonaws.com/0/74723/f218b12e-76bf-a92a-0666-f34175df0860.jpeg)

### CPUやメモリの消費率を確認
画面下部の方に、分類ごとの表示がございます。クリックしますと詳細が表示されます。
PCが重いときに役立つのは、**左から2番目**のプロセスを可視化する画面です。
![スクリーンショット 2015-04-09 16.58.45.jpg](https://qiita-image-store.s3.amazonaws.com/0/74723/455b325b-01cd-22ef-5101-675dd9aefd89.jpeg)

CPUの使用率が高いプロセスを右クリックで強制終了できたり、
メモリ消費率の高いアプリを特定したりと、不調の原因を早期発見できる画面です。
重い処理をした後にメモリを開放させることも可能です。

### ハードウェアの温度を表示する
**真ん中**のメニューは温度表示させる画面になります。
![スクリーンショット 2015-04-09 17.16.54.jpg](https://qiita-image-store.s3.amazonaws.com/0/74723/32f77d47-1ac5-9b5b-00cb-ff0f5d99c23e.jpeg)

温度の表示もパフォーマンスを上げる重要な部分になります。
CPUの温度が75度近くになると、PCが落ちる可能性が高くなります。
PCに無理をさせないように作業を分散したり、
必要に応じて冷却グッズを買ったりなど様々な対策が考えられます。
ファンの回転数も手動で変えられるようですので、温度を下げたいときは役立ちます。

## アプリのアンインストールやPCのクリーニング
通常はアプリケーションフォルダからアプリを削除すれば、アプリ本体はなくなりますが、
そのアプリが実行中に書き出したログや設定ファイル、キャッシュなどの情報はHDDに残ります。
Magicanを使えば、アプリが残したすべてのゴミを自動的に取り除くことができます。
![スクリーンショット 2015-04-09 17.28.40.jpg](https://qiita-image-store.s3.amazonaws.com/0/74723/6c3924da-f783-a0be-5e45-9c00af1ab844.jpeg)

既存のアプリケーションにつきましては、**左メニューの『クリーナー』**から
削除することができます。
![スクリーンショット 2015-04-09 17.33.47.jpg](https://qiita-image-store.s3.amazonaws.com/0/74723/f73cba1c-4dcc-f9cc-7d4f-08ab26cc5d99.jpeg)

スキャンした後は、必ず削除対象のものをひと通り確認しましょう。
思わぬ自体が起きないように、本当に消えても問題なさそうなものを削除します。

## その他の機能
Magicanには他にも沢山の機能がございますが、今回は『macを可視化する』というテーマを
中心に紹介させて頂きました。PCの状態を確認すると共に、自分の作業量にハードウェアが
対応しているかどうかという点を改めて見直す機会になればと思います。
コミット間で変更があったファイルを圧縮ファイルとして得る(Git)

タイトル通り。
困ったPJの差分リリース用に作った。
$0のディレクトリを取得する方法は[別解](http://blog.kjirou.net/p/506)のほうがよさげ。

```bash
#!/bin/sh

# 差分リリース用スクリプト。
# usage: this-script.sh hash1 hash2
#
# 指定したgitのhashの間で編集されたファイルを抽出してtgzに固める
# ファイル名は[リポジトリのディレクトリ名-hash1-hash2.tgz]になる
# あとは対象サーバ上で展開して上書きすればOK(手動ですね)

SCRIPTPATH=$(cd `dirname $0`; pwd)/`basename $0`
BASEDIR=$(dirname $SCRIPTPATH)
CMD=$(echo tar zc --ignore-failed-read -f ${BASEDIR}_$1-$2.tgz $(git diff --name-only $1 $2))
echo $CMD
$CMD
```
削除されたファイルはとりあえず無視するようにした。
MacでRuby+MySQL2を使うが、XAMPPに付属したMySQLを使う場合

長くてややこしいタイトルですが・・・

・ローカル環境下でRedmineを使いたい。
・DBはXAMPPに付属のMySQLを使いたい。
・なお、Homebrewを利用している。

というところから始まり

MySQL2をインストールする際に、コンパイルが通らなかったりして苦労した話。

各種ソフトウェアの手順書は、こんな細かいところまでフォローしていないので（きりがなくなるだろ！）こういうところに注意！

※MySQLソケットに関する説明は　ぐぐるか
http://yut.hatenablog.com/entry/20110210/1297343942

などを参照

<h3>mysql_configの位置を確認</h3>

今回の場合、XAMPPに付属していたMySQLを利用するので

/Applications/XAMPP/xamppfiles/bin/mysql_config
が、引用しているファイルになります。
あとあと使います。

<h3>ソケットの位置を確認</h3>

<pre>
version='5.6.20'
socket='/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock'
ldflags=''
</pre>

この中で、ソケットのパス
<pre>
socket='/Applications/XAMPP/xamppfiles/var/mysql/
</pre>
に注目。MySQLにアクセスするときなどに使います。

<h3>コンパイラを指定する</h3>

コンパイラの指定をしてあげないと、インストール時にトラブルが発生しました。

<pre>
#cflags="-I$pkgincludedir -I/Applications/XAMPP/xamppfiles/include/c-client -I/Applications/XAMPP/xamppfiles/include/libpng -I/Applications/XAMPP/xamppfiles/include/freetype2 -O3  -L/Applications/XAMPP/xamppfiles/lib -I/Applications/XAMPP/xamppfiles/include -I/Applications/XAMPP/xamppfiles/include/ncurses -arch x86_64  -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!
#cxxflags="-I$pkgincludedir -I/Applications/XAMPP/xamppfiles/include/c-client -I/Applications/XAMPP/xamppfiles/include/libpng -I/Applications/XAMPP/xamppfiles/include/freetype2 -I/Applications/XAMPP/xamppfiles/include/ncurses -O3 -L/Applications/XAMPP/xamppfiles/lib -I/Applications/XAMPP/xamppfiles/include  -Wall  -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!
</pre>

<pre>
cflags="-I$pkgincludedir  -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF -arch x86_64 " #note: end space!
cxxflags="-I$pkgincludedir  -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF -arch x86_64 " #note: end space!
</pre>

参考：Homebrew環境にてmysql2のgemをインストールするときのエラー回避策

https://tamosblog.wordpress.com/2013/07/11/mysql2_error/

<h3>ようやく、mysql2のインストール</h3>
さきほどのmysql.socketの設定を使い、
mysql2をインストールします。

gem
<pre>
gem install mysql2 -- —-with-mysql-config=/Applications/xampp/xamppfiles/bin/mysql_config
</pre>

bundle
<pre>
bundle config build.mysql2 — --with-mysql-config=/Applications/xampp/xamppfiles/bin/mysql_config
</pre>

以上、一般的なインストールの手順の場合と、MySQLの位置が異なるケースでした。
Slackで返してくれるbotをphpで作ってみた

はじめまして！

Slack面白いですね。今日はSlackでなんか言うと返してくれるbotを作ったログを書き残しておきます。

かなりレベル低い私ですが、プログラミングの手習いとして取り組んでみた結果を書いてみたいと思います。
ここのユーザーの方々には申し訳ないレベルです。

#SlackのIntegrationを設定する。
##Outgoing Webhooksの設定（結局使わなかった）
まずはslackのOutgoing WebHooksを使っていきました。

Channelは　Any
Trigger Word(s)は　rassun
URL(s)に　自分のサーバーに置いてあるphpを指定します。
その他は適当にしました。
Customize Nameはrassunとか。
あとは
Customize Iconを`:sunglasses:`にしました。
![1f60e.png](https://qiita-image-store.s3.amazonaws.com/0/59927/fb567641-434e-6c2e-768f-87cd4915a413.png)
↑こんなやつ

結論、キレイなコードかけなかったのでSlash Commandsにすることにしました。

##SlashCommandsの設定
Command は　/rassun
URL　は　自分のサーバーに置いてあるphpファイルを指定します。
Method, Token は　最初のママです。
Show this command in the autocomplete list　にはチェックを入れました。

#php書いてみた
ここからが問題ですね。
こんなコード書いてみました。

```
<?php


// 受信文字列取得
$text = $_POST["text"];


// IncomingWebHookへ送信
$payload = array(
		"channel" => "#{$_POST["channel_name"]}",
		"attachments" => array(
				array(
						"fallback" => "ラッスンゴレライ！お願いします！",
						"pretext" => "ラッスンゴレライ！　".$text." ってなんですのーん？！",
						"color" => "#E4969D",
						"fields" => array(
								array(
										"short" => "false"
								)
						)
				)
		)
);




// IncomingWebHookへ送信
	$curl = curl_init("IncomingWebHookURL");
	curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
	curl_setopt($curl, CURLOPT_HTTPHEADER, 'Content-type: application/json');
	curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($payload));
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	$result = curl_exec($curl);
	curl_close($curl);


?>
```

これでサングラスさんがラッスンゴレライを返してくれるようになりました！

#おわりに
ほとんど初めて、動くプログラムを書いたので、楽しかったです。
次はGoogleシートとslackの連携に挑戦中です！
Vim Powerline用のFont Patchをあてる


Powerlineに関する情報、Font Patchに関する情報はたくさんあったのだが、微妙に自分の環境と異なるところがあったり、細かいところで結構時間を取られたのでメモを残しておく。
Font Patchをあてないと、矢印とかのNon ASCIIな文字が化けてしまう。[参照](https://blog.ymyzk.com/2013/07/vim-powerline/)

#環境
- Mac OS X Yosemite
- iTerm2
- Ricty

#Rictyを用意する
- [手順](https://github.com/yascentur/Ricty)
- 生成物として、`Ricty-Regular.ttf`があればよい
 - 必要なら`Ricty-Bold.ttf`も。

#powerline-fontpatcherを用意する
- `% git clone https://github.com/Lokaltog/powerline-fontpatcher`

#powerline-fontpatcherを使って、RictyにPatchをあてる
- `% fontforge -lang=py -script ./powerline-fontpatcher/scripts/powerline-fontpatcher Ricty-Regular.ttf`
- 成功すると`Ricty Regular for Powerline.ttf`というファイルが生成される
- 生成されたFontをインストールする
 - Macなら生成されたディレクトリで`open .`して、ダブルクリックすればよし。

#iTerm2の設定
- `Preference -> Profiles -> Text`で、Non-ASCII FontにインストールしたFontを設定する

#vimrcファイルの設定
```vimrc
let g:Powerline_symbols = 'fancy'
set laststatus=2
```

#つまづいたところ
###fonrforgeを実行したときにlibへのパスがなくてエラーになる
```error
dyld:Library not loaded: /usr/local/lib/libjpeg.8.dylib
```

解決方法

```
sudo ln -s /usr/local/Cellar/jpeg/8d/lib/libjpeg.8.dylib /usr/local/lib/
```
ペイパルの定期支払のIPNについて

未決済分を次月へ繰り越した場合、次月の決済通知(IPN)は2ヶ月分の決済が一度に発生したように通知されるのか？
（1ヶ月分500円の場合、1,000円決済される）
または、500円の決済が2回発生するのか？
ESXi5.5でCoreOSの仮想サーバを起動する

基本はここの通りにやればOK、だけど一応メモとるよ。
vCenter使ってる人は、適宜vSphere Web Clientに置き換えて下さい。

https://coreos.com/docs/running-coreos/platforms/vmware/

1.適当なLinux or Macで以下のコマンドを実行して起動用アーカイブを入手

```
# curl -LO http://stable.release.core-os.net/amd64-usr/current/coreos_production_vmware_insecure.zip
# unzip coreos_production_vmware_insecure.zip -d coreos_production_vmware_insecure
# cd coreos_production_vmware_insecure
```

2.vmxからovfファイルを作成する

ovftoolは[ココ](https://www.vmware.com/support/developer/ovf/)からダウンロード可能
https://www.vmware.com/support/developer/ovf/

```
mkdir coreos
ovftool coreos_production_vmware_insecure.vmx coreos/coreos.insecure.ovf
ls coreos
coreos.insecure-disk1.vmdk  coreos.insecure.mf  coreos.insecure.ovf
```

3.vSphere ClientでESXiに接続する

4.ovfファイルからVMをデプロイする

"メニュー" -> "OVFテンプレートのデプロイ"を選択して、あとはウィザードに従う

CoreOSが起動するので後は通常通り利用できる。
facebookOGPの設定方法とキャッシュに苦しめられた点

## 手順
1. [こちら](https://developers.facebook.com/)のMyApp -> Add new AppよりfbIdを発行
2. [こちら](http://webdesignerwork.jp/web/facebookogp/)を参考に必要な情報を入力してup
3. [こちら](https://developers.facebook.com/tools/debug/og/object)にチェックしたいURLを入れて確認
4. 基本3で出たエラーを無くすように進めれば問題ない

## ハマった点
* 画像の大きさは200×200以上でないと別の画像が使われる
* urlは末尾にスラッシュ```/```がいる
  * ☓：http://example.com
  * ○：http://example.com/
* canonicalとurlの指定は無しにするか、表示しているページを指す
* 画像の背景が透過されているとスマホのとき背景が黒くなる

## 特にハマった点
#### 問題点：facebookシェアするときに画像が出ない、別の画像が出る
OGPが完璧に設定出来ていない状態でクロールされちゃうと
そっちのURLがキャッシュにたまってしまい
OGP設定を完成させてもキャッシュクリアしないと反映されなくなる

#### 解決策：以下「URL」にキャッシュクリアしたいurlを入れてhttpアクセス
```
https://graph.facebook.com/?scrape=true&id=UR
```
とのこと

* [参考：FacebookのOGPデバッガーがログイン必須で自動キャッシュクリア不可になって困った](http://web-tan.forum.impressrd.jp/e/2013/12/17/16623)
* [参考：facebookデバッガーで消せないOGPキャッシュをクリアする方法](http://www.kagua.biz/fb/cacheclear.html)


#### ということは例えば
キャッシュクリアしたいURLが
http://example.com/:id
の場合、以下のように自動生成してあげれば解決出来そう

``` ruby:http.rb
require 'open-uri'
  for i in 1..2000 do
    cache_url = 'https://graph.facebook.com/?scrape=true&id=http://example.com'+i.to_s
    open(cache_url) do |f|
    print f.read
  end
end
```

## 根本の解決策
当たり前だが、初めて公開するときに完璧な設定出来るようにすること...
テストサーバーでbasic認証やIP制限をかけていても
[こちら](http://snowadays.jp/2013/09/2204)に書かれている方法でチェックは出来るので
Jersey+Spring+Mybatis+Swagger+Javamelody

REST APIをつくりつつ、APIのインターフェースのドキュメントとモニタリングの仕組みを同時に用意しようとした結果の組み合わせ。厨二感がひどい・・・

# REST API

Jersey+Spring+Mybatisで作ったのを、warにしてtomcatにデプロイ

# APIのドキュメント

Swaggerを利用。

厳密にはwebページ。swagger-coreで出したJSONをswagger-uiで表示。
レスポンスとリクエストのJSONの形式、必須項目などが表示され、そこから実際にAPIを叩くこともできる。

# モニタリング

javamelodyを採用。JAMonも試したが、こっちにのりかえ。

Springとの統合もできる。http,jdbc,serviceクラスのメソッドを監視できる。
他にもメモリ使用量など、色々わかる。
特定のディレクトリ配下のファイルキャッシュを削除する

[linux-ftools](https://code.google.com/p/linux-ftools/) がとても便利なので、表題のことを実現するスクリプトです。

`clear_cache.sh`

```sh
#!/bin/bash

dir="$1"

if [ -z "${dir}" ]; then
    echo "usage: sh $0 dirname"
    exit 1
elif [[ ! "${dir}" =~ (.*)/$ ]]; then
    dir=`echo "${dir}/"`
fi

tmp="/tmp/cached_files"
log="/tmp/fadvise.log"

create_cache_list()
{
    cached_files_list=`/usr/local/bin/linux-fincore \
        --pages=false \
        --summarize \
        --only-cached "${dir}"* 2> /dev/null`

    echo "${cached_files_list}" | grep "${dir}" | awk {'print $1'} > "${tmp}"
    echo "$1"
    echo "${cached_files_list}" | tail -n 1
    echo ""
}

clear_cache()
{
    while read line
    do
        /usr/local/bin/linux-fadvise "${line}" POSIX_FADV_DONTNEED >> "${log}"
    done < "${tmp}"
}

create_cache_list before
clear_cache
create_cache_list after
rm "${tmp}" "${log}"
exit 0
```

例えば postgresql の xlog のファイルキャッシュを削除するとして、こんな感じです。

```
$ sudo clear_cache.sh /var/lib/pgsql/data/pg_xlog
before
total cached size: 452,984,832

after
total cached size: 0
```

参考にさせていただきました。

http://tsuchinoko.dmmlabs.com/?p=1206
GolangのdiffMatchPatchライブラリで行単位diffをする

[diff-match-patch](https://github.com/sergi/go-diff)便利ですよね？

これで行単位のdiffを出そうと思ったんですが、APIのリストとにらめっこしてもわからなかったのですが、検索したら大本の[Google謹製の方のWiki](https://code.google.com/p/google-diff-match-patch/wiki/LineOrWordDiffs)にあったので、実装のメモです。

```go
import "github.com/sergi/go-diff/diffmatchpatch"

func lineDiff(src1, src2 string) []diffmatchpatch.Diff {
	dmp := diffmatchpatch.New()
	a, b, c := dmp.DiffLinesToChars(src1, src2)
	diffs := dmp.DiffMain(a, b, false)
	result := dmp.DiffCharsToLines(diffs, c)
	fmt.Println(result)
	return result
}
```

仮に、以下のテキストがあったとします。

```text
abc
def
ghi
```

```text
abc
go-
ghi
```

これのDiffをとると

```text
{0 abc\n}
{-1 def\n}
{1 go-\n}
{0 ghi}
```

こんな感じのdiffになります。-1が削除(コード中は``diffmatchpatch.DiffDelete``を使ってね)、1が追加(``diffmatchpatch.DiffInsert``)、0が変更なし(``diffmatchpatch.DiffEqual``)で、各行の改行文字は各ブロックの末尾についてます。
[Excel] 見出し番号で自動的に線を引きたい

# A列の見出し番号で自動的に線を引いてほしい

もともとは、手順書を作るのに毎回線を引くのが面倒で、どうにか自動的に引けないものかと設定したもの。
これから説明する設定を定義すると、以下のような感じで、A列に見出しっぽい数字があると、線が自動的に引かれる。

![WS000.JPG](https://qiita-image-store.s3.amazonaws.com/0/36476/b393bda0-421d-a757-04f3-0c7f7aea0b93.jpeg)

# 実際の設定

## エクセルの書式
罫線不要の無地画面。ここに、条件によって線を引いたりしていく。

## 線を引きたいセルの「条件付き書式」
線を引きたいセルにて、「条件付き書式」に以下のように破線と罫線のルールを付与する。

![WS001.JPG](https://qiita-image-store.s3.amazonaws.com/0/36476/ebaae345-79ac-208b-3bef-dc89e788e280.jpeg)

## x-x　サブ見出しの1行上に、破線を記載する

```
=(LEN(INDIRECT("R"&(ROW()+1)&"C1",FALSE))-LEN(SUBSTITUTE(INDIRECT("R"&(ROW()+1)&"C1",FALSE),"-","")))=1
```
変数："C1" -> 2列目に見出しをつけるなら"C2"。セルの指定は「R1C1」指定になっているため

　※1行あけずに罫線を引きたい場合は「ROW()+1」を「ROW()」に変更する。

![WS002.JPG](https://qiita-image-store.s3.amazonaws.com/0/36476/f22e422c-5de7-ce7f-abd7-2987fe243e96.jpeg)
上部だけ破線を指定する

## 数字のみの見出しの1行上に、罫線を記載する

```
=VALUE(TEXT(INDIRECT("R"&(ROW()+1)&"C1",FALSE),"#"))<30
```
変数："C1" -> 2列目に見出しをつけるなら"C2"。セルの指定は「R1C1」指定になっているため

　※最後の「30」は見出しの数字。31以降番号が付与される場合はここを調整する
　※1行あけずに罫線を引きたい場合は「ROW()+1」を「ROW()」に変更する。

![WS003.JPG](https://qiita-image-store.s3.amazonaws.com/0/36476/2f243865-655a-f5b4-0b5e-40fb7d21ffcc.jpeg)
上部だけ罫線を指定する

# 解説

- 条件書式はいずれも修正不要。
- A列の数字にのみ反応する（列変更時は上記の説明参照）。全角数字も数字扱いとされる。
- 罫線と破線の区別は「-」の有無。
- コピーしても書式は崩れない（重要！）。書式に気にせずコピペ可能。
cssのみでいい感じにselectタグをカスタマイズ

```html
<label for="animals" class="select-group">
    <select id="animals" class="select">
        <option value="1">dog</option>
        <option value="2">cat</option>
        <option value="3">bear</option>
    </select>
</label>
```

```css
.select-group
{
    position: relative;
    display: inline-block;
    overflow: hidden;

    box-sizing: border-box;
    width: 100%;
    padding: 0;

    vertical-align: middle;

    border: 1px solid #ddd;
    background-color: #fff;
    background-repeat: no-repeat;
}

.select
{
    position: relative;
    z-index: 1;  
  
    line-height: 1.8;

    display: block;

    width: 120%;
    padding: 0;

    text-indent: 8px;

    border: none;
    border-radius: 0;
    background-color: transparent;
    background-image: none;
    box-shadow: none;

    -webkit-appearance: none;
       -moz-appearance: none;
            appearance: none;
}

.select-group:after
{
    position: absolute;
    top: 0;
    right: 8px;
    bottom: 0;

    width: 0;
    height: 0;
    margin: auto;

    content: '';

    border-top: 4px solid #999;
    border-right: 4px solid transparent;
    border-left: 4px solid transparent;
}

div {
    width: 300px;
    height: 100px;
    padding: 10px;
    background-color: #eee;
}
```

[jsfiddle](http://jsfiddle.net/kazu69/q00vn2tw/)のような感じになります。

select要素のブラウザ毎に異なる ▼(down triangle icon?) の部分をラップする要素の領域外にだして、擬似要素afterで生成して代替する。
javascriptプラグイン不要なシンプルな設計です。

select要素をラップしている要素のボーダーをクリックされるとアウトです。ここも気になる場合ならbox-shadowや擬似要素あたりで対応できそう。
Docker + DeviceMapperでコンテナが起動しないバグがある件

Vagrant + VirtualBox + CentOS7.0 + Docker1.5な環境で、コンテナが起動しないというエラーに遭遇しました。

コンテナの自動起動(--restart=always)を仕込んでおいて、サーバを再起動してからDockerデーモンを起動したときに、コンテナが立ち上がらない。

`docker ps -a`を見ると起動直後にコンテナが以上終了していることがわかります。

```
[vagrant@localhost ~]$  sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                        PORTS               NAMES
5189b16c0917        mongo:3             "/entrypoint.sh mong   35 minutes ago      Exited (128) 29 minutes ago                       mongod
```

`docker inspect`で調べてみるとエラーメッセージが見えました。

```
[vagrant@localhost ~]$ sudo docker inspect 5189b16c0917 | grep Error
        "Error": "Error getting container 5189b16c0917ff1f87b8aa8ab2e86953887d0e65ad95d0637b0f2213222d55e6 from driver devicemapper: Error mounting '/dev/mapper/docker-253:1-134,
```

仮想マシンを作リ直してもまた同じエラーが出るときがあります。(出ないときもあります。正確な再現条件はわかっていません）

ちなみにAmazonEC2のCentOS7で動かしてみたら再現しませんでした。

# 2014年からずっと未解決のままっぽい

Githubレポジトリのissuesを除いてみると、2件issuesがあがっており、同じような症状を報告している人がたくさんいました。
2014年からずっと未解決のままのようです。

* https://github.com/docker/docker/issues/5684
* https://github.com/docker/docker/issues/4036

PRのコメントを見ると、「aufsだと起きない」という報告してる人が何人かいました。

dockerのインストールスクリプト( https://get.docker.com/ )のコメントに`aufs is preferred over devicemapper`と書かれているので、もしかしたらdevicemapperよりaufsの方が安定しているのかもしれません。
【Supervisorのエラー】error: <class 'socket.error'>, [Errno 2] No such file or directory: file: <string> line: 1



分散してた個人プロジェクトを1つのサーバーに乗っけちゃおうと思ってたのですが、
それまで動いてたsupervisorを再起動というかreloadさせたら
タイトルのエラーがでてハマりました。。

環境
CentOS release 6.6 (Final)

- - -

error: <class 'socket.error'>, [Errno 2] No such file or directory: file: <string> line: 1

https://github.com/Supervisor/supervisor/issues/121

こことかがググるとヒットするのですが、原因はよくわからず。
どうやらsupervisorの2系で出るバグらしく、3系にするとイイヨとのこと。

```console
$ rpm -q supervisor
supervisor.noarch 0:2.1-9.el6

```

確かに現在2系が動いているっぽいです。
とりあえずpipで入れなおそうかなぁーと。

一応見てみます。

```console
$ sudo easy_install supervisor
Searching for supervisor
Best match: supervisor 3.0
Adding supervisor 3.0 easy-install.pth file
... 
```

とのことで、3系を入れてくれそうです。

```console
$ sudo pip install supervisor
Requirement already satisfied (use --upgrade to upgrade): supervisor in /usr/lib/python2.6/site-packages
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/lib/python2.6/site-packages (from supervisor)
Requirement already satisfied (use --upgrade to upgrade): meld3>=0.6.5 in /usr/lib64/python2.6/site-packages (from supervisor)
Cleaning up...
```

なんか大丈夫そうなのですが

```console
$ sudo supervisorctl reload
Traceback (most recent call last):
  File "/usr/bin/supervisorctl", line 9, in <module>
    load_entry_point('supervisor==3.0', 'console_scripts', 'supervisorctl')()
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 299, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 2229, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 1948, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
```

とか出てきて、ん？！ってなりました。

これはなんか前にpipでsupervisorをおそらく入れてたようなのですね。
rpmでやってたぽいのによくわかりません。

とりあえずuninstallして再度installし直します。

```console
$ sudo pip uninstall supervisor
$ sudo pip install supervisor

$ sudo supervisorctl reload
```

そうするとようやくちゃんと動いてくれました。
あとはいつもどおりstatusとか見て、エラーならログ見て直しましょう。

けっこうハマってました笑