OmniAICreator/Qiita-1.07M huggingface dataset:
Spring Boot で Enum を case insensitive (ignore case) でパースする方法

# Spring Boot で Enum を case insensitive (ignore case) でパースする方法

spring の既定では文字列を enum に変換する際、case sensitive です。
case insensitive にする方法を解説します。

## ConversionService と Converter

文字列を enum に変換する独自の Converter を ConversionService に組み込むことで、
spring の既定の動作を変更することができます。

文字列から単純な enum `Sex` に変換します:

```java:Sex.java
public enum Sex {
	Male,
	Female
}
```

ConversionService と Converter とを提供する `@Configuration` クラス:

```java:ApplicationConfiguration.java
@Configuration
public class ApplicationConfiguration {
	@Bean
	public ConversionService conversionService() {
		DefaultConversionService conversionService = new DefaultConversionService();
		
		conversionService.addConverter(new Converter<String, Sex>() {
			public Sex convert(String source) {
				for (Sex sex : Sex.values()) {
					if (source.equalsIgnoreCase(sex.toString())) {
						return sex;
					}
				}
				throw new IllegalArgumentException("invalid sex: " + source);
			}
		});

		return conversionService;
	}
}
```


## テスト

```java:ApplicationProgram
@EnableAutoConfiguration
@EnableConfigurationProperties
@ComponentScan
public class ApplicationProgram {
	public static void main(String[] args) {
		ApplicationContext ctx = SpringApplication.run(ApplicationProgram.class, args);
		Runtime.getRuntime().exit(SpringApplication.exit(ctx));
	}
}
```

```java:ApplicationOptions
@Component
@ConfigurationProperties
public class ApplicationOptions {
	private Sex sex;
	
	public Sex getSex() {
		return this.sex;
	}
	
	public void setSex(Sex sex) {
		this.sex = sex;
	}
	
	@PostConstruct
	public void init() {
		System.out.println("sex=" + this.getSex());
	}
}
```

```java:ApplicationProgramTest
public class ApplicationProgramTest {
	@Test
	public void testMain() {
		ApplicationProgram.main(new String[] { "--sex=male" });
	}
}
```

コンソールに `sex=Mail` と出力されます。


以上。
（メモ）Vagrant環境でDjango　〜　adminページのスタイルを適用するまで

[ここまでの段階](http://qiita.com/juniskw/items/b9278557daf471a89205)でひとまずページを表示するまではできるようになった。
が、この状態で試しにadminページにアクセスしてみると、どうにもいつもと様子が違う・・・・。

スタイルシートを正しい場所から読み込めていないためらしい。そこで、対応する **.conf** ファイルに以下のような一行を追加。

```
Alias /static /path/to/venv/lib/python2.X/site-packages/django/contrib/admin/static
```

あとは **restart** を忘れずに実行すれば、いつもと同じあのカッコいいadminページが表示される。

参考（というか今回の内容はほぼこれと同じ）：http://akiniwa.hatenablog.jp/entry/2014/02/05/155516
Titanium開発環境をつくってみた。


さらさらと調べてみて、こんな感じの構成でいってみることにしました。

* Grunt
* TiShadow
* Alloy
* CoffeeScript
* Jade
* LTSS
* Jasmine

# 構築
随時加筆します。

[Gruntfile.coffee](https://gist.github.com/hisamekms/10019204)
[package.json](https://gist.github.com/hisamekms/10019271)


# 参考
[Titanium Mobile を実務的に使うための開発環境の整え方（1）](http://mobiletou.ch/2013/09/titanium-mobile-environment/)

[xissy/grunt-titanium-tishadow](https://github.com/xissy/grunt-titanium-tishadow)
Vimのf{char}検索を繰り返す


以下のようなテキストがあるとします。

```
hello my name is shoma2da
```

行頭にカーソルを合わせて`fm`(`f`を入力した後に`m`)と入力してみましょう。
`my`の`m`にカーソルが合うはずです。

このとき、次の`m`にカーソルを合わせるには`;`を押してください。
`;`は直前の検索を繰り返すコマンドです。

また、逆方向の検索をしたいときは`,`です。

どちらもかなり便利です。覚えておきましょう。
shellは何を使っているのか確認してみる

# 先生に言われるがまま、これを入力。
**コマンド**
`echo $SHELL`

**結果**
`$ echo $SHELL
/bin/bash`


# まとめ
僕のmacはshellはbashを使っているっぽい。
そもそもSHELLもbashの意味も解らない。


ググったけど意味不明。
http://e-words.jp/w/bash.html

`多くのUNIX系OSで標準的に使われるシェル(ユーザからの操作を受け付け、結果を表示するソフトウェア)の一つ。また、それを実行するコマンド名。`

とりあえず放置で。
macにhomebrew、macportsのどちらが入っているのか、確認してみた。

# まずはmacにgitが入っているか調べてみる
`which git`

結果
`$ which git
/usr/bin/git`
gitディレクトリが表示されたので、僕のmacにはgitが入っていることが確認された、ということ？

# 次にmacportsがあるのか調べる
`which port`

結果
`$ which port
/opt/local/bin/port`
portディレクトリが表示されたので、僕のmacにはmacportsが入っていることが確認された、ということ？


# 次にhomebrewがあるのか調べる
`which brew`

結果
`反応なし`
反応がないので、homebrewはインストールされていないっぽい。


# 先生に言わるがまま、このコマンドを打つ
`port installed`

結果
`$ port installed
Warning: port definitions are more than two weeks old, consider updating them by running 'port selfupdate'.
The following ports are currently installed:
  mysql55 @5.5.33_0 (active)
  mysql55-connector-cpp @1.1.1_0 (active)
  mysql_select @0.1.2_0 (active)
  proj @4.8.0_0 (active)
  tcp_wrappers @20_2 (active)
  zlib @1.2.8_0 (active)`
ワーニングが出てるけどとりあえず放置。
portにインストールされてるものが一覧で出てるのか？


# まとめ
僕のmacにはmacportsがインストールされていた！！

# 補足
whichは、cdとかlsとかと同じターミナルコマンド。gitコマンドとは違う。
http://bowz.info/155
Macでログインフックを使う

## ことの経緯

普段の開発でちょいちょいhostsファイルを編集することがあるのだが、いつの間にか変更した内容が電源を切ると以前の状態に戻ってしまっている現象が発覚。

おそらく会社様のセキュリティの設定なのじゃないか、どうなのか分からないけど、毎回hostsを変更するのは嫌だ。

嫌だ。毎回

```bash
sudo vi /etc/hosts
```

は嫌だ。


## やったこと

ログインフックを使って、Macにログインするタイミングで別ファイルをコピーすることにした。



## コピー元を用意

適当なディレクトリにhostsのコピーを用意する。

```hosts  
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0 localhost

127.0.0.1 some.example.com
```

## スクリプトを用意

コピー元から、/etc/hostsにコピーを行うスクリプトを用意。

以下、ざっくり。

スクリプトとhostsコピーが同階層にある想定。

```copy.sh
#!/bin/bash -
cd `dirname $0`
cp hosts /etc/hosts
```

作ったら実行権限をつける。

sudoをつけていないのは、LoginHookがroot権限で実行されるため。


## ターミナルで以下コマンド

フックを登録する。

ターミナルを開いて以下。

作ったスクリプトのパスをフルパスで登録。

```
$ sudo defaults write com.apple.loginwindow LoginHook /path/to/copy.sh
```

## 電源きって試す

Mac様の電源を切って、再度パワーオン。

hostsファイルが作ったコピーと同じだったら成功。

## なんで戻るの?

セキュリティなの？どうなの？

そして何かスマートなやり方あったら教えてください。

## 参考

<a href='http://support.apple.com/kb/HT2420?viewlocale=ja_JP' target='_blank'>Mac OS X: ログインフックを作成する</a>
Carousel機能を実装できるSlickを試してみました

Carousel機能を実装できるSlickを試してみました。
公式サイトは以下のURLから参照できます。

公式サイト
http://kenwheeler.github.io/slick/

必要なファイルはページの下の方にあるDownload Nowボタンからダウンロードできます。
DownloadしたZipを解凍するとslickフォルダがあるのが確認できると思います。

このslickフォルダに必要なファイルが揃っているみたいです。
一番シンプルなパターンですが次のコードで動作を確認できました。

```html:index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <link rel="stylesheet" type="text/css" href="slick/slick.css"/>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
    <script type="text/javascript" src="slick/slick.min.js"></script>
  </head>
  <body>
    <div class="single-item">
      <div>your content 1</div>
      <div>your content 2</div>
      <div>your content 3</div>
    </div>
    <script>
      $(document).ready(function(){
        $('.single-item').slick();
      });
    </script>
  </body>
</html>
```

これでyour content 1だけが表示されます。
![スクリーンショット 2014-04-07 20.52.43.png](https://qiita-image-store.s3.amazonaws.com/0/8407/5a2cf540-1621-d178-50a5-2b5c4749a5fe.png)

サンプルのようにボタンとが表示されていませんがクリックしながら横スライドするとyour content 2やyour content 3に切り替えることができました。
![スクリーンショット 2014-04-07 21.02.03.png](https://qiita-image-store.s3.amazonaws.com/0/8407/c448c5bb-5ec6-f4bf-4e39-6c490d97e1e2.png)



ひとまず動作することは確認できたので後は公式サイトに記載されたサンプルコードを見ながらカスタマイズしていけると思います。
OSX で brew, phpenv で作成した環境に memcached を設定するメモ

# OSX, phpenv で作成した環境に memcached を設定する

メモです。

おそらく、 PECL のライブラリは memcached に限らず、ほぼ同様に設定できるはず。

※以下の例では、 php 5.4.16 を使用している。

## brew から、memcached, libmemcached をインストール

memcached, libmemcached は brew からインストール。

```
$ brew install memcached
$ brew install libmemcached
```

## php から使えるようにする。

1. PECL のライブラリを取得。
2. phpize
3. ./configure
4. make && make install
5. 「extension=memcached.so」をどこかに設定

### 任意ディレクトリに移動し、phpize, ./configure, make, make install

例えば以下のコマンド。

```
$ cd ~/Documents/tmp/pecl_librares/memcached # どこでも良い
$ wget http://pecl.php.net/get/memcached-2.2.0.tgz
$ tar zxvf memcached-2.2.0.tgz
$ cd memcached-2.2.0
$ phpize
$ ./configure
$ make
$ make install
Installing shared extensions:     ~/.phpenv/versions/5.4.16/lib/php/extensions/no-debug-non-zts-20100525/
$ ls ~/.phpenv/versions/5.4.16/lib/php/extensions/no-debug-non-zts-20100525/
memcached.so xdebug.so
```

これで、今 phpenv で使用しているバージョンの ./lib/php/extensions/ 以下に memcached.so が作成される。

### memcached.ini を作成して memcached.so を適用

php.ini に記載しても同じ。

./conf.d/ 以下の *.ini を読み込むように設定済みなので、今回は memcached.ini に書くことにした。

```
$ vi ~/.phpenv/versions/5.4.16/etc/conf.d/memcached.ini
extension=memcached.so
$ php -i | grep mem # インストールされているか確認する
```

※当たり前ですが、この状態でWEBから動作確認すると、 memcached が起動してないエラーとなる。(memcached 起動させてないし、webサーバー再起動させてないし。)

```hoge.php
$mc = new Memcached(); 
$mc->addServer("localhost", 11211); 

$set_result = $mc->set("foo", "Hello!"); 
var_dump($mc->getResultCode());//int 47 // 47 = MEMCACHED_SERVER_TEMPORARILY_DISABLED via:http://www.php.net/manual/ja/memcached.getresultcode.php
```

## memcached の自動起動を有効にする

brew でインストールしているので、提供されている plist を使う。

### 自動起動用ディレクトリを作成

無ければ作る。

```
$ mkdir -p ~/Library/LaunchAgents
```

### 作成したディレクトリに homebrew が提供する plist をコピー

普通にコピーすれば良いだけ。

```
$ cp /usr/local/Cellar/memcached/1.4.17/homebrew.mxcl.memcached.plist ~/Library/LaunchAgents/
/usr/local/Cellar/memcached/1.4.17/homebrew.mxcl.memcached.plist -> ~/Library/LaunchAgents/homebrew.mxcl.memcached.plist
```

/usr/local/Cellar/memcached/1.4.17/homebrew.mxcl.memcached.plist は、 RunAtLoad が true なので、ロードされれば起動する。

```
  <key>RunAtLoad</key>
  <true/>
```

### memcached の起動と動作確認

launchctl load で起動させる。

```
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.memcached.plist
$ ps ax | grep memcached # 起動しているのを確認する
48184   ??  S      0:00.01 /usr/local/opt/memcached/bin/memcached -l localhost
```

### webサーバーの再起動

必要に応じて web サーバーも再起動しておく。

```
$ sudo apachectl restart
```

これで良いはず。
SSH認証キーをGitLabに登録・設定手順 覚書

# SSH認証キーをGitLabに登録・設定手順 覚書

バージョン：7.13.5の方はこちらの記事になります。

[SSH認証キーをGitLabに登録・設定手順 覚書（バージョン：7.13.5）](http://qiita.com/redamoon/items/4b25fd2b2b9947f738fa)

Git・Gitlabを案件で使う頻度が多くなってきたので、整理していきたい思いましたので、設定手順をまとめていきます。

SSH認証キーをGitlabに登録するまでの手順をざっくりまとめました。

随時、更新していきたいと思います。

## SSH認証の公開鍵と秘密鍵を作成

ターミナルでssh keyを作成

```
* アドレス@example.comの部分に自分のメアドを登録
* 途中でパスフレーズ（passphrase）を求められますが、Enterを押すだけ
```

ターミナルでSSH Keyを作成するコマンド

```Terminal
cd ~/.ssh
ssh-keygen -t rsa -C アドレス@example.com
```

```Terminal
Generating public/private rsa key pair.
Enter file in which to save the key (/home/.ssh/id_rsa):    ← なにも入力せずに［Enter］
Enter passphrase (empty for no passphrase):    ← 好きなパスワードを入力
Enter same passphrase again:        ← 確認のためにもう一度入力
Your identification has been saved in /home/.ssh/id_rsa.
Your public key has been saved in /home/.ssh/id_rsa.pub.
The key fingerprint is:
e8:ae:60:8f:38:c2:98:1d:6d:84:60:8c:9e:dd:47:81 foo@hoge.com
```

鍵の生成が完了したら2つのファイルが生成

```Terminal
id_rsa: 秘密鍵、他人には見られないようにする
id_rsa.pub: 公開鍵、Bitbucket/GitHub/GitLabに渡す
```

※ 秘密の鍵のセキュリティを強化するために以下のコマンドを実行

コマンド

```Terminal
chmod 600 id_rsa
```

## クライアント側へのSSHキーの設定

鍵の管理を簡単にするために、~/.ssh/configに設定を追加

```Terminal
vim ~/.ssh/config
```

~/.ssh/configのファイル以下を追加

```
Host gitlab.example.com
  User git
  Port 指定のポート番号
  HostName gitlab.example.com
  TCPKeepAlive yes
  identitiesonly yes
  identityFile ~/.ssh/id_rsa  →key（id_rsa）秘密鍵までのパスを記述
```

## GitLabへ公開鍵の登録

1. 右上のアイコンをクリック
2. Edit Profile settingをクリック
3. SSH Keysをクリック

![gitlab01.jpg](https://qiita-image-store.s3.amazonaws.com/0/34020/7ca0c6b3-5ddb-5193-87a5-9fd94c02f3b6.jpeg)

フォームのTitleにssh keyの名前をセットして、ターミナルで以下のコマンドを実行。

※タイトルは任意

```
pbcopy < ~/.ssh/id_rsa.pub
```

クリップボードにsshキーの中身がコピーされます。

![gitlab02.jpg](https://qiita-image-store.s3.amazonaws.com/0/34020/1aa65f98-d655-b4b6-64c4-57508488c836.jpeg)


コマンドでクリップボードに保存したKeyをKey入力枠へペースト

Add Keyを押して、GitLabへの登録は完了になります。

## 参考サイト
[SSH認証キーをBitbucket/GitHubに設定しよう！ [Mac簡単手順]](http://morizyun.github.io/blog/ssh-key-bitbucket-github/ "SSH認証キーをBitbucket/GitHubに設定しよう！ [Mac簡単手順]")

次は、SourceTreeの設定順をまとめたいと思います。
MBA に Merverick をクリーンインストールしたので環境構築(Emacs設定1)

# MBA に Merverick をクリーンインストールしたので環境構築(Emacs設定1)

## ちょいちょい調べながら新しくしてたりするので小出し

 * コマンドラインと同じ様に、C-u にカーソル左側削除をしたい

```
(global-set-key "\C-u" 'backward-kill-word)
```

 * cperl-mode で折り畳みを有効にして、C-x up/C-x down で使う

```
(add-hook 'cperl-mode-hook (lambda () (hs-minor-mode 1)))
(global-set-key (kbd "C-x <up>") 'hs-hide-block)
(global-set-key (kbd "C-x <down>") 'hs-show-block)
```

 * 昔、Vimmerなハッカーがカーソルを十字で表示しててかっこ良かったのでEmacsでもできよう？ってなった
 * el-get-install して次のelisp入れる
  -col-highlight
  -crosshairs
  -hl-line+
  -vline
 * 設定する

```
(require 'crosshairs)
(crosshairs-toggle-when-idle 3)
```
SIMA(JPGIS版)から画地名称を取り出す

以前[SIMAファイルから画地名称を取り出す](http://qiita.com/kmr_hryk/items/2dfcb256728c07338c7f)という形で、SIMA(CSV版)から画地名称を取り出す方法を書きましたが、SIMAにはJPGIS版というXML形式の記録方法もあるので、そちらのデータから画地情報を取り出す方法です。

```ps1
([xml] (Get-Content %ファイルパス%)).GI.dataset.object.Kakuchi | Select-Object Name
```

PowerShellのワンライナーでイケました。
XMLで構造化されているのでそこから取り出す方法さえわかれば簡単ですね。

ただし、大量の画地を持つSIMAでデータを取り出そうとすると読み込みに少し時間がかかるので注意です。

画地名称の順番に並べて表示したい場合にはさらに`Sort-Object`を追加して

```ps1
([xml] (Get-Content %ファイルパス%)).GI.dataset.object.Kakuchi | Sort-Object Name | Select-Object Name
```

とするとイケます。
Capybaraでsleep地獄から抜け出すための便利なメソッド

capybaraでajax周りのテストを実装する際に、よくsleep(秒数)を使って実装していたが、無駄な秒数が多かったり、そもそも設定した秒数だと足りずに結局エラーになったりと安定しなかったので色々調べていると、"until"を使うと要素が見つかるまで待たせる事ができるらしい。

これでsleepに悩まされない！！と思い、早速以下のようなメソッドを作った。

```ajax_helper.rb
  
  def wait_for_loaded_until_css_exists(selector)
    until has_css?(selector); end
  end

  def wait_for_loaded_until_content_exists(content)
    until has_content?(content); end
  end
```

これで無駄無くテストが実行できる(｀・ω・´)ｷﾘｯ
新大陸quick-cocos2d-x

luaをやりたいから、cocos2dx3.0rcの内容によると、luaの部分が分けて、確かに見やすいですが。
開発にはどうでしょうかと考えましたら、友達から、cocos2dxのluaがコードアシスタントなど出来ましたら、開発の効率は一気にアップするだろうと同感しました。

いろいろ調べて、試した結果、やっぱりquick-cocos2d-xのほうがいいと思いますね。

さー、今日はただ操作方法をみんなと共用しましょう。

１．https://github.com/dualface/quick-cocos2d-x/archive/2.2.1-rc.zip にquick-cocos2d-xの最新バージョンをダウンロードしましょう。
　　どこでもいい、unzipしよう。
２．sublimeをダウンロードしましょう、２もしくは３のバージョン。ダウンロードページはhttp://www.sublimetext.com/2　です～～。
３．これから、quick-cocos2d-xの環境を構築しよう。
　　①https://github.com/leitwolf/QuickXDev　
    にQuickXDevをダウンロードしましょう、このQuickXDevでなんですかと言うと、quick-cocos2d-xのsublimeのプラグインパッケージと認識したほうがいいだろう。だから、ダウンロードしたものを、sublimeのpackageライブラリに入れましょう。sublimeすごいから、preferencesにpackage settings->QuickXDevが出てくるね。
　　②QuickXDevの設定：package settings->quickXDev->Settings-defaultを参考して、package settings->quickXDev->Settings-userを書きましょう。参考として、基本設定としては下のように：
　　　{
    　　　"quick_cocos2dx_root":"",（quick-cocos2d-xのパス）
    　　　"author":""（好きなユーザー名）
　　　}
　　注意：macで、パスそのまま；windowsで、C:\\Documents\\quick-cocos2d-xのように、sublimeの約束だからね。
　　③projectを導入しよう、quick-cocos2d-xのsample（どれでもいいです）、sublimeに導入してみましょう。
　　　下の画像例のように
　　　そして、scriptsのライブラリを右クリックのオプションを見ましょう。
　　　run with playerのオプションが出てくるはずですね、よし、runしよう。
　　　出ました、すごく早くて、出ました。
　　　必要なのは：
　　　　　config.luaの配置ですね、英語で書いてますから、理解しやすいだろう。
　　　　　あと、luaのframeworkも求めるので、みんな、ちゃんと設定してね。
　　　　　最後、playerさんのLOG情報がすべてdebug.logに保存していますので、調査も簡単です。

![tutorial1.PNG](https://qiita-image-store.s3.amazonaws.com/0/34501/60e936f1-0fc1-dc14-526e-edf24efa8974.png)

まとめ：
　　こいつ超すげっ、Debug以外に何もできる、もちろん、コードアシスタントもね、自分がsublimeの初心者だが、みんなはすばらしいプラグイン探せればすごく幸いです、目指せ：効率的にすばらしいゲームつくり。
　　もう夢中になりました、何が作りたいです、作りましたら、セミナーを開こうかなぁｗｗ

　　
　　最後、友達が作ったパーティクルシステムです、すごく便利だから、ぜひ、使ってくださいね～～。http://www.particle2dx.com/
Gmailで画像を非表示にする方法

Gmailで画像を非表示にする際に少し手こずったのでその時のメモ。

Gmailでは"visibility: hidden"、"display: none"は無効化されて上手く効かない。。

ググると結構簡単に出てきた...orz。早めに調べれば良かった。。。。
http://stackoverflow.com/questions/15224944/is-there-a-way-to-hide-imagery-in-gmail-for-a-html-responsive-email-build

```
<img alt="hoge" src="http://hoge.com" style="width:0px; min-height:0px; mso-hide:all;">
```

こうやれば綺麗に表示されなくなった。
ちなみに "mso-hide:all" はOutLookで要素を非表示にするstyleみたいです。
SkinnyResource を使わない CRUD サンプル #skinnyjp

をつくりました。SkinnyResource のコードは HTML 以外の応答も考慮していたりして、最初に理解するためのサンプルとして適切ではないかなという理由からです。

https://github.com/skinny-framework/skinny-framework-example

MembersController は scaffold で生成されたもので CompaniesController は、その一部だけを素で実装したものです。SkinnyResource では変数化しているところも敢えてベタ書きにしています。

[controller/CompaniesController.scala](https://github.com/skinny-framework/skinny-framework-example/blob/f7e397ea48111e23610e06cacade399db2329efd/src/main/scala/controller/CompaniesController.scala)
[controller/Controllers.scala#L22-L55](https://github.com/skinny-framework/skinny-framework-example/blob/f7e397ea48111e23610e06cacade399db2329efd/src/main/scala/controller/Controllers.scala#L22-L55)

scaffold をやった後に見るサンプルとしてどうぞ。
gollum でカスタム CSS

# 概要

デフォルトのスタイルをベースに、ちょこっといじりたい時などに。

# 変更点

(カレントディレクトリを gollum と仮定)

まず `custom.css` を用意し、`lib/gollum/public/gollum/custom.css` に配置する。

例えば、エディタの高さを倍にするなら下記の様に。

```css:lib/gollum/public/gollum/custom.css
#gollum-editor textarea {
  height: 40em;
}
```

※他の CSS が置かれている `lib/gollum/public/gollum/css/` ではないので注意。

<ins datetime="2014-04-07T20:12:36+09:00">追記: コミットすれば wiki のデータのルートにも置ける。</ins>

次に、カスタム CSS を有効化する。

gollum の起動オプションとして `--css` を付けるか、設定ファイルで

```rb:config.rb
wiki_options = {
  :css => true,
}
Precious::App.set(:wiki_options, wiki_options)
```

などとする。これでOK

ちなみに、起動オプションと wiki の設定の関係は `bin/gollum` を見るといい。Ruby が分からなくても理解できた。
iOSライブラリ管理ツール「CocoaPods」の使用方法

##CocoaPodsってなに？
iOS/Mac向けのアプリを作成する際のライブラリ管理をしてくれるもの。
これがないと自分でGitHubとかからライブラリ取ってきて、プロジェクトに手動で追加して…と大変みたい。
それを簡単に管理できるようにしてくれるんだって。

##CocoaPodsのインストール
MacにはデフォルトでRubyがインストールされているので、それ前提です。

1.ruby gemを最新にする

```console
$ sudo gem update --system
```

2.インストール

```console
//今現在下記の実行ではできません

$ sudo gem install cocoapods  

//下記の実行ならいけます

$ sudo gem install -n /usr/local/bin cocoapods

```

3.セットアップ

```console
$ pod setup
Setting up CocoaPods master repo
Setup completed (read-only access)
```

##CocoaPodsをつかう
1.使いたいプロジェクトファイルに移動

```console
$ cd ~/testProject
```

2.Podfileというファイルを作成し、編集

```console
$ vi Podfile
```

```rb:Podfile
platform :ios, "6.0"
pod 'AFNetworking', '~> 2.0'
```

プラットフォームをiOS6以上として指定。
例でAFNetworkingというライブラリのバージョン2系を指定してインストール

3.指定したライブラリのインストール

```console
$ pod install
Analyzing dependencies
Downloading dependencies
Using AFNetworking (2.2.1)
Generating Pods project
Integrating client project
```
※注意
この時にxcodeでプロジェクトファイルを開いていると、

```
[!] From now on use `testProject.xcworkspace`.
```

と怒られてしまうので、xcodeを閉じてから実行する。

4.確認
実行したプロフェクトファイルにtestProject.xcworkspaceというファイルが作成されるので、
xcodeprojではなく、こっちを開き、実行したりする・

5.他のライブラリをインストールするときは？
先ほどのPodfileにライブラリを追加し、

```console
$ pod update
```
を実行する。


##参考
iOSライブラリ管理の神ツール「CocoaPods」のインストールと使い方 (1/2)
http://www.atmarkit.co.jp/ait/articles/1403/08/news008.html
Vagrant と Azure と Windows

[Vagrant と Azure で使い捨て開発環境をさくっと作る](http://qiita.com/zakkied/items/667418c6b9b1ea349687) の続き。

なんとなく vagrant と言った時に操作される対象は Linux を想定しているのが暗黙の了解な気がするし、普段の開発環境は Mac か Linux なので、それで事足りる。でも Azure なら Windows も使えるし、というかそっちが本業だろうし、vagrant から Windows な VM を操作できたら便利だなーと思ってやってみたら案外簡単だった。

## 準備

Mac なら [Microsoft Remote Desktop](https://itunes.apple.com/jp/app/microsoft-remote-desktop/id714464092) をインストールしておく。Linux は... どうなんだろう。


## Vagrantfile


```ruby
# vi: set ft=ruby :

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'azure'

Vagrant.configure('2') do |config|

  config.vm.provider :azure do |provider, override|
    provider.subscription_id      = 'abcdefgh-1234-5678-9abc-d123456789ab'
    provider.mgmt_certificate     = '/Users/zakkie/azure-api/azure.pem'
    provider.mgmt_endpoint        = 'https://management.core.windows.net/'

    # vm settings
    provider.vm_image             = 
      'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201403.01-en.us-127GB.vhd'
    provider.vm_location          = 'Japan East'
    provider.vm_size              = 'Small'
    provider.vm_name              = 'zakkie-test017'
    provider.cloud_service_name   = 'zakkie-test017'
    provider.tcp_endpoints        = '3389:53389'

    override.ssh.private_key_path = '/Users/zakkie/.ssh/azure.key'
    override.vm.box               = 'azure'
    override.vm.box_url           = 'https://github.com/msopentech/vagrant-azure/raw/master/dummy.box'
  end
end
```

`provider.tcp_endpoints = '3389:53389'` を設定しておかないと Remote Desktop 接続が出来ないので注意。

あとは vm_image が Windows のものになったのと、SSH 関連の設定が無くなった以外は前回の設定と同じ。

なお、Azure の Web Console で Windows Server を選択すると、サイズは A0 - A7 の中から選ぶようになっているが、A0 - A4 を vm_size に指定するとエラーになる。
A0 - A4 は以下のように読み替える必要がある。

- A0: ExtraSmall
- A1: Small
- A2: Medium
- A3: Large
- A4: ExtraLarge


## 起動

```
% vagrant up
% vagrant rdp
# Remote Desktop クライアントが起動するので、パスワードを入力する。
# ログインまでやってくれると楽なんだけど出来ないぽい。
(do something)
% vagrant destroy
```

vagrant up からログインまで 3 分ちょっと。3 分ちょっとでまっさらな Windows 環境を作ることができる。素晴らしい。

まあ欲を言えば、windows server だけでなく vista とか 7 とか クライアント OS が標準イメージで揃っているとテストが捗るな、とか、IE も各バージョン揃っているといいなとか、色々あるけど、azure のユースケース的に難しいのかなと想像。

あとは chef みたいにプロビジョニングまで出来るといいんだけど、Windows は門外漢すぎてさっぱり分からない。
「git add . 」より「git add -A | git add --all」がいい


「git add .」よりも「git add -A 」か「git add --all 」がいい。
　理由は「git add .」だと新規、編集ファイルの変更がaddされるが、削除ファイルはaddされない。「git add -A」と「git add --all 」だと新規、編集、削除ファイルがaddされる。

[ソース](http://stackoverflow.com/questions/572549/difference-between-git-add-a-and-git-add)
R で文字列の contains #rstatsj

`grepl()` でできる。

```r
carriers <- c("ezweb","docomo","softbank","vodafone")
grepl("o", carriers)
grepl("e", carriers)
```

```:結果
[1] FALSE  TRUE  TRUE  TRUE
[1]  TRUE FALSE FALSE  TRUE
```

文字列操作は `stringr` パッケージが便利なので、`stringr::str_detect()` を使ったほうが良い。

```r
library(stringr)
carriers <- c("ezweb","docomo","softbank","vodafone")
str_detect(carriers, "o")
str_detect(carriers, "e")
```

参考：[stringr — Rの文字列をまともな方法で処理する](http://meme.biology.tohoku.ac.jp/students/iwasaki/rstats/stringr.html)
サーバが特定UAから接続可能であることをテストする

serverspecを使うと簡単に特定ポートをlistenしていることを確認できるが、このポートに特定のUAでアクセスできることをテストするmatcherを書いた。

```rb
RSpec::Matchers.define :be_reachable_by do |ua|
  match do |port|
    if /(\d+)/ =~ port.to_s
      b = backend.backend_for('ssh')
      b.run_command("curl -A #{ua} localhost:#{Regexp.last_match(1)}").exit_status == 0
    else
      false
    end
  end
end
```

例えばELBのヘルスチェッカーから接続可能であることをテストする場合。

```rb
describe port(80) do
  it { should be_listening }
  it { should be_reachable_by 'ELB-HealthChecker/1.0' }
  it { should_not be_reachable_by 'BAD-USER-AGENT' }
end
```
CentOSで自動時刻合わせ

- CentOS6.3

##タイムゾーン
	# cp -p /usr/share/zoneinfo/Japan /etc/localtime

##NTPインストール
	# sudo yum -y install ntp

##NTPサーバの設定

	# vi /etc/ntp.conf # OSバージョンによって初期設定値が異なるけど基本一緒
	-server 0.centos.pool.ntp.org
	-server 1.centos.pool.ntp.org
	-server 2.centos.pool.ntp.org

	+server -4 ntp.nict.jp
	+server -4 ntp1.jst.mfeed.ad.jp
	+server -4 ntp2.jst.mfeed.ad.jp
	+server -4 ntp3.jst.mfeed.ad.jp

##NTPサービス起動
	# service ntpd start

##NTPサービスの自動起動設定
	# chkconfig ntpd on

##設定確認
###自動起動設定確認
	# chkconfig --list ntpd
###ntpサーバ照会
	# ntpq -p
ビット演算子を使った小数の操作

ビット演算子("&","|:"<<"等) は、計算対象を32ビットの整数に変換してから演算を行う。

こいつを利用してこんなことができる。

### 小数点以下切り捨て

```js
var a =1.1;
a|=0; // こいつ
console.log(a); // 1が出力される
```

### 小数判定

```js
result = (a===(a|0)); // 整数：true, 小数：false
```

ただし、32ビットへの変換なので、値が0x7fffffffより大きいと正しい結果が得られないですゾ。
Capistrano 3.1.0からdeploy:restartが自動実行されなくなった

- [CHANGELOG.md#3.1.0](https://github.com/capistrano/capistrano/blob/e29ee7a063d939c336193c9fb904f98cd35db21d/CHANGELOG.md#310)

Capistrano 3.0では `deploy` タスクを実行すると最後の最後に `deploy:restart` が実行されていましたが 3.1.0 から実行されないようになりました。

そのため `deploy:restart` で何か意味のあることをしていて3.0から3.1.0に何も考えずにアップグレードすると、その「何か意味のあること」が実行されなくなってしまうので注意が必要です。

3.1.0以降でも `deploy:restart` を使うにはこのように書きます。

```rb:config/deploy.rb
namespace :deploy do
  after :publishing, :restart
end
```

### 合わせて読みたい

- [Capistrano3のデプロイフレームワークの使い方 - Qiita](http://qiita.com/yuku_t/items/01c0ec4389db143e27f5)
将棋などのゲームのマスの実装

オセロや将棋のような盤をHTML5+JavaScriptで実装する場合、

1.盤全体をひとつのCanvasにする
2.マスそれぞれをCanvasにする
3.マスを構成する要素imgなどをそれぞれ並べる

という方法が考えられる。どれを選択するか。

1.盤全体をひとつのCanvasにする

* (+)HTMLスッキリ
* (+)CSS(position, top, leftやら)の設定がめんどくさくないかもしれない
* (+)Canvas内部はブラウザによって見た目が変わりにくい
* (-)Canvasって重くね？

2.マスそれぞれをCanvasにする

* (+)HTMLちょっとスッキリ
* (+)onmousedownとか登録すればオブジェクト指向的でわかりやすい
* (+)Canvas内部はブラウザによって見た目が変わりにくい
* (-)Canvasって重くね？

3.マスを構成する要素imgなどをそれぞれ並べる

* (+)重くなさそう
* (+)マスをぜんぶ再描画しなくても、変更したい構成要素をいじるだけで実現可能
* (-)クリックイベントなどが登録しにくい
* (-)ブラウザによって見た目が変わりそう
* (-)派手な動きさせにくそう
* (-)CSS(position, top, leftやら)めんどそう
* (-)HTMLぐちゃぐちゃ

クリックイベントなどが登録しにくい問題は特に、マス全体に渡る要素が必ず一番上（z-index）にあるとは限らないので、一番上に

```html:html

<span id="responseClick" style="z-index:9999; width:30px; height:30px;"></span>

```

みたいのを置いて、それにonmousedownなどを設定する必要があるだろう。

最初は３でやろうと思っていたのだが、ブラウザによって見え方変わりそう、ということを考えると、やっぱ１か２かなあ。

２は、クリックイベントを登録する方法がよくわからず非常に難しい。

たとえばマスを

```html:html

<canvas id="c0" style="width:30px; height:30px;"></canvas>
<canvas id="c1" style="width:30px; height:30px;"></canvas>

```

```js:js

var ClassCell = function(iId){
   this.mId = iId;
   this.mCanvas = document.getElementById('c'+iId);

   this.Click = function(e){
      console.log(""+this.mId+"クリックされました")
   }

   this.mCanvas.onclick = this.Click;
};

var cells = [
   new ClassCell(0),
   new ClassCell(1)
];

```

みたいにクラス化した場合、たとえば<canvas id="c0" style="width:30px; height:30px;"></canvas>がクリックされると、ClassCell.Click内のthisがCanvasを意味してしまって、うまく働かない。
まさか

```js:js

var cells = [
   new ClassCell(0),
   new ClassCell(1)
];

function c0click(e){
   cells[0].mCanvas.Click(e);
}
function c1click(e){
   cells[1].mCanvas.Click(e);
}

cells[0].mCanvas.onclick = c0click;
cells[1].mCanvas.onclick = c1click;

```

とかマスの数だけやるのもアホらしいし……。
なんかいい方法あんのかな？
ないなら、１の方法でやるしかあるまい……。

いい方法があったら教えてほしいです。

# 追記

@Karakuri さんがコメントに書いてくださった方法
下記のコードでできました。
どういう理屈なんだこれ～

```html:html

<canvas id="c0" style="border:solid;"></canvas>
<canvas id="c1" style="border:solid;"></canvas>

```

```js:js

var cells = [];
$().ready(function(){
	cells = [
		new ClassCell(0),
		new ClassCell(1)
	];
});

var ClassCell = function(iId){
   var self = this;
   this.mId = iId;
   this.mCanvas = document.getElementById('c'+iId);

   this.Click = function(e){
      console.log(""+self.mId+"クリックされました")
   }

   this.mCanvas.onclick = this.Click;
};



```

```js:それぞれをクリックした実行結果

0クリックされました
1クリックされました

```
Rails+RSpecFactoryGirlを使おう

# 前提
RailsとRSpecは導入済み

# まず導入

```rb:Gemfile
gem 'factory_girl_rails'
```

## コマンドを実行

```
bundle install
```

## Gem は入った

# development環境で使おう
## まずテストデータ準備


```db/seeds.rb
FactoryGirl.define do
  factory :user do
    email { 'test1@example.com' }
    password 'password'

    factory :dev_user do
      sequence(:email) { |n| "test#{n}@pixiv.com" }
      password 'password'
    end
  end
end
```

## 次にテストデータセットアップ準備

```spec/factory/users.rb
if %w(development).include? Rails.env
  include FactoryGirl::Syntax::Methods

  create(:user)
end
```

# テスト環境でもRSpecで使おう
## 設定ファイル準備

```spec/support/factory_girl.rb
RSpec.configure do |config|
  config.include FactoryGirl::Syntax::Methods
end
```

## テストファイルにはこう書く

```spec/models/user_spec.rb
let(:user) { create(:user) }

# パスワードは設定されているか？ <= このテスト意味がないので適当になおしてね

it { expect(user.password).to be_present }
```
Mojoliciousで、コントローラが受け取ったパラメータをJavaScriptへ渡す

Mojoliciousでは、コントローラ部分が受け取ったデータをテンプレートで展開します。
これまでhtmlタグにしか展開したことがなかったので不安だったのですが、javascriptにも展開できたんですね。。

まずコントローラ部分

```pl:Root.pm
  :
(中略)
  :
$self->stash->{client_id} = $client_id;
$self->render('example/index');
```

$client_idという変数の内容を、stash領域へ格納します。stashの説明はこちらを参照。

[Mojolicious最速マスター](http://qiita.com/yusukebe/items/65141c9c63a2860af962)


stashした内容を、以下のhtmlテンプレートに展開します。

```html:index.html.ep
  :
(中略)
  :
<script>
var client_id = <%= $client_id %>;
var scriptUrl = "datas/" + String(client_id) + "/graph_plot.json";
        jQuery.ajax({
            url: scriptUrl,
            async: false,
  :
(中略)
  :
```

client_id に展開した値を格納し、scriptUrl でjsonファイルの場所を指定してやります。

__今回はファイルの場所を顧客ごとに一意の値にするため、DBからデータを取得しています。また、テンプレートファイルに展開しているため、.jsファイルに記載されたJavaScriptに値を渡すわけではありません。__

何か参考になれば。
Go Revel(サーバー側)とVue.js(ブラウザ側)のテンプレートを同一ページで混在させる

サーバー側で初期状態をページに埋め込んで生成しつつ、実行時に変更する部分はブラウザ側で生成したい。

サーバー側は[Revel](http://revel.github.io/)、ブラウザ側では[Vue.js](http://vuejs.org/)のテンプレート機構を利用しようとしたが、ここで問題があった。Revel(というかGo template)もVue.jsも[mustache](http://mustache.github.io/mustache.5.html)ベースでタグのマークアップが同一の<code>{{keyword}}</code>(double braces = *double mustache* )で囲む構文のため、先に処理するRevelが全部奪ってしまう。

Revel側を追ってみるとデリミタの文字列が変更できたので、revel側のテンプレート記号は後に残すべきマークアップを残せるよう、衝突しないが似たような構文として同じ中括弧記号をもう1文字増やした <code>{{{keyword}}}</code> に変更することで切り抜けてみた。

```:conf/app.conf
template.delimiters="{{{ }}}"
```

この中括弧*3( *triple mustache* )はmustache仕様ではエスケープしない生のHTMLを出すということになっているが、
Vue.js側では <code>v-html</code>属性も使えるし、生のHTMLは危険性を意識して使うべきものなので簡単な記法は無くても良いかな、と。

しかしこのように変更するとIntelliJ IDEAで編集するときにエラー表示だらけになるのが少し不便だなー。
vimでインデントを入力する


例えばこんなテキストがあるとします。

```
hello
world!
my
name
is
shoma2da
```

改行を入力したい箇所までカーソルを移動したら`>G`と押します。（`>`を入力してから`G`を入力）

たとえば３行目（myのところ）で押すと以下のテキスト結果になります。

```
hello
world!
    my
    name
    is
    shoma2da
```

さらに続けて改行入力もできます。次はisの行で押してみます。

```
hello
world!
    my
    name
        is
        shoma2da
```
Homebrewのインストール


## 前提条件
- OS X 	Mavericks
- Mac初心者
- Mac使うのは10年位ぶり

## Javaのインストール
http://support.apple.com/kb/DL1572?viewlocale=ja_JP からJava for OS X 2013-005をダウンロードしてインストール。

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html からjdk-7u51-macosx-x64.dmgをダウンロードしてインストール。

## Xcodeのインストール
App Storeからインストール。
必要ないとの噂だけど、一応インストール。

## Command Line Tool for Xcodeのインストール
Apple Developerに登録。
登録が済んだらhttps://developer.apple.com/downloads/index.action からCommandline Tools(OS X Mavericks)for Xcode -march 2014をダウンロード。
そのままインストール。

## Homebrewのインストール
ターミナルで下記コマンド実行。

```
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
```
インストールが終わるまで待つ。

下記コマンドでHomebrewのPATHを通す。

```
echo 'export PATH=/usr/local/bin:$PATH' >> .bash_profile
source .bash_profile
```

インストールが終わったら正常にインストールされたか下記コマンドで確認。

```
brew --version
```

## 試しにGitでもインストールしてみる
ターミナルで下記コマンドを実行

```
brew install git
```

## Homebrwのコマンド確認
```
man brew
```
[Objective-C] テキスト量に応じてTextViewを可変対応させる


ユーザ投稿型のアプリや、ユーザ操作に応じてフォントサイズが変わったりなどした場合にTextViewのサイズを変更する方法です。

方法は以下の3つ。

* `NSString#sizeWithFont:constrainedToSize:`メソッドを使う
* `NSAttributedString#boundingRectWithSize:options:attributes:context:`メソッドを使う
* `contentSize`プロパティを使う

1, 2についてはUITextViewの場合はスクロールバー分の余白の都合で、どうやら微妙にサイズが小さくなってしまい、テキストが切れてしまう問題があるようなので注意が必要です。
（余白分をハードコードしてしまえば対応できますが、将来、スクロールバーのサイズが変更されるなどした場合は問題になるのでちょっと悩みどころです）

*ちなみに、一番目のメソッドはiOS7からdeprecatedになりました。iOS7以降は二番目を使うほうがよいです。*

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

**[追記]**
UITextView.textContainerのプロパティをいじるとUILabelと同様の見た目にすることができました。具体的には以下。

```objc
aTextView.textContainer.lineFragmentPadding = 0;
aTextView.textContainerInset = UIEdgeInsetsZero;
```

ひとつ目が左右の余白を、ふたつ目が上下の余白を0にしてくれます。
どうやら`NSAttributedString#boundingRectWithSize:options:attributes:context:`メソッドで返されるサイズは、純粋に、設定された文字列が収まる矩形サイズのようです。
そのため、上記設定やcontentInsetsなどの余白を追加した場合は、実際にレンダリングされるサイズとの誤差が生じることになります。
（CSSのwidthとpaddingの関係が分かる人はそっちがイメージしやすいです）

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



##NSString#sizeWithFont:constrainedToSize:メソッド

```objc
UITextView *aTextView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 200, 0)];
aTextView.text = @"...some long text...";

// 200, 400のサイズ内に収まるサイズを取得
CGSize size = [aTextView.text sizeWithFont:self.textView.font
                         constrainedToSize:CGSizeMake(200, 400)];

CGRect frame = aTextView.frame;
frame.size.height = size.height;
aTextView.frame = frame;
```


##NSAttributedString#boundingRectWithSize:options:attributes:context:メソッド

```objc
CGSize checkSize = CGSizeMake(200, 400);
NSDictionary *attributes = @{NSForegroundColorAttributeName:[UIColor whiteColor],
NSFontAttributeName:[UIFont systemFontOfSize:12.0]};
NSAttributedString *string = [[NSAttributedString alloc] initWithString:@"some string"
                                                             attributes:attributes];

UITextView *aTextView = [[UITextView alloc] init];
aTextView.attributedText = string;

CGRect textFrame = [string boundingRectWithSize:checkSize
                                        options:NSStringDrawingUsesLineFragmentOrigin
                                        context:nil];
aTextView.frame = textFrame;
```

##contentSizeプロパティ

```objc
UITextView *aTextView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 200, 0)];
aTextView.text = @"some text.";

// 設定されたテキストのレンダリング結果を得るため、若干の遅延を挟む
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_MSEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
	CGRect newFrame = aTextView.frame;
	newFrame.size.height = aTextView.contentSize.height;
	aTextView.frame = newFrame;
});
```
モニターを閉じるとサスペンドされるのを防止

ubuntu server 16.04をノートPCにインストールしてみた。
cui環境なのにモニターを閉じるとサスペンド(スリープ)になるため調査

[Ubuntu Server 13.10 now goes to sleep when closing laptop lid - Ask Ubuntu](http://askubuntu.com/questions/360615/ubuntu-server-13-10-now-goes-to-sleep-when-closing-laptop-lid)

```diff:/etc/systemd/logind.conf
- #HandleLidSwitch=suspend
+ HandleLidSwitch=ignore
```

## 設定反映

```bash
sudo systemctl restart systemd-logind
```
InfluxDB と fluentd を組み合わせを試してみた

[InfluxDB](http://influxdb.org/) が面白そうなので、本番投入前に fluentd と組み合わせて使うとどうなるのか検証してみました。主に [fluent-plugin-influxdb](https://github.com/fangli/fluent-plugin-influxdb) の仕様の確認。検証なので、Mac OS X での手順のみ。

ソースだけ見たいという人は github に置いてあります。

https://github.com/hakobera/fluent-influxdb-test

## InfluxDB のインストールと起動

```
$ brew install influxdb
$ ln -sfv /usr/local/opt/influxdb/*.plist ~/Library/LaunchAgents
$ brew services start influxdb
```

## テスト用DBの作成

```
$ curl -X POST 'http://localhost:8086/db?u=root&p=root' -d '{"name": "test"}'
```

## サンプルプロジェクトの取得

```
$ git clone https://github.com/hakobera/fluent-influxdb-test
$ cd fluent-influxdb-test
$ bundle install
```

## Fluentd の起動

```
$ bundle exec fluentd -c conf/fluent.conf
```

fluent.conf は以下のようになっています。

```
<source>
  type tail
  path temp/dummy.log
  pos_file temp/dummy.log.pos
  tag dummy.test
  format ltsv
</source>

<match dummy.*>
  type influxdb
  host localhost
  port 8086
  dbname test
  user root
  password root
  time_precision s
</match>
```

## dummer でダミーデータの投入

別のコンソールを開き、[dummer](https://github.com/sonots/dummer) でダミーデータを投入します。

```
$ mkdir temp
$ bundle exec dummer -c conf/dummer.conf
```

これで、Fluentd 経由で、influxdb にデータが溜まっていきます。

## クエリを投げてみる

URLごとのリクエスト回数を10秒毎に集計するクエリを書いてみます。

```sql
SELECT uri, COUNT(id) FROM dummy.test GROUP BY uri, time(10s)
```

クエリは HTTP API 経由で、`/db/test/series?u=root&p=root&q=QUERY` という形式で投げます。curl の場合は、こんな感じ。

```
$ curl "http://localhost:8086/db/test/series?u=root&p=root&q=SELECT%20uri%2C%20COUNT(id)%20FROM%20dummy.test%20GROUP%20BY%20uri%2C%20time(10s)"
```

GUI (http://localhost:8083) で確認するとこんな感じ。

![スクリーンショット 2014-04-07 11.47.36.png](https://qiita-image-store.s3.amazonaws.com/0/25774/7fc4dafc-53cc-c5a3-9312-590a6d3e0b36.png)

## わかったこと

* [fluent-plugin-influxdb](https://github.com/fangli/fluent-plugin-influxdb) は、タグ名を InfluxDB の series 名にする

## 今後検証すること

* InfluxDB は、ネストした JSON をサポートしていないので、Flat化する plugin を試す
    * https://github.com/kentaro/fluent-plugin-flatten
    * https://github.com/sabottenda/fluent-plugin-flatten-hash

### 参考

* [InfluxDB HTTP API Document](http://influxdb.org/docs/api/http.html)
* [Fluentd のベンチマークテストに使える dummer (旧称 dummy_log_generator)](http://qiita.com/sonots/items/750da77a18e62852a02f)
* [InfluxDB を10分だけ触ってみた](http://qiita.com/sonots/items/ced1efc6d6e10a449abb)
無限スクロール対応のWordpressでインプレッション数の取得を目指す投稿

下記画像のように永遠と読み込まれるPOSTが、
画面表示領域に入ったらJSでメソッドを実行したい。

count.phpなりを用意して、APIとして利用したいのだが、
フロント側でどのようなコードを書けば良いのか皆目検討もつかないので
皆様の力を分け与えて欲しい所存にあります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/41270/308f2f78-4139-618a-02ea-ca62476c6309.png)
Redmine2.5とredmine_redcarpet_formatterプラグインの衝突回避

背景
----

RedmineにMarkdownフォーマットを追加するプラグイン [redmine_redcarpet_formatter](https://github.com/alminium/redmine_redcarpet_formatter)があるのですが、Redmine2.5でMarkdownフォーマットが試験的に追加されたことで、名前やフォーマッタ名が衝突しています。

そのため、当該プラグインを入れたままRedmine2.5へアップデートすることができなくなっており、少し回避策を取りました。

おことわり
---------

ひとまず動作確認はしましたが、どんな影響があるかわからないので使う場合は自己責任でお願いします。

また、Redmine2.5のMarkdownフォーマッタが試験的な導入となっているので、将来的に衝突回避される場合はこの変更を元に戻す二度手間が発生するでしょう。
そのため、特に2.5.xで欲しい機能がない限りは2.4.xでとどまっておくことを個人的にはオススメします。

変更箇所
-------

変更による影響が少なそうなredmine_redcarpet_formatterプラグインのコードを少しいじります。

### `Gemfile`

gem指定をコメントアウト

```diff
-gem "redcarpet"
+#gem "redcarpet"
```

### `init.rb`

```diff
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

 require 'redmine'
-require 'redmine/wiki_formatting/markdown/formatter'
-require 'redmine/wiki_formatting/markdown/helper'
+require 'redmine/wiki_formatting/redcarpet_markdown/formatter'
+require 'redmine/wiki_formatting/redcarpet_markdown/helper'


 Redmine::Plugin.register :redmine_redcarpet_formatter do
```

```diff
   description 'Markdown wiki formatting by Redcarpet for Redmine'
   version '2.1'

-  wiki_format_provider 'markdown', Redmine::WikiFormatting::Markdown::Formatter, Redmine::WikiFormatting::Markdown::Helper
+  wiki_format_provider 'redcarpet_markdown', Redmine::WikiFormatting::RedcarpetMarkdown::Formatter, Redmine::WikiFormatting::RedcarpetMarkdown::Helper

   settings :default => {
     'enable_hardwrap' => '1',
```

### `lib/redmine/wiki_formatting/markdown/formatter.rb` -> `lib/redmine/wiki_formatting/redcarpet_markdown/formatter.rb`

```diff
 module Redmine
   module WikiFormatting
-    module Markdown
+    module RedcarpetMarkdown
       class Formatter
         #    include ActionView::Helpers::TagHelper
```

### `lib/redmine/wiki_formatting/markdown/helper.rb` -> `lib/redmine/wiki_formatting/redcarpet_markdown/helper.rb`

```diff
 module Redmine
   module WikiFormatting
-    module Markdown
+    module RedcarpetMarkdown
       module Helper
         unloadable
```

どっちが対応すべきなの？
---------------------

実際に今後対策を取るとしたらどっちが修正すべきなのって話ですが、[プラグイン作者のご指摘](https://github.com/alminium/redmine_redcarpet_formatter/issues/34)のとおり、後発のRedmine本家側が名前の衝突を回避するなり、プラグインに対して要望を出すなりして対応すべきなんじゃないかと思います。

というか、フォーマッタをプラグインから登録できる仕組みなんだから、本家にフォーマッタを導入せずプラグイン化する方が正しい気がしますけどね。たぶんtextileがデフォルトなのは変わらないんでしょうし。

ちなみに、本家の方では[既にプラグインがあるという指摘](http://www.redmine.org/issues/15520#note-3)があったのに、誰も対応しなかったんですね…。
CodeIgniterでFatal error:


CodeIgniterでコード書いてて少しはまったのでメモ

モデルを使おうとしたら突如エラー
`Fatal error: Cannot redeclare class XXXX in`

不確定ですがどうやらモデル名とコントローラー名を同じにしていると起きるエラーみたい。

モデル名もコントローラー名も`user.php`という感じにしていましたが、`user_ctl.php`と`user_model.php`にファイル名を変更することでエラーが解消されました。
CentOSにtarからtmuxを導入する

# 環境
- root権限（rootでない場合は未検証）
- CentOS
- 導入済み
  - gcc
  - wget


# libevent導入

## CentOS 6系

### ~~古いlibeventを削除~~

``` bash
yum remove libevent libevent-devel libevent-headers
```

### 最新版をインストール

``` bash
yum install libevent2-devel
```

<!--
### 最新版をインストール

``` bash
cd /usr/local/src
wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
tar -xvf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable

./configure && make
make install
```

### OSにlibeventを認識させる

`libevent`を使えるようにするために、共用ライブラリに登録するか、リンクを作成します

- 共用ライブラリに登録する

```bash
echo "/usr/local/lib" > /etc/ld.so.conf.d/libevent.conf
ldconfig
```

- リンクを作成する
  - 32bitの場合  
```
ln -s /usr/local/lib/libevent-2.1.so.6 /usr/lib/libevent-2.1.so.6
```
  - 64bitの場合  
```
ln -s /usr/local/lib/libevent-2.1.so.5 /usr/lib64/libevent-2.1.so.6
```
-->

## CentOS 7系

```bash
yum install libevent-devel
```


# ncurses導入

```bash
yum install ncurses-devel
```


# tmuxをインストールする
今回は、tmux 2.7をインストール（2018/05/26最新）

``` bash
cd /usr/local/src
wget https://github.com/tmux/tmux/releases/download/2.7/tmux-2.7.tar.gz
tar -xvf tmux-2.7.tar.gz
cd tmux-2.7

./configure && make
make install
```


# 参考

1. [ターミナル多重化ソフト tmux を使う : まだプログラマーですが何か？](http://dotnsf.blog.jp/archives/3704913.html)
2. [Releases · tmux/tmux · GitHub](https://github.com/tmux/tmux/releases/)
【Rails】JbuilderでJSONPを返したい


[Jbuilder](https://github.com/rails/jbuilder)は **JSONP非対応**なので **[jpbuilder](https://github.com/bigjason/jpbuilder)**というgemを使う…のだが，トラップが多く半日ぐらいハマった．


# 対応手順

## gemのインストール
Gemfileに`gem 'jpbuilder'`追加．

## デフォルトのコールバック関数名の設定

initializer（`config/initilizers/jpbuilder.rb`とか）にデフォルトのコールバック関数名を書く．

```ruby:config/initilizers/jpbuilder.rb
JPbuilderHandler.default_callback = "myJsCallback"
```

## View側の対応

Viewの`.json.jbuilder`を`.json.jpbuilder`にリネームする．

（e.g. `show.json.jbuilder` → `show.json.jpbuilder`）

# 注意点

## 普通のJSONと使い分けたい場合

**デフォルトのコールバック関数名をnil**にする．

```ruby:config/initilizers/jpbuilder.rb
JPbuilderHandler.default_callback = nil
```

これでパラメータ`callback`でコールバック関数名を渡してあげたらJSONP，何も渡さなければJSONが返ってくるようになる．

## Jbuilderのpartialを使いたい場合

呼び出し元のファイル（親のファイル）は`.json.jpbuilder`に， **partialのファイル（子のファイル）は`.json.jbuilder`のままに**してあげないとmissing templateになっちゃう．


# 蛇足

[jpbuilder](https://github.com/bigjason/jpbuilder)作者曰く，

> I hope that in the future this can somehow be merged into the jbuilder core. However as of today, the project seems dead (20+ issues and last commit almost 5 months ago), so I am not going to put the effort into a pull request just yet.
<cite>[Using JSONP with Jbuilder => Productively Distracted](http://www.bigjason.com/blog/using-jsonp-with-rails-jbuilder)</cite>

だそうです．つらそう．
php.iniのtimezoneの設定

環境
apache 2 系
php 5.4
Linux Cent OS

最初の環境にphpを導入すると、timezone設定がされていない状態なので、phpの実行時にphpのtimezoneのエラーが生じる。

Warning: strtotime(): It is not safe to rely on the system's timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /var/www/html/cakephp/lib/Cake/Cache/CacheEngine.php on line 60

Warning: strtotime(): It is not safe to rely on the system's timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /var/www/html/cakephp/lib/Cake/Cache/CacheEngine.php on line 60

Cakephpの場合はこのエラーが出る。

Slimを導入したときも同様のエラーが出たが、timezoneの設定を変更したらSlimもCakeも同様に起動した。

参考→http://web-developers-solution.blogspot.jp/2011/07/time-zone-error-in-cake-php.html


http://kforce-ueda.hatenablog.com/entry/2014/01/22/095059


参照
php.iniの置き場所
http://www.obenri.com/_webserver/about_apache.html
相関係数について再考する

連続変数が 2 つ存在するとき、この関連性を検討する場合は **散布図 (scatter plot)** を描きます。これまで説明してきた通り散布図を描くためには [matplotlib](http://matplotlib.org/) や [R](http://www.r-project.org/) といったツールが有用です。

## 線形回帰再訪

[線形回帰と相関係数](http://qiita.com/ynakayama/items/d6e8513791b43f18d28b)の回で取り上げましたから復讐してみましょう。

```py3
import numpy as np
import matplotlib.pyplot as plt

# 2 つの連続変数
v1 = np.array([24, 27, 29, 34, 42, 43, 51])
v2 = np.array([236, 330, 375, 392, 460, 525, 578])

def phi(x): # ファイ係数を算出する、この場合は X=4
    return [1, x, x**2, x**3]

def f(w, x): #
    return np.dot(w, phi(x))

PHI = np.array([phi(x) for x in v2])
w = np.linalg.solve(np.dot(PHI.T, PHI), np.dot(PHI.T, v1))

ylist = np.arange(200, 600, 10)
xlist = [f(w, x) for x in ylist]

plt.xlim(20, 55)
plt.ylim(200, 600)
plt.xlabel('Age')
plt.ylabel('Price')
plt.plot(v1, v2, 'o', color="blue")
plt.plot(xlist, ylist, color="red")
plt.show()
plt.savefig("image.png")
```
![image2.png](https://qiita-image-store.s3.amazonaws.com/0/38501/06804ff0-5246-48b5-b789-9486976e4950.png)

連続変数の統計量は次のように求まります。これも[過去の記事](http://qiita.com/ynakayama/items/e41f592ad7fe02f23c1c)にありましたね。

| 項目 | 関数 | 値 |
|:--|:--|:--|
| v2 の平均 | np.average(v2) | 413.714285714 |
| v2 の分散 | np.var(v2) | 11725.3469388 |
| v2 の標準偏差 | np.std(v2) | 108.283641141 |
| v1 と v2 の相関係数 | np.corrcoef(v1, v2) | 0.96799293 |

変数 X (= v1) が増加すれば Y (= v2) も増加する というとき、正の相関と言います。この場合は正の相関があると言えます。

## 線形関係と相関係数

このように、ひとつの変数が変化すれば、もうひとつの変数も変化するという単調な変化を示すとき、この直線的な関係のことを **線形関係 (linear relationship)** と言います。

相関係数とは正確には **ピアソンの積率相関係数 (Pearson's product moment correlation coefficient)** と言います。相関係数というのは他にも一応あるのですが、一般的にはこのピアソンの積率相関係数を指すことがほとんどです。

また散布図を作成したとき、この[直交座標系](http://ja.wikipedia.org/wiki/%E7%9B%B4%E4%BA%A4%E5%BA%A7%E6%A8%99%E7%B3%BB)の右上を第 1 象限と言います。同様に左上は第 2 象限、左下は第 3 象限、右下は第 4 象限と言います。散布図全体として第 1 象限と第 3 象限に分布が多い場合は偏差の積の合計値が正の方向に大きいとなるわけです。

**共分散 (covariance)** という数値は連続変数同士の線形関係の強さと方向を示す数値であり、次の式で示されます。

```math
Cov(X, Y) = \frac {\sum (Y_i - \overline{Y})(X_i - \overline{X})} {N - 1}
```

積率相関係数は共分散を使い X と Y の標準偏差 σ で補正することで算出できます。

```math
r_{xy} = \frac {Cov(X, Y)} {X の \sigma × Y の \sigma}
```

## まとめ

相関係数についてあらためて整理し補足しました。 2 変数間にまったく線形関係がないという帰無仮説をたてたとき、積率相関係数の検定が必要となります。この場合、帰無仮説では母相関が 0 であり、ひとつの変数の値が変わっても他方の変数の値が変化しない独立の状態を仮定します。標本データについて独立の状態からの解離度合いから、母集団における相関係数が 0 かそうでないかを検定するわけです。

## 参考

社会統計学入門
http://www.amazon.co.jp/dp/4595313705

ベイズ線形回帰を実装してみよう
http://gihyo.jp/dev/serial/01/machine-learning/0014
まだまだ増殖中！iOSの開発をもっと劇的に改善する最新のwebサービス、開発ツール集2

by @mixiappwchr

# dev tools

## Origami







![スクリーンショット 2014-04-07 10.10.20_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/dc19df20-d275-14be-2b17-d8dfb3e41c74.png)

http://facebook.github.io/origami/


facebook製のQuartz ComposerでUIモックが作れるというかっこいい以外何も言えないツールです。サンプルがfacebookタイムラインです


## PonyDebugger
![スクリーンショット 2014-04-07 9.55.29_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/8308436a-f3b0-5f76-ee10-8230376124cd.png)

https://github.com/square/PonyDebugger

square製のnetwork,ui,coredataなどのDebuggingができるツールです。ちゃんとまだ使ってないですが、ブラウザのdebug consoleに近い感じでつかえるので便利そうです。
ただ現状書いてあるinstall方法だとおちてしまうので,治るまでは以下のようにするとよさそう




```bash
curl -s https://cloud.github.com/downloads/square/PonyDebugger/bootstrap-ponyd.py |   python - --ponyd-symlink=/usr/local/bin/ponyd ~/Library/PonyDebugger
```

これをやるとbybonjour installで落ちるので


```bash
source ~/Library/PonyDebugger/bin/activate
 pip install -U -e git+https://github.com/square/PonyDebugger.git#egg=ponydebugger  --allow-external pybonjour --allow-unverified pybonjour
```
手動でオプションつけて再開


```bash
 ~/Library/PonyDebugger/bin/ponyd update-devtools
```
devtool入れろと言われるので入れる

あとは導入して使ってみてください！

![NetworkDebugging.png](https://qiita-image-store.s3.amazonaws.com/0/37731/9731ab0b-18a3-e628-4bd9-d70c0881f06e.png)

 
# Injection tool
Injection toolがまだまだあったので紹介。そのうち比較します。

## dyci
![スクリーンショット 2014-04-07 10.19.58_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/03e031a0-2dad-276f-360b-9fd151c38068.png)

https://github.com/DyCI/dyci-main


## RestartLessOften
![スクリーンショット 2014-04-07 10.17.23_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/e34ba4e1-c1c7-f1e7-94b7-133c1fab05de.png)

https://github.com/mikr/RestartLessOften



# Analysis
まだまだ解析サービスは増えていきそうです。

## MobileDevHQ
![スクリーンショット 2014-04-07 10.15.29_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/9d32129c-3c77-b22e-6b1e-7cf3ef175539.png)

http://www.mobiledevhq.com/

キーワードの解析などもやってくれる解析サービス。ただ現状は機能がUSに特化してるので日本国内だと使いづらそうですが、今後にきたい

 
# AppCode
![スクリーンショット 2014-04-07 10.15.46_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/fb742e0b-afcd-eb00-2939-14fecda7ee26.png)

http://www.appcodes.com/

こちらはキーワードの最適化に特化したASOツール。キーワードはうまく調整できると地味に効果高いです。有料なのが残念。

# AppReviewMe
![スクリーンショット 2014-04-08 10.31.23_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/1cd5880e-5a4a-4d40-8687-fa8ddac00964.png)

https://appreview.me/
カルマというポイントを貯めることで開発者同士でレビューをつけ合うサービスという結構グレーなサービスですが、発送は面白く、結構レビューがつきます。
日本人がほとんどいないため海外Storeでのレビューがつくことになります。





##### appwchr post
----
[iOSの開発をする上で絶対に使うべき！外せない！webサービス、開発ツール集]
(http://qiita.com/appwatcher/items/07a3babcb9b6cefb307e)

[iOSでこんなアプリ,こんな機能を作りたかったらこれを見ろ！作りたいアプリに対応するクラス、フレームワーク、ライブラリのまとめ！]
(http://qiita.com/appwatcher/items/b02255026a3ee6d95142)

[注目のiBeacomなどの波に乗り遅れないために！iOSのBluetooth開発を容易にするライブラリを書きました。]
(http://qiita.com/appwatcher/items/7491beffd7260b713542)


[まだまだあった！iOSの開発を劇的に改善する最新のwebサービス、開発ツール集１]
(http://qiita.com/appwatcher/items/f0024fe2ac34da345f04)

[スパゲッティから脱出！iOS開発における遷移の問題をすっきり解決する便利ルーティングライブラリをご紹介]
(http://qiita.com/appwatcher/items/259e8d13fff0547e90af)

[appwatcher - iOS Dev Service]
(http://app.wchr.jp)
ChocolateyでGitをインストール

社内にGitLabを構築してみたのですが、あんまり利用されないのでGitの布教から初めてみます。とりあえずインストールだ！

# Chocolateyをインストールする

[Chocolatey]("https://chocolatey.org/")はWindows向けのパッケージ管理システムです。
コマンドプロンプトを立ち上げて次のコマンドを入力します。

``` cmd
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin
```

# Gitをインストールする
Chocolateyを利用してGitをインストールします。デフォルトだとProgram Filesあたりにインストールされます。

``` cmd
cinst git
```

スタートメニューにGit BashとGit GUIができていればOKです。